From 0a7deac74b4cadffd512dc89c8a3743d0f9f84a3 Mon Sep 17 00:00:00 2001 From: evercarlos Date: Wed, 7 Aug 2024 11:04:25 -0500 Subject: [PATCH 01/11] Development of transaction and anti-fraud microservices with hexagonal architecture --- README.md | 139 +- YAPECHALLENGE.md | 82 + docker-compose.yml | 82 +- init.sql | 32 + micro-antifraude/.eslintrc.js | 25 + micro-antifraude/.gitignore | 56 + micro-antifraude/.prettierrc | 4 + micro-antifraude/Dockerfile | 20 + micro-antifraude/README.md | 21 + micro-antifraude/application-local.properties | 11 + micro-antifraude/application-prd.properties | 12 + micro-antifraude/nest-cli.json | 8 + micro-antifraude/package-lock.json | 9113 ++++++++++++++++ micro-antifraude/package.json | 77 + micro-antifraude/src/app.module.ts | 12 + .../src/application/application.module.ts | 15 + .../src/application/common/kafka.config.ts | 15 + .../controller/controller.module.ts | 42 + .../controller/v1/transaction.controller.ts | 23 + micro-antifraude/src/domain/domain.module.ts | 20 + .../src/domain/enum/transaction_status.ts | 8 + micro-antifraude/src/domain/index.ts | 0 micro-antifraude/src/domain/model/index.ts | 0 .../src/domain/model/transaction-reponse.ts | 16 + .../src/domain/model/transaction.ts | 12 + micro-antifraude/src/domain/port/index.ts | 1 + .../src/domain/port/transaction.port.ts | 12 + micro-antifraude/src/domain/service/index.ts | 1 + .../src/domain/service/transaction.service.ts | 35 + .../infraestructure/adapter/adapter.module.ts | 14 + .../secondary/secondary-adapter.module.ts | 12 + .../adapter/secondary/transaction.adapter.ts | 31 + .../config-server/config-server.decorador.ts | 24 + .../config/config-server/env/environments.ts | 18 + .../config/kafka/helper.config.ts | 24 + .../config/kafka/kafka.config.ts | 16 + .../infraestructure/config/shared.module.ts | 9 + .../config/sql/pg-db.config.ts | 20 + .../config/sql/postgresql.module.ts | 22 + .../entity/transaction.entity.ts | 26 + .../infraestructure/infraestructure.module.ts | 30 + .../publisher/transaction.publisher.ts | 28 + .../subscriber/transaction.subscriber.ts | 51 + micro-antifraude/src/main.ts | 26 + micro-antifraude/test/app.e2e-spec.ts | 24 + micro-antifraude/test/jest-e2e.json | 9 + micro-antifraude/tsconfig.build.json | 4 + micro-antifraude/tsconfig.json | 21 + micro-transaction/.eslintrc.js | 25 + micro-transaction/.gitignore | 56 + micro-transaction/.prettierrc | 4 + micro-transaction/Dockerfile | 19 + micro-transaction/README.md | 32 + .../application-local.properties | 17 + micro-transaction/application-prd.properties | 19 + micro-transaction/nest-cli.json | 8 + micro-transaction/package-lock.json | 9148 +++++++++++++++++ micro-transaction/package.json | 79 + micro-transaction/src/app.module.ts | 12 + .../src/application/application.module.ts | 15 + .../src/application/common/kafka.config.ts | 16 + .../controller/controller.module.ts | 40 + .../controller/v1/transaction.controller.ts | 68 + micro-transaction/src/domain/domain.module.ts | 20 + .../src/domain/enum/transaction_status.ts | 8 + micro-transaction/src/domain/index.ts | 0 micro-transaction/src/domain/model/index.ts | 0 .../src/domain/model/transaction-response.ts | 30 + .../src/domain/model/transaction-status.ts | 5 + .../src/domain/model/transaction-type.ts | 5 + .../src/domain/model/transaction.ts | 39 + micro-transaction/src/domain/port/index.ts | 1 + .../src/domain/port/transaction.port.ts | 15 + micro-transaction/src/domain/service/index.ts | 1 + .../src/domain/service/transaction.service.ts | 50 + .../infraestructure/adapter/adapter.module.ts | 14 + .../secondary/secondary-adapter.module.ts | 21 + .../adapter/secondary/transaction.adapter.ts | 49 + .../config-server/config-server.decorador.ts | 24 + .../config/config-server/env/environments.ts | 18 + .../config/kafka/helper.config.ts | 28 + .../config/kafka/kafka.config.ts | 16 + .../infraestructure/config/shared.module.ts | 11 + .../config/sql/pg-db.config.ts | 24 + .../config/sql/postgresql.module.ts | 26 + .../entity/transaction.entity.ts | 33 + .../infraestructure/infraestructure.module.ts | 27 + .../mapper/transaction.mapper.ts | 76 + .../publisher/transaction.publisher.ts | 24 + .../repository/transaction.repository.ts | 70 + .../subscriber/transaction.subscriber.ts | 29 + micro-transaction/src/main.ts | 34 + micro-transaction/test/app.e2e-spec.ts | 24 + micro-transaction/test/jest-e2e.json | 9 + micro-transaction/tsconfig.build.json | 4 + micro-transaction/tsconfig.json | 21 + resources/arq.png | Bin 0 -> 53733 bytes resources/create_transaction.png | Bin 0 -> 86550 bytes resources/find_id_transaction.png | Bin 0 -> 68916 bytes resources/list_transaction.png | Bin 0 -> 111255 bytes 100 files changed, 20528 insertions(+), 89 deletions(-) create mode 100644 YAPECHALLENGE.md create mode 100644 init.sql create mode 100644 micro-antifraude/.eslintrc.js create mode 100644 micro-antifraude/.gitignore create mode 100644 micro-antifraude/.prettierrc create mode 100644 micro-antifraude/Dockerfile create mode 100644 micro-antifraude/README.md create mode 100644 micro-antifraude/application-local.properties create mode 100644 micro-antifraude/application-prd.properties create mode 100644 micro-antifraude/nest-cli.json create mode 100644 micro-antifraude/package-lock.json create mode 100644 micro-antifraude/package.json create mode 100644 micro-antifraude/src/app.module.ts create mode 100644 micro-antifraude/src/application/application.module.ts create mode 100644 micro-antifraude/src/application/common/kafka.config.ts create mode 100644 micro-antifraude/src/application/controller/controller.module.ts create mode 100644 micro-antifraude/src/application/controller/v1/transaction.controller.ts create mode 100644 micro-antifraude/src/domain/domain.module.ts create mode 100644 micro-antifraude/src/domain/enum/transaction_status.ts create mode 100644 micro-antifraude/src/domain/index.ts create mode 100644 micro-antifraude/src/domain/model/index.ts create mode 100644 micro-antifraude/src/domain/model/transaction-reponse.ts create mode 100644 micro-antifraude/src/domain/model/transaction.ts create mode 100644 micro-antifraude/src/domain/port/index.ts create mode 100644 micro-antifraude/src/domain/port/transaction.port.ts create mode 100644 micro-antifraude/src/domain/service/index.ts create mode 100644 micro-antifraude/src/domain/service/transaction.service.ts create mode 100644 micro-antifraude/src/infraestructure/adapter/adapter.module.ts create mode 100644 micro-antifraude/src/infraestructure/adapter/secondary/secondary-adapter.module.ts create mode 100644 micro-antifraude/src/infraestructure/adapter/secondary/transaction.adapter.ts create mode 100644 micro-antifraude/src/infraestructure/config/config-server/config-server.decorador.ts create mode 100644 micro-antifraude/src/infraestructure/config/config-server/env/environments.ts create mode 100644 micro-antifraude/src/infraestructure/config/kafka/helper.config.ts create mode 100644 micro-antifraude/src/infraestructure/config/kafka/kafka.config.ts create mode 100644 micro-antifraude/src/infraestructure/config/shared.module.ts create mode 100644 micro-antifraude/src/infraestructure/config/sql/pg-db.config.ts create mode 100644 micro-antifraude/src/infraestructure/config/sql/postgresql.module.ts create mode 100644 micro-antifraude/src/infraestructure/entity/transaction.entity.ts create mode 100644 micro-antifraude/src/infraestructure/infraestructure.module.ts create mode 100644 micro-antifraude/src/infraestructure/publisher/transaction.publisher.ts create mode 100644 micro-antifraude/src/infraestructure/subscriber/transaction.subscriber.ts create mode 100644 micro-antifraude/src/main.ts create mode 100644 micro-antifraude/test/app.e2e-spec.ts create mode 100644 micro-antifraude/test/jest-e2e.json create mode 100644 micro-antifraude/tsconfig.build.json create mode 100644 micro-antifraude/tsconfig.json create mode 100644 micro-transaction/.eslintrc.js create mode 100644 micro-transaction/.gitignore create mode 100644 micro-transaction/.prettierrc create mode 100644 micro-transaction/Dockerfile create mode 100644 micro-transaction/README.md create mode 100644 micro-transaction/application-local.properties create mode 100644 micro-transaction/application-prd.properties create mode 100644 micro-transaction/nest-cli.json create mode 100644 micro-transaction/package-lock.json create mode 100644 micro-transaction/package.json create mode 100644 micro-transaction/src/app.module.ts create mode 100644 micro-transaction/src/application/application.module.ts create mode 100644 micro-transaction/src/application/common/kafka.config.ts create mode 100644 micro-transaction/src/application/controller/controller.module.ts create mode 100644 micro-transaction/src/application/controller/v1/transaction.controller.ts create mode 100644 micro-transaction/src/domain/domain.module.ts create mode 100644 micro-transaction/src/domain/enum/transaction_status.ts create mode 100644 micro-transaction/src/domain/index.ts create mode 100644 micro-transaction/src/domain/model/index.ts create mode 100644 micro-transaction/src/domain/model/transaction-response.ts create mode 100644 micro-transaction/src/domain/model/transaction-status.ts create mode 100644 micro-transaction/src/domain/model/transaction-type.ts create mode 100644 micro-transaction/src/domain/model/transaction.ts create mode 100644 micro-transaction/src/domain/port/index.ts create mode 100644 micro-transaction/src/domain/port/transaction.port.ts create mode 100644 micro-transaction/src/domain/service/index.ts create mode 100644 micro-transaction/src/domain/service/transaction.service.ts create mode 100644 micro-transaction/src/infraestructure/adapter/adapter.module.ts create mode 100644 micro-transaction/src/infraestructure/adapter/secondary/secondary-adapter.module.ts create mode 100644 micro-transaction/src/infraestructure/adapter/secondary/transaction.adapter.ts create mode 100644 micro-transaction/src/infraestructure/config/config-server/config-server.decorador.ts create mode 100644 micro-transaction/src/infraestructure/config/config-server/env/environments.ts create mode 100644 micro-transaction/src/infraestructure/config/kafka/helper.config.ts create mode 100644 micro-transaction/src/infraestructure/config/kafka/kafka.config.ts create mode 100644 micro-transaction/src/infraestructure/config/shared.module.ts create mode 100644 micro-transaction/src/infraestructure/config/sql/pg-db.config.ts create mode 100644 micro-transaction/src/infraestructure/config/sql/postgresql.module.ts create mode 100644 micro-transaction/src/infraestructure/entity/transaction.entity.ts create mode 100644 micro-transaction/src/infraestructure/infraestructure.module.ts create mode 100644 micro-transaction/src/infraestructure/mapper/transaction.mapper.ts create mode 100644 micro-transaction/src/infraestructure/publisher/transaction.publisher.ts create mode 100644 micro-transaction/src/infraestructure/repository/transaction.repository.ts create mode 100644 micro-transaction/src/infraestructure/subscriber/transaction.subscriber.ts create mode 100644 micro-transaction/src/main.ts create mode 100644 micro-transaction/test/app.e2e-spec.ts create mode 100644 micro-transaction/test/jest-e2e.json create mode 100644 micro-transaction/tsconfig.build.json create mode 100644 micro-transaction/tsconfig.json create mode 100644 resources/arq.png create mode 100644 resources/create_transaction.png create mode 100644 resources/find_id_transaction.png create mode 100644 resources/list_transaction.png diff --git a/README.md b/README.md index b067a71026..6684ee19d9 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,67 @@ -# Yape Code Challenge :rocket: - -Our code challenge will let you marvel us with your Jedi coding skills :smile:. - -Don't forget that the proper way to submit your work is to fork the repo and create a PR :wink: ... have fun !! - -- [Problem](#problem) -- [Tech Stack](#tech_stack) -- [Send us your challenge](#send_us_your_challenge) - -# Problem - -Every time a financial transaction is created it must be validated by our anti-fraud microservice and then the same service sends a message back to update the transaction status. -For now, we have only three transaction statuses: - -
    -
  1. pending
  2. -
  3. approved
  4. -
  5. rejected
  6. -
- -Every transaction with a value greater than 1000 should be rejected. - -```mermaid - flowchart LR - Transaction -- Save Transaction with pending Status --> transactionDatabase[(Database)] - Transaction --Send transaction Created event--> Anti-Fraud - Anti-Fraud -- Send transaction Status Approved event--> Transaction - Anti-Fraud -- Send transaction Status Rejected event--> Transaction - Transaction -- Update transaction Status event--> transactionDatabase[(Database)] -``` - -# Tech Stack - -
    -
  1. Node. You can use any framework you want (i.e. Nestjs with an ORM like TypeOrm or Prisma)
  2. -
  3. Any database
  4. -
  5. Kafka
  6. -
- -We do provide a `Dockerfile` to help you get started with a dev environment. - -You must have two resources: - -1. Resource to create a transaction that must containt: - -```json -{ - "accountExternalIdDebit": "Guid", - "accountExternalIdCredit": "Guid", +

+ Nest Logo +

+ + +# Aplicacion de Transaciones con arquitectura hexagonal +- nodejs: v 18.20.4 +## Estructura del Proyecto Basado en Aplication, Domain, Infrastructure +1) ``Capa Application`` +2) ``Capa de Dominio (núcleo-core)`` +3) ``Capa de Infraestructura`` +- La aplicacipon se subdivide en dos microservicios (micro-intifraude, micro-transaction). Está conformado por nestjs, kafka y postgreSQL +- Cada microservicio tiene un ```application-local.properties```, donde se define lo valores de las variables. La intención de crear este tipo archivo + es; para la centralización de las variables y configurar en futuras actualizaciones con keyvalues de azure, aws + + +![](./resources/arq.png) + +## Instalación y Prueba +### Docker +- ```Requisitos```: +- Se usará las configuraciones de application-prd.properties (no actualizar) +- ```Instalación```: +- Es necesario tener docker en la máquina personal. +- Para iniciar los microservicios (micro-transaction, micro-antifraude) ejecutar el siguiente comando y verificar que los componentes estén en ejecución: ```docker-compose up -d``` + +### Local (Sin interacción con docker) +- ```Requisitos```: +1) Tener instalado postgreSQL. Si desean probar con la db del docker-container cambiar los valores en ```application-local.properties``` +- ```Instalar localmente```: + 1) Ingresar a a cada microservicio (micro-intifraude, micro-transaction) y ejecutar: ``npm install`` +- ```Probar localemente```: + 1) Ingresar a a cada microservicio (micro-intifraude, micro-transaction) y ejecutar ``npm run start:dev`` + +## Prueba +### Ingresar en un navegador, postman. agregar el request: + - crear una transaccion + ```bash + curl --location 'localhost:3000/transactions' \ +--header 'Content-Type: application/json' \ +--data '{ + "accountExternalIdDebit": "{{$guid}}", + "accountExternalIdCredit": "{{$guid}}", "tranferTypeId": 1, - "value": 120 -} + "value": 20 +}' ``` + - listar transacciones -2. Resource to retrieve a transaction - -```json -{ - "transactionExternalId": "Guid", - "transactionType": { - "name": "" - }, - "transactionStatus": { - "name": "" - }, - "value": 120, - "createdAt": "Date" -} +```bash +curl --location 'localhost:3000/transactions' ``` -## Optional - -You can use any approach to store transaction data but you should consider that we may deal with high volume scenarios where we have a huge amount of writes and reads for the same data at the same time. How would you tackle this requirement? - -You can use Graphql; - -# Send us your challenge - -When you finish your challenge, after forking a repository, you **must** open a pull request to our repository. There are no limitations to the implementation, you can follow the programming paradigm, modularization, and style that you feel is the most appropriate solution. - -If you have any questions, please let us know. + - listar una transaccion por id. Reeemplazar el valor de id a buscar +```bash +curl --location 'localhost:3000/transactions/98836e50-c312-4f8b-b6c9-1bba2e5f97a1' +``` +## Ejemplo +### Creación de una transacción +![](./resources/create_transaction.png) +### Listar una transacción por id +![](./resources/find_id_transaction.png) +### Listar transacciones +![](./resources/list_transaction.png) + +## Autor +[EVER CARLOS ROJAS](https://github.com/evercarlos) \ No newline at end of file diff --git a/YAPECHALLENGE.md b/YAPECHALLENGE.md new file mode 100644 index 0000000000..b067a71026 --- /dev/null +++ b/YAPECHALLENGE.md @@ -0,0 +1,82 @@ +# Yape Code Challenge :rocket: + +Our code challenge will let you marvel us with your Jedi coding skills :smile:. + +Don't forget that the proper way to submit your work is to fork the repo and create a PR :wink: ... have fun !! + +- [Problem](#problem) +- [Tech Stack](#tech_stack) +- [Send us your challenge](#send_us_your_challenge) + +# Problem + +Every time a financial transaction is created it must be validated by our anti-fraud microservice and then the same service sends a message back to update the transaction status. +For now, we have only three transaction statuses: + +
    +
  1. pending
  2. +
  3. approved
  4. +
  5. rejected
  6. +
+ +Every transaction with a value greater than 1000 should be rejected. + +```mermaid + flowchart LR + Transaction -- Save Transaction with pending Status --> transactionDatabase[(Database)] + Transaction --Send transaction Created event--> Anti-Fraud + Anti-Fraud -- Send transaction Status Approved event--> Transaction + Anti-Fraud -- Send transaction Status Rejected event--> Transaction + Transaction -- Update transaction Status event--> transactionDatabase[(Database)] +``` + +# Tech Stack + +
    +
  1. Node. You can use any framework you want (i.e. Nestjs with an ORM like TypeOrm or Prisma)
  2. +
  3. Any database
  4. +
  5. Kafka
  6. +
+ +We do provide a `Dockerfile` to help you get started with a dev environment. + +You must have two resources: + +1. Resource to create a transaction that must containt: + +```json +{ + "accountExternalIdDebit": "Guid", + "accountExternalIdCredit": "Guid", + "tranferTypeId": 1, + "value": 120 +} +``` + +2. Resource to retrieve a transaction + +```json +{ + "transactionExternalId": "Guid", + "transactionType": { + "name": "" + }, + "transactionStatus": { + "name": "" + }, + "value": 120, + "createdAt": "Date" +} +``` + +## Optional + +You can use any approach to store transaction data but you should consider that we may deal with high volume scenarios where we have a huge amount of writes and reads for the same data at the same time. How would you tackle this requirement? + +You can use Graphql; + +# Send us your challenge + +When you finish your challenge, after forking a repository, you **must** open a pull request to our repository. There are no limitations to the implementation, you can follow the programming paradigm, modularization, and style that you feel is the most appropriate solution. + +If you have any questions, please let us know. diff --git a/docker-compose.yml b/docker-compose.yml index 0e8807f21c..9f95480185 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,25 +1,83 @@ version: "3.7" + services: postgres: image: postgres:14 + container_name: postgres ports: - - "5432:5432" + - "5433:5432" environment: - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: dbtransaction + volumes: + - ./init.sql:/docker-entrypoint-initdb.d/init.sql + networks: + - yape_challenge + zookeeper: - image: confluentinc/cp-zookeeper:5.5.3 + container_name: zookeeper + image: confluentinc/cp-zookeeper:7.4.0 environment: ZOOKEEPER_CLIENT_PORT: 2181 + ZOOKEEPER_TICK_TIME: 2000 + restart: always + networks: + - yape_challenge + + # broker N° 1 kafka: - image: confluentinc/cp-enterprise-kafka:5.5.3 - depends_on: [zookeeper] + container_name: kafka + image: confluentinc/cp-kafka:7.4.0 + depends_on: + - zookeeper + ports: + - "9092:9092" environment: - KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181" - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_BROKER_ID: 1 - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - KAFKA_JMX_PORT: 9991 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 # red externa: 9092 ; red interna: 29092 + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 # 2 // dos brokers o servicews + KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 + KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 # 2 // dos brokers o servicews + restart: always + networks: + - yape_challenge + + micro-transaction: + container_name: micro-transaction + depends_on: + - kafka + - postgres + build: + context: ./micro-transaction + dockerfile: Dockerfile + args: + - ENVIRONMENT:prd + environment: # para verificar que enviante usar local o prd + - ENVIRONMENT=prd + ports: + - "3000:3000" + networks: + - yape_challenge + + micro-antifraude: + container_name: micro-antifraude + depends_on: + - kafka + build: + context: ./micro-antifraude + dockerfile: Dockerfile + args: + - ENVIRONMENT:prd + environment: # para verificar que enviante usar local o prd + - ENVIRONMENT=prd ports: - - 9092:9092 + - "3001:3000" + networks: + - yape_challenge + +networks: + yape_challenge: + driver: bridge diff --git a/init.sql b/init.sql new file mode 100644 index 0000000000..03d2458336 --- /dev/null +++ b/init.sql @@ -0,0 +1,32 @@ +-- Conectar a PostgreSQL +--psql -U postgres + +-- Create database if it does not exist +DO $$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = 'dbtransaction') THEN + CREATE DATABASE dbtransaction; + END IF; +END +$$; + +-- Conectarse a la base de datos recién creada +\c dbtransaction + +-- Crear las tablas y permisos necesarios +CREATE TABLE public.transacciones +( + id_debit text COLLATE pg_catalog."default", + id_credit text COLLATE pg_catalog."default", + id_transfer_type integer, + created_at timestamp without time zone DEFAULT now(), + state boolean DEFAULT true, + transaction_status character varying(100) COLLATE pg_catalog."default", + id uuid NOT NULL, + valor numeric(18,0), + CONSTRAINT transacciones_pkey PRIMARY KEY (id) +); + +-- Conceder permisos +GRANT TEMPORARY, CONNECT ON DATABASE dbtransaction TO PUBLIC; +GRANT ALL ON DATABASE dbtransaction TO postgres; diff --git a/micro-antifraude/.eslintrc.js b/micro-antifraude/.eslintrc.js new file mode 100644 index 0000000000..259de13c73 --- /dev/null +++ b/micro-antifraude/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + tsconfigRootDir: __dirname, + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + ], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, +}; diff --git a/micro-antifraude/.gitignore b/micro-antifraude/.gitignore new file mode 100644 index 0000000000..4b56acfbeb --- /dev/null +++ b/micro-antifraude/.gitignore @@ -0,0 +1,56 @@ +# compiled output +/dist +/node_modules +/build + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# OS +.DS_Store + +# Tests +/coverage +/.nyc_output + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# temp directory +.temp +.tmp + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/micro-antifraude/.prettierrc b/micro-antifraude/.prettierrc new file mode 100644 index 0000000000..dcb72794f5 --- /dev/null +++ b/micro-antifraude/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/micro-antifraude/Dockerfile b/micro-antifraude/Dockerfile new file mode 100644 index 0000000000..4d745251c5 --- /dev/null +++ b/micro-antifraude/Dockerfile @@ -0,0 +1,20 @@ +# Usa una imagen base de Node.js +FROM node:18.20.4-alpine3.19 + +# Crea y establece el directorio de trabajo +WORKDIR /app + +# Copia los archivos de la aplicación +COPY . . + +# Instala las dependencias +RUN npm install + +# Compila la aplicación +RUN npm run build + +# Expone el puerto en el que la aplicación se ejecutará +EXPOSE 3000 + +# Comando para ejecutar la aplicación +CMD ["npm", "run", "start:prod"] diff --git a/micro-antifraude/README.md b/micro-antifraude/README.md new file mode 100644 index 0000000000..207e89a404 --- /dev/null +++ b/micro-antifraude/README.md @@ -0,0 +1,21 @@ +

+ Nest Logo +

+ + +# Microservicios antifraude aplicando arquitectura hexagonal +## Requisitos +- nodejs: v 18.20.4 + +## Estructura del Proyecto Basado en Aplication, Domain, Infrastructure +1) ``Capa Application`` +2) ``Capa de Dominio (núcleo-core)`` +3) ``Capa de Infraestructura`` + +## Running the app +- npm run start:dev + +```bash +# watch mode +$ npm run start:dev +``` diff --git a/micro-antifraude/application-local.properties b/micro-antifraude/application-local.properties new file mode 100644 index 0000000000..530c61ac0c --- /dev/null +++ b/micro-antifraude/application-local.properties @@ -0,0 +1,11 @@ +## Este archivo se crea con el objetivo de usar en el futuro keyValues + +environment.local = true + +config.graphql.env.access=true + +########### KAFKA ########### +#######para un solo broker####### +kafka.service.name = KAFKA +kafka.brokers.url = localhost:9092 +kafka.brokers.group.id = my-group-id-transaction-1 diff --git a/micro-antifraude/application-prd.properties b/micro-antifraude/application-prd.properties new file mode 100644 index 0000000000..ace64b4449 --- /dev/null +++ b/micro-antifraude/application-prd.properties @@ -0,0 +1,12 @@ +## Este archivo se crea con el objetivo de usar en el futuro keyValues + +environment.local = true + +config.graphql.env.access=true + +########### KAFKA ########### +#######para un solo broker####### +kafka.service.name = KAFKA +#localhost:9092 +kafka.brokers.url = kafka:29092 +kafka.brokers.group.id = my-group-id-transaction-1 diff --git a/micro-antifraude/nest-cli.json b/micro-antifraude/nest-cli.json new file mode 100644 index 0000000000..f9aa683b1a --- /dev/null +++ b/micro-antifraude/nest-cli.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "deleteOutDir": true + } +} diff --git a/micro-antifraude/package-lock.json b/micro-antifraude/package-lock.json new file mode 100644 index 0000000000..14450446ce --- /dev/null +++ b/micro-antifraude/package-lock.json @@ -0,0 +1,9113 @@ +{ + "name": "micro-transaction", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "micro-transaction", + "version": "0.0.1", + "license": "UNLICENSED", + "dependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/config": "^3.2.3", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.3.10", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/typeorm": "^10.0.2", + "dotenv": "^16.4.5", + "kafkajs": "^2.2.4", + "pg": "^8.12.0", + "reflect-metadata": "^0.2.0", + "rxjs": "^7.8.1", + "typeorm": "^0.3.20", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@nestjs/cli": "^10.0.0", + "@nestjs/schematics": "^10.0.0", + "@nestjs/testing": "^10.0.0", + "@types/express": "^4.17.17", + "@types/jest": "^29.5.2", + "@types/node": "^20.3.1", + "@types/supertest": "^6.0.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.42.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^29.5.0", + "prettier": "^3.0.0", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-jest": "^29.1.0", + "ts-loader": "^9.4.3", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.1.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz", + "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz", + "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.8.tgz", + "integrity": "sha512-TjmiwWJarX7oqvNiRAroQ5/LeKUatxBOCNEuKXO/PV8e7pn/Hr/BqfFm+UcYrQoFdZplmtNAfqmbqgVziKvCpA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "ansi-colors": "4.1.3", + "inquirer": "9.2.15", + "symbol-observable": "4.0.0", + "yargs-parser": "21.1.1" + }, + "bin": { + "schematics": "bin/schematics.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "devOptional": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "devOptional": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nestjs/cli": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.2.tgz", + "integrity": "sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "@angular-devkit/schematics-cli": "17.3.8", + "@nestjs/schematics": "^10.0.1", + "chalk": "4.1.2", + "chokidar": "3.6.0", + "cli-table3": "0.6.5", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.4.2", + "inquirer": "8.2.6", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.2.0", + "tsconfig-paths-webpack-plugin": "4.1.0", + "typescript": "5.3.3", + "webpack": "5.92.1", + "webpack-node-externals": "3.0.0" + }, + "bin": { + "nest": "bin/nest.js" + }, + "engines": { + "node": ">= 16.14" + }, + "peerDependencies": { + "@swc/cli": "^0.1.62 || ^0.3.0 || ^0.4.0", + "@swc/core": "^1.3.62" + }, + "peerDependenciesMeta": { + "@swc/cli": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@nestjs/cli/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nestjs/cli/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nestjs/cli/node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@nestjs/cli/node_modules/webpack": { + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@nestjs/common": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.10.tgz", + "integrity": "sha512-H8k0jZtxk1IdtErGDmxFRy0PfcOAUg41Prrqpx76DQusGGJjsaovs1zjXVD1rZWaVYchfT1uczJ6L4Kio10VNg==", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.3", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/config": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.3.tgz", + "integrity": "sha512-p6yv/CvoBewJ72mBq4NXgOAi2rSQNWx3a+IMJLVKS2uiwFCOQQuiIatGwq6MRjXV3Jr+B41iUO8FIf4xBrZ4/w==", + "dependencies": { + "dotenv": "16.4.5", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "rxjs": "^7.1.0" + } + }, + "node_modules/@nestjs/core": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.10.tgz", + "integrity": "sha512-ZbQ4jovQyzHtCGCrzK5NdtW1SYO2fHSsgSY1+/9WdruYCUra+JDkWEXgZ4M3Hv480Dl3OXehAmY1wCOojeMyMQ==", + "hasInstallScript": true, + "dependencies": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "3.2.0", + "tslib": "2.6.3", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/websockets": "^10.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 + } + } + }, + "node_modules/@nestjs/microservices": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-10.3.10.tgz", + "integrity": "sha512-zZrilhZmXU2Ik5Usrcy4qEX262Uhvz0/9XlIdX6SRn8I39ns1EE9tAhEBmmkMwh7lsEikRFa4aaa05loi8Gsow==", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@grpc/grpc-js": "*", + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "amqp-connection-manager": "*", + "amqplib": "*", + "cache-manager": "*", + "ioredis": "*", + "kafkajs": "*", + "mqtt": "*", + "nats": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@grpc/grpc-js": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + }, + "amqp-connection-manager": { + "optional": true + }, + "amqplib": { + "optional": true + }, + "cache-manager": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "kafkajs": { + "optional": true + }, + "mqtt": { + "optional": true + }, + "nats": { + "optional": true + } + } + }, + "node_modules/@nestjs/platform-express": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.10.tgz", + "integrity": "sha512-wK2ow3CZI2KFqWeEpPmoR300OB6BcBLxARV1EiClJLCj4S1mZsoCmS0YWgpk3j1j6mo0SI8vNLi/cC2iZPEPQA==", + "dependencies": { + "body-parser": "1.20.2", + "cors": "2.8.5", + "express": "4.19.2", + "multer": "1.4.4-lts.1", + "tslib": "2.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0" + } + }, + "node_modules/@nestjs/schematics": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.3.tgz", + "integrity": "sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "comment-json": "4.2.3", + "jsonc-parser": "3.3.1", + "pluralize": "8.0.0" + }, + "peerDependencies": { + "typescript": ">=4.8.2" + } + }, + "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true + }, + "node_modules/@nestjs/testing": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.10.tgz", + "integrity": "sha512-i3HAtVQJijxNxJq1k39aelyJlyEIBRONys7IipH/4r8W0J+M1V+y5EKDOyi4j1SdNSb/vmNyWpZ2/ewZjl3kRA==", + "dev": true, + "dependencies": { + "tslib": "2.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + } + } + }, + "node_modules/@nestjs/typeorm": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz", + "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==", + "dependencies": { + "uuid": "9.0.1" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", + "reflect-metadata": "^0.1.13 || ^0.2.0", + "rxjs": "^7.2.0", + "typeorm": "^0.3.0" + } + }, + "node_modules/@nestjs/typeorm/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "devOptional": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", + "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/superagent": { + "version": "8.1.8", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.8.tgz", + "integrity": "sha512-nTqHJ2OTa7PFEpLahzSEEeFeqbMpmcN7OeayiOc7v+xk+/vyTKljRe+o4MPqSnPeRCMvtxuLG+5QqluUVQJOnA==", + "dev": true, + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/supertest": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", + "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "dev": true, + "dependencies": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "devOptional": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001647", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001647.tgz", + "integrity": "sha512-n83xdNiyeNcHpzWY+1aFbqCK7LuLfBricc4+alSQL2Xb6OR3XpnQAmlDG+pQcdTfiHRuLcQ96VOfrPSGiNJYSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/comment-json": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", + "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "dev": true, + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dayjs": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", + "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "engines": { + "node": ">=12" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^8.2.0", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "engines": { + "node": "*" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "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.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kafkajs": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-2.2.4.tgz", + "integrity": "sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pg": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "dependencies": { + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/supertest": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^9.0.1" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/synckit": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "29.2.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", + "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "devOptional": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "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 + } + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typeorm": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz", + "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==", + "dependencies": { + "@sqltools/formatter": "^1.2.5", + "app-root-path": "^3.1.0", + "buffer": "^6.0.3", + "chalk": "^4.1.2", + "cli-highlight": "^2.1.11", + "dayjs": "^1.11.9", + "debug": "^4.3.4", + "dotenv": "^16.0.3", + "glob": "^10.3.10", + "mkdirp": "^2.1.3", + "reflect-metadata": "^0.2.1", + "sha.js": "^2.4.11", + "tslib": "^2.5.0", + "uuid": "^9.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">=16.13.0" + }, + "funding": { + "url": "https://opencollective.com/typeorm" + }, + "peerDependencies": { + "@google-cloud/spanner": "^5.18.0", + "@sap/hana-client": "^2.12.25", + "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0", + "hdb-pool": "^0.1.6", + "ioredis": "^5.0.4", + "mongodb": "^5.8.0", + "mssql": "^9.1.1 || ^10.0.1", + "mysql2": "^2.2.5 || ^3.0.1", + "oracledb": "^6.3.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1 || ^4.0.0", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.3", + "ts-node": "^10.7.0", + "typeorm-aurora-data-api-driver": "^2.0.0" + }, + "peerDependenciesMeta": { + "@google-cloud/spanner": { + "optional": true + }, + "@sap/hana-client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "hdb-pool": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "redis": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typeorm-aurora-data-api-driver": { + "optional": true + } + } + }, + "node_modules/typeorm/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/typeorm/node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/micro-antifraude/package.json b/micro-antifraude/package.json new file mode 100644 index 0000000000..0639a1d54d --- /dev/null +++ b/micro-antifraude/package.json @@ -0,0 +1,77 @@ +{ + "name": "micro-antifraude", + "version": "0.0.1", + "description": "", + "author": "", + "private": true, + "license": "UNLICENSED", + "scripts": { + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json" + }, + "dependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/config": "^3.2.3", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.3.10", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/typeorm": "^10.0.2", + "dotenv": "^16.4.5", + "kafkajs": "^2.2.4", + "pg": "^8.12.0", + "reflect-metadata": "^0.2.0", + "rxjs": "^7.8.1", + "typeorm": "^0.3.20", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@nestjs/cli": "^10.0.0", + "@nestjs/schematics": "^10.0.0", + "@nestjs/testing": "^10.0.0", + "@types/express": "^4.17.17", + "@types/jest": "^29.5.2", + "@types/node": "^20.3.1", + "@types/supertest": "^6.0.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.42.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^29.5.0", + "prettier": "^3.0.0", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-jest": "^29.1.0", + "ts-loader": "^9.4.3", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.1.3" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } +} diff --git a/micro-antifraude/src/app.module.ts b/micro-antifraude/src/app.module.ts new file mode 100644 index 0000000000..3bcdae2d00 --- /dev/null +++ b/micro-antifraude/src/app.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { ApplicationModule } from './application/application.module'; +import { InfraestructureModule } from './infraestructure/infraestructure.module'; + +@Module({ + imports: [ + InfraestructureModule, + ApplicationModule + ], + providers: [], +}) +export class AppModule {} diff --git a/micro-antifraude/src/application/application.module.ts b/micro-antifraude/src/application/application.module.ts new file mode 100644 index 0000000000..22ff8a3d0a --- /dev/null +++ b/micro-antifraude/src/application/application.module.ts @@ -0,0 +1,15 @@ +/** + * Autor: EVER CARLOS ROJAS + */ +import { Module } from "@nestjs/common"; +import { DomainModule } from "src/domain/domain.module"; +import { ControllerModule } from "./controller/controller.module"; + + +@Module({ + imports: [ + DomainModule, + ControllerModule + ], +}) +export class ApplicationModule {} \ No newline at end of file diff --git a/micro-antifraude/src/application/common/kafka.config.ts b/micro-antifraude/src/application/common/kafka.config.ts new file mode 100644 index 0000000000..28c5340efc --- /dev/null +++ b/micro-antifraude/src/application/common/kafka.config.ts @@ -0,0 +1,15 @@ +/** + * Autor: EVER CARLOS ROJAS +*/ + +import { Property } from "src/infraestructure/config/config-server/config-server.decorador"; + +export class KafkaConfig { + + @Property('kafka.brokers.url') + public static readonly kafkabrokerUrl: string; + + @Property('kafka.service.name') + public static readonly kafkaServiceName: string; + +} \ No newline at end of file diff --git a/micro-antifraude/src/application/controller/controller.module.ts b/micro-antifraude/src/application/controller/controller.module.ts new file mode 100644 index 0000000000..c9846d24fb --- /dev/null +++ b/micro-antifraude/src/application/controller/controller.module.ts @@ -0,0 +1,42 @@ +/** + * Autor: EVER CARLOS ROJAS + */ +import { Module } from "@nestjs/common"; +import { TransactionController } from "./v1/transaction.controller"; +import { DomainModule } from "src/domain/domain.module"; +import { TransactionPublisher } from "src/infraestructure/publisher/transaction.publisher"; +import { ClientsModule, Transport } from "@nestjs/microservices"; +import { TransactionSubscriber } from "src/infraestructure/subscriber/transaction.subscriber"; +import { KafkaConfig } from "../common/kafka.config"; + + +@Module({ + imports: [ + + ClientsModule.register([{ + name: KafkaConfig.kafkaServiceName, + transport: Transport.KAFKA, + options: { + client: { + brokers: [KafkaConfig.kafkabrokerUrl], + ssl: false, + /*sasl: { + mechanism: 'plain', + username: 'ever', + password: '123' + }*/ + } + } + }]), + DomainModule //Importamos service y port + ], + providers:[ + TransactionPublisher, + TransactionSubscriber + ], + controllers: [ + TransactionController + ] +}) + +export class ControllerModule {} \ No newline at end of file diff --git a/micro-antifraude/src/application/controller/v1/transaction.controller.ts b/micro-antifraude/src/application/controller/v1/transaction.controller.ts new file mode 100644 index 0000000000..e036a3719b --- /dev/null +++ b/micro-antifraude/src/application/controller/v1/transaction.controller.ts @@ -0,0 +1,23 @@ +/** + * Autor: EVER CARLOS ROJAS + */ +import { Controller } from "@nestjs/common"; +import { EventPattern, Payload } from "@nestjs/microservices"; + +import { TransactionSubscriber } from "src/infraestructure/subscriber/transaction.subscriber"; + +@Controller('risk') +export class TransactionController { + + constructor( + private readonly transactionSubscriber: TransactionSubscriber + ){ + + } + + @EventPattern('topic.fraud.created') + public async handleEventCreated(@Payload() payload: any) { + await this.transactionSubscriber.handler(payload); + } + +} \ No newline at end of file diff --git a/micro-antifraude/src/domain/domain.module.ts b/micro-antifraude/src/domain/domain.module.ts new file mode 100644 index 0000000000..0973a2c423 --- /dev/null +++ b/micro-antifraude/src/domain/domain.module.ts @@ -0,0 +1,20 @@ +import { Module } from "@nestjs/common"; +import { TransctionService } from "./service"; +import { InfraestructureModule } from "src/infraestructure/infraestructure.module"; + +const providers = [ + TransctionService, +]; + +@Module({ + imports: [ + InfraestructureModule // port: import de infra ya que en este modulo "domain" una clase abstract (impl) no puede ser importado o no puede ser providers + ], + providers: [ + ...providers, + ], + exports: [ + ...providers + ] +}) +export class DomainModule {} \ No newline at end of file diff --git a/micro-antifraude/src/domain/enum/transaction_status.ts b/micro-antifraude/src/domain/enum/transaction_status.ts new file mode 100644 index 0000000000..a2ad2ea223 --- /dev/null +++ b/micro-antifraude/src/domain/enum/transaction_status.ts @@ -0,0 +1,8 @@ + + +export enum TransactionStatus { + + PENDIING = "registrado", + APPROVED = "aprobado", + REJECTED = "rechazado" +} \ No newline at end of file diff --git a/micro-antifraude/src/domain/index.ts b/micro-antifraude/src/domain/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/micro-antifraude/src/domain/model/index.ts b/micro-antifraude/src/domain/model/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/micro-antifraude/src/domain/model/transaction-reponse.ts b/micro-antifraude/src/domain/model/transaction-reponse.ts new file mode 100644 index 0000000000..3279324308 --- /dev/null +++ b/micro-antifraude/src/domain/model/transaction-reponse.ts @@ -0,0 +1,16 @@ + +export class TransactionResponse { + + id: string; + + value: number; + + transactionStatus: string + + + constructor(id: string, value: number, transactionStatus: string) { + this.id = id; + this.value = value; + this.transactionStatus = transactionStatus; + } +} \ No newline at end of file diff --git a/micro-antifraude/src/domain/model/transaction.ts b/micro-antifraude/src/domain/model/transaction.ts new file mode 100644 index 0000000000..8160d671c6 --- /dev/null +++ b/micro-antifraude/src/domain/model/transaction.ts @@ -0,0 +1,12 @@ + +export class Transaction { + + id: string; + + value: number; + + constructor(id: string, value: number) { + this.id = id; + this.value = value; + } +} \ No newline at end of file diff --git a/micro-antifraude/src/domain/port/index.ts b/micro-antifraude/src/domain/port/index.ts new file mode 100644 index 0000000000..f8f785c7a7 --- /dev/null +++ b/micro-antifraude/src/domain/port/index.ts @@ -0,0 +1 @@ +export { TransactionPort } from './transaction.port' \ No newline at end of file diff --git a/micro-antifraude/src/domain/port/transaction.port.ts b/micro-antifraude/src/domain/port/transaction.port.ts new file mode 100644 index 0000000000..3bd4c9b1d2 --- /dev/null +++ b/micro-antifraude/src/domain/port/transaction.port.ts @@ -0,0 +1,12 @@ +import { Observable } from "rxjs"; +import { Transaction } from "../model/transaction"; + +export abstract class TransactionPort { + + abstract findAll(soryBy: string): Observable; + + abstract findById(id: number): Observable; + + abstract create(transaction: Transaction): Observable; + +} \ No newline at end of file diff --git a/micro-antifraude/src/domain/service/index.ts b/micro-antifraude/src/domain/service/index.ts new file mode 100644 index 0000000000..424d4a6769 --- /dev/null +++ b/micro-antifraude/src/domain/service/index.ts @@ -0,0 +1 @@ +export { TransctionService } from './transaction.service' \ No newline at end of file diff --git a/micro-antifraude/src/domain/service/transaction.service.ts b/micro-antifraude/src/domain/service/transaction.service.ts new file mode 100644 index 0000000000..594bf2ab68 --- /dev/null +++ b/micro-antifraude/src/domain/service/transaction.service.ts @@ -0,0 +1,35 @@ +/** + * Autor: EVER CARLOS ROJAS + */ + +import { Observable, of } from "rxjs"; +import { Injectable } from "@nestjs/common"; + +import { TransactionPort } from "../port/transaction.port"; +import { Transaction } from "../model/transaction"; +import { TransactionStatus } from "../enum/transaction_status"; +import { TransactionResponse } from "../model/transaction-reponse"; + + +@Injectable() +export class TransctionService { + + constructor( + private readonly transactionPort: TransactionPort,// podemos llamar un motor, una db de riesgos, etc + ){ + + } + + evaluateRisk(payload: Transaction): Observable { + const response: TransactionResponse = { + id: payload.id, + value: payload.value, + transactionStatus: (payload.value <= 1000) ? TransactionStatus.APPROVED: TransactionStatus.REJECTED + } + + return of(response); + } + + + +} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/adapter/adapter.module.ts b/micro-antifraude/src/infraestructure/adapter/adapter.module.ts new file mode 100644 index 0000000000..4ab06ae40f --- /dev/null +++ b/micro-antifraude/src/infraestructure/adapter/adapter.module.ts @@ -0,0 +1,14 @@ +import { Module } from "@nestjs/common"; +import { SecondaryAdapterModule } from "./secondary/secondary-adapter.module"; + + +@Module({ + + imports: [ + SecondaryAdapterModule, // SQL Ó NOSQL + ], + exports: [ + SecondaryAdapterModule, // SQL Ó NOSQL + ] +}) +export class AdapterModule {} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/adapter/secondary/secondary-adapter.module.ts b/micro-antifraude/src/infraestructure/adapter/secondary/secondary-adapter.module.ts new file mode 100644 index 0000000000..a257ac878b --- /dev/null +++ b/micro-antifraude/src/infraestructure/adapter/secondary/secondary-adapter.module.ts @@ -0,0 +1,12 @@ +import { Module } from "@nestjs/common"; + + +@Module({ + imports: [ + ], + providers: [ + ], + exports: [ + ] +}) +export class SecondaryAdapterModule {} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/adapter/secondary/transaction.adapter.ts b/micro-antifraude/src/infraestructure/adapter/secondary/transaction.adapter.ts new file mode 100644 index 0000000000..84874fc938 --- /dev/null +++ b/micro-antifraude/src/infraestructure/adapter/secondary/transaction.adapter.ts @@ -0,0 +1,31 @@ +/** + * Autor: EVER CARLOS ROJAS + */ + +import { Injectable } from "@nestjs/common"; +import { Observable } from "rxjs"; +import { Transaction } from "src/domain/model/transaction"; +import { TransactionPort } from "src/domain/port"; + +@Injectable() +export class TransactionAdapter implements TransactionPort { + + constructor( + ) {} + + findAll(sortBy: string): Observable { + return; + } + + findById(id: number): Observable { + return; + } + + create(transaction: Transaction) : Observable{ + return; + } + delete() { + return; + } + +} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/config-server/config-server.decorador.ts b/micro-antifraude/src/infraestructure/config/config-server/config-server.decorador.ts new file mode 100644 index 0000000000..a6be24ad0e --- /dev/null +++ b/micro-antifraude/src/infraestructure/config/config-server/config-server.decorador.ts @@ -0,0 +1,24 @@ +import { envConfig } from "./env/environments"; + + + +export function Property(valueName: string):any { + + let value = ''; + + value = envConfig[valueName]; + + if(value === undefined) { + throw new Error(`The property ${valueName} is not value`); + } + + // obtiene valores de envConfig. Aigna a propiedades de clase en tiempo de ejecución. + return async (target:any, fieldProperty:string) => { + // Tiene como objetivo permitir la definición de nuevas propiedades o la modificación de propiedades existentes en un objeto + Object.defineProperty(target, fieldProperty, { + value, // valor optenido + configurable: true, + enumerable: false, + }); + } +} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/config-server/env/environments.ts b/micro-antifraude/src/infraestructure/config/config-server/env/environments.ts new file mode 100644 index 0000000000..8ff2967ff9 --- /dev/null +++ b/micro-antifraude/src/infraestructure/config/config-server/env/environments.ts @@ -0,0 +1,18 @@ +import { readFileSync } from "fs"; // Lee el contenido de un archivo +import { parse } from "dotenv"; // Analiza el contenido del archivo como variables de entorno y devuelve un objeto con esas variables. + + + +const env = process.env.ENVIRONMENT || 'local'; + +let propertiesLocation = null; + +const propertyFilename= `application-${env}.properties`; + +const property = process.env.NEST_PROPERTIES_LOCATION || ''; + +propertiesLocation = `${property}${propertyFilename}`; + +console.log('enviroment type ecr ',propertiesLocation); + +export const envConfig: { [key: string]:any } = parse(readFileSync(propertiesLocation)); diff --git a/micro-antifraude/src/infraestructure/config/kafka/helper.config.ts b/micro-antifraude/src/infraestructure/config/kafka/helper.config.ts new file mode 100644 index 0000000000..3288a8ec95 --- /dev/null +++ b/micro-antifraude/src/infraestructure/config/kafka/helper.config.ts @@ -0,0 +1,24 @@ +import { KafkaOptions, Transport } from "@nestjs/microservices"; +import { KafkaConfig } from "./kafka.config"; + + +export const KAFKA_CONFIG: KafkaOptions = { + transport: Transport.KAFKA, + options: { + /*subscribe: { + fromBeginning: true, + }*/ + consumer: { + groupId: KafkaConfig.kafkaGroupId + }, + client: { + brokers: [KafkaConfig.kafkabrokerUrl], + ssl: false, + /*sasl: { + mechanism: 'plain', + username: 'ever', + password: '123' + }*/ + } + } +} diff --git a/micro-antifraude/src/infraestructure/config/kafka/kafka.config.ts b/micro-antifraude/src/infraestructure/config/kafka/kafka.config.ts new file mode 100644 index 0000000000..635694616e --- /dev/null +++ b/micro-antifraude/src/infraestructure/config/kafka/kafka.config.ts @@ -0,0 +1,16 @@ +/** + * Autor: EVER CARLOS ROJAS +*/ + +import { Property } from "../config-server/config-server.decorador"; + + +export class KafkaConfig { + + @Property('kafka.brokers.url') + public static readonly kafkabrokerUrl: string; + + @Property('kafka.brokers.group.id') + public static readonly kafkaGroupId: string; + +} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/shared.module.ts b/micro-antifraude/src/infraestructure/config/shared.module.ts new file mode 100644 index 0000000000..092e931628 --- /dev/null +++ b/micro-antifraude/src/infraestructure/config/shared.module.ts @@ -0,0 +1,9 @@ +import { Module } from "@nestjs/common"; + +@Module({ + imports: [ + ] +}) +export class SharedModule { + +} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/sql/pg-db.config.ts b/micro-antifraude/src/infraestructure/config/sql/pg-db.config.ts new file mode 100644 index 0000000000..ae61bb9aa3 --- /dev/null +++ b/micro-antifraude/src/infraestructure/config/sql/pg-db.config.ts @@ -0,0 +1,20 @@ +import { Property } from "../config-server/config-server.decorador"; + + +export class PGDBConfig { + + @Property('db.pg.url') + public static readonly pgdbUri: string; + + @Property('db.pg.name') + public static readonly pgdbName: string; + + @Property('db.pg.port') + public static readonly pgdbPort: number; + + @Property('db.pg.user') + public static readonly pgdbUser: string; + + @Property('db.pg.password') + public static readonly pgdbPassword: string; +} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/sql/postgresql.module.ts b/micro-antifraude/src/infraestructure/config/sql/postgresql.module.ts new file mode 100644 index 0000000000..5e9d6362e4 --- /dev/null +++ b/micro-antifraude/src/infraestructure/config/sql/postgresql.module.ts @@ -0,0 +1,22 @@ +import { Module } from "@nestjs/common"; +import { ConfigModule } from "@nestjs/config"; +import { TypeOrmModule } from "@nestjs/typeorm"; +import { PGDBConfig } from "./pg-db.config"; + +@Module({ + imports: [ + ConfigModule.forRoot(), // Global para variables de entorno + + TypeOrmModule.forRoot({ + type: 'postgres', + host: PGDBConfig.pgdbUri, // process.env.DB_HOST + port: PGDBConfig.pgdbPort, //+process.env.DB_PORT, + database: PGDBConfig.pgdbName, // process.env.DB_NAME, + username: PGDBConfig.pgdbUser, //process.env.DB_USERNAME, + password: PGDBConfig.pgdbPassword, //process.env.DB_PASSWORD, + autoLoadEntities: true, + synchronize: false // Para sincronizar atributos de tablas de base de datos. PRD: false + }), + ] +}) +export class PostgreSqlModule {} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/entity/transaction.entity.ts b/micro-antifraude/src/infraestructure/entity/transaction.entity.ts new file mode 100644 index 0000000000..169acad47d --- /dev/null +++ b/micro-antifraude/src/infraestructure/entity/transaction.entity.ts @@ -0,0 +1,26 @@ +import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; + +@Entity({name: 'transaciones'}) +export class TransactionEntity { + + @PrimaryGeneratedColumn() + id: number; + + @Column({ name: 'id_debit'}) + accountExternalIdDebit: string; + + @Column({ name: 'id_credit'}) + accountExternalIdCredit: string; + + @Column({ name: 'id_transfer_type'}) // 1: pendiente 2: aprodo, 3: rechazado + tranferTypeId: number; + + @Column({ name: 'valor'}) + value: number; + + @Column({ name: 'transaction_status'}) + transactionStatus: string; + + state: boolean; + +} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/infraestructure.module.ts b/micro-antifraude/src/infraestructure/infraestructure.module.ts new file mode 100644 index 0000000000..412a1ddcd9 --- /dev/null +++ b/micro-antifraude/src/infraestructure/infraestructure.module.ts @@ -0,0 +1,30 @@ +/** + * Autor: EVER CARLOS ROJAS + */ +import { Module } from "@nestjs/common"; +import { AdapterModule } from "./adapter/adapter.module"; +import { TransactionPort } from "src/domain/port"; + +//NOTA: Elegir que tipo de adaptador(primary ó secondary) será la fuente de información(select, create, update, delete) para cada adaptador +import { TransactionAdapter } from "./adapter/secondary/transaction.adapter"; +import { SharedModule } from "./config/shared.module"; + +const providers = [ + { + provide: TransactionPort, + useClass: TransactionAdapter + }, +] +@Module({ + imports: [ + SharedModule, + AdapterModule, + ], + providers: [ + ...providers + ], + exports: [ + TransactionPort + ], +}) +export class InfraestructureModule {} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/publisher/transaction.publisher.ts b/micro-antifraude/src/infraestructure/publisher/transaction.publisher.ts new file mode 100644 index 0000000000..b7840ffc83 --- /dev/null +++ b/micro-antifraude/src/infraestructure/publisher/transaction.publisher.ts @@ -0,0 +1,28 @@ +/** + * Autor: EVER CARLOS ROJAS + */ +import { Inject, Injectable} from "@nestjs/common"; +import { ClientProxy } from "@nestjs/microservices"; +import { TransactionResponse } from "src/domain/model/transaction-reponse"; + + +@Injectable() +export class TransactionPublisher { // publisher solo para convertir datos no mucha logica + + + constructor(@Inject('KAFKA') private readonly kafka: ClientProxy) {} + + publisherApproved(payload: TransactionResponse) { + + const message: string = JSON.stringify(payload); + + this.kafka.emit('topic.fraud.approved', message); + } + + publisherRejected(payload: TransactionResponse) { + + const message: string = JSON.stringify(payload); + + this.kafka.emit('topic.fraud.rejected', message); + } +} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/subscriber/transaction.subscriber.ts b/micro-antifraude/src/infraestructure/subscriber/transaction.subscriber.ts new file mode 100644 index 0000000000..6c9d4e6516 --- /dev/null +++ b/micro-antifraude/src/infraestructure/subscriber/transaction.subscriber.ts @@ -0,0 +1,51 @@ +/** + * Autor: EVER CARLOS ROJAS + */ + +import { Injectable, Logger } from '@nestjs/common'; + +import { TransctionService } from 'src/domain/service'; +import { TransactionPublisher } from '../publisher/transaction.publisher'; +import { Transaction } from 'src/domain/model/transaction'; +import { TransactionResponse } from 'src/domain/model/transaction-reponse'; +import { TransactionStatus } from 'src/domain/enum/transaction_status'; + + +@Injectable() +export class TransactionSubscriber { + + constructor( + private readonly transactionService: TransctionService, + private readonly transactionPublisher: TransactionPublisher + ) {} + + + private readonly logger = new Logger(TransactionSubscriber.name); + + /** + * Consumer encargado de recepcioner las transacciones pendientes + * @param transaction - La transacción a procesar + * + */ + public async handler(payload: Transaction): Promise { + + this.logger.log(`starting process`); + + this.logger.log(`message: ${JSON.stringify(payload)}`); + + this.transactionService.evaluateRisk(payload).subscribe({ + next: (response: TransactionResponse) => { + if(response.transactionStatus === TransactionStatus.APPROVED) { + this.transactionPublisher.publisherApproved(response); + } else { + this.transactionPublisher.publisherRejected(response); + } + }, + error: (err: any) => { + this.logger.error(`Error processing transaction: ${err}`); + }, + }); + + } + +} diff --git a/micro-antifraude/src/main.ts b/micro-antifraude/src/main.ts new file mode 100644 index 0000000000..d33350393a --- /dev/null +++ b/micro-antifraude/src/main.ts @@ -0,0 +1,26 @@ +import { NestFactory } from '@nestjs/core'; +import { AppModule } from './app.module'; +import { Logger } from '@nestjs/common'; +import { KAFKA_CONFIG } from './infraestructure/config/kafka/helper.config'; + +const port = process.env.PORT || '3001'; + +async function bootstrap() { + + const logger = new Logger('Bootstrap'); + + try { + const app = await NestFactory.create(AppModule); + //FIXME: Refactorizar agregando en su propio módulo y en el modulo de infra + app.connectMicroservice(KAFKA_CONFIG); + app.startAllMicroservices(); + await app.listen(port); + + logger.log(`App running on port: ${ port }`); + + } catch (error) { + logger.error(`Error instantiated server`, error); + } +} + +void bootstrap(); \ No newline at end of file diff --git a/micro-antifraude/test/app.e2e-spec.ts b/micro-antifraude/test/app.e2e-spec.ts new file mode 100644 index 0000000000..0012dcd2c0 --- /dev/null +++ b/micro-antifraude/test/app.e2e-spec.ts @@ -0,0 +1,24 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from '../src/app.module'; + +describe('AppController (e2e)', () => { + let app: INestApplication; + + beforeEach(async () => { + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it('/ (GET)', () => { + return request(app.getHttpServer()) + .get('/') + .expect(200) + .expect('Hello World!'); + }); +}); diff --git a/micro-antifraude/test/jest-e2e.json b/micro-antifraude/test/jest-e2e.json new file mode 100644 index 0000000000..e9d912f3e3 --- /dev/null +++ b/micro-antifraude/test/jest-e2e.json @@ -0,0 +1,9 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "rootDir": ".", + "testEnvironment": "node", + "testRegex": ".e2e-spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + } +} diff --git a/micro-antifraude/tsconfig.build.json b/micro-antifraude/tsconfig.build.json new file mode 100644 index 0000000000..64f86c6bd2 --- /dev/null +++ b/micro-antifraude/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/micro-antifraude/tsconfig.json b/micro-antifraude/tsconfig.json new file mode 100644 index 0000000000..95f5641cf7 --- /dev/null +++ b/micro-antifraude/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "ES2021", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + "noFallthroughCasesInSwitch": false + } +} diff --git a/micro-transaction/.eslintrc.js b/micro-transaction/.eslintrc.js new file mode 100644 index 0000000000..259de13c73 --- /dev/null +++ b/micro-transaction/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + tsconfigRootDir: __dirname, + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + ], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, +}; diff --git a/micro-transaction/.gitignore b/micro-transaction/.gitignore new file mode 100644 index 0000000000..4b56acfbeb --- /dev/null +++ b/micro-transaction/.gitignore @@ -0,0 +1,56 @@ +# compiled output +/dist +/node_modules +/build + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# OS +.DS_Store + +# Tests +/coverage +/.nyc_output + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# temp directory +.temp +.tmp + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/micro-transaction/.prettierrc b/micro-transaction/.prettierrc new file mode 100644 index 0000000000..dcb72794f5 --- /dev/null +++ b/micro-transaction/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/micro-transaction/Dockerfile b/micro-transaction/Dockerfile new file mode 100644 index 0000000000..d318e3e186 --- /dev/null +++ b/micro-transaction/Dockerfile @@ -0,0 +1,19 @@ +FROM node:18.20.4-alpine3.19 + +# Crea y establece el directorio de trabajo +WORKDIR /app + +# Copia los archivos de la aplicación +COPY . . + +# Instala las dependencias +RUN npm install + +# Compila la aplicación +RUN npm run build + +# Expone el puerto en el que la aplicación se ejecutará +EXPOSE 3000 + +# Comando para ejecutar la aplicación +CMD ["npm", "run", "start:prod"] diff --git a/micro-transaction/README.md b/micro-transaction/README.md new file mode 100644 index 0000000000..eb5cff377f --- /dev/null +++ b/micro-transaction/README.md @@ -0,0 +1,32 @@ +

+ Nest Logo +

+ + +# Microservicios antifraude aplicando arquitectura hexagonal +## Requisitos +- nodejs: v 18.20.4 + +## Estructura del Proyecto Basado en Aplication, Domain, Infrastructure +1) ``Capa Application`` +2) ``Capa de Dominio (núcleo-core)`` +3) ``Capa de Infraestructura`` + +## Funcionalidad +- Probar por postman : +```bash +curl --location 'localhost:3000/transactions' \ +--header 'Content-Type: application/json' \ +--data '{ + "tranferTypeId": 1, + "value": 2 +}' + +``` +## Running the app +- npm run start:dev + +```bash +# watch mode +$ npm run start:dev +``` diff --git a/micro-transaction/application-local.properties b/micro-transaction/application-local.properties new file mode 100644 index 0000000000..97fabad8f0 --- /dev/null +++ b/micro-transaction/application-local.properties @@ -0,0 +1,17 @@ +environment.local = true + +config.graphql.env.access=true + + +########### DATABASE PG ########### +db.pg.url = localhost +db.pg.name = dbtransaction +db.pg.port = 5432 +db.pg.user = postgres +db.pg.password = 123 + +########### KAFKA ########### +#######para un solo broker####### +kafka.service.name = KAFKA +kafka.brokers.url = localhost:9092 +kafka.brokers.group.id = my-group-id-transaction diff --git a/micro-transaction/application-prd.properties b/micro-transaction/application-prd.properties new file mode 100644 index 0000000000..47eb432dba --- /dev/null +++ b/micro-transaction/application-prd.properties @@ -0,0 +1,19 @@ +environment.local = true + +config.graphql.env.access=true + + +########### DATABASE PG ############ +# localhost +db.pg.url = postgres +db.pg.name = dbtransaction +db.pg.port = 5432 +db.pg.user = postgres +db.pg.password = postgres + +########### KAFKA ########### +#######para un solo broker######## +kafka.service.name = KAFKA +#localhost:9092 +kafka.brokers.url = kafka:29092 +kafka.brokers.group.id = my-group-id-transaction diff --git a/micro-transaction/nest-cli.json b/micro-transaction/nest-cli.json new file mode 100644 index 0000000000..f9aa683b1a --- /dev/null +++ b/micro-transaction/nest-cli.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "deleteOutDir": true + } +} diff --git a/micro-transaction/package-lock.json b/micro-transaction/package-lock.json new file mode 100644 index 0000000000..7d1919bb5a --- /dev/null +++ b/micro-transaction/package-lock.json @@ -0,0 +1,9148 @@ +{ + "name": "micro-transaction", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "micro-transaction", + "version": "0.0.1", + "license": "UNLICENSED", + "dependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/config": "^3.2.3", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.3.10", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/typeorm": "^10.0.2", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "dotenv": "^16.4.5", + "kafkajs": "^2.2.4", + "pg": "^8.12.0", + "reflect-metadata": "^0.2.0", + "rxjs": "^7.8.1", + "typeorm": "^0.3.20", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@nestjs/cli": "^10.0.0", + "@nestjs/schematics": "^10.0.0", + "@nestjs/testing": "^10.0.0", + "@types/express": "^4.17.17", + "@types/jest": "^29.5.2", + "@types/node": "^20.3.1", + "@types/supertest": "^6.0.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.42.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^29.5.0", + "prettier": "^3.0.0", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-jest": "^29.1.0", + "ts-loader": "^9.4.3", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.1.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz", + "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz", + "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.8.tgz", + "integrity": "sha512-TjmiwWJarX7oqvNiRAroQ5/LeKUatxBOCNEuKXO/PV8e7pn/Hr/BqfFm+UcYrQoFdZplmtNAfqmbqgVziKvCpA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "ansi-colors": "4.1.3", + "inquirer": "9.2.15", + "symbol-observable": "4.0.0", + "yargs-parser": "21.1.1" + }, + "bin": { + "schematics": "bin/schematics.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "devOptional": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "devOptional": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nestjs/cli": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.2.tgz", + "integrity": "sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "@angular-devkit/schematics-cli": "17.3.8", + "@nestjs/schematics": "^10.0.1", + "chalk": "4.1.2", + "chokidar": "3.6.0", + "cli-table3": "0.6.5", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.4.2", + "inquirer": "8.2.6", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.2.0", + "tsconfig-paths-webpack-plugin": "4.1.0", + "typescript": "5.3.3", + "webpack": "5.92.1", + "webpack-node-externals": "3.0.0" + }, + "bin": { + "nest": "bin/nest.js" + }, + "engines": { + "node": ">= 16.14" + }, + "peerDependencies": { + "@swc/cli": "^0.1.62 || ^0.3.0 || ^0.4.0", + "@swc/core": "^1.3.62" + }, + "peerDependenciesMeta": { + "@swc/cli": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@nestjs/cli/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nestjs/cli/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nestjs/cli/node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@nestjs/cli/node_modules/webpack": { + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@nestjs/common": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.10.tgz", + "integrity": "sha512-H8k0jZtxk1IdtErGDmxFRy0PfcOAUg41Prrqpx76DQusGGJjsaovs1zjXVD1rZWaVYchfT1uczJ6L4Kio10VNg==", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.3", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/config": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.3.tgz", + "integrity": "sha512-p6yv/CvoBewJ72mBq4NXgOAi2rSQNWx3a+IMJLVKS2uiwFCOQQuiIatGwq6MRjXV3Jr+B41iUO8FIf4xBrZ4/w==", + "dependencies": { + "dotenv": "16.4.5", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "rxjs": "^7.1.0" + } + }, + "node_modules/@nestjs/core": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.10.tgz", + "integrity": "sha512-ZbQ4jovQyzHtCGCrzK5NdtW1SYO2fHSsgSY1+/9WdruYCUra+JDkWEXgZ4M3Hv480Dl3OXehAmY1wCOojeMyMQ==", + "hasInstallScript": true, + "dependencies": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "3.2.0", + "tslib": "2.6.3", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/websockets": "^10.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 + } + } + }, + "node_modules/@nestjs/microservices": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-10.3.10.tgz", + "integrity": "sha512-zZrilhZmXU2Ik5Usrcy4qEX262Uhvz0/9XlIdX6SRn8I39ns1EE9tAhEBmmkMwh7lsEikRFa4aaa05loi8Gsow==", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@grpc/grpc-js": "*", + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "amqp-connection-manager": "*", + "amqplib": "*", + "cache-manager": "*", + "ioredis": "*", + "kafkajs": "*", + "mqtt": "*", + "nats": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@grpc/grpc-js": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + }, + "amqp-connection-manager": { + "optional": true + }, + "amqplib": { + "optional": true + }, + "cache-manager": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "kafkajs": { + "optional": true + }, + "mqtt": { + "optional": true + }, + "nats": { + "optional": true + } + } + }, + "node_modules/@nestjs/platform-express": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.10.tgz", + "integrity": "sha512-wK2ow3CZI2KFqWeEpPmoR300OB6BcBLxARV1EiClJLCj4S1mZsoCmS0YWgpk3j1j6mo0SI8vNLi/cC2iZPEPQA==", + "dependencies": { + "body-parser": "1.20.2", + "cors": "2.8.5", + "express": "4.19.2", + "multer": "1.4.4-lts.1", + "tslib": "2.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0" + } + }, + "node_modules/@nestjs/schematics": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.3.tgz", + "integrity": "sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "comment-json": "4.2.3", + "jsonc-parser": "3.3.1", + "pluralize": "8.0.0" + }, + "peerDependencies": { + "typescript": ">=4.8.2" + } + }, + "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true + }, + "node_modules/@nestjs/testing": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.10.tgz", + "integrity": "sha512-i3HAtVQJijxNxJq1k39aelyJlyEIBRONys7IipH/4r8W0J+M1V+y5EKDOyi4j1SdNSb/vmNyWpZ2/ewZjl3kRA==", + "dev": true, + "dependencies": { + "tslib": "2.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + } + } + }, + "node_modules/@nestjs/typeorm": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz", + "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==", + "dependencies": { + "uuid": "9.0.1" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", + "reflect-metadata": "^0.1.13 || ^0.2.0", + "rxjs": "^7.2.0", + "typeorm": "^0.3.0" + } + }, + "node_modules/@nestjs/typeorm/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "devOptional": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", + "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/superagent": { + "version": "8.1.8", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.8.tgz", + "integrity": "sha512-nTqHJ2OTa7PFEpLahzSEEeFeqbMpmcN7OeayiOc7v+xk+/vyTKljRe+o4MPqSnPeRCMvtxuLG+5QqluUVQJOnA==", + "dev": true, + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/supertest": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", + "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "dev": true, + "dependencies": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, + "node_modules/@types/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==" + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "devOptional": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001647", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001647.tgz", + "integrity": "sha512-n83xdNiyeNcHpzWY+1aFbqCK7LuLfBricc4+alSQL2Xb6OR3XpnQAmlDG+pQcdTfiHRuLcQ96VOfrPSGiNJYSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "node_modules/class-validator": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", + "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", + "dependencies": { + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.10.53", + "validator": "^13.9.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/comment-json": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", + "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "dev": true, + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dayjs": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", + "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "engines": { + "node": ">=12" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^8.2.0", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "engines": { + "node": "*" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "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.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kafkajs": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-2.2.4.tgz", + "integrity": "sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.5.tgz", + "integrity": "sha512-TwHR5BZxGRODtAfz03szucAkjT5OArXr+94SMtAM2pYXIlQNVMrxvb6uSCbnaJJV6QXEyICk7+l6QPgn72WHhg==" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pg": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "dependencies": { + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/supertest": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^9.0.1" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/synckit": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "29.2.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", + "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "devOptional": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "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 + } + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typeorm": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz", + "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==", + "dependencies": { + "@sqltools/formatter": "^1.2.5", + "app-root-path": "^3.1.0", + "buffer": "^6.0.3", + "chalk": "^4.1.2", + "cli-highlight": "^2.1.11", + "dayjs": "^1.11.9", + "debug": "^4.3.4", + "dotenv": "^16.0.3", + "glob": "^10.3.10", + "mkdirp": "^2.1.3", + "reflect-metadata": "^0.2.1", + "sha.js": "^2.4.11", + "tslib": "^2.5.0", + "uuid": "^9.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">=16.13.0" + }, + "funding": { + "url": "https://opencollective.com/typeorm" + }, + "peerDependencies": { + "@google-cloud/spanner": "^5.18.0", + "@sap/hana-client": "^2.12.25", + "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0", + "hdb-pool": "^0.1.6", + "ioredis": "^5.0.4", + "mongodb": "^5.8.0", + "mssql": "^9.1.1 || ^10.0.1", + "mysql2": "^2.2.5 || ^3.0.1", + "oracledb": "^6.3.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1 || ^4.0.0", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.3", + "ts-node": "^10.7.0", + "typeorm-aurora-data-api-driver": "^2.0.0" + }, + "peerDependenciesMeta": { + "@google-cloud/spanner": { + "optional": true + }, + "@sap/hana-client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "hdb-pool": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "redis": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typeorm-aurora-data-api-driver": { + "optional": true + } + } + }, + "node_modules/typeorm/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/typeorm/node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/micro-transaction/package.json b/micro-transaction/package.json new file mode 100644 index 0000000000..a8f87cad9d --- /dev/null +++ b/micro-transaction/package.json @@ -0,0 +1,79 @@ +{ + "name": "micro-transaction", + "version": "0.0.1", + "description": "", + "author": "", + "private": true, + "license": "UNLICENSED", + "scripts": { + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json" + }, + "dependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/config": "^3.2.3", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.3.10", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/typeorm": "^10.0.2", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "dotenv": "^16.4.5", + "kafkajs": "^2.2.4", + "pg": "^8.12.0", + "reflect-metadata": "^0.2.0", + "rxjs": "^7.8.1", + "typeorm": "^0.3.20", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@nestjs/cli": "^10.0.0", + "@nestjs/schematics": "^10.0.0", + "@nestjs/testing": "^10.0.0", + "@types/express": "^4.17.17", + "@types/jest": "^29.5.2", + "@types/node": "^20.3.1", + "@types/supertest": "^6.0.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.42.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^29.5.0", + "prettier": "^3.0.0", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-jest": "^29.1.0", + "ts-loader": "^9.4.3", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.1.3" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } +} diff --git a/micro-transaction/src/app.module.ts b/micro-transaction/src/app.module.ts new file mode 100644 index 0000000000..3bcdae2d00 --- /dev/null +++ b/micro-transaction/src/app.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { ApplicationModule } from './application/application.module'; +import { InfraestructureModule } from './infraestructure/infraestructure.module'; + +@Module({ + imports: [ + InfraestructureModule, + ApplicationModule + ], + providers: [], +}) +export class AppModule {} diff --git a/micro-transaction/src/application/application.module.ts b/micro-transaction/src/application/application.module.ts new file mode 100644 index 0000000000..22ff8a3d0a --- /dev/null +++ b/micro-transaction/src/application/application.module.ts @@ -0,0 +1,15 @@ +/** + * Autor: EVER CARLOS ROJAS + */ +import { Module } from "@nestjs/common"; +import { DomainModule } from "src/domain/domain.module"; +import { ControllerModule } from "./controller/controller.module"; + + +@Module({ + imports: [ + DomainModule, + ControllerModule + ], +}) +export class ApplicationModule {} \ No newline at end of file diff --git a/micro-transaction/src/application/common/kafka.config.ts b/micro-transaction/src/application/common/kafka.config.ts new file mode 100644 index 0000000000..d65448df54 --- /dev/null +++ b/micro-transaction/src/application/common/kafka.config.ts @@ -0,0 +1,16 @@ +/** + * Autor: EVER CARLOS ROJAS +*/ + +import { Property } from "src/infraestructure/config/config-server/config-server.decorador"; + + +export class KafkaConfig { + + @Property('kafka.brokers.url') + public static readonly kafkabrokerUrl: string; + + @Property('kafka.service.name') + public static readonly kafkaServiceName: string; + +} \ No newline at end of file diff --git a/micro-transaction/src/application/controller/controller.module.ts b/micro-transaction/src/application/controller/controller.module.ts new file mode 100644 index 0000000000..6f42e29888 --- /dev/null +++ b/micro-transaction/src/application/controller/controller.module.ts @@ -0,0 +1,40 @@ +import { Module } from "@nestjs/common"; +import { TransactionController } from "./v1/transaction.controller"; +import { DomainModule } from "src/domain/domain.module"; +import { ClientsModule, Transport } from "@nestjs/microservices"; + +import { KafkaConfig } from "../common/kafka.config"; +import { TransactionPublisher } from "src/infraestructure/publisher/transaction.publisher"; +import { TransactionSubscriber } from "src/infraestructure/subscriber/transaction.subscriber"; + + +@Module({ + imports: [ + + ClientsModule.register([{ + name: KafkaConfig.kafkaServiceName, + transport: Transport.KAFKA, + options: { + client: { + brokers: [KafkaConfig.kafkabrokerUrl], + ssl: false, + /*sasl: { + mechanism: 'plain', + username: 'ever', + password: '123' + }*/ + } + } + }]), + DomainModule //Importamos service y port + ], + providers:[ + TransactionPublisher, + TransactionSubscriber + ], + controllers: [ + TransactionController + ] +}) + +export class ControllerModule {} \ No newline at end of file diff --git a/micro-transaction/src/application/controller/v1/transaction.controller.ts b/micro-transaction/src/application/controller/v1/transaction.controller.ts new file mode 100644 index 0000000000..1c87b6f2b0 --- /dev/null +++ b/micro-transaction/src/application/controller/v1/transaction.controller.ts @@ -0,0 +1,68 @@ +/** + * Autor: EVER CARLOS ROJAS + */ + +import { Body, Controller, Get, Param, ParseUUIDPipe, Post } from "@nestjs/common"; +import { EventPattern, Payload } from "@nestjs/microservices"; +import { map, tap } from "rxjs"; +import { Transaction } from "src/domain/model/transaction"; +import { TransctionService } from "src/domain/service"; +import { TransactionPublisher } from "src/infraestructure/publisher/transaction.publisher"; +import { TransactionSubscriber } from "src/infraestructure/subscriber/transaction.subscriber"; + +@Controller('transactions') +export class TransactionController { + + constructor( + private readonly transactionService: TransctionService, + private readonly transactionPublisher: TransactionPublisher, + private readonly transactionSubscriber: TransactionSubscriber + ){ + + } + + @Get() + findAll() { + return this.transactionService.findAll('createdAt'); + } + + /** + *Crea una nueva transacción + * @param payload - request de la transaction + */ + @Post() + public registerTransacion(@Body() payload: Transaction) { // FIXME: Agregar validador de dto + return this.transactionService.create(payload).pipe( + tap(resp => { + this.transactionPublisher.publisherRegister(resp); + return resp; + }), + map(transaction => transaction) + ); + } + + + @Get(':id') + findBydId(@Param('id', ParseUUIDPipe) id: string){ + return this.transactionService.findById(id); + } + + + //FIXME: Refactorización: Cuando nestjs acepte EventPattern en un @Injectable() (service) + + /***** consumers *****/ + + @EventPattern('topic.fraud.approved') + public async handleEventApprove(@Payload() payload: any) { + + await this.transactionSubscriber.handler(payload); + } + + @EventPattern('topic.fraud.rejected') + public async handleEventRejected(@Payload() payload: any) { + await this.transactionSubscriber.handler(payload); + } + + + +} \ No newline at end of file diff --git a/micro-transaction/src/domain/domain.module.ts b/micro-transaction/src/domain/domain.module.ts new file mode 100644 index 0000000000..0973a2c423 --- /dev/null +++ b/micro-transaction/src/domain/domain.module.ts @@ -0,0 +1,20 @@ +import { Module } from "@nestjs/common"; +import { TransctionService } from "./service"; +import { InfraestructureModule } from "src/infraestructure/infraestructure.module"; + +const providers = [ + TransctionService, +]; + +@Module({ + imports: [ + InfraestructureModule // port: import de infra ya que en este modulo "domain" una clase abstract (impl) no puede ser importado o no puede ser providers + ], + providers: [ + ...providers, + ], + exports: [ + ...providers + ] +}) +export class DomainModule {} \ No newline at end of file diff --git a/micro-transaction/src/domain/enum/transaction_status.ts b/micro-transaction/src/domain/enum/transaction_status.ts new file mode 100644 index 0000000000..d51ed28413 --- /dev/null +++ b/micro-transaction/src/domain/enum/transaction_status.ts @@ -0,0 +1,8 @@ + + +export enum TraansactionStatus { + + PENDIING = "registrado", + APPROVED = "aprobado", + REJECTED = "rechazado" +} \ No newline at end of file diff --git a/micro-transaction/src/domain/index.ts b/micro-transaction/src/domain/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/micro-transaction/src/domain/model/index.ts b/micro-transaction/src/domain/model/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/micro-transaction/src/domain/model/transaction-response.ts b/micro-transaction/src/domain/model/transaction-response.ts new file mode 100644 index 0000000000..76b28b7fc7 --- /dev/null +++ b/micro-transaction/src/domain/model/transaction-response.ts @@ -0,0 +1,30 @@ +import { TransactionStatus } from "./transaction-status"; +import { TransactionType } from "./transaction-type"; + +export class TransactionResponse { + + transactionExternalId: string; + + transactionType: TransactionType; + + value: number; + + transactionStatus: TransactionStatus; + + createdAt: string; + + + constructor( + transactionExternalId: string, + transactionType: TransactionType, + value: number, + transactionStatus: TransactionStatus, + createdAt: string + ) { + this.transactionExternalId = transactionExternalId; + this.transactionType = transactionType; + this.value = value; + this.transactionStatus = transactionStatus; + this.createdAt = createdAt; + } +} \ No newline at end of file diff --git a/micro-transaction/src/domain/model/transaction-status.ts b/micro-transaction/src/domain/model/transaction-status.ts new file mode 100644 index 0000000000..55501d9c0f --- /dev/null +++ b/micro-transaction/src/domain/model/transaction-status.ts @@ -0,0 +1,5 @@ + + +export class TransactionStatus { + name: string; +} \ No newline at end of file diff --git a/micro-transaction/src/domain/model/transaction-type.ts b/micro-transaction/src/domain/model/transaction-type.ts new file mode 100644 index 0000000000..495ce430cd --- /dev/null +++ b/micro-transaction/src/domain/model/transaction-type.ts @@ -0,0 +1,5 @@ + + +export class TransactionType { + name: string; +} \ No newline at end of file diff --git a/micro-transaction/src/domain/model/transaction.ts b/micro-transaction/src/domain/model/transaction.ts new file mode 100644 index 0000000000..646b868920 --- /dev/null +++ b/micro-transaction/src/domain/model/transaction.ts @@ -0,0 +1,39 @@ + +import { Optional } from "@nestjs/common"; +import { IsNotEmpty, IsNumber, IsUUID } from "class-validator"; + +export class Transaction { + + @Optional() + id: string; + + @IsNotEmpty() + @IsUUID() + accountExternalIdDebit: string; + + @IsNotEmpty() + @IsUUID() + accountExternalIdCredit: string; + + @IsNotEmpty() + @IsNumber() + tranferTypeId: number; + + @IsNotEmpty() + @IsNumber() + value: number; + + transactionStatus: string + + state: boolean; + + constructor(id: string, accountExternalIdDebit: string, accountExternalIdCredit: string, tranferTypeId: number, value: number, transactionStatus: string, state: boolean) { + this.id = id; + this.accountExternalIdDebit = accountExternalIdDebit; + this.accountExternalIdCredit = accountExternalIdCredit; + this.tranferTypeId = tranferTypeId; + this.value = value; + this.transactionStatus = transactionStatus; + this.state = state; + } +} \ No newline at end of file diff --git a/micro-transaction/src/domain/port/index.ts b/micro-transaction/src/domain/port/index.ts new file mode 100644 index 0000000000..f8f785c7a7 --- /dev/null +++ b/micro-transaction/src/domain/port/index.ts @@ -0,0 +1 @@ +export { TransactionPort } from './transaction.port' \ No newline at end of file diff --git a/micro-transaction/src/domain/port/transaction.port.ts b/micro-transaction/src/domain/port/transaction.port.ts new file mode 100644 index 0000000000..eb372e75f6 --- /dev/null +++ b/micro-transaction/src/domain/port/transaction.port.ts @@ -0,0 +1,15 @@ +import { Observable } from "rxjs"; +import { Transaction } from "../model/transaction"; +import { TransactionResponse } from "../model/transaction-response"; + +export abstract class TransactionPort { + + abstract findAll(soryBy: string): Observable; + + abstract findById(id: string): Observable; + + abstract create(transaction: Transaction): Observable; + + abstract update(transaction: Transaction); + +} \ No newline at end of file diff --git a/micro-transaction/src/domain/service/index.ts b/micro-transaction/src/domain/service/index.ts new file mode 100644 index 0000000000..424d4a6769 --- /dev/null +++ b/micro-transaction/src/domain/service/index.ts @@ -0,0 +1 @@ +export { TransctionService } from './transaction.service' \ No newline at end of file diff --git a/micro-transaction/src/domain/service/transaction.service.ts b/micro-transaction/src/domain/service/transaction.service.ts new file mode 100644 index 0000000000..2b4d50306e --- /dev/null +++ b/micro-transaction/src/domain/service/transaction.service.ts @@ -0,0 +1,50 @@ +/** + * Autor: EVER CARLOS ROJAS + */ +import { Injectable } from "@nestjs/common"; +import { Observable } from "rxjs"; + +import { TransactionPort } from "../port/transaction.port"; +import { Transaction } from "../model/transaction"; +import { TraansactionStatus } from "../enum/transaction_status"; +import { TransactionResponse } from "../model/transaction-response"; + + +@Injectable() +export class TransctionService { + + constructor( + private readonly transactionPort: TransactionPort, + ){ + + } + + findAll(sortBy: string) { + try { + return this.transactionPort.findAll(sortBy); + }catch (err) { + throw err; + } + } + + findById(id: string) { + return this.transactionPort.findById(id); + } + + + create(transaction: Transaction): Observable { + try { + transaction.transactionStatus = TraansactionStatus.PENDIING; + return this.transactionPort.create(transaction); + } catch(err) { + throw err; + } + } + + update(transaction: Transaction) { + this.transactionPort.update(transaction); + } + + + +} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/adapter/adapter.module.ts b/micro-transaction/src/infraestructure/adapter/adapter.module.ts new file mode 100644 index 0000000000..4ab06ae40f --- /dev/null +++ b/micro-transaction/src/infraestructure/adapter/adapter.module.ts @@ -0,0 +1,14 @@ +import { Module } from "@nestjs/common"; +import { SecondaryAdapterModule } from "./secondary/secondary-adapter.module"; + + +@Module({ + + imports: [ + SecondaryAdapterModule, // SQL Ó NOSQL + ], + exports: [ + SecondaryAdapterModule, // SQL Ó NOSQL + ] +}) +export class AdapterModule {} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/adapter/secondary/secondary-adapter.module.ts b/micro-transaction/src/infraestructure/adapter/secondary/secondary-adapter.module.ts new file mode 100644 index 0000000000..67228f6297 --- /dev/null +++ b/micro-transaction/src/infraestructure/adapter/secondary/secondary-adapter.module.ts @@ -0,0 +1,21 @@ +import { Module } from "@nestjs/common"; +import { TypeOrmModule } from "@nestjs/typeorm"; +import { TransactionEntity } from "src/infraestructure/entity/transaction.entity"; +import { TransactionRepository } from "src/infraestructure/repository/transaction.repository"; + +const providers = [ + TransactionRepository, +] + +@Module({ + imports: [ + TypeOrmModule.forFeature([TransactionEntity]), + ], + providers: [ + ...providers + ], + exports: [ + ...providers + ] +}) +export class SecondaryAdapterModule {} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/adapter/secondary/transaction.adapter.ts b/micro-transaction/src/infraestructure/adapter/secondary/transaction.adapter.ts new file mode 100644 index 0000000000..7dadfac084 --- /dev/null +++ b/micro-transaction/src/infraestructure/adapter/secondary/transaction.adapter.ts @@ -0,0 +1,49 @@ +/** + * Autor: EVER CARLOS ROJAS + */ +import { Injectable } from "@nestjs/common"; +import { map, Observable } from "rxjs"; + +import { Transaction } from "src/domain/model/transaction"; +import { TransactionResponse } from "src/domain/model/transaction-response"; +import { TransactionPort } from "src/domain/port"; +import { TransactionMapper } from "src/infraestructure/mapper/transaction.mapper"; +import { TransactionRepository } from "src/infraestructure/repository/transaction.repository"; + +@Injectable() +export class TransactionAdapter implements TransactionPort { + + constructor( + private readonly transactionRepository: TransactionRepository, + ) {} + + findAll(sortBy: string): Observable { + return this.transactionRepository.findAll(sortBy).pipe( + map(entities => entities.map(entity => TransactionMapper.mapToTransactionResponse(entity))) + ); + } + + findById(id: string): Observable { + return this.transactionRepository.findById(id).pipe( + map(entity => TransactionMapper.mapToTransactionResponse(entity)) + ); + } + + create(transaction: Transaction) : Observable{ + return this.transactionRepository.create(TransactionMapper.mapToEntityTransactionCreate(transaction)).pipe( + map(entity => TransactionMapper.mapToTransactionResponse(entity)) + ); + } + + update(transaction: Transaction) { + this.transactionRepository.update(TransactionMapper.mapToEntityTransactionUpdate(transaction)); + } + + + + + delete() { + throw new Error("Method not implemented."); + } + +} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/config-server/config-server.decorador.ts b/micro-transaction/src/infraestructure/config/config-server/config-server.decorador.ts new file mode 100644 index 0000000000..a6be24ad0e --- /dev/null +++ b/micro-transaction/src/infraestructure/config/config-server/config-server.decorador.ts @@ -0,0 +1,24 @@ +import { envConfig } from "./env/environments"; + + + +export function Property(valueName: string):any { + + let value = ''; + + value = envConfig[valueName]; + + if(value === undefined) { + throw new Error(`The property ${valueName} is not value`); + } + + // obtiene valores de envConfig. Aigna a propiedades de clase en tiempo de ejecución. + return async (target:any, fieldProperty:string) => { + // Tiene como objetivo permitir la definición de nuevas propiedades o la modificación de propiedades existentes en un objeto + Object.defineProperty(target, fieldProperty, { + value, // valor optenido + configurable: true, + enumerable: false, + }); + } +} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/config-server/env/environments.ts b/micro-transaction/src/infraestructure/config/config-server/env/environments.ts new file mode 100644 index 0000000000..293bc8a0d9 --- /dev/null +++ b/micro-transaction/src/infraestructure/config/config-server/env/environments.ts @@ -0,0 +1,18 @@ +import { readFileSync } from "fs"; // Lee el contenido de un archivo +import { parse } from "dotenv"; // Analiza el contenido del archivo como variables de entorno y devuelve un objeto con esas variables. + + + +const env = process.env.ENVIRONMENT || 'local'; + +let propertiesLocation = null; + +const propertyFilename= `application-${env}.properties`; + +const property = process.env.NEST_PROPERTIES_LOCATION || ''; + +propertiesLocation = `${property}${propertyFilename}`; + +console.log('env type',propertiesLocation); + +export const envConfig: { [key: string]:any } = parse(readFileSync(propertiesLocation)); diff --git a/micro-transaction/src/infraestructure/config/kafka/helper.config.ts b/micro-transaction/src/infraestructure/config/kafka/helper.config.ts new file mode 100644 index 0000000000..d4b579dad0 --- /dev/null +++ b/micro-transaction/src/infraestructure/config/kafka/helper.config.ts @@ -0,0 +1,28 @@ +/** + * Autor: EVER CARLOS ROJAS +*/ + +import { KafkaOptions, Transport } from "@nestjs/microservices"; +import { KafkaConfig } from "./kafka.config"; + + +export const KAFKA_CONFIG: KafkaOptions = { + transport: Transport.KAFKA, + options: { + /*subscribe: { + fromBeginning: true, + }*/ + consumer: { + groupId: KafkaConfig.kafkaGroupId + }, + client: { + brokers: [KafkaConfig.kafkabrokerUrl], + ssl: false, + /*sasl: { + mechanism: 'plain', + username: 'ever', + password: '123' + }*/ + } + } +} diff --git a/micro-transaction/src/infraestructure/config/kafka/kafka.config.ts b/micro-transaction/src/infraestructure/config/kafka/kafka.config.ts new file mode 100644 index 0000000000..635694616e --- /dev/null +++ b/micro-transaction/src/infraestructure/config/kafka/kafka.config.ts @@ -0,0 +1,16 @@ +/** + * Autor: EVER CARLOS ROJAS +*/ + +import { Property } from "../config-server/config-server.decorador"; + + +export class KafkaConfig { + + @Property('kafka.brokers.url') + public static readonly kafkabrokerUrl: string; + + @Property('kafka.brokers.group.id') + public static readonly kafkaGroupId: string; + +} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/shared.module.ts b/micro-transaction/src/infraestructure/config/shared.module.ts new file mode 100644 index 0000000000..774086e986 --- /dev/null +++ b/micro-transaction/src/infraestructure/config/shared.module.ts @@ -0,0 +1,11 @@ +import { Module } from "@nestjs/common"; +import { PostgreSqlModule } from "./sql/postgresql.module"; + +@Module({ + imports: [ + PostgreSqlModule, + ] +}) +export class SharedModule { + +} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/sql/pg-db.config.ts b/micro-transaction/src/infraestructure/config/sql/pg-db.config.ts new file mode 100644 index 0000000000..ce494235ae --- /dev/null +++ b/micro-transaction/src/infraestructure/config/sql/pg-db.config.ts @@ -0,0 +1,24 @@ +/** + * Autor: EVER CARLOS ROJAS +*/ + +import { Property } from "../config-server/config-server.decorador"; + + +export class PGDBConfig { + + @Property('db.pg.url') + public static readonly pgdbUri: string; + + @Property('db.pg.name') + public static readonly pgdbName: string; + + @Property('db.pg.port') + public static readonly pgdbPort: number; + + @Property('db.pg.user') + public static readonly pgdbUser: string; + + @Property('db.pg.password') + public static readonly pgdbPassword: string; +} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/sql/postgresql.module.ts b/micro-transaction/src/infraestructure/config/sql/postgresql.module.ts new file mode 100644 index 0000000000..24319da3d6 --- /dev/null +++ b/micro-transaction/src/infraestructure/config/sql/postgresql.module.ts @@ -0,0 +1,26 @@ +/** + * Autor: EVER CARLOS ROJAS +*/ + +import { Module } from "@nestjs/common"; +import { ConfigModule } from "@nestjs/config"; +import { TypeOrmModule } from "@nestjs/typeorm"; +import { PGDBConfig } from "./pg-db.config"; + +@Module({ + imports: [ + ConfigModule.forRoot(), // Global para variables de entorno + + TypeOrmModule.forRoot({ + type: 'postgres', + host: PGDBConfig.pgdbUri, // process.env.DB_HOST + port: PGDBConfig.pgdbPort, //+process.env.DB_PORT, + database: PGDBConfig.pgdbName, // process.env.DB_NAME, + username: PGDBConfig.pgdbUser, //process.env.DB_USERNAME, + password: PGDBConfig.pgdbPassword, //process.env.DB_PASSWORD, + autoLoadEntities: true, + synchronize: false // Para sincronizar atributos de tablas de base de datos. PRD: false + }), + ] +}) +export class PostgreSqlModule {} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/entity/transaction.entity.ts b/micro-transaction/src/infraestructure/entity/transaction.entity.ts new file mode 100644 index 0000000000..2bbcc34147 --- /dev/null +++ b/micro-transaction/src/infraestructure/entity/transaction.entity.ts @@ -0,0 +1,33 @@ +/** + * Autor: EVER CARLOS ROJAS + */ + +import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; + +@Entity({name: 'transacciones'}) +export class TransactionEntity { + + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ name: 'id_debit'}) + accountExternalIdDebit: string; + + @Column({ name: 'id_credit'}) + accountExternalIdCredit: string; + + @Column({ name: 'id_transfer_type'}) // 1: pendiente 2: aprodo, 3: rechazado + tranferTypeId: number; + + @Column({ name: 'valor'}) + value: number; + + @Column({ name: 'transaction_status'}) + transactionStatus: string; + + @Column({ name: 'state', default: true }) + state: boolean; + + @Column({ name: 'created_at'}) + createdAt: string; +} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/infraestructure.module.ts b/micro-transaction/src/infraestructure/infraestructure.module.ts new file mode 100644 index 0000000000..97bddbddb3 --- /dev/null +++ b/micro-transaction/src/infraestructure/infraestructure.module.ts @@ -0,0 +1,27 @@ +import { Module } from "@nestjs/common"; +import { AdapterModule } from "./adapter/adapter.module"; +import { TransactionPort } from "src/domain/port"; + +//NOTA: Elegir que tipo de adaptador(primary ó secondary) será la fuente de información(select, create, update, delete) para cada adaptador +import { TransactionAdapter } from "./adapter/secondary/transaction.adapter"; +import { SharedModule } from "./config/shared.module"; + +const providers = [ + { + provide: TransactionPort, + useClass: TransactionAdapter + }, +] +@Module({ + imports: [ + SharedModule, + AdapterModule, + ], + providers: [ + ...providers + ], + exports: [ + TransactionPort + ], +}) +export class InfraestructureModule {} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/mapper/transaction.mapper.ts b/micro-transaction/src/infraestructure/mapper/transaction.mapper.ts new file mode 100644 index 0000000000..49c4bf81ba --- /dev/null +++ b/micro-transaction/src/infraestructure/mapper/transaction.mapper.ts @@ -0,0 +1,76 @@ +/** + * Autor: EVER CARLOS ROJAS + */ + +import { Transaction } from "src/domain/model/transaction"; +import { TransactionEntity } from "../entity/transaction.entity"; +import { v4 as uuid } from 'uuid'; +import { TransactionResponse } from "src/domain/model/transaction-response"; +import { TransactionType } from "src/domain/model/transaction-type"; +import { TransactionStatus } from "src/domain/model/transaction-status"; + +export class TransactionMapper { + + public static mapToTransaction(entity: TransactionEntity): Transaction { + return new Transaction( + entity.id, + entity.accountExternalIdDebit, + entity.accountExternalIdCredit, + entity.tranferTypeId, + entity.value, + entity.transactionStatus, + entity.state + ); + } + + public static mapToEntityTransactionCreate(transaction: Transaction): TransactionEntity { + const transactionEntity = new TransactionEntity(); + transactionEntity.id = uuid(); // FIXME: Quitar luego de validar en la entidad TransactionEntity + transactionEntity.accountExternalIdDebit = transaction.accountExternalIdDebit; + transactionEntity.accountExternalIdCredit = transaction.accountExternalIdCredit; + transactionEntity.tranferTypeId = transaction.tranferTypeId; + transactionEntity.value = transaction.value; + transactionEntity.transactionStatus = transaction.transactionStatus; + transactionEntity.state = transaction.state; + + return transactionEntity; + } + + public static mapToEntityTransactionUpdate(transaction: Transaction): TransactionEntity { + const transactionEntity = new TransactionEntity(); + transactionEntity.id = transaction.id; // FIXME: Quitar luego de validar en la entidad TransactionEntity + transactionEntity.accountExternalIdDebit = transaction.accountExternalIdDebit; + transactionEntity.accountExternalIdCredit = transaction.accountExternalIdCredit; + transactionEntity.tranferTypeId = transaction.tranferTypeId; + transactionEntity.value = transaction.value; + transactionEntity.transactionStatus = transaction.transactionStatus; + transactionEntity.state = transaction.state; + + return transactionEntity; + } + + public static mapToTransactions(entities: TransactionEntity[]): Transaction[] { + return entities.map(entity => TransactionMapper.mapToTransaction(entity)); + } + + public static mapToTransactionResponse(entity: TransactionEntity): TransactionResponse { + + const type = (entity.tranferTypeId === 1)? 'credito': 'debito'; + + const transferType: TransactionType = { + name: type + } + const transferStatus: TransactionStatus = { + name: entity.transactionStatus + } + + return new TransactionResponse( + entity.id, + transferType, + entity.value, + transferStatus, + entity.createdAt, + ); + } + +} diff --git a/micro-transaction/src/infraestructure/publisher/transaction.publisher.ts b/micro-transaction/src/infraestructure/publisher/transaction.publisher.ts new file mode 100644 index 0000000000..0657d73a91 --- /dev/null +++ b/micro-transaction/src/infraestructure/publisher/transaction.publisher.ts @@ -0,0 +1,24 @@ +/** + * Autor: EVER CARLOS ROJAS + */ + +import { Inject, Injectable} from "@nestjs/common"; +import { ClientProxy } from "@nestjs/microservices"; +import { TransactionResponse } from "src/domain/model/transaction-response"; + + +@Injectable() +export class TransactionPublisher { + + constructor(@Inject('KAFKA') private readonly kafka: ClientProxy) {} + + publisherRegister(payload: TransactionResponse) { + const msg = { + id: payload.transactionExternalId, + value: payload.value, + } + const message: string = JSON.stringify(msg); + + this.kafka.emit('topic.fraud.created', message); + } +} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/repository/transaction.repository.ts b/micro-transaction/src/infraestructure/repository/transaction.repository.ts new file mode 100644 index 0000000000..e887317872 --- /dev/null +++ b/micro-transaction/src/infraestructure/repository/transaction.repository.ts @@ -0,0 +1,70 @@ +/** + * Autor: EVER CARLOS ROJAS + */ + + +import { Injectable,Logger, NotFoundException } from "@nestjs/common"; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from "typeorm"; +import { TransactionEntity } from "../entity/transaction.entity"; +import { Observable,from, switchMap } from "rxjs"; + + +@Injectable() +export class TransactionRepository { + + constructor( + @InjectRepository(TransactionEntity) + private transactionRepository: Repository + ){ + } + + private readonly logger = new Logger(TransactionRepository.name); + + findAll(sortBy: string): Observable { + + return from(this.transactionRepository.find({ order: { [sortBy]: 'DESC' } })); + } + + findById(id: string) : Observable{ + + return from(this.transactionRepository.findOne({ where: { id } })) + .pipe( + switchMap(entity => { + if (!entity) { + throw new NotFoundException(`Transaction with id ${id} not found`); + } + return [entity]; + }) + ); + } + + findByTransactionExternalId(transactionExternalId: string) : Observable{ + return from(this.transactionRepository.findOne({ where: { accountExternalIdDebit: transactionExternalId } })); + } + + create(request: TransactionEntity): Observable { + return from(this.transactionRepository.save(request)); + } + + + update(request: TransactionEntity) { + this.logger.log(`update transaction ${ JSON.stringify(request)}`); + const { id, ...updateData } = request; + this.transactionRepository.update(id, updateData); + } + +} + + + + + + + + + + + + + diff --git a/micro-transaction/src/infraestructure/subscriber/transaction.subscriber.ts b/micro-transaction/src/infraestructure/subscriber/transaction.subscriber.ts new file mode 100644 index 0000000000..ec1824d87c --- /dev/null +++ b/micro-transaction/src/infraestructure/subscriber/transaction.subscriber.ts @@ -0,0 +1,29 @@ +/** + * Autor: EVER CARLOS ROJAS + */ + + +import { Injectable, Logger } from '@nestjs/common'; +import { TransctionService } from 'src/domain/service'; + + +@Injectable() +export class TransactionSubscriber { + + constructor( + private readonly transactionService: TransctionService + ) {} + + + private readonly logger = new Logger(TransactionSubscriber.name); + + public async handler(payload: any): Promise { + this.logger.log(`starting process`); + + this.logger.log(`message: ${JSON.stringify(payload)}`); + + this.transactionService.update(payload); + + this.logger.log(`end process`); + } +} diff --git a/micro-transaction/src/main.ts b/micro-transaction/src/main.ts new file mode 100644 index 0000000000..fa18d3c57a --- /dev/null +++ b/micro-transaction/src/main.ts @@ -0,0 +1,34 @@ +import { NestFactory } from '@nestjs/core'; +import { AppModule } from './app.module'; +import { Logger } from '@nestjs/common'; +import { ValidationPipe } from '@nestjs/common'; +import { KAFKA_CONFIG } from './infraestructure/config/kafka/helper.config'; + + +const port = process.env.PORT || '3000'; + +async function bootstrap() { + const logger = new Logger('Bootstrap'); + + try { + const app = await NestFactory.create(AppModule); + //FIXME: Refactorizar agregando en su propio módulo y en el modulo de infra + app.connectMicroservice(KAFKA_CONFIG); + app.startAllMicroservices(); + + app.useGlobalPipes( + new ValidationPipe({ // pipe global para dto + whitelist: true, // solo acepta la data qu estoy esperando (dto) + forbidNonWhitelisted: false, // Si propidades que no estan en el dto, muestra mensaje que "no existe esos atributos" + }), + ); + await app.listen(port); + + logger.log(`App running on port: ${ port }`); + + } catch (error) { + logger.error(`Error instantiated server`, error); + } +} + +void bootstrap(); \ No newline at end of file diff --git a/micro-transaction/test/app.e2e-spec.ts b/micro-transaction/test/app.e2e-spec.ts new file mode 100644 index 0000000000..50cda62332 --- /dev/null +++ b/micro-transaction/test/app.e2e-spec.ts @@ -0,0 +1,24 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from './../src/app.module'; + +describe('AppController (e2e)', () => { + let app: INestApplication; + + beforeEach(async () => { + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it('/ (GET)', () => { + return request(app.getHttpServer()) + .get('/') + .expect(200) + .expect('Hello World!'); + }); +}); diff --git a/micro-transaction/test/jest-e2e.json b/micro-transaction/test/jest-e2e.json new file mode 100644 index 0000000000..e9d912f3e3 --- /dev/null +++ b/micro-transaction/test/jest-e2e.json @@ -0,0 +1,9 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "rootDir": ".", + "testEnvironment": "node", + "testRegex": ".e2e-spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + } +} diff --git a/micro-transaction/tsconfig.build.json b/micro-transaction/tsconfig.build.json new file mode 100644 index 0000000000..64f86c6bd2 --- /dev/null +++ b/micro-transaction/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/micro-transaction/tsconfig.json b/micro-transaction/tsconfig.json new file mode 100644 index 0000000000..95f5641cf7 --- /dev/null +++ b/micro-transaction/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "ES2021", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + "noFallthroughCasesInSwitch": false + } +} diff --git a/resources/arq.png b/resources/arq.png new file mode 100644 index 0000000000000000000000000000000000000000..a9795c7352922ac8ace780519a33432cc3e0cf52 GIT binary patch literal 53733 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Νn`HTMe?I@j)py0iP?1NJDl6M7Ru`de9`i<`OZ$J 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

C5cW4Q7n4 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 z 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�xOq%Ms9pjJ^}PSW@kCyQOD z+)zbJ2A_po73O-;XKePl6{Jq)5mt|=&W zZR2WSPF2v;!R^C?eQ6kb$a9lIc;i1{*?H0S_VzQx43{W&|K_CQ;rRD8i5p(vRu!7a z18jW?;FQjsdSJCHD)(y#CgFXBb4uzq?j@LUrr+Uz=Rxo0wHmqgz|qx z=l|k^{}(MY{{zVK|M%SnG7@kk$T}o#=kWQijHKtLYFJM5uD<<&CoRLwT7;2`2roW# zwJ7lmQ2d@fEa4E&s70Aop7F%c?e3>~*}t7VNi-g|eCT;B@qKBl;YQ3UXVmG_CI>ROzt=uBx4cGpK5JbREczap~X? zjN=UjkbSeQ66v0|$NIFYp3LX?nu#wr9Qw;%e0UOxipsIzY)$*HllBv+a5rV**Awyl zjqaU1Zdb`fo}*ucAUzoE`1h?37{pQ*^T~CQpG2`8n2>*uxrFd@_nc4nl8pVTKZVzh zq%3Z;+J8W))Kxi`d|-hl9YPM1_->lr^O(Z&2adIKmfvO=iS>_MVwzV z;#GY(2jV>;MAt4&7@)*oVVe1i*GMYtZQbBT%^#EF(LuwT+lkA;A)svqkp@RHHFs!k zyUEPuz{@d2g)%{pE&Z>KXl0F}O6n$penC*?F;5aSqoff$wSdUq9S3BM9U7577r_q; zG-m|Xux3C1&+jkv1&w|W)gaa*_ z^~+NsgejhH(o%mQd?cf$6->!3XMHVez#-_Uc{I!@T=hwoTCDYx=<{YVXSRlZL3JXf zv~9q;){Sc}`DHW->XlaCmNn6bWrY4Mf9&ndITO6W2#<-(nh*H}N>=_TBnRJWGV^}p zTh*5R$W{dr=O`K*qmX?Y4GwJyXtqqq^>ZT8tr1EX>w)zi(5!CkeJ@Idf#)aur1&3$ zFT+s>$Q+Miw@VMf&8KSOJ6roy)kp9cPzSn)NE@G>g22A@q)sNO4QOVbLKzxPSY;iR zo9PLet{f@mQ#!+0FWz7|+Er)=p(=&gJG<@D^~$#GQW02KNTCg@$V;;B`PrcUob`kG z`cpXGl7+}tg-!x5nG9{jsvT$yT|gjz%PP7>+%(g zjUg&YeW{8rJjrd}SflB6^8W;;(p5zZs85VbYsgD-I(U7L?NxIbvQ4adyd6GS$D*cc zr7`IyiMi$^J}3;+9!g5LzszEdqTL8&bc8K&y7kbei??S2VDA+*o=&Ge+RWRNSK@@m z#$Q}9R=280x2;A3VcAC|D|`EeMG&;-W-4<#G=G0=2LCpAVo3#W+O(^hb)?C@Qo1z5 zChw-tmL0HA0&<^q9rEV6rdE-(okkLY)4F!usuC@LY}1~Q)}XMQPMzbldUgJ5_a2;E z)m!v^OxN-kogm>L7&CUG+Uad`x+|4V37U%cr{7mKJ>$HrB?4}19&gz_xlMQ@oGm*2 z@FbieH8+;jWt~qVHB^u@x6y%M)+dYnRfy8wxS}9(3KTQ`A@kTT*ru~HsWl)#5BlVw zZE$lgxtCTkvCe{XQh2;gmwQA?*_fWPeHd`Zvff@uBm!B$ynK$GJ&4b-^N{q$=RBRQj|YZc`&)AH&>Rd#W}l}kx?Didxj5xcvmb-{6p2};iz?RF zn;On5S8ct=V6kj5|GakR++MC@UL%Wy%BwbR=3?R543i6Qz;r6lSObcYAk1Y;8V#pc z5A70Q0Xv1OYBQq|VtZ?+S^!?!nbAaiaH;K?{5q zrAOxEq#|k@9f8|Lj-Jf0=ggw1rMh|uS3^b zbr>$q6O_$8^OC8$5uDa*RsO-(_w5pKv>GmV>sIq$Hpa zKR@sDv`zoJZAtte?xSzVM9%cYphIs=H*xZphq5pE?^0I%qBV9z{Gq2o+s*8-u<^tE z!^YN+SU8PN5N@@Ov7Q3I{1ed|5ghR+JyNd%^SuQl|C7@co*;4g12UY6HXD8dM72}D zE*)aPBfJ`HbmzxK+lZGrzncmXXrpUK`PCk|RWGhtTVLd&Jgy0d*KuPv5F64s#U=W~ z9!@~_NTe$XQI6y*W)J`)q+j4HL7+GQOC{%Vs};M}*%W{3gMtfyd-M*GJO-bZPqs8= zax-$C=&gv*{+mwSViJ3saT66@RMZX?*4xPdObEOjL4z2E6vYD?sETHhWc_h`5^t_1KYv{_%`mhOeWV$v)e+Y+DxsafzxK}H zvAb>MTPfS%RHGJIbS{Bck99Vm_LT3Jpjxn@psE3CW2-k9*e0KY z$NNmZ{2_9?IwHNIZGC%FDFqqgVNV^6J_jAEI~qX-g8^19$0n+{Fv#jzf2#&}y9}S5 z*);e#ynyu+KKc}iwqc-n&B4N-`pvtF1s@bO~OU5;#+XVx-9)^3{?XTkLGlKdeXLW!dFfFU!@DdpX5~A06n;`V?Pf+hrb2 zs>iDnjcuX|{>npcO@vgylWw{SZ7>k3eTIAtgLjN z)q|_QJNn%&|DD!H^jT5gPk(9w`Z^zw4-*40jBhRaCxJfwY6h3;;y2LN61@)h&m*xW z>kbeRDy9PC(g&tW7-2$U_pMsNwoa#ilvU^A$P;X=ziP3g`?i+dB`5%n&L^zVPYvW8 z5R$AGK;XA;(cAff8IJQCS^$J<}GzNbjaga+|TG zo}Mzc*EU-tY8}J;CRs0N;?B-f5^?>{=~eUU&VK#$6Yzpy7U5L2==L9oueYv>_xX$g z_HUWnJdb&ep-`qVL<__x%mSwEuaOz}#iEU=ew4;CeNueH0a?oh504c%a|knUsfwaq z)?JSrQso!I$1R%2imXXQ#NO|=XH(JOs+iYgm?Ix*9k|dZP6%=+QgX;e?j9<w6)}0t6oH++O;N^95K0~1*^x>obU?_bJGjp=?M3@;rR*KlpnS5 z)2*WUr91eA#FT$Bbj3{9C>js4qOD4$l`bHgR>7VB`iTm-F!1fI; zk)Y{aIwvI?;-W){!zB>k#Iq!FrD4L_9_Ns61U!L`ZZQ8%`+7|S;=?^gJFXxxxy>JSU%eqGnrX1dED$Z3uXSGmSX$4mlj&WNSCnXME{(f=e zmuv2vy`!N|;2rDoPJr7y!@MpLSVQ%#jsa0M)(+>Y*Y4ZJ%cApMNmK!E5tU|`EAV(} z@S0Uc)9)|^jE6zl8L2G5+rBrPGz z$bCXD{YpD-_)ZD}QcOBg zSstX)tK3cxESa6DoNXSryu3?x-rz-GEM}{Xi3biXvmM`g!5D9rZWwGjI`a&DBOV)4 zhJ9f><6QTfL?q&ODl1~wUYWzQHU862rY!4paQ*5Ws|+w41MiEfAm<5GhjmiF1vaCr z691Fm1qd$3hS{^IzIXc>9SSsj_b-F0?Qu*h%ho6-zniG_sAoQof8P^iOkYDkw!WDW z(qFKwb?;>tCexVn>ICvjs-zm*KxWj&jCKGO?tNxKbW6;=bB3I33K+ho+WXaxoSNL{j zh#|X-%e~>6n~S%(FIxOp@TyhMNIYjcCzEwZJlMSFqourIt+T|tfAR%VXxVpbVC;tlo?<^;z>4Rm^^ZsHWbGttFZ1I zi)HW1l%H;NTg<*VfY;C!zST3eqvi?tUKVnHKYD1(HBht>=GPiEa^H5eyoB5)es$J1 z=(pwl1Up`@cnuO<5xn%uHJ%-jDrm`R40J!^@PG31cKWR3wm>>()PR(ukCyp>UIejo zCL|-I>)E|LvyMVtZw@{nMfTxTU%6lW8T}>ywx3`RnW8K<=a{61PVSjiVAOC>%<21UueWTAuIN(MN(J!0MFD0W?$?aEk8RN3A0^{vt zW`nZXRQ&xZ27RVMhw|@yYe#D3@u?>#0tx_WYe2Db)3jcFVVyQWs@i_@?L;K|czc#p zX4SQfweG@~k&>zEM5T1eoj713WoBEWtXPjYf(Aj!N@J!!wLBk5PD5F?m2XJyAA2!a zVH$PrOQQZl=H_%i6CWAP7^Ig?7`R>eWhhW)!|;jxay-S~^>nF!WhDdi^fm4?V+(!XrWNT4?w# zRf~YJ)pG8cqGp)sK9F|)QvB>F`-vn+c^4W!8~s@@dJM?ANP51NMWFktM49c?^iK22 z``V;k&4GzC@Y1ez#7RqUhc`+8@(IH$%P&gM4&|)rbg8=>Xd=|wkEq$P;=@K}=x)BC zD4QtAo|+AOm)iO+UYy(nPq~?W57Lgz^(}p8hYXo{ghmAsI2as7Wp;Jk^XBQ!dV# z*t7!Q(`@08Cgc6S&Sm~nR^P1fdn?-I`mLJW3OKB$z7+Qfs`R}AmJ{kd`jB3MVaw16!Qjl7g(%T(91Jlu)&p{2-@L?Xjsd|E9!FQ*>8AMl;9O+nY#^$CUz_H5`Sc^Q}-0~VLcH1L=a`yS<}7&00GqjWjGnSC~9A8S6MB!b)~K_u=mH>eLbTOVWFB57mQNk|j6y z0{*5yeL8c>hwtdFN>;78%F|nG7k?4Foq0;&ZeMl6;-0;3InUf3d+*tY^DwiZe!my* zU1_+l&0&8+1mSN;p!OfVt4Jkk*WJsC5&_B`%|H|*?~E|$Q_+fqAoyDE5oM(5 zw_S%59lmnN8UOBGR0tVH((hAQ4jm80X!5ahX?6u61l}VN94vuRJF7Qr!QH@L@W_|e zWyU|cTGJnbK^{zUrH3CH@eY4t;n%I%U2WFA!2>e{3Y?3=RBEIJxQx=c3Mqz6y-A_L z+7Vd1s^{kMT772BmhxdeuX=*`ljmp2!hxFsEjfF-M0$53B)X1qQ^J{im@DDe(8!xr zZ9cN;N2awrvujQogAv9%c6O#25)t8>s1UFHV3@>a94nlL?i{Yzbvsl{+;-Sgr{2n3 zm}8g&PfkITSYK9yydb<_M0^U!^eq|SZ<9isIi}d&FP{1qr7Zm5p!*gk<(B`WSvr^O zMPcHF<00cMD`R=3jbV=w$xu05utC>)Wntxz)Q8w^DtShto&)qXH%%mntuS7^p(({l zYwNdHRNig6BeuOV3=?P04{2O5x~*Uv7wVJjxgq{oL7$JqdU@ZCg&uG5jajd#Oz30@ z1@b~WRb7re9xUAIMXj5ESMsB@B7zG7&PYUB9rW6EP1OY+M>io4cyo;R!k=OP)o(!R zYRB=isoH;umLxdaW%o4U*Qc*K@82fBL*($9wtU!Sm?0t~WU_7bzyk+FWFLfGWyLM<)D zpm8(UK)3odx1{{$X=h5{uJ1LvW}schp(L;+i6s?fZ*0=Z4WnsYEphj;12nbj7qz_V zmAEWDe*SRo>dWpOrNKWIb$xL(H6zgQ2;cfZl;Kg4jO)iPBfD?SF`{zEP$#rF>?H3S zt>(rOSx(e8Wi&ib$?^Mtnu}(6WVjv>xhdmr)`w%owE9@{nzs|g`}yPe`6g;i!Ku_3ypoRI*L|t+&sV+NlZ`&KiOUd`)8^cUC610| ziGT@y!FKJTN+!y`w09#P1f*;bAhUltU4Q2i;0Zjj?q_cj63oH#AQRpN66D<4(b6YT65qUX zxf)wpJg%5(<+x}`@IA6!LFj;Q6~ECUM)3v2{(ODvP`2jey=Ccnnws^p!0)FEY8+ zZZJYz0+vfTaX-zwYaYH!;CT1LmJu-#@GXM%(&tXgPreE6ezdW%UwGAQdwk()U1XNC zC9YgBZIG&6%$V-2zuQxZopiJLoSeRM0zx2&Uh&olC;Dc&fo;dh*9s#82*fA3Ie@HD zelA0XG#Q48Rk__QWc*9OyAUSmH?sW2wFD{iuoF>e6ukQ6yO~SxV#}jP`O~WjJ;aRK zh|qLKc0Kz5Ua@uAO}7?tFO{FaM=pZjvv!W)v@62|old_$bgm!BOt1a&M{X+q$jwg! zHN}FZPw>Y;NWWPNg1Su2xex__4M~{cve&cO9v;TpZ|JAN4u~et*|{|NuLgMUPU8i9 z8`8d;4r}9kyBBg*jF!`ZQd%^`rR z`?nF!#OgYA~9JhWq^5m~@yDz&_#=h9?)ai$w-o4w7&kwF@Uqo#)H&9;#>dSm(UO9@G zccM}Q6>kTorw8sHJBXSE!n=t_e!hkgyTh4!31~B`h%MjXNHyR5#^_jfX$sT+>igL0{XcTGp z4Gr@Hs;bZI&>?(?umH4H&-Z1W@T!lWoza5juZ0%~j-t5epDFUhsJ!qkK=|nQc@f1c>MRDk| z_jcVsNNfUiz^JTF@%sdZ;pfy*f2=b_4VYf=p95LbvW*kS#06k+MZ zzt2FF#H7WwX&>I_s63?nTlMdC8KVWWIdy-hmQGqqxcHw-_}{Y^VU<4o*+fV11qpYX z8ZN>_k|y`+_6lo!WsN|WAv~I?1*SZM%iNGrmSRD~%r2r&N%o&7xL?^`RG}z#on&LJ zzFTO_D0d~Akdq+kp(2>xU~3rpOf!AqnGe5zaFkzL7LpSYG{Y%tUCGe0T#xzpIZ`K7 zZtLnF-%MB1Q9KWQ){LeZlt*h&<*Kz2c^i36Vo1!UUK_L=&5tis6LOP+$Wy#>^ZuYh z5$yyu7OK3`@=c_#HX5Or&{u&!tIHtL*Z6aEveShqcHU43$MWcFdg+e*9KI;}33US9 zw~iVQTEY)CS5Mc_58`IU_B&LugHSZ@!twz}OA=oban0nxyJy6^vaC!}5qm94HkTq!Kicz3v5ugWxTl%K6Q2p4Y{z1;qEYzM|xaYr^ zAV@3~(xq}!SHE_VpxkRg;e!hUglfw1h2u~-s_blv`I@Lw>!B=YyKxny`^(Fo$V~Rq zq)k6uLuZ?c@T9Qi75kNdm?jccZQB?zI2}oiEhCDZN4fLH(KM?S5f2W|^+{H?+)0iV zJU_OskN|LGiMA{5W3x%Zlz(4P!n&-3p_If4n||OB|Epn>mH630s+7Q@)JZ2JXYgwx zzieY!vijK2!Gr9_N3w;f(Xf0;3l;xc`an%21UwXY*Q|WdGHaQe!Zbar;?74@b*`FPhA8IlDEN_3hjZP690GulkroT z2UfJ$AX(p^>>0Y^qeD_d66^=1ohkxd`#J0LPSXT^>J_RoJyK0oXwj(sA)EPwaqchl z6v5EJ@4ZTbCWy-I6O=4FzoEDbtbARZz}wl{1qzDb!QtWXyK=}z%_Jlz8B+7|e*I~0 z#uCez!C0AJ3P=#uqg`)A)Sy*iXiG@Y3?K?NfPxE#-rWDpcO$;DYX6r$`?GNrZyEY! zlLa_Oq^nUfgm%;iXtIq6Gc z2_wvEwwRRbTLy`S^$@^@2>_aR`fX-!srz|St$l-0%?;(o6z)30JPZ)AaFf4g<&2?e zcX^f)a9`p^va%&ntgK4XWr!mFgUS-hsN^$G4=qShZ+fFw5xzG;Rq!%ueJ=YhY^Q`S z0MPXr)1M7L>mwta{+m89lkzYdXuIE^XaK$Kle4!bhG|wguUDT~USPiEfrgG^Sf7az z#r%N1ZBiJtQq|cP`3M31r~-+oEhJ8-Z&=plo$PmS#)E z!zw#W{oJvq&VILAQNBk8J8}$B?;VFUVT6M6+c`aY(&CoP|#P9Oc}{2JQ4wHh89S7QTexXS~~e@dxOBq+!X7 z(74L-uEjN4!YB^gvR{R>;ezv^0N~(}psYB2SXO1xgkJPA*XIo|nNy!NzBFd|KvT`7 zT@HMO0aMXZYF_J-{Pp)Z5CNEIn@5K_!Egi%i>7Fs4E zUWNO=^raZF=oMw&82I{8zy0>0STaK6Yn#q1E4n`iUx8tDrVZO2HI}qeahRagAT{~iDjma>N*Ub?s{b}hG<;aI*vdQ#DgYfj!_sQeZ+XO7s z5g3uZ*wz31G5=5`^1=#|D))@bbvaEBDC?chIRnScKibbbX1VbS;cro+aQmf|NwR*R zC;A@-y1#zG9rod7 zace@xq#>S<`d$VVg(E#Nu5il954j?#=zoCIHKBC>P}oxZ&pmedsgGtvLTqdf|8GB_ zcAJZYl(d6>TW2bK@NcmY6=HO3B7*Ac>%)Hk-XM+Uk1xpjB=$dC2$Cl4lft(aEJgpm zwg0t#+@E%UgT;U?#1 zkDK1smy9}UpX)-p3`+fZaoLN;9ouGuvXwb)W7q#)aOCot(m!yhInnr$l4`f=idg>h zVw1YJ^*piuHVF5=3ST|yMpt;}ekJvvTCW$7#ci5(b zy9jqO0G!f}&At4@57YE^WL;aNVnB?2LEaj>Q*s$7dq?wN?jtm^H(FT}I*7{A1;V}g z&Gqdr)6U_+Vr5#?$Wl0`cl7DljvYsEa7AH*U`H0?c%M8rOJIRu+x=Mx6XUJT=Y5RI zsP%kXWsa3eqCjH!_Yf(G)uJV(#3Y4JC#C{Ut`PknnOgN32d zdI3V1$bT>1^d3rl+0~V^sYrG`$70U)U}#4prtfPHFw@$~-a$6R72^6ZEzVz0D<3V~ z!$zxsi&!!eU!Z(x^{)XI;xRK{x2J6v`=Wk%0jYh>i;IrG;G=nurWb3(?rw#{?}u(P zqv%b&`&Bq3Sz-_;*~c?G59$mJt2Kbv`pf?+uxekyBo}iziweV z*N>!>`5LxM*~B~U0MQOm#=(fU@L|gFc9?mO(UugRDrb{v|vpK5UKfrvvTgE+jhwdgXWNW=ca2kIOnCQh`7{wPYsGg}x9Q#PR9; z^rqwF;@Y@<#3v=)?F@i1uGJ7AK_}$4g4xFjsow^{3be7A<649|F@6%Y&x`Lo7&BEO~JRx^PJJw4`VzLC872aeavb z?YyA_Z$Nvj7S@d)GJ`;<-0v$5d5BFEAkid7lawh%w?5p@W!pv z9R8O=nps|2yd&#fd%7X@rsM(c>5ayN$sM7AKf-7H5tBv;db@H44Bb+dDjOhWUE<59 zw?`F6Z?YVWL!b?}mRng8TN?M#hZvrBi8o@ulpMU*L0NSHWza*B%{NZloO$7jBK25gzirsqEIH2&4=Dx$#M!Yq7g^DhZ@wMbf$-?; z?Cjs?4&Ul8H@gt=yGB6B8UeP;d{C{rER>X#L;~*bI#&H)q?iq_gYEv5Vjpvx)NG&Jt)_MjjDkSN5%GwlW zRX!CG;km%vd*Dd|uOFdJGY~{rIQ!v=gm5!Z-261s;Ef0`{}>L7Z*&m&Q^NWcpQWm* zl31Lg+S|$vL^*WSJVH2#w|X5X3O`j|=CFCK9*U|_T&(?hqF0ilCx}D(?!G7#;uEVL z72t?DRd*{&l|Um)9J@`l?(ztJ{6Im$!Ri#T9bm|SL-g%lRVl+G2zcWg2L%u);OAD_ zcACm$rB7?6;AE8?Xy#?LcXs@YR_eomyog-)-(CQE64EUREp9ff&;p4^ZS3tLoqp5Y z9}CTrGR%D(B8fDZ1ABX<6zIK|CXJf2O7;Dcw-c~ou@0Sb%=olIhHt2+cAVEPAu?lm znprLq6_=S_a&b?Gd@C!*E!B8Q7pq97`=f=zzqS=S5Mz2?b*pC=3^1yztBU~{hl=Gv zW$-vaI^$SGlXSh$ze43s(CJnsCne!TL0FPuq}myaDtbhggH1KdZH}@x+i*D;3|(~m z9j3@qiPMWhj*ob4P+L%~m?cdgx>z}ez|;epsSvjVnSE>@3*$nC^BZj188tcv=#45o zkb9XSnuJSP+5w4yoEfv-3J8=-0yZS}3YUk~^V*T@Ky3bb#^y&56n!&~Q)e#OZ z`9#OmiE!wUD>|c3O`|pbPDY4ahbAtpQ~5OtCM;d92F(r^%5S%5Spz6^EW^FcudlBs z=H}c$)#{A>Q}V(-plWNb;dY-#TTQ`>JhtX&TCm1u_h(F2Xc(gl78ID_@{m$Qx!d~5 zq;gZMOH+c$in%LYS`L1(F-^HJXxy6mM4m!oVH0M)c*fom-Gvs)6bHgZE-wqP`oR9I zu9#yGR=Z1M{A|{~8q=>_SrI^~_43B2+g8g*%JyGGWkwv5S=aG&saP9fZ{C3LZO z-Bu<{OaoFi3c4P=)Sqk_8~k;vQ$c(@^!1(QB&M?W95mqB~EdGT%56%Hb!ffEHH5xaFMfM z@;h}EWu1IlC54hJbxOLneS^$fJU(X1zg@{k5HI}kPxCi_#4{aQg7GBm$v(;$H%6hJ z5FEr0;LC_K*$Hx%ttSRP@}{vGILGYmdlEcfgKe;=qEL00H%lONiyam}=A&)Of*}g^G+#OAsXQWE z7F1+U0@2Pi zlmSd;w9M%0@!AWG{_WL>CC%Ci)KMKQ2qi&|cWySNXBsd96%9p?r z+mO)-Qw|RlY*L41g;ECQD}Nq=_g46zYrS zn-xPm`FI|TTn+)G9lD$wr8n2Q1YD|$AKAqC9KKU#K1aL}U9jMI^YN~%7}=eTgC35* zWxsXEsuZ9uEW$+^X(i3ZUKG}jm+N*x9_L*ia$-POe?mYI!PpbReEggkS?4r}@O$lc z@~ly@SVRpzbDgm{11Gl6=*J&0yVsaS4N4FiD|Q+e-K6lnc+_A{5sh7_>?0A6e@oYv5TDJx7uTdYjr)|!IeC6H32oD;Qgox0j!+GGooJ6$!9ID1YL2KyJJEVUhZx|{5Pwe&AkJMSu z*AVJNYn{lc!$S;&)87ABnWAlo71BbMpx2Gq+-8y{(0U%;ml&e|#&Ry>LPHsG_-G;V zQRbQ)LY?21oA0ihuTKjD`QMTD#b>uXTVI0aaERUiUtf+sw#MjsZJ{!M$C}0%ivP|` z|6kZ+vvqs>pMP(BPRGE|b9k+!tLtl^{vnZq2rYip)Xr#BbgQQv2*gPquK#86`0yY> zg~{C{M!`L|OifKKzkDL~pH#=-u?avOf<@k(5GRGuME;14#pqsVg&g92WJGFoyigCx zCvKeI9aolydLz`=)xARt!6zWd&CUJ(pHVuH(Y0cFpICoA{jJG90gshS%J7Uwr%faxja&b|l8ira zv+nee#^au+C7Vg>IiLT=!5QPK-woakGe58`N1DONJ#AhkJIBS3o07X(p)8x$wK43- z#)!->4_BymV=d2n`rgP_0NQQlna%HRtCWHEA(`}|r$X4^>B;UQjCLI3WtiO7xXhXR z*w9JkJYusy7rqJ%k8HN4tsG7{GtfCWf(j;H>N7puBz`blT9{j8)f#kB(8&4j=r!h6s^{!Q5 zH^1H4Ll?85@WV{dL|^pu>{ygcqoT=m11^j)5PV~kLxNRxXD}CDU zp7d!-`tT4Mn8kYAmGZ)DkKO6LW!5*d&ZciR|-06+J8`w1ra`iy2 z(5T({(hQqC>>|nc12Ucp>g8zsCBn|{aWNudg!GzqX!iGSb&;T2Y{E@rC5P_i%pdU$ zbj9c7Tg8iGvvJHf&U=VasoJSiH%n0CzBG`|cqlG`Y_F)E@niCv)Nw3=w(aW{F|?<2 z$bbr>Jnrcsd%oy`>7XiLY(=_t9SM??vKlqNjGufkV0x5Mlv%Ovdt$Vvgs@ZTSzgg? z$GMwutJeao>d@d@tL zp1#Y*<)S1D)jKcFDc#yf_517b>LYRDr!(n}t;%S@Zrb*h!Jl9^-e;WZgDLNgaP+es z4!<5@6ha;#ckK?S;r_7-)gh}u;LJE?b?Dij6y8wg>4sJVLQZyXe(?^VW`}E$RZ&u(Q}$1hi|A!8 zT4uRsBDhU(_+Ea0>*jOB;cXcB`N`@P*DeFN0bc1%qg~y(n+s+&o6o|Vq)g3H`E<_$ii`EW`1> zakKjdV<3)G#htV@cTgbHf=;(BQ|*)==vRa5%Z|#g?tm z%NgdEyj^HQ($^(hSG$V5TxWVS-B-j_KUduG_9wCRv82(SUDs0sE1kCm`S|YV{H;Ru zjnq~i5AfrcXWV|#<01V>J=UMwFK_jBu4#pOPSk8i+SsH`DC?=&_|SfY%CEcwZ3pk! z4jWll4D6yzWx|%*9=y4BUq)jzjrvxeJvN4*JU|;hB~PXhxo8mJy}m|pAaB1dhyxQ+ zl{z{@Gk^xUlf`Sjk5cX zc}K^yeQMuLXSxS+8x5DZZ*kvw93^wx5{_9#9Yd)LqQV}Q*=wQ>7U3W5ukFPI9nfkP z>nMsU-pjdGgipHa2a~KMvpGppti#qr(-vTV2PW6;YyWg_Odqq46VT`RV1Y2JtYQg$ zk)NCC>^uN6=xZ>6&)OqdfTL;XxMXwvh>Nj6Xy_@ia1C}%Yb(H>8mY{bd_W_i5NHlv zX#8WhwGAM77STLK2(6}lllC8g|DQ1f4x9bRQ~65t5Hre>FH>AmVFEd7Zf0?o&P_2b zY?5T$@Xd~S#0lkbqs=|22-k|9C3r`tEX?JI61!oe68ZO@i$Oz*F_r-z|AVBuX$sf& zZkUbS!;P!LUdJ{~V{Ov6!^~;eU77R0~Xg8zN=edL3 zk5$hpe!lC;L1a5+ubul_uVVWjc%E^0fyH#1uH4QcsQcHv<+oNVLq`pG$r+r*PU++23gkBLC zR5LfG_bsM`6+ism;dj3ljyqY!!*1Pl8`0>?R>Y)d$SU9;s*bc1z2fim(9Xv0 zKg_}{pJo`FP<$nAmrCP3u2J&0Weqks#*AS6R?V88( z8xR)4H6v;qzLXStnOWU_c|=+9+x>WM_5xp|*8=Rkg&^$cuHP2R)ngJe?E*5H%Ijsb zAF)}4d_n^Rz>v3#u#Ja_W`3GXFb8xfHfMBX{voHMK5`JnjV?k3UE%5=+GDf+)?bh9 zp)Fp>y174P13miYnkv`eGL>kvvUxKog?29^LEzbIu4wTxR{u^on5wD zGsIqz_&uH9p%ifrQ z4BkOT4j(2Z?V5iE6W|u8A~(6?ihl`GkIS>=XQIYsEs$hMru9d4o0Pv5So(4;H+@IKeYE~0!r zzqu)O6jkGfR93&4z~Vwg?NB$kX6@`P;+-~%>wuYgC->CSb)EaHvT|DP;U~iLjL#a& zIGS&SimEF)$Gf>kJ`9dsKSH&pI`j)Fx3nOQy0_g=5%>JHGfyD*ZC=k4)}PlJT}s3dwX$~gfw#65S!*n_2ZW3@?a5L_~M=P-8PeF zf@#*V{x?j7N}4$bf5CGi95YVYdKDg{=PTh3(#tU7MoKRhIJsSh(SzPYCxd)12^jF) z@987jRgRfL$PH*p{bVXk%m(xS1Kn!+X}cem_sE;FDmQ#JK!_tt_y-&xo0^cE>~sWX zgX$j`kStJwWRlN*?rUml4jLl~7h{FN9?n&DR634sk%h&1rXBR}p$hdzp@*)8}5vR4nNS37Cr#qK_ z{}?Bx=1rh{PiSn0iL82gu-9^*h|Sb6ch2cVu}L z_PQm-HOV}EeFdQc1kvNucr>Dgc6l5W~vMjlq*)u5)rn6U$4ZPEp6e^vvbU z64yuDEW!GD(_M3|3Se`(RpH*xaGVOT;pYt`#4frYpFTyf??DCnysm}(qAMPZxNcpw zUA7$^x!&ZQ(;l-I+!d^9pe8aW3Dg@k0~2})w07Xwwj)t)o4uAlEwD01DItv!1ud$J zs+?!aq#U^M)wO+yI3#U?sk%NK^fTN0!T}{Bfe@v_prL3-bCOe#KR#qKQ~G`yk0!2} zD(DW-*Q#SdK|vj}^gF|p720fk**5MjOmeh;RgrPuGL>t4LE>Mv z=--VpE*v8sFB-qaC`9kPA3w~pZhamZ2b)5%V#GG5XjBsY%>1M;fS&(Dq0#oO)dvG> zZ@zsChi@Gj;cb9~?rw~48I%K-%X-})uUte_;Yqg1n=DpHowaCF^PXs+c2j+MOjx$8 zzM+X5lQ&;+B4z9Z=rv^DK6J#Dj|MSHN}Ebe z@O_}A!8*+xC~L8_hu*o|5%wql!77bYre@uVk2m0!#7I@)&QzAQ7~1nOcADB^S>_znPO$PA-LEim@*Y;EK;mtY4EYmCT zDK|81ob#*m!Afh0ir*;@2pHyXvP{TpFwvj-b4p3WGx5m|n%kvxmHk zZFyoem#N}yNE6jtTVo?1GD)YrlHrHn(~v2WD{!+YvpIXF`l2#$@&i}r3d>mm zGamXd4Cv0*!^Xh1WBc!Z2rvFV){KgUN?djf$89Gfnc1+xVZD8yRu0O?R!Y&NYHR3y z7-Lg9iE56ZuD3cCo9z6N1(^E*zKxbqnb%n4P$EmjGAPUjuku2tE**!LrgEv`20wBT zZ5{>Dn6*<_;olmRIO|u9tk=&mo5P#6j@f)nIx<}Dk5U9C6QM%NFD%*jT}p6ph4WZ2n0(IRYT_aGS;PP)S#ApHOt3o}U4W$6#wN z$WNJV2BKifwf4!lgra!EB;W{=k^|k8`!H}_3EJ4eBN&+t%jXOp?Yf~>vu0M1`SVe7`sf&ni{4= z%!LYwA+xb=2bN8VMe20)ae(fwXb>>mLHNS6$fX*gf?ZPBhFZ<36& zQr%cEGM2I-?IZ*z-ojnk#uM*WMoMWKm)hFOG4}I8Kvydj-oMMZD!H@jS@<;*Web z3Ev1)PV7!}n=9CpbqX@ar*uc6mUxo-#0;2umidWgM70MUni0an!XU%-a3EunA?(VK zp4(+gYqfIq&yevDkU^5m*>>_m_f(MCkw1RGq9fUi?^zIXIYB@ikMLPGP4VKcx+3Zd z$k{l_*XlWmH5+_lzJdtf#W0P_H&0CjDXI(Q@9WSi_nUQEW6R~IQq!>q`^%|z#QdaY ztKcp{E%tocC=GW#9?k9qjFhbWA4(4I_id|sP9ms(qquxFC5pV!rG(COiR6)?JPV2X zJ^Ok{MVkpLP9Eiig8wl^T%Uw3wr+sJb5)+621cPNvOd)*h0}_BcoK!DR2nooL}jNy zsMGS00b6E7Q4=s@fe=AM?ZJl?h{8iiXyJ?oPlU(g!${~wGTiT(*4*CC5!opq5E>e> z-FveH?2>#z*t6xEae9UbcaML&U#lbMI=%sq?&;mx{{FWzWN#Gr>!uZx->VMAET)%M zFI2SDwLD#KZlsV_N2v}!Jwv@B9N+W7$JaTt#m-PK$H&~mr{W8-1(^&hd!7)NitBfO zUI|7`iQAOaiHn$538`QW87be8K1JlB+Wjk*L#dCag*R9r4~cBG;kp0@(6fI3G40IG zSaqSTN{YpsLK~OB7he1htFmA0fK|US< zH)1qAx) z*S9iz%hz*y54TD1Dt5xp#Olwmr7LLjTuEVULD0bHc5yN;#d3J)G2e7RKjxFZq1|cR zMZg)J5OKirFa> z^J@PkE~#1|XP_NLpM}$57TJ6Sqny&7H_hDAnJuHT)@5z(c(>yP9-i5{#nD1L zsT(|bZM`=!0Dk9v^0a#eX!h?pFh9CxB#uPW?qN#tve|hPJ@xKkVXl1#=ySU`1@zv% z6v(dkFEWK*`nB`lUI4L;+S-TuPMK=l)SUeBqX06?QDYsi<{26nd&COqkdV`< zJ`p^)Ve`l?GbA+<#cA3xYP_OrZq)%QBeBU^J02OYS|+0hX8#sL&F5r$ydpT`NXbwc zGc~R@3T7A~26YuuXd#;NWCJ?D;J~=NO}0^^p4Zo?3%P;TRlM+n!RML1(zpQ?1}MTc5~D z9z-`_swy`X!!T0Qjh)~-p47BZfm4V-(sh}fs`ej1;}Ohg}(`x zQcW;!%=q&0$g8|j{MW)4r=a*)W$_;VOeXB7etmp56fgYWo(Vf;6xDYkPP=alR;MQv zG?oU;HP_-Dk9IU7(wox*1+}Q|uXokIZC)&0iSFTaQXLI2Mos+8`%i-iHcXhBR zO=X}1j5OYKqHnvECML5%x(E*#?{GhDX3w2_*zo_Bo65db@*3CvQu)>^dw!ViOI-h^ z*RlJ_)8W#T+v?Nl5(Xg3ElYS|PO6C0Pwx8gt<2r2WJG?#_;|7yTjvv%IOm;d2 zTZx4+L{c5Nxxd*nk6vSbuJb=9KMQ`l zd%V;) zEg_G@PbMTDQDIc$VV#ChGF`oe{hNAe;;}FX$d|<==@L@T`UB>Zo%H!snk8ey{L4hk zGe4#*iu8NLem=!}=#PPG1Ivd5kTPROBoE9Tqq|0WdC>t>oNuu7qh8RWnWPNM5$&7I zotpNQk6K-tAsIvcJ(L3(qpKy*i z!wKJTn9>5Ti9oACB+2n6uECLLzvfDI1f#-kBMaBBZy%n-CRmobOBRB29s>(IHs9fm z=bEgNGdEHax$t=jnc>pvtO>hXR|#{C4|tHJ3k-;2V)eht+^yq`<;4hCt}=RZONt?} zf$nEF+h?E5Wg=d6<JN{lM0WERtvz$UcSJ-Z5SsrHNOR8e^D5+%jJ-YU%L{QwVXbBbWMoaYUG1}DDot!m z+LzXu?;!n7Y`o7(Pofz!iNv_Ka=12yWZxNy{nVPZnVZGz2u83ZLysMvUHWTy2mmeR zy)pp(&R%e1}pezaTd-tmLyUUGBkXwwZz zs7-hpdWY$y?KM!qLT)29;J~G^nSx~|xO?4avP&#B&9G|f_yfb68#8HavcgfZ*wTB&g=j%eWE*%dpuK`T{4Ww$LnLnBe zT_rjg8_)X*A;nu$NT_M{tfs9!5(#0V{k-Vpp%o_I5yU36vHn_s?%d5i@2u<`_c*~oOJuEZ-(Ka3w~VVwF8Eohf=yKw zx%3t|Q_8sU8^T0srGWRQH6IQ?neAzcjFl0x7SPnXdl1kh2Oezbw5ECd+Uy1F0!}z# z=;`qVk__LN2?Cc~%7>3PTe!^V?W&ghM8c;e%e4ENb*s!!HL7f>=uL3KNu>vj?bnML zjR*QSqA*(FU8^Y>gX&C#2dwSa%UMk3f*H9ZJ_-0`-luZ_R+7hzgt^xpzbUDk=dtDQ zHm9={6jmEI;S;4)kZ?^F5td|xI8gnb9zlHkt0 zI7ayiN0dFS7L{J6AFh|UvGxP1E@?^32)=&$L3&g19(P9jW#h_;=-?8Z#GjN9G%U#; zFsvwhzH_}b3&TUdQXif&?MxERxK(e)N2|_LRXG7f6y0qV3lNNUAwb-ORHVH%IV?bzuXnHkwHR*r5J6;$5=U?B@^^62CF{;*Oe=m+nC zLC@&R_;V?d0d$e#^cSJ=Lyg%u38bMFqF;U$6ud2(nkV*lhBW1p@$#lZ*l!_2_mCk$ z_+v)-(HEX@?pj+>Bqyb0)?q&$8(EicI5s;oHkp3(d`R;uJVDb1(QFPq9Oc8Hd^*7( z6Jhxt6Bg>KRsyxT@y9W3U}M73=-2!LMiY;p#9DGfTxMnrjYC8=!&4F(%^6Xk`OEpn z9Bf>ie%Ubc(#n+bc2DX%@pJiCqMxw}w)az`%WkB4&ss0Q7rcbFo{)~rKGf*fn8Oif zIc(hO*Ake_JO{1f=NZ$dB)`B#uGLXiai;pJ4p0sUEy3aXRyKFcVPpKDT@f24xR+iW z29=-d@|JVkCpyFGG2)`=7W1lmS%z6x>F{XDau<{iRWjEq7;U(t#|fSdf2Sz{lScCOHEU2m?38V7ue^2ni8 zhht9Bse2bqFvF1NFL*;%7W;3Y-gGXDn!O-4VVRGLL{={IZ!G6HV}^7f5oAK8S$_0S z3D=@T_@Yv(RzrdNV4L-|+@Uq_$2>nKjQ?vV=pn%E;iLp~uNzo2a zV`C$T>LR(3KKdD>`UdYuJ6UQvj`Uni>E#7rOphg5;NJB3*i?4X&@jH7yzT&aqD@mr zp|m6=BxC9L!=}piji5t>5aa$a(JJ#|TM^BBSvP&sm!=Q+_g)UqD(F%%cz7UaB)oEghm)`bVHIhQ@g}>5(A-!@+O7sZL zM;@!`uW4xt2+yXWA)g^MG%T!hX(@APNC9ER1*N6*TwD_ogkgQ^!-(~9cz3F(V%FN& z*!XLD`hwYvX^obgg2Mit;SNGJdh@uKifY#p6UW_kX}-#csa3!y3?H`@gp#N*>lZK>?)%#0>j-cds{T z#0i=k(x_k`jG6ok_C3#8Df|2mJnr_HZf+eRG{3`QsG1Fqbp8GP9v7gcjWD*B0VFaQ2(zYo8Z;r;@YQB(haW{AcTv5RBSJ17-I zLLa;tD!KkmDEtdhh38PGn^hvA`uq3a2ZWFRZ;d$~ZuWl=YhC{TeT)A?uu@7mMB+bh z^uL}K)B^i?cGj)WepFNDX;ZLw>}q3U17j7J8d;hAp;}#6r#IO;p^_tQ!2OJah>D6rfyz%3 z&i@5Y>|5TBw`8n;63rIo+mZ>ty3*Zz+wv?3mkI{^yCSrO`*UFJGZQ9iJ)#G0V%Lam zd{AN{yNc3x@!gAn{*d$_MH zPyOEycl_jI5n<8PKz}R)Vwg@&PS%6Ii|79Pwbq%sENf!EejPn@M1=Hj;9ze`zb}t^ z5OIFQ3}9?bi}>Tr0T2n+bgHD3A>5AuKF)w#%2JES$$#mPcCC4wrY;$Gh2Rm_*s7}H zd*7^4p*2wd?)+%BD8%wMFgS>~@0JcL4^MnZ2s*+i3NEMwgdz5M0s^Fn=pn-Ufl|x> zE3`_!=jA;mBI-e?&^rjG+ZH<6e@Ymg7Pg~1ylu6}KSb2q0GHXCZhm3_$!(kKBb1W5 zaZRg_HV+rG8c$2V3Q-#SI^eSHGd8TJ1Z&OA-!Et8r!?Au(r|X8)++$ly020eG-gbA zQj)_sL$LQ74>~N$a+&$U4p3z*NcR^a8k5n8ddACl-qfmNo%e|NKxkpQf@F}qcxx8B z!?Uj(j>z(++^50BRqVq$L&5;ovQoC?nTR znKbk!aa>pUSQFqEi-Y@{YE3*dkC!T*I=WEhGyv`S_BiGS`^45)7Ypob6BF$PYtM`v zCtbbY6i=l!75(squ;B6Bj+Jn?2KQIzj=b#9h)2!q9Ba98I85>0U($L+M$ zVyuAiKP!FLpb; zcS$B|Qd^b@+AxOO9->8ePntkQTh~Hc`=e!Xm&8A1kSFo#@7^uLo+8OADdpwmZKnC! z5a&`77Z``m zMGBza+-W4UzNh(+hPmoH3D5<}NkxiEkL=d$0|FiP_DQ=U zal4i)Rkdpq51^P9=2V?S!S~53AoUYd6*CF*aO3tEQu6E0u>E3eI@9x#4-_x6YEh4b zAi$=iYW#9iAB2a4oGH1CdW|@I26d%Jw6z({%^CE2 zsEH!y`n_A#78|nU=5MLE_-oHifDn`%dJdz_1E~nyu7KDpng;8o%BUQ(pekgQp`xEcPp2SOyoN zk&yt}#q?@r_*!F#P(9Su4^js;KdXrODj1BuWNK+mWn{&{`8h3Kdn@9FeJ@r2)wXe(Q(;&f8C1Af>46(9~q&i zr?M6V3u$S&w?e;HS zVzj;FHggn(dGComW-!<@gS8>2t4T}tTdl2&M11h|7$}Cq<)bQkD$`!D zuuys6NOUd78VC1&9`f_&F_$FxXnZBcOJhXgYo=94i?dSkCHdtyPih{=K0bxYh*uG> z#7eI@K1(9s>}~Ng4PS{R(b4MyM&Ve4hsgz>T~mELU6RrEL9*51&+MCHX}bFKxEIT) z{%p~`fvta}@PKfgSU`h>htx>r1&fb^Bf%QQn_>|R*Ry#`q`F0S*a7)VK|lC3J4!*W z?>lPAc8g~+8c378ueZM+^AFyyi~HK-&v{@RV1|bN%qjS0pjgdNKN&=9rGGFd{ zyu=Ei7jA1_8*nQtrjUNaalfdM27**pmLsdbCOAC=CC>K#vVs@v)J|A50wZ_(2R9`| z`eLpUkYRsSxAk!MfzSKg=)gqGGl!=dAq>=hobryyk7b}LqV z$R=MYecayfueNh;YvmCJF=JipCDVjM|7ThK@#6>Skstz@PD@X( z+f&Heib&cH$0pS=r}qcncT5EPa@1$JPpxtM4%eL7K|9Y*&gl{_Udo~Ic23}SQ7s(s937=^Ti`MMbV!CVM zc+ZW`KFiATIkOTB`sPk5W6&cPWQnz(Mx%ylm#Lg_@uU(Y5K!raqM+}543m&ozuhYBRE?>!&)&iS6_>@TQE4BhNK z&h`6pI(c7R)}V?imPXQoaehRT!_XW0k}1m)h-Hv-KEBMC{LV}iR7jotY_oSU zNad5*Vs|tPCGji@Ho+$3DIZUa3hFg~k9l@BGr3z?!66Y@De%)HuAB$VaTHeHvX)t< zfuhEuhhAEYOD#c>=8%vjMw$a9h6Ep^rh?pCkD}VT2^Z*4reS(06?!H>rrcZZljCQ+n zDK@hN_-Sp08kid)HBa(oO5(yzTfHfBy8OpH@2ys(?Y;4+WfMXH9vvNB|5uPnBq1qD zR$u?yUruXu*>i7iZ);w%BK0!SLq|k@6HzPvqHy=8C^*fjSPTfFi0zlMw?9G+Y|dD( z46K#55-cNjY6@XtIU^S-Pt6oL=cMyd?rj!HpzI7lqKPGLRvPgaft~y21k(8U2G&-4 zwL#sr+)O``iyo4j_AoOAFV1s})&y&SGiq~^E6iWSS`I2JOPG>(4p+s7P#gvijwzgS z5KA}emK()URpRqm2usWGXAK9>=&Vx<+dj>bW{B+(dZ~B#Bf7-*2p)BO>9LInszWko z7OjkPi-gKgIj;?PgSotS*12lm2lZp}f9$%ObIqoQt7veB7L010+X=XbShPYd1f*1^ z6tX*R3d+O%zmyPAkiPLy;P)a#4(B2_Fq_g$JwqRU6ZnB{Ucnfl1o_M;gqys4F$OAlW8J0oBeD)zg*;K!x)Eh7gqOB*FNEc3uq=XpUUKd434abNGg z=Y`!&N_hBBR3&c5&9+&5MFu2HX}xW)(L3DA3oTjD8cv>`_F#*6;c-db;wl0PP5Sv|!}7}?g%$@)$%V@=D!lH))*u%=NJCfU0h5^iD8 zRF$SkDFpur4(+>wz|4CL*o-H_py08TZ^_v=ubvvxkebzJjH$tIeneH5-5*rH0~RDC z$L54^Cl~Y;=H_Mv6wXFVy@}{>GUk&JcHTA{6h9d>Wv8*ks_`;-R~dQ&n4VLzSpiNH zqv(2thc+jAXJo!U2!mR*qmmr?MUKu7`t-lYX~!36EWx?`=b})XLw_)OPkPKet~Ht>coDv{P@H~J^Ld69_nKNFmzPUze zb0E|f6!{vdiJb&{8HJdAv-ZRL!?c}zTAoUF zqh{nP__r&rgtb+oGAWm?kR|>O*F5P<+&REDhONJ!-{o{&%SN>CLH8?GR(c_!REvqc z1`xrYWtEhchll4^c^6`gA(sKxBKTr5GrdWR8gGI;s4D>$Gbfoh*CD-{=R@=fsF$xN z3>=p(vF*ssQNNva@@dp;k$TnNl?`1Dd$gQN^U&Fqt{$XPZryX59c{WC8gwK3Jgwd5 zA85T{_i4R>W=!B`x-}s}y~k1;rTOgMLIPQ*uKJq7j}p^q;2R$VIzO{`7a;Hk-!X82 zk%cylY`xL?dArMr^p&WVv&~+ZT&7_Cm2r0t(og(_UuK$f*PZyGy3$^=)}^>?M((o> z*;B~YTN;ni$YRjT6P*xO$SW>JmY|4p-Dij591z0e_>Dp=`l;`Q^*(S@%@4yIs*+pR zdy}wP)6PuRt>>ojP7?QxufL-X4QWWnRAopCydigxc7}ZmNQZVNivc*qGH^%cB-bf^ z7@WY#Rywx%Z8NQVq@E&z@4GFaS5|aoFs5bY)aEn?jK8q}SVKzni2cMc$tN63+>OfH zZ(AeZAflXcd-+Nx;bm-8R8+&0W25g4awyp+>z2jNq+?)|{S39AKP5PP;u{Mof-&+O z=!2p170x(#au-}3ra86UvdjETSv09HmnshTMTd|WL`@+}r5kr$#|wI_SifrSYHgrB z3oc8;h@Yj~ZM=w0e@{;j42X*eBiNS8{@w+5og%n5Vp3AxB4$}sR8$yizFtE^11$r? zug$TI8zT3n@aYpdThmd;6EzpN-|@^bXQN3*FvSY+g$L}CE;*|1q-s4g8Y);1wY9P$ zo5%jrX98I5N~SOd^O_DNVa{X+TH!x!;9*XR)*a^lNN}PA6qP~jkVz<<(drZ_WR_)V z9;tIV6H=YtEiL9}7g6~g@*CQMlJ|O1Ime6A*CN#7VAo`aP(kAIuA||f+6ISvHyo|* zbfxK@VpSc_+z!to2zb+V;`8}GJDIn#zg1MEqooZ%WOiJ<&GYl~*PH}{o#_9>%A%Q6 zq@*4y<>RLg2TfVhA^3(~<42nq8y{V+Md7N%=jZ09;lpL}ZxY zs;f|pld4zzTe#f&@SEdqE-I0B2B`XJe|MZaYFJp9P*H=Yk&)2_So^)IDkA!50L~EU z>h4CS@V3XI5>1O|Qpa&?{xi9%r!d*DevKgGi%ClxLX-;kjf~{g*Vlv0Y!Hc11i(un zl{ez%#>3Fikdck8m0B7vb1?B$^;v@hDVc5)CQk91m^T2)1VKBgo)=9cv%0qj-D@e; z6HHQ|N5Bk`&@nMPcbpJGHd%3TWH=nI{&WA^pZkv2mFlTUOG!P!$L~ycSq$xW`ixS5 zxRI{w3Mztg2XQmAc0W`kb!+?UTnrm+u^ZI>x|@y#6T})#cQvSY=Qz@vro@2o&gf}q z{MlMA{c5ZruL}M!V>L(-g#|vwr%!VsEt-1k?0hy#;Dm!9bXv#>DEY|5pqzmSK;=O= zb;J+i$>+U({Brr=mfNKBJ>A{T%6~Is5s#Qw8C1>wn$@PPe(ok078Ugm4Uu;YjDSt6 z(oZW&zX4(M4Ftr*dJg`cEphnKI!Y-a3hM(Lm-x~BaI7;asQ^ZgCDB-^J>8%ec#5flYhA;i1z6R zBDBbwIH-e=bi{hqocYIR3F(V3R5y1&S(l4Y!jEQJM4X5SFa9~Bk8rOzqgGK-vAU+_ zWfNgE(+IJihq$&j6qScmy_<^qWkSjbdB#b^wd=b>@fk=29KVAG>sNOG zf01+RPckkK3kmZ1}`aj^mQ}SIzTD?%0;BHePgD3wbvDfg>V0 z@et8FFxDJB%m46+{m-y^jm-8cUzpzgoq?Z~SU#b-$PslQ!@N%1pH4;`J*HfB&G&fx zLXurLMCOSH?m7xvKj6%kYLmGf-+LYkoVzUE-F2h}TQB|lsLK`ycugqvD=<)fC~lwN zXu#mY**_Ny!QzO*u<`UOTT5vq=e^r_5>X0tN&KC^_Tu039Bi}+KA?W>t8h>i^S(L01kvwNV#A3;Y0zzEf(+8l~{)6QS{~9({L-ZL#7%-DZsL zijWp{@)2usZCg;~iphwXNDsE#sJvf&@vg+BE}M7Ng!BR|Z#S4)&HA3_JVdX?)d z3bNK1ivo^*JOuss`eadi7Vas;?G6*klQH0)6E=Vh)PCISST&|c_f5GnsrTKiG9$nR z!OiejTjkB*8Lx%f_w?qoU#DQywmSPryCecM<11G3agRsqHcyB1nHqMY-AVRfF@N{6 zRF{pg-S?8jz?W66?brlI(>;>hUdd>)8Cf+ogj7Q?)_-~b=KHE7w3jNn!0FQO+;GT5 z`QH|S_DJ8acw9&Ge}ORPjW7Jiw4tsa%=ZXAL{ueiI0C*OH6yYGE>jz)J!IbZj&*V* z?)a*niz{&4lm(r?rbdKu) z`)mHwGMC*cwBM3(Gwxro5jKJt|FKO{OAH&4H`*_(5=6S5xj_Eqd9dXfT0s4G4D?z2 zFV>blIz0@#-CX#u3I7j+{NH9h44Xg|3vJiSXxFA5(E-WUdqSgmov*!cK`w8-E*de# zp23COPcJ*DOjd$WC}-cbMY*(q_Zc(g=kx6ZenEkq^BDy4#>I?m1o2$)q(kAmH@ToG2JyzWiG)Z$LV zR}YE=)K^1nNhUUjw-Qwq9%#*7r)Yf4*Xs=kn}fu+rG5tqExLHnthspt%kLC__l`$D z>AcQsJKake1)7xvtHpYtMIejhlDemn0mi?K|e}Q=ii+x6CSe>ZT|NaVrfJLRum= zCQ5q_yBKb^n5b0dAcne#I_xVaQ=O@{LAC?>qFkc|Ay`W=mBKchP+SNVdN-s>moHdL zK{}kR-NVri39C&owWbTaIRvSFz%Jm`%R_i?c1n#YMG>RGY~Q8}vE_|y`Z=Vd&8t*H zH+I2*cQo95AFHkxgr_~{c-yvYSA#4ngh`xv)ZJ^0$|@>&_h`<^59d6e?1YXDk%&DN zo2%fP{u+OaoND=~@m9%`66AY|(-?`k4PCW^*x~R*UZF;(*yy zux6r~>|!V;^nPR2U6DX}D5L9PtMuLFTi(>j%w~nrOR~$0ox7X0h2~Jzh z; zCG7!zZn?fB(VD&8gcjd8J%^GkyLk`G-q^o)u1`v=8ekMTmE3p=w)#Dg;3r4Lqti@2 z$L%cSu2w8$WZK6knM3=N5Az^RJ<~DmVT0=uaQ((f-xx|O+8(b=Z9>A-jBl%)`wJ~+ z;<_H9TiK9{6E4H$0Z^e`{}pit7)6@RaE0l3-IFUlTV7dLIDikL9JaMYKLgkKh>E-D zSh^A9aQoAoo&p}=9scvsq4lx15tq=k-Ill2mB#R3=Jqmgt?k@EMh~yYEkn7nI5X}? zI~bPp^^cKz%hG(m_`N&noyX`Ht)cgP*Yq(shxDfpHK^@2dR1(iPBt^$^6}^u8X`7M zZC8(&+-JFbR9VaiN|=-F)9!UH%uXV&?Qg3sZlFzj1zHyz!M@+DB#y7EeKM_!a&Yh= zOGMz4@8}r1Z0q*-sfSLbMtrYziCU7`BRkPVyB&v7i;0~?w0!YdC!Y%pLBG};}dw%4B|7d+pv9u!ybFG8a<9OfwLSGy8|vz9}O=mVALJWUV}6| z)*mv26K#T1+hd@G{e6Xd-p*?p2}7w;&{7@Y4?q+Te^>jv5@vzuZq+xpXuY@Tb&18z z8S1)V`YI;lv(`w$3!PyxQL35UEwMvSxeNf)n6ta)`Fjc=n_eEB(pInB@QuAYcK%>% z*QwU;*}vt3FjKV+qNo?>J?%L$IEYzxPQNRvuJ10;@akU4&4}V4l6pXlL=FIXprU*- zx(48QKz}ORp-%V&g7HpzQTfo!ZdNwit0kTkPg+5p^rbrtuQ2cSYtqs4PuCgC8-zj} z(kzDO7nHQZGw3DGBhiy5zl~ru~U$KL{903{w;70a%kphDiE&Q=h^BOFy_-P91}Ek z+|>AE%T<_4dg1utDP_u_Iaj?X+w;R*hM8;eUe28H+H(8drI*&tzU39-NsQDN#8L0w z@qUf|PD66q95GMU60M%tJjBuFI&o?&yxKWJJ+j|tlVdbka?h9r&~ONeZj4?qD?M6Fp1 zDNUhKtvIDM_)s~Bc?R~{m9E!?B}TjXN=B!W?J@E@#PF))qv7&p@;n>u^(L1e&q>-m zlmw(lEZN+b8+}MWoEjq0?7nY;bD;U#uD1iMmo8Gw?|2IQ?%j%#(ei#`nR}FzX#EgU ze=@b$mZyWAZ%5X2WMS7c?J8J)MoBv0FE`fp$Zc)HG0o4D>f{7jh{30}rxP*H>d51C z_6}kyk>?k3eYLr*PSUfhI91s?$03eaan$C9Tz6))NUSe{zd*B@RR-bhm+H5N12A%U~=aJp{^+eDssx}8$xvfa0}roO9?CQ)h7c}eD3 z1oBWO#o&$A&GMz${^hc3nR5<4Ij@?}4@tujt(A3o7Tu zlk<}fNKty>E=)Q6v<0}h)_bhnJ9rsYiBHkHD@9>-F{?>P7@oV$4t#Dt9&zK^82?U^ zNzEj1f2ZNXYXpkprI11dj>;+Rk>EmG0_xzs%n>T)*mqoP@$Lg(*P%jZ8-D;kI9xwIZ_?|TcVfC< zSCiD;%H-b?D}(;Hs>V26%Qxrpl5Wpes`HlnlcP`k<%1$!vRl9&43XP)jq1v`Ck(IS ze8i#kv_zQO0TMygHJlQcK(sxjnxRc78P)sKP;~d{$mOh;NT672poByNoKGk;8TbGW z&Ob4!jMO z>PwmhNlQ$3{#Ah(TdfAK_j8Is(E2_-(B$*9&hTwt(F8dA+uF{hs0hqfI{)-GNtVtH~J|3hvX^obn?+9DYJE#GJ09NTRllNIe>c zJwl9{g3*PK$`yv!L&HsGHd#+UbmN#RNYisDGP%*^B7scE*D|%+JvmSbv|M5@Iv3jX z4I#uFuf*{K0GY_VitCQvYCWM>1IoDAWxYyRHbzH z;$4L?P9Q7(1J%Xl(4T>68mmejx=W~{UM8f$eAd(^ws@(h(lK8}Bk_~_Kky(!H@`Mu zhiLXHPf+aF7m9QsNt+sX6ZtkemBWqX9{LfyoE7#W%3rL%(JWK@QWrB2cjHZLxA z(D;|)QQ1)f3@TVmt$-97t8#Pokrp!NvFf|~-E-a?n?IP61RA0{y74QfJKFl0lDW{8 zoR)r^E1nxSv{svzHuW$nX^~m}_)(I-^GJ}D8(N&PZb+7TuG=v6T1taK8+a2{6eVE)-jkg;Z~7~bJG_s-cy)iK$98%> zFBn8i&!yz@*o$Q*jL#uE%N@9nrM5?`vi(E&pqQoOBUw+|(cm>+S`FpT`DO1%P&~5s z=p4`n`OsyslmSOdn_6$LfK~aNaKD;5USLsz%GC11w3#qWbM)}%GphoVF|UU-$YgYn zKLpPW3RHUF1Ww;=CtFerb0FW3Co-OPt(BX;e=iVJ5i6rRU(|g51e+C!VM`u&j9fHm z)HXS6d0kOhT_1G0m7Jy^4YYBI2k0M2yE4Ygcr}L~#h9!oo>zjZIDD^r_}<5y)e7P5 z35s`bq6pH1H%E#%8CYgcmRjPROkphCzL5 z&Qa`rPwCt|<_Dp1Yz_v)x^L%V&f>VwWIio8pQxx&OyMAg%;5(WK3YEwfL-L-Jj!kR z(u~(IXh6qfayua5Li6gHoXFZUbF<*ujo!A+wt-$ACW3@{Mb{VFGm(S@ipCw zD;7J#lN}TqTo-ih4uoGM5LPaCQw+JEu{#^J41#k+D2m)K_ve(RR74oRz*Ue*kd0oG zyyR%tubX)I5G&$&W5pMijJNZ(d4f26y6_ig_6xOXxihN1bJH4cM*6ku8D4#dWGW_x zxXa+*$`OJa56bfQS~j?QwIt*+2&BuA*&njg+49#p z*8=7ydKTqRU&8Z(m z;It_$vvV<&alH-3WOpW{C9JrBE99~D>EAVFU8a(!iKX-|784g(poHja>|(60WwWm# z`JrzT5bF42Kl{?X{_R%&b7?#sZTNZ6V5&!LonSc@=GvE(cYF*^DXhvG7c&#JKz#Qo z=JjCJSAA~h?+&Q~cp1an+Bmw(z-ArYe8ZQj4pWltZ4MFBDC&Fme!ivqO1M_{fk}_C zxFJiAkS_J+M7-3#4ojjW3(&2?~qt(~o@i)|fQXR77wd!pf>Z74cxv;CXYAh5aU znW#YK4O3M2!`P};QX?N!`FHGK=8*cI@94y6Mga88_HVlL!*B;9RfvQFyRtq;I^S<{ z2gh)pdgayLMDSdLfnif`9PTnNk5*eLGsh;+N|tsyW-X9f!I$>;l$5i$%V4awS+|HH zh=Z>uniw^_f|35FCc|?RiJ5|RKNFC3(F8=wpRGPnwmu}XQ#S;-rh!;G##JG(Tj<1G zpp*;%-0;>5Fb=T#4As;Xb4^fxnp0m?oQ6A`HRSp{$ig5)s(99~+W`*lZv0}HFvoh^ zGHH7Vq=$$shIG%*9uVENG{&=6#Tp&nq#NN}G=6Ax316LYrN{DJjkRyC0mT&MX0Vt5 zD~*EjKB~Pj!p)>$;k~2rMp9NxR+@G)FD=U|T;nRVj;Ka9Fr{(gXRFz2CUtpbPdj8okMsA-coIF!NF}K?FJE(y5xFGHkm&oC3Q2!%f~C&JXb;5V zBA6?p@zmvM4!MD=!fG;v&CR91#s)YP3R#4lAE~h85-4+)I#G*9x*@?W)Zd+OemWFLx}4;WAL~^4gNEgUiOH z-4{9ZkGbr@+1>^nUKf(d;X&H=&brYW`)@x#yLrr2r#E$4y9Yrotp)B!^lDa>d=V^t z@!W@9hAfeoL-&qrnuMTTmCNXHDSulPvAdt{s-+d^e5U%yAWX~!bpa(p=U6)g-7+7R zmcM894yn3Yha<23wk$da8?;n{@HI-7-u*N^SmsL6o-5rI$3pIsMsfMCt zp5J~O=1aEP1@o~Y>;$ovo^6#-w6O%BCYxI~tY#VL+!Ky~SU_Amb^p**Dvz0>Smryg*A3ZqdC1(8$pG9iVk><+EN%0n&Md0In*1Pzr z3-3CrOki)9S5#wMH&@NZPMr@e3pctcYG8_+>=`L!@+*`s&~VUaXPsXqmLYw^J^6Dq z52YB6X7(+@aX644p-``ekSzw4yj81RoE`&xSlLi8y-{G{=5w`;#wL|<)zi`m5F073 zDGH7JIsbXzv3GQ(ksvIyD*80z`*#B;<_91uJGKrj((X%!r}Lp0YqCAeV3X;|_C!U1 zQB(t9{Hxw;_xac^>4r6~rSy@2G2TcRNIL!?qP&YsgvPf@b7x(oHKnnlNUo6@m=;+? zHHy0Ys^hb9!S#FulK*36w|Mx@@$EU&*S*qP;??h^-^1H}$dlj;AhC1UJ94^U?e6hQ z8@`9c))>5uy>9OQ;)^$iCq;tfFNRP5246)_Mw6{YQFOjFSfkf9XssDa8XjxEAk`P9lHMj_q6I|@DF?diaOQXAV7G;-R|E#C` z4adBXyG@SmR;_N7m#-()OoQ1?op9zYi&Qvb@$zzR0z?Ei>(J4rm{Eou0(Ec8F`0DOD;i$2xw-@Sy9F3wn=3*KR#sS{`Vtxt<)Vx-Z6v>rB+f}s zHu2XQ+_*CB9I2pQ@k7y6s2UfuvVDxtSBM`IXt*cU88D!IQRlQ#LzeSJ3=N!=C>Sl@=@X=M zIx@zj#z=wL2L2Q+^V0eL6`IGi*8SPHE8K;joIeP+hWnB-xl)@^c=7XVr^(qmTrfb> z+Y?$duT{fb1+m-27pN#rtVSNAd#AaPjfb-P>U|?^t#A`=MiPuH-RxGgo3POCjojxM z`lQzN^Yu2ry6;)w&oJBU@;smCQQa5;ccb&WM*HR zOt5nhV_(q}=1~*A<0Mo^xe9YQ2sSyooRfLXA<~nnpCVmuyhoC@CS!GdI-NU>400Wa+Sc{$NH*w=gsdK? zS@XD@PL6Nz79Bp>YE)H4P~!QFFfIn>MlWXG@vV5`_}cx&k~Fdsf;MEu1+s^WGWv1& z@WkJB*Z1%=nDzm`7XQa{oK|;mdXoiWzPCeJ)!^UKa~sDhO{i)*h1^;fUVON8&M;Ah zT?@mPohm804R_7+N6tmrK7u9`gHOZI-H(KXs~8iWNHXM;?aj0l#dT%`oQ80WdAN_3 zcnEFi!M*BEZ7N|~q0J)d(R?i~KE(d?aP?@s=84ApQn^d`&jlIX7l*qI1XZB`gxX{~W(( z1XyVE(d$(G;z3a)1#>P!pF`t5Db`d*XzC+bFm}bw=Z`}2Ks9eA)IB;83h&}eq(Hfg z)1qpPG?x6A%vP&Tb$Xo&vTs+CRT5dxL&G*XGnJGQ31e#SnVoadTxXy5s$#-cc)7Uw zrYl79_fLY|JTvmvZZ?(aGdz~BZw&H~_kodW@v0Vq_(MaEv)%hRgfwF^74b*BNoA>RVRjyXo ztYyQ$bkX&^d-?}wGjQ03^yEWR)_&s{JWBieWS>2|dglO%m~gvAV?cfQaCCaQ&i$iU zl=7bxbaV?Dr(g_#&JG~;_;)p2wB5tZzmNu=>Z$3{g?0YFv%k?^IdA_{E=QI9{htJH zNC>V90(bFu>k4MH_)h_#WZZvp{l_of{*C-VyxHXwI-5XW003_BSvaT<>pfrD8jc;> zI)FZ=yut711{b@lP@ES}Qqq~pP>OYj@S1am?ipQLrU~a@6jxw`*Jp zNcr{U+7R@s68|zWN!P6UsvApwDRdy2gx{HtOEvZ}Za^f!gnUG+-}n86=!31zlgk-N zjr27VQqmwX!nk6^{GrYL?tISZfPLpn6Z-Prxte=(7eZ~ z<$y!6abRwXaUR37kNhpBW5|}Qn5jPl^fa6+smhasff(GBEz&_+Ttsg`huCyr)Y}d4 zFAk>-dppx%lMbba;tOPoq%I{)8-#eIQCVv!Ht|GDKyy_dJsWhh+QH-}8A?)f8~XIF zONC`iZg`+F5pz|gf zg){Bp{e84~7IbCb3H0m2jcx!;^=x@Q5_`5MUiD-o3j0^o(i^>c3zS(aJhda95v4>J z7dj30Dmz1R5z7l|$JP}(ZRD}-G~kjP&wisgx9NVdhp!TbvPMk|^#{m=qg%e>%YRl? zaSw5k*GkH~L4r@CxN!1V@*1IpG4eYiqdS(R|ABu=hP(3r94B~JMdJV0b&~z z1qSzU20XPEIb{87%s5V*R-i=(KIOaB=7zE5mA0k?52*L(HihD2FBHjw-_>~G1!fFP zjLcD6*BD@7wKh?;Ywn4YXWZJzSU;4Bgq^=;=DK^Kq7hDSKXvRd@~oIw*>OruYNgQR z0}p}`?|c>I843-0tt(Cq?Gvu)o@jN9dBTiy$4KT($*dZ__)-xLyo@9t?;ZI#w^auX zu9rW^J7@Z7*kDt-?jeteePT~@gUxZMBnv8BxYC9P*KTHlLn`aHKr{l#tucHBJ0D-V zpPNJGbiTb1i>k`Oub)66!LPUTprO;W11zG}E4`~|@QLiNYN$#)eK7hJJXg(~V7F)0 z$n&Mas;Yl6t@B(@TIH&P>Fvy4=(UiaF$i}MClXNiW+pHE0P@uz=srkz*Z@VN73Pli zl}6L2w@*rrg^=cUq9)A~n=-uF_Y{rY!Q@O5vtzuYN85_ptl-;2wM;>xCP`@YyR2s% z;`e#(C-CMCMBhKikVC-yFpB(uM?<2++|K^fxvqQBgTZq4<*q3-{;Y|~;LSE{wuc7DT7!hYR8&me7YzXgrsbK`lv!!&3e zGtMx6v~LY0Z$*+~_mZT<^CanTxKTW3_MW)y;E&l3SN#5+k{aNN7u3%ro4iZw;y}%? zk6=XFJV^1}Sq9{n3-vZoWdn0A&h>(uf1uvKJ~cUnqoq`+^PW#&IeUCnZ?9fAepK7T zS!uvfrju~i-X)R2~r0SvQwFkO2$n^c(kpCnW&>`RU?){2h{4_8y2CQVW!_-G>Z= zu)1JTl*(6J3XlmL%DsIi-OE{ieSA(`9Iq1YO^uA{<3MYau*GS$yF8fJP|;}1fDK2j z?iG=H!; zyydIc@eAYIs`G2NIww@j{Dk9a69nf68IhEXBC`8*%ZgjyENLNUqJf-V z`x+Fo66HTVfP%q=d(I+9K_a(aZtxJNLVx`cMgq+miPfBp>5s%g&%ZH$Ez)-eh^qDb zy@TgXJEhwz9vW%~HE{2vBj&}qmO-o2utQA6VH4fHN4%wM+X?p0bt(0y2ci2j7j!%a z2e>LfjC1QME&F+|xDr|Zo(^fKX=p6W>noT85pEy3!t2*a2)+V7?(=w$0)ztnCmZSu zMV#zccK6t|4o8(KG;xCXnyKlE!1G7rhD{V-|FYYVLsbOcHPhH|{e=2`kHl&8l(h(~ zbE+D$RvFXG9dB*d`!~q!gy)wxsO;!yctGoQ-2mO=ucS?&(KC?x+od^~`ahtv|2OCH zoZdzKr@dY9pIq&)vljl}_>kR$kMOHn!Zl+RlMrmQ6Gf)_M?l$yh2|87Do%7BC0Yvr z>xInu;Srt#ZVZnIfzjwfu^xA%`<2V3=;IcbXLcjuZLYJRI`$XGdai(We%S8eq;?IK%t})JwR0T&df!4nNaCo30_3+#Ax&v=| z(>ZT!d;V_rKbC>#!E9kg-3FFRU4T0DsrQNlOz;@M;xbkOR7oTD6?t>~{+dwYwZ5YN zi?z25i(}ooMR5rZ!GZ-37Thff1eYWvxI=LFrqSRYXk0@=Ah^4`HIU%Yjk~)vdV8(C z$Xa`!d-r+1b5H%NA9NK}Z_RhiF~*$JbaDC@Ha2F5enoJ45fU`158;)0kxbuDD4@$lce#3A46NtdHnIRmUk=wyRDs~vN0nV<#!_GE@91m1N4?h#snaM%s-AMC z*mrvzQ<1Dr0tzgnlrmDfZfN&yN%om{R7Sq!-O0>SU-!tPyCdM$@4rzj^E~BofW1=Z!LJcU+h|&8w z3)Vl?N`W~0QLQS*@(~x|a74onuhUouJh>}U)&;6^q#BFfWiB1Z{D0TcBhjY?%Gm~$ zI@Xn5#q?D2b7u5TF%zi}(8x;ke!oPjoJHWa;eH9r!NA>^ z9F-I2Y`K!){}e*nw%t| zEPk=WGOLVyDEP`^*#?ao5Z2i{mrxzOl0sP%Wwg5*>m6Q}&j4byRP3)fx7V0z?2$Gs zkm%XZ9YL@Vg9&C16*tS+Yca1KOt>meBLzd`BP&3)t%*GeY+o$fjXyR z^V8A^SD>K~NHz2ra&@3V-;@1TY4av@?}Kd}f`*Pbq}Z*+`v4#5%9i9IAGBwpDXbD# z1k7h~Hrrf@q7NEt;(MbbexI`|OiWV`A;L};FZ~Zl)%`(M__?p8(>*_z820@Un}@MW zPq(sO!&TK)LldNwC7m|}8#y~9*sZo1t~)UDU@uA(^9JKEaD zy~^mKaU!GbmXNUaIZ)KCk^oD0cg&hQ&0$9JHAmq?_$nExg|q9CbbuwPt{6%`L@w-0 z63{+QZp*gG)jY?0J2anRnPFgsU+}MT?A^|Coa;vpU2xbkj&O0b#4D$L&&s{z9YJgA zBtlU!2_iAsh4_pADEZMYd}Bu_1zpHRl-gfUa^5%du*cmOQ}%Ji?^g@Phd0=F(%60M zbNhl!#xHR!ekSCz7)!h%f-{$z*v?PEso~286>sT!01BQgdff&V#>x^I)`7-&;lKlb zk%Qjy!4h(gh>F_I&~@+EEsy5F=Uj0!vI|g+p#>GXCfa;4+!k3k-B`A;%C2`}4vAs- zT*er29x`URXNjQ0B&@|IudUy9`qE59Th;M+kDt$>Xc>mOX?&Xan7R5dc#6h)Z9UO)3sX7Q- zJ4=1MBuPXpuX0kSE(AR3Y|O5y*$Cv1OuJt>-^#9fIU%CC4pD*gN^%;RjYAEh97f^Jg!7DDyg~O8xD{5@E^z~=^P5ie^gI+g~t6(&*|tSr2p+Y%Nu(LU5$~TqzZ0V zKEsYx_N5?3Els`o=-&l5tLtlN@;Xw_E|`=z^g|MEnrR$z#~_H_&h-kDAZ_>@8p|0~ zd~%FQCVN@NhuG$Ha@?F#OdIc5NmN%^;AgvL{*!M+$YZs|d5K6iOqEx){i%`vl@3SuM;!JR z!8pY4Lj^Urqg`cB`NK!QSN7H9OaA>H1!3>M+vd#yTxlRG7Y5t**NnU`3)TKbBmNl? z?N5qx_VQQW>+Bni_92oXAnh9}Kn=IqtSwL692P9p@5<^ER!_;ZASCTP!co=MNpWPb z1T?1KPj>7mKZj%3>U>?BTgfw&=Jr&U-G?vp^ET3XQ(g~-K~3&WF(pn`hvr~)%@cBQ z0P709-uSrBMC=373We%=736XFohYID`h4qv7(oNmr!$x$nc95TYFifN#?3g5ysuD^Q9gp7$QxEJ|@*F$;UaDIGCo#+!bomAK zp0P$-u@sS#1(}vUI6@RIB{JbAXfB8Z@S$6s+k>i!nm>V&O2SN=;vonNqpJu&y2wjmpXRcP?Og|0KTR!eLU`|PhNMDwNA9) zCWEO18^B4v!jM$Bi7#%wBtDpY>9LF_?`wvO6H#kuiyZ8mMZ?*Y5x#JXp3*x@&PSU< zbALlHEPe}|w>)(_{rl(F)bcqg8n?Fgl~% z9yZFeOIj<9-+1@bITyFCs**c1XQ&=Zvjw1vYpbe;*41`4K)nQXdRwB^yXbmlJXF3&aKehCQfkn-xHf)X#yONcqL*CyVlNK#v)iU_$2 z#Yi^$iW0R_Ktmq(Y-#D|8)^wP8Ll56PwIJ!3q241tcIRncL?k4BQ@vL>ZC?sWdZND ze2*@8MRBA?#B~6qKyTYLm8l^qpHRaVhwH(}F(sxe$5KL(E6FuRMDqQwZTj<9uy|D% zj3#){);ZR@zpuFjGkmU+0HrAR@6NjSRH_Mov>u!@SkD=AD0bAg&M(fVEt`)n#2a%T z_m=y3A!vt1AJ0@2g>V-ri!$m|N6^vp`7`A!R~2sao#*%xV%Qe@CtD93RH$Ffhgtm| zuJk$!CmH&~Pbc zB|$Nn%6x#w>+xflKi|K2JJ0f!aD}t9W=~#9!g_2}vt`I_rJSrY`D%sblK3vAl^^-i zxe!xCcTvz7dyJ47pJ-hcor;X3_G;4pcOloRb+@^*B63d`S5x=E&e?qQD$~^a7eO2u z+$-pB-ck;VJ4R9JcrGuSNsZGp|TS0zugqeWAu&Bm9==+FkZor<`Hi{&@3*~(Ku`IMvM(MEg<9&Se4mR_{ zT6GeaNUg$Qbb}hIP+jqEM=si$Um6;qj^#2L!u#JFDWg8t+kMFucb)j0p6~vx{$PF% z5z&$*0L-mt-!$l22fp+kzRTEn{!_maRBXxV<%&7W7Szq<+bu~@b)f8%rZ$*IDp)o4 zW=i2_DA$*XlT4ay0%W0!?95lc!>ZsgGlV`_riXCv!d=1EDsmBvvKuh|nvqu=KzH8J zWQWJfyMkUNnBi2*Y4~g@*2tR-_Sk%f3YwA(enD@TB6oUeS4n^M3}rEM+5X@+aSl+g4(YMB8@_xRFF6rL@~1;{ zB2{K7*;|#G+~RCRX66cYwX?wl_WA1I^Hd~-=&VmA(A*t-pvK3z4D)Ry7YZJ7?BK4(_Ba)nq03+X=DUWuhr^yY7n7kVCS2aZg;(O4rmvr{tbr24c2|L zB?(s6m2fN8dFR9pL5MyS+`{(AHtJhmoRC1Eq$&RyhuvRE13^8@ZD%L}{oNGgrN@}w zuTEH5!L0Sk{o;~VQ?+-})Or%x^z zh=_>rD(bnP(;CP9@W!7Dl(f>XQ-zMtB^YfUAbF04SDE;yK0$e+#-!nowY8lOm7TGr zIB*j00TTSF%su>#wDf;PRsW+63~hL5EpO|HjE+}st|?j+PBx9C$aSng8ciB$Tiko& z73PRm>7>uxV@&7yf&9b_d;gxrc(iY}DP?!prlK;5XJ-09?cpXbDdF3fgD{a)PdBf) z8yPJk+NR6sald2uBV5OdAxQaLS0pBbJs>Wa(OGD8anJB7EsWcGFlK0uQDQ}U1%^nU3 zuaD3byTWBF+n zf!AN*tvo8?k|s$FqXBU_RYB4?+yRxbARUc3kaM4!ya-%~ecd%~_m!U~^XDPgjg@=c z^$nKSE@lU1QaiZHln!agFW^LW;i=>fql6t2*^A9cesDUes>PSacN3`zDn?r=ip=n_ zVwaHwFjhKo;)&*|3P6@c|(W@tXaz>=PAQai$-%Em zY$X!}uf*;0b7@L`C04SsuxSPo z>-}v;ak32EPvH@7qitCU18`q~YuIr3ygOZ2>?B<0bi`1PACrwBa^X#zw_4AU-MY

~-WoOlyPqt4?d1jO!7&rO}GX=d0Ql^*%c(0{LRRXHSvJ9_(t17xbX>re#iS>H@HqY3bD2 z?<@3-+b;*KFh93%{<$)1;A=Z#mnO9?@YIY-QrW%i+sGb)rzQ|#fJH}V|Bi?Gc6Oz9 z@|}*Flwou82&T>m!uYJNbaXVz?=*0gX-P*Og7{5N<;lz2OpaYKfd8-`BvdhV80_e4 zmPc4CG4h8pNJ>PU!mD*Ze7(WWQ6OI`T<>VaWgP3D-*f&rR_NqfH91w+s4Ln2F0VWvy9e^ZIDmbW# z-<=!eTM=uyWOP}r{-zv&1H3rPb+6;6&YvN~Y+ZyW=B z0G12A4}lz(dYqqQ+xLSkIFpV3U=`JUv|x|#J30kfk_VpDKt%q9o1YUE?(80iM$?8J z&F90P(r8bp{8HMC%vAKv<8et1oeYvQ9{*46*Uha?$r@#WfxqS*0E&L+>gb6^Mr~n* zcn+`f@__-fMB_F(GD89gMC-{eK8J%*N~Nk_7Cls7UU=JH=fdrqDZzExL~i*h)_e z9)fa zW2eQ%%#NL&x(yH>w^k`^h(%{+OO5$$2p-0lk{m4z}`yd_Nb zII5;d4d=}1X}|de8Zf;1sYYG$f6Zr@vq^3PyRMh4hF=7}l4SO)GufGl7g6*WEt-PVk48$hP_~NScq*Z}WeO!0r zp^)qcGDq+Qyi+y~PIG=; zV=5dKn&bb=^W`RGV$fg93a82%EGtOHKBvEQ6L`Tm6EUTB%y`QDKwuv+{$bBLs8}l# zSxB1EQZlPmVav?W9WT{VONkz2Gg$SYu$QT*r!6_%pm^go~zRFP+c5&q7I{Ie6 zl-M;su4s%w+IbGDwhWL7xrJU2Tgqz}q{KR6u#zH^@#mC3jZ?Zkh&w5YOEYXg%4>e^ zTV(A zH@eKR_!@xiRdvrUxz^xfbL#G~?oS|nDV$%a#nQ42?flwvG>%M9 zW`ve^%NGQ^@7c+l<=p$}mRPYpQs(ZXFmXRJf7|<7Zv%MmtBcFqnerCJF`nd&%_HAp z28ug5vE+t|-Y)UCCDnyHX6oz0)b*@GI>mMwLu2~Y`)*59&6`OL8d`?fm$%}?}6m9;%7jjM}@7cNTML_!ch4GEVL2Vi^U?k>Z;|$=7W?_&uwQLk@DDs1yw>q9C*~=KWanq)_kuR;06rV*LnY;1hdv zT?Gsg^-Act+X)j^deJQdq@s~a|C(AZrFodg~`Rr#G+bu z7ir3!Vf|m1C;?1St_JDtViuT^w)SOo?KIUP@QYxs0~l@+s6Sk#wH3T}p5{ zuBVb=LZu%K{W+^<{S{~XeAS7aiH8zLsok`0)*&iaoY)d>4-m^^d*YFczS?jG=Ixmcn{V&tbMT+%%A)KAT&aA6aq7%{B@Yx$Uznzt+= z2pzlNtm%+ZC>~&7shx~q5bA;)FOUv>N)m%bZ*PJ-Qg@^I6|LN5n<}Sdgub@HCvBTY zzj)--4&vF5{y_4qiWVw1hk`YHBE$8i$i1EMu>IPP#bt1IaP08rhjCRz_=iAne=n;>C+P&Bl8^0%Uu-Cr=lRhk8`|OIr|LBz#MM7m=`eWujyJHOxJsY;vg` z&x18%*I5sHaq<#TQxUJcpE#XY^);q2@ls^1L3hN!L!@f?*6{v22Y>hKx(pXBtQVY# zkQx4NU}yV>kmsupHApWq@UZzz8NY1_nq#uayMaCYxjI<#F5{ZDb8eK|@3&^AWHv(? z#rQnlt`vOU*M~-z?GWF6;Fjs)0qTk!O&Z?T|1w7HC3gFPwb&avp%kHZzG63{-FBrK zNP#qz1iZZ*$_}JR-JkJl9G?;p%D_`m zZyPVZgl~3j9(Wh6zV@OQ=Svc6U#%eT^!uSe@y;e0lF@gd(C08VRbsTl4=ZuZm6vg> zvrJ&7qD#lxJodTkh4-k~no?iN!^&ntf9WWG@avIa>@i!R;06RFwD#PEiDlw1Uf8cW zwJCa21nWEzbOqkx8+SY!x;~vOJiX*jQC3cL=`#0Pl1+pQ=$JJ?%uWad$YuGGxUg`tL^1s;z zB9pN*#E|(-II>TJNc^Z7W;+8Cs@LVrn9j2+P8n1%=J$^#-+l09kKiEG0WFEIsVLYS zDIL&+6L85$^NzZe2VM*sGq=>e%#m>^T#(E>{lV%cBDRA*WlyMB zYJYz$<=hn_D)GRy!VXfSdfD1AX-bV1{rrGc0dDJH%PlCmN+4o(i#*-l8bOw6MoTf} z=9Gl#lt<0IC4J?9W94Ul4Sdw=V**8+R?Xovo?l0ceys~irPp+86X>an{dDu>N&h{MfwO1cF`@mfP= zpVkaUmxR?fZh<^S2RF31mo}TpETPkf0z^;7 z?h{hX4(mtavKrHrCmvvvuEt=Jq_6Tdhi2I!MfB?NU9TS^@|{5lRWVirzeF^rqJrq& zrDTeaps&xyt%|6Rc~+}#;hS8jU`jSB&EeOTSLT1yJ;nGG6oX%1lTTII!)qENxb_^2Mv91$#z`)elYiJ#%6n$>meGfQsn)^(I5N# zpJM4BXAlZ#665y_s=oz4zU+UP{^dyj3F`jyjBs=YQEr1LTB~o+84a09sYUO`?Ip?U zyWxL`tvwS*aIqB+P4$XAXB%>=O&Iw4H9%5MWg9rqUJVxr$@k=B_u z)0$zp*%OH3W_F{au-*?xe^M|G#(7~0*~#ZrBl+%VH^KU7{K-RmNa-9kSBuff4KTbo zl00*;sCJr;OJnMdEe5j>_!-)Tz@o6mYrWF>)9t<&_Iy2>b`h>C&(u@4VZ7nrMUL1wuBRyx0k z+`Tr{SUf}J!bfVM_c}a|UF@*nLh;g_ReISXj0sLP$unGutUk%*M^tLi%qJ3E4i`5li%ZN{8ze#z?eDM5nU)`bau3iET4`$ zdk!WYl#^d}>c83)A7G!%dr+lVW^D^E|8b)X~hy!G^#NlhYi>)Dv>C zbrqSe{pF~N;ZT*|i@4`kxjZB_py?zeKm*F)keeJc|9t<8-zpuAT^8my%sK{32v%dW zsP70MhEs%==kFCGpX5o9;v%+^9MmLc?r@lruU)umU{ety^gM@vYjZ)*Rjgvr7BXI;$yud_|Sg3O&bJ*w0$-Fg#@ zZeeHFuY`i=XoQ4^SNtlC!s(|oct~41$MG>}0oq4Zz5xA+@JpVkKNUZW+XjD-hI06) zy_-j@JuQ8{d)`S-GesgTOB1*7BNOuwhJWRC$2eG9hxAW8xjaT=$jxj0R_OKbe(Y{f z4&wBtw)lsjwZ2+E(J2|c6dx1hx?c!hytI9^<1|vGX>Hthf-W~L5bj#fKecu_H2{Zh zyJ5B50<4csz9f#)XO%kv$%kLuqOHq~s@a<>+;bKAYb#J?oeVI4k4KxW_w97F3Ah~c zt|icekz*}fA(=O>M40$&U&vPl8K0`FX&$n$VT~*!as`4!xMN*_LQ81KKBZ|U(IWs? zYpurK+8OxF04TyT2ina<9&BgQyXk{I#4GKt6X2zbl4ZXzq|+O)W7FAFX>3fRR2;eG z?A@bg@BK2LHhny-mUoWYe*%Ber9Pn6DPnrVa=L=TG0a3O4vJp5ad2aGhS*|b4n;_O zChFXagFCF;7II?BV(lCuw1~*X!^a&q6ZTeG2OIy;@ygUPVx?A9XKGl$Myxe$8r}U@ zFBsxkLq#vcbH7BxGf&wzWtz{@B|9J7T2?_>Hl57P9eZ@!Sw{G!pyCr$^-*8RA-Z78 zC{za97#0a3bLcn79cwzaqOR8f-2IhzFQ`+cRq_83;(U#g8~vaGVM=AXYo7IpDHwYn zTcTHFot>SqdoM&cMVU~g_JMpOTERwk9F0>m*s8VOqdbA^^2}{_R<^!vbNn)HU4GXb+)2;<6nbWt3uHJfhR$}q+%4bq|^A&KGK-|ocN@9Yp1<(uflteW& z$Kk{*G2t5HAgeE~-~COsM2zx8yK=`Ky%vv1n-0ZsDx;_#`pM;1`{Gp3<>Ps|BE$A8 zLft4G7n9Yla-~{IvzcwxXT_DD(?$GY?)3oU0Ax~`V5Yo7OSpIEH$xl5>;u744*?jUJ2 z>zBkdR5VkH@6tK6B!5E8|8)X~N-#58RZ~(>Ico$#faiGWj&esOuus#VZ<(W8 zDUBygG;^V^wRE8q8U*^3Miv4(JcUPs#?Q>~E`k0*l8hDomEiTjdT2&<2y+D%z}Wlw z*r=?Lg}}K!b)7lJ9LRvd#M|g_VeDeu9=U72b9D{U-}jus`03v&$(^mp^7Z&v(JP)3ZRFeZbS}bvSt9i6=xnm{t-ZQZvm>5w|wDw@} z0@nV~CniE!wqT2hC=9iYQrSugX9g#sa-LPdmb2ZqHAq@Y^c?-uL{2U5=!d@TQMbHD zh+I9;4hMToYdrNO#G8bVMKcDS7a^}r5TP4Z&oi-JP+jgog$g0DWvF&kPFU)_i1RF^ z-6N>Fy;y)ey7Z&-tIeTuF`i+C{T|iQ1`*;#&9{i0t0K?NkPz`;=&H+=XGREq-|<#D z)0?W6)Q-h9uEdG^>G4!nRC&<|rfll7kYQQJla6@QZ5CXH+$av2Mfd&A8cU}&lsibz zlNtdXlLDb@CwZ~_?UM>XznYSaAeQ{2x)aHd8;rdTgfv-6B57SyQQ2X&`1?XiKDT0x z3b=<>*;pD|ZucTw`u25pfGkiwxpn`JuNG=H|XGNwb%o z9uASivu=s(hToj-T7-w1b%k@>JOv2(4mKr8rdxS9G@uJ|4y-nT!yES9}n_F z@9kCehoLY1=1*0rx-|;-*W6K6u*>ldLBu1m@8T6QzZuztrdP(Mcx&j+Qnw3*%a2IN zkEF|L)gL1GhsrDIXZDW|@Xar{pJCfbVmdipdvctsP;4o^Hki+LhU z#*OqB7WGWArCTfxuAnyI3nVh0?00IDwgsj&4FQVsEk-tF(57GIi!ArhkaS0OapCT9 zwgZNhvwm%?fHb((7|G`}M0oVPjo7nd{gH13nPf^RTelcRzv|PO`ieB2 z_+q`v!x-!^`?igjCUJt<7Lp9f?O0Bhq)qP_^8IK~*>#MHOT4>+k6>{44mQ#CM^Q2S zINtktByPK=(8TU$-%V=x@n7^JC|XxwQ+ zgSWJo7T*2mF~X0(oRNyZ#$mReeQ`B@PvS^3Gn_s|e2MsN24878D3DizmKqKMRx?mq z+XE8}QP-Bcv?p&CBtZrM#E7Bc6_8r;-d!?3ak~{{vn!09W~#B}!p5%yil?c*i;fMS zT0-x~{gq}Vjvd1(^nrX>%1a==?>iwd;K17DM zq#$9BRcf_nh#+!5Rx$!npig{nI#su1qpx+`gEMNXrzgXn%pd&r3WoFRH;n?qB(*vQ z1`?Syq-E3zl7S8zf#vKenuA33#JcZJy=Ln7US6%DbYQt3z5-kql>Q}dwJ63{C9rMJ z2u3zkzM!U7eby! zTOc_1?Oh%4!$5aXF4wk7&@ZZ|bl6@KCzLl8D>e zM$q)fm1o-keVHNKmBx1>G(G`{CT&vZS2(7~WMA7CJ6CLh_jNgo-_Ec~S7Li4KQ=HcN^EeH@^)j;dLsG}@$?K;`%k|-)x zy%C8x(b}w=Ztvc+BNO+NL}0?cj5%1zPB`O+v>T8j++n88^k!%HZhR(fQ{8HpT4m1V z;(2roxkjYFVmN{QgeJI%saFGX{fogBobvRRh?#ed4P=>SJrQ6KNxtS0TIU;2!t13nVxNumAhMT%OB zG7{fhIV&5Qo4g|-+%r1e;!pg5yh93?0;CoN@fM`dgT*S?{QYP&Tz6Qi#}fE2(a*o& z@u|NFmJKu#amQvxTjq3Epd}S0Tq(BwUd!f3lUJDNkVgDO?RYM9|Kr+ezts(y1F(H| zHdEv6E2?>4Aw?z`r)PpO{A)?dw*~=r(;Z561v-&h_mF9i85%)k+g75|DC>)M?%>&? zuDskMnUyl8qMSn+Ft@(P$_sCZe@ze`CAhEQ9sGj|j%-uJ_6l`B$m>vy1MW-+VcV6>x?n63p*vKlm_+%E zQHy>d3O%NCBB#UBzO$(iekVvjkM9kvuY16EB{6>$3ksYoi>FcRbRJ zxzFf$p>qxF)6W`Gt*l7-aBn}{L-f8uVk3WQo2bV2FzGJCd)>nf533i6jNUj!{3|+R zw~E-fQ`=kl)3WSHY^=LS71CYY-d|$l=<^^Sv;aRYQ6zv!ykB4W+f83Ff2LM@tsjQ| z!w5nkC?yN+C^qx6lg1-ga0&%wFhjV7=0YhF!M@SFv6V|Z3^tu9PVTIO%)R{fFYyUR zmdRPfjB5=Urm2_Oa~#rTRhE$y6j_D5)x>yBUIk1HtUHW?z8)rJS=cZlz0jnL8It=b zZ|ngIvej)I`_4W%`?JnYU0q;=s%YKi2-mDyZaNrZzahxm!z-FwElDJv97on){)tc_ z?YV$7kMk^^R=R1Y83ML=o%1QjDT`z~qP^()B;nvqSnT6<626vcrGF*#t1{!|2{q!u z+}@L#c2;6mPsow|8;Dk0YQj3#1txtd!f9HqTRft13KO|uFe;@@T-S~8nWThv76ebw zp%*R)Ee&&vTBh%7vsf%*`ogR8097>Lq?tq*zX>K@(+OR+hp?{)79a(<4gA?Mm^h^- zr;|BoyKiO1R`aH6s6FSkPVy<3p=Mm8(Wja%M9q@(SlW#%r(q=1WUcam;PBw%PGw5Y zbI%mmNe9N!2WPAML7QPoBIw~b#0IQjs@+3E0xwrn@?m=Yao%tTWyK;G3ZLGnKUPZy z6RK`a{t2)={b+wHoY@}Rm?65pyBG#Q&`-C&iFBQjg$VmId7edmH(-~p(qo$ONlcTY zB7BK0f3q(c_xyROD15Ryz~=a}e`F|6b$jn-qX`b}ms}{9gH*Q-$R^hB40v1oA~Xc3 zjeV>h751dG=_nf+Nwjie=9*>%!EWXqL@N)jHK=(h4uPyJ>|pbc@}e}s?!-sS=a3ZN zDbqVs?!{6G<@u1tnfF;7)7z-Y7 zBYC%ii!>hV5ZV_2e=#>x<`D^VDYa#+3r_k+WjESN=ICYjZ^dLV`}Al|4%7; zkv)YI1eu_q_A21z+cC$TyR;07`%zQ7hrJZ?7Yl5T{wu{UDrRLcZd66|PBnL7C~E=G zIu`vG?4qM{`W6}$wFVzAK2=pZ;=UIC?l00;q~Kww`ycR3@81eu{s(7ra`1+0#9cko zF0#&ysZ~ms+R)Z(X z_Xya_mEb)X_Scd1M?{^suF{ye53*mT!%lc_Af3)ybzeWvyWgWrQn=7RMxiK&*rp3- zKP2t&esEDmQlJ_VAkR6G{UJ2mYxq)UX0ecSI{u8u{(g_$r)_1rf0#&o%lu#_*2pdV zvw!Pio}lfDD&P;-#9s%rPoyev!r6g}4HvD|jvr@-WyKyn&C7mQxpm%0CG(~L`Rk6Z z_?{!#$nJ)cp1JHFFY#YTMn0S()lKj<{;6tq6i_O$c-!iI!JA_4Y+#}@5&~QB^++Ji zGU&NQ78QL^VF(Deu=T36Y{)u&&S`Es?odnb?XZ|dMbmNd1Kjv?MU!kH*B@Z%~e zVNMPcvYlanQtKmWGW)`0heA4fWg|v%=r(NOHmTxo9=cDYX7oI_@$#%R@7Kb3*`lL9 z4bCO*ac^YOwD6`%&v`4R+I_d_cRlEkyBE>O?Y5qZi$xh#(Y~StxX}0rZ+WpVDX9pz zoSE0{jSx-K?VK-5+QXxTzaA4%4YTB`2A;16>?K&`L80(ZyK5aF3E`7Ha^-R%hczNX@^gN&VA~PsP#I7>hB>> zE>+R0v;RTi7Huiep)vCsopMNPVWTwh*D0KTZu}OXii=kj@EV6{GNZEtbw_w&ru^Y4 zhsxz`!G(xmx!{FclelM3FAQ;9i;E6u*47rUtzn%s`YYA$SVujohPqAJQk}bxiE&l5 z_NI$7sDA%Is7o%c@@(o?G=i1c_C^}2?26|OTWJ1clzk9I`R{lL0quUYZ#wIpi*2s; zR_0|UfpaiG4_SQe@5NW|=xPB($>PnTG(WUH`B=+CkRRQ&cv&ygqRJQc=0mpuY>fxEago zIj0*~U2HbbeAn?%^$CBI@ZMmyr3wf!m42T{0=NC#5Q(!VJ;z-_^B^E!Jb`ijYOeh4swaq58HWoeiI?)=I(M-E zdZjlD)U+(a0pC__%tIy-cfkW>ol75fp6%?u`MoxB#$0SvA=I7864va3{M7tWk^V2{ zFr5q_T}z!b<-bJy9WU-aVVYsQ&sy%AR9@9U5#a-?5Tte4=GvN))QO4`K1dt{ThegG zxLCMP)K|zO2**nZOJaHN6K=$h9WK}2O^FfMaP)(3LRwnnLobu<+Of)RURzT8N#Q$0 zLDUqiKGyBsFMr?IHx^6Chsy}fY6sjx5mDT~uk&7S`}IHVVIu#zD~Qe%A36S0Np$(Q zK4Aa5vq$0wkiJ&)9K%q(u5>|zRbU3ynFnWW>KVmlywJl~iu>6+Xo=mGVCr|u^-GpU^C#BtY)AHbEj!s`+^2P0YvNez6_ z3&*|JK3Lf1Hw8(SDTF+ECF{S0!wh-GnnlMmFWzkw_QVQ@rR%i}ht}QFp~b=?Ae(Aa zr(=d~(!#AH1I(>6#uPDNvfdcajJ1R!F{fr_bRHhQEnMpIMu539E!@vDOa4M|IhcXR z-9>Vl9qmS6uva16!?lsfJc1*t=H<srwJw(|4{Rrgp#@LT+$Nb{leXS%)F9(2`agEx1e3e-q-{=i%&^t1(*~TJ+;^GGRW!cLE)Hg^$89OfnmWA01k+H+dIe(ABSI61ZLV_sb|2k; z=yso}hlyNMbjW8U%Qc9nJ4oGDJ9-Tl>I{~6-mqDE+Xb+5W3p#Zs-{=RxvTrWa&u)X z@0}*s((5a_7_4j1YUELj&!}HP16g2olN~OJX${Om>2N(}E8PY6o35$v=u5VW%MpTT zT6!x8((j6dk1;o z8rP9qE`+}92~zrV_d|6%g6r*(=4NLi$sC%yPceWWWqP20c@!6n{uec85BBx_Vxj{S|h&C`0A(&|#J+xOD#6^5E4$XGl(&adO0{nbxfxHdT_`%~9(K zKvOz`pn=;3>OqYu3XY%{aL^x`Ly$rVd+Xy=;oMhxY7!P|a#s}#mVhA+Dx@+P;4CR+ z{frq6SPK+{iCaa6u9Tl1n6N^JM9<5y?S)%x@gta}-_-$l2M4?ZFH}wYS4DqlXZ7Z) z6Z#cn*2b9jZz9;+_E{@w^FR7ir_rTkGsYi0IOyEiKwwv@-@zr+Yt%|!`#NAq3s@E+ z$!pLmt4G3n3s#8=xQR(o+ij1Dt;;FD5pm_p60E1T9WmN*9ICnbEf0@r)&Dfq)JLqT;1(T%%gJv+xq3vx~3>0`i}<4w3E;4HMI z*30X=D^ES(T5WRwh7N3Z*I>t6s$Qi#6=jH2yJapGCu_!N!hz@WITGHFY5-Hcr5eO3 zZdl2Dw9_x2lek{K)vzJi$nCVOnX7|aX>-OLKdB|BlF@e42o)=D_upY%?=gKrT=i$n zKyq;yoqWt6N;ZW%Kle5mpw#iPhUcfKBjr(vmjESAA3LLMY2zOnQ?UzykOBDDCoU)s z8)2r&Fz47NZlD`p=baO+i5CLyx%e%wn`noehd{_tz);{h&&uTjxe$o-5V;WbWRbo7dU^$d#OulP#eFy+k8e`*etKv5)fFypB|%3TTvSIxx#(s(x7#X=ImuM zh=ki!|H-epA-|+j31AwuNaIqL@dX}T9=pl*EsL~UNP~0t=8~<{S ztRIqjHjzGiPB)X1b~zvvR5hVkp7yESWZ`8GB?4#O{3ZF0098;6p2K}O_7xKCT&K{r z=ObURoi?ZW*NqIt6cOgAmbvVGUE1r4#EQnJb;={x0>^E(K$c^ijde|m?8lWmFziQE zd-)7|?HB9KgQ~j+$Gt(Nhs1^|1FPBCL^>qk6`O4|vw0KyqW2l~5>X<4C&H#9`KnwL zA)vBN;X8mdc6N)^@V;+KREqC%5sii09d3<8g4AizjPwQn3OKdv8pZ;>9scIwj5~Hx z(|#I>(b;TGKBJ|xElIPNd|k?znzr$gN7xo)ZY0Usbgpr{8rr1?4*P0lbvq%1h5H8B zvWBMKBi5X15dCcBUaaA>vW8apE?hd>gxTM?@>8<9s!f!2=ybwsoo+IzmEH_s{joTq?ZMwi>~bgk^+X1CTIhoxjWYxi}&Sjw(_ zdwNK8t@;vi>gd&c{-ws~9*ID8-qi@@ApJ_wYE5EUckjk`m4YV+ye=jd%N&8C=Wz#! z?A(!21$4|1;`9Z-kQ;H_Q8Vnt>)=P{sL*(I1B>|rI)wcJg;@|u(=ilfX4&5Ss18v& zl``eZ?(d%sS-2fjLQrIka4SA|@$@LTZ&R^!W9SilRF2gz?-^A8=Oe3#UL9vW0cH zeG=`^`RTnH?zp`qpn%{aMM>%ImRxj$gmj03 zG%UKidr5aMy1U`79k}=Y?t9J|_jk{@*FSU&|Cq4WeBU{r_wy95d|mRM^%tTcYYFt1 zLs&}{nL+V((mU3U2}tNi%VuYkj^3j`4)CA_uj%S zsKQS0)5#ZQy)OjsOTRzS$}P?qLs=q!SOOTy@3q4a*UTgliE%~kPyHD*`#VNAiTa$CzoWvK(>21Z2fh?xFu9)yoMd}P$wON8Z?Nz0W3GEJO4 zG}FeQhUkSuW00kg?7)&(5A7IAI`}b|?F1sd%`8I*4W4jFXsxVPx z=fmaS%hKF)c{kfje^{x%-%NUvDxJXJ^>!gMlkSyontmL65gxH+ox*hbRLYCnGCF%x zhRjP|&-_qq!xxHLV%`3)Br!oxmUIUvXcz?LCM=pSi%K7Kx{~D&qcQ={I(78dYi!Qf zJfuuD`;F?qg_5~r7a!XhEu>3msPfFwN+%0SSyJ(xJ>UO~SHfE0^Gb|&%ZWM)*CC4Q z1sZ^X(n(HM-^vp^yM@4xd;Lf`y70#^E*M(-+E6#-FJkmMT3>sq-)H{pMPAVv8y9;E zuGBat&wUA<5mkV#i6`=qz16k2zi!8<(RVtlDIJ8A!i-lA?4ViEZ*`_OK7>`4cPlGh zf3l4m&%%j5JPf0FXE(kJMW9?Jf1MGq8wNi$a-cW=^w1yQCLZrt)KTrkVC#j3hm{vp zfkAuzjq^e*&CZz>DkkQchxxHLyJ+9wh1b?qX0YI{y7MH#Cc2t0f-7DzTq}Snz~F>U z>yxIGX-m%`vIykJmYH;ZvqMbXeuv!Yq-lw_hmTdT`f9T_&ryn-moR$0s^jREnGef6C;|*sC;0oymX`?O>(D{`#}RGREe2%B z`t^g2d+BmvLsbXySi2VA80q1-i<;5XGwT`N4Ti9w@0))BST0KjyW8M;%$$zEC=7Ty zGxjROr3iHOp{3hpY{^EJuv&CGmA`Dp&16dJbXsinEk;*UBfYIHJKy#;U+orDM6(s! z*8!MOP+RZPETT+dsj@SN&h4T*XCFVQy01RD+%!42WNhz**Ld+_(2CeEP>oF~-O7=2 zqs$)L=6J-sl}S?Wo^6yt*l3xW=N+?6t`1os%%x9!->m!a@25A2dj2YKMoWPTfNj-U zdDmC~)KIN^>U2*So@SOrA|Td#j7XpN!2G@nPErkF*j@H#*37BJaN0HEEqH0_K*#J@ z2bDM%Je`0XR-(_Pym~HhC3((%KU|XOiRc2>vS3;oT5QXEdx2%;k8Rb$AM7_vyqm73 zO|mWAa-WmqE@o{0-Fll!6eaG%CK3&>@onNRe?vT*zEw7>K!R2w(`-Mzh*t!N-Q3&u zF&E(3`3Hvw42m#L8p-z2iNpSiFPRgm;AQYA2k$oGE#lPOZ9l3;TCaTcV1koSFBuB+ zq*FEgDwPLoTW2xiVu8qnLdfD=n}~=f%iRMweCaYQ-xkv3#HKr&o3a|X^YQt<5HGP& z*OY$7lF6+7LuEn`DM!-DtcQex+M!$XOl-Tzkmm7APoi6#qE9^yAfllc{_Mg~67hSp zUG9;Svb(w;<&AS+=MQAg@~}t+i9%Y2%ey+b8j~ZsO1_XIwsDJ3nhM&MpWdE#HAoLx z&URT;4Tl{j9F+4qFm6qwy>MxjypXQ)9Qf8UE^KDmVgf@38;W^{FT#j58rdAZ1F!$C zJs7|CWZ$!K3Rtm^YQAW)nQBIEtAj7$M1MuZbCN&#ZmuMfF)^uQD*&Q`J=~6f?OEm* zizeG&Aa9@RN@tpBNj$an{TWIx!1feb(RPMNu=+F)AWqh+FW0J;kNPc?IC?ONu|yb!k7I%Jv;@PR!ZnD6omqCHsH1@sgvhG zSyX`8IN>uArB-ldcjwGq4uQxD&36mT~saGNhe z6^^n3luFj4wwInMH&uDZ;@5H=Jts|1dOcqE{fkKQxN$EC^!}_~sz+EjsP-I*4qdsp zUOr7n+nvkW)E3hPAYx#E10f4k4;0sbHQ$|m9pX57B=53)X_(E%7$+$asBj55*}h=_ zhy6YQdS|cs%5+wMehOE&k-chBRLg9hiAW1!7Ez|o7)K~ft3~F*!-)Cf!5((|)+_JZ zPb)zTJBx~3WVGWqEn^MdR>?w^{Sze)4;CJ28Zze}fwK=36=T)ao=T#Trtxd-lo(9!3zd5&u<~A?X_e;_QHO8yf6f{Hd?WAbftG2<;7| znVph6Wp_`hgBqS}UR%|JNk|dy5>BVh>)}$E^b>&wp)sQ8>X*q|$c9Hxe3+*Y^ZV(` z%m?|Y0paI+w*r9;t(Ma0q!c1-KiICudwx;jc~M1rdtFb~E(jv18RrQ@WPdZXjDXIE7nBUurD~C_Orw7v%C3voRj`uyC1qEFpAwkAW1~ZUwBm0UBu6iBiJm6VAB-p{;1%3q@R2^hl}tuDb&tvwJ1a_h@gruWz+zl1W?{G(zYmI zmb7DzSWX<|xx5@ujD!HUj!|>)4R+V%Lg=}omMzSdS>XjcpFU1bT3tMv_881?sA{Cx zsS@h)-HN=0$F+Q`btn&ZvkBUk{drWa8)5*P^trXeB0Ug3J*Y*eYaxbYHR01 zYO~32SLyX-Nk8`oiQN4hc~*sQ2k*3P+B0YqKPUTwpQG#EHUN0ztW6iqyN7CdJ)6EZ zL)~t}lf`b9)WucMm3Cxz-+(6u>gQJ2qNrnIXL~*xxvmsGd@g*t^`Z~7fmW=o*FvbL zv*{~h1Uc7;i@o**wBiEPJYQnmCb*j0BBH9QS0I@fAaxoQH)dTJA3A#Ziv#i9UBe8O zq8BqKFfIq%c_Qbh$WH8Tc{MBjW(!}7!RzpR2deS8m(?A0_Z%E?7QAfe37kcln2@lt zWnP9u=)E433-J0vO(ySku`s^*&_%_wyjl}0GxROZyq$e$UNs`snf zSO;l|_$8FIaqTuI_h+AqCdH@&&DBrU8aF3~DFHm5Lm#c-3j)H}D0>MfORDbdfqTq6 zPVu_jx}6cTC_mBE6OdILzVr>_KEw|1UMGenG$`Q#`v~in(JS5sA%05Hn1UJ6&+lkUN+&?Nt}^?e_{NiJ0dTvS~=i?Y$z%? zlDKbBU)E*R#bj~rkBKzrc+s9LzZ4qcg4!UNmeycD+JoJF_^eXP^<-?xo`u7n^b2ld zc5J=;>}|!n%p%P8Eh5`B&7`dx7$=bj;-gX_pT!$rwy`UgF09|&N$vF-2(%;RTlf1U zI3!gZE8hUE;(+5Wgk&%Sd&K@(U^~DBs z$t=$)y}J;=W2LG>)cL-Vz}YmpW7f?U#cB*qR>WmrHxqW+Gu-ON0Wt}oXb$cpyVbgL zhz#}_DYrMPTzpV z3vpC)8BX%J-juSIqYde74|8PIj9%~qnln@~F~56h&z+Vra>gg$IHBCez4`tK+3ozP zk+}bp`I0mFmqOVg4N;B_exZa_B(@x%JDBFo5H=-FzkZ_%BS~S5|2#7*V0ZU=sO%f>VQ5}K!f(?Kr6xjuwWUPY}{88+bCiQ zSEDq+h_(Ad6#T( zKvy@0IL{qNcB;}8(8 z{NKnea4K!*J|2__c+#(?&$mJLjYMU%@`Zu%VTnLkq}@-gaRS-~Gx=f83(4==)XTAe}z0G z)3$LI*gfE`dEuUVF?b2)+elG4lY34gM{`w4Tt_yT(KY^VoJE<Q49*cZqhDOO;ac9T7DSW^9Z-o2w|);x6i-rPoFd2xbT>reZtkUl(i77I~FO6CL8FXcWyKTvq*1XI`&!I1KX(qNAh-U!v>v zR3!?e>8nDpZRq_@`jta-^ZV^=odZ~k4_Li@NS!{>T{Ek<`AfG(pXPTL)kRhNgbWN- zp-<9>M~j{~U)De$OW*l0D~gVu0j(s6L}_N0a}#t9{x)!@87UtqA#>Z#M59I*_@b4Q(Eu6 z+IYWsKr}mRQopKI_R)H60!Dz0RJbKhxQKbzSRg3vUcP~y0w;PE^({PJ!KNmYr&0S& zupkFZSf>%3+zmm1Oi{KazGGha(Qz_}KHA zGpPCnQUK<4;IcMsLxHAgxMF{L^1JrHO|zq;?- z?=H+BvcDV7IwJlNqA&T6A|}eeX;y+RF`-3F*P1o+~p2qC03_=|^18q`-5Ud@OC16NTNcGe8N&W?F4iXl%~V=vB06C0s$;3HlN5rCO1D?9 z!tsH^3~>ib<`=_{oOCUq0cw`=i)Otbr|*4zEoeJQ&uZXrnpx; zqj!>Rj`3Rp2xuKPwpR4R3Pz=JgK0^{C2cYwhN&sB;6%&1?n5Z9#Y zh9CdW9})>d0R3heUBw^%Ffg>@I`9#6E?|oN23D>vX6`6I?V4S#s%mM!aK*rd4v*CH z);{ZjGfd|tD=*GY_Oon$SPSA$cld}F-#S43#zrZ>B`{e$!~#|;*5)k3GByrBaT~wT z3-?SK3#BcUNNk;M%iA;W?Pu62QYDddQ)W9lQ{M^&PzbX7cwMLN-glz7jS%^{j7Y5; zWMPt6AP}brTqD5qC0}K|cgiu-=UcTHsVeL=JMIXtOc?kKgE$Bh?m8EuB|k>SwH%o2OBE#W8-6Ezj>(?Qw+{(TW|1g?!$?)=fU`z zIJmO0f6F;RqLs-36;f4YN0%RA`k;8UjqFNk#7AgHxQp-| zWR)=6zmlAc|Nb!ZJ9!5EYjR^etEjxx?{*<2{wkkiKy^UqY3Lm-sWd)7^);TX5+Xfa z@!E+;4YPJy&p*GW3lk<|)!!ir1J@cbj zmoI_B&3x&c2E0yLGRqqKZuglDm|_FiZceNAR7%ctM43Xu-WjYZPBjD zzimEVgx8z~WhC=TM-vM)&Cl8mf&fM4Utb(|=WV*ndF#Hfbc21%j4ig_*!nRM+Tn2( zrZ^UN^u|=+%V_q;_iCGf>`xmU!ZitP?If>rH>MNwd(|5W5Xr@v=lZ_KMhw@iRHsn- zu`!fiNtU_n4Lk96<99uLX83adBT{y{v$1#j`L-PgFnt^aqM}6|I^?>&vyEg`b|In* zyvM3?bvB?-h|#OR|NOY8-hjc}6!t$yR{YNG92?5~Wd-_7t7$llN8W2A((trsmBmI6 zx);2Y{}^2v^L?T3qmw&Z)iqLpxYkU>lFZs0;>HupKugrH;GJ^vxWpD#23%;ISD0JW zgd|(_w(itn|X&7WXp%!@Hk2f?|$r@ zB?QR;XiD5TUNj!@zAC3LA_aHk=`#;(7qete!!JQJTnH>9SCM%Zrk)uepYZV4_wI;)BPRh~AubjOh1c(@Y?+J7HJxg^dOA?4bql<^1zhczI z{LCZ3%r`N=)xysHgx6&aSym_&ry@%=36?G1wqzXfBg~1nX>U75r7*RYy=E+n2VD%n7d`G@6rB}u)FSTlY z!4W|hSv=ru^|psLq5hsvPhV8BRRd2S*`~^-n1|jpNZR1t;>lj8qOyA8ts*-v z%qo5tXkl=Upq)i+J!G)jDkys0N3@PsNcQ_UcDjoO%|+KVZ{5Qyr7G>OnGjiv$Oty$ zVVofxh<0hD3S{icPyLXpVw8-sq3-KP#}*}-wPnmSAkPz2TDt{YTw|IuQz2V8ijS(P z(e2m%6D-b%%5esAKlq*M^M9qqT77k5uoR;?+>Ao3*=x%;H3)}y-KKMPK_AzorDG(P zvKw(yi-Y1hqMY!C{ssM+fPowhL&bft!BF=_s-=%T zZSW~SO0RldNOX|^y&H9KMd1^gnb|F?S6Oz=VUSpVst3lzwgOAHag`If=P`wb>vf_Z zdBSO7UvzQjbIW|#&Ei5r`hE!{Z& zHF$W#*>+x_#*)Zc;KF6Skikfq^)#jE`?3E3O7d5JzdEtulxFa*Y{5P17bG@haFX`0&b|A zx6fJvK!$UVwtlXAt?BXQq)onvFXVc<=uYCtGEX275@BYBxOcts&^GE+PG>=xT=wjS zN<*lKX5ZQPnf1ZND*tD5e!j%iLiHwJ?*YR<9il;Qm~3opoIIYtS3m6$%e;S&p{WU1 z&Jgbj?fZ=Ems#G=`!)t?zJQSTgbeY2LsAmRekjS>&R^QtENIu;Uz+mUf9Tu)4Sg@CY*xx&B?yfBxt#9^ z)?0BSXa|l>)@(TQ8&fZL(PvrB4&JfB0k1Xz=usRD#QM;L+c+AV$ri09?Etxi-emjl zY+81w$#coatk%qcr6F%E)>qys-QAd$NE?CDWCmKBuUQ@|9FE5!chIH>znVZ&A-{@)W7T8TfEy)f@o32v5m|cfwpB9XI}X=ii2 zEw}yRrvS?4By#Lkd@S4$D6l!UdsYgEA$qwBJ@?ZEAL?xKslPRpqj|fQ1B+d4jLS~D zjxt{?EMMRx8Vx2Jf1ir{VV6`vf#g%z9H)=asTU&nnzQds*MB=7u-b}$ps4KgaxRps@ ziICG6+|X#aYkEb5(a9lwK;5d-qG!5V)W9z>k0))B>m9LpLrG+&p@T2g=X=3=5dNOA z#-xH|t@C2rbl1J53yDEQDwviHbtXyJs9XD{STLp=kA{r{M`m4}HO)1hx}M0^Wyqi_ zMG;rhrHgS+eu$(I&+-zR04Q`4s+;M|zeZNW(}wh1z*E>c2rr^?*uf*Xm_u>w9r;?h;?26`<2(^G`A=8R%Kh zi!CT&(ijH{wN%Aw@)<={8)AEK2Jc-#3p`^bs5;%SPB<4e6I+7Qf0W)`nhvZ^95$vK zk2c=gzDfduL7vf#d};Bq)8-&o#Gwf&z{)r)EMIh5G%A2l!_-aH9UQAi7!RJle|GEv z27h{x=peZ`w7z(2Z{j4x#Cfz5C*nmOz(s%!z#krzwmxY5`qke$>Tn5efP;ALVfuqS z${QK!#LlEGO~yqh1Uz!VBrI@I!wOg0598!Jg*gCla_)Vc(f!uVqW)>E`)YNsD(q*)4;dL$p|RK0!??` zUv%mu)B5wVVes>~Agl+q+WiZr5l0HMe)q&feEcHax3wy&bs56#ou3`XguF`g$y?QA z9Y!1+bNp>53raG>bxLEL0?@wBDA6R}Oail7=c-i;fuC~5#scBcb|-JEk4WAUNb-r` zukFcvpXWZR?eL}zlFvHR$dQbKkkqBi)zV6RQluu&XfN7RS2NkhJ$lk6nqhz1ZOh*p zINd3^_Ve@E6_(1k;j+$2gpAAG1J5dIV4d)&*Bp3@l)*;E->M_=ujyS7fwQE%GjyeB zbI{T#Xg-{S=YTqwCbTq41sfWldKHMQ@Dy$84;e6Yd1=dQ6;(8nikV;ply}pEwhnP_ z9mYR?7#=7?X7h`w&YMx*wDnmQO?CVaoL0BO*!{y=HqA3YTmpmF1x>!QsDTv+W4FZ$ zrBQA9LR$6x%b|0kyafl{=7vhIPSFIu6c>~afLfcMUj7`as9t(vfFR;DxT`u zrhKz5N2+fR9=1clt(l_u^~f$>QURz}&$}3ssaJ21omI#76J!_bE}+uZ$N#Vyd5%w} zJ6wFl<6MOev`4Xo&gS^)cZ~wB{3{)6SrcWocMa-E>Q_JB*JLK#g%^Yh)RiF4tpJu5 z{2nxzfjo}C6-RCUSsaz=spa4>I9PiB!wwuXYdK(3KqdggnjY_-b%tLXYd3D_$sm-FgPRXX7Hegl$_MtmBPrr z5_TtW#BWxxZ4*u?DV4C%Z2EqT*P}^?IMWJZaFK&E77)eF6oLfj6)Aw7bJV|ui4Qv? z@}rIP?Tq^}Dm*K?;im)p&GZ6eH%&A$`wqb*Nqt|z9r(A0CJp`~DqLF+Wq%q2dK{dq zN4O21L@>K}%`z7zNvx}8#V+G$JT znX!e=n|&+dqP+^G1IW*1gDCC(Z#Tm-{2(V-b#50vbATpPgRE=h%1^|5Hgw`P<<^MJ zV)*O}xsd^?abTjC_m26F*%b%Tf;=SA#gvho$YuuozTyC;5=Q(elWb02&kI)C%e(#_ zEQkv?6kr#3P@IE;7x-*}mSTfQxJkhewtFo*4pbOkbM(m4YRq`( zIJ3UM#b|=j4%#dgktz~Tw$z#Ay?6824Swu!8aA9M`7l5E=5i#pH1jeyTY2XZ#{{_z zcK$v;1BWzf$!%0#kUo3%?0bQ^j)(rP${yw;x)2vf_(vA){{$EQyg|@^pp!DkuQ$2b z6O-h>{_`E#e-6bS7o@oOe_WZWWfC^Xnji-n?BGiLTbIfT-#h=f(}d0k}5^HPjQMKsBa^-?Ic(O&PlK$A**;)YHGnkSGkbWwq|tl zPq#Sqw?Vbi+A}o|A?yx{({pSB`b>~syja~YKbs=tXC_4=?9WmlAuhNa`=an%B62`0 zv1@uxqi_7LRI`qphEJwD7L4T0!zVLtv9?b7@NdKL7SYpj zTAcl@AnAw;q&#!}MHeSp4{a=Fa^=*4QQN85&dzQ-vD6k%plU6up4tDMcK0uD75h6E zPs%bP9CqO}g}vB@1<1}j1YhU4EOmNqws?)?>%S_pE~CU*d0Khs(etHgfkR~jubqID#YG^Z72_1>ImYH0X?Men;II{bOR zWLSr6YAYn+gI3YS+s}_sfxa+1qK-|4jb0ucSD2hgpyN1H9oZeKR zr&g-`9ZTar)dW++0@dTx6O#bRqZad*pDn0I=f~gdY5#AA!~fg|ZD0NCuO+6kj4V~hm);pa3?YVLBp$o7dp3Bj8-f(3;X|*vMcj_L^F8j;4Lqj?OMs)7%gyc)<>01) z8>Xi4M?@pul-~f&%faCa$7Jf!`#Cjxe)z(RX!Bd+k9KLy=W;@4hAD+s zt@CP~y~odX@g%+j2Kak?2*~khiK5@lS0&%*yDkP&bJ)AXCc3;3Om_N8tLzzJvl><` z7;t0%Jc_&b^KuXL?m*}B7N{HO9fG1}6F`G?rLVR6JoX#1wY&&RW{|OE$_l>axnVuI zaqVN+;}Yoj)EIr1eYJM^rx#e*HNB{LrV}wt=r#J_TSK>jy*YwC0=CaiInzL}o}tg;p4JGX_%UYQDJwFGf(XD7#dhF{i1=EAP@n(H^n&`Opn(~oSa`AF z=r%iX*Ha^_IVrPGY@jtRkE<4FB9&Hk2>DgNvu!8loNjNHks(J8SD5CF{DmC9Xy-L$ zTD(glr}iFy>e<-jIOd!|_jtq_kWl1%-GR3{B~ngoAFkJHicDWqk+CP3s{lEaOm2`L zM;M8CcnHjC;-d#KlBKJen*xPE`qQ>a(s@(Ymu8p5#fB7c?`%{;bVlD>?b7)5QR4W3 zap)l#GC)6daR8AyxU3aQ+?`Qa2W-~m=jL1J_Vi%Fl{?S5>GkH&9UxhGO^Ak^5S3(8 zX@0T<3Jt;+f_rq%p3mY%bmF&$lF3nKY--+*Az<_{(QMkjY1up)kg1Ko41#gpY&EIv zL>&B83k=z51KCOI>aP;mR{7k1BuS&voXm+Kv!EegWBwi<^AoZIgP1uXns1R9nocaL z1fXz|HCt|fLCb*4m5 z>6fjOZCbRug2EWs&q>%f1qpnV1Sius_|u=>9r=?!)vp0|zG_1uU9EN*uVKSXj08U! ztt@uRBaKh=0w*2_&%SY*m#Z>vSZaK_w??s|*04@4dePkL2^l|`_V>0*A`(C*A%XpT zPKxqUkl(MI%oOj}1N3U;HeX28e6YJ>5f>b@sV;~pvrHvJ7+k;1l3#X4E(s70o8UD1 zA=|1IvuK>j&H?+{$=o-GJqc61OZ;@T4=u&i&PGy-P%PBT@L6f}O@%V=HG)z$r%`r? zOVoK6Zx_fTxq_hm#tANxzHq2l_fFKjS+0I931?uw)W~88`QS-S<7CKjxMOUxR~Yh zUjLO6@M$C{owbmS=6Q3u_OFpSW-a-BC1zsJq#OfKnb9Bu^vjnU2}1ox+ZB}l{O23) z@echzWm{3zYLYz%W!f;xqfRY}YUU?luTtr$tP3dY&n!@zo_D6>8*}g+IIJ+y=uIk> zn4BMaYf}jOrdZDQ4E{ESgZ~%?*W~y3np{LaybcM#ScxJts^dbkI4Ikizm^Vw5{`*n z=IohmGD{|z%kPlk*V30xT{G;w*%B)z)3RNzo;>Hd;ZN{3(!0H;>^MkoJNF3(CyurR zJ2{R_YlHz`#y^){zaLne6Bw4tKz1EcR;avld3H`*TQd~zem=3`?8>z(rQNS`B#&oN zsrTv*ev7Z$o#b(T6*LJw+Wdh;6UF)9yZJY3-R4f2K8&o`lDP%Od!Dc-FYvwtTCnHY zRy%Xa)TRW#jt1%1sEM*^Un~&j^{e-Lk3_@O?Avr1TP9T8gsny>cFY&JP7rzteLh^a=PfLDz)but~m;+EVQq1tLd!;6o5@b1J7Fp?;*b^U1@ zzx|HS8Y3-P+@tnHv_Zbpa;14D>Wr70z=~v zJI+XDWqZSTR4Gl`s?SwS_u#_y$BBYx!?3BZrnN;07(h7i=C`7R z{=TINMId}6I zb-QQbN)h;wZNuy&{GhN9M81yPRDZ-5_39&CnPx*D#ww;q^$I*O)c0KHw$4azU_XTU zGFUCq^fNT7x&D+BKeJY74-kNkvK&3}oRtPkWctlk2>lqRub~9De36E~yrL5nTTM*Pn8i+h;GC%dq` zk8nq&*~3`q%)#L)&-6`d$zCJO88;rAEnCJf^pA?=0eupdFY6}-%tHs4qO33h8MBG( zy1Y~MHBxBlmju9GWjXE(*`oAp8gu%$jj=iV*LoIbn5e-Grx*9euh7r$-R1QKEc8ue zG}0lB|H-UoefuAnRnn?Inbqgw*Nfr?QtaMq$$6V$-3p1arf0v+-|Tgjo!kiqnPF%* z`ua`25X;vLpENPw06eM}Wp0}-^rpj~vD<6Yx=75SSvflDgU|bGyULpteu1d7jq?|A zZFO@RReMvNT?E`^_Wd_bO@A)99+d>o%KF{h?-?&c)kaCzd)0o9D@u#Wqs!9nC>riu z{O?nzi&^Lq)Qmp+>(b3~oBN-22nb*`emoRm&t*3O#-qpfRNu}&hqhr|Lgn8lvIAyP z*@u^BKKl>ld+9quH_3&SUJhIEUYO?Bo+YjT!L8|7EmhS&VOGZl)T55_IfZfgf>s)a z6*axBZOnC{;Ci52p%+i@e}^z7a&a$RT-T2NCt*4_1s_UdlPW*NZ>!kU8h9qpK0)}b zTVDHQ%-gw2h?xU+l5U`JqWppsZ%B?69%u`AJQPo}f* zsDSZI-|Mnt>zL&f)n3q^{rCK+(wki;TA zrFAyFxLNMNFG%!N^P4w^?DPG1fRjS&MA2OcCSIWR()8lj9vtNjNQuX{O3w{VUQg~s z(^LzflG39Zi{1IZ9P~Y9#b93-{*dEuZ?||rZ~dWbV&i{@8{Ju3PI9u#Fks@Cd=W)x zLDK@s*xQtIG>(T|VxE7u9E!%+Gar^&nOe1-O3a@kb8OD{StRLASV3gIcA;KRAD3Wk zwKoiL3VpAU6JRlG)6@d~z}C~14QvF%YvOjsR<)7p*F&pX!4_?T{q$)vazX;QTsmW8 z)4ri*pJc8Its(VB(0<|t2Lt|Z(BVpS-Cwq+_)g{vy=tSkS|Wps9)R2XwbMsgrS6o@?5Eov2g%ufkWCI z8cI015#*guCL{iqXKT6P3MWNGlUO9rC-z5ZbQx?NN-A`H(Db}59?BnfN^({DI=W+e z;&QWmDa=)Q2j<(~d5lznn7^c<30Pkzf>vThjk@d!1^M{+Y;JE~i%vGBES^=oz~lo} zmiet$#6s4eC`Q*aei=#rnf`0PrT-?PyYG+d-aZx7mVD&@SCl;J|1oLF`t_`Z{*M2W z;R*CWDc!#Rvr!{d?sruBPwm}rSTYY}3x?KJOSOf4{9`bHaDF@-O-f~~%-i+T)__TN zso1;m7SA|HcaVbvfJ~T+;t_3Xzkbw@?9JmLrTBy|B7$-TV+cK7xToQ#cgQ3D?P!K~ z2DWAhWPeThj7KSoRzqT(%LI&Q(>J!c2q$XmVrRG#F2tlk4d=F4J19Nq$>D7z$$h*n zK|$!wJf=k4-W6k!6}#@yvN^)-7_mKbwdj$b9R=QoS+UN^jm+I3y#gEes~g({x_^Px z=4Dkh1MUGo{zBl89dJEB9Vld2zhi20i^{WPb^Uca4j>bRk1cSfuE*!mNvsIqBQO<5=NPrG z@)4UZ;C=6Mt>=9HYWvmfmSg3ps)yhH5W~SsJ4f8)d+LC87DmH64`B2D!orN`+ezaZ zSN_YA2|4w})(kpQ`C#L9OI(?n%Q43o?FVb2Fe|UuMl3RG3jye+!9hlfxzL&|P(#&) zd`tzL_|d=!5WtFGqB`Tu018*Q=)@v2TUx!i?+GBpOK49N+96#JJJx6(c8nQ(P?s;d z(L=(_#JXH_&m?#OS^ua`-OQZ3NAf_E*(JZSb@M&w7cT(fsbNkd0-}qg2`6pB(1uk> zNio-7Aelb_%a9G4aPaP>f2cT+Z&>*0ZYw%T@XG8VVE&GPtCH#S+3C*k;OkDl3QrumlVl1Cs3W!BxW?ro8REZ=zLvUmR>^F!Mz7 z!)U#1K0ZD|VyrT>09!tl#>z|PW<5CsLgEEl6W-k#ApT&;em{yDM=&i|Y4@VazrYoQ zI8{}~&@FRZWziNvQz|49OF_tyU4 z>dd-~r~9Og9k{1-&@%l=-kqc(ZSP_7nPruf){~4cMK{d#Ckm9o!VW=e^)s97sB1^? z99PSixE_wXZhE6F?@tIkDhmRbn|gBr9BR>eKh`aY{@_iWT}O>%sC317SQ;Cvd6rRh z3}y;%61V6!Xj!<1MKMM{WS^}5L7U2NbNLMiJoBhrLpsku!UY4p$f(oE%NyWOmj^29 zdOZcwqt2VzIL|%GKCJMSt;xF~VVJEYB3l2bTJpRME<({)MU@A0yxzM?ChCsJ3H(qY zke*&yg9JSY&G21Bmt_X|oG)cV zsS;%o=1#rHqiQalX+n`&mk_F3A==3wgYmd*^6Pj;twn+cjf`p>{5Bf@4e9KTEV`#1 zGg60!9Enq38^g_KV>}7NNMlbY59G1mtjQ^xuoX-et2&ZN;m_8_tco)#7u1L6i!I)f z-w%w-7qiGU$wX@Ti{Anzm`cZ>d@e4SW5+C?yxEkFqv&ob_mKmD znD^}vMY_zjkpS`rLh|(wiuEhbNga6S@sVIQkUg5W{5Etr@#o~`(t%6_GOj5)OK!^S zNs(LT?~)8UL*bAN>ChB4ZR1u)s%gL?Vic4}DGdQRE6Q5<&yXB-s{I!V4{tj0aoeLu z^@A&&o61-b)LI+j?>1it^$A@LLWpI3++T1XWBqS#cQWICr#WV&k_CcC;ooWaO&0y<9HW>eeU6HM= zHvska_cU3;;!j@e&batY2v1KHmlxIOiy`@=1kYvYiXrm?eaf}a6>n2@w+Yt=ZOVXZ z&uI6&jxcfel01El1xk6Ue^z-iC71VG86{}H$1tUj4l2H)6v;bOEC^4E>x%&8e&1`i zX!Aj-UnR63vUih6p7o-JVRoa`o}Dgx@-^`l4NbXsRUFvrrSs!Q0r4DENg{=io8F6c zaK9+0d>HX#^14xc!EG-Hz;0uM4JfgW2 z=cR#)=D0fSJs=hz%BwKQrknBGvW?2vXupIyub$B^vckQA)v2y`EzpDu4y(DnMv&;1 z_{~V=J$Lh(aacA?aqj&{Rq*$K_aFAZ=+JqQ2bo4o>X*9jZUInUBLz=(#!PtyD2ZGHGV;c7ISVdn=*b|bl^-&? zY#pJY%e$=D@mx5USo}ReP!bvVnzjt9zEog_J}7^-1omYJ+1-){796VT6V$mg&-GG#8}68LHzy&@8ajI3mLmF#ud%wVeqZD* zJ=awZDo<;DpA*h!s@8wz%=B6M?FA(~1?$!C7{fGib2S`=xV3FJ{ON`bK1ZU&x%Uo; zL^}GY1(>QP&d8eYl71i>iuf?%%$1QWF`G_rYHPo9C0(spwtNS4Hd=5}wSZPcqEf>n zPK|~?exVr`|K^(eRb*b4<7L~aTpdj7+$4j19}g^7QbE5D8`EC^8=>9}ytv=J8(gf- z6z5jJzdBAaYia&DH&lVvZuPw0G6IJSo?r5#K3lf41Lg2O%wakKdJCbSBt8pB|n2O&*l%w zs>jDPYuV!!vz!LvkP7(T+&&dUvh79Zm?wN%C?(|uy`Imv zvhjahYQZuB;}3L)*W8=E*f0=x8-bj9jsX}(0N4Co)wVjmgiy=Mpqyl~f9mikprfGh zO@=a~=dOK@cpu!hIp(~|x5V<*eQKB}kYN7QwVljkSDe>?+?fbo{}*iZENSa>S6){W zVgME{1Y!YLGlQwDPF`yg#v$ck2n0E0IkpQ>iqeG)o~_d#r^MI`>fz&%50*ev!#NIxCrBJssNkze^rc zHe~IE;Zf&9LVw4AVZaJ8)eip)fPdSLapx-5#x|NhwY z_m%$NyO(}HzTA7B@AESD@h?6+obV2y3S?5|X4bs^UaqV6J?4Ax7gH1>1`m~yXv@kw z_Srtoh})`)Vhy2LzS@1KK_TF#UBqee10rV?AU5*#SgeIrr)@G8hL%0bX#}-oz~D0!ea8l}!mrbA>6vQW6mzym>(KRKMCM&*>FTKz#XhXq^6qhP*GKtPyfkoL1CJg8C*($i?qcEu-4p*0*1zKq+2Y zTnZHT0>PmLid&&j+_g9qC%9{Y;#P{4;_eO!5~R2W3GNO-PuAY6Yw!Pi-Xr6TaX!v3 zNuJF4Ou4S#J+IHS#^%fs-VD`(kCPgLk16KS(dJM))3oO=W4XuVH^PppEFAa_YnItI z1I!ARA<@Qw(f~~s{iB-07Pshg=@<>Q zKwNfJ37UJ0#%y7ln+T0y!18ULYskm~@TXY`T^};WOONA$; zuz<2@o)~dLoio$z9n6ro!(AN-`iqk>zk5hi5+JR;UD$vpR=@63Q_d8a?GF##Dtlj7 zi_m2Y*w9tjc?2!iEYLa_U5J{JK7=eQGHPA<(7@S=#W?=mDW?~cHMw@{ByV`i^L%GY zL_S>zhW>nQG2EOrnV7-+1)~|tvHX^y8zZ%1?fQ4LY((zv_b8e~b?$YCjujjf^39R) zHmC(je;W^&XHlc~M;VR>o7<+j(#A9S-b7TZmo6;*SO!$h#TtSjv9vZ$O;uXcJTK8T zZJE|9iKFYSh(_cr3|cc@zO-znTJ}X%QKSxcnc>i!ybdQx?yZj2wVGG!A5ldjS(UYz z%SXznCvtnLoBNM-b242s+Xf4`6vFab zS*b&-o3ouuO-LL9 zAD}YQ@f6jjY+FdKo5EH7kj8J#wwyefUCd05EvpE^QBPf^^A6XSSMBTTRg2EmGZp6D zIQJ3@=<(N+3uX>Zr&8|(T`cmQh6X9`Y=;&^S_Rk}qns!r6x@$%^cdsp=7#R0{CYca zbIbvZVvy20hcm76L~#8&52Foj=ott)dhh;vjNkm_oNi{9pTg1814KU8JJ4>M*_O}% zv^q$8E7qan{(*f%B>om~Mm$>h7=mnTMwVxqwLdf`-Sd-|!qSFks z57CQ|kw<|0Fv)M<)}l;P^Nre@45yTDz1Y;EO8-pn2NvE!t6#cs(#GrNSef>*{kYKiqbYuF09%Grx0r zwt!ko!RQXwwJrVJhgUn<%v6fUI6{S+xhhqV(L=d8_uLP4;A4XBR8~_17d>}iWJ4B( zl^ANRb7SK-wKK=@yygZ`W@zU~S%|F=G_oS9=Dh$zHCK7Wmb-@A(<#(Oo4}bB2eE(} z29K=2=VC)f(U$S)8L27HoTHdm<7+T8mwyeV)wza1eI$xpuC2hBSa4d65&jW}(uR2o z@!tANv!x_CxO&Cfs`_Adx)kYeMUQ&_3^mY+{fMovp*tXQ2OLf>=#xTW(C#9f!yOoG zXuDpX)9lGn6pj=`k}MWKIz77CKyQy-b#*p6DyH;VTPUQw# z)q|{tz96uKn#Nc{oaHhL&ayI6i6DO1*`0?fL3WFu9!l zZR(6(k$`b5!~8Q|cP9~}T5ye{8R4iyIhdN~u6mcs_9(0lPGT=9uEu}^);SRii5b2| zm%_*K`KZzDV5_cGZ^SWOkHjGI;*iD6)XrU+|IH$m@IZCb0|j+2bk5nH+@|C#hi_kX7qUE#urKQBC?zDqE48`#a-P;RS~=BNd~)B# zUJ;v%URdzzBB%Leb=X$cNS;vzxEaM`Zz~c|oj5^ebt0lZ+*}b97y9yDk`)7MS%oZm z0gjur)b!f6cTUHNKZk~vA-nXa#i@Myb>p1;DH7eJTU}eoojyjOBq;}w!Pbc_lPbVv z#!ztOpm7yDOaa%C#2@ckU#UpuZ!+Rea_=O&{s3D_DOj?pX7^@l9 z^+RE@MT0DvCL6(lEp(D#I{MIGt!+<^S6RNCEa@^D&wg@5^Jcnb*6m0|`()cX@*bOf zRFoUXc5V{MpBwV;{H-kz_leK)Lcj71>C@E8FXMJ=-7uQ#-*=I1elSP>5r=aG4p-+Q z{YKziz4vU@VDso#A0EkYsL@vvqORIrk5YEOqGN$;9EQ>-pH#)-CkH`~4}^U&mX))V zBI)siBBRT*TI6~sq*-6cONwxxU1Z~|KpuHm2k-rn^N@X>a7i10Yq?Rmf!FS*hyX4g zB%%cAc`h#&W@uH^R-5!1=yi?lriXItHBldw(_oN(&cxFy0cVTc!L_BxR+UiLaMaS0 z*c({fgke>_?w-NYLehqpr=B2p>D$SvZ>T3{6CKI8q&WmSomP%L2<{4>!uPKink z2lG45&iPYwkz(sR99^c*`kI-)e!j}K#?QB;3uOO$zu-EqkbBTTlAPXk{?l~d>mENQ zrA^;U{*eYS|End@+0*($Z;a5zKdT)`D65~fOoK?-QWjkOD`m@h{4iD4FOQgO;!21| zW2tl)pD(=qLoq}rXa3>)fV6H_OgmCM;F!Y!eD_ZhX=Q=#*_yblyKh#e$l!+n zF$cRi6^prVj+d>7Qc4L0zI!{dJ9JdgTdXGC`UEVaaP*)!B8M3;I0ny`*YBhNrRJvR zZZGQPmi_jIjm=|f^D_C<&=}}v&C)VlF%ndeKOUZRLgEi=p>HxyrjB>XUc{U&Yw)Z5 zu2za?zDpZ@Y;JY#jwc=?u~ePZNQCHj8Wb#ZpHSsXSbuz z%Mgm~!ftJ^$i3gh?3$D4RLCT*-$QbeofM%p6DedxH zV2VC=n;g?~CPMIFyA)>-m8IGFH8UH<9Arp0is>*ljUV7dYby}M?s&*^Rqu;^SzigB zm^vX!pa7ubrFP%M=Z0aUml_}Ma%fiBCnLu0mn#}~~uHl4N-z5IJ^Tz)O;P4`BDt+>X4vAsT= z-81V+wZ2^n)g~;lgXlK^Zk%8e#81t`$gv8wO!-~r{TUv`Buvs1j4@G3hK$br+6MK? zq6mFKI~@|7mTvtE>mo9S0{pd~6L;b=B*QzT_3GJ1p<-b{+_P9qiuc{)WoA&Jr$|TM zXpNNaJV0kIbU?2~!U|Uyw0Ij_IUwhA3H6aDelHoG_EHeG81BU&@)d%sOIKzL> z>m6db=XZR zDi+Ud2WBcg7`f!oGST)}c$*2Qe^HXu^luf-C+K2ZURQF`3WWIIY`5{Wzm7k6=-#)q zo(}q^x6GCUFxyswisqVq(MVaNQlZ52%E>N9b^uo-Y+5ICD(gH*@I@U#y_tBNIcgDB zKXB#5XmmakTxG!tdzjHAh)tQ0dBz0s6rK!nBS+)RPiPX#smiv{vB6?mfYI8?AzODS z=Dn(&zo-FvPMVjmRV^CH*&T@vrx(=|9v@j=sSDs7{VN;m^>dJylf#h*F&(ul#t^3A*8%*?u<{diJ-Bz1xi3K+ zJJRu*?}*PHXn(@gC=#mAgyqCml?&z(C$2aZwC-sE3v#R|gMB;t$ zK5XTVG(TM~0#>ob@}9fRm>VOe`Hd69s`j^{du|jK#$GIYMd_Uj(G%JbzmHGov>R$t zAGsDGtxe+VTNbDf$Dt#n~;FyyK>U-kqlFRzBpjk;n;MKaP+Yxv^U-PSURH6iRU19XK^Tk-5+ z`SD1$6P(f1ba$wCi$?bw)mF;8r%K}X*Kbz7t4+rrbaq;FF(lSUL^c#;qqVsJMad4Z zg8IDs)l>&KF+=Pr)Dc3VG~JKX*JRJ(CiGV-mYFyiA{DDmL-IbiLCaLZ0xIf$>>}x3 zcw<`X-L}6tJls5=of+RpNVm{I${@y-;*IIpt=(^W(UWFX)0HWF?F%-U7uy=9d@Sl& z{M$T8`=Kebo%USN(f2?Gwa+?45E#o%*PW~mCmq~5OJfrkH|T9Xs?GlHot&dfWKNQ56dYQGho?s>H^{gL+wcIZW^=5<1qUbDOM zasyD29Z-{QuhblW1|T7!)5;WZ0mt3Lt4W@EsC+Oy0l?oUW$x}sct=OED{R%EaTQjW zNv`3mTK%JroyJW4-)aw?Twjep7~r-&yjdUvlF-T|aC-}>+dO8pM!tFxsx; z;Wf{#*uifW?>_$zxQcaslQ-Ti|CL^&)aF6=2K7T?(eooZt7G%RtZ0VrzXOyA&iEYmG zSPU|kw#NVYv^=jb1!Xj!c}+v5p99Xr*krB!TFV~v4Lr@oV`Lt}D5rN6v+f_cmaqdh zg~S%y64&NC`!MdCkNr9~TctIN1itSFaoPf6o0HC~;#(UvhY9~c`%>*AUc9w96!+A= zIWEPbK8*?wVV~r^e*Lf+vW~+`oSNJLfM>OQWB`eVOFi%Z(U4{1b_>Yk<%BU@K5@_k zpZbR-T$C$cM)VTctgW~$<^OS2rPlWjb3*Z`AN;&q!l7S)J`~g%A1~cV|9LRyBpgbi zZ!mD2VNw-45f(c;`zN!~?6&_RYr^#sB>owg1o1ZE{~uejS`NgoXr>3)fNscnh-pSr zZiIF^`NHkPKfh&s!b_yK4m(2@QSxD8i;e0lpy;_L=87@0~2!V;l89R-1=C|HC%jo?Bo^AgviSFP*zBKvB z@+jBW{GFK(e%q$4qB=&Lzg$09x~^1Sy8YpbXlchYya2TqA8Y(%kl$2A{&so{~z2>!S{fSQi^n7X|;(W(_FwNT=lUMGEfNEo?&qDk+&9$5O)>DzovZFsRMvJ668;%Q`7`JH@(V8QeU+2c z2?Q?D`W4hd?uk|JU_o{Sk?n#J>?srJJJG-nu_y#aAgH&MVjD|(Dx9R^u z9m2!Ue;_6;_Nsh~LL+gV-sA)<@9FFx=XE&W+n##)wI;|bDdL(Bhp zY$>k~aiR4Ad5=9uE*vobUlImCn?G;p=_&%by_8*=8}|M&isB8X&P44BT)?<$YeN=6+gdoDcs?YhehndhQ)O z|L13}ll>U`C+SS;|FN|#?v5coq}+$!5)9`oTU%(;ALFy6wdPDpZ2N*93gy_K4l%{N za&Ss$>l+|Mb4ZN0x`{+BOgK>!o1mbiYF@RbGH3}707aO!)&}XCbgVIR;EO&0rj@C~ zf4iZUP?LbSS%q8sQ!FDkx32Cv4X)*mm#c%1q2=2m$*E4I4+C>Ih4C*v-^(xpH9<`_ zel((Fu$Lr!9P~kT6Bq^o@f-(3h)YQShc{B*@A@z8q`!`}v`EE@6cArK`MY-(k#~pl z@o-t8D;FIFiG<{$2SYY)PfL?LsReMn75P>rg~gI|qTdH@yh}8^YNYQ#>{5^>tEDZ! zmK}jeR&|XBe!h0R1t`x@t`4?6Q_^c_45#*6_I>CPV}#@BfkcF}H&+XeZ|*kq)Ky~k zNFM~QNR22arp3V_@d<)J)HsL=N@7|&F!!Q11z^Zip2>T93HQod8#1Mm)w~&okXZDP zSrv?5i0wgt=2vHM;wyX$3M-1G9iWQkUg-h0CZwDVG1*}r7*#sj+0LXAiZ$M9+TgLB`da4zM_m&c_fx2pYnA`Q0-$0*IgIt;#Y5N7-8F3P2)5C1 z#*z7c8*=EY26)u1-c-}S=H&Q_B*e5p2mYGoM0wF-u+j8ulv|3P+h+P8KYLLzR~Si) zD??>b;A^nl6635HJR?j=JqHP6ghst!!9&a?( zT~g>BM*jdts0ieqTusn%OZ1yz@%s8No`i&K39pPq!}2l^B~e#&^vCSfUE|+}H}+57 zO0Q88WO{h>$9=3DGl_j=v&l=OEI1Mbzc31a#cK0xC;LjBA-Elf**G0hYF2#Jj3M7RAkf5EJtYAFtKFknN(pHZ)Y7P|>~2#c3L4zAX8mC&V` zC!*NS>+}blRhN`+0wO(koK)}lH&Yr`z_N?i%y-^5Oi;h7=(uLxe477qjgD@}hOVk# zJ=%st!`7n}H|u!uqs>qS9><-sF;2&T%vv@=az{eO|If5@M z-|pEip77{*3)avraWY(2dX^Ya(){dvDB3QX0%8?gWigTAGl}8`_IMCA71>D&*>6QT zGy5Or&5v9CgFhV?_kXahtnTZ2pNW>V)&|zH;@(7g;Zo6-3$H*3Xk7+T&<^=qL`?ZvMBh6E2sf5%Frd=Ww zA1sci)ayJ2o0@JVSv4`@8=J#>cVjYRmCRT0g^i~cW=~2iuU~%*_Pl#;!O{P^xq|fg zbk4itYljhM5gsd%spnm{z%N%@9{dsLbQ)tr?$D zlQgu=qg^8ll5dkGd&5 zF1`$sHxdhSj2P1#TV)9=Vt@I}4^_9!XECNyrCE-Ha}96Ei%Nu98=Q|QV_jG^j+PSS$UApLoVUVIEMNl9Q$&W{8GG>$Z3>>A`o)3qk37VNPj9q=fp|*!gFNCys3<_#aE0%PSy2~+_6>%!?(xXaG#js_sT6@aNF zq@{3u?dLkC5bti*r&irXJ66}Z!!5{NjYdZ$l0>>XS%K(;8h|e@=tY_ulEc4UE3@oL z>UDciWxse|JLf+-@pknPF#!@rMxo-YAKF_ji$V~ISgSBxR(-lq`fA6|6epUfVxySP z+^Ma^skr75@7}$10y;@<8L8z7^7I#*_a;x&DOM?tfLqwQK>`BXT)|2{BE8mCC;b?TlO$TFFpB!QkhQIp$qK>RR-9gDu(^9Py zb?w7-@yq6goE8P!IC4Mop@dR=3)*pPEWhU=c;9y^iPl?AOliz_r4FOxp8AeX`9VN; zYPi9t&VHu!qer6NKg3e8(XFgOORJ)sd7iI$ETD?hT;zqx=+BltqGBjDSqyy+*wxz()1@~3;T z`DIqMKJ&sQCCCZg#lSoGmyCtMan-#Fv-juc=6{L1DE9KC;1)mw2fYY{Zi>*tIfa}6G}FI|n=_`)z!L}G0YVYwPrL9$v2k|r=`gMOAy zQ%Z2KAsei)7v%LHkpcAI}O&^O6@lp^EugYq?YP%I~h%e!NjlpWyz9)tL3v6S~gBLli#{wAHOS038 zv<8FZ?{qE&VmHmyem}KMlN=#><@8c~=(73(>ww^f+e8j`nLaG#XmP|c`qe5idDC8z zefAJD?FycL#|iGCmuN=3X~x{i>_;)-3=|UNeJ%aCO3ya((qc1_hDd9StAtN$d!R)> zzD?Z}ZWm|KkT}KsQnDKrgON;R$6A>3R7JIo-EoJx;E*tBA9$zvbF9Y9_%*!{2XE7$ z2bDh&;P9}L=1pLi-EgKALc_=8PguOZVYteQAY$o2sit;v!NzKiR+ijd?L` zrEqfYfvkp63D&@jS``ZS@N*#O5PWebIIE@(`jx&SMv(OqL0It0__vmMzWB?hdmz#* zVpMBhrNqry80atK;qmlH#Z+HWKXrRiy<_{vB5Et*i}2CWY+s~~c=AuFzjcwNJ zSqFV&*ruYf@sOeR#_5FG8M2MgKJY%+46E<29HKov)aa~2o5hD)hz$a|betKH% ze`Axfzr_+Zd=%e*!iI>vk9$mo6W7W#t}mj@5^4jcq1eFEbYK&!K=Y6PcCOnv zrQW?(SI0|A+kf-!dD;i?oR)Xt&_NQt!?6*jQIzGy;!}f`O3^^k&=+UmJ9|m`BxE{R zp1e}|_&u6VT;*$MwgTN-_sS}$mahLtr1vvc0z(025kYg z_yDkz7Wiv-#6KlEW+=6)eo%%c(uX$5o~9K1GS(BxhAhHVpQ4q&R%lXvu&cnOd~7P6 zBq3YcW57AH+z5Y*eaLt@{$4R#1jW*x%fPk_s**+B3AUuawQgn&2#_8L$s@1Tn*|b<`g7W!OmpNqcDq}S zPBa~@MwwogG*^OMR#7HU2(!p8oSc=V`L`dh>L`fvfIv5~By{k6RVrikxJh+tG@G(% zKNpXHoBvem=0&x05bMnvsMol{`BaCg-=-Lt(|SXlu=A90c`lOMLIBq4x0Ujey{qzP zQ~I)9@u2|fqR?L0oq`@y*5})ADTX2o9X0W&e3l+xBt&Lrd^=?f=$tU~Wb5mkU)AdH zTIb{B6(y`uws=5oUfV0a8M27o>Wy-6`aaYYgV?2e{19g|^OZwY3Uy2<%C9`e$f;S= zJ0|HH^?MV-JZ%JQPozGr;7ktfo;1=8{+F@+Ju$8rEFil|!ipQB`Lba$!F$`qSD4{h zR7v_7Q3ctLfoOiml~&ct9=7*=iS{Mtrf~SEHNqS(%@ztb`jm_`awlFxJ4yb!n>(H{ zL1*rI+3!c=2{utnkPMGn+7?`wX}0y7!l+#pak)x3=%c59R<6d(g~rjbnFg4fgWKIg zcmR<}2DX964Hs+$_JxQaAJ1xjn#rvYjI`z+-d|KD$DT!1T0dmkf4D54{8Y*ExKHeh z+d_7%v?KHSi-+%L?X$45(ysmsxrXCyh*UZtCCg@ERnV91TqtDl^vyG{U)(wqQ~B=5 zA`mS!H(yv}{obAL0@F*Q|wze1ZzEQ@-q>6Dupz;~K-yVl2 z=<;U|MZgA7$5}m3{OwvtOhJC}gn0CZ&T7Gwi}5nZ=+?hhm|=W*8x3;aHUcSl7_mD; zEnLCkc}vjZm(+89o9uX`&mEl6>T_v8)iNX2Qzh+hRi4oiJ$Zr)@jxagm{j$3t3>A3 zQZmq~7zdV>#=Gh4jTm~(dd){&2niFH{wqN1i!bUDhxfdugV|M==bb=7<|5;j`=hiK z>i+pb#@pRppM+6SD~8Nd&czqlty#51*FON%BwS(byC#UYf(Lk;j!Dr3@V>ZN@VUl8 zj}9PmZm^{%?!?DIr)D?scQ9_au|9D-qT71d)G=`L(#rWlc^MgLU*oQ(7CW`j*;nI^ zaGCs8^ISSaN5*CsA0Ef~p=JsRh?2H1A&sTJ3hsAI^;8&`h`$eZ? z#*v9?L93|^h!el_S9{^E<^)x|xwots(9&1;xgQj(G{OR5gtm*P#0Gn+M-gL>YaomT zTDJ0?yC!a(QY||I5hp|5EnnMU(vvJ+tcA2Pd_h4l2r#g*&QLeYr-J1<<~sa>R+xnv2ujlc$+uv;G+^`|5Q%=LPD? znoC%p{1cq@q{(`Ws6GT3MLcX36eX&E@AyVHg6qk#PwuE3e}j9U$X8Nz!ZZv1Z1U0F zHZ4wLacV(4n4&z5Xkm1Zh9&jEb@S7)HNH$;8t4ULRBE!uBk0xPfmip7LFlEtMtq$w zTTu)DrJvoQ?))!mJ`Bw-ngkmiB>;;G`$_xks9HI2dd|#DCI4_>&h~!g1^#fbtK071$qZp>?_{^>FUiRMoU+M(1D@;<|%Nj%(&n#&H0DNxdV)x(k>V|acji9 zhSkHCwJk$y1-up9eVcwlvE%DLTux%|ky%^C0ToW@tVOeK)Fl3LRBy_-CkUJ$Xo)(^ z-Df!uKXgWnG0q|tZ*FWZ_cj{`E88`xSx0nTE0q)5dy;)S<2Z~Jm)$n$a{ebh*_^vU zOBO%c;ei@;OLx|`6v@4L5y%gw>b{jS|by!RnYGI}C`Wy^ft7m0KoK*gBTEbaZ=Va2aGm`x! zafcWZZNFmV%6-G~zKB`F-z-5EKcDUG^IQ?{n%D<`h{OvOpq?it zE*Kv7U9TPk4M7iYzk7=tw3T_FbiogKgZDps6PM?FQ%r^fvln0JIoUa`)r=@R1NE!iyj@8p9=YZ>7rima?0JC0{_dQ z0diONy-9$0x_=e=L57C?Y(|;&Wj!$9eoizZ2qe zglJgU;%I4-3L*6Z=XIU9mSjdpTQZlSXimt(Pe8Q%4?i$W^!+zVC$815TBEPV6z{sn zDIv|SW1dBD=crVl$qnK$p$Fpximn?7zgeQlV4t_Qkhb})xt4lb`|Fs{y1DiHUF${D z90pk6{E4TqpJb1r)Ld8UN*(z>e1zM)^T`lmBj-miws@O)-sVbxS#^&@c+Y5gdVriF z92?&YFVVi;H(@Xw*(+!L-y;oWZ$(t0ig&>t<@~7UH1>+mIEciS?C!1HzXB~H3amD;d_S-6VN5X4>HZ{V|XQgib`nev5w#cmEf`t z#jQF;TS!~I|M8osPtrwAwgD~fYQ`seLL^gI^1?V`Ew`x{QmKC^MM|2L(4Eyfnl5Qc zIIF%7AM4r1To&Z#|Baa^hv{;*d14PaI5GW({-a+$vJ(ZN0xT#wa}-#FQTczq8A#Fgs=q~o8vMQ4?d ztPP4qQ&Fo(nfEmrG%QWX7nj6ubLYv`qxtda(!v^D^5Y}%RKC!W9GKW+ie0rglFP@k*N+FqiKNntBXm4re#Y;#|AsTjkcTQG@(W@aKo&?2gc=2X`yBA~Uv<)rVq&pz zEG!k{+cOXF7E64(YD44Avda~htrFwq@wwKG>iEVtakU>Tx^L#6p7CMm5@d3`x(Wab z?jC`^mQuXoF@5ThZe7Oyy_6%SR#A8Z0cd=ONU!bEK0js5Zoy2Y0TM<{oL!IhRjd_I zOIom5&Qlg+@7ORv)(dvp>|ThRDgJcWWqO`czD9)ML7rhPR2}nc7MvzFJrFBQth$O( zTD(|oMmk`65WHHDD-cF0STR0EgIrZuu>plAZrh;zVKhQ$u3Tnn=A<$Nj&A0m-syZQ zc8vZJ4-Mr;n|HjS=OOip8{f)+ncWF1WNi;F?v5QWZA5Xz6BS-F%qwyJz#qcIj*|{+ z&3*6hu5T$}fX=Pgj{$-drR2Tg1q=N~FF8vWBZ#@;4Eur<&`%!Oz5J_d+$njK&E_3k z8kqsLEEivp{cfDLEsUlkUYm28o(7Y2pE%#hB8Ld7sDIc(g<-!jH0Y8|OgnD3m{;bX zkPbs&+eXtiXO7};7{8ne64E6fTBh&WPdf;XUo09n1mAvw4tI_%5|BNfXM?p<)cya< zObD{0pZ6JVbRO?t*h2k5TJ+7^H;U-vNmumbtYg=-ObQN z&1uhE5G=V}a$NP;YMrdQQCcXqM-95HY6uK44=g5fRZa-cErijZ9)HBh!yxH|tvWU( zy7tv|jZG7c?%pPlJcLkx18ZM}(Vn&u*(-H~lrmXapG;`Mxx>O@&Fw#;?g3igJ9YMN zpTN>mUMSU)-VNil!Y_RR*#{rUg&w<$ov<6o5Y)@RRW4{C$jZIa@rLOyQEj;A)`8k+ zICseEgDF*i^m#_wrfByO^d|^t@Y9mUbJycAg1X;`hj*%FV3?CeeDeACk|sWB(23(s z%Dj zIw3=dWw*dWjk}A$47sefORZ#4N4mpB{ao^J{a8m(Oh=lh9KvV-tT)dUdT ze9g=rkO)J@W+*jA7J(ww@>Q8D&iMQ8_DIpbAryk!SWeL2f} zY9V};&&bWraK8A_x3hWaWiE6WHO<}d*+eONG&&)Jj|a-zny4cFq>!7n(Ch^gR))Jw z$2RweJ=pUFy60+IqOM#F*jfn94*i&L<(}WI>Q^_lkIO2CTr}X;>a<=>dlMwY9I(;4B#-_)YeUx7EGq$iI)WXs_e+Q&@?3LRK@yGrg*Rkgbx zd95(2?<`HE65Z-ZZ|_eyB0;oYu-C*b#YJ~-@djqAg*oQYnxND&G;$BwPNvZoxjhZa z^xZT_-gJj^{L5?Y=bs+Sl@#>7yVf9GFsT|FcQ#jpAgt4h_idEvmzRI>I_uOqPN!-H zL!p+3`UCAHW6%E;EU><}MonM)2i9@!dmj_IvEF__@po;;Y2DZv;sR8JX%o--%j+Ix z^XhM$!nx0?;2(cGyq`}h_y3pHnBO6;Z*o>7jT`2fp-x|ecguI15vg$l7Dn$KZ0t7u z!IymDy;I5-N&w^Rst9m)^RpStEXeo;=gIiZMXBK<8`krRbId=UYrAi^*G+J;F`=9S zrBd|p+s=iz8xL(SC_cX$b7Jgy3o=u*jBbd&TcSR-UNJ#P-du(8@Y9}2_Vk`EM5WNC zJWqUO^|xM8!nsVpUE15pSFBDpMI)cSiM9VeUCyPlUqpDH5B z-j_1Q^+nYm*Lm;!v5NKR5eSZSEDaA#XxF`M&_yH1G+f?fx^zKKv?)!(oe7r*+iY>4 zH&o+AWkKy~WQf_RM(R`k3pbokQ8+FsGn<=Qht9G3T{T|LTgMrTD~~ukQ-=GOJ(JYpp1fT=Fs%>9E%6eH#=CtS9Pl%BLimC{!yq3N1N;^F}+2n zsenPnYb2iXM+hjZIy{5IZ624ya%mR@5`mXkWkeOr#B;q{Jl~qRxOktt<%SlxDsM!`n+2IwcBJn;I%xSzCsQBYH9hozy?dloaX68hW?yWfbh*lS*MU8a! zFKki09+1(Upt8U@A{39QkZp0QCA`Y3-eCE%Nl+LL5eS0d3^}C+*1?!)y~X@fnu(7r z&PMXM)_o7X02wrIwG7E|IP*`zdhTIqJii~OHz1ig17F+6+{On2>V`Z^UN@>dHVHTS z?fVY;z(@#e7&DzO%OIegQ&*UFn(X|IM({>{RmuMTLtdl#fplo=H_+a#EuuyQ2^>$M z3@+q0lf_=mrhVpD7k%11_5gBv&Ec7Tq#RDOIHTCpwKW@m#)9)uvvoZFB|rRE;+R|W zH$0^r-xKc0yUMY5fO&7LQlBMLnh$7)9`G#$rBdiz0pr&FGnWk$qEGE9)2%3NE)y)6z5 z81`oC| z&T3Q=b&{2HOMu@VKxz-Q*QBl3w5!D;7SKOH450D_@88f;L*eYWRbNVlg|kKuQs4 zFOm;lAAyAf-n}m4FfsGpC0?MLypJDtdF-Dfdd9CW;1p}S35nZWDpK>DbA9Hr_T2Y8 zN~4ye8N<>lyPGc8=QqW(dxjg!w(g+0GlAxx!mOXK&JNox4u>=4eYM|lDY`-!avccJ zFjSE1R~FM^zqWj#G`Qh5JCr`uapphl^IPZnzm(RWh13)Y)Qbu8ej5GyXOSYkOF}~$>KjHbDCTgPmSJXdGY6n|@MwPF3e`RS*+tOv=FBbhPPO8|82 zp*)C#)ryjuCCTR`R{Ky=veVOR+kHxb(ylY0Fi%V+u)?vlM}98!YGh=IdH3|piX;id#cK3# z5mUD%YxK_lv8iT?7YT_VMo#M8N2U$Vmtz1=Ku@!$FVgO*c9RjZLW7?D;;zx*;6A`WB;T6B3A|nfEAiZt*Yk4()hfxAl<~0GA=rzz)&tx zbHQMuwbm=0(}QhR?A1YR#5ungG7qqVN8L5z!~C5;^L012YVV=p2G@N%{i65G<1+Lf z<2`WMlftil=rCPh3ZGf^$$JJV)Av>p3}ZB**qPC@R*(XN#36bbyKW`v!jx@AO6R(i z%q;G63rFXmgOK&Y7;*AE95Y#C5Va!jkB=`1Rp&K)HTwtSP+F=Hd5V5)5!b8)c1a=ZsES|IakDCeg?~|id{v>Os&jw_bI-{|k(tL9xYj2!A zPt#K32nEsQwV~T+J(1KeABx4nX|4plN3yKQUO}(0#vTr685D$GVlOM@yqkFN)=r&Q zxxXQt5%(MG&G?n3MAedcFn^VIy^h+0Ci>Cqw2dFW;@Gp|Ug!HKUNA=~@PT;7yF&fv%DilG1 zYrTP0o7*1-_-B+4vV^MTFw%E@%JH;Ej@q0P@LVBlv2{q;8*{Ub7dL_L_I>%3YjD*f=08 zyHXs;OQzs%mGWn6)sJ(!r;K3zeTbyO2wvPjh3}-q;w{A0*y-Z59a>x_Y4<~Xzfo_c zcJg(?Ls?jqi@7DTtG`mD%u9Q+tJk0Y1hP+A{R7 z|2SH=AB?m?I;MguP9-RbXzGNPG~~2{mMBD%-%ktEV~b|1Bo+mQKI(yM>q0~tED7H= zZi{_XoXf?^BWm(5JAH+>u5qR&<{uTi{18s*JtDC_Q3}<28;uzlIQ)d2ZL6Tj=z6`R zwQ5zgwO*-J7eT}De@rCB?h(bA>@YaqQ0ND3x%+*EAwIh%KX%zrv!Pv3y|a=zdi(%R7~}j zUJ;!g2Ix-Kx{JJC|DeXzAIc|8I?AT|XP{b0$;h}o+`)C7?V|buCj`arQSKHH`CA|> z?qwyc+~T{HgSnZe3zE7+TR?KMnoe`tUH)6*KN$>fPT-I4&1jub6(QP&!-FAX?)w^U znc1B!)*X>W+2bi^OgLXC|7`Ob2oS6{VM0a?`O(&=8Oo!T+4L8&@G9CrB$qZS zirq#5&Jfp==KSBA?Sp6ZHkkYz3|sEzBKX4XDRFYZ)C7oQG>r?h7a$D|^M-R{>L24T zq=1cD_qX}AzulwOizh*rU~NVp-_WZ-=t1}+D%rr)BpO)TAL6qAfVqDeOUHtpfz?!u zM-tmZe~EX7B7gTIzd>j13dXu6h)YC7Y^f=>yqk*as>+@Ha$rG(h&IjCy#u5inf3V{wx@-Pg*V+&2)6(AH_pSa7 zXX<1J#cbh~Z^1~=Y=CVKYRX8%qU7#Ava;Phq{2K>ylLB}w6Fjp6hp-k^ac5dSQ2Dj zI(vaqekxtao(Zn4#HR=|G*yv%iHlVDynUZ9xnks%2uY|n*-uVpBfkT*&fW&BUs_b& zfgA}DRnv~GZY(w9YN?tXvHVdbCn(dC63JUz&v}+0jw+NgQ8On__aO=!f@D@@N0$8) zDl!L{q39LuLH*|MZQ(Oov271*Hn5QCEAJbsm$n(>##(+|0L zycy)T*g%%Ih|#OPS6TmbJ;D<@yb0ews$}YZ%7KwXAvj20bi*O)@8qUFb0>&<^gccP zKp^a&QGQ1`-+XJeLjrvDjVmf6+t)A}cJR~m@#hI?v0QK+b*?c|lPS)aj?Ppkl3hrxzZ+N)Md`;24%A;1u8lj)SBOg}QH)F@Cr(T~Cv|+gys|MAg1#7{K$(NeWH8yVbRut@@gsCAS)+JiWgM z>iI}Ds=TH+bHrY2EGhK#fpw* z(LkC^%jD4>4>M{{CFM%QU5A55XFty3Y^!53=axYZxbO#0qh*c9lRwi=q9&4|l*KES zgLlvM!Nr1mZJ=XYH9{QTDFDwUlj0%8K`n3WYj`Z(tgVH`Ysfk95<$}U2&FeK`jdlm zS(*b)pVk?qAMEa6+>lc2gZZ9f*YlXA55AxawyZFjuQGHwuXV62+xx;TV|P`JV9!!n z_C@s|>31p2#nj8?bB=4b|Yi;cXKChu>L8o7)AB_;V)(t2-s`^&q zv=AQ)34UCN6sGCAs;>EJr6wU}I!e&u;9gM@hqxclTgU{F_e^^v=*A~_f<$G>*s@FM zWBKkyvXkzg1z~+;{famqzSvh9P4OmAr+C&o5^9sleF1%KaWzv@H*wTA@C2}rj=CAI z!u@~j$Wzft6K6F@iVHYtyfuk2Jze_Kee(O`TTXB+yAyt*`17?oOA(PbhZ4DWhCc20 zoRP})?w@pJ%EN<&so9LHry3MnXv?2g{CyfYRaTO0%8p+oav6&)vto{=@4>v!WxP`Mxf#0^Sm4ZhrIOfrr0( z?BA_<*6>>Dv7UP0g55QY?{qoxZ2J^t(v-t~Z1P`!HRsUd9Vc$=`UhLG?_>8bw?Cm% zHTi0gkoD@Dk#&0yi1`5L8F+qiZ#6S@o3LK&$+pkiCyHD!&~MF5o^iW$0ay5|&r4K% zzMk!mar3(vt>W6Zwr#@}CbQ`x6X&PM+&;4Y;++d!)!$+^9j>WgHf_buKaV!vf&~bKPIBw%w83({3KTHAT38>a>Ti-Y#EXXzt#hI`OL?r*pr!!H-h$4WgTu zKM^gu7CzDP?wJn>*1GTa9$Ow8Z~n1p*@lRu$4M_|<}n>xzkcoUf1I=JydEB%y3;1p z>_J({=KA}`O_&9a`q%$q&~#*5izy_+O~I_`$KLVU)NQYRAi*#*$65~E$taD?~kyZqCW4$19>N&1cO8_uH`28xz~mL zd%f1aFzLw}zG!1v&u)#g<_r(=?7Zq++2z*Hjh}A%DJe~DDZg~$jf3i2CuH@ktY&?Fe*XTX>}VaaIp;q9?Aus> z8*wjG$BFPDq^%I3W&+G$K`adrSXOg!Q4;`85!?Y<#*Enb*U^K&0fKCD6H{yh%QVBc zsoS2MW%ikIr@gY)m-Fj92gDXMqspJQTehBw@(DXulh!8jVb`wAb(S7iSLW?un9<>N zPQh5U&!C%ePu{Qd^Ox;f)h4!lzxG@ioA&M#);tE&|6F?B!Q1xh9;$ifTX>@#^894J zb-m5W+}WY1)henzZPLZf&3|R%W)#Xtevi(m`7WEKzvH05sXcStPk8;;&JWxAbL$mP zb)7~QD@!wp7qI>fFa*s1e*-rl!dy#F0~-*#K@AA8Manw+3ZJw7ie0Q;(U|z_Epwf2 z@u$v|o3~=Byu4S2X2aWV6B|Cg_lqu<*Ogt&-y)P&c=@vZrQZiC+dgq|ua-NleAnPi z!36Q&8~JZmFFLm8h3}k8x%3fd2TVNcM)XX-v}cd^2qYbPP6A|&vNM1u z%`5(o{d4s>&m7w$^5^6}`8yhQNw?o_xyTYDddp8;QE|rpDf^GVWC($*ngiCrMl)-m p`4f?Jo|L6+j3}_0`?zTBf9AIb`}kKs@7&A)1fH&bF6*2UngI0sRTcmM literal 0 HcmV?d00001 From da69752a4b394279a784a08eb239fa8567c9bd9b Mon Sep 17 00:00:00 2001 From: evercarlos Date: Wed, 7 Aug 2024 11:18:24 -0500 Subject: [PATCH 02/11] update architecture --- resources/arq.png | Bin 53733 -> 51971 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/arq.png b/resources/arq.png index a9795c7352922ac8ace780519a33432cc3e0cf52..360fc9dc93b4b30870b5920aa0b6632903ce73be 100644 GIT binary patch literal 51971 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Νn`HTMe?I@j)py0iP?1NJDl6M7Ru`de9`i<`OZ$J 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 Date: Wed, 7 Aug 2024 11:20:17 -0500 Subject: [PATCH 03/11] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6684ee19d9..03a3c264da 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ 1) Tener instalado postgreSQL. Si desean probar con la db del docker-container cambiar los valores en ```application-local.properties``` - ```Instalar localmente```: 1) Ingresar a a cada microservicio (micro-intifraude, micro-transaction) y ejecutar: ``npm install`` -- ```Probar localemente```: +- ```Probar localmente```: 1) Ingresar a a cada microservicio (micro-intifraude, micro-transaction) y ejecutar ``npm run start:dev`` ## Prueba From e17d1db3f9989f9940720cbfa16585730755c8c5 Mon Sep 17 00:00:00 2001 From: evercarlos Date: Wed, 7 Aug 2024 11:23:55 -0500 Subject: [PATCH 04/11] update readme --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 03a3c264da..4b1d2e0b97 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,8 @@ 1) Ingresar a a cada microservicio (micro-intifraude, micro-transaction) y ejecutar ``npm run start:dev`` ## Prueba -### Ingresar en un navegador, postman. agregar el request: - - crear una transaccion +### Para probar ejecutar el siguiente curl o llenar manualmente los datos: + - Crear una transaccion ```bash curl --location 'localhost:3000/transactions' \ --header 'Content-Type: application/json' \ @@ -45,17 +45,19 @@ "value": 20 }' ``` - - listar transacciones + - Listar transacciones ```bash curl --location 'localhost:3000/transactions' ``` - - listar una transaccion por id. Reeemplazar el valor de id a buscar + - Listar una transaccion por id. Reeemplazar el valor de id a buscar ```bash curl --location 'localhost:3000/transactions/98836e50-c312-4f8b-b6c9-1bba2e5f97a1' ``` ## Ejemplo +- A continuación se mostrá las pruebas de funcionamiento de la aplicacion. + ### Creación de una transacción ![](./resources/create_transaction.png) ### Listar una transacción por id From cca863587a542dd19c70e6ca20ffa5aa9780cbae Mon Sep 17 00:00:00 2001 From: evercarlos Date: Wed, 7 Aug 2024 11:27:54 -0500 Subject: [PATCH 05/11] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b1d2e0b97..d263434f3b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ 2) ``Capa de Dominio (núcleo-core)`` 3) ``Capa de Infraestructura`` - La aplicacipon se subdivide en dos microservicios (micro-intifraude, micro-transaction). Está conformado por nestjs, kafka y postgreSQL -- Cada microservicio tiene un ```application-local.properties```, donde se define lo valores de las variables. La intención de crear este tipo archivo +- Cada microservicio tiene un ```application-local.properties, application-prd.properties```, donde se define lo valores de las variables. La intención de crear este tipo archivo es; para la centralización de las variables y configurar en futuras actualizaciones con keyvalues de azure, aws From a44638ffce3e59901cee69a6b6f8a95e27457cdb Mon Sep 17 00:00:00 2001 From: evercarlos Date: Wed, 7 Aug 2024 11:28:51 -0500 Subject: [PATCH 06/11] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d263434f3b..eefa7091d4 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ 3) ``Capa de Infraestructura`` - La aplicacipon se subdivide en dos microservicios (micro-intifraude, micro-transaction). Está conformado por nestjs, kafka y postgreSQL - Cada microservicio tiene un ```application-local.properties, application-prd.properties```, donde se define lo valores de las variables. La intención de crear este tipo archivo - es; para la centralización de las variables y configurar en futuras actualizaciones con keyvalues de azure, aws + es,la centralización de variables y configurar en futuras actualizaciones con keyvalues de azure, aws ![](./resources/arq.png) From 189ddb2e17688504a20ba5a149d31141d64431a4 Mon Sep 17 00:00:00 2001 From: evercarlos Date: Wed, 28 Jan 2026 18:45:47 -0500 Subject: [PATCH 07/11] start commit --- .gitignore | 104 - README.md | 69 - YAPECHALLENGE.md | 82 - docker-compose.yml | 83 - init.sql | 32 - micro-antifraude/.eslintrc.js | 25 - micro-antifraude/.gitignore | 56 - micro-antifraude/.prettierrc | 4 - micro-antifraude/Dockerfile | 20 - micro-antifraude/README.md | 21 - micro-antifraude/application-local.properties | 11 - micro-antifraude/application-prd.properties | 12 - micro-antifraude/nest-cli.json | 8 - micro-antifraude/package-lock.json | 9113 ---------------- micro-antifraude/package.json | 77 - micro-antifraude/src/app.module.ts | 12 - .../src/application/application.module.ts | 15 - .../src/application/common/kafka.config.ts | 15 - .../controller/controller.module.ts | 42 - .../controller/v1/transaction.controller.ts | 23 - micro-antifraude/src/domain/domain.module.ts | 20 - .../src/domain/enum/transaction_status.ts | 8 - micro-antifraude/src/domain/index.ts | 0 micro-antifraude/src/domain/model/index.ts | 0 .../src/domain/model/transaction-reponse.ts | 16 - .../src/domain/model/transaction.ts | 12 - micro-antifraude/src/domain/port/index.ts | 1 - .../src/domain/port/transaction.port.ts | 12 - micro-antifraude/src/domain/service/index.ts | 1 - .../src/domain/service/transaction.service.ts | 35 - .../infraestructure/adapter/adapter.module.ts | 14 - .../secondary/secondary-adapter.module.ts | 12 - .../adapter/secondary/transaction.adapter.ts | 31 - .../config-server/config-server.decorador.ts | 24 - .../config/config-server/env/environments.ts | 18 - .../config/kafka/helper.config.ts | 24 - .../config/kafka/kafka.config.ts | 16 - .../infraestructure/config/shared.module.ts | 9 - .../config/sql/pg-db.config.ts | 20 - .../config/sql/postgresql.module.ts | 22 - .../entity/transaction.entity.ts | 26 - .../infraestructure/infraestructure.module.ts | 30 - .../publisher/transaction.publisher.ts | 28 - .../subscriber/transaction.subscriber.ts | 51 - micro-antifraude/src/main.ts | 26 - micro-antifraude/test/app.e2e-spec.ts | 24 - micro-antifraude/test/jest-e2e.json | 9 - micro-antifraude/tsconfig.build.json | 4 - micro-antifraude/tsconfig.json | 21 - micro-transaction/.eslintrc.js | 25 - micro-transaction/.gitignore | 56 - micro-transaction/.prettierrc | 4 - micro-transaction/Dockerfile | 19 - micro-transaction/README.md | 32 - .../application-local.properties | 17 - micro-transaction/application-prd.properties | 19 - micro-transaction/nest-cli.json | 8 - micro-transaction/package-lock.json | 9148 ----------------- micro-transaction/package.json | 79 - micro-transaction/src/app.module.ts | 12 - .../src/application/application.module.ts | 15 - .../src/application/common/kafka.config.ts | 16 - .../controller/controller.module.ts | 40 - .../controller/v1/transaction.controller.ts | 68 - micro-transaction/src/domain/domain.module.ts | 20 - .../src/domain/enum/transaction_status.ts | 8 - micro-transaction/src/domain/index.ts | 0 micro-transaction/src/domain/model/index.ts | 0 .../src/domain/model/transaction-response.ts | 30 - .../src/domain/model/transaction-status.ts | 5 - .../src/domain/model/transaction-type.ts | 5 - .../src/domain/model/transaction.ts | 39 - micro-transaction/src/domain/port/index.ts | 1 - .../src/domain/port/transaction.port.ts | 15 - micro-transaction/src/domain/service/index.ts | 1 - .../src/domain/service/transaction.service.ts | 50 - .../infraestructure/adapter/adapter.module.ts | 14 - .../secondary/secondary-adapter.module.ts | 21 - .../adapter/secondary/transaction.adapter.ts | 49 - .../config-server/config-server.decorador.ts | 24 - .../config/config-server/env/environments.ts | 18 - .../config/kafka/helper.config.ts | 28 - .../config/kafka/kafka.config.ts | 16 - .../infraestructure/config/shared.module.ts | 11 - .../config/sql/pg-db.config.ts | 24 - .../config/sql/postgresql.module.ts | 26 - .../entity/transaction.entity.ts | 33 - .../infraestructure/infraestructure.module.ts | 27 - .../mapper/transaction.mapper.ts | 76 - .../publisher/transaction.publisher.ts | 24 - .../repository/transaction.repository.ts | 70 - .../subscriber/transaction.subscriber.ts | 29 - micro-transaction/src/main.ts | 34 - micro-transaction/test/app.e2e-spec.ts | 24 - micro-transaction/test/jest-e2e.json | 9 - micro-transaction/tsconfig.build.json | 4 - micro-transaction/tsconfig.json | 21 - resources/arq.png | Bin 51971 -> 0 bytes resources/create_transaction.png | Bin 86550 -> 0 bytes resources/find_id_transaction.png | Bin 68916 -> 0 bytes resources/list_transaction.png | Bin 111255 -> 0 bytes 101 files changed, 20652 deletions(-) delete mode 100644 .gitignore delete mode 100644 README.md delete mode 100644 YAPECHALLENGE.md delete mode 100644 docker-compose.yml delete mode 100644 init.sql delete mode 100644 micro-antifraude/.eslintrc.js delete mode 100644 micro-antifraude/.gitignore delete mode 100644 micro-antifraude/.prettierrc delete mode 100644 micro-antifraude/Dockerfile delete mode 100644 micro-antifraude/README.md delete mode 100644 micro-antifraude/application-local.properties delete mode 100644 micro-antifraude/application-prd.properties delete mode 100644 micro-antifraude/nest-cli.json delete mode 100644 micro-antifraude/package-lock.json delete mode 100644 micro-antifraude/package.json delete mode 100644 micro-antifraude/src/app.module.ts delete mode 100644 micro-antifraude/src/application/application.module.ts delete mode 100644 micro-antifraude/src/application/common/kafka.config.ts delete mode 100644 micro-antifraude/src/application/controller/controller.module.ts delete mode 100644 micro-antifraude/src/application/controller/v1/transaction.controller.ts delete mode 100644 micro-antifraude/src/domain/domain.module.ts delete mode 100644 micro-antifraude/src/domain/enum/transaction_status.ts delete mode 100644 micro-antifraude/src/domain/index.ts delete mode 100644 micro-antifraude/src/domain/model/index.ts delete mode 100644 micro-antifraude/src/domain/model/transaction-reponse.ts delete mode 100644 micro-antifraude/src/domain/model/transaction.ts delete mode 100644 micro-antifraude/src/domain/port/index.ts delete mode 100644 micro-antifraude/src/domain/port/transaction.port.ts delete mode 100644 micro-antifraude/src/domain/service/index.ts delete mode 100644 micro-antifraude/src/domain/service/transaction.service.ts delete mode 100644 micro-antifraude/src/infraestructure/adapter/adapter.module.ts delete mode 100644 micro-antifraude/src/infraestructure/adapter/secondary/secondary-adapter.module.ts delete mode 100644 micro-antifraude/src/infraestructure/adapter/secondary/transaction.adapter.ts delete mode 100644 micro-antifraude/src/infraestructure/config/config-server/config-server.decorador.ts delete mode 100644 micro-antifraude/src/infraestructure/config/config-server/env/environments.ts delete mode 100644 micro-antifraude/src/infraestructure/config/kafka/helper.config.ts delete mode 100644 micro-antifraude/src/infraestructure/config/kafka/kafka.config.ts delete mode 100644 micro-antifraude/src/infraestructure/config/shared.module.ts delete mode 100644 micro-antifraude/src/infraestructure/config/sql/pg-db.config.ts delete mode 100644 micro-antifraude/src/infraestructure/config/sql/postgresql.module.ts delete mode 100644 micro-antifraude/src/infraestructure/entity/transaction.entity.ts delete mode 100644 micro-antifraude/src/infraestructure/infraestructure.module.ts delete mode 100644 micro-antifraude/src/infraestructure/publisher/transaction.publisher.ts delete mode 100644 micro-antifraude/src/infraestructure/subscriber/transaction.subscriber.ts delete mode 100644 micro-antifraude/src/main.ts delete mode 100644 micro-antifraude/test/app.e2e-spec.ts delete mode 100644 micro-antifraude/test/jest-e2e.json delete mode 100644 micro-antifraude/tsconfig.build.json delete mode 100644 micro-antifraude/tsconfig.json delete mode 100644 micro-transaction/.eslintrc.js delete mode 100644 micro-transaction/.gitignore delete mode 100644 micro-transaction/.prettierrc delete mode 100644 micro-transaction/Dockerfile delete mode 100644 micro-transaction/README.md delete mode 100644 micro-transaction/application-local.properties delete mode 100644 micro-transaction/application-prd.properties delete mode 100644 micro-transaction/nest-cli.json delete mode 100644 micro-transaction/package-lock.json delete mode 100644 micro-transaction/package.json delete mode 100644 micro-transaction/src/app.module.ts delete mode 100644 micro-transaction/src/application/application.module.ts delete mode 100644 micro-transaction/src/application/common/kafka.config.ts delete mode 100644 micro-transaction/src/application/controller/controller.module.ts delete mode 100644 micro-transaction/src/application/controller/v1/transaction.controller.ts delete mode 100644 micro-transaction/src/domain/domain.module.ts delete mode 100644 micro-transaction/src/domain/enum/transaction_status.ts delete mode 100644 micro-transaction/src/domain/index.ts delete mode 100644 micro-transaction/src/domain/model/index.ts delete mode 100644 micro-transaction/src/domain/model/transaction-response.ts delete mode 100644 micro-transaction/src/domain/model/transaction-status.ts delete mode 100644 micro-transaction/src/domain/model/transaction-type.ts delete mode 100644 micro-transaction/src/domain/model/transaction.ts delete mode 100644 micro-transaction/src/domain/port/index.ts delete mode 100644 micro-transaction/src/domain/port/transaction.port.ts delete mode 100644 micro-transaction/src/domain/service/index.ts delete mode 100644 micro-transaction/src/domain/service/transaction.service.ts delete mode 100644 micro-transaction/src/infraestructure/adapter/adapter.module.ts delete mode 100644 micro-transaction/src/infraestructure/adapter/secondary/secondary-adapter.module.ts delete mode 100644 micro-transaction/src/infraestructure/adapter/secondary/transaction.adapter.ts delete mode 100644 micro-transaction/src/infraestructure/config/config-server/config-server.decorador.ts delete mode 100644 micro-transaction/src/infraestructure/config/config-server/env/environments.ts delete mode 100644 micro-transaction/src/infraestructure/config/kafka/helper.config.ts delete mode 100644 micro-transaction/src/infraestructure/config/kafka/kafka.config.ts delete mode 100644 micro-transaction/src/infraestructure/config/shared.module.ts delete mode 100644 micro-transaction/src/infraestructure/config/sql/pg-db.config.ts delete mode 100644 micro-transaction/src/infraestructure/config/sql/postgresql.module.ts delete mode 100644 micro-transaction/src/infraestructure/entity/transaction.entity.ts delete mode 100644 micro-transaction/src/infraestructure/infraestructure.module.ts delete mode 100644 micro-transaction/src/infraestructure/mapper/transaction.mapper.ts delete mode 100644 micro-transaction/src/infraestructure/publisher/transaction.publisher.ts delete mode 100644 micro-transaction/src/infraestructure/repository/transaction.repository.ts delete mode 100644 micro-transaction/src/infraestructure/subscriber/transaction.subscriber.ts delete mode 100644 micro-transaction/src/main.ts delete mode 100644 micro-transaction/test/app.e2e-spec.ts delete mode 100644 micro-transaction/test/jest-e2e.json delete mode 100644 micro-transaction/tsconfig.build.json delete mode 100644 micro-transaction/tsconfig.json delete mode 100644 resources/arq.png delete mode 100644 resources/create_transaction.png delete mode 100644 resources/find_id_transaction.png delete mode 100644 resources/list_transaction.png diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 67045665db..0000000000 --- a/.gitignore +++ /dev/null @@ -1,104 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port diff --git a/README.md b/README.md deleted file mode 100644 index eefa7091d4..0000000000 --- a/README.md +++ /dev/null @@ -1,69 +0,0 @@ -

- Nest Logo -

- - -# Aplicacion de Transaciones con arquitectura hexagonal -- nodejs: v 18.20.4 -## Estructura del Proyecto Basado en Aplication, Domain, Infrastructure -1) ``Capa Application`` -2) ``Capa de Dominio (núcleo-core)`` -3) ``Capa de Infraestructura`` -- La aplicacipon se subdivide en dos microservicios (micro-intifraude, micro-transaction). Está conformado por nestjs, kafka y postgreSQL -- Cada microservicio tiene un ```application-local.properties, application-prd.properties```, donde se define lo valores de las variables. La intención de crear este tipo archivo - es,la centralización de variables y configurar en futuras actualizaciones con keyvalues de azure, aws - - -![](./resources/arq.png) - -## Instalación y Prueba -### Docker -- ```Requisitos```: -- Se usará las configuraciones de application-prd.properties (no actualizar) -- ```Instalación```: -- Es necesario tener docker en la máquina personal. -- Para iniciar los microservicios (micro-transaction, micro-antifraude) ejecutar el siguiente comando y verificar que los componentes estén en ejecución: ```docker-compose up -d``` - -### Local (Sin interacción con docker) -- ```Requisitos```: -1) Tener instalado postgreSQL. Si desean probar con la db del docker-container cambiar los valores en ```application-local.properties``` -- ```Instalar localmente```: - 1) Ingresar a a cada microservicio (micro-intifraude, micro-transaction) y ejecutar: ``npm install`` -- ```Probar localmente```: - 1) Ingresar a a cada microservicio (micro-intifraude, micro-transaction) y ejecutar ``npm run start:dev`` - -## Prueba -### Para probar ejecutar el siguiente curl o llenar manualmente los datos: - - Crear una transaccion - ```bash - curl --location 'localhost:3000/transactions' \ ---header 'Content-Type: application/json' \ ---data '{ - "accountExternalIdDebit": "{{$guid}}", - "accountExternalIdCredit": "{{$guid}}", - "tranferTypeId": 1, - "value": 20 -}' -``` - - Listar transacciones - -```bash -curl --location 'localhost:3000/transactions' -``` - - - Listar una transaccion por id. Reeemplazar el valor de id a buscar -```bash -curl --location 'localhost:3000/transactions/98836e50-c312-4f8b-b6c9-1bba2e5f97a1' -``` -## Ejemplo -- A continuación se mostrá las pruebas de funcionamiento de la aplicacion. - -### Creación de una transacción -![](./resources/create_transaction.png) -### Listar una transacción por id -![](./resources/find_id_transaction.png) -### Listar transacciones -![](./resources/list_transaction.png) - -## Autor -[EVER CARLOS ROJAS](https://github.com/evercarlos) \ No newline at end of file diff --git a/YAPECHALLENGE.md b/YAPECHALLENGE.md deleted file mode 100644 index b067a71026..0000000000 --- a/YAPECHALLENGE.md +++ /dev/null @@ -1,82 +0,0 @@ -# Yape Code Challenge :rocket: - -Our code challenge will let you marvel us with your Jedi coding skills :smile:. - -Don't forget that the proper way to submit your work is to fork the repo and create a PR :wink: ... have fun !! - -- [Problem](#problem) -- [Tech Stack](#tech_stack) -- [Send us your challenge](#send_us_your_challenge) - -# Problem - -Every time a financial transaction is created it must be validated by our anti-fraud microservice and then the same service sends a message back to update the transaction status. -For now, we have only three transaction statuses: - -
    -
  1. pending
  2. -
  3. approved
  4. -
  5. rejected
  6. -
- -Every transaction with a value greater than 1000 should be rejected. - -```mermaid - flowchart LR - Transaction -- Save Transaction with pending Status --> transactionDatabase[(Database)] - Transaction --Send transaction Created event--> Anti-Fraud - Anti-Fraud -- Send transaction Status Approved event--> Transaction - Anti-Fraud -- Send transaction Status Rejected event--> Transaction - Transaction -- Update transaction Status event--> transactionDatabase[(Database)] -``` - -# Tech Stack - -
    -
  1. Node. You can use any framework you want (i.e. Nestjs with an ORM like TypeOrm or Prisma)
  2. -
  3. Any database
  4. -
  5. Kafka
  6. -
- -We do provide a `Dockerfile` to help you get started with a dev environment. - -You must have two resources: - -1. Resource to create a transaction that must containt: - -```json -{ - "accountExternalIdDebit": "Guid", - "accountExternalIdCredit": "Guid", - "tranferTypeId": 1, - "value": 120 -} -``` - -2. Resource to retrieve a transaction - -```json -{ - "transactionExternalId": "Guid", - "transactionType": { - "name": "" - }, - "transactionStatus": { - "name": "" - }, - "value": 120, - "createdAt": "Date" -} -``` - -## Optional - -You can use any approach to store transaction data but you should consider that we may deal with high volume scenarios where we have a huge amount of writes and reads for the same data at the same time. How would you tackle this requirement? - -You can use Graphql; - -# Send us your challenge - -When you finish your challenge, after forking a repository, you **must** open a pull request to our repository. There are no limitations to the implementation, you can follow the programming paradigm, modularization, and style that you feel is the most appropriate solution. - -If you have any questions, please let us know. diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 9f95480185..0000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,83 +0,0 @@ -version: "3.7" - -services: - postgres: - image: postgres:14 - container_name: postgres - ports: - - "5433:5432" - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: dbtransaction - volumes: - - ./init.sql:/docker-entrypoint-initdb.d/init.sql - networks: - - yape_challenge - - zookeeper: - container_name: zookeeper - image: confluentinc/cp-zookeeper:7.4.0 - environment: - ZOOKEEPER_CLIENT_PORT: 2181 - ZOOKEEPER_TICK_TIME: 2000 - restart: always - networks: - - yape_challenge - - # broker N° 1 - kafka: - container_name: kafka - image: confluentinc/cp-kafka:7.4.0 - depends_on: - - zookeeper - ports: - - "9092:9092" - environment: - KAFKA_BROKER_ID: 1 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 # red externa: 9092 ; red interna: 29092 - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 # 2 // dos brokers o servicews - KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 - KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 # 2 // dos brokers o servicews - restart: always - networks: - - yape_challenge - - micro-transaction: - container_name: micro-transaction - depends_on: - - kafka - - postgres - build: - context: ./micro-transaction - dockerfile: Dockerfile - args: - - ENVIRONMENT:prd - environment: # para verificar que enviante usar local o prd - - ENVIRONMENT=prd - ports: - - "3000:3000" - networks: - - yape_challenge - - micro-antifraude: - container_name: micro-antifraude - depends_on: - - kafka - build: - context: ./micro-antifraude - dockerfile: Dockerfile - args: - - ENVIRONMENT:prd - environment: # para verificar que enviante usar local o prd - - ENVIRONMENT=prd - ports: - - "3001:3000" - networks: - - yape_challenge - -networks: - yape_challenge: - driver: bridge diff --git a/init.sql b/init.sql deleted file mode 100644 index 03d2458336..0000000000 --- a/init.sql +++ /dev/null @@ -1,32 +0,0 @@ --- Conectar a PostgreSQL ---psql -U postgres - --- Create database if it does not exist -DO $$ -BEGIN - IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = 'dbtransaction') THEN - CREATE DATABASE dbtransaction; - END IF; -END -$$; - --- Conectarse a la base de datos recién creada -\c dbtransaction - --- Crear las tablas y permisos necesarios -CREATE TABLE public.transacciones -( - id_debit text COLLATE pg_catalog."default", - id_credit text COLLATE pg_catalog."default", - id_transfer_type integer, - created_at timestamp without time zone DEFAULT now(), - state boolean DEFAULT true, - transaction_status character varying(100) COLLATE pg_catalog."default", - id uuid NOT NULL, - valor numeric(18,0), - CONSTRAINT transacciones_pkey PRIMARY KEY (id) -); - --- Conceder permisos -GRANT TEMPORARY, CONNECT ON DATABASE dbtransaction TO PUBLIC; -GRANT ALL ON DATABASE dbtransaction TO postgres; diff --git a/micro-antifraude/.eslintrc.js b/micro-antifraude/.eslintrc.js deleted file mode 100644 index 259de13c73..0000000000 --- a/micro-antifraude/.eslintrc.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname, - sourceType: 'module', - }, - plugins: ['@typescript-eslint/eslint-plugin'], - extends: [ - 'plugin:@typescript-eslint/recommended', - 'plugin:prettier/recommended', - ], - root: true, - env: { - node: true, - jest: true, - }, - ignorePatterns: ['.eslintrc.js'], - rules: { - '@typescript-eslint/interface-name-prefix': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-explicit-any': 'off', - }, -}; diff --git a/micro-antifraude/.gitignore b/micro-antifraude/.gitignore deleted file mode 100644 index 4b56acfbeb..0000000000 --- a/micro-antifraude/.gitignore +++ /dev/null @@ -1,56 +0,0 @@ -# compiled output -/dist -/node_modules -/build - -# Logs -logs -*.log -npm-debug.log* -pnpm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# OS -.DS_Store - -# Tests -/coverage -/.nyc_output - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# temp directory -.temp -.tmp - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/micro-antifraude/.prettierrc b/micro-antifraude/.prettierrc deleted file mode 100644 index dcb72794f5..0000000000 --- a/micro-antifraude/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all" -} \ No newline at end of file diff --git a/micro-antifraude/Dockerfile b/micro-antifraude/Dockerfile deleted file mode 100644 index 4d745251c5..0000000000 --- a/micro-antifraude/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -# Usa una imagen base de Node.js -FROM node:18.20.4-alpine3.19 - -# Crea y establece el directorio de trabajo -WORKDIR /app - -# Copia los archivos de la aplicación -COPY . . - -# Instala las dependencias -RUN npm install - -# Compila la aplicación -RUN npm run build - -# Expone el puerto en el que la aplicación se ejecutará -EXPOSE 3000 - -# Comando para ejecutar la aplicación -CMD ["npm", "run", "start:prod"] diff --git a/micro-antifraude/README.md b/micro-antifraude/README.md deleted file mode 100644 index 207e89a404..0000000000 --- a/micro-antifraude/README.md +++ /dev/null @@ -1,21 +0,0 @@ -

- Nest Logo -

- - -# Microservicios antifraude aplicando arquitectura hexagonal -## Requisitos -- nodejs: v 18.20.4 - -## Estructura del Proyecto Basado en Aplication, Domain, Infrastructure -1) ``Capa Application`` -2) ``Capa de Dominio (núcleo-core)`` -3) ``Capa de Infraestructura`` - -## Running the app -- npm run start:dev - -```bash -# watch mode -$ npm run start:dev -``` diff --git a/micro-antifraude/application-local.properties b/micro-antifraude/application-local.properties deleted file mode 100644 index 530c61ac0c..0000000000 --- a/micro-antifraude/application-local.properties +++ /dev/null @@ -1,11 +0,0 @@ -## Este archivo se crea con el objetivo de usar en el futuro keyValues - -environment.local = true - -config.graphql.env.access=true - -########### KAFKA ########### -#######para un solo broker####### -kafka.service.name = KAFKA -kafka.brokers.url = localhost:9092 -kafka.brokers.group.id = my-group-id-transaction-1 diff --git a/micro-antifraude/application-prd.properties b/micro-antifraude/application-prd.properties deleted file mode 100644 index ace64b4449..0000000000 --- a/micro-antifraude/application-prd.properties +++ /dev/null @@ -1,12 +0,0 @@ -## Este archivo se crea con el objetivo de usar en el futuro keyValues - -environment.local = true - -config.graphql.env.access=true - -########### KAFKA ########### -#######para un solo broker####### -kafka.service.name = KAFKA -#localhost:9092 -kafka.brokers.url = kafka:29092 -kafka.brokers.group.id = my-group-id-transaction-1 diff --git a/micro-antifraude/nest-cli.json b/micro-antifraude/nest-cli.json deleted file mode 100644 index f9aa683b1a..0000000000 --- a/micro-antifraude/nest-cli.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/nest-cli", - "collection": "@nestjs/schematics", - "sourceRoot": "src", - "compilerOptions": { - "deleteOutDir": true - } -} diff --git a/micro-antifraude/package-lock.json b/micro-antifraude/package-lock.json deleted file mode 100644 index 14450446ce..0000000000 --- a/micro-antifraude/package-lock.json +++ /dev/null @@ -1,9113 +0,0 @@ -{ - "name": "micro-transaction", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "micro-transaction", - "version": "0.0.1", - "license": "UNLICENSED", - "dependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/config": "^3.2.3", - "@nestjs/core": "^10.0.0", - "@nestjs/microservices": "^10.3.10", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/typeorm": "^10.0.2", - "dotenv": "^16.4.5", - "kafkajs": "^2.2.4", - "pg": "^8.12.0", - "reflect-metadata": "^0.2.0", - "rxjs": "^7.8.1", - "typeorm": "^0.3.20", - "uuid": "^10.0.0" - }, - "devDependencies": { - "@nestjs/cli": "^10.0.0", - "@nestjs/schematics": "^10.0.0", - "@nestjs/testing": "^10.0.0", - "@types/express": "^4.17.17", - "@types/jest": "^29.5.2", - "@types/node": "^20.3.1", - "@types/supertest": "^6.0.0", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.42.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^5.0.0", - "jest": "^29.5.0", - "prettier": "^3.0.0", - "source-map-support": "^0.5.21", - "supertest": "^7.0.0", - "ts-jest": "^29.1.0", - "ts-loader": "^9.4.3", - "ts-node": "^10.9.1", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.1.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "17.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz", - "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "17.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz", - "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.8", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.8", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics-cli": { - "version": "17.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.8.tgz", - "integrity": "sha512-TjmiwWJarX7oqvNiRAroQ5/LeKUatxBOCNEuKXO/PV8e7pn/Hr/BqfFm+UcYrQoFdZplmtNAfqmbqgVziKvCpA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.8", - "@angular-devkit/schematics": "17.3.8", - "ansi-colors": "4.1.3", - "inquirer": "9.2.15", - "symbol-observable": "4.0.0", - "yargs-parser": "21.1.1" - }, - "bin": { - "schematics": "bin/schematics.js" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", - "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", - "dev": true, - "dependencies": { - "@ljharb/through": "^2.3.12", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^3.2.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "devOptional": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "devOptional": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", - "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nestjs/cli": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.2.tgz", - "integrity": "sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.8", - "@angular-devkit/schematics": "17.3.8", - "@angular-devkit/schematics-cli": "17.3.8", - "@nestjs/schematics": "^10.0.1", - "chalk": "4.1.2", - "chokidar": "3.6.0", - "cli-table3": "0.6.5", - "commander": "4.1.1", - "fork-ts-checker-webpack-plugin": "9.0.2", - "glob": "10.4.2", - "inquirer": "8.2.6", - "node-emoji": "1.11.0", - "ora": "5.4.1", - "tree-kill": "1.2.2", - "tsconfig-paths": "4.2.0", - "tsconfig-paths-webpack-plugin": "4.1.0", - "typescript": "5.3.3", - "webpack": "5.92.1", - "webpack-node-externals": "3.0.0" - }, - "bin": { - "nest": "bin/nest.js" - }, - "engines": { - "node": ">= 16.14" - }, - "peerDependencies": { - "@swc/cli": "^0.1.62 || ^0.3.0 || ^0.4.0", - "@swc/core": "^1.3.62" - }, - "peerDependenciesMeta": { - "@swc/cli": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/@nestjs/cli/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nestjs/cli/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nestjs/cli/node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@nestjs/cli/node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/@nestjs/common": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.10.tgz", - "integrity": "sha512-H8k0jZtxk1IdtErGDmxFRy0PfcOAUg41Prrqpx76DQusGGJjsaovs1zjXVD1rZWaVYchfT1uczJ6L4Kio10VNg==", - "dependencies": { - "iterare": "1.2.1", - "tslib": "2.6.3", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "node_modules/@nestjs/config": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.3.tgz", - "integrity": "sha512-p6yv/CvoBewJ72mBq4NXgOAi2rSQNWx3a+IMJLVKS2uiwFCOQQuiIatGwq6MRjXV3Jr+B41iUO8FIf4xBrZ4/w==", - "dependencies": { - "dotenv": "16.4.5", - "dotenv-expand": "10.0.0", - "lodash": "4.17.21" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "rxjs": "^7.1.0" - } - }, - "node_modules/@nestjs/core": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.10.tgz", - "integrity": "sha512-ZbQ4jovQyzHtCGCrzK5NdtW1SYO2fHSsgSY1+/9WdruYCUra+JDkWEXgZ4M3Hv480Dl3OXehAmY1wCOojeMyMQ==", - "hasInstallScript": true, - "dependencies": { - "@nuxtjs/opencollective": "0.3.2", - "fast-safe-stringify": "2.1.1", - "iterare": "1.2.1", - "path-to-regexp": "3.2.0", - "tslib": "2.6.3", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/websockets": "^10.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 - } - } - }, - "node_modules/@nestjs/microservices": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-10.3.10.tgz", - "integrity": "sha512-zZrilhZmXU2Ik5Usrcy4qEX262Uhvz0/9XlIdX6SRn8I39ns1EE9tAhEBmmkMwh7lsEikRFa4aaa05loi8Gsow==", - "dependencies": { - "iterare": "1.2.1", - "tslib": "2.6.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@grpc/grpc-js": "*", - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/websockets": "^10.0.0", - "amqp-connection-manager": "*", - "amqplib": "*", - "cache-manager": "*", - "ioredis": "*", - "kafkajs": "*", - "mqtt": "*", - "nats": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "@grpc/grpc-js": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - }, - "amqp-connection-manager": { - "optional": true - }, - "amqplib": { - "optional": true - }, - "cache-manager": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "kafkajs": { - "optional": true - }, - "mqtt": { - "optional": true - }, - "nats": { - "optional": true - } - } - }, - "node_modules/@nestjs/platform-express": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.10.tgz", - "integrity": "sha512-wK2ow3CZI2KFqWeEpPmoR300OB6BcBLxARV1EiClJLCj4S1mZsoCmS0YWgpk3j1j6mo0SI8vNLi/cC2iZPEPQA==", - "dependencies": { - "body-parser": "1.20.2", - "cors": "2.8.5", - "express": "4.19.2", - "multer": "1.4.4-lts.1", - "tslib": "2.6.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0" - } - }, - "node_modules/@nestjs/schematics": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.3.tgz", - "integrity": "sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.8", - "@angular-devkit/schematics": "17.3.8", - "comment-json": "4.2.3", - "jsonc-parser": "3.3.1", - "pluralize": "8.0.0" - }, - "peerDependencies": { - "typescript": ">=4.8.2" - } - }, - "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true - }, - "node_modules/@nestjs/testing": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.10.tgz", - "integrity": "sha512-i3HAtVQJijxNxJq1k39aelyJlyEIBRONys7IipH/4r8W0J+M1V+y5EKDOyi4j1SdNSb/vmNyWpZ2/ewZjl3kRA==", - "dev": true, - "dependencies": { - "tslib": "2.6.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0" - }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - } - } - }, - "node_modules/@nestjs/typeorm": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz", - "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==", - "dependencies": { - "uuid": "9.0.1" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", - "reflect-metadata": "^0.1.13 || ^0.2.0", - "rxjs": "^7.2.0", - "typeorm": "^0.3.0" - } - }, - "node_modules/@nestjs/typeorm/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nuxtjs/opencollective": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", - "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.0", - "node-fetch": "^2.6.1" - }, - "bin": { - "opencollective": "bin/opencollective.js" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@sqltools/formatter": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", - "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "devOptional": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "devOptional": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cookiejar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", - "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/methods": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", - "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.14.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", - "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", - "devOptional": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/superagent": { - "version": "8.1.8", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.8.tgz", - "integrity": "sha512-nTqHJ2OTa7PFEpLahzSEEeFeqbMpmcN7OeayiOc7v+xk+/vyTKljRe+o4MPqSnPeRCMvtxuLG+5QqluUVQJOnA==", - "dev": true, - "dependencies": { - "@types/cookiejar": "^2.1.5", - "@types/methods": "^1.1.4", - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/supertest": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", - "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", - "dev": true, - "dependencies": { - "@types/methods": "^1.1.4", - "@types/superagent": "^8.1.0" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "devOptional": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "devOptional": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001647", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001647.tgz", - "integrity": "sha512-n83xdNiyeNcHpzWY+1aFbqCK7LuLfBricc4+alSQL2Xb6OR3XpnQAmlDG+pQcdTfiHRuLcQ96VOfrPSGiNJYSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", - "dev": true - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-highlight": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", - "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", - "dependencies": { - "chalk": "^4.0.0", - "highlight.js": "^10.7.1", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "yargs": "^16.0.0" - }, - "bin": { - "highlight": "bin/highlight" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/cli-highlight/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cli-highlight/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/cli-highlight/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cli-highlight/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/comment-json": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", - "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", - "dev": true, - "dependencies": { - "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", - "engines": { - "node": ">=12" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", - "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^8.2.0", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "typescript": ">3.6.0", - "webpack": "^5.11.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", - "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "engines": { - "node": "*" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "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.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterare": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", - "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kafkajs": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-2.2.4.tgz", - "integrity": "sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multer": { - "version": "1.4.4-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", - "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", - "dependencies": { - "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/path-to-regexp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", - "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pg": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", - "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", - "dependencies": { - "pg-connection-string": "^2.6.4", - "pg-pool": "^3.6.2", - "pg-protocol": "^1.6.1", - "pg-types": "^2.1.0", - "pgpass": "1.x" - }, - "engines": { - "node": ">= 8.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.1.1" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", - "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", - "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", - "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dependencies": { - "split2": "^4.1.0" - } - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true - }, - "node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/superagent": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", - "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", - "dev": true, - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^3.5.1", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/supertest": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", - "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^9.0.1" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", - "dev": true, - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.31.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", - "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "ejs": "^3.1.10", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "devOptional": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "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 - } - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", - "integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tsconfig-paths": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typeorm": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz", - "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==", - "dependencies": { - "@sqltools/formatter": "^1.2.5", - "app-root-path": "^3.1.0", - "buffer": "^6.0.3", - "chalk": "^4.1.2", - "cli-highlight": "^2.1.11", - "dayjs": "^1.11.9", - "debug": "^4.3.4", - "dotenv": "^16.0.3", - "glob": "^10.3.10", - "mkdirp": "^2.1.3", - "reflect-metadata": "^0.2.1", - "sha.js": "^2.4.11", - "tslib": "^2.5.0", - "uuid": "^9.0.0", - "yargs": "^17.6.2" - }, - "bin": { - "typeorm": "cli.js", - "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", - "typeorm-ts-node-esm": "cli-ts-node-esm.js" - }, - "engines": { - "node": ">=16.13.0" - }, - "funding": { - "url": "https://opencollective.com/typeorm" - }, - "peerDependencies": { - "@google-cloud/spanner": "^5.18.0", - "@sap/hana-client": "^2.12.25", - "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0", - "hdb-pool": "^0.1.6", - "ioredis": "^5.0.4", - "mongodb": "^5.8.0", - "mssql": "^9.1.1 || ^10.0.1", - "mysql2": "^2.2.5 || ^3.0.1", - "oracledb": "^6.3.0", - "pg": "^8.5.1", - "pg-native": "^3.0.0", - "pg-query-stream": "^4.0.0", - "redis": "^3.1.1 || ^4.0.0", - "sql.js": "^1.4.0", - "sqlite3": "^5.0.3", - "ts-node": "^10.7.0", - "typeorm-aurora-data-api-driver": "^2.0.0" - }, - "peerDependenciesMeta": { - "@google-cloud/spanner": { - "optional": true - }, - "@sap/hana-client": { - "optional": true - }, - "better-sqlite3": { - "optional": true - }, - "hdb-pool": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "mongodb": { - "optional": true - }, - "mssql": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "oracledb": { - "optional": true - }, - "pg": { - "optional": true - }, - "pg-native": { - "optional": true - }, - "pg-query-stream": { - "optional": true - }, - "redis": { - "optional": true - }, - "sql.js": { - "optional": true - }, - "sqlite3": { - "optional": true - }, - "ts-node": { - "optional": true - }, - "typeorm-aurora-data-api-driver": { - "optional": true - } - } - }, - "node_modules/typeorm/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/typeorm/node_modules/mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeorm/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", - "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", - "dependencies": { - "@lukeed/csprng": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "devOptional": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", - "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/micro-antifraude/package.json b/micro-antifraude/package.json deleted file mode 100644 index 0639a1d54d..0000000000 --- a/micro-antifraude/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "micro-antifraude", - "version": "0.0.1", - "description": "", - "author": "", - "private": true, - "license": "UNLICENSED", - "scripts": { - "build": "nest build", - "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", - "start:dev": "nest start --watch", - "start:debug": "nest start --debug --watch", - "start:prod": "node dist/main", - "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", - "test": "jest", - "test:watch": "jest --watch", - "test:cov": "jest --coverage", - "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./test/jest-e2e.json" - }, - "dependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/config": "^3.2.3", - "@nestjs/core": "^10.0.0", - "@nestjs/microservices": "^10.3.10", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/typeorm": "^10.0.2", - "dotenv": "^16.4.5", - "kafkajs": "^2.2.4", - "pg": "^8.12.0", - "reflect-metadata": "^0.2.0", - "rxjs": "^7.8.1", - "typeorm": "^0.3.20", - "uuid": "^10.0.0" - }, - "devDependencies": { - "@nestjs/cli": "^10.0.0", - "@nestjs/schematics": "^10.0.0", - "@nestjs/testing": "^10.0.0", - "@types/express": "^4.17.17", - "@types/jest": "^29.5.2", - "@types/node": "^20.3.1", - "@types/supertest": "^6.0.0", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.42.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^5.0.0", - "jest": "^29.5.0", - "prettier": "^3.0.0", - "source-map-support": "^0.5.21", - "supertest": "^7.0.0", - "ts-jest": "^29.1.0", - "ts-loader": "^9.4.3", - "ts-node": "^10.9.1", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.1.3" - }, - "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "rootDir": "src", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "collectCoverageFrom": [ - "**/*.(t|j)s" - ], - "coverageDirectory": "../coverage", - "testEnvironment": "node" - } -} diff --git a/micro-antifraude/src/app.module.ts b/micro-antifraude/src/app.module.ts deleted file mode 100644 index 3bcdae2d00..0000000000 --- a/micro-antifraude/src/app.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Module } from '@nestjs/common'; -import { ApplicationModule } from './application/application.module'; -import { InfraestructureModule } from './infraestructure/infraestructure.module'; - -@Module({ - imports: [ - InfraestructureModule, - ApplicationModule - ], - providers: [], -}) -export class AppModule {} diff --git a/micro-antifraude/src/application/application.module.ts b/micro-antifraude/src/application/application.module.ts deleted file mode 100644 index 22ff8a3d0a..0000000000 --- a/micro-antifraude/src/application/application.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ -import { Module } from "@nestjs/common"; -import { DomainModule } from "src/domain/domain.module"; -import { ControllerModule } from "./controller/controller.module"; - - -@Module({ - imports: [ - DomainModule, - ControllerModule - ], -}) -export class ApplicationModule {} \ No newline at end of file diff --git a/micro-antifraude/src/application/common/kafka.config.ts b/micro-antifraude/src/application/common/kafka.config.ts deleted file mode 100644 index 28c5340efc..0000000000 --- a/micro-antifraude/src/application/common/kafka.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS -*/ - -import { Property } from "src/infraestructure/config/config-server/config-server.decorador"; - -export class KafkaConfig { - - @Property('kafka.brokers.url') - public static readonly kafkabrokerUrl: string; - - @Property('kafka.service.name') - public static readonly kafkaServiceName: string; - -} \ No newline at end of file diff --git a/micro-antifraude/src/application/controller/controller.module.ts b/micro-antifraude/src/application/controller/controller.module.ts deleted file mode 100644 index c9846d24fb..0000000000 --- a/micro-antifraude/src/application/controller/controller.module.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ -import { Module } from "@nestjs/common"; -import { TransactionController } from "./v1/transaction.controller"; -import { DomainModule } from "src/domain/domain.module"; -import { TransactionPublisher } from "src/infraestructure/publisher/transaction.publisher"; -import { ClientsModule, Transport } from "@nestjs/microservices"; -import { TransactionSubscriber } from "src/infraestructure/subscriber/transaction.subscriber"; -import { KafkaConfig } from "../common/kafka.config"; - - -@Module({ - imports: [ - - ClientsModule.register([{ - name: KafkaConfig.kafkaServiceName, - transport: Transport.KAFKA, - options: { - client: { - brokers: [KafkaConfig.kafkabrokerUrl], - ssl: false, - /*sasl: { - mechanism: 'plain', - username: 'ever', - password: '123' - }*/ - } - } - }]), - DomainModule //Importamos service y port - ], - providers:[ - TransactionPublisher, - TransactionSubscriber - ], - controllers: [ - TransactionController - ] -}) - -export class ControllerModule {} \ No newline at end of file diff --git a/micro-antifraude/src/application/controller/v1/transaction.controller.ts b/micro-antifraude/src/application/controller/v1/transaction.controller.ts deleted file mode 100644 index e036a3719b..0000000000 --- a/micro-antifraude/src/application/controller/v1/transaction.controller.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ -import { Controller } from "@nestjs/common"; -import { EventPattern, Payload } from "@nestjs/microservices"; - -import { TransactionSubscriber } from "src/infraestructure/subscriber/transaction.subscriber"; - -@Controller('risk') -export class TransactionController { - - constructor( - private readonly transactionSubscriber: TransactionSubscriber - ){ - - } - - @EventPattern('topic.fraud.created') - public async handleEventCreated(@Payload() payload: any) { - await this.transactionSubscriber.handler(payload); - } - -} \ No newline at end of file diff --git a/micro-antifraude/src/domain/domain.module.ts b/micro-antifraude/src/domain/domain.module.ts deleted file mode 100644 index 0973a2c423..0000000000 --- a/micro-antifraude/src/domain/domain.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Module } from "@nestjs/common"; -import { TransctionService } from "./service"; -import { InfraestructureModule } from "src/infraestructure/infraestructure.module"; - -const providers = [ - TransctionService, -]; - -@Module({ - imports: [ - InfraestructureModule // port: import de infra ya que en este modulo "domain" una clase abstract (impl) no puede ser importado o no puede ser providers - ], - providers: [ - ...providers, - ], - exports: [ - ...providers - ] -}) -export class DomainModule {} \ No newline at end of file diff --git a/micro-antifraude/src/domain/enum/transaction_status.ts b/micro-antifraude/src/domain/enum/transaction_status.ts deleted file mode 100644 index a2ad2ea223..0000000000 --- a/micro-antifraude/src/domain/enum/transaction_status.ts +++ /dev/null @@ -1,8 +0,0 @@ - - -export enum TransactionStatus { - - PENDIING = "registrado", - APPROVED = "aprobado", - REJECTED = "rechazado" -} \ No newline at end of file diff --git a/micro-antifraude/src/domain/index.ts b/micro-antifraude/src/domain/index.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/micro-antifraude/src/domain/model/index.ts b/micro-antifraude/src/domain/model/index.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/micro-antifraude/src/domain/model/transaction-reponse.ts b/micro-antifraude/src/domain/model/transaction-reponse.ts deleted file mode 100644 index 3279324308..0000000000 --- a/micro-antifraude/src/domain/model/transaction-reponse.ts +++ /dev/null @@ -1,16 +0,0 @@ - -export class TransactionResponse { - - id: string; - - value: number; - - transactionStatus: string - - - constructor(id: string, value: number, transactionStatus: string) { - this.id = id; - this.value = value; - this.transactionStatus = transactionStatus; - } -} \ No newline at end of file diff --git a/micro-antifraude/src/domain/model/transaction.ts b/micro-antifraude/src/domain/model/transaction.ts deleted file mode 100644 index 8160d671c6..0000000000 --- a/micro-antifraude/src/domain/model/transaction.ts +++ /dev/null @@ -1,12 +0,0 @@ - -export class Transaction { - - id: string; - - value: number; - - constructor(id: string, value: number) { - this.id = id; - this.value = value; - } -} \ No newline at end of file diff --git a/micro-antifraude/src/domain/port/index.ts b/micro-antifraude/src/domain/port/index.ts deleted file mode 100644 index f8f785c7a7..0000000000 --- a/micro-antifraude/src/domain/port/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { TransactionPort } from './transaction.port' \ No newline at end of file diff --git a/micro-antifraude/src/domain/port/transaction.port.ts b/micro-antifraude/src/domain/port/transaction.port.ts deleted file mode 100644 index 3bd4c9b1d2..0000000000 --- a/micro-antifraude/src/domain/port/transaction.port.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Observable } from "rxjs"; -import { Transaction } from "../model/transaction"; - -export abstract class TransactionPort { - - abstract findAll(soryBy: string): Observable; - - abstract findById(id: number): Observable; - - abstract create(transaction: Transaction): Observable; - -} \ No newline at end of file diff --git a/micro-antifraude/src/domain/service/index.ts b/micro-antifraude/src/domain/service/index.ts deleted file mode 100644 index 424d4a6769..0000000000 --- a/micro-antifraude/src/domain/service/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { TransctionService } from './transaction.service' \ No newline at end of file diff --git a/micro-antifraude/src/domain/service/transaction.service.ts b/micro-antifraude/src/domain/service/transaction.service.ts deleted file mode 100644 index 594bf2ab68..0000000000 --- a/micro-antifraude/src/domain/service/transaction.service.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ - -import { Observable, of } from "rxjs"; -import { Injectable } from "@nestjs/common"; - -import { TransactionPort } from "../port/transaction.port"; -import { Transaction } from "../model/transaction"; -import { TransactionStatus } from "../enum/transaction_status"; -import { TransactionResponse } from "../model/transaction-reponse"; - - -@Injectable() -export class TransctionService { - - constructor( - private readonly transactionPort: TransactionPort,// podemos llamar un motor, una db de riesgos, etc - ){ - - } - - evaluateRisk(payload: Transaction): Observable { - const response: TransactionResponse = { - id: payload.id, - value: payload.value, - transactionStatus: (payload.value <= 1000) ? TransactionStatus.APPROVED: TransactionStatus.REJECTED - } - - return of(response); - } - - - -} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/adapter/adapter.module.ts b/micro-antifraude/src/infraestructure/adapter/adapter.module.ts deleted file mode 100644 index 4ab06ae40f..0000000000 --- a/micro-antifraude/src/infraestructure/adapter/adapter.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module } from "@nestjs/common"; -import { SecondaryAdapterModule } from "./secondary/secondary-adapter.module"; - - -@Module({ - - imports: [ - SecondaryAdapterModule, // SQL Ó NOSQL - ], - exports: [ - SecondaryAdapterModule, // SQL Ó NOSQL - ] -}) -export class AdapterModule {} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/adapter/secondary/secondary-adapter.module.ts b/micro-antifraude/src/infraestructure/adapter/secondary/secondary-adapter.module.ts deleted file mode 100644 index a257ac878b..0000000000 --- a/micro-antifraude/src/infraestructure/adapter/secondary/secondary-adapter.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Module } from "@nestjs/common"; - - -@Module({ - imports: [ - ], - providers: [ - ], - exports: [ - ] -}) -export class SecondaryAdapterModule {} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/adapter/secondary/transaction.adapter.ts b/micro-antifraude/src/infraestructure/adapter/secondary/transaction.adapter.ts deleted file mode 100644 index 84874fc938..0000000000 --- a/micro-antifraude/src/infraestructure/adapter/secondary/transaction.adapter.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ - -import { Injectable } from "@nestjs/common"; -import { Observable } from "rxjs"; -import { Transaction } from "src/domain/model/transaction"; -import { TransactionPort } from "src/domain/port"; - -@Injectable() -export class TransactionAdapter implements TransactionPort { - - constructor( - ) {} - - findAll(sortBy: string): Observable { - return; - } - - findById(id: number): Observable { - return; - } - - create(transaction: Transaction) : Observable{ - return; - } - delete() { - return; - } - -} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/config-server/config-server.decorador.ts b/micro-antifraude/src/infraestructure/config/config-server/config-server.decorador.ts deleted file mode 100644 index a6be24ad0e..0000000000 --- a/micro-antifraude/src/infraestructure/config/config-server/config-server.decorador.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { envConfig } from "./env/environments"; - - - -export function Property(valueName: string):any { - - let value = ''; - - value = envConfig[valueName]; - - if(value === undefined) { - throw new Error(`The property ${valueName} is not value`); - } - - // obtiene valores de envConfig. Aigna a propiedades de clase en tiempo de ejecución. - return async (target:any, fieldProperty:string) => { - // Tiene como objetivo permitir la definición de nuevas propiedades o la modificación de propiedades existentes en un objeto - Object.defineProperty(target, fieldProperty, { - value, // valor optenido - configurable: true, - enumerable: false, - }); - } -} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/config-server/env/environments.ts b/micro-antifraude/src/infraestructure/config/config-server/env/environments.ts deleted file mode 100644 index 8ff2967ff9..0000000000 --- a/micro-antifraude/src/infraestructure/config/config-server/env/environments.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { readFileSync } from "fs"; // Lee el contenido de un archivo -import { parse } from "dotenv"; // Analiza el contenido del archivo como variables de entorno y devuelve un objeto con esas variables. - - - -const env = process.env.ENVIRONMENT || 'local'; - -let propertiesLocation = null; - -const propertyFilename= `application-${env}.properties`; - -const property = process.env.NEST_PROPERTIES_LOCATION || ''; - -propertiesLocation = `${property}${propertyFilename}`; - -console.log('enviroment type ecr ',propertiesLocation); - -export const envConfig: { [key: string]:any } = parse(readFileSync(propertiesLocation)); diff --git a/micro-antifraude/src/infraestructure/config/kafka/helper.config.ts b/micro-antifraude/src/infraestructure/config/kafka/helper.config.ts deleted file mode 100644 index 3288a8ec95..0000000000 --- a/micro-antifraude/src/infraestructure/config/kafka/helper.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { KafkaOptions, Transport } from "@nestjs/microservices"; -import { KafkaConfig } from "./kafka.config"; - - -export const KAFKA_CONFIG: KafkaOptions = { - transport: Transport.KAFKA, - options: { - /*subscribe: { - fromBeginning: true, - }*/ - consumer: { - groupId: KafkaConfig.kafkaGroupId - }, - client: { - brokers: [KafkaConfig.kafkabrokerUrl], - ssl: false, - /*sasl: { - mechanism: 'plain', - username: 'ever', - password: '123' - }*/ - } - } -} diff --git a/micro-antifraude/src/infraestructure/config/kafka/kafka.config.ts b/micro-antifraude/src/infraestructure/config/kafka/kafka.config.ts deleted file mode 100644 index 635694616e..0000000000 --- a/micro-antifraude/src/infraestructure/config/kafka/kafka.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS -*/ - -import { Property } from "../config-server/config-server.decorador"; - - -export class KafkaConfig { - - @Property('kafka.brokers.url') - public static readonly kafkabrokerUrl: string; - - @Property('kafka.brokers.group.id') - public static readonly kafkaGroupId: string; - -} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/shared.module.ts b/micro-antifraude/src/infraestructure/config/shared.module.ts deleted file mode 100644 index 092e931628..0000000000 --- a/micro-antifraude/src/infraestructure/config/shared.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from "@nestjs/common"; - -@Module({ - imports: [ - ] -}) -export class SharedModule { - -} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/sql/pg-db.config.ts b/micro-antifraude/src/infraestructure/config/sql/pg-db.config.ts deleted file mode 100644 index ae61bb9aa3..0000000000 --- a/micro-antifraude/src/infraestructure/config/sql/pg-db.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Property } from "../config-server/config-server.decorador"; - - -export class PGDBConfig { - - @Property('db.pg.url') - public static readonly pgdbUri: string; - - @Property('db.pg.name') - public static readonly pgdbName: string; - - @Property('db.pg.port') - public static readonly pgdbPort: number; - - @Property('db.pg.user') - public static readonly pgdbUser: string; - - @Property('db.pg.password') - public static readonly pgdbPassword: string; -} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/config/sql/postgresql.module.ts b/micro-antifraude/src/infraestructure/config/sql/postgresql.module.ts deleted file mode 100644 index 5e9d6362e4..0000000000 --- a/micro-antifraude/src/infraestructure/config/sql/postgresql.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Module } from "@nestjs/common"; -import { ConfigModule } from "@nestjs/config"; -import { TypeOrmModule } from "@nestjs/typeorm"; -import { PGDBConfig } from "./pg-db.config"; - -@Module({ - imports: [ - ConfigModule.forRoot(), // Global para variables de entorno - - TypeOrmModule.forRoot({ - type: 'postgres', - host: PGDBConfig.pgdbUri, // process.env.DB_HOST - port: PGDBConfig.pgdbPort, //+process.env.DB_PORT, - database: PGDBConfig.pgdbName, // process.env.DB_NAME, - username: PGDBConfig.pgdbUser, //process.env.DB_USERNAME, - password: PGDBConfig.pgdbPassword, //process.env.DB_PASSWORD, - autoLoadEntities: true, - synchronize: false // Para sincronizar atributos de tablas de base de datos. PRD: false - }), - ] -}) -export class PostgreSqlModule {} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/entity/transaction.entity.ts b/micro-antifraude/src/infraestructure/entity/transaction.entity.ts deleted file mode 100644 index 169acad47d..0000000000 --- a/micro-antifraude/src/infraestructure/entity/transaction.entity.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; - -@Entity({name: 'transaciones'}) -export class TransactionEntity { - - @PrimaryGeneratedColumn() - id: number; - - @Column({ name: 'id_debit'}) - accountExternalIdDebit: string; - - @Column({ name: 'id_credit'}) - accountExternalIdCredit: string; - - @Column({ name: 'id_transfer_type'}) // 1: pendiente 2: aprodo, 3: rechazado - tranferTypeId: number; - - @Column({ name: 'valor'}) - value: number; - - @Column({ name: 'transaction_status'}) - transactionStatus: string; - - state: boolean; - -} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/infraestructure.module.ts b/micro-antifraude/src/infraestructure/infraestructure.module.ts deleted file mode 100644 index 412a1ddcd9..0000000000 --- a/micro-antifraude/src/infraestructure/infraestructure.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ -import { Module } from "@nestjs/common"; -import { AdapterModule } from "./adapter/adapter.module"; -import { TransactionPort } from "src/domain/port"; - -//NOTA: Elegir que tipo de adaptador(primary ó secondary) será la fuente de información(select, create, update, delete) para cada adaptador -import { TransactionAdapter } from "./adapter/secondary/transaction.adapter"; -import { SharedModule } from "./config/shared.module"; - -const providers = [ - { - provide: TransactionPort, - useClass: TransactionAdapter - }, -] -@Module({ - imports: [ - SharedModule, - AdapterModule, - ], - providers: [ - ...providers - ], - exports: [ - TransactionPort - ], -}) -export class InfraestructureModule {} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/publisher/transaction.publisher.ts b/micro-antifraude/src/infraestructure/publisher/transaction.publisher.ts deleted file mode 100644 index b7840ffc83..0000000000 --- a/micro-antifraude/src/infraestructure/publisher/transaction.publisher.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ -import { Inject, Injectable} from "@nestjs/common"; -import { ClientProxy } from "@nestjs/microservices"; -import { TransactionResponse } from "src/domain/model/transaction-reponse"; - - -@Injectable() -export class TransactionPublisher { // publisher solo para convertir datos no mucha logica - - - constructor(@Inject('KAFKA') private readonly kafka: ClientProxy) {} - - publisherApproved(payload: TransactionResponse) { - - const message: string = JSON.stringify(payload); - - this.kafka.emit('topic.fraud.approved', message); - } - - publisherRejected(payload: TransactionResponse) { - - const message: string = JSON.stringify(payload); - - this.kafka.emit('topic.fraud.rejected', message); - } -} \ No newline at end of file diff --git a/micro-antifraude/src/infraestructure/subscriber/transaction.subscriber.ts b/micro-antifraude/src/infraestructure/subscriber/transaction.subscriber.ts deleted file mode 100644 index 6c9d4e6516..0000000000 --- a/micro-antifraude/src/infraestructure/subscriber/transaction.subscriber.ts +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ - -import { Injectable, Logger } from '@nestjs/common'; - -import { TransctionService } from 'src/domain/service'; -import { TransactionPublisher } from '../publisher/transaction.publisher'; -import { Transaction } from 'src/domain/model/transaction'; -import { TransactionResponse } from 'src/domain/model/transaction-reponse'; -import { TransactionStatus } from 'src/domain/enum/transaction_status'; - - -@Injectable() -export class TransactionSubscriber { - - constructor( - private readonly transactionService: TransctionService, - private readonly transactionPublisher: TransactionPublisher - ) {} - - - private readonly logger = new Logger(TransactionSubscriber.name); - - /** - * Consumer encargado de recepcioner las transacciones pendientes - * @param transaction - La transacción a procesar - * - */ - public async handler(payload: Transaction): Promise { - - this.logger.log(`starting process`); - - this.logger.log(`message: ${JSON.stringify(payload)}`); - - this.transactionService.evaluateRisk(payload).subscribe({ - next: (response: TransactionResponse) => { - if(response.transactionStatus === TransactionStatus.APPROVED) { - this.transactionPublisher.publisherApproved(response); - } else { - this.transactionPublisher.publisherRejected(response); - } - }, - error: (err: any) => { - this.logger.error(`Error processing transaction: ${err}`); - }, - }); - - } - -} diff --git a/micro-antifraude/src/main.ts b/micro-antifraude/src/main.ts deleted file mode 100644 index d33350393a..0000000000 --- a/micro-antifraude/src/main.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { NestFactory } from '@nestjs/core'; -import { AppModule } from './app.module'; -import { Logger } from '@nestjs/common'; -import { KAFKA_CONFIG } from './infraestructure/config/kafka/helper.config'; - -const port = process.env.PORT || '3001'; - -async function bootstrap() { - - const logger = new Logger('Bootstrap'); - - try { - const app = await NestFactory.create(AppModule); - //FIXME: Refactorizar agregando en su propio módulo y en el modulo de infra - app.connectMicroservice(KAFKA_CONFIG); - app.startAllMicroservices(); - await app.listen(port); - - logger.log(`App running on port: ${ port }`); - - } catch (error) { - logger.error(`Error instantiated server`, error); - } -} - -void bootstrap(); \ No newline at end of file diff --git a/micro-antifraude/test/app.e2e-spec.ts b/micro-antifraude/test/app.e2e-spec.ts deleted file mode 100644 index 0012dcd2c0..0000000000 --- a/micro-antifraude/test/app.e2e-spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { INestApplication } from '@nestjs/common'; -import * as request from 'supertest'; -import { AppModule } from '../src/app.module'; - -describe('AppController (e2e)', () => { - let app: INestApplication; - - beforeEach(async () => { - const moduleFixture: TestingModule = await Test.createTestingModule({ - imports: [AppModule], - }).compile(); - - app = moduleFixture.createNestApplication(); - await app.init(); - }); - - it('/ (GET)', () => { - return request(app.getHttpServer()) - .get('/') - .expect(200) - .expect('Hello World!'); - }); -}); diff --git a/micro-antifraude/test/jest-e2e.json b/micro-antifraude/test/jest-e2e.json deleted file mode 100644 index e9d912f3e3..0000000000 --- a/micro-antifraude/test/jest-e2e.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "moduleFileExtensions": ["js", "json", "ts"], - "rootDir": ".", - "testEnvironment": "node", - "testRegex": ".e2e-spec.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - } -} diff --git a/micro-antifraude/tsconfig.build.json b/micro-antifraude/tsconfig.build.json deleted file mode 100644 index 64f86c6bd2..0000000000 --- a/micro-antifraude/tsconfig.build.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] -} diff --git a/micro-antifraude/tsconfig.json b/micro-antifraude/tsconfig.json deleted file mode 100644 index 95f5641cf7..0000000000 --- a/micro-antifraude/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "declaration": true, - "removeComments": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "allowSyntheticDefaultImports": true, - "target": "ES2021", - "sourceMap": true, - "outDir": "./dist", - "baseUrl": "./", - "incremental": true, - "skipLibCheck": true, - "strictNullChecks": false, - "noImplicitAny": false, - "strictBindCallApply": false, - "forceConsistentCasingInFileNames": false, - "noFallthroughCasesInSwitch": false - } -} diff --git a/micro-transaction/.eslintrc.js b/micro-transaction/.eslintrc.js deleted file mode 100644 index 259de13c73..0000000000 --- a/micro-transaction/.eslintrc.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname, - sourceType: 'module', - }, - plugins: ['@typescript-eslint/eslint-plugin'], - extends: [ - 'plugin:@typescript-eslint/recommended', - 'plugin:prettier/recommended', - ], - root: true, - env: { - node: true, - jest: true, - }, - ignorePatterns: ['.eslintrc.js'], - rules: { - '@typescript-eslint/interface-name-prefix': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-explicit-any': 'off', - }, -}; diff --git a/micro-transaction/.gitignore b/micro-transaction/.gitignore deleted file mode 100644 index 4b56acfbeb..0000000000 --- a/micro-transaction/.gitignore +++ /dev/null @@ -1,56 +0,0 @@ -# compiled output -/dist -/node_modules -/build - -# Logs -logs -*.log -npm-debug.log* -pnpm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# OS -.DS_Store - -# Tests -/coverage -/.nyc_output - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# temp directory -.temp -.tmp - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/micro-transaction/.prettierrc b/micro-transaction/.prettierrc deleted file mode 100644 index dcb72794f5..0000000000 --- a/micro-transaction/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all" -} \ No newline at end of file diff --git a/micro-transaction/Dockerfile b/micro-transaction/Dockerfile deleted file mode 100644 index d318e3e186..0000000000 --- a/micro-transaction/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM node:18.20.4-alpine3.19 - -# Crea y establece el directorio de trabajo -WORKDIR /app - -# Copia los archivos de la aplicación -COPY . . - -# Instala las dependencias -RUN npm install - -# Compila la aplicación -RUN npm run build - -# Expone el puerto en el que la aplicación se ejecutará -EXPOSE 3000 - -# Comando para ejecutar la aplicación -CMD ["npm", "run", "start:prod"] diff --git a/micro-transaction/README.md b/micro-transaction/README.md deleted file mode 100644 index eb5cff377f..0000000000 --- a/micro-transaction/README.md +++ /dev/null @@ -1,32 +0,0 @@ -

- Nest Logo -

- - -# Microservicios antifraude aplicando arquitectura hexagonal -## Requisitos -- nodejs: v 18.20.4 - -## Estructura del Proyecto Basado en Aplication, Domain, Infrastructure -1) ``Capa Application`` -2) ``Capa de Dominio (núcleo-core)`` -3) ``Capa de Infraestructura`` - -## Funcionalidad -- Probar por postman : -```bash -curl --location 'localhost:3000/transactions' \ ---header 'Content-Type: application/json' \ ---data '{ - "tranferTypeId": 1, - "value": 2 -}' - -``` -## Running the app -- npm run start:dev - -```bash -# watch mode -$ npm run start:dev -``` diff --git a/micro-transaction/application-local.properties b/micro-transaction/application-local.properties deleted file mode 100644 index 97fabad8f0..0000000000 --- a/micro-transaction/application-local.properties +++ /dev/null @@ -1,17 +0,0 @@ -environment.local = true - -config.graphql.env.access=true - - -########### DATABASE PG ########### -db.pg.url = localhost -db.pg.name = dbtransaction -db.pg.port = 5432 -db.pg.user = postgres -db.pg.password = 123 - -########### KAFKA ########### -#######para un solo broker####### -kafka.service.name = KAFKA -kafka.brokers.url = localhost:9092 -kafka.brokers.group.id = my-group-id-transaction diff --git a/micro-transaction/application-prd.properties b/micro-transaction/application-prd.properties deleted file mode 100644 index 47eb432dba..0000000000 --- a/micro-transaction/application-prd.properties +++ /dev/null @@ -1,19 +0,0 @@ -environment.local = true - -config.graphql.env.access=true - - -########### DATABASE PG ############ -# localhost -db.pg.url = postgres -db.pg.name = dbtransaction -db.pg.port = 5432 -db.pg.user = postgres -db.pg.password = postgres - -########### KAFKA ########### -#######para un solo broker######## -kafka.service.name = KAFKA -#localhost:9092 -kafka.brokers.url = kafka:29092 -kafka.brokers.group.id = my-group-id-transaction diff --git a/micro-transaction/nest-cli.json b/micro-transaction/nest-cli.json deleted file mode 100644 index f9aa683b1a..0000000000 --- a/micro-transaction/nest-cli.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/nest-cli", - "collection": "@nestjs/schematics", - "sourceRoot": "src", - "compilerOptions": { - "deleteOutDir": true - } -} diff --git a/micro-transaction/package-lock.json b/micro-transaction/package-lock.json deleted file mode 100644 index 7d1919bb5a..0000000000 --- a/micro-transaction/package-lock.json +++ /dev/null @@ -1,9148 +0,0 @@ -{ - "name": "micro-transaction", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "micro-transaction", - "version": "0.0.1", - "license": "UNLICENSED", - "dependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/config": "^3.2.3", - "@nestjs/core": "^10.0.0", - "@nestjs/microservices": "^10.3.10", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/typeorm": "^10.0.2", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.1", - "dotenv": "^16.4.5", - "kafkajs": "^2.2.4", - "pg": "^8.12.0", - "reflect-metadata": "^0.2.0", - "rxjs": "^7.8.1", - "typeorm": "^0.3.20", - "uuid": "^10.0.0" - }, - "devDependencies": { - "@nestjs/cli": "^10.0.0", - "@nestjs/schematics": "^10.0.0", - "@nestjs/testing": "^10.0.0", - "@types/express": "^4.17.17", - "@types/jest": "^29.5.2", - "@types/node": "^20.3.1", - "@types/supertest": "^6.0.0", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.42.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^5.0.0", - "jest": "^29.5.0", - "prettier": "^3.0.0", - "source-map-support": "^0.5.21", - "supertest": "^7.0.0", - "ts-jest": "^29.1.0", - "ts-loader": "^9.4.3", - "ts-node": "^10.9.1", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.1.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "17.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz", - "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "17.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz", - "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.8", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.8", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics-cli": { - "version": "17.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.8.tgz", - "integrity": "sha512-TjmiwWJarX7oqvNiRAroQ5/LeKUatxBOCNEuKXO/PV8e7pn/Hr/BqfFm+UcYrQoFdZplmtNAfqmbqgVziKvCpA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.8", - "@angular-devkit/schematics": "17.3.8", - "ansi-colors": "4.1.3", - "inquirer": "9.2.15", - "symbol-observable": "4.0.0", - "yargs-parser": "21.1.1" - }, - "bin": { - "schematics": "bin/schematics.js" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", - "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", - "dev": true, - "dependencies": { - "@ljharb/through": "^2.3.12", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^3.2.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "devOptional": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "devOptional": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", - "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nestjs/cli": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.2.tgz", - "integrity": "sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.8", - "@angular-devkit/schematics": "17.3.8", - "@angular-devkit/schematics-cli": "17.3.8", - "@nestjs/schematics": "^10.0.1", - "chalk": "4.1.2", - "chokidar": "3.6.0", - "cli-table3": "0.6.5", - "commander": "4.1.1", - "fork-ts-checker-webpack-plugin": "9.0.2", - "glob": "10.4.2", - "inquirer": "8.2.6", - "node-emoji": "1.11.0", - "ora": "5.4.1", - "tree-kill": "1.2.2", - "tsconfig-paths": "4.2.0", - "tsconfig-paths-webpack-plugin": "4.1.0", - "typescript": "5.3.3", - "webpack": "5.92.1", - "webpack-node-externals": "3.0.0" - }, - "bin": { - "nest": "bin/nest.js" - }, - "engines": { - "node": ">= 16.14" - }, - "peerDependencies": { - "@swc/cli": "^0.1.62 || ^0.3.0 || ^0.4.0", - "@swc/core": "^1.3.62" - }, - "peerDependenciesMeta": { - "@swc/cli": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/@nestjs/cli/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nestjs/cli/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nestjs/cli/node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@nestjs/cli/node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/@nestjs/common": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.10.tgz", - "integrity": "sha512-H8k0jZtxk1IdtErGDmxFRy0PfcOAUg41Prrqpx76DQusGGJjsaovs1zjXVD1rZWaVYchfT1uczJ6L4Kio10VNg==", - "dependencies": { - "iterare": "1.2.1", - "tslib": "2.6.3", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "node_modules/@nestjs/config": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.3.tgz", - "integrity": "sha512-p6yv/CvoBewJ72mBq4NXgOAi2rSQNWx3a+IMJLVKS2uiwFCOQQuiIatGwq6MRjXV3Jr+B41iUO8FIf4xBrZ4/w==", - "dependencies": { - "dotenv": "16.4.5", - "dotenv-expand": "10.0.0", - "lodash": "4.17.21" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "rxjs": "^7.1.0" - } - }, - "node_modules/@nestjs/core": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.10.tgz", - "integrity": "sha512-ZbQ4jovQyzHtCGCrzK5NdtW1SYO2fHSsgSY1+/9WdruYCUra+JDkWEXgZ4M3Hv480Dl3OXehAmY1wCOojeMyMQ==", - "hasInstallScript": true, - "dependencies": { - "@nuxtjs/opencollective": "0.3.2", - "fast-safe-stringify": "2.1.1", - "iterare": "1.2.1", - "path-to-regexp": "3.2.0", - "tslib": "2.6.3", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/websockets": "^10.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 - } - } - }, - "node_modules/@nestjs/microservices": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-10.3.10.tgz", - "integrity": "sha512-zZrilhZmXU2Ik5Usrcy4qEX262Uhvz0/9XlIdX6SRn8I39ns1EE9tAhEBmmkMwh7lsEikRFa4aaa05loi8Gsow==", - "dependencies": { - "iterare": "1.2.1", - "tslib": "2.6.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@grpc/grpc-js": "*", - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/websockets": "^10.0.0", - "amqp-connection-manager": "*", - "amqplib": "*", - "cache-manager": "*", - "ioredis": "*", - "kafkajs": "*", - "mqtt": "*", - "nats": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "@grpc/grpc-js": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - }, - "amqp-connection-manager": { - "optional": true - }, - "amqplib": { - "optional": true - }, - "cache-manager": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "kafkajs": { - "optional": true - }, - "mqtt": { - "optional": true - }, - "nats": { - "optional": true - } - } - }, - "node_modules/@nestjs/platform-express": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.10.tgz", - "integrity": "sha512-wK2ow3CZI2KFqWeEpPmoR300OB6BcBLxARV1EiClJLCj4S1mZsoCmS0YWgpk3j1j6mo0SI8vNLi/cC2iZPEPQA==", - "dependencies": { - "body-parser": "1.20.2", - "cors": "2.8.5", - "express": "4.19.2", - "multer": "1.4.4-lts.1", - "tslib": "2.6.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0" - } - }, - "node_modules/@nestjs/schematics": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.3.tgz", - "integrity": "sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.8", - "@angular-devkit/schematics": "17.3.8", - "comment-json": "4.2.3", - "jsonc-parser": "3.3.1", - "pluralize": "8.0.0" - }, - "peerDependencies": { - "typescript": ">=4.8.2" - } - }, - "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true - }, - "node_modules/@nestjs/testing": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.10.tgz", - "integrity": "sha512-i3HAtVQJijxNxJq1k39aelyJlyEIBRONys7IipH/4r8W0J+M1V+y5EKDOyi4j1SdNSb/vmNyWpZ2/ewZjl3kRA==", - "dev": true, - "dependencies": { - "tslib": "2.6.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0" - }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - } - } - }, - "node_modules/@nestjs/typeorm": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz", - "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==", - "dependencies": { - "uuid": "9.0.1" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", - "reflect-metadata": "^0.1.13 || ^0.2.0", - "rxjs": "^7.2.0", - "typeorm": "^0.3.0" - } - }, - "node_modules/@nestjs/typeorm/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nuxtjs/opencollective": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", - "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.0", - "node-fetch": "^2.6.1" - }, - "bin": { - "opencollective": "bin/opencollective.js" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@sqltools/formatter": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", - "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "devOptional": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "devOptional": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cookiejar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", - "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/methods": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", - "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.14.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", - "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", - "devOptional": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/superagent": { - "version": "8.1.8", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.8.tgz", - "integrity": "sha512-nTqHJ2OTa7PFEpLahzSEEeFeqbMpmcN7OeayiOc7v+xk+/vyTKljRe+o4MPqSnPeRCMvtxuLG+5QqluUVQJOnA==", - "dev": true, - "dependencies": { - "@types/cookiejar": "^2.1.5", - "@types/methods": "^1.1.4", - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/supertest": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", - "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", - "dev": true, - "dependencies": { - "@types/methods": "^1.1.4", - "@types/superagent": "^8.1.0" - } - }, - "node_modules/@types/validator": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz", - "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==" - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "devOptional": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "devOptional": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001647", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001647.tgz", - "integrity": "sha512-n83xdNiyeNcHpzWY+1aFbqCK7LuLfBricc4+alSQL2Xb6OR3XpnQAmlDG+pQcdTfiHRuLcQ96VOfrPSGiNJYSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", - "dev": true - }, - "node_modules/class-transformer": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" - }, - "node_modules/class-validator": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", - "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", - "dependencies": { - "@types/validator": "^13.11.8", - "libphonenumber-js": "^1.10.53", - "validator": "^13.9.0" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-highlight": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", - "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", - "dependencies": { - "chalk": "^4.0.0", - "highlight.js": "^10.7.1", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "yargs": "^16.0.0" - }, - "bin": { - "highlight": "bin/highlight" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/cli-highlight/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cli-highlight/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/cli-highlight/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cli-highlight/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/comment-json": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", - "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", - "dev": true, - "dependencies": { - "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", - "engines": { - "node": ">=12" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", - "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^8.2.0", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "typescript": ">3.6.0", - "webpack": "^5.11.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", - "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "engines": { - "node": "*" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "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.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterare": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", - "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kafkajs": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-2.2.4.tgz", - "integrity": "sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libphonenumber-js": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.5.tgz", - "integrity": "sha512-TwHR5BZxGRODtAfz03szucAkjT5OArXr+94SMtAM2pYXIlQNVMrxvb6uSCbnaJJV6QXEyICk7+l6QPgn72WHhg==" - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multer": { - "version": "1.4.4-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", - "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", - "dependencies": { - "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/path-to-regexp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", - "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pg": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", - "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", - "dependencies": { - "pg-connection-string": "^2.6.4", - "pg-pool": "^3.6.2", - "pg-protocol": "^1.6.1", - "pg-types": "^2.1.0", - "pgpass": "1.x" - }, - "engines": { - "node": ">= 8.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.1.1" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", - "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", - "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", - "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dependencies": { - "split2": "^4.1.0" - } - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true - }, - "node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/superagent": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", - "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", - "dev": true, - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^3.5.1", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/supertest": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", - "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^9.0.1" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", - "dev": true, - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.31.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", - "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "ejs": "^3.1.10", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "devOptional": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "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 - } - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", - "integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tsconfig-paths": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typeorm": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz", - "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==", - "dependencies": { - "@sqltools/formatter": "^1.2.5", - "app-root-path": "^3.1.0", - "buffer": "^6.0.3", - "chalk": "^4.1.2", - "cli-highlight": "^2.1.11", - "dayjs": "^1.11.9", - "debug": "^4.3.4", - "dotenv": "^16.0.3", - "glob": "^10.3.10", - "mkdirp": "^2.1.3", - "reflect-metadata": "^0.2.1", - "sha.js": "^2.4.11", - "tslib": "^2.5.0", - "uuid": "^9.0.0", - "yargs": "^17.6.2" - }, - "bin": { - "typeorm": "cli.js", - "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", - "typeorm-ts-node-esm": "cli-ts-node-esm.js" - }, - "engines": { - "node": ">=16.13.0" - }, - "funding": { - "url": "https://opencollective.com/typeorm" - }, - "peerDependencies": { - "@google-cloud/spanner": "^5.18.0", - "@sap/hana-client": "^2.12.25", - "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0", - "hdb-pool": "^0.1.6", - "ioredis": "^5.0.4", - "mongodb": "^5.8.0", - "mssql": "^9.1.1 || ^10.0.1", - "mysql2": "^2.2.5 || ^3.0.1", - "oracledb": "^6.3.0", - "pg": "^8.5.1", - "pg-native": "^3.0.0", - "pg-query-stream": "^4.0.0", - "redis": "^3.1.1 || ^4.0.0", - "sql.js": "^1.4.0", - "sqlite3": "^5.0.3", - "ts-node": "^10.7.0", - "typeorm-aurora-data-api-driver": "^2.0.0" - }, - "peerDependenciesMeta": { - "@google-cloud/spanner": { - "optional": true - }, - "@sap/hana-client": { - "optional": true - }, - "better-sqlite3": { - "optional": true - }, - "hdb-pool": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "mongodb": { - "optional": true - }, - "mssql": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "oracledb": { - "optional": true - }, - "pg": { - "optional": true - }, - "pg-native": { - "optional": true - }, - "pg-query-stream": { - "optional": true - }, - "redis": { - "optional": true - }, - "sql.js": { - "optional": true - }, - "sqlite3": { - "optional": true - }, - "ts-node": { - "optional": true - }, - "typeorm-aurora-data-api-driver": { - "optional": true - } - } - }, - "node_modules/typeorm/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/typeorm/node_modules/mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeorm/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", - "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", - "dependencies": { - "@lukeed/csprng": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "devOptional": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/validator": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", - "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", - "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/micro-transaction/package.json b/micro-transaction/package.json deleted file mode 100644 index a8f87cad9d..0000000000 --- a/micro-transaction/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "micro-transaction", - "version": "0.0.1", - "description": "", - "author": "", - "private": true, - "license": "UNLICENSED", - "scripts": { - "build": "nest build", - "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", - "start:dev": "nest start --watch", - "start:debug": "nest start --debug --watch", - "start:prod": "node dist/main", - "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", - "test": "jest", - "test:watch": "jest --watch", - "test:cov": "jest --coverage", - "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./test/jest-e2e.json" - }, - "dependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/config": "^3.2.3", - "@nestjs/core": "^10.0.0", - "@nestjs/microservices": "^10.3.10", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/typeorm": "^10.0.2", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.1", - "dotenv": "^16.4.5", - "kafkajs": "^2.2.4", - "pg": "^8.12.0", - "reflect-metadata": "^0.2.0", - "rxjs": "^7.8.1", - "typeorm": "^0.3.20", - "uuid": "^10.0.0" - }, - "devDependencies": { - "@nestjs/cli": "^10.0.0", - "@nestjs/schematics": "^10.0.0", - "@nestjs/testing": "^10.0.0", - "@types/express": "^4.17.17", - "@types/jest": "^29.5.2", - "@types/node": "^20.3.1", - "@types/supertest": "^6.0.0", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.42.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^5.0.0", - "jest": "^29.5.0", - "prettier": "^3.0.0", - "source-map-support": "^0.5.21", - "supertest": "^7.0.0", - "ts-jest": "^29.1.0", - "ts-loader": "^9.4.3", - "ts-node": "^10.9.1", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.1.3" - }, - "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "rootDir": "src", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "collectCoverageFrom": [ - "**/*.(t|j)s" - ], - "coverageDirectory": "../coverage", - "testEnvironment": "node" - } -} diff --git a/micro-transaction/src/app.module.ts b/micro-transaction/src/app.module.ts deleted file mode 100644 index 3bcdae2d00..0000000000 --- a/micro-transaction/src/app.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Module } from '@nestjs/common'; -import { ApplicationModule } from './application/application.module'; -import { InfraestructureModule } from './infraestructure/infraestructure.module'; - -@Module({ - imports: [ - InfraestructureModule, - ApplicationModule - ], - providers: [], -}) -export class AppModule {} diff --git a/micro-transaction/src/application/application.module.ts b/micro-transaction/src/application/application.module.ts deleted file mode 100644 index 22ff8a3d0a..0000000000 --- a/micro-transaction/src/application/application.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ -import { Module } from "@nestjs/common"; -import { DomainModule } from "src/domain/domain.module"; -import { ControllerModule } from "./controller/controller.module"; - - -@Module({ - imports: [ - DomainModule, - ControllerModule - ], -}) -export class ApplicationModule {} \ No newline at end of file diff --git a/micro-transaction/src/application/common/kafka.config.ts b/micro-transaction/src/application/common/kafka.config.ts deleted file mode 100644 index d65448df54..0000000000 --- a/micro-transaction/src/application/common/kafka.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS -*/ - -import { Property } from "src/infraestructure/config/config-server/config-server.decorador"; - - -export class KafkaConfig { - - @Property('kafka.brokers.url') - public static readonly kafkabrokerUrl: string; - - @Property('kafka.service.name') - public static readonly kafkaServiceName: string; - -} \ No newline at end of file diff --git a/micro-transaction/src/application/controller/controller.module.ts b/micro-transaction/src/application/controller/controller.module.ts deleted file mode 100644 index 6f42e29888..0000000000 --- a/micro-transaction/src/application/controller/controller.module.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Module } from "@nestjs/common"; -import { TransactionController } from "./v1/transaction.controller"; -import { DomainModule } from "src/domain/domain.module"; -import { ClientsModule, Transport } from "@nestjs/microservices"; - -import { KafkaConfig } from "../common/kafka.config"; -import { TransactionPublisher } from "src/infraestructure/publisher/transaction.publisher"; -import { TransactionSubscriber } from "src/infraestructure/subscriber/transaction.subscriber"; - - -@Module({ - imports: [ - - ClientsModule.register([{ - name: KafkaConfig.kafkaServiceName, - transport: Transport.KAFKA, - options: { - client: { - brokers: [KafkaConfig.kafkabrokerUrl], - ssl: false, - /*sasl: { - mechanism: 'plain', - username: 'ever', - password: '123' - }*/ - } - } - }]), - DomainModule //Importamos service y port - ], - providers:[ - TransactionPublisher, - TransactionSubscriber - ], - controllers: [ - TransactionController - ] -}) - -export class ControllerModule {} \ No newline at end of file diff --git a/micro-transaction/src/application/controller/v1/transaction.controller.ts b/micro-transaction/src/application/controller/v1/transaction.controller.ts deleted file mode 100644 index 1c87b6f2b0..0000000000 --- a/micro-transaction/src/application/controller/v1/transaction.controller.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ - -import { Body, Controller, Get, Param, ParseUUIDPipe, Post } from "@nestjs/common"; -import { EventPattern, Payload } from "@nestjs/microservices"; -import { map, tap } from "rxjs"; -import { Transaction } from "src/domain/model/transaction"; -import { TransctionService } from "src/domain/service"; -import { TransactionPublisher } from "src/infraestructure/publisher/transaction.publisher"; -import { TransactionSubscriber } from "src/infraestructure/subscriber/transaction.subscriber"; - -@Controller('transactions') -export class TransactionController { - - constructor( - private readonly transactionService: TransctionService, - private readonly transactionPublisher: TransactionPublisher, - private readonly transactionSubscriber: TransactionSubscriber - ){ - - } - - @Get() - findAll() { - return this.transactionService.findAll('createdAt'); - } - - /** - *Crea una nueva transacción - * @param payload - request de la transaction - */ - @Post() - public registerTransacion(@Body() payload: Transaction) { // FIXME: Agregar validador de dto - return this.transactionService.create(payload).pipe( - tap(resp => { - this.transactionPublisher.publisherRegister(resp); - return resp; - }), - map(transaction => transaction) - ); - } - - - @Get(':id') - findBydId(@Param('id', ParseUUIDPipe) id: string){ - return this.transactionService.findById(id); - } - - - //FIXME: Refactorización: Cuando nestjs acepte EventPattern en un @Injectable() (service) - - /***** consumers *****/ - - @EventPattern('topic.fraud.approved') - public async handleEventApprove(@Payload() payload: any) { - - await this.transactionSubscriber.handler(payload); - } - - @EventPattern('topic.fraud.rejected') - public async handleEventRejected(@Payload() payload: any) { - await this.transactionSubscriber.handler(payload); - } - - - -} \ No newline at end of file diff --git a/micro-transaction/src/domain/domain.module.ts b/micro-transaction/src/domain/domain.module.ts deleted file mode 100644 index 0973a2c423..0000000000 --- a/micro-transaction/src/domain/domain.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Module } from "@nestjs/common"; -import { TransctionService } from "./service"; -import { InfraestructureModule } from "src/infraestructure/infraestructure.module"; - -const providers = [ - TransctionService, -]; - -@Module({ - imports: [ - InfraestructureModule // port: import de infra ya que en este modulo "domain" una clase abstract (impl) no puede ser importado o no puede ser providers - ], - providers: [ - ...providers, - ], - exports: [ - ...providers - ] -}) -export class DomainModule {} \ No newline at end of file diff --git a/micro-transaction/src/domain/enum/transaction_status.ts b/micro-transaction/src/domain/enum/transaction_status.ts deleted file mode 100644 index d51ed28413..0000000000 --- a/micro-transaction/src/domain/enum/transaction_status.ts +++ /dev/null @@ -1,8 +0,0 @@ - - -export enum TraansactionStatus { - - PENDIING = "registrado", - APPROVED = "aprobado", - REJECTED = "rechazado" -} \ No newline at end of file diff --git a/micro-transaction/src/domain/index.ts b/micro-transaction/src/domain/index.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/micro-transaction/src/domain/model/index.ts b/micro-transaction/src/domain/model/index.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/micro-transaction/src/domain/model/transaction-response.ts b/micro-transaction/src/domain/model/transaction-response.ts deleted file mode 100644 index 76b28b7fc7..0000000000 --- a/micro-transaction/src/domain/model/transaction-response.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { TransactionStatus } from "./transaction-status"; -import { TransactionType } from "./transaction-type"; - -export class TransactionResponse { - - transactionExternalId: string; - - transactionType: TransactionType; - - value: number; - - transactionStatus: TransactionStatus; - - createdAt: string; - - - constructor( - transactionExternalId: string, - transactionType: TransactionType, - value: number, - transactionStatus: TransactionStatus, - createdAt: string - ) { - this.transactionExternalId = transactionExternalId; - this.transactionType = transactionType; - this.value = value; - this.transactionStatus = transactionStatus; - this.createdAt = createdAt; - } -} \ No newline at end of file diff --git a/micro-transaction/src/domain/model/transaction-status.ts b/micro-transaction/src/domain/model/transaction-status.ts deleted file mode 100644 index 55501d9c0f..0000000000 --- a/micro-transaction/src/domain/model/transaction-status.ts +++ /dev/null @@ -1,5 +0,0 @@ - - -export class TransactionStatus { - name: string; -} \ No newline at end of file diff --git a/micro-transaction/src/domain/model/transaction-type.ts b/micro-transaction/src/domain/model/transaction-type.ts deleted file mode 100644 index 495ce430cd..0000000000 --- a/micro-transaction/src/domain/model/transaction-type.ts +++ /dev/null @@ -1,5 +0,0 @@ - - -export class TransactionType { - name: string; -} \ No newline at end of file diff --git a/micro-transaction/src/domain/model/transaction.ts b/micro-transaction/src/domain/model/transaction.ts deleted file mode 100644 index 646b868920..0000000000 --- a/micro-transaction/src/domain/model/transaction.ts +++ /dev/null @@ -1,39 +0,0 @@ - -import { Optional } from "@nestjs/common"; -import { IsNotEmpty, IsNumber, IsUUID } from "class-validator"; - -export class Transaction { - - @Optional() - id: string; - - @IsNotEmpty() - @IsUUID() - accountExternalIdDebit: string; - - @IsNotEmpty() - @IsUUID() - accountExternalIdCredit: string; - - @IsNotEmpty() - @IsNumber() - tranferTypeId: number; - - @IsNotEmpty() - @IsNumber() - value: number; - - transactionStatus: string - - state: boolean; - - constructor(id: string, accountExternalIdDebit: string, accountExternalIdCredit: string, tranferTypeId: number, value: number, transactionStatus: string, state: boolean) { - this.id = id; - this.accountExternalIdDebit = accountExternalIdDebit; - this.accountExternalIdCredit = accountExternalIdCredit; - this.tranferTypeId = tranferTypeId; - this.value = value; - this.transactionStatus = transactionStatus; - this.state = state; - } -} \ No newline at end of file diff --git a/micro-transaction/src/domain/port/index.ts b/micro-transaction/src/domain/port/index.ts deleted file mode 100644 index f8f785c7a7..0000000000 --- a/micro-transaction/src/domain/port/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { TransactionPort } from './transaction.port' \ No newline at end of file diff --git a/micro-transaction/src/domain/port/transaction.port.ts b/micro-transaction/src/domain/port/transaction.port.ts deleted file mode 100644 index eb372e75f6..0000000000 --- a/micro-transaction/src/domain/port/transaction.port.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Observable } from "rxjs"; -import { Transaction } from "../model/transaction"; -import { TransactionResponse } from "../model/transaction-response"; - -export abstract class TransactionPort { - - abstract findAll(soryBy: string): Observable; - - abstract findById(id: string): Observable; - - abstract create(transaction: Transaction): Observable; - - abstract update(transaction: Transaction); - -} \ No newline at end of file diff --git a/micro-transaction/src/domain/service/index.ts b/micro-transaction/src/domain/service/index.ts deleted file mode 100644 index 424d4a6769..0000000000 --- a/micro-transaction/src/domain/service/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { TransctionService } from './transaction.service' \ No newline at end of file diff --git a/micro-transaction/src/domain/service/transaction.service.ts b/micro-transaction/src/domain/service/transaction.service.ts deleted file mode 100644 index 2b4d50306e..0000000000 --- a/micro-transaction/src/domain/service/transaction.service.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ -import { Injectable } from "@nestjs/common"; -import { Observable } from "rxjs"; - -import { TransactionPort } from "../port/transaction.port"; -import { Transaction } from "../model/transaction"; -import { TraansactionStatus } from "../enum/transaction_status"; -import { TransactionResponse } from "../model/transaction-response"; - - -@Injectable() -export class TransctionService { - - constructor( - private readonly transactionPort: TransactionPort, - ){ - - } - - findAll(sortBy: string) { - try { - return this.transactionPort.findAll(sortBy); - }catch (err) { - throw err; - } - } - - findById(id: string) { - return this.transactionPort.findById(id); - } - - - create(transaction: Transaction): Observable { - try { - transaction.transactionStatus = TraansactionStatus.PENDIING; - return this.transactionPort.create(transaction); - } catch(err) { - throw err; - } - } - - update(transaction: Transaction) { - this.transactionPort.update(transaction); - } - - - -} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/adapter/adapter.module.ts b/micro-transaction/src/infraestructure/adapter/adapter.module.ts deleted file mode 100644 index 4ab06ae40f..0000000000 --- a/micro-transaction/src/infraestructure/adapter/adapter.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module } from "@nestjs/common"; -import { SecondaryAdapterModule } from "./secondary/secondary-adapter.module"; - - -@Module({ - - imports: [ - SecondaryAdapterModule, // SQL Ó NOSQL - ], - exports: [ - SecondaryAdapterModule, // SQL Ó NOSQL - ] -}) -export class AdapterModule {} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/adapter/secondary/secondary-adapter.module.ts b/micro-transaction/src/infraestructure/adapter/secondary/secondary-adapter.module.ts deleted file mode 100644 index 67228f6297..0000000000 --- a/micro-transaction/src/infraestructure/adapter/secondary/secondary-adapter.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Module } from "@nestjs/common"; -import { TypeOrmModule } from "@nestjs/typeorm"; -import { TransactionEntity } from "src/infraestructure/entity/transaction.entity"; -import { TransactionRepository } from "src/infraestructure/repository/transaction.repository"; - -const providers = [ - TransactionRepository, -] - -@Module({ - imports: [ - TypeOrmModule.forFeature([TransactionEntity]), - ], - providers: [ - ...providers - ], - exports: [ - ...providers - ] -}) -export class SecondaryAdapterModule {} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/adapter/secondary/transaction.adapter.ts b/micro-transaction/src/infraestructure/adapter/secondary/transaction.adapter.ts deleted file mode 100644 index 7dadfac084..0000000000 --- a/micro-transaction/src/infraestructure/adapter/secondary/transaction.adapter.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ -import { Injectable } from "@nestjs/common"; -import { map, Observable } from "rxjs"; - -import { Transaction } from "src/domain/model/transaction"; -import { TransactionResponse } from "src/domain/model/transaction-response"; -import { TransactionPort } from "src/domain/port"; -import { TransactionMapper } from "src/infraestructure/mapper/transaction.mapper"; -import { TransactionRepository } from "src/infraestructure/repository/transaction.repository"; - -@Injectable() -export class TransactionAdapter implements TransactionPort { - - constructor( - private readonly transactionRepository: TransactionRepository, - ) {} - - findAll(sortBy: string): Observable { - return this.transactionRepository.findAll(sortBy).pipe( - map(entities => entities.map(entity => TransactionMapper.mapToTransactionResponse(entity))) - ); - } - - findById(id: string): Observable { - return this.transactionRepository.findById(id).pipe( - map(entity => TransactionMapper.mapToTransactionResponse(entity)) - ); - } - - create(transaction: Transaction) : Observable{ - return this.transactionRepository.create(TransactionMapper.mapToEntityTransactionCreate(transaction)).pipe( - map(entity => TransactionMapper.mapToTransactionResponse(entity)) - ); - } - - update(transaction: Transaction) { - this.transactionRepository.update(TransactionMapper.mapToEntityTransactionUpdate(transaction)); - } - - - - - delete() { - throw new Error("Method not implemented."); - } - -} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/config-server/config-server.decorador.ts b/micro-transaction/src/infraestructure/config/config-server/config-server.decorador.ts deleted file mode 100644 index a6be24ad0e..0000000000 --- a/micro-transaction/src/infraestructure/config/config-server/config-server.decorador.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { envConfig } from "./env/environments"; - - - -export function Property(valueName: string):any { - - let value = ''; - - value = envConfig[valueName]; - - if(value === undefined) { - throw new Error(`The property ${valueName} is not value`); - } - - // obtiene valores de envConfig. Aigna a propiedades de clase en tiempo de ejecución. - return async (target:any, fieldProperty:string) => { - // Tiene como objetivo permitir la definición de nuevas propiedades o la modificación de propiedades existentes en un objeto - Object.defineProperty(target, fieldProperty, { - value, // valor optenido - configurable: true, - enumerable: false, - }); - } -} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/config-server/env/environments.ts b/micro-transaction/src/infraestructure/config/config-server/env/environments.ts deleted file mode 100644 index 293bc8a0d9..0000000000 --- a/micro-transaction/src/infraestructure/config/config-server/env/environments.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { readFileSync } from "fs"; // Lee el contenido de un archivo -import { parse } from "dotenv"; // Analiza el contenido del archivo como variables de entorno y devuelve un objeto con esas variables. - - - -const env = process.env.ENVIRONMENT || 'local'; - -let propertiesLocation = null; - -const propertyFilename= `application-${env}.properties`; - -const property = process.env.NEST_PROPERTIES_LOCATION || ''; - -propertiesLocation = `${property}${propertyFilename}`; - -console.log('env type',propertiesLocation); - -export const envConfig: { [key: string]:any } = parse(readFileSync(propertiesLocation)); diff --git a/micro-transaction/src/infraestructure/config/kafka/helper.config.ts b/micro-transaction/src/infraestructure/config/kafka/helper.config.ts deleted file mode 100644 index d4b579dad0..0000000000 --- a/micro-transaction/src/infraestructure/config/kafka/helper.config.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS -*/ - -import { KafkaOptions, Transport } from "@nestjs/microservices"; -import { KafkaConfig } from "./kafka.config"; - - -export const KAFKA_CONFIG: KafkaOptions = { - transport: Transport.KAFKA, - options: { - /*subscribe: { - fromBeginning: true, - }*/ - consumer: { - groupId: KafkaConfig.kafkaGroupId - }, - client: { - brokers: [KafkaConfig.kafkabrokerUrl], - ssl: false, - /*sasl: { - mechanism: 'plain', - username: 'ever', - password: '123' - }*/ - } - } -} diff --git a/micro-transaction/src/infraestructure/config/kafka/kafka.config.ts b/micro-transaction/src/infraestructure/config/kafka/kafka.config.ts deleted file mode 100644 index 635694616e..0000000000 --- a/micro-transaction/src/infraestructure/config/kafka/kafka.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS -*/ - -import { Property } from "../config-server/config-server.decorador"; - - -export class KafkaConfig { - - @Property('kafka.brokers.url') - public static readonly kafkabrokerUrl: string; - - @Property('kafka.brokers.group.id') - public static readonly kafkaGroupId: string; - -} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/shared.module.ts b/micro-transaction/src/infraestructure/config/shared.module.ts deleted file mode 100644 index 774086e986..0000000000 --- a/micro-transaction/src/infraestructure/config/shared.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Module } from "@nestjs/common"; -import { PostgreSqlModule } from "./sql/postgresql.module"; - -@Module({ - imports: [ - PostgreSqlModule, - ] -}) -export class SharedModule { - -} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/sql/pg-db.config.ts b/micro-transaction/src/infraestructure/config/sql/pg-db.config.ts deleted file mode 100644 index ce494235ae..0000000000 --- a/micro-transaction/src/infraestructure/config/sql/pg-db.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS -*/ - -import { Property } from "../config-server/config-server.decorador"; - - -export class PGDBConfig { - - @Property('db.pg.url') - public static readonly pgdbUri: string; - - @Property('db.pg.name') - public static readonly pgdbName: string; - - @Property('db.pg.port') - public static readonly pgdbPort: number; - - @Property('db.pg.user') - public static readonly pgdbUser: string; - - @Property('db.pg.password') - public static readonly pgdbPassword: string; -} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/config/sql/postgresql.module.ts b/micro-transaction/src/infraestructure/config/sql/postgresql.module.ts deleted file mode 100644 index 24319da3d6..0000000000 --- a/micro-transaction/src/infraestructure/config/sql/postgresql.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS -*/ - -import { Module } from "@nestjs/common"; -import { ConfigModule } from "@nestjs/config"; -import { TypeOrmModule } from "@nestjs/typeorm"; -import { PGDBConfig } from "./pg-db.config"; - -@Module({ - imports: [ - ConfigModule.forRoot(), // Global para variables de entorno - - TypeOrmModule.forRoot({ - type: 'postgres', - host: PGDBConfig.pgdbUri, // process.env.DB_HOST - port: PGDBConfig.pgdbPort, //+process.env.DB_PORT, - database: PGDBConfig.pgdbName, // process.env.DB_NAME, - username: PGDBConfig.pgdbUser, //process.env.DB_USERNAME, - password: PGDBConfig.pgdbPassword, //process.env.DB_PASSWORD, - autoLoadEntities: true, - synchronize: false // Para sincronizar atributos de tablas de base de datos. PRD: false - }), - ] -}) -export class PostgreSqlModule {} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/entity/transaction.entity.ts b/micro-transaction/src/infraestructure/entity/transaction.entity.ts deleted file mode 100644 index 2bbcc34147..0000000000 --- a/micro-transaction/src/infraestructure/entity/transaction.entity.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ - -import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; - -@Entity({name: 'transacciones'}) -export class TransactionEntity { - - @PrimaryGeneratedColumn('uuid') - id: string; - - @Column({ name: 'id_debit'}) - accountExternalIdDebit: string; - - @Column({ name: 'id_credit'}) - accountExternalIdCredit: string; - - @Column({ name: 'id_transfer_type'}) // 1: pendiente 2: aprodo, 3: rechazado - tranferTypeId: number; - - @Column({ name: 'valor'}) - value: number; - - @Column({ name: 'transaction_status'}) - transactionStatus: string; - - @Column({ name: 'state', default: true }) - state: boolean; - - @Column({ name: 'created_at'}) - createdAt: string; -} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/infraestructure.module.ts b/micro-transaction/src/infraestructure/infraestructure.module.ts deleted file mode 100644 index 97bddbddb3..0000000000 --- a/micro-transaction/src/infraestructure/infraestructure.module.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Module } from "@nestjs/common"; -import { AdapterModule } from "./adapter/adapter.module"; -import { TransactionPort } from "src/domain/port"; - -//NOTA: Elegir que tipo de adaptador(primary ó secondary) será la fuente de información(select, create, update, delete) para cada adaptador -import { TransactionAdapter } from "./adapter/secondary/transaction.adapter"; -import { SharedModule } from "./config/shared.module"; - -const providers = [ - { - provide: TransactionPort, - useClass: TransactionAdapter - }, -] -@Module({ - imports: [ - SharedModule, - AdapterModule, - ], - providers: [ - ...providers - ], - exports: [ - TransactionPort - ], -}) -export class InfraestructureModule {} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/mapper/transaction.mapper.ts b/micro-transaction/src/infraestructure/mapper/transaction.mapper.ts deleted file mode 100644 index 49c4bf81ba..0000000000 --- a/micro-transaction/src/infraestructure/mapper/transaction.mapper.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ - -import { Transaction } from "src/domain/model/transaction"; -import { TransactionEntity } from "../entity/transaction.entity"; -import { v4 as uuid } from 'uuid'; -import { TransactionResponse } from "src/domain/model/transaction-response"; -import { TransactionType } from "src/domain/model/transaction-type"; -import { TransactionStatus } from "src/domain/model/transaction-status"; - -export class TransactionMapper { - - public static mapToTransaction(entity: TransactionEntity): Transaction { - return new Transaction( - entity.id, - entity.accountExternalIdDebit, - entity.accountExternalIdCredit, - entity.tranferTypeId, - entity.value, - entity.transactionStatus, - entity.state - ); - } - - public static mapToEntityTransactionCreate(transaction: Transaction): TransactionEntity { - const transactionEntity = new TransactionEntity(); - transactionEntity.id = uuid(); // FIXME: Quitar luego de validar en la entidad TransactionEntity - transactionEntity.accountExternalIdDebit = transaction.accountExternalIdDebit; - transactionEntity.accountExternalIdCredit = transaction.accountExternalIdCredit; - transactionEntity.tranferTypeId = transaction.tranferTypeId; - transactionEntity.value = transaction.value; - transactionEntity.transactionStatus = transaction.transactionStatus; - transactionEntity.state = transaction.state; - - return transactionEntity; - } - - public static mapToEntityTransactionUpdate(transaction: Transaction): TransactionEntity { - const transactionEntity = new TransactionEntity(); - transactionEntity.id = transaction.id; // FIXME: Quitar luego de validar en la entidad TransactionEntity - transactionEntity.accountExternalIdDebit = transaction.accountExternalIdDebit; - transactionEntity.accountExternalIdCredit = transaction.accountExternalIdCredit; - transactionEntity.tranferTypeId = transaction.tranferTypeId; - transactionEntity.value = transaction.value; - transactionEntity.transactionStatus = transaction.transactionStatus; - transactionEntity.state = transaction.state; - - return transactionEntity; - } - - public static mapToTransactions(entities: TransactionEntity[]): Transaction[] { - return entities.map(entity => TransactionMapper.mapToTransaction(entity)); - } - - public static mapToTransactionResponse(entity: TransactionEntity): TransactionResponse { - - const type = (entity.tranferTypeId === 1)? 'credito': 'debito'; - - const transferType: TransactionType = { - name: type - } - const transferStatus: TransactionStatus = { - name: entity.transactionStatus - } - - return new TransactionResponse( - entity.id, - transferType, - entity.value, - transferStatus, - entity.createdAt, - ); - } - -} diff --git a/micro-transaction/src/infraestructure/publisher/transaction.publisher.ts b/micro-transaction/src/infraestructure/publisher/transaction.publisher.ts deleted file mode 100644 index 0657d73a91..0000000000 --- a/micro-transaction/src/infraestructure/publisher/transaction.publisher.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ - -import { Inject, Injectable} from "@nestjs/common"; -import { ClientProxy } from "@nestjs/microservices"; -import { TransactionResponse } from "src/domain/model/transaction-response"; - - -@Injectable() -export class TransactionPublisher { - - constructor(@Inject('KAFKA') private readonly kafka: ClientProxy) {} - - publisherRegister(payload: TransactionResponse) { - const msg = { - id: payload.transactionExternalId, - value: payload.value, - } - const message: string = JSON.stringify(msg); - - this.kafka.emit('topic.fraud.created', message); - } -} \ No newline at end of file diff --git a/micro-transaction/src/infraestructure/repository/transaction.repository.ts b/micro-transaction/src/infraestructure/repository/transaction.repository.ts deleted file mode 100644 index e887317872..0000000000 --- a/micro-transaction/src/infraestructure/repository/transaction.repository.ts +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ - - -import { Injectable,Logger, NotFoundException } from "@nestjs/common"; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from "typeorm"; -import { TransactionEntity } from "../entity/transaction.entity"; -import { Observable,from, switchMap } from "rxjs"; - - -@Injectable() -export class TransactionRepository { - - constructor( - @InjectRepository(TransactionEntity) - private transactionRepository: Repository - ){ - } - - private readonly logger = new Logger(TransactionRepository.name); - - findAll(sortBy: string): Observable { - - return from(this.transactionRepository.find({ order: { [sortBy]: 'DESC' } })); - } - - findById(id: string) : Observable{ - - return from(this.transactionRepository.findOne({ where: { id } })) - .pipe( - switchMap(entity => { - if (!entity) { - throw new NotFoundException(`Transaction with id ${id} not found`); - } - return [entity]; - }) - ); - } - - findByTransactionExternalId(transactionExternalId: string) : Observable{ - return from(this.transactionRepository.findOne({ where: { accountExternalIdDebit: transactionExternalId } })); - } - - create(request: TransactionEntity): Observable { - return from(this.transactionRepository.save(request)); - } - - - update(request: TransactionEntity) { - this.logger.log(`update transaction ${ JSON.stringify(request)}`); - const { id, ...updateData } = request; - this.transactionRepository.update(id, updateData); - } - -} - - - - - - - - - - - - - diff --git a/micro-transaction/src/infraestructure/subscriber/transaction.subscriber.ts b/micro-transaction/src/infraestructure/subscriber/transaction.subscriber.ts deleted file mode 100644 index ec1824d87c..0000000000 --- a/micro-transaction/src/infraestructure/subscriber/transaction.subscriber.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Autor: EVER CARLOS ROJAS - */ - - -import { Injectable, Logger } from '@nestjs/common'; -import { TransctionService } from 'src/domain/service'; - - -@Injectable() -export class TransactionSubscriber { - - constructor( - private readonly transactionService: TransctionService - ) {} - - - private readonly logger = new Logger(TransactionSubscriber.name); - - public async handler(payload: any): Promise { - this.logger.log(`starting process`); - - this.logger.log(`message: ${JSON.stringify(payload)}`); - - this.transactionService.update(payload); - - this.logger.log(`end process`); - } -} diff --git a/micro-transaction/src/main.ts b/micro-transaction/src/main.ts deleted file mode 100644 index fa18d3c57a..0000000000 --- a/micro-transaction/src/main.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { NestFactory } from '@nestjs/core'; -import { AppModule } from './app.module'; -import { Logger } from '@nestjs/common'; -import { ValidationPipe } from '@nestjs/common'; -import { KAFKA_CONFIG } from './infraestructure/config/kafka/helper.config'; - - -const port = process.env.PORT || '3000'; - -async function bootstrap() { - const logger = new Logger('Bootstrap'); - - try { - const app = await NestFactory.create(AppModule); - //FIXME: Refactorizar agregando en su propio módulo y en el modulo de infra - app.connectMicroservice(KAFKA_CONFIG); - app.startAllMicroservices(); - - app.useGlobalPipes( - new ValidationPipe({ // pipe global para dto - whitelist: true, // solo acepta la data qu estoy esperando (dto) - forbidNonWhitelisted: false, // Si propidades que no estan en el dto, muestra mensaje que "no existe esos atributos" - }), - ); - await app.listen(port); - - logger.log(`App running on port: ${ port }`); - - } catch (error) { - logger.error(`Error instantiated server`, error); - } -} - -void bootstrap(); \ No newline at end of file diff --git a/micro-transaction/test/app.e2e-spec.ts b/micro-transaction/test/app.e2e-spec.ts deleted file mode 100644 index 50cda62332..0000000000 --- a/micro-transaction/test/app.e2e-spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { INestApplication } from '@nestjs/common'; -import * as request from 'supertest'; -import { AppModule } from './../src/app.module'; - -describe('AppController (e2e)', () => { - let app: INestApplication; - - beforeEach(async () => { - const moduleFixture: TestingModule = await Test.createTestingModule({ - imports: [AppModule], - }).compile(); - - app = moduleFixture.createNestApplication(); - await app.init(); - }); - - it('/ (GET)', () => { - return request(app.getHttpServer()) - .get('/') - .expect(200) - .expect('Hello World!'); - }); -}); diff --git a/micro-transaction/test/jest-e2e.json b/micro-transaction/test/jest-e2e.json deleted file mode 100644 index e9d912f3e3..0000000000 --- a/micro-transaction/test/jest-e2e.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "moduleFileExtensions": ["js", "json", "ts"], - "rootDir": ".", - "testEnvironment": "node", - "testRegex": ".e2e-spec.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - } -} diff --git a/micro-transaction/tsconfig.build.json b/micro-transaction/tsconfig.build.json deleted file mode 100644 index 64f86c6bd2..0000000000 --- a/micro-transaction/tsconfig.build.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] -} diff --git a/micro-transaction/tsconfig.json b/micro-transaction/tsconfig.json deleted file mode 100644 index 95f5641cf7..0000000000 --- a/micro-transaction/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "declaration": true, - "removeComments": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "allowSyntheticDefaultImports": true, - "target": "ES2021", - "sourceMap": true, - "outDir": "./dist", - "baseUrl": "./", - "incremental": true, - "skipLibCheck": true, - "strictNullChecks": false, - "noImplicitAny": false, - "strictBindCallApply": false, - "forceConsistentCasingInFileNames": false, - "noFallthroughCasesInSwitch": false - } -} diff --git a/resources/arq.png b/resources/arq.png deleted file mode 100644 index 360fc9dc93b4b30870b5920aa0b6632903ce73be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51971 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

C5cW4Q7n4 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 z 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�xOq%Ms9pjJ^}PSW@kCyQOD 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 From e7297a9bb0a3ca2e434344c153a699f6f2e3dc81 Mon Sep 17 00:00:00 2001 From: evercarlos Date: Wed, 28 Jan 2026 21:53:36 -0500 Subject: [PATCH 08/11] Microservice development for transactions begins --- .gitignore | 39 +++++ Dockerfile.antifraud | 31 ++++ Dockerfile.transaction | 27 +++ README.md | 119 +++++++++++++ docker-compose.yml | 81 +++++++++ init.sql | 48 ++++++ resources/arq.png | Bin 0 -> 78551 bytes yape-financial/yape-antifraud/.gitignore | 38 +++++ yape-financial/yape-antifraud/pom.xml | 152 +++++++++++++++++ .../yape/antifraud/YapeAntiFraudService.java | 13 ++ .../usecase/FraudValidationUseCase.java | 37 ++++ .../domain/enums/TransactionStatus.java | 7 + .../domain/exception/CommonErrorType.java | 16 ++ .../exception/TransactionException.java | 18 ++ .../antifraud/domain/model/Transaction.java | 23 +++ .../domain/model/TransactionCreatedEvent.java | 9 + .../model/TransactionValidatedEvent.java | 11 ++ .../port/input/FraudValidationInPort.java | 8 + .../TransactionStatusPublisherOutPort.java | 8 + .../antifraud/domain/util/BeanConstants.java | 8 + .../yape/antifraud/domain/util/JsonUtil.java | 40 +++++ .../domain/util/SubscriberResponse.java | 7 + .../TransactionStatusPublisherAdapter.java | 22 +++ .../config/ExecutorAsyncVirtualConfig.java | 19 +++ .../config/GlobalExceptionHandler.java | 19 +++ .../infrastructure/config/OpenApicConfig.java | 35 ++++ .../infrastructure/config/dto/ErrorDto.java | 13 ++ .../kafka/consumer/KafkaConsumerConfig.java | 44 +++++ .../kafka/producer/KafkaProducerConfig.java | 41 +++++ .../consuper/TransactionEventConsumer.java | 38 +++++ .../producer/TransactionStatusPublisher.java | 8 + .../TransactionStatusPublisherImpl.java | 52 ++++++ .../rest/controller/IndexController.java | 13 ++ .../dto/request/TransactionRequestDto.java | 25 +++ .../dto/response/TransactionResponseDto.java | 24 +++ .../dto/response/TransactionStatusDto.java | 16 ++ .../rest/dto/response/TransactionTypeDto.java | 16 ++ .../src/main/resources/application.properties | 8 + .../tec/antifraud/AbstractContextTest.java | 51 ++++++ .../resources/application-test.properties | 0 yape-financial/yape-transaction/.gitignore | 38 +++++ yape-financial/yape-transaction/pom.xml | 161 ++++++++++++++++++ .../transaction/YapeTransactionService.java | 13 ++ .../mapper/TransactionUseCaseMapper.java | 35 ++++ .../usecase/TransactionUpdateUseCase.java | 34 ++++ .../usecase/TransactionUseCase.java | 73 ++++++++ .../domain/enums/TransactionStatus.java | 7 + .../domain/exception/CommonErrorType.java | 16 ++ .../exception/TransactionException.java | 18 ++ .../domain/model/TransactionCreatedEvent.java | 9 + .../domain/model/TransactionRequest.java | 24 +++ .../domain/model/TransactionResponse.java | 24 +++ .../domain/model/TransactionStatus.java | 5 + .../domain/model/TransactionType.java | 4 + .../model/TransactionValidatedEvent.java | 10 ++ .../domain/port/input/TransactionInPort.java | 24 +++ .../port/input/TransactionUpdateInPort.java | 7 + .../TransactionEventPublisherOutPort.java | 8 + .../port/output/TransactionOutPort.java | 22 +++ .../domain/util/BeanConstants.java | 8 + .../transaction/domain/util/JsonUtil.java | 40 +++++ .../infrastructure/TransactionHelper.java | 19 +++ .../adapter/TransactionAdapter.java | 68 ++++++++ .../adapter/TransactionPublisherAdapter.java | 21 +++ .../config/ExecutorAsyncVirtualConfig.java | 19 +++ .../config/GlobalExceptionHandler.java | 19 +++ .../infrastructure/config/OpenApicConfig.java | 35 ++++ .../infrastructure/config/dto/ErrorDto.java | 13 ++ .../kafka/consumer/KafkaConsumerConfig.java | 44 +++++ .../kafka/producer/KafkaProducerConfig.java | 41 +++++ .../TransactionValidatedConsumer.java | 32 ++++ .../producer/TransactionEventPublisher.java | 8 + .../TransactionEventPublisherImpl.java | 52 ++++++ .../repository/TransactionRepository.java | 14 ++ .../model/entity/TransactionEntity.java | 36 ++++ .../model/mapper/TransactionMapper.java | 22 +++ .../rest/controller/IndexController.java | 13 ++ .../controller/v1/TransactionController.java | 52 ++++++ .../dto/request/TransactionRequestDto.java | 25 +++ .../dto/response/TransactionResponseDto.java | 26 +++ .../src/main/resources/application.properties | 22 +++ .../tec/transaction/AbstractContextTest.java | 51 ++++++ .../resources/application-test.properties | 0 83 files changed, 2396 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile.antifraud create mode 100644 Dockerfile.transaction create mode 100644 README.md create mode 100644 docker-compose.yml create mode 100644 init.sql create mode 100644 resources/arq.png create mode 100644 yape-financial/yape-antifraud/.gitignore create mode 100644 yape-financial/yape-antifraud/pom.xml create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/YapeAntiFraudService.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/application/usecase/FraudValidationUseCase.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/enums/TransactionStatus.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/exception/CommonErrorType.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/exception/TransactionException.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/Transaction.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/TransactionCreatedEvent.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/TransactionValidatedEvent.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/port/input/FraudValidationInPort.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/port/output/TransactionStatusPublisherOutPort.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/BeanConstants.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/JsonUtil.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/SubscriberResponse.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/adapter/TransactionStatusPublisherAdapter.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/ExecutorAsyncVirtualConfig.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/GlobalExceptionHandler.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/OpenApicConfig.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/dto/ErrorDto.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/kafka/consumer/KafkaConsumerConfig.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/kafka/producer/KafkaProducerConfig.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/consuper/TransactionEventConsumer.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/producer/TransactionStatusPublisher.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/producer/TransactionStatusPublisherImpl.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/controller/IndexController.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/request/TransactionRequestDto.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionResponseDto.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionStatusDto.java create mode 100644 yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionTypeDto.java create mode 100644 yape-financial/yape-antifraud/src/main/resources/application.properties create mode 100644 yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/AbstractContextTest.java create mode 100644 yape-financial/yape-antifraud/src/test/resources/application-test.properties create mode 100644 yape-financial/yape-transaction/.gitignore create mode 100644 yape-financial/yape-transaction/pom.xml create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/YapeTransactionService.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/mapper/TransactionUseCaseMapper.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/usecase/TransactionUpdateUseCase.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/usecase/TransactionUseCase.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/enums/TransactionStatus.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/TransactionException.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionCreatedEvent.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionRequest.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionResponse.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionStatus.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionType.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionValidatedEvent.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/input/TransactionInPort.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/input/TransactionUpdateInPort.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/output/TransactionEventPublisherOutPort.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/output/TransactionOutPort.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/util/BeanConstants.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/util/JsonUtil.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/TransactionHelper.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionPublisherAdapter.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/ExecutorAsyncVirtualConfig.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/GlobalExceptionHandler.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/OpenApicConfig.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/dto/ErrorDto.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/kafka/consumer/KafkaConsumerConfig.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/kafka/producer/KafkaProducerConfig.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/consumer/TransactionValidatedConsumer.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/producer/TransactionEventPublisher.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/producer/TransactionEventPublisherImpl.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/TransactionRepository.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/model/entity/TransactionEntity.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/model/mapper/TransactionMapper.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/IndexController.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/v1/TransactionController.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/request/TransactionRequestDto.java create mode 100644 yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/response/TransactionResponseDto.java create mode 100644 yape-financial/yape-transaction/src/main/resources/application.properties create mode 100644 yape-financial/yape-transaction/src/test/java/com/tec/transaction/AbstractContextTest.java create mode 100644 yape-financial/yape-transaction/src/test/resources/application-test.properties diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..d545169072 --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +# ===== Java ===== +*.class +*.log +*.ctxt + +# ===== Maven ===== +target/ +!.mvn/wrapper/maven-wrapper.jar + +# ===== Spring Boot ===== +*.jar +*.war +*.ear +*.iml + +# ===== IDEs ===== +.idea/ +.vscode/ +*.swp +*.swo + +# ===== OS ===== +.DS_Store +Thumbs.db + +# ===== Logs ===== +logs/ +*.log + +# ===== Environment ===== +.env +.env.local + +# ===== Docker ===== +**/docker-data/ + +# ===== Kafka (local) ===== +kafka-data/ +zookeeper-data/ diff --git a/Dockerfile.antifraud b/Dockerfile.antifraud new file mode 100644 index 0000000000..8c10861a46 --- /dev/null +++ b/Dockerfile.antifraud @@ -0,0 +1,31 @@ +# ===== Etapa de build ===== +FROM maven:3.9.12-eclipse-temurin-21-alpine AS build + +WORKDIR /antifraud + +# Copiar POM directamente al WORKDIR +COPY ./yape-financial/yape-antifraud/pom.xml ./pom.xml + +# Descargar dependencias sin compilar (aprovecha cache de Docker) +RUN mvn dependency:go-offline -B + +# Copiar el código fuente +COPY ./yape-financial/yape-antifraud/src ./src + +# Compilar microservicio (tests omitidos) +RUN mvn clean package -DskipTests=true + + +# ===== Etapa runtime ===== +FROM eclipse-temurin:21-jdk-alpine + +WORKDIR /antifraud + +# Copiar jar construido desde la etapa de build +COPY --from=build /antifraud/target/yape-antifraud-1.0-SNAPSHOT.jar . + +# Exponer puerto del microservicio +EXPOSE 8082 + +# Ejecutar la aplicación +ENTRYPOINT ["java", "-jar", "yape-antifraud-1.0-SNAPSHOT.jar"] diff --git a/Dockerfile.transaction b/Dockerfile.transaction new file mode 100644 index 0000000000..11c3ee072b --- /dev/null +++ b/Dockerfile.transaction @@ -0,0 +1,27 @@ +# ===== Etapa de build ===== +FROM maven:3.9.12-eclipse-temurin-21-alpine AS build + +# Directorio de trabajo dentro del contenedor +WORKDIR /transaction + +# Copiar POM y código fuente directamente al WORKDIR +COPY ./yape-financial/yape-transaction/pom.xml ./pom.xml +COPY ./yape-financial/yape-transaction/src ./src + +# Compilar el microservicio (skip tests para acelerar) +RUN mvn clean package -DskipTests=true + + +# ===== Etapa runtime ===== +FROM eclipse-temurin:21-jdk + +WORKDIR /transaction + +# Copiar jar construido desde la etapa de build +COPY --from=build /transaction/target/yape-transaction-1.0-SNAPSHOT.jar . + +# Exponer puerto del microservicio +EXPOSE 8081 + +# Ejecutar la aplicación +ENTRYPOINT ["java", "-jar", "yape-transaction-1.0-SNAPSHOT.jar"] diff --git a/README.md b/README.md new file mode 100644 index 0000000000..f7f13be679 --- /dev/null +++ b/README.md @@ -0,0 +1,119 @@ + +## APLICACIÓN DE TRANSACCIONES: ```YAPE-FINANCIAL``` +Aplicación de microservicios para manejo de transacciones financieras con validación antifraude y comunicación asíncrona mediante Kafka. + +### ANTIFRAUDE + +- Al crear una transacción, se publica un evento en Kafka. +- Un consumidor valida reglas antifraude. +- La transacción puede ser aprobada o rechazada según el monto configurado. + +### REQUISITOS + +- Docker >= 27.x +- Docker Compose >= 2.x + +### COMPONENTES + +- JAVA: 21 +- SPRING BOOT: 3.2.5 +- DOCKER +- KAFKA +- POSTGRESQL + +### INSTALACIÓN + +- Clonar el repositorio: + +```bash + git clone https://github.com/evercarlos/app-nodejs-codechallenge.git + ``` + - Entrar a la rama del proyecto: + ```bash + git checkout java-codechallenge + ``` + +- Construir y levantar los contenedores con Docker Compose + + ```bash + docker-compose up --build -d + ``` + +### CONFIGURACIÓN + +Las variables de entorno principales se encuentran en el archivo `docker-compose.yml`: +- Base de datos PostgreSQL +- Kafka +- Puertos de exposición + +### URL DEL MICROSERVICIO Y DOCUMENTACIÓN SWAGGER +- http://localhost:8081 +- Swagger UI: http://localhost:8081/swagger-ui.html + +### ARQUITECTURA + +La aplicación sigue una arquitectura hexagonal (Ports & Adapters), separando: +- Aplication +- Domain +- Infraestructure (REST, Kafka, persistencia) + +La validación antifraude se realiza de forma desacoplada mediante eventos publicados en Kafka. + +### ENDPOINTS DISPONIBLES +1. Crea una transacción + + ```bash +curl --location 'http://localhost:8081/api/v1/transaction' \ +--header 'Content-Type: application/json' \ +--data '{ + "accountExternalIdDebit": "550e8400-e29b-41d4-a716-446655440000", + "accountExternalIdCredit": "660e8400-e29b-41d4-a716-446655440111", + "tranferTypeId": 1, + "value": 10001 + } ' + ``` + + 2. Lista transacción con paginación + + ```bash +curl --location 'http://localhost:8081/api/v1/transaction/withPagination?number=1&size=10' \ +--header 'Content-Type: application/json' \ +--data '' + ``` + 3. Lista transacción sin paginación + + ```bash +curl --location 'http://localhost:8081/api/v1/transaction' \ +--header 'Content-Type: application/json' \ +--data '' + ``` + + 4. Busca una transaccion por transactionExternalId + + ```bash +curl --location 'http://localhost:8081/api/v1/transaction/{transactionExternalId}' \ +--header 'Content-Type: application/json' \ +--data '' + ``` + ### FLUJO DE LA TRANSACCIÓN + +#### Creación de una transacción +1. El cliente crea una transacción mediante el endpoint: + `[POST] /api/v1/transaction`. +2. La transacción se persiste inicialmente con estado `PENDIENTE` en la base de datos PostgreSQL. +3. Se publica un evento de transacción en un tópico de Kafka para su validación antifraude. +4. El microservicio de antifraude consume el evento y valida las reglas de negocio. +5. Como resultado de la validación, la transacción es: + - `APROBADO` si cumple las reglas. + - `RECHAZADO` si no cumple las reglas. +6. El estado final de la transacción se actualiza en la base de datos. + +#### Consulta de transacciones +- Las transacciones pueden consultarse: + - Con paginación. + - Sin paginación. + - Por `transactionExternalId`. + + ### DIAGRAMA + +![](./resources/arq.png) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000..3671fe764f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,81 @@ +version: "3.9" + +networks: + yape_challenge: + +services: + zookeeper: + image: confluentinc/cp-zookeeper:7.4.0 + container_name: zookeeper + environment: + ZOOKEEPER_CLIENT_PORT: 2181 + ZOOKEEPER_TICK_TIME: 2000 + ports: + - "2181:2181" + networks: + - yape_challenge + + kafka: + image: confluentinc/cp-kafka:7.4.0 + container_name: kafka + depends_on: + - zookeeper + ports: + - "9092:9092" + environment: + KAFKA_BROKER_ID: 1 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://kafka:9092 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 + KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 + restart: always + networks: + - yape_challenge + + yape-transaction: + build: + context: . + dockerfile: Dockerfile.transaction + container_name: yape-transaction + environment: + SPRING_DATASOURCE_URL: jdbc:postgresql://postgres_yape:5432/dbtransactionv1 + SPRING_DATASOURCE_USERNAME: postgres + SPRING_DATASOURCE_PASSWORD: postgres + KAFKA_BOOTSTRAP_SERVERS: kafka:29092 + ports: + - "8081:8081" + depends_on: + - kafka + - postgres_yape + networks: + - yape_challenge + + yape-antifraud: + build: + context: . + dockerfile: Dockerfile.antifraud + container_name: yape-antifraud + environment: + KAFKA_BOOTSTRAP_SERVERS: kafka:29092 + ports: + - "8082:8082" + depends_on: + - kafka + networks: + - yape_challenge + + postgres_yape: + image: postgres:14 + container_name: postgres_yape + ports: + - "5433:5432" + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: dbtransactionv1 + volumes: + - ./init.sql:/docker-entrypoint-initdb.d/init.sql + networks: + - yape_challenge diff --git a/init.sql b/init.sql new file mode 100644 index 0000000000..cd606ff5cd --- /dev/null +++ b/init.sql @@ -0,0 +1,48 @@ +-- =============================== +-- CONNECT TO POSTGRES +-- =============================== +DO $$ +BEGIN + IF NOT EXISTS ( + SELECT 1 FROM pg_database WHERE datname = 'dbtransactionv1' + ) THEN + CREATE DATABASE dbtransactionv1; + END IF; +END +$$; + +-- CONNECT +\c dbtransactionv1 + +-- EXTENSION PARA UUID +CREATE EXTENSION IF NOT EXISTS "pgcrypto"; + +-- TABLA: TRANSACTION +CREATE TABLE IF NOT EXISTS public.transacciones +( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + transaction_external_id UUID NOT NULL UNIQUE, + account_external_id_debit UUID NOT NULL, + account_external_id_credit UUID NOT NULL, + transfer_type_id INTEGER NOT NULL, + transaction_status VARCHAR(20) NOT NULL, + value NUMERIC(15, 2) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now() +); + +-- INDICES +CREATE INDEX IF NOT EXISTS idx_transacciones_external_id +ON public.transacciones (transaction_external_id); + +CREATE INDEX IF NOT EXISTS idx_transacciones_status +ON public.transacciones (transaction_status); + +CREATE INDEX IF NOT EXISTS idx_transacciones_created_at +ON public.transacciones (created_at); + +-- =============================== +-- PERMISSIONS +-- =============================== +GRANT CONNECT ON DATABASE dbtransactionv1 TO PUBLIC; +GRANT ALL PRIVILEGES ON DATABASE dbtransactionv1 TO postgres; +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO postgres; diff --git a/resources/arq.png b/resources/arq.png new file mode 100644 index 0000000000000000000000000000000000000000..e9744e99b47fe23f3c4bfe93bafd3229d9dec3d4 GIT binary patch literal 78551 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 literal 0 HcmV?d00001 diff --git a/yape-financial/yape-antifraud/.gitignore b/yape-financial/yape-antifraud/.gitignore new file mode 100644 index 0000000000..5ff6309b71 --- /dev/null +++ b/yape-financial/yape-antifraud/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/yape-financial/yape-antifraud/pom.xml b/yape-financial/yape-antifraud/pom.xml new file mode 100644 index 0000000000..a78d33e6d2 --- /dev/null +++ b/yape-financial/yape-antifraud/pom.xml @@ -0,0 +1,152 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.5 + + + com.tec.yape.antifraud + yape-antifraud + jar + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + 1.6.3 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-validation + + + org.projectlombok + lombok + true + + + org.mapstruct + mapstruct + ${org.mapstruct.version} + + + org.mapstruct + mapstruct-processor + ${org.mapstruct.version} + provided + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.3.0 + + + org.springdoc + springdoc-openapi-data-rest + 1.6.4 + + + com.fasterxml.jackson.core + jackson-databind + + + com.google.code.gson + gson + 2.8.9 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-cache + + + + org.springframework.boot + spring-boot-starter-test + + + org.mockito + mockito-junit-jupiter + 5.11.0 + test + + + org.springframework.retry + spring-retry + 1.3.1 + + + org.springframework.kafka + spring-kafka + + + org.springframework.kafka + spring-kafka-test + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 21 + + --enable-preview + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + --enable-preview + + + + org.springframework.boot + spring-boot-maven-plugin + + --enable-preview + + + + + + \ No newline at end of file diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/YapeAntiFraudService.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/YapeAntiFraudService.java new file mode 100644 index 0000000000..a19f5f98f8 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/YapeAntiFraudService.java @@ -0,0 +1,13 @@ +package com.tec.yape.antifraud; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; + +@SpringBootApplication +@EnableAsync +public class YapeAntiFraudService { + public static void main(String[] args) { + SpringApplication.run(YapeAntiFraudService.class, args); + } +} \ No newline at end of file diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/application/usecase/FraudValidationUseCase.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/application/usecase/FraudValidationUseCase.java new file mode 100644 index 0000000000..d30081476b --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/application/usecase/FraudValidationUseCase.java @@ -0,0 +1,37 @@ +package com.tec.yape.antifraud.application.usecase; + +import com.tec.yape.antifraud.domain.enums.TransactionStatus; +import com.tec.yape.antifraud.domain.model.TransactionCreatedEvent; +import com.tec.yape.antifraud.domain.model.TransactionValidatedEvent; +import com.tec.yape.antifraud.domain.port.input.FraudValidationInPort; +import com.tec.yape.antifraud.domain.port.output.TransactionStatusPublisherOutPort; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; + +@Component +@RequiredArgsConstructor +@Slf4j +public class FraudValidationUseCase implements FraudValidationInPort { + + private final TransactionStatusPublisherOutPort statusPublisher; + + @Override + public void validate(TransactionCreatedEvent event) { + + + TransactionStatus status = + event.value().compareTo(BigDecimal.valueOf(1000)) > 0 + ? TransactionStatus.RECHAZADO + : TransactionStatus.APROBADO; + + statusPublisher.publish( + new TransactionValidatedEvent( + event.transactionExternalId(), + status + ) + ); + } +} \ No newline at end of file diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/enums/TransactionStatus.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/enums/TransactionStatus.java new file mode 100644 index 0000000000..4197c41643 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/enums/TransactionStatus.java @@ -0,0 +1,7 @@ +package com.tec.yape.antifraud.domain.enums; + +public enum TransactionStatus { + PENDIENTE, + APROBADO, + RECHAZADO +} \ No newline at end of file diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/exception/CommonErrorType.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/exception/CommonErrorType.java new file mode 100644 index 0000000000..0cff88117a --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/exception/CommonErrorType.java @@ -0,0 +1,16 @@ +package com.tec.yape.antifraud.domain.exception; + +import lombok.Getter; + +@Getter +public enum CommonErrorType { + + COMMON_ERROR_400_1("Error en el criterio de ordenación"); + + private final String description; + + + CommonErrorType(String description) { + this.description = description; + } +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/exception/TransactionException.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/exception/TransactionException.java new file mode 100644 index 0000000000..a78778f26a --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/exception/TransactionException.java @@ -0,0 +1,18 @@ +package com.tec.yape.antifraud.domain.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.http.HttpStatus; + +@EqualsAndHashCode(callSuper = true) +@Data +public class TransactionException extends RuntimeException { + + public HttpStatus status; + public String code; + + public TransactionException(HttpStatus httpStatus, String message) { + super(message); + this.status = httpStatus; + } +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/Transaction.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/Transaction.java new file mode 100644 index 0000000000..64c385a5ab --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/Transaction.java @@ -0,0 +1,23 @@ +package com.tec.yape.antifraud.domain.model; + +import com.tec.yape.antifraud.domain.enums.TransactionStatus; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.UUID; + +@Getter +@Setter +public class Transaction { + + private UUID transactionExternalId; + private UUID accountExternalIdDebit; + private UUID accountExternalIdCredit; + private Integer transferTypeId; + private BigDecimal value; + private TransactionStatus transactionStatus; + private LocalDateTime createdAt; + +} \ No newline at end of file diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/TransactionCreatedEvent.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/TransactionCreatedEvent.java new file mode 100644 index 0000000000..79c2a6eefa --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/TransactionCreatedEvent.java @@ -0,0 +1,9 @@ +package com.tec.yape.antifraud.domain.model; + +import java.math.BigDecimal; +import java.util.UUID; + +public record TransactionCreatedEvent( + UUID transactionExternalId, + BigDecimal value +) {} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/TransactionValidatedEvent.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/TransactionValidatedEvent.java new file mode 100644 index 0000000000..7d4b2aac55 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/model/TransactionValidatedEvent.java @@ -0,0 +1,11 @@ +package com.tec.yape.antifraud.domain.model; + + +import com.tec.yape.antifraud.domain.enums.TransactionStatus; + +import java.util.UUID; + +public record TransactionValidatedEvent( + UUID transactionExternalId, + TransactionStatus status +) {} \ No newline at end of file diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/port/input/FraudValidationInPort.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/port/input/FraudValidationInPort.java new file mode 100644 index 0000000000..dc8046c11b --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/port/input/FraudValidationInPort.java @@ -0,0 +1,8 @@ +package com.tec.yape.antifraud.domain.port.input; + +import com.tec.yape.antifraud.domain.model.TransactionCreatedEvent; + +public interface FraudValidationInPort { + + void validate(TransactionCreatedEvent event); +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/port/output/TransactionStatusPublisherOutPort.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/port/output/TransactionStatusPublisherOutPort.java new file mode 100644 index 0000000000..5baf68493f --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/port/output/TransactionStatusPublisherOutPort.java @@ -0,0 +1,8 @@ +package com.tec.yape.antifraud.domain.port.output; + +import com.tec.yape.antifraud.domain.model.TransactionValidatedEvent; + +public interface TransactionStatusPublisherOutPort { + + void publish(TransactionValidatedEvent event); +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/BeanConstants.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/BeanConstants.java new file mode 100644 index 0000000000..01bcd664a3 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/BeanConstants.java @@ -0,0 +1,8 @@ +package com.tec.yape.antifraud.domain.util; + +public class BeanConstants { + + public static final String ASYNC_SAVE_CALL_HISTORY = "asyncSaveCallHistory"; + + public static final String ASYNC_VIRTUAL_SAVE_CALL_HISTORY = "asyncVirtualSaveCallHistory"; +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/JsonUtil.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/JsonUtil.java new file mode 100644 index 0000000000..ef6901a919 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/JsonUtil.java @@ -0,0 +1,40 @@ +package com.tec.yape.antifraud.domain.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +public class JsonUtil { + + + private JsonUtil() { + + } + + public static String ToJSON(Object object) throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + return mapper.writeValueAsString(object); + } + + public static T fromJson(String message, Class tClass) { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + + try { + return mapper.readValue(message, tClass); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/SubscriberResponse.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/SubscriberResponse.java new file mode 100644 index 0000000000..7d6e3817fb --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/domain/util/SubscriberResponse.java @@ -0,0 +1,7 @@ +package com.tec.yape.antifraud.domain.util; + +public enum SubscriberResponse { + + FINALIZED, + ERRORS +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/adapter/TransactionStatusPublisherAdapter.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/adapter/TransactionStatusPublisherAdapter.java new file mode 100644 index 0000000000..d7d5cd536c --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/adapter/TransactionStatusPublisherAdapter.java @@ -0,0 +1,22 @@ +package com.tec.yape.antifraud.infrastructure.adapter; + +import com.tec.yape.antifraud.domain.model.TransactionValidatedEvent; +import com.tec.yape.antifraud.domain.port.output.TransactionStatusPublisherOutPort; +import com.tec.yape.antifraud.infrastructure.messaging.producer.TransactionStatusPublisher; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + + +@Component +@RequiredArgsConstructor +@Slf4j +public class TransactionStatusPublisherAdapter implements TransactionStatusPublisherOutPort { + + private final TransactionStatusPublisher transactionStatusPublisher; + + @Override + public void publish(TransactionValidatedEvent event) { + transactionStatusPublisher.publish(event); + } +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/ExecutorAsyncVirtualConfig.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/ExecutorAsyncVirtualConfig.java new file mode 100644 index 0000000000..fc13421b7f --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/ExecutorAsyncVirtualConfig.java @@ -0,0 +1,19 @@ +package com.tec.yape.antifraud.infrastructure.config; + +import com.tec.yape.antifraud.domain.util.BeanConstants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +@Configuration +public class ExecutorAsyncVirtualConfig { + + @Bean(name = BeanConstants.ASYNC_VIRTUAL_SAVE_CALL_HISTORY) + public Executor asyncVirtualSaveCallHistory() { + return Executors.newThreadPerTaskExecutor( + Thread.ofVirtual().name("virtual-thread-", 0)::unstarted + ); + } +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/GlobalExceptionHandler.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/GlobalExceptionHandler.java new file mode 100644 index 0000000000..e2bae4e6af --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/GlobalExceptionHandler.java @@ -0,0 +1,19 @@ +package com.tec.yape.antifraud.infrastructure.config; + +import com.tec.yape.antifraud.infrastructure.config.dto.ErrorDto; +import com.tec.yape.antifraud.domain.exception.TransactionException; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(value = TransactionException.class) + public ResponseEntity businessExceptionHandler(TransactionException ex) { + ErrorDto error = ErrorDto.builder() + .status(ex.getStatus()) + .code(ex.getCode()).message(ex.getMessage()).build(); + return new ResponseEntity<>(error, ex.getStatus()); + } +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/OpenApicConfig.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/OpenApicConfig.java new file mode 100644 index 0000000000..61c9c6859d --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/OpenApicConfig.java @@ -0,0 +1,35 @@ +package com.tec.yape.antifraud.infrastructure.config; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; +import io.swagger.v3.oas.annotations.info.Contact; +import io.swagger.v3.oas.annotations.info.Info; +import io.swagger.v3.oas.annotations.info.License; +import io.swagger.v3.oas.annotations.security.SecurityScheme; +import org.springframework.context.annotation.Configuration; + +@Configuration +@OpenAPIDefinition( + info = @Info( + title = "API-REST ANTIFRAUDE", + version = "1.0", + + description = "Api Rest para Antifraude", + + license = @License( + name = "Apache 2.0", + url = "http://www.apache.org/licenses/LICENSE-2.0.html" + ), + + contact = @Contact( + name = "tec.com", + url = "tec.com", + email = "evercarlosrojas@gmail.com") + ) +) +@SecurityScheme(name = "bearerAuth", type = SecuritySchemeType.HTTP, bearerFormat = "JWT", description = "Autenticación" + + "tipo Bearer API-TC", scheme = "bearer") +public class OpenApicConfig { + + +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/dto/ErrorDto.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/dto/ErrorDto.java new file mode 100644 index 0000000000..844161ad11 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/dto/ErrorDto.java @@ -0,0 +1,13 @@ +package com.tec.yape.antifraud.infrastructure.config.dto; + +import lombok.Builder; +import lombok.Data; +import org.springframework.http.HttpStatus; + +@Data +@Builder +public class ErrorDto { + private String code; + private String message; + private HttpStatus status; +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/kafka/consumer/KafkaConsumerConfig.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/kafka/consumer/KafkaConsumerConfig.java new file mode 100644 index 0000000000..12d6783b66 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/kafka/consumer/KafkaConsumerConfig.java @@ -0,0 +1,44 @@ +package com.tec.yape.antifraud.infrastructure.config.kafka.consumer; + +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; +import org.springframework.kafka.config.KafkaListenerContainerFactory; +import org.springframework.kafka.core.ConsumerFactory; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.listener.ConcurrentMessageListenerContainer; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class KafkaConsumerConfig { + + @Value("${spring.kafka.bootstrap-servers}") + private String boostrapServers; + + + public Map consumerConfig() { + Map properties = new HashMap<>(); + properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServers); + properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringSerializer.class);// deserializa: convirte de string a bytes + properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringSerializer.class);// deserializa + return properties; + } + + @Bean + public ConsumerFactory consumerFactory() { + return new DefaultKafkaConsumerFactory<>(consumerConfig()); + } + + @Bean // Para poder inyectar en otros lugares + public KafkaListenerContainerFactory> consumer() { + ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory<>(); + factory.setConsumerFactory(consumerFactory()); + return factory; + } + +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/kafka/producer/KafkaProducerConfig.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/kafka/producer/KafkaProducerConfig.java new file mode 100644 index 0000000000..10ba7bc06f --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/config/kafka/producer/KafkaProducerConfig.java @@ -0,0 +1,41 @@ +package com.tec.yape.antifraud.infrastructure.config.kafka.producer; + +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.core.DefaultKafkaProducerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.core.ProducerFactory; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class KafkaProducerConfig { + + @Value("${spring.kafka.bootstrap-servers}") + private String boostrapServers; + + + public Map producerConfig() { + Map properties = new HashMap<>(); + properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServers); + properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);// serializa: convirte de string a bytes + properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);// serializa + return properties; + } + + @Bean + public ProducerFactory providerFactory() { + return new DefaultKafkaProducerFactory<>(producerConfig()); + } + + // Envian mensaje + @Bean + public KafkaTemplate kafkaTemplate(ProducerFactory providerFactory) {// inyectando + return new KafkaTemplate<>(providerFactory); + } + +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/consuper/TransactionEventConsumer.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/consuper/TransactionEventConsumer.java new file mode 100644 index 0000000000..5df3c2a83c --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/consuper/TransactionEventConsumer.java @@ -0,0 +1,38 @@ +package com.tec.yape.antifraud.infrastructure.messaging.consuper; + +import com.tec.yape.antifraud.domain.port.input.FraudValidationInPort; +import com.tec.yape.antifraud.domain.util.JsonUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.stereotype.Component; +import com.tec.yape.antifraud.domain.model.TransactionCreatedEvent; + +import java.nio.charset.StandardCharsets; +import java.util.Map; + +@Component +@Slf4j +@RequiredArgsConstructor +public class TransactionEventConsumer { + + private final FraudValidationInPort fraudValidationInPort; + + @KafkaListener( + topics = "topic-transaction", + groupId = "antifraud-service-group", + containerFactory = "kafkaListenerContainerFactory" + ) + public void listener(String message, @Headers Map headers) { + + String jsonMessage = new String(message.getBytes(), StandardCharsets.UTF_8); + + TransactionCreatedEvent event = JsonUtil.fromJson(jsonMessage, TransactionCreatedEvent.class); + + log.info("[AntifraudConsumer] Transaction received: {}", jsonMessage); + log.info("[AntifraudConsumer] Client-id header: {}", headers.get("client-id")); + + fraudValidationInPort.validate(event); + } +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/producer/TransactionStatusPublisher.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/producer/TransactionStatusPublisher.java new file mode 100644 index 0000000000..cdadaec8c1 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/producer/TransactionStatusPublisher.java @@ -0,0 +1,8 @@ +package com.tec.yape.antifraud.infrastructure.messaging.producer; + +import com.tec.yape.antifraud.domain.model.TransactionValidatedEvent; + +public interface TransactionStatusPublisher { + + void publish(TransactionValidatedEvent message); +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/producer/TransactionStatusPublisherImpl.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/producer/TransactionStatusPublisherImpl.java new file mode 100644 index 0000000000..a48e17d324 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/messaging/producer/TransactionStatusPublisherImpl.java @@ -0,0 +1,52 @@ +package com.tec.yape.antifraud.infrastructure.messaging.producer; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.tec.yape.antifraud.domain.model.TransactionValidatedEvent; +import com.tec.yape.antifraud.domain.util.JsonUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.support.KafkaHeaders; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +@Slf4j +public class TransactionStatusPublisherImpl implements TransactionStatusPublisher { + + private final KafkaTemplate kafkaTemplate; + + public TransactionStatusPublisherImpl(KafkaTemplate kafkaTemplate) { + this.kafkaTemplate = kafkaTemplate; + } + + @Override + public void publish(TransactionValidatedEvent event) { + log.info("[TransactionStatusPublisherImpl] {}", "Start async process"); + + try { + String message = JsonUtil.ToJSON(event); + + Message kafkaMessage = MessageBuilder + .withPayload(message) + .setHeader(KafkaHeaders.TOPIC, "topic-transaction-validated") + .copyHeaders(getHeaders()) + .build(); + + kafkaTemplate.send(kafkaMessage); + + } catch (JsonProcessingException e) { + log.error("[TransactionStatusPublisherImpl] message:{}", e.getMessage()); + } + } + + private Map getHeaders() { + Map headers = new HashMap<>(); + headers.put("client-id", "EVER CARLOS ROJAS"); + return headers; + } + +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/controller/IndexController.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/controller/IndexController.java new file mode 100644 index 0000000000..2d41ab515b --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/controller/IndexController.java @@ -0,0 +1,13 @@ +package com.tec.yape.antifraud.infrastructure.rest.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class IndexController { + + @RequestMapping("/") + public String getIndex(){ + return "redirect:swagger-ui.html"; + } +} \ No newline at end of file diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/request/TransactionRequestDto.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/request/TransactionRequestDto.java new file mode 100644 index 0000000000..900c863e75 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/request/TransactionRequestDto.java @@ -0,0 +1,25 @@ +package com.tec.yape.antifraud.infrastructure.rest.dto.request; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.util.UUID; + +@Getter +@Setter +public class TransactionRequestDto { + + private UUID accountExternalIdDebit; + + private UUID accountExternalIdCredit; + + @JsonProperty("tranferTypeId") + private Integer transferTypeId; + + private BigDecimal value; + + +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionResponseDto.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionResponseDto.java new file mode 100644 index 0000000000..a00bb0fff1 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionResponseDto.java @@ -0,0 +1,24 @@ +package com.tec.yape.antifraud.infrastructure.rest.dto.response; + +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.UUID; + +@Setter +@Getter +public class TransactionResponseDto { + + private UUID transactionExternalId; + + private TransactionTypeDto transactionType; + + private TransactionStatusDto transactionStatus; + + private BigDecimal value; + + private LocalDateTime createdAt; + +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionStatusDto.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionStatusDto.java new file mode 100644 index 0000000000..bfbe58df71 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionStatusDto.java @@ -0,0 +1,16 @@ +package com.tec.yape.antifraud.infrastructure.rest.dto.response; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class TransactionStatusDto { + + String name; + + public TransactionStatusDto(String name) { + this.name = name; + } + +} diff --git a/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionTypeDto.java b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionTypeDto.java new file mode 100644 index 0000000000..647447e8fd --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/java/com/tec/yape/antifraud/infrastructure/rest/dto/response/TransactionTypeDto.java @@ -0,0 +1,16 @@ +package com.tec.yape.antifraud.infrastructure.rest.dto.response; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class TransactionTypeDto { + + String name; + + public TransactionTypeDto(String name) { + this.name = name; + } + +} diff --git a/yape-financial/yape-antifraud/src/main/resources/application.properties b/yape-financial/yape-antifraud/src/main/resources/application.properties new file mode 100644 index 0000000000..8293ace2a1 --- /dev/null +++ b/yape-financial/yape-antifraud/src/main/resources/application.properties @@ -0,0 +1,8 @@ +server.tomcat.uri-encoding=UTF-8 +server.port=8082 + +# settings KAFKA +#spring.kafka.bootstrap-servers = localhost:9092 +spring.kafka.bootstrap-servers=kafka:9092 + + diff --git a/yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/AbstractContextTest.java b/yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/AbstractContextTest.java new file mode 100644 index 0000000000..896807008f --- /dev/null +++ b/yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/AbstractContextTest.java @@ -0,0 +1,51 @@ +package com.tec.antifraud; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.nio.file.Files; +import java.nio.file.Paths; + +@ExtendWith(SpringExtension.class) +@TestPropertySource(locations = "classpath:application-test.properties") +public class AbstractContextTest { + + protected static final String DEFAULT_TOKEN = ""; + protected static ObjectMapper objectMapper; + + static { + objectMapper = getObjectMapper(); + } + + + protected static String getJsonFromPath(String pathJson) throws Exception { + return new String(Files.readAllBytes(Paths.get(AbstractContextTest.class.getResource(pathJson).toURI()))); + } + + protected static T convertTo(String path, Class aClass) throws Exception { + String jsonRequest = getJsonFromPath(path); + return objectMapper.readValue(jsonRequest, aClass); + } + + public static String convertToJSONString(Object object) throws JsonProcessingException { + ObjectMapper mapper = getObjectMapper(); + return mapper.writeValueAsString(object); + } + + public static ObjectMapper getObjectMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + return mapper; + } + +} diff --git a/yape-financial/yape-antifraud/src/test/resources/application-test.properties b/yape-financial/yape-antifraud/src/test/resources/application-test.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/yape-financial/yape-transaction/.gitignore b/yape-financial/yape-transaction/.gitignore new file mode 100644 index 0000000000..5ff6309b71 --- /dev/null +++ b/yape-financial/yape-transaction/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/yape-financial/yape-transaction/pom.xml b/yape-financial/yape-transaction/pom.xml new file mode 100644 index 0000000000..9dc16da926 --- /dev/null +++ b/yape-financial/yape-transaction/pom.xml @@ -0,0 +1,161 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.5 + + + com.tec.yape.transaction + yape-transaction + jar + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + 1.6.3 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.postgresql + postgresql + runtime + + + org.projectlombok + lombok + true + + + org.mapstruct + mapstruct + ${org.mapstruct.version} + + + org.mapstruct + mapstruct-processor + ${org.mapstruct.version} + provided + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.3.0 + + + org.springdoc + springdoc-openapi-data-rest + 1.6.4 + + + com.fasterxml.jackson.core + jackson-databind + + + com.google.code.gson + gson + 2.8.9 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-cache + + + + org.springframework.boot + spring-boot-starter-test + + + org.mockito + mockito-junit-jupiter + 5.11.0 + test + + + org.springframework.retry + spring-retry + 1.3.1 + + + org.springframework.kafka + spring-kafka + + + org.springframework.kafka + spring-kafka-test + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 21 + + --enable-preview + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + --enable-preview + + + + org.springframework.boot + spring-boot-maven-plugin + + --enable-preview + + + + + + \ No newline at end of file diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/YapeTransactionService.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/YapeTransactionService.java new file mode 100644 index 0000000000..a6f58b0f0c --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/YapeTransactionService.java @@ -0,0 +1,13 @@ +package com.tec.yape.transaction; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; + +@SpringBootApplication +@EnableAsync +public class YapeTransactionService { + public static void main(String[] args) { + SpringApplication.run(YapeTransactionService.class, args); + } +} \ No newline at end of file diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/mapper/TransactionUseCaseMapper.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/mapper/TransactionUseCaseMapper.java new file mode 100644 index 0000000000..8ac7987b51 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/mapper/TransactionUseCaseMapper.java @@ -0,0 +1,35 @@ +package com.tec.yape.transaction.application.mapper; + +import com.tec.yape.transaction.domain.model.TransactionRequest; +import com.tec.yape.transaction.domain.model.TransactionResponse; +import com.tec.yape.transaction.domain.model.TransactionStatus; +import com.tec.yape.transaction.domain.model.TransactionType; +import com.tec.yape.transaction.infrastructure.rest.dto.request.TransactionRequestDto; +import com.tec.yape.transaction.infrastructure.rest.dto.response.TransactionResponseDto; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; + +@Mapper(componentModel = "spring", unmappedSourcePolicy = ReportingPolicy.IGNORE, + imports = {TransactionStatus.class, TransactionType.class}) +public interface TransactionUseCaseMapper { + + TransactionUseCaseMapper MAPPER = Mappers.getMapper(TransactionUseCaseMapper.class); + + TransactionRequest toTransactionRequest(TransactionRequestDto requestDto); + + + TransactionRequest toTransactionResponse(TransactionResponse transactionResponse); + + + @Mapping( + target = "transactionStatus", + expression = "java(new TransactionStatus(transaction.getTransactionStatus().name()))" + ) + @Mapping( + target = "transactionType", + expression = "java(new TransactionType(\"TRANSFER\"))" + ) + TransactionResponseDto toTransactionResponseDto(TransactionResponse transaction); +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/usecase/TransactionUpdateUseCase.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/usecase/TransactionUpdateUseCase.java new file mode 100644 index 0000000000..c00c061910 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/usecase/TransactionUpdateUseCase.java @@ -0,0 +1,34 @@ +package com.tec.yape.transaction.application.usecase; + +import com.tec.yape.transaction.application.mapper.TransactionUseCaseMapper; +import com.tec.yape.transaction.domain.model.TransactionRequest; +import com.tec.yape.transaction.domain.model.TransactionResponse; +import com.tec.yape.transaction.domain.model.TransactionValidatedEvent; +import com.tec.yape.transaction.domain.port.input.TransactionUpdateInPort; +import com.tec.yape.transaction.domain.port.output.TransactionOutPort; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +@Slf4j +public class TransactionUpdateUseCase implements TransactionUpdateInPort { + + private final TransactionOutPort transactionOutPort; + + @Override + public void updateTransactionStatus(TransactionValidatedEvent event) { + log.info("[TransactionUpdateUseCase] Updating transaction {}", event.transactionExternalId()); + + TransactionResponse responseDto = transactionOutPort.findByExternalId(event.transactionExternalId()); + + TransactionRequest transactionRequest = TransactionUseCaseMapper.MAPPER.toTransactionResponse(responseDto); + + transactionRequest.setTransactionStatus(event.status()); + + transactionOutPort.update(transactionRequest); + + log.info("[TransactionUpdateUseCase] Transaction {} updated to {}", transactionRequest.getTransactionExternalId(), transactionRequest.getTransactionStatus()); + } +} \ No newline at end of file diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/usecase/TransactionUseCase.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/usecase/TransactionUseCase.java new file mode 100644 index 0000000000..5447ba8bd9 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/application/usecase/TransactionUseCase.java @@ -0,0 +1,73 @@ +package com.tec.yape.transaction.application.usecase; + + +import com.tec.yape.transaction.application.mapper.TransactionUseCaseMapper; +import com.tec.yape.transaction.domain.enums.TransactionStatus; +import com.tec.yape.transaction.domain.model.TransactionRequest; +import com.tec.yape.transaction.domain.model.TransactionCreatedEvent; +import com.tec.yape.transaction.domain.model.TransactionResponse; +import com.tec.yape.transaction.domain.port.output.TransactionEventPublisherOutPort; +import com.tec.yape.transaction.infrastructure.rest.dto.request.TransactionRequestDto; +import com.tec.yape.transaction.infrastructure.rest.dto.response.TransactionResponseDto; +import com.tec.yape.transaction.domain.port.input.TransactionInPort; +import com.tec.yape.transaction.domain.port.output.TransactionOutPort; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +@Component +@RequiredArgsConstructor +@Slf4j +public class TransactionUseCase implements TransactionInPort { + + private final TransactionOutPort transactionOutPort; + private final TransactionEventPublisherOutPort eventPublisherOutPort; + + @Override + public TransactionResponseDto registerTransaction(TransactionRequestDto request) { + log.info("[TransactionUseCase] start register transaction"); + + TransactionRequest transactionRequest = TransactionUseCaseMapper.MAPPER.toTransactionRequest(request); + transactionRequest.setTransactionExternalId(UUID.randomUUID()); + transactionRequest.setCreatedAt(LocalDateTime.now()); + transactionRequest.setTransactionStatus(TransactionStatus.PENDIENTE); + + TransactionResponse transactionResponse = transactionOutPort.create(transactionRequest); + + TransactionResponseDto response = TransactionUseCaseMapper.MAPPER.toTransactionResponseDto(transactionResponse); + + TransactionCreatedEvent event = new TransactionCreatedEvent( + transactionResponse.getTransactionExternalId(), + transactionResponse.getValue() + ); + + eventPublisherOutPort.publish(event); + log.info("[TransactionUseCase] end register transaction"); + return response; + } + + @Override + public Page findAllPageable(Pageable pageable) { + Page page = transactionOutPort.findAllPageable(pageable); + return page.map(TransactionUseCaseMapper.MAPPER::toTransactionResponseDto); + } + + @Override + public List findAll() { + List transactionResponse = transactionOutPort.findAll(); + return transactionResponse.stream().map(TransactionUseCaseMapper.MAPPER::toTransactionResponseDto).toList(); + } + + @Override + public TransactionResponseDto findByExternalId(UUID transactionExternalId) { + TransactionResponse transactionResponse = transactionOutPort.findByExternalId(transactionExternalId); + return TransactionUseCaseMapper.MAPPER.toTransactionResponseDto(transactionResponse); + } + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/enums/TransactionStatus.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/enums/TransactionStatus.java new file mode 100644 index 0000000000..2849499d02 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/enums/TransactionStatus.java @@ -0,0 +1,7 @@ +package com.tec.yape.transaction.domain.enums; + +public enum TransactionStatus { + PENDIENTE, + APROBADO, + RECHAZADO +} \ No newline at end of file diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java new file mode 100644 index 0000000000..1e29ec6ed0 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java @@ -0,0 +1,16 @@ +package com.tec.yape.transaction.domain.exception; + +import lombok.Getter; + +@Getter +public enum CommonErrorType { + + COMMON_ERROR_400_1("Error en el criterio de ordenación"); + + private final String description; + + + CommonErrorType(String description) { + this.description = description; + } +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/TransactionException.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/TransactionException.java new file mode 100644 index 0000000000..cb29a9b234 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/TransactionException.java @@ -0,0 +1,18 @@ +package com.tec.yape.transaction.domain.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.http.HttpStatus; + +@EqualsAndHashCode(callSuper = true) +@Data +public class TransactionException extends RuntimeException { + + public HttpStatus status; + public String code; + + public TransactionException(HttpStatus httpStatus, String message) { + super(message); + this.status = httpStatus; + } +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionCreatedEvent.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionCreatedEvent.java new file mode 100644 index 0000000000..20a0e2cb6c --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionCreatedEvent.java @@ -0,0 +1,9 @@ +package com.tec.yape.transaction.domain.model; + +import java.math.BigDecimal; +import java.util.UUID; + +public record TransactionCreatedEvent( + UUID transactionExternalId, + BigDecimal value +) {} \ No newline at end of file diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionRequest.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionRequest.java new file mode 100644 index 0000000000..4dd291d25a --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionRequest.java @@ -0,0 +1,24 @@ +package com.tec.yape.transaction.domain.model; + +import com.tec.yape.transaction.domain.enums.TransactionStatus; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.UUID; + +@Getter +@Setter +public class TransactionRequest { + + private UUID id; + private UUID transactionExternalId; + private UUID accountExternalIdDebit; + private UUID accountExternalIdCredit; + private Integer transferTypeId; + private BigDecimal value; + private TransactionStatus transactionStatus; + private LocalDateTime createdAt; + +} \ No newline at end of file diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionResponse.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionResponse.java new file mode 100644 index 0000000000..824b60d5b9 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionResponse.java @@ -0,0 +1,24 @@ +package com.tec.yape.transaction.domain.model; + +import com.tec.yape.transaction.domain.enums.TransactionStatus; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.UUID; + +@Getter +@Setter +public class TransactionResponse { + + private UUID id; + private UUID transactionExternalId; + private UUID accountExternalIdDebit; + private UUID accountExternalIdCredit; + private Integer transferTypeId; + private BigDecimal value; + private TransactionStatus transactionStatus; + private LocalDateTime createdAt; + +} \ No newline at end of file diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionStatus.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionStatus.java new file mode 100644 index 0000000000..dc60bf37dc --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionStatus.java @@ -0,0 +1,5 @@ +package com.tec.yape.transaction.domain.model; + + +public record TransactionStatus(String name) { +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionType.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionType.java new file mode 100644 index 0000000000..08255024c6 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionType.java @@ -0,0 +1,4 @@ +package com.tec.yape.transaction.domain.model; + +public record TransactionType(String name) { +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionValidatedEvent.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionValidatedEvent.java new file mode 100644 index 0000000000..9965e3d70d --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/model/TransactionValidatedEvent.java @@ -0,0 +1,10 @@ +package com.tec.yape.transaction.domain.model; + +import com.tec.yape.transaction.domain.enums.TransactionStatus; + +import java.util.UUID; + +public record TransactionValidatedEvent( + UUID transactionExternalId, + TransactionStatus status) { +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/input/TransactionInPort.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/input/TransactionInPort.java new file mode 100644 index 0000000000..5d68262f30 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/input/TransactionInPort.java @@ -0,0 +1,24 @@ +package com.tec.yape.transaction.domain.port.input; + +import com.tec.yape.transaction.infrastructure.rest.dto.request.TransactionRequestDto; +import com.tec.yape.transaction.infrastructure.rest.dto.response.TransactionResponseDto; +import org.springdoc.api.annotations.ParameterObject; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.UUID; + +public interface TransactionInPort { + + TransactionResponseDto registerTransaction(TransactionRequestDto transactionRequestDto); + + Page findAllPageable( + @ParameterObject Pageable pageable); + + List findAll(); + + + TransactionResponseDto findByExternalId(UUID transactionExternalId); + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/input/TransactionUpdateInPort.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/input/TransactionUpdateInPort.java new file mode 100644 index 0000000000..4aa37bd5f3 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/input/TransactionUpdateInPort.java @@ -0,0 +1,7 @@ +package com.tec.yape.transaction.domain.port.input; + +import com.tec.yape.transaction.domain.model.TransactionValidatedEvent; + +public interface TransactionUpdateInPort { + void updateTransactionStatus(TransactionValidatedEvent event); +} \ No newline at end of file diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/output/TransactionEventPublisherOutPort.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/output/TransactionEventPublisherOutPort.java new file mode 100644 index 0000000000..32c8ae736c --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/output/TransactionEventPublisherOutPort.java @@ -0,0 +1,8 @@ +package com.tec.yape.transaction.domain.port.output; + +import com.tec.yape.transaction.domain.model.TransactionCreatedEvent; + +public interface TransactionEventPublisherOutPort { + + void publish(TransactionCreatedEvent transaction); +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/output/TransactionOutPort.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/output/TransactionOutPort.java new file mode 100644 index 0000000000..f8e4e89fb3 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/port/output/TransactionOutPort.java @@ -0,0 +1,22 @@ +package com.tec.yape.transaction.domain.port.output; + +import com.tec.yape.transaction.domain.model.TransactionRequest; +import com.tec.yape.transaction.domain.model.TransactionResponse; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.UUID; + +public interface TransactionOutPort { + + Page findAllPageable(Pageable pageable); + + List findAll(); + + TransactionResponse create(TransactionRequest transactionRequest); + + void update(TransactionRequest transactionRequest); + + TransactionResponse findByExternalId(UUID transactionExternalId); +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/util/BeanConstants.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/util/BeanConstants.java new file mode 100644 index 0000000000..88818bba51 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/util/BeanConstants.java @@ -0,0 +1,8 @@ +package com.tec.yape.transaction.domain.util; + +public class BeanConstants { + + public static final String ASYNC_SAVE_CALL_HISTORY = "asyncSaveCallHistory"; + + public static final String ASYNC_VIRTUAL_SAVE_CALL_HISTORY = "asyncVirtualSaveCallHistory"; +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/util/JsonUtil.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/util/JsonUtil.java new file mode 100644 index 0000000000..79cb80cdc6 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/util/JsonUtil.java @@ -0,0 +1,40 @@ +package com.tec.yape.transaction.domain.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +public class JsonUtil { + + + private JsonUtil() { + + } + + public static String ToJSON(Object object) throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + return mapper.writeValueAsString(object); + } + + public static T fromJson(String message, Class tClass) { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + + try { + return mapper.readValue(message, tClass); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/TransactionHelper.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/TransactionHelper.java new file mode 100644 index 0000000000..7a61af5498 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/TransactionHelper.java @@ -0,0 +1,19 @@ +package com.tec.yape.transaction.infrastructure; + +import org.springframework.data.domain.Sort; + +public class TransactionHelper { + + private TransactionHelper() { + + } + + public static boolean validateSorName(Sort sort) { + if (sort.isSorted()) { + return !sort.iterator().next().getProperty().equals("string"); + } else { + System.out.println("No sort criteria applied"); + return true; + } + } +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java new file mode 100644 index 0000000000..9e7e27de7c --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java @@ -0,0 +1,68 @@ +package com.tec.yape.transaction.infrastructure.adapter; + + +import com.tec.yape.transaction.domain.exception.CommonErrorType; +import com.tec.yape.transaction.domain.exception.TransactionException; +import com.tec.yape.transaction.domain.model.TransactionRequest; +import com.tec.yape.transaction.domain.model.TransactionResponse; +import com.tec.yape.transaction.domain.port.output.TransactionOutPort; +import com.tec.yape.transaction.infrastructure.TransactionHelper; +import com.tec.yape.transaction.infrastructure.repository.TransactionRepository; +import com.tec.yape.transaction.infrastructure.repository.model.entity.TransactionEntity; +import com.tec.yape.transaction.infrastructure.repository.model.mapper.TransactionMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.UUID; + + +@Component +@RequiredArgsConstructor +public class TransactionAdapter implements TransactionOutPort { + + private final TransactionRepository transactionRepository; + + @Override + public Page findAllPageable(Pageable pageable) { + + Sort sort = pageable.getSort().isUnsorted() ? Sort.by("id") : pageable.getSort(); + if (!TransactionHelper.validateSorName(sort)) { + throw new TransactionException(HttpStatus.BAD_REQUEST, CommonErrorType.COMMON_ERROR_400_1.getDescription()); + } + + return transactionRepository.findAll(PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort)) + .map(TransactionMapper.MAPPER::toTransactionResponse); + } + + @Override + public List findAll() { + return transactionRepository.findAll().stream() + .map(TransactionMapper.MAPPER::toTransactionResponse).toList(); + } + + + + @Override + public TransactionResponse create(TransactionRequest transactionRequest) { + TransactionEntity transactionEntity = TransactionMapper.MAPPER.toTransaction(transactionRequest); + return TransactionMapper.MAPPER.toTransactionResponse(transactionRepository.save(transactionEntity)); + } + + @Override + public void update(TransactionRequest transactionRequest) { + TransactionEntity transactionEntity = TransactionMapper.MAPPER.toTransaction(transactionRequest); + TransactionMapper.MAPPER.toTransactionResponse(transactionRepository.save(transactionEntity)); + } + + @Override + public TransactionResponse findByExternalId(UUID transactionExternalId) { + TransactionEntity transactionEntity = transactionRepository.findByTransactionExternalId(transactionExternalId); + return TransactionMapper.MAPPER.toTransactionResponse(transactionEntity); + } +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionPublisherAdapter.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionPublisherAdapter.java new file mode 100644 index 0000000000..b78116453d --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionPublisherAdapter.java @@ -0,0 +1,21 @@ +package com.tec.yape.transaction.infrastructure.adapter; + +import com.tec.yape.transaction.domain.model.TransactionCreatedEvent; +import com.tec.yape.transaction.domain.port.output.TransactionEventPublisherOutPort; +import com.tec.yape.transaction.infrastructure.messaging.producer.TransactionEventPublisher; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +@RequiredArgsConstructor +public class TransactionPublisherAdapter implements TransactionEventPublisherOutPort { + + private final TransactionEventPublisher transactionEventPublisher; + + @Override + public void publish(TransactionCreatedEvent transaction) { + transactionEventPublisher.publish(transaction); + } +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/ExecutorAsyncVirtualConfig.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/ExecutorAsyncVirtualConfig.java new file mode 100644 index 0000000000..9ef30ef76a --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/ExecutorAsyncVirtualConfig.java @@ -0,0 +1,19 @@ +package com.tec.yape.transaction.infrastructure.config; + +import com.tec.yape.transaction.domain.util.BeanConstants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +@Configuration +public class ExecutorAsyncVirtualConfig { + + @Bean(name = BeanConstants.ASYNC_VIRTUAL_SAVE_CALL_HISTORY) + public Executor asyncVirtualSaveCallHistory() { + return Executors.newThreadPerTaskExecutor( + Thread.ofVirtual().name("virtual-thread-", 0)::unstarted + ); + } +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/GlobalExceptionHandler.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/GlobalExceptionHandler.java new file mode 100644 index 0000000000..730d15d103 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/GlobalExceptionHandler.java @@ -0,0 +1,19 @@ +package com.tec.yape.transaction.infrastructure.config; + +import com.tec.yape.transaction.domain.exception.TransactionException; +import com.tec.yape.transaction.infrastructure.config.dto.ErrorDto; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(value = TransactionException.class) + public ResponseEntity businessExceptionHandler(TransactionException ex) { + ErrorDto error = ErrorDto.builder() + .status(ex.getStatus()) + .code(ex.getCode()).message(ex.getMessage()).build(); + return new ResponseEntity<>(error, ex.getStatus()); + } +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/OpenApicConfig.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/OpenApicConfig.java new file mode 100644 index 0000000000..be3bf00da9 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/OpenApicConfig.java @@ -0,0 +1,35 @@ +package com.tec.yape.transaction.infrastructure.config; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; +import io.swagger.v3.oas.annotations.info.Contact; +import io.swagger.v3.oas.annotations.info.Info; +import io.swagger.v3.oas.annotations.info.License; +import io.swagger.v3.oas.annotations.security.SecurityScheme; +import org.springframework.context.annotation.Configuration; + +@Configuration +@OpenAPIDefinition( + info = @Info( + title = "API-REST TRANSACTION", + version = "1.0", + + description = "Api Rest para transacciones", + + license = @License( + name = "Apache 2.0", + url = "http://www.apache.org/licenses/LICENSE-2.0.html" + ), + + contact = @Contact( + name = "evercarlos.com", + url = "evercarlos.com", + email = "evercarlosrojas@gmail.com") + ) +) +@SecurityScheme(name = "bearerAuth", type = SecuritySchemeType.HTTP, bearerFormat = "JWT", description = "Autenticación" + + "tipo Bearer API-TC", scheme = "bearer") +public class OpenApicConfig { + + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/dto/ErrorDto.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/dto/ErrorDto.java new file mode 100644 index 0000000000..7943aa2499 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/dto/ErrorDto.java @@ -0,0 +1,13 @@ +package com.tec.yape.transaction.infrastructure.config.dto; + +import lombok.Builder; +import lombok.Data; +import org.springframework.http.HttpStatus; + +@Data +@Builder +public class ErrorDto { + private String code; + private String message; + private HttpStatus status; +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/kafka/consumer/KafkaConsumerConfig.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/kafka/consumer/KafkaConsumerConfig.java new file mode 100644 index 0000000000..c4f1a0045c --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/kafka/consumer/KafkaConsumerConfig.java @@ -0,0 +1,44 @@ +package com.tec.yape.transaction.infrastructure.config.kafka.consumer; + +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; +import org.springframework.kafka.config.KafkaListenerContainerFactory; +import org.springframework.kafka.core.ConsumerFactory; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.listener.ConcurrentMessageListenerContainer; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class KafkaConsumerConfig { + + @Value("${spring.kafka.bootstrap-servers}") + private String boostrapServers; + + + public Map consumerConfig() { + Map properties = new HashMap<>(); + properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServers); + properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringSerializer.class);// deserializa: convirte de string a bytes + properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringSerializer.class);// deserializa + return properties; + } + + @Bean + public ConsumerFactory consumerFactory() { + return new DefaultKafkaConsumerFactory<>(consumerConfig()); + } + + @Bean // Para poder inyectar en otros lugares + public KafkaListenerContainerFactory> consumer() { + ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory<>(); + factory.setConsumerFactory(consumerFactory()); + return factory; + } + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/kafka/producer/KafkaProducerConfig.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/kafka/producer/KafkaProducerConfig.java new file mode 100644 index 0000000000..c244942525 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/kafka/producer/KafkaProducerConfig.java @@ -0,0 +1,41 @@ +package com.tec.yape.transaction.infrastructure.config.kafka.producer; + +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.core.DefaultKafkaProducerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.core.ProducerFactory; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class KafkaProducerConfig { + + @Value("${spring.kafka.bootstrap-servers}") + private String boostrapServers; + + + public Map producerConfig() { + Map properties = new HashMap<>(); + properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServers); + properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);// serializa: convirte de string a bytes + properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);// serializa + return properties; + } + + @Bean + public ProducerFactory providerFactory() { + return new DefaultKafkaProducerFactory<>(producerConfig()); + } + + // Envian mensaje + @Bean + public KafkaTemplate kafkaTemplate(ProducerFactory providerFactory) {// inyectando + return new KafkaTemplate<>(providerFactory); + } + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/consumer/TransactionValidatedConsumer.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/consumer/TransactionValidatedConsumer.java new file mode 100644 index 0000000000..a2a59e6392 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/consumer/TransactionValidatedConsumer.java @@ -0,0 +1,32 @@ +package com.tec.yape.transaction.infrastructure.messaging.consumer; + +import com.tec.yape.transaction.domain.model.TransactionValidatedEvent; +import com.tec.yape.transaction.domain.port.input.TransactionUpdateInPort; +import com.tec.yape.transaction.domain.util.JsonUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.stereotype.Component; + +import java.nio.charset.StandardCharsets; +import java.util.Map; + +@Component +@Slf4j +@RequiredArgsConstructor +public class TransactionValidatedConsumer { + + private final TransactionUpdateInPort transactionUpdateInPort; + + @KafkaListener(topics = "topic-transaction-validated", groupId = "transaction-service-group") + public void listener(String message, @Headers Map headers) { + log.info("[TransactionValidatedConsumer] Event received: {}", message); + + String jsonMessage = new String(message.getBytes(), StandardCharsets.UTF_8); + + TransactionValidatedEvent event = JsonUtil.fromJson(jsonMessage, TransactionValidatedEvent.class); + + transactionUpdateInPort.updateTransactionStatus(event); + } +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/producer/TransactionEventPublisher.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/producer/TransactionEventPublisher.java new file mode 100644 index 0000000000..c85adc3660 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/producer/TransactionEventPublisher.java @@ -0,0 +1,8 @@ +package com.tec.yape.transaction.infrastructure.messaging.producer; + +import com.tec.yape.transaction.domain.model.TransactionCreatedEvent; + +public interface TransactionEventPublisher { + + void publish(TransactionCreatedEvent message); +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/producer/TransactionEventPublisherImpl.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/producer/TransactionEventPublisherImpl.java new file mode 100644 index 0000000000..0258974f91 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/messaging/producer/TransactionEventPublisherImpl.java @@ -0,0 +1,52 @@ +package com.tec.yape.transaction.infrastructure.messaging.producer; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.tec.yape.transaction.domain.model.TransactionCreatedEvent; +import com.tec.yape.transaction.domain.util.JsonUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.support.KafkaHeaders; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +@Slf4j +public class TransactionEventPublisherImpl implements TransactionEventPublisher { + + private final KafkaTemplate kafkaTemplate; + + public TransactionEventPublisherImpl(KafkaTemplate kafkaTemplate) { + this.kafkaTemplate = kafkaTemplate; + } + + @Override + public void publish(TransactionCreatedEvent event) { + log.info("[TransactionEventPublisherImpl] {}", "Start async process"); + + try { + String message = JsonUtil.ToJSON(event); + + Message kafkaMessage = MessageBuilder + .withPayload(message) + .setHeader(KafkaHeaders.TOPIC, "topic-transaction") + .copyHeaders(getHeaders()) + .build(); + + kafkaTemplate.send(kafkaMessage); + + } catch (JsonProcessingException e) { + log.error("[TransactionEventPublisherImpl] message:{}", e.getMessage()); + } + } + + private Map getHeaders() { + Map headers = new HashMap<>(); + headers.put("client-id", "EVER CARLOS ROJAS"); + return headers; + } + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/TransactionRepository.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/TransactionRepository.java new file mode 100644 index 0000000000..16358f2754 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/TransactionRepository.java @@ -0,0 +1,14 @@ +package com.tec.yape.transaction.infrastructure.repository; + +import com.tec.yape.transaction.infrastructure.repository.model.entity.TransactionEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.UUID; + +public interface TransactionRepository extends JpaRepository { + + @Query("select t from TransactionEntity t where t.transactionExternalId=:transactionExternalId") + TransactionEntity findByTransactionExternalId(UUID transactionExternalId); +} + diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/model/entity/TransactionEntity.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/model/entity/TransactionEntity.java new file mode 100644 index 0000000000..a0757268c7 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/model/entity/TransactionEntity.java @@ -0,0 +1,36 @@ +package com.tec.yape.transaction.infrastructure.repository.model.entity; + + +import com.tec.yape.transaction.domain.enums.TransactionStatus; +import jakarta.persistence.*; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.UUID; + + +@Entity +@Data +@Table(name = "transacciones") +public class TransactionEntity { + + @Id + @GeneratedValue + private UUID id; + + private UUID transactionExternalId; + + private UUID accountExternalIdDebit; + + private UUID accountExternalIdCredit; + + private Integer transferTypeId; + + private BigDecimal value; + + @Enumerated(EnumType.STRING) + private TransactionStatus transactionStatus; + + private LocalDateTime createdAt; +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/model/mapper/TransactionMapper.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/model/mapper/TransactionMapper.java new file mode 100644 index 0000000000..bde705dc31 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/repository/model/mapper/TransactionMapper.java @@ -0,0 +1,22 @@ +package com.tec.yape.transaction.infrastructure.repository.model.mapper; + +import com.tec.yape.transaction.domain.model.TransactionRequest; +import com.tec.yape.transaction.domain.model.TransactionResponse; +import com.tec.yape.transaction.domain.model.TransactionStatus; +import com.tec.yape.transaction.domain.model.TransactionType; +import com.tec.yape.transaction.infrastructure.repository.model.entity.TransactionEntity; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; + +@Mapper(componentModel = "spring", unmappedSourcePolicy = ReportingPolicy.IGNORE, + imports = {TransactionStatus.class, TransactionType.class}) +public interface TransactionMapper { + + TransactionMapper MAPPER = Mappers.getMapper(TransactionMapper.class); + + TransactionEntity toTransaction(TransactionRequest transactionRequest); + + TransactionResponse toTransactionResponse(TransactionEntity transactionEntity); + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/IndexController.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/IndexController.java new file mode 100644 index 0000000000..5c0c70a26d --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/IndexController.java @@ -0,0 +1,13 @@ +package com.tec.yape.transaction.infrastructure.rest.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class IndexController { + + @RequestMapping("/") + public String getIndex(){ + return "redirect:swagger-ui.html"; + } +} \ No newline at end of file diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/v1/TransactionController.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/v1/TransactionController.java new file mode 100644 index 0000000000..24227481b7 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/v1/TransactionController.java @@ -0,0 +1,52 @@ +package com.tec.yape.transaction.infrastructure.rest.controller.v1; + +import com.tec.yape.transaction.application.usecase.TransactionUseCase; +import com.tec.yape.transaction.infrastructure.rest.dto.request.TransactionRequestDto; +import com.tec.yape.transaction.infrastructure.rest.dto.response.TransactionResponseDto; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import org.springdoc.api.annotations.ParameterObject; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.UUID; + + +@RestController +@RequestMapping(value = "/api/v1/transaction", produces = "application/json") +@CrossOrigin("*") +@RequiredArgsConstructor +public class TransactionController { + + private final TransactionUseCase transactionUseCase; + + + @Operation(summary = "register a new transaction") + @PostMapping + public TransactionResponseDto registerTransaction(@RequestBody TransactionRequestDto transactionRequestDto) { + return transactionUseCase.registerTransaction(transactionRequestDto); + } + + @Operation(summary = "List transactions", description = "Method order: \"id,asc\"") + @GetMapping("withPagination") + public Page findAllPageable( + @ParameterObject Pageable pageable) { + return transactionUseCase.findAllPageable(pageable); + } + + @Operation(summary = "List transactions") + @GetMapping() + public List findAll() { + return transactionUseCase.findAll(); + } + + @Operation(summary = "Find transaction by ExternalId") + @GetMapping("/{transactionExternalId}") + public TransactionResponseDto findByExternalId( + @PathVariable UUID transactionExternalId) { + return transactionUseCase.findByExternalId(transactionExternalId); + } + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/request/TransactionRequestDto.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/request/TransactionRequestDto.java new file mode 100644 index 0000000000..053093aadb --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/request/TransactionRequestDto.java @@ -0,0 +1,25 @@ +package com.tec.yape.transaction.infrastructure.rest.dto.request; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.util.UUID; + +@Getter +@Setter +public class TransactionRequestDto { + + private UUID accountExternalIdDebit; + + private UUID accountExternalIdCredit; + + @JsonProperty("tranferTypeId") + private Integer transferTypeId; + + private BigDecimal value; + + +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/response/TransactionResponseDto.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/response/TransactionResponseDto.java new file mode 100644 index 0000000000..364e5a60e2 --- /dev/null +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/response/TransactionResponseDto.java @@ -0,0 +1,26 @@ +package com.tec.yape.transaction.infrastructure.rest.dto.response; + +import com.tec.yape.transaction.domain.model.TransactionStatus; +import com.tec.yape.transaction.domain.model.TransactionType; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.UUID; + +@Setter +@Getter +public class TransactionResponseDto { + + private UUID transactionExternalId; + + private TransactionType transactionType; + + private TransactionStatus transactionStatus; + + private BigDecimal value; + + private LocalDateTime createdAt; + +} diff --git a/yape-financial/yape-transaction/src/main/resources/application.properties b/yape-financial/yape-transaction/src/main/resources/application.properties new file mode 100644 index 0000000000..3a29add21b --- /dev/null +++ b/yape-financial/yape-transaction/src/main/resources/application.properties @@ -0,0 +1,22 @@ +server.tomcat.uri-encoding=UTF-8 +server.port=8081 + +#Datasource +spring.datasource.url=jdbc:postgresql://192.168.18.179:5432/dbtransactionv1 +#spring.datasource.username=postgres +spring.datasource.username=ever +spring.datasource.password=123 + +spring.datasource.driverClassName=org.postgresql.Driver +spring.jpa.show-sql=false +spring.jpa.hibernate.ddl-auto=none +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.properties.hibernate.current_session_context_class=thread +spring.jpa.properties.hibernate.implicit_naming_strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults= false +spring.jpa.properties.hibernate.temp.use_nationalized_character_data= true +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect + +# settings KAFKA +# spring.kafka.bootstrap-servers = localhost:9092 +spring.kafka.bootstrap-servers=kafka:9092 diff --git a/yape-financial/yape-transaction/src/test/java/com/tec/transaction/AbstractContextTest.java b/yape-financial/yape-transaction/src/test/java/com/tec/transaction/AbstractContextTest.java new file mode 100644 index 0000000000..ea50b1382c --- /dev/null +++ b/yape-financial/yape-transaction/src/test/java/com/tec/transaction/AbstractContextTest.java @@ -0,0 +1,51 @@ +package com.tec.transaction; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.nio.file.Files; +import java.nio.file.Paths; + +@ExtendWith(SpringExtension.class) +@TestPropertySource(locations = "classpath:application-test.properties") +public class AbstractContextTest { + + protected static final String DEFAULT_TOKEN = ""; + protected static ObjectMapper objectMapper; + + static { + objectMapper = getObjectMapper(); + } + + + protected static String getJsonFromPath(String pathJson) throws Exception { + return new String(Files.readAllBytes(Paths.get(AbstractContextTest.class.getResource(pathJson).toURI()))); + } + + protected static T convertTo(String path, Class aClass) throws Exception { + String jsonRequest = getJsonFromPath(path); + return objectMapper.readValue(jsonRequest, aClass); + } + + public static String convertToJSONString(Object object) throws JsonProcessingException { + ObjectMapper mapper = getObjectMapper(); + return mapper.writeValueAsString(object); + } + + public static ObjectMapper getObjectMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + return mapper; + } + +} diff --git a/yape-financial/yape-transaction/src/test/resources/application-test.properties b/yape-financial/yape-transaction/src/test/resources/application-test.properties new file mode 100644 index 0000000000..e69de29bb2 From 0f614e8a2b8224b5a80263891cac0f1e1f81d940 Mon Sep 17 00:00:00 2001 From: evercarlos Date: Wed, 28 Jan 2026 23:32:36 -0500 Subject: [PATCH 09/11] added test and update logic transaction --- README.md | 128 +++++++++++++++++- .../tec/antifraud/AbstractContextTest.java | 51 ------- .../antifraud/FraudValidationUseCaseTest.java | 51 +++++++ .../domain/exception/CommonErrorType.java | 4 +- .../adapter/TransactionAdapter.java | 7 + .../TransactionUpdateUseCaseTest.java | 62 +++++++++ .../application/TransactionUseCaseTest.java | 69 ++++++++++ .../TransactionControllerTest.java | 50 +++++++ 8 files changed, 369 insertions(+), 53 deletions(-) delete mode 100644 yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/AbstractContextTest.java create mode 100644 yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/FraudValidationUseCaseTest.java create mode 100644 yape-financial/yape-transaction/src/test/java/com/tec/transaction/application/TransactionUpdateUseCaseTest.java create mode 100644 yape-financial/yape-transaction/src/test/java/com/tec/transaction/application/TransactionUseCaseTest.java create mode 100644 yape-financial/yape-transaction/src/test/java/com/tec/transaction/infrastructure/TransactionControllerTest.java diff --git a/README.md b/README.md index f7f13be679..d58cc41f8e 100644 --- a/README.md +++ b/README.md @@ -116,4 +116,130 @@ curl --location 'http://localhost:8081/api/v1/transaction/{transactionExternalId ### DIAGRAMA -![](./resources/arq.png) \ No newline at end of file +![](./resources/arq.png) + +### NOTA +- +## APLICACIÓN DE TRANSACCIONES: ```YAPE-FINANCIAL``` +Aplicación de microservicios para manejo de transacciones financieras con validación antifraude y comunicación asíncrona mediante Kafka. + +### ANTIFRAUDE + +- Al crear una transacción, se publica un evento en Kafka. +- Un consumidor valida reglas antifraude. +- La transacción puede ser aprobada o rechazada según el monto configurado. + +### REQUISITOS + +- Docker >= 27.x +- Docker Compose >= 2.x + +### COMPONENTES + +- JAVA: 21 +- SPRING BOOT: 3.2.5 +- DOCKER +- KAFKA +- POSTGRESQL + +### INSTALACIÓN + +- Clonar el repositorio: + +```bash + git clone https://github.com/evercarlos/app-nodejs-codechallenge.git + ``` + - Entrar a la rama del proyecto: + ```bash + git checkout java-codechallenge + ``` + +- Construir y levantar los contenedores con Docker Compose + + ```bash + docker-compose up --build -d + ``` + +### CONFIGURACIÓN + +Las variables de entorno principales se encuentran en el archivo `docker-compose.yml`: +- Base de datos PostgreSQL +- Kafka +- Puertos de exposición + +### URL DEL MICROSERVICIO Y DOCUMENTACIÓN SWAGGER +- http://localhost:8081 +- Swagger UI: http://localhost:8081/swagger-ui.html + +### ARQUITECTURA + +La aplicación sigue una arquitectura hexagonal (Ports & Adapters), separando: +- Aplication +- Domain +- Infraestructure (REST, Kafka, persistencia) + +La validación antifraude se realiza de forma desacoplada mediante eventos publicados en Kafka. + +### ENDPOINTS DISPONIBLES +1. Crea una transacción + + ```bash +curl --location 'http://localhost:8081/api/v1/transaction' \ +--header 'Content-Type: application/json' \ +--data '{ + "accountExternalIdDebit": "550e8400-e29b-41d4-a716-446655440000", + "accountExternalIdCredit": "660e8400-e29b-41d4-a716-446655440111", + "tranferTypeId": 1, + "value": 10001 + } ' + ``` + + 2. Lista transacción con paginación + + ```bash +curl --location 'http://localhost:8081/api/v1/transaction/withPagination?number=1&size=10' \ +--header 'Content-Type: application/json' \ +--data '' + ``` + 3. Lista transacción sin paginación + + ```bash +curl --location 'http://localhost:8081/api/v1/transaction' \ +--header 'Content-Type: application/json' \ +--data '' + ``` + + 4. Busca una transaccion por transactionExternalId + + ```bash +curl --location 'http://localhost:8081/api/v1/transaction/{transactionExternalId}' \ +--header 'Content-Type: application/json' \ +--data '' + ``` + ### FLUJO DE LA TRANSACCIÓN + +#### Creación de una transacción +1. El cliente crea una transacción mediante el endpoint: + `[POST] /api/v1/transaction`. +2. La transacción se persiste inicialmente con estado `PENDIENTE` en la base de datos PostgreSQL. +3. Se publica un evento de transacción en un tópico de Kafka para su validación antifraude. +4. El microservicio de antifraude consume el evento y valida las reglas de negocio. +5. Como resultado de la validación, la transacción es: + - `APROBADO` si cumple las reglas. + - `RECHAZADO` si no cumple las reglas. +6. El estado final de la transacción se actualiza en la base de datos. + +#### Consulta de transacciones +- Las transacciones pueden consultarse: + - Con paginación. + - Sin paginación. + - Por `transactionExternalId`. + + ### DIAGRAMA + +![](./resources/arq.png) + +### NOTA +- Para escenarios de alto volumen y concurrencia, una alternativa sería Cassandra, donde el modelo estaría orientado a las +consultas y permitiría alta disponibilidad y escalabilidad horizontal. + diff --git a/yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/AbstractContextTest.java b/yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/AbstractContextTest.java deleted file mode 100644 index 896807008f..0000000000 --- a/yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/AbstractContextTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.tec.antifraud; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.nio.file.Files; -import java.nio.file.Paths; - -@ExtendWith(SpringExtension.class) -@TestPropertySource(locations = "classpath:application-test.properties") -public class AbstractContextTest { - - protected static final String DEFAULT_TOKEN = ""; - protected static ObjectMapper objectMapper; - - static { - objectMapper = getObjectMapper(); - } - - - protected static String getJsonFromPath(String pathJson) throws Exception { - return new String(Files.readAllBytes(Paths.get(AbstractContextTest.class.getResource(pathJson).toURI()))); - } - - protected static T convertTo(String path, Class aClass) throws Exception { - String jsonRequest = getJsonFromPath(path); - return objectMapper.readValue(jsonRequest, aClass); - } - - public static String convertToJSONString(Object object) throws JsonProcessingException { - ObjectMapper mapper = getObjectMapper(); - return mapper.writeValueAsString(object); - } - - public static ObjectMapper getObjectMapper() { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - mapper.registerModule(new Jdk8Module()); - mapper.registerModule(new JavaTimeModule()); - return mapper; - } - -} diff --git a/yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/FraudValidationUseCaseTest.java b/yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/FraudValidationUseCaseTest.java new file mode 100644 index 0000000000..522c993588 --- /dev/null +++ b/yape-financial/yape-antifraud/src/test/java/com/tec/antifraud/FraudValidationUseCaseTest.java @@ -0,0 +1,51 @@ +package com.tec.antifraud; + +import com.tec.yape.antifraud.application.usecase.FraudValidationUseCase; +import com.tec.yape.antifraud.domain.enums.TransactionStatus; +import com.tec.yape.antifraud.domain.model.TransactionCreatedEvent; +import com.tec.yape.antifraud.domain.port.output.TransactionStatusPublisherOutPort; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.math.BigDecimal; +import java.util.UUID; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.verify; + +@ExtendWith(MockitoExtension.class) +class FraudValidationUseCaseTest { + + @Mock + private TransactionStatusPublisherOutPort publisher; + + @InjectMocks + private FraudValidationUseCase useCase; + + @Test + void shouldApproveTransactionWhenValueIsLessOrEqualThan1000() { + TransactionCreatedEvent event = new TransactionCreatedEvent( + UUID.randomUUID(), + new BigDecimal("1000") + ); + + useCase.validate(event); + + verify(publisher).publish(argThat(e -> e.status().equals(TransactionStatus.APROBADO))); + } + + @Test + void shouldRejectTransactionWhenValueIsGreaterThan1000() { + TransactionCreatedEvent event = new TransactionCreatedEvent( + UUID.randomUUID(), + new BigDecimal("1500") + ); + + useCase.validate(event); + + verify(publisher).publish(argThat(e -> e.status().equals(TransactionStatus.RECHAZADO))); + } +} diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java index 1e29ec6ed0..e42568f863 100644 --- a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java @@ -5,7 +5,9 @@ @Getter public enum CommonErrorType { - COMMON_ERROR_400_1("Error en el criterio de ordenación"); + COMMON_ERROR_400_1("Error en el criterio de ordenación"), + + COMMON_ERROR_404_1("Registro no encontrado"); private final String description; diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java index 9e7e27de7c..a104eebce0 100644 --- a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java @@ -57,12 +57,19 @@ public TransactionResponse create(TransactionRequest transactionRequest) { @Override public void update(TransactionRequest transactionRequest) { TransactionEntity transactionEntity = TransactionMapper.MAPPER.toTransaction(transactionRequest); + if (transactionEntity == null) { + throw new TransactionException(HttpStatus.NOT_FOUND, CommonErrorType.COMMON_ERROR_404_1.getDescription()); + } TransactionMapper.MAPPER.toTransactionResponse(transactionRepository.save(transactionEntity)); } @Override public TransactionResponse findByExternalId(UUID transactionExternalId) { TransactionEntity transactionEntity = transactionRepository.findByTransactionExternalId(transactionExternalId); + if (transactionEntity == null) { + throw new TransactionException(HttpStatus.NOT_FOUND, CommonErrorType.COMMON_ERROR_404_1.getDescription()); + } + return TransactionMapper.MAPPER.toTransactionResponse(transactionEntity); } } diff --git a/yape-financial/yape-transaction/src/test/java/com/tec/transaction/application/TransactionUpdateUseCaseTest.java b/yape-financial/yape-transaction/src/test/java/com/tec/transaction/application/TransactionUpdateUseCaseTest.java new file mode 100644 index 0000000000..8645fd3ab9 --- /dev/null +++ b/yape-financial/yape-transaction/src/test/java/com/tec/transaction/application/TransactionUpdateUseCaseTest.java @@ -0,0 +1,62 @@ +package com.tec.transaction.application; + +import com.tec.yape.transaction.application.usecase.TransactionUpdateUseCase; +import com.tec.yape.transaction.domain.enums.TransactionStatus; +import com.tec.yape.transaction.domain.model.TransactionResponse; +import com.tec.yape.transaction.domain.model.TransactionValidatedEvent; +import com.tec.yape.transaction.domain.port.output.TransactionOutPort; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.math.BigDecimal; +import java.util.UUID; + +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class TransactionUpdateUseCaseTest { + + @Mock + private TransactionOutPort transactionOutPort; + + @InjectMocks + private TransactionUpdateUseCase useCase; + + @Test + void shouldUpdateTransactionStatus() { + + TransactionValidatedEvent event = new TransactionValidatedEvent( + UUID.randomUUID(), + TransactionStatus.APROBADO + ); + when(transactionOutPort.findByExternalId(any())) + .thenReturn(transactionResponse()); + + useCase.updateTransactionStatus(event); + + verify(transactionOutPort).update(argThat(request -> + request.getTransactionStatus() == TransactionStatus.APROBADO + )); + } + + + private TransactionResponse transactionResponse() { + UUID transactionId = UUID.fromString("231111ef-5c32-4294-bf0a-18ff2193fa90"); + UUID debitId = UUID.fromString("550e8400-e29b-41d4-a716-446655440000"); + UUID creditId = UUID.fromString("660e8400-e29b-41d4-a716-446655440111"); + + TransactionResponse transactionResponse = new TransactionResponse(); + transactionResponse.setId(UUID.randomUUID()); + transactionResponse.setTransactionExternalId(transactionId); + transactionResponse.setAccountExternalIdCredit(debitId); + transactionResponse.setAccountExternalIdDebit(creditId); + transactionResponse.setValue(new BigDecimal("500")); + transactionResponse.setTransactionStatus(TransactionStatus.PENDIENTE); + return transactionResponse; + } + + +} diff --git a/yape-financial/yape-transaction/src/test/java/com/tec/transaction/application/TransactionUseCaseTest.java b/yape-financial/yape-transaction/src/test/java/com/tec/transaction/application/TransactionUseCaseTest.java new file mode 100644 index 0000000000..83553159e6 --- /dev/null +++ b/yape-financial/yape-transaction/src/test/java/com/tec/transaction/application/TransactionUseCaseTest.java @@ -0,0 +1,69 @@ +package com.tec.transaction.application; + +import com.tec.yape.transaction.application.mapper.TransactionUseCaseMapper; +import com.tec.yape.transaction.application.usecase.TransactionUseCase; +import com.tec.yape.transaction.domain.enums.TransactionStatus; +import com.tec.yape.transaction.domain.model.TransactionRequest; +import com.tec.yape.transaction.domain.model.TransactionResponse; +import com.tec.yape.transaction.domain.port.output.TransactionEventPublisherOutPort; +import com.tec.yape.transaction.domain.port.output.TransactionOutPort; +import com.tec.yape.transaction.infrastructure.rest.dto.request.TransactionRequestDto; +import com.tec.yape.transaction.infrastructure.rest.dto.response.TransactionResponseDto; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.math.BigDecimal; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class TransactionUseCaseTest { + + @Mock + private TransactionOutPort transactionOutPort; + + @Mock + private TransactionEventPublisherOutPort eventPublisher; + + @InjectMocks + private TransactionUseCase useCase; + + @Test + void shouldCreateTransactionWithPendingStatus() { + + TransactionRequestDto request = new TransactionRequestDto(); + request.setValue(new BigDecimal("500")); + + + when(transactionOutPort.create(any(TransactionRequest.class))) + .thenReturn(transactionResponse()); + + TransactionResponseDto response = useCase.registerTransaction(request); + + assertEquals(TransactionStatus.PENDIENTE.name(), response.getTransactionStatus().name()); + verify(eventPublisher).publish(any()); + } + + + private TransactionResponse transactionResponse() { + UUID transactionId = UUID.fromString("231111ef-5c32-4294-bf0a-18ff2193fa90"); + UUID debitId = UUID.fromString("550e8400-e29b-41d4-a716-446655440000"); + UUID creditId = UUID.fromString("660e8400-e29b-41d4-a716-446655440111"); + + TransactionResponse transactionResponse = new TransactionResponse(); + transactionResponse.setId(UUID.randomUUID()); + transactionResponse.setTransactionExternalId(transactionId); + transactionResponse.setAccountExternalIdCredit(debitId); + transactionResponse.setAccountExternalIdDebit(creditId); + transactionResponse.setValue(new BigDecimal("500")); + transactionResponse.setTransactionStatus(TransactionStatus.PENDIENTE); + return transactionResponse; + } + + +} diff --git a/yape-financial/yape-transaction/src/test/java/com/tec/transaction/infrastructure/TransactionControllerTest.java b/yape-financial/yape-transaction/src/test/java/com/tec/transaction/infrastructure/TransactionControllerTest.java new file mode 100644 index 0000000000..94c9f7191e --- /dev/null +++ b/yape-financial/yape-transaction/src/test/java/com/tec/transaction/infrastructure/TransactionControllerTest.java @@ -0,0 +1,50 @@ +package com.tec.transaction.infrastructure; + +import com.tec.yape.transaction.YapeTransactionService; +import com.tec.yape.transaction.application.usecase.TransactionUseCase; +import com.tec.yape.transaction.infrastructure.rest.controller.v1.TransactionController; +import com.tec.yape.transaction.infrastructure.rest.dto.response.TransactionResponseDto; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.servlet.MockMvc; + +import static org.mockito.ArgumentMatchers.any; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@WebMvcTest(TransactionController.class) +@ContextConfiguration(classes = YapeTransactionService.class) +class TransactionControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private TransactionUseCase transactionUseCase; + + @Test + void shouldCreateTransactionSuccessfully() throws Exception { + + String requestJson = """ + { + "accountExternalIdDebit": "550e8400-e29b-41d4-a716-446655440000", + "accountExternalIdCredit": "660e8400-e29b-41d4-a716-446655440111", + "tranferTypeId": 1, + "value": 500 + } + """; + + Mockito.when(transactionUseCase.registerTransaction(any())) + .thenReturn(new TransactionResponseDto()); + + mockMvc.perform(post("/api/v1/transaction") + .contentType(MediaType.APPLICATION_JSON) + .content(requestJson)) + .andExpect(status().isOk()); + } +} From a32651e92313b587670259840b6e130d96ba1d6a Mon Sep 17 00:00:00 2001 From: evercarlos Date: Wed, 28 Jan 2026 23:37:04 -0500 Subject: [PATCH 10/11] updated readme --- README.md | 121 ------------------------------------------------------ 1 file changed, 121 deletions(-) diff --git a/README.md b/README.md index d58cc41f8e..fbd955ec07 100644 --- a/README.md +++ b/README.md @@ -118,127 +118,6 @@ curl --location 'http://localhost:8081/api/v1/transaction/{transactionExternalId ![](./resources/arq.png) -### NOTA -- -## APLICACIÓN DE TRANSACCIONES: ```YAPE-FINANCIAL``` -Aplicación de microservicios para manejo de transacciones financieras con validación antifraude y comunicación asíncrona mediante Kafka. - -### ANTIFRAUDE - -- Al crear una transacción, se publica un evento en Kafka. -- Un consumidor valida reglas antifraude. -- La transacción puede ser aprobada o rechazada según el monto configurado. - -### REQUISITOS - -- Docker >= 27.x -- Docker Compose >= 2.x - -### COMPONENTES - -- JAVA: 21 -- SPRING BOOT: 3.2.5 -- DOCKER -- KAFKA -- POSTGRESQL - -### INSTALACIÓN - -- Clonar el repositorio: - -```bash - git clone https://github.com/evercarlos/app-nodejs-codechallenge.git - ``` - - Entrar a la rama del proyecto: - ```bash - git checkout java-codechallenge - ``` - -- Construir y levantar los contenedores con Docker Compose - - ```bash - docker-compose up --build -d - ``` - -### CONFIGURACIÓN - -Las variables de entorno principales se encuentran en el archivo `docker-compose.yml`: -- Base de datos PostgreSQL -- Kafka -- Puertos de exposición - -### URL DEL MICROSERVICIO Y DOCUMENTACIÓN SWAGGER -- http://localhost:8081 -- Swagger UI: http://localhost:8081/swagger-ui.html - -### ARQUITECTURA - -La aplicación sigue una arquitectura hexagonal (Ports & Adapters), separando: -- Aplication -- Domain -- Infraestructure (REST, Kafka, persistencia) - -La validación antifraude se realiza de forma desacoplada mediante eventos publicados en Kafka. - -### ENDPOINTS DISPONIBLES -1. Crea una transacción - - ```bash -curl --location 'http://localhost:8081/api/v1/transaction' \ ---header 'Content-Type: application/json' \ ---data '{ - "accountExternalIdDebit": "550e8400-e29b-41d4-a716-446655440000", - "accountExternalIdCredit": "660e8400-e29b-41d4-a716-446655440111", - "tranferTypeId": 1, - "value": 10001 - } ' - ``` - - 2. Lista transacción con paginación - - ```bash -curl --location 'http://localhost:8081/api/v1/transaction/withPagination?number=1&size=10' \ ---header 'Content-Type: application/json' \ ---data '' - ``` - 3. Lista transacción sin paginación - - ```bash -curl --location 'http://localhost:8081/api/v1/transaction' \ ---header 'Content-Type: application/json' \ ---data '' - ``` - - 4. Busca una transaccion por transactionExternalId - - ```bash -curl --location 'http://localhost:8081/api/v1/transaction/{transactionExternalId}' \ ---header 'Content-Type: application/json' \ ---data '' - ``` - ### FLUJO DE LA TRANSACCIÓN - -#### Creación de una transacción -1. El cliente crea una transacción mediante el endpoint: - `[POST] /api/v1/transaction`. -2. La transacción se persiste inicialmente con estado `PENDIENTE` en la base de datos PostgreSQL. -3. Se publica un evento de transacción en un tópico de Kafka para su validación antifraude. -4. El microservicio de antifraude consume el evento y valida las reglas de negocio. -5. Como resultado de la validación, la transacción es: - - `APROBADO` si cumple las reglas. - - `RECHAZADO` si no cumple las reglas. -6. El estado final de la transacción se actualiza en la base de datos. - -#### Consulta de transacciones -- Las transacciones pueden consultarse: - - Con paginación. - - Sin paginación. - - Por `transactionExternalId`. - - ### DIAGRAMA - -![](./resources/arq.png) - ### NOTA - Para escenarios de alto volumen y concurrencia, una alternativa sería Cassandra, donde el modelo estaría orientado a las consultas y permitiría alta disponibilidad y escalabilidad horizontal. From 9ce5a1a79ff71d8411685813252e35286bbf04bc Mon Sep 17 00:00:00 2001 From: evercarlos Date: Thu, 29 Jan 2026 09:59:05 -0500 Subject: [PATCH 11/11] added validations --- .../domain/exception/CommonErrorType.java | 6 ++- .../exception/TransactionException.java | 3 +- .../adapter/TransactionAdapter.java | 9 ++-- .../config/GlobalExceptionHandler.java | 49 +++++++++++++++++++ .../{ => helper}/TransactionHelper.java | 2 +- .../controller/v1/TransactionController.java | 8 ++- .../dto/request/TransactionRequestDto.java | 7 +++ .../src/main/resources/application.properties | 2 +- 8 files changed, 74 insertions(+), 12 deletions(-) rename yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/{ => helper}/TransactionHelper.java (87%) diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java index e42568f863..f9a0cb9e8a 100644 --- a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/CommonErrorType.java @@ -5,9 +5,11 @@ @Getter public enum CommonErrorType { - COMMON_ERROR_400_1("Error en el criterio de ordenación"), + COMMON_ERROR_400_1("Error in the sorting criteria"), + COMMON_ERROR_400_2("Invalid request"), + COMMON_ERROR_400_3("Invalid format for field"), - COMMON_ERROR_404_1("Registro no encontrado"); + COMMON_ERROR_404_1("Record not found"); private final String description; diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/TransactionException.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/TransactionException.java index cb29a9b234..5b32418a55 100644 --- a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/TransactionException.java +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/domain/exception/TransactionException.java @@ -11,8 +11,9 @@ public class TransactionException extends RuntimeException { public HttpStatus status; public String code; - public TransactionException(HttpStatus httpStatus, String message) { + public TransactionException(HttpStatus httpStatus, String code, String message) { super(message); this.status = httpStatus; + this.code = code; } } diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java index a104eebce0..1951ca3577 100644 --- a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/adapter/TransactionAdapter.java @@ -6,7 +6,7 @@ import com.tec.yape.transaction.domain.model.TransactionRequest; import com.tec.yape.transaction.domain.model.TransactionResponse; import com.tec.yape.transaction.domain.port.output.TransactionOutPort; -import com.tec.yape.transaction.infrastructure.TransactionHelper; +import com.tec.yape.transaction.infrastructure.helper.TransactionHelper; import com.tec.yape.transaction.infrastructure.repository.TransactionRepository; import com.tec.yape.transaction.infrastructure.repository.model.entity.TransactionEntity; import com.tec.yape.transaction.infrastructure.repository.model.mapper.TransactionMapper; @@ -33,7 +33,7 @@ public Page findAllPageable(Pageable pageable) { Sort sort = pageable.getSort().isUnsorted() ? Sort.by("id") : pageable.getSort(); if (!TransactionHelper.validateSorName(sort)) { - throw new TransactionException(HttpStatus.BAD_REQUEST, CommonErrorType.COMMON_ERROR_400_1.getDescription()); + throw new TransactionException(HttpStatus.BAD_REQUEST, CommonErrorType.COMMON_ERROR_400_1.name(), CommonErrorType.COMMON_ERROR_400_1.getDescription()); } return transactionRepository.findAll(PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort)) @@ -47,7 +47,6 @@ public List findAll() { } - @Override public TransactionResponse create(TransactionRequest transactionRequest) { TransactionEntity transactionEntity = TransactionMapper.MAPPER.toTransaction(transactionRequest); @@ -58,7 +57,7 @@ public TransactionResponse create(TransactionRequest transactionRequest) { public void update(TransactionRequest transactionRequest) { TransactionEntity transactionEntity = TransactionMapper.MAPPER.toTransaction(transactionRequest); if (transactionEntity == null) { - throw new TransactionException(HttpStatus.NOT_FOUND, CommonErrorType.COMMON_ERROR_404_1.getDescription()); + throw new TransactionException(HttpStatus.NOT_FOUND, CommonErrorType.COMMON_ERROR_404_1.name(), CommonErrorType.COMMON_ERROR_404_1.getDescription()); } TransactionMapper.MAPPER.toTransactionResponse(transactionRepository.save(transactionEntity)); } @@ -67,7 +66,7 @@ public void update(TransactionRequest transactionRequest) { public TransactionResponse findByExternalId(UUID transactionExternalId) { TransactionEntity transactionEntity = transactionRepository.findByTransactionExternalId(transactionExternalId); if (transactionEntity == null) { - throw new TransactionException(HttpStatus.NOT_FOUND, CommonErrorType.COMMON_ERROR_404_1.getDescription()); + throw new TransactionException(HttpStatus.NOT_FOUND, CommonErrorType.COMMON_ERROR_404_1.name(), CommonErrorType.COMMON_ERROR_404_1.getDescription()); } return TransactionMapper.MAPPER.toTransactionResponse(transactionEntity); diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/GlobalExceptionHandler.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/GlobalExceptionHandler.java index 730d15d103..288f7ba024 100644 --- a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/GlobalExceptionHandler.java +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/config/GlobalExceptionHandler.java @@ -1,8 +1,14 @@ package com.tec.yape.transaction.infrastructure.config; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; +import com.tec.yape.transaction.domain.exception.CommonErrorType; import com.tec.yape.transaction.domain.exception.TransactionException; import com.tec.yape.transaction.infrastructure.config.dto.ErrorDto; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -16,4 +22,47 @@ public ResponseEntity businessExceptionHandler(TransactionException ex .code(ex.getCode()).message(ex.getMessage()).build(); return new ResponseEntity<>(error, ex.getStatus()); } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity validationExceptionHandler( + MethodArgumentNotValidException ex) { + + String message = ex.getBindingResult() + .getFieldErrors() + .stream() + .map(error -> error.getField() + ": " + error.getDefaultMessage()) + .findFirst() + .orElse(CommonErrorType.COMMON_ERROR_400_2.getDescription()); + + ErrorDto error = ErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .code( CommonErrorType.COMMON_ERROR_400_1.name()) + .message(message) + .build(); + + return ResponseEntity.badRequest().body(error); + } + + @ExceptionHandler(HttpMessageNotReadableException.class) + public ResponseEntity handleInvalidFormat(HttpMessageNotReadableException ex) { + + String message = "Malformed JSON request"; + + if (ex.getCause() instanceof InvalidFormatException invalidFormat) { + String fieldName = invalidFormat.getPath().stream() + .map(JsonMappingException.Reference::getFieldName) + .findFirst() + .orElse("unknown"); + + message = String.format(CommonErrorType.COMMON_ERROR_400_3.getDescription()+ " '%s'", fieldName); + } + + ErrorDto error = ErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .code(CommonErrorType.COMMON_ERROR_400_3.name()) + .message(message) + .build(); + + return ResponseEntity.badRequest().body(error); + } } diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/TransactionHelper.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/helper/TransactionHelper.java similarity index 87% rename from yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/TransactionHelper.java rename to yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/helper/TransactionHelper.java index 7a61af5498..64637172a3 100644 --- a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/TransactionHelper.java +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/helper/TransactionHelper.java @@ -1,4 +1,4 @@ -package com.tec.yape.transaction.infrastructure; +package com.tec.yape.transaction.infrastructure.helper; import org.springframework.data.domain.Sort; diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/v1/TransactionController.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/v1/TransactionController.java index 24227481b7..5519b2dd4e 100644 --- a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/v1/TransactionController.java +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/controller/v1/TransactionController.java @@ -4,6 +4,7 @@ import com.tec.yape.transaction.infrastructure.rest.dto.request.TransactionRequestDto; import com.tec.yape.transaction.infrastructure.rest.dto.response.TransactionResponseDto; import io.swagger.v3.oas.annotations.Operation; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springdoc.api.annotations.ParameterObject; import org.springframework.data.domain.Page; @@ -23,9 +24,12 @@ public class TransactionController { private final TransactionUseCase transactionUseCase; - @Operation(summary = "register a new transaction") + @Operation( + summary = "Register a new transaction", + description = "Creates a transaction and sends it to antifraud validation" + ) @PostMapping - public TransactionResponseDto registerTransaction(@RequestBody TransactionRequestDto transactionRequestDto) { + public TransactionResponseDto registerTransaction( @Valid @RequestBody TransactionRequestDto transactionRequestDto) { return transactionUseCase.registerTransaction(transactionRequestDto); } diff --git a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/request/TransactionRequestDto.java b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/request/TransactionRequestDto.java index 053093aadb..961e818a0d 100644 --- a/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/request/TransactionRequestDto.java +++ b/yape-financial/yape-transaction/src/main/java/com/tec/yape/transaction/infrastructure/rest/dto/request/TransactionRequestDto.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; @@ -12,13 +14,18 @@ @Setter public class TransactionRequestDto { + @NotNull(message = "accountExternalIdDebit is required") private UUID accountExternalIdDebit; + @NotNull(message = "accountExternalIdCredit is required") private UUID accountExternalIdCredit; + @NotNull(message = "transferTypeId is required") + @Schema(description = "Transfer type identifier", example = "1", defaultValue = "1") @JsonProperty("tranferTypeId") private Integer transferTypeId; + @NotNull(message = "value is required") private BigDecimal value; diff --git a/yape-financial/yape-transaction/src/main/resources/application.properties b/yape-financial/yape-transaction/src/main/resources/application.properties index 3a29add21b..eed9ce1ef7 100644 --- a/yape-financial/yape-transaction/src/main/resources/application.properties +++ b/yape-financial/yape-transaction/src/main/resources/application.properties @@ -18,5 +18,5 @@ spring.jpa.properties.hibernate.temp.use_nationalized_character_data= true spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect # settings KAFKA -# spring.kafka.bootstrap-servers = localhost:9092 +#spring.kafka.bootstrap-servers = localhost:9092 spring.kafka.bootstrap-servers=kafka:9092