From 68fd9ae03a76e7ddd47d3ee26676fa84fc5e4d6d Mon Sep 17 00:00:00 2001 From: Fagner Santiago Date: Sat, 29 Apr 2023 03:06:11 -0300 Subject: [PATCH] challenge finish --- .dockerignore | 3 + .gitignore | 1 + Dockerfile | 13 + README.md | 71 +- coverage/clover.xml | 405 +++ coverage/coverage-final.json | 12 + coverage/lcov-report/base.css | 224 ++ coverage/lcov-report/block-navigation.js | 87 + coverage/lcov-report/favicon.png | Bin 0 -> 445 bytes coverage/lcov-report/index.html | 266 ++ .../infra/typeorm/entities/Country.ts.html | 151 + .../country/infra/typeorm/entities/index.html | 116 + .../inMemory/CreateCountryInMemory.ts.html | 166 + .../country/repository/inMemory/index.html | 116 + .../useCase/CreateCountryUseCase.ts.html | 181 + .../modules/country/useCase/index.html | 116 + .../infra/typeorm/entities/Place.ts.html | 211 ++ .../places/infra/typeorm/entities/index.html | 116 + .../CreatePlaceRepositoryInMemory.ts.html | 271 ++ .../places/repository/inMemory/index.html | 116 + .../useCases/create/PlaceUseCase.ts.html | 223 ++ .../modules/places/useCases/create/index.html | 116 + .../delete/DaletePlaceUseCase.ts.html | 172 + .../modules/places/useCases/delete/index.html | 116 + .../listByGoal/ListPlaceByGoalUseCase.ts.html | 136 + .../places/useCases/listByGoal/index.html | 116 + .../updatePlace/UpdatePlaceUseCase.ts.html | 196 + .../places/useCases/updatePlace/index.html | 116 + coverage/lcov-report/prettify.css | 1 + coverage/lcov-report/prettify.js | 2 + .../lcov-report/shared/Error/AppError.ts.html | 112 + coverage/lcov-report/shared/Error/index.html | 116 + .../shared/utils/formatGoal.ts.html | 115 + coverage/lcov-report/shared/utils/index.html | 116 + coverage/lcov-report/sort-arrow-sprite.png | Bin 0 -> 138 bytes coverage/lcov-report/sorter.js | 196 + coverage/lcov.info | 518 +++ docker-compose.yml | 33 + img/challenge.png | Bin 106137 -> 0 bytes img/logo-clubpetro.png | Bin 37994 -> 0 bytes jest.config.ts | 192 + package.json | 28 + src/@types/index.d.ts | 7 + src/modules/country/dto/ICreateCountryDto.ts | 9 + .../country/infra/typeorm/entities/Country.ts | 22 + .../country/repository/CountryRepository.ts | 30 + src/modules/country/repository/ICountry.ts | 8 + .../inMemory/CreateCountryInMemory.ts | 27 + .../useCase/CreateCountryController.ts | 22 + .../useCase/CreateCountryInMemory.spec.ts | 47 + .../country/useCase/CreateCountryUseCase.ts | 32 + src/modules/places/dto/ICreatePlaceDTO.ts | 8 + .../places/infra/typeorm/entities/Place.ts | 42 + src/modules/places/repository/IPlacle.ts | 12 + .../places/repository/PlaceRepository.ts | 73 + .../inMemory/CreatePlaceRepositoryInMemory.ts | 62 + .../create/CreatePlaceRepository.spec.ts | 54 + .../places/useCases/create/PlaceController.ts | 21 + .../places/useCases/create/PlaceUseCase.ts | 46 + .../useCases/delete/DaletePlaceUseCase.ts | 29 + .../useCases/delete/DeletePlace.spec.ts | 34 + .../useCases/delete/DeletePlaceController.ts | 17 + .../listByGoal/ListPlaceByGoal.spec.ts | 41 + .../listByGoal/ListPlaceByGoalController.ts | 14 + .../listByGoal/ListPlaceByGoalUseCase.ts | 17 + .../useCases/updatePlace/UpdatePlace.spec.ts | 53 + .../updatePlace/UpdatePlaceController.ts | 23 + .../updatePlace/UpdatePlaceUseCase.ts | 37 + src/shared/Error/AppError.ts | 9 + src/shared/container/index.ts | 31 + src/shared/infra/http/app.ts | 28 + src/shared/infra/http/server.ts | 13 + src/shared/infra/routes/country.routes.ts | 9 + src/shared/infra/routes/index.ts | 11 + src/shared/infra/routes/place.routes.ts | 20 + src/shared/infra/typeorm/index.ts | 16 + .../migrations/1682615091268-Country.ts | 31 + .../typeorm/migrations/1682616036653-Place.ts | 58 + src/shared/utils/formatGoal.ts | 10 + tsconfig.json | 109 + yarn-error.log | 1370 +++++++ yarn.lock | 3184 +++++++++++++++++ 82 files changed, 10906 insertions(+), 42 deletions(-) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 coverage/clover.xml create mode 100644 coverage/coverage-final.json create mode 100644 coverage/lcov-report/base.css create mode 100644 coverage/lcov-report/block-navigation.js create mode 100644 coverage/lcov-report/favicon.png create mode 100644 coverage/lcov-report/index.html create mode 100644 coverage/lcov-report/modules/country/infra/typeorm/entities/Country.ts.html create mode 100644 coverage/lcov-report/modules/country/infra/typeorm/entities/index.html create mode 100644 coverage/lcov-report/modules/country/repository/inMemory/CreateCountryInMemory.ts.html create mode 100644 coverage/lcov-report/modules/country/repository/inMemory/index.html create mode 100644 coverage/lcov-report/modules/country/useCase/CreateCountryUseCase.ts.html create mode 100644 coverage/lcov-report/modules/country/useCase/index.html create mode 100644 coverage/lcov-report/modules/places/infra/typeorm/entities/Place.ts.html create mode 100644 coverage/lcov-report/modules/places/infra/typeorm/entities/index.html create mode 100644 coverage/lcov-report/modules/places/repository/inMemory/CreatePlaceRepositoryInMemory.ts.html create mode 100644 coverage/lcov-report/modules/places/repository/inMemory/index.html create mode 100644 coverage/lcov-report/modules/places/useCases/create/PlaceUseCase.ts.html create mode 100644 coverage/lcov-report/modules/places/useCases/create/index.html create mode 100644 coverage/lcov-report/modules/places/useCases/delete/DaletePlaceUseCase.ts.html create mode 100644 coverage/lcov-report/modules/places/useCases/delete/index.html create mode 100644 coverage/lcov-report/modules/places/useCases/listByGoal/ListPlaceByGoalUseCase.ts.html create mode 100644 coverage/lcov-report/modules/places/useCases/listByGoal/index.html create mode 100644 coverage/lcov-report/modules/places/useCases/updatePlace/UpdatePlaceUseCase.ts.html create mode 100644 coverage/lcov-report/modules/places/useCases/updatePlace/index.html create mode 100644 coverage/lcov-report/prettify.css create mode 100644 coverage/lcov-report/prettify.js create mode 100644 coverage/lcov-report/shared/Error/AppError.ts.html create mode 100644 coverage/lcov-report/shared/Error/index.html create mode 100644 coverage/lcov-report/shared/utils/formatGoal.ts.html create mode 100644 coverage/lcov-report/shared/utils/index.html create mode 100644 coverage/lcov-report/sort-arrow-sprite.png create mode 100644 coverage/lcov-report/sorter.js create mode 100644 coverage/lcov.info create mode 100644 docker-compose.yml delete mode 100644 img/challenge.png delete mode 100644 img/logo-clubpetro.png create mode 100644 jest.config.ts create mode 100644 package.json create mode 100644 src/@types/index.d.ts create mode 100644 src/modules/country/dto/ICreateCountryDto.ts create mode 100644 src/modules/country/infra/typeorm/entities/Country.ts create mode 100644 src/modules/country/repository/CountryRepository.ts create mode 100644 src/modules/country/repository/ICountry.ts create mode 100644 src/modules/country/repository/inMemory/CreateCountryInMemory.ts create mode 100644 src/modules/country/useCase/CreateCountryController.ts create mode 100644 src/modules/country/useCase/CreateCountryInMemory.spec.ts create mode 100644 src/modules/country/useCase/CreateCountryUseCase.ts create mode 100644 src/modules/places/dto/ICreatePlaceDTO.ts create mode 100644 src/modules/places/infra/typeorm/entities/Place.ts create mode 100644 src/modules/places/repository/IPlacle.ts create mode 100644 src/modules/places/repository/PlaceRepository.ts create mode 100644 src/modules/places/repository/inMemory/CreatePlaceRepositoryInMemory.ts create mode 100644 src/modules/places/useCases/create/CreatePlaceRepository.spec.ts create mode 100644 src/modules/places/useCases/create/PlaceController.ts create mode 100644 src/modules/places/useCases/create/PlaceUseCase.ts create mode 100644 src/modules/places/useCases/delete/DaletePlaceUseCase.ts create mode 100644 src/modules/places/useCases/delete/DeletePlace.spec.ts create mode 100644 src/modules/places/useCases/delete/DeletePlaceController.ts create mode 100644 src/modules/places/useCases/listByGoal/ListPlaceByGoal.spec.ts create mode 100644 src/modules/places/useCases/listByGoal/ListPlaceByGoalController.ts create mode 100644 src/modules/places/useCases/listByGoal/ListPlaceByGoalUseCase.ts create mode 100644 src/modules/places/useCases/updatePlace/UpdatePlace.spec.ts create mode 100644 src/modules/places/useCases/updatePlace/UpdatePlaceController.ts create mode 100644 src/modules/places/useCases/updatePlace/UpdatePlaceUseCase.ts create mode 100644 src/shared/Error/AppError.ts create mode 100644 src/shared/container/index.ts create mode 100644 src/shared/infra/http/app.ts create mode 100644 src/shared/infra/http/server.ts create mode 100644 src/shared/infra/routes/country.routes.ts create mode 100644 src/shared/infra/routes/index.ts create mode 100644 src/shared/infra/routes/place.routes.ts create mode 100644 src/shared/infra/typeorm/index.ts create mode 100644 src/shared/infra/typeorm/migrations/1682615091268-Country.ts create mode 100644 src/shared/infra/typeorm/migrations/1682616036653-Place.ts create mode 100644 src/shared/utils/formatGoal.ts create mode 100644 tsconfig.json create mode 100644 yarn-error.log create mode 100644 yarn.lock diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..52eb875f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +node_modules +.git +.vscode \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..b512c09d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..1773a583 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM node + +WORKDIR /usr/app + +COPY package.json ./ + +RUN npm install + +COPY . . + +EXPOSE 3333 + +CMD ["npm","run", "dev"] \ No newline at end of file diff --git a/README.md b/README.md index 525bb830..c31a4303 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,45 @@ -# Desafio de Backend - -Clubpetro - -- [Descrição](#descrição) - - [O Desafio](#o-desafio) - - [Requisitos Obrigatórios](#requisitos-obrigatórios) - - [Bônus](#bônus) -- [Submissão e Prazo de Entrega](#submissão-e-prazo-de-entrega) +# Backend-challenge ## Descrição -Este desafio tem como objetivo avaliar as habilidades técnicas do candidato a vaga de desenvolvedor backend no Clubpetro. +O objetivo deste projeto é criar uma API para gerenciar lugares e suas metas, onde é possível criar, listar, atualizar e excluir lugares, bem como atualizar suas metas. -#### O Desafio +## Tecnologias Utilizadas -O desafio consiste em desenvolver uma API rest que permita o CRUD de lugares para se conhecer ao redor do mundo para alimentar o frontend que pode ser visto na imagem a seguir: +- Node.js +- Express.js +- TypeScript +- TypeORM +- Jest +- Docker Compose -Desafio +## Como Rodar o Projeto -Os dados a ser considerados são: +### Pré-requisitos -- País: O país escolhido; -- Local: O local dentro do país escolhido; -- Meta: O mês e o ano que o usuário pretende visitar o local; -- Url da bandeira do país; -- Data de criação do registro; -- Data de atualização do registro. +- Node.js (versão 14 ou superior) +- Docker (versão 20 ou superior) +- Docker Compose (versão 1.28 ou superior) -#### Requisitos Obrigatórios +### Passo a Passo -> Requisitos que serão avaliados no desafio. +1. Clone o repositório em sua máquina +2. Instale as dependências do projeto com o comando `yar install` +3. Inicie o banco de dados e o servidor com o Docker Compose, executando o comando `docker-compose up -d` +4. Execute o projeto com o comando `yarn dev` -- A API deverá ser desenvolvida com Node.js e Express; -- Apenas o Local e a Meta poderão ser editados; -- O mesmo local em determinado país não poderá ser adicionado de forma duplicada; -- A listagem dos dados deverá ser ordenada de forma crescente pela meta; -- O candidato deverá adicionar ao projeto uma explicação de como executar a aplicação. +Após seguir esses passos, o seu projeto deverá estar rodando em `http://localhost:3333`. -#### Bônus +## Rotas -> Requisitos que não são obrigatórios mas podem te deixar em vantagem com relação aos outros candidatos. +Abaixo estão as rotas disponíveis na API: -- Utilização do framework [NestJS](https://nestjs.com/); -- Typescript; -- Testes automatizados; -- [TypeORM](https://typeorm.io/#/); -- [Docker](https://www.docker.com/); -- Deploy para [Google Cloud Platform](https://cloud.google.com/) (ao criar conta é possível receber um bonus para teste). +- `POST /country` - Cria um país +- `POST /place` - Cria um lugar +- `GET /` - Lista todos os lugares +- `PATCH /place/update/:id` - Atualiza um lugar ou sua meta +- `DELETE /place/delete/:id` - Exclui um lugar -### Submissão e Prazo de entrega +## Como Rodar os Testes -- O canditado deverá realizar um fork deste repositório e submeter o código no mesmo; -- Em caso do deploy realizado, a url deverá ser adicionada no README; -- O prazo de entrega para este desafio é de 2 (duas) semanas, contando a partir do dia em que o candidato recebeu o email com o link do repositório; -- Ao finalizar o desafio, o candidato deverá submeter o desafio no questionário disponível na sua área de candidato na plataforma(https://menvievagas.com.br/vagas/fam%C3%8Dliapires/) do Processo Seletivo. É só clicar em RESPONDER no questionário e inserir o link do seu PR. -Em caso de dúvidas, enviar um e-mail para jobs@clubpetro.com.br +Para executar os testes, execute o comando `yarn test`. Os testes serão executados utilizando o Jest e serão exibidos no console. diff --git a/coverage/clover.xml b/coverage/clover.xml new file mode 100644 index 00000000..8ca2c8a9 --- /dev/null +++ b/coverage/clover.xml @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 00000000..8b9a57a5 --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1,12 @@ +{"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\country\\infra\\typeorm\\entities\\Country.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\country\\infra\\typeorm\\entities\\Country.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":56}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":36}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":18}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":15}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":18}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":13}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":11}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":15}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":11}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":19}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":17}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":19}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":25}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":5}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":1}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":23}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":2,"16":2,"17":2,"18":2,"19":1,"20":1,"21":1},"branchMap":{"0":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":2},"end":{"line":19,"column":3}},"locations":[{"start":{"line":15,"column":2},"end":{"line":19,"column":3}}]}},"b":{"0":[2]},"fnMap":{"0":{"name":"Country","decl":{"start":{"line":15,"column":2},"end":{"line":19,"column":3}},"loc":{"start":{"line":15,"column":2},"end":{"line":19,"column":3}},"line":15}},"f":{"0":2}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\country\\repository\\inMemory\\CreateCountryInMemory.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\country\\repository\\inMemory\\CreateCountryInMemory.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":64}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":59}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":49}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":69}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":44}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":73}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":34}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":28}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":11}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":15}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":7}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":41}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":19}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":3}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":52}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":78}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":19}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":1}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":43}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":2,"18":2,"19":2,"20":4,"21":4,"22":4,"23":4,"24":2,"25":1,"26":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":0},"end":{"line":25,"column":1}},"locations":[{"start":{"line":5,"column":0},"end":{"line":25,"column":1}}]},"1":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":8},"end":{"line":18,"column":3}},"locations":[{"start":{"line":8,"column":8},"end":{"line":18,"column":3}}]},"2":{"type":"branch","line":20,"loc":{"start":{"line":20,"column":8},"end":{"line":24,"column":3}},"locations":[{"start":{"line":20,"column":8},"end":{"line":24,"column":3}}]},"3":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":48},"end":{"line":21,"column":76}},"locations":[{"start":{"line":21,"column":48},"end":{"line":21,"column":76}}]}},"b":{"0":[2],"1":[2],"2":[4],"3":[2]},"fnMap":{"0":{"name":"CreateCountryRepositoryInMemory","decl":{"start":{"line":5,"column":0},"end":{"line":25,"column":1}},"loc":{"start":{"line":5,"column":0},"end":{"line":25,"column":1}},"line":5},"1":{"name":"create","decl":{"start":{"line":8,"column":8},"end":{"line":18,"column":3}},"loc":{"start":{"line":8,"column":8},"end":{"line":18,"column":3}},"line":8},"2":{"name":"findByName","decl":{"start":{"line":20,"column":8},"end":{"line":24,"column":3}},"loc":{"start":{"line":20,"column":8},"end":{"line":24,"column":3}},"line":20}},"f":{"0":2,"1":2,"2":4}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\country\\useCase\\CreateCountryUseCase.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\country\\useCase\\CreateCountryUseCase.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":46}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":56}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":58}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":61}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":60}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":13}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":28}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":14}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":32}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":49}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":6}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":78}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":72}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":24}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":52}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":5}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":57}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":9}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":11}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":15}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":7}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":19}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":3}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":1}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":36}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":2,"11":2,"12":2,"13":1,"14":1,"15":3,"16":3,"17":3,"18":1,"19":1,"20":2,"21":2,"22":2,"23":2,"24":2,"25":2,"26":2,"27":2,"28":2,"29":1,"30":1,"31":1},"branchMap":{"0":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":2},"end":{"line":13,"column":6}},"locations":[{"start":{"line":10,"column":2},"end":{"line":13,"column":6}}]},"1":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":8},"end":{"line":29,"column":3}},"locations":[{"start":{"line":15,"column":8},"end":{"line":29,"column":3}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":23},"end":{"line":20,"column":5}},"locations":[{"start":{"line":18,"column":23},"end":{"line":20,"column":5}}]},"3":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":-2},"end":{"line":29,"column":3}},"locations":[{"start":{"line":21,"column":-2},"end":{"line":29,"column":3}}]}},"b":{"0":[2],"1":[3],"2":[1],"3":[2]},"fnMap":{"0":{"name":"CreateCountryUseCase","decl":{"start":{"line":10,"column":2},"end":{"line":13,"column":6}},"loc":{"start":{"line":10,"column":2},"end":{"line":13,"column":6}},"line":10},"1":{"name":"execute","decl":{"start":{"line":15,"column":8},"end":{"line":29,"column":3}},"loc":{"start":{"line":15,"column":8},"end":{"line":29,"column":3}},"line":15}},"f":{"0":2,"1":3}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\infra\\typeorm\\entities\\Place.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\infra\\typeorm\\entities\\Place.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":73}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":36}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":8}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":9}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":19}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":9}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":13}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":12}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":16}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":9}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":19}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":17}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":17}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":20}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":18}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":13}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":52}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":37}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":19}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":11}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":15}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":11}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":15}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":0}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":21}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":21}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":19}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":17}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":19}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":25}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":5}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":3}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":1}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":21}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":7,"36":7,"37":7,"38":7,"39":1,"40":1,"41":1},"branchMap":{"0":{"type":"branch","line":35,"loc":{"start":{"line":35,"column":2},"end":{"line":39,"column":3}},"locations":[{"start":{"line":35,"column":2},"end":{"line":39,"column":3}}]}},"b":{"0":[7]},"fnMap":{"0":{"name":"Place","decl":{"start":{"line":35,"column":2},"end":{"line":39,"column":3}},"loc":{"start":{"line":35,"column":2},"end":{"line":39,"column":3}},"line":35},"1":{"name":"Object..__decorate.name","decl":{"start":{"line":19,"column":13},"end":{"line":19,"column":26}},"loc":{"start":{"line":19,"column":13},"end":{"line":19,"column":26}},"line":19}},"f":{"0":7,"1":0}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\repository\\inMemory\\CreatePlaceRepositoryInMemory.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\repository\\inMemory\\CreatePlaceRepositoryInMemory.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":60}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":55}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":46}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":65}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":40}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":77}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":30}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":26}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":11}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":17}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":7}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":0}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":37}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":17}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":46}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":70}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":17}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":48}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":74}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":17}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":3}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":37}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":57}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":15}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":61}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":8}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":0}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":32}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":56}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":18}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":55}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":76}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":27}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":22}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":22}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":7}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":38}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":18}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":43}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":79}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":23}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":45}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":5}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":3}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":1}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":41}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":7,"5":7,"6":7,"7":7,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":7,"16":7,"17":7,"18":7,"19":7,"20":7,"21":4,"22":4,"23":4,"24":7,"25":4,"26":4,"27":4,"28":4,"29":7,"30":1,"31":3,"32":3,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":7,"41":7,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":7,"53":7,"54":1,"55":1,"56":1,"57":1,"58":1,"59":7,"60":1,"61":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":0},"end":{"line":60,"column":1}},"locations":[{"start":{"line":5,"column":0},"end":{"line":60,"column":1}}]},"1":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":8},"end":{"line":19,"column":3}},"locations":[{"start":{"line":8,"column":8},"end":{"line":19,"column":3}}]},"2":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":8},"end":{"line":24,"column":3}},"locations":[{"start":{"line":21,"column":8},"end":{"line":24,"column":3}}]},"3":{"type":"branch","line":22,"loc":{"start":{"line":22,"column":44},"end":{"line":22,"column":68}},"locations":[{"start":{"line":22,"column":44},"end":{"line":22,"column":68}}]},"4":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":8},"end":{"line":29,"column":3}},"locations":[{"start":{"line":25,"column":8},"end":{"line":29,"column":3}}]},"5":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":44},"end":{"line":26,"column":72}},"locations":[{"start":{"line":26,"column":44},"end":{"line":26,"column":72}}]},"6":{"type":"branch","line":30,"loc":{"start":{"line":30,"column":8},"end":{"line":40,"column":3}},"locations":[{"start":{"line":30,"column":8},"end":{"line":40,"column":3}}]},"7":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":44},"end":{"line":33,"column":61}},"locations":[{"start":{"line":31,"column":44},"end":{"line":33,"column":61}}]},"8":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":16},"end":{"line":37,"column":54}},"locations":[{"start":{"line":37,"column":16},"end":{"line":37,"column":54}}]},"9":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":8},"end":{"line":59,"column":3}},"locations":[{"start":{"line":54,"column":8},"end":{"line":59,"column":3}}]},"10":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":51},"end":{"line":55,"column":77}},"locations":[{"start":{"line":55,"column":51},"end":{"line":55,"column":77}}]}},"b":{"0":[7],"1":[7],"2":[4],"3":[2],"4":[4],"5":[2],"6":[1],"7":[3],"8":[2],"9":[1],"10":[1]},"fnMap":{"0":{"name":"CreatePlaceRepositoryInMemory","decl":{"start":{"line":5,"column":0},"end":{"line":60,"column":1}},"loc":{"start":{"line":5,"column":0},"end":{"line":60,"column":1}},"line":5},"1":{"name":"create","decl":{"start":{"line":8,"column":8},"end":{"line":19,"column":3}},"loc":{"start":{"line":8,"column":8},"end":{"line":19,"column":3}},"line":8},"2":{"name":"findById","decl":{"start":{"line":21,"column":8},"end":{"line":24,"column":3}},"loc":{"start":{"line":21,"column":8},"end":{"line":24,"column":3}},"line":21},"3":{"name":"findName","decl":{"start":{"line":25,"column":8},"end":{"line":29,"column":3}},"loc":{"start":{"line":25,"column":8},"end":{"line":29,"column":3}},"line":25},"4":{"name":"findAll","decl":{"start":{"line":30,"column":8},"end":{"line":40,"column":3}},"loc":{"start":{"line":30,"column":8},"end":{"line":40,"column":3}},"line":30},"5":{"name":"update","decl":{"start":{"line":42,"column":8},"end":{"line":52,"column":3}},"loc":{"start":{"line":42,"column":8},"end":{"line":52,"column":3}},"line":42},"6":{"name":"delete","decl":{"start":{"line":54,"column":8},"end":{"line":59,"column":3}},"loc":{"start":{"line":54,"column":8},"end":{"line":59,"column":3}},"line":54}},"f":{"0":7,"1":7,"2":4,"3":4,"4":1,"5":0,"6":1}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\useCases\\create\\PlaceUseCase.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\useCases\\create\\PlaceUseCase.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":46}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":55}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":61}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":60}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":60}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":69}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":13}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":20}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":14}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":30}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":45}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":6}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":17}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":7}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":9}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":15}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":39}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":9}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":68}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":0}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":24}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":27}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":70}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":7}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":0}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":46}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":55}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":19}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":13}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":25}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":9}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":19}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":21}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":32}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":5}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":3}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":1}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":0}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":24}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":2,"12":2,"13":2,"14":1,"15":1,"16":3,"17":3,"18":3,"19":3,"20":3,"21":3,"22":3,"23":3,"24":3,"25":1,"26":1,"27":1,"28":1,"29":2,"30":2,"31":2,"32":2,"33":2,"34":2,"35":2,"36":2,"37":2,"38":2,"39":3,"40":1,"41":1,"42":3,"43":1,"44":1,"45":1},"branchMap":{"0":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":2},"end":{"line":14,"column":6}},"locations":[{"start":{"line":11,"column":2},"end":{"line":14,"column":6}}]},"1":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":8},"end":{"line":43,"column":3}},"locations":[{"start":{"line":16,"column":8},"end":{"line":43,"column":3}}]},"2":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":23},"end":{"line":29,"column":7}},"locations":[{"start":{"line":25,"column":23},"end":{"line":29,"column":7}}]},"3":{"type":"branch","line":30,"loc":{"start":{"line":30,"column":-2},"end":{"line":40,"column":13}},"locations":[{"start":{"line":30,"column":-2},"end":{"line":40,"column":13}}]},"4":{"type":"branch","line":40,"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":5}},"locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":5}}]}},"b":{"0":[2],"1":[3],"2":[1],"3":[2],"4":[1]},"fnMap":{"0":{"name":"PlaceUseCase","decl":{"start":{"line":11,"column":2},"end":{"line":14,"column":6}},"loc":{"start":{"line":11,"column":2},"end":{"line":14,"column":6}},"line":11},"1":{"name":"execute","decl":{"start":{"line":16,"column":8},"end":{"line":43,"column":3}},"loc":{"start":{"line":16,"column":8},"end":{"line":43,"column":3}},"line":16}},"f":{"0":2,"1":3}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\useCases\\delete\\DaletePlaceUseCase.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\useCases\\delete\\DaletePlaceUseCase.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":46}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":55}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":61}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":60}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":13}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":14}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":36}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":45}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":6}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":44}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":9}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":66}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":25}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":47}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":7}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":44}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":21}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":32}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":5}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":3}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":1}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":0}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":30}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":2,"10":2,"11":2,"12":1,"13":1,"14":2,"15":2,"16":2,"17":2,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":2,"26":1,"27":1,"28":1},"branchMap":{"0":{"type":"branch","line":9,"loc":{"start":{"line":9,"column":2},"end":{"line":12,"column":6}},"locations":[{"start":{"line":9,"column":2},"end":{"line":12,"column":6}}]},"1":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":8},"end":{"line":26,"column":3}},"locations":[{"start":{"line":14,"column":8},"end":{"line":26,"column":3}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":24},"end":{"line":25,"column":5}},"locations":[{"start":{"line":18,"column":24},"end":{"line":25,"column":5}}]}},"b":{"0":[2],"1":[2],"2":[1]},"fnMap":{"0":{"name":"DaletePlaceUseCase","decl":{"start":{"line":9,"column":2},"end":{"line":12,"column":6}},"loc":{"start":{"line":9,"column":2},"end":{"line":12,"column":6}},"line":9},"1":{"name":"execute","decl":{"start":{"line":14,"column":8},"end":{"line":26,"column":3}},"loc":{"start":{"line":14,"column":8},"end":{"line":26,"column":3}},"line":14}},"f":{"0":2,"1":2}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\useCases\\listByGoal\\ListPlaceByGoalUseCase.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\useCases\\listByGoal\\ListPlaceByGoalUseCase.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":46}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":55}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":60}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":13}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":30}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":14}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":34}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":45}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":6}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":37}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":48}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":3}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":34}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1},"branchMap":{"0":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":2},"end":{"line":11,"column":6}},"locations":[{"start":{"line":8,"column":2},"end":{"line":11,"column":6}}]},"1":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":8},"end":{"line":15,"column":3}},"locations":[{"start":{"line":13,"column":8},"end":{"line":15,"column":3}}]}},"b":{"0":[1],"1":[1]},"fnMap":{"0":{"name":"ListPlaceByGoalUseCase","decl":{"start":{"line":8,"column":2},"end":{"line":11,"column":6}},"loc":{"start":{"line":8,"column":2},"end":{"line":11,"column":6}},"line":8},"1":{"name":"execute","decl":{"start":{"line":13,"column":8},"end":{"line":15,"column":3}},"loc":{"start":{"line":13,"column":8},"end":{"line":15,"column":3}},"line":13}},"f":{"0":1,"1":1}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\useCases\\updatePlace\\UpdatePlaceUseCase.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\modules\\places\\useCases\\updatePlace\\UpdatePlaceUseCase.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":46}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":55}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":61}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":70}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":70}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":69}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":13}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":26}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":14}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":45}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":6}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":70}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":9}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":60}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":19}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":47}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":7}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":46}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":56}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":13}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":25}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":9}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":0}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":20}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":21}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":32}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":5}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":3}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":1}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":30}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":2,"12":2,"13":2,"14":1,"15":1,"16":2,"17":2,"18":2,"19":2,"20":2,"21":2,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":2,"32":2,"33":2,"34":2,"35":1,"36":1},"branchMap":{"0":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":2},"end":{"line":14,"column":6}},"locations":[{"start":{"line":11,"column":2},"end":{"line":14,"column":6}}]},"1":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":8},"end":{"line":35,"column":3}},"locations":[{"start":{"line":16,"column":8},"end":{"line":35,"column":3}}]},"2":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":-2},"end":{"line":32,"column":13}},"locations":[{"start":{"line":23,"column":-2},"end":{"line":32,"column":13}}]}},"b":{"0":[2],"1":[2],"2":[0]},"fnMap":{"0":{"name":"UpdatePlaceUseCase","decl":{"start":{"line":11,"column":2},"end":{"line":14,"column":6}},"loc":{"start":{"line":11,"column":2},"end":{"line":14,"column":6}},"line":11},"1":{"name":"execute","decl":{"start":{"line":16,"column":8},"end":{"line":35,"column":3}},"loc":{"start":{"line":16,"column":8},"end":{"line":35,"column":3}},"line":16}},"f":{"0":2,"1":2}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\shared\\Error\\AppError.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\shared\\Error\\AppError.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":23}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":34}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":37}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":50}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":27}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":33}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":3}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":9,"6":9,"7":9,"8":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":2},"end":{"line":8,"column":3}},"locations":[{"start":{"line":5,"column":2},"end":{"line":8,"column":3}}]}},"b":{"0":[9]},"fnMap":{"0":{"name":"AppError","decl":{"start":{"line":5,"column":2},"end":{"line":8,"column":3}},"loc":{"start":{"line":5,"column":2},"end":{"line":8,"column":3}},"line":5}},"f":{"0":9}} +,"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\shared\\utils\\formatGoal.ts": {"path":"C:\\Users\\fagne\\Documents\\backend-challenge\\src\\shared\\utils\\formatGoal.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":63}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":32}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":54}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":53}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":38}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":2,"7":2,"8":2,"9":2},"branchMap":{"0":{"type":"branch","line":7,"loc":{"start":{"line":7,"column":0},"end":{"line":10,"column":1}},"locations":[{"start":{"line":7,"column":0},"end":{"line":10,"column":1}}]}},"b":{"0":[2]},"fnMap":{"0":{"name":"formatGoalDate","decl":{"start":{"line":7,"column":0},"end":{"line":10,"column":1}},"loc":{"start":{"line":7,"column":0},"end":{"line":10,"column":1}},"line":7}},"f":{"0":2}} +} diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css new file mode 100644 index 00000000..f418035b --- /dev/null +++ b/coverage/lcov-report/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/coverage/lcov-report/block-navigation.js b/coverage/lcov-report/block-navigation.js new file mode 100644 index 00000000..cc121302 --- /dev/null +++ b/coverage/lcov-report/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selecter that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/coverage/lcov-report/favicon.png b/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1525b811a167671e9de1fa78aab9f5c0b61cef7 GIT binary patch literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 94.29% + Statements + 314/333 +
+ + +
+ 97.22% + Branches + 35/36 +
+ + +
+ 92% + Functions + 23/25 +
+ + +
+ 94.29% + Lines + 314/333 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
modules/country/infra/typeorm/entities +
+
100%22/22100%1/1100%1/1100%22/22
modules/country/repository/inMemory +
+
100%27/27100%4/4100%3/3100%27/27
modules/country/useCase +
+
100%32/32100%4/4100%2/2100%32/32
modules/places/infra/typeorm/entities +
+
100%42/42100%1/150%1/2100%42/42
modules/places/repository/inMemory +
+
83.87%52/62100%11/1185.71%6/783.87%52/62
modules/places/useCases/create +
+
100%46/46100%5/5100%2/2100%46/46
modules/places/useCases/delete +
+
100%29/29100%3/3100%2/2100%29/29
modules/places/useCases/listByGoal +
+
100%17/17100%2/2100%2/2100%17/17
modules/places/useCases/updatePlace +
+
75.67%28/3766.66%2/3100%2/275.67%28/37
shared/Error +
+
100%9/9100%1/1100%1/1100%9/9
shared/utils +
+
100%10/10100%1/1100%1/1100%10/10
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/country/infra/typeorm/entities/Country.ts.html b/coverage/lcov-report/modules/country/infra/typeorm/entities/Country.ts.html new file mode 100644 index 00000000..db3e00db --- /dev/null +++ b/coverage/lcov-report/modules/country/infra/typeorm/entities/Country.ts.html @@ -0,0 +1,151 @@ + + + + + + Code coverage report for modules/country/infra/typeorm/entities/Country.ts + + + + + + + + + +
+
+

All files / modules/country/infra/typeorm/entities Country.ts

+
+ +
+ 100% + Statements + 22/22 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 22/22 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +231x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +2x +1x +1x +1x + 
import { Column, Entity, PrimaryColumn } from "typeorm";
+import { v4 as uuidV4 } from "uuid";
+ 
+@Entity("country")
+class Country {
+  @PrimaryColumn()
+  id: string;
+ 
+  @Column()
+  name: string;
+ 
+  @Column()
+  flag_url: string;
+ 
+  constructor() {
+    if (!this.id) {
+      this.id = uuidV4();
+    }
+  }
+}
+ 
+export default Country;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/country/infra/typeorm/entities/index.html b/coverage/lcov-report/modules/country/infra/typeorm/entities/index.html new file mode 100644 index 00000000..9be79e68 --- /dev/null +++ b/coverage/lcov-report/modules/country/infra/typeorm/entities/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for modules/country/infra/typeorm/entities + + + + + + + + + +
+
+

All files modules/country/infra/typeorm/entities

+
+ +
+ 100% + Statements + 22/22 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 22/22 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
Country.ts +
+
100%22/22100%1/1100%1/1100%22/22
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/country/repository/inMemory/CreateCountryInMemory.ts.html b/coverage/lcov-report/modules/country/repository/inMemory/CreateCountryInMemory.ts.html new file mode 100644 index 00000000..6f3aabe7 --- /dev/null +++ b/coverage/lcov-report/modules/country/repository/inMemory/CreateCountryInMemory.ts.html @@ -0,0 +1,166 @@ + + + + + + Code coverage report for modules/country/repository/inMemory/CreateCountryInMemory.ts + + + + + + + + + +
+
+

All files / modules/country/repository/inMemory CreateCountryInMemory.ts

+
+ +
+ 100% + Statements + 27/27 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 27/27 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +281x +1x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +4x +4x +4x +4x +2x +1x +1x + 
import { ICreateCountryDTO } from "../../dto/ICreateCountryDto";
+import Country from "../../infra/typeorm/entities/Country";
+import { ICountryRepository } from "../ICountry";
+ 
+class CreateCountryRepositoryInMemory implements ICountryRepository {
+  private countryRepository: Country[] = [];
+ 
+  async create({ name, flag_url }: ICreateCountryDTO): Promise<Country> {
+    const country = new Country();
+ 
+    Object.assign(country, {
+      name,
+      flag_url,
+    });
+ 
+    this.countryRepository.push(country);
+    return country;
+  }
+ 
+  async findByName(name: string): Promise<Country> {
+    const country = this.countryRepository.find((find) => find.name === name);
+ 
+    return country;
+  }
+}
+ 
+export { CreateCountryRepositoryInMemory };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/country/repository/inMemory/index.html b/coverage/lcov-report/modules/country/repository/inMemory/index.html new file mode 100644 index 00000000..6fa130a9 --- /dev/null +++ b/coverage/lcov-report/modules/country/repository/inMemory/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for modules/country/repository/inMemory + + + + + + + + + +
+
+

All files modules/country/repository/inMemory

+
+ +
+ 100% + Statements + 27/27 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 27/27 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CreateCountryInMemory.ts +
+
100%27/27100%4/4100%3/3100%27/27
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/country/useCase/CreateCountryUseCase.ts.html b/coverage/lcov-report/modules/country/useCase/CreateCountryUseCase.ts.html new file mode 100644 index 00000000..e0c478f2 --- /dev/null +++ b/coverage/lcov-report/modules/country/useCase/CreateCountryUseCase.ts.html @@ -0,0 +1,181 @@ + + + + + + Code coverage report for modules/country/useCase/CreateCountryUseCase.ts + + + + + + + + + +
+
+

All files / modules/country/useCase CreateCountryUseCase.ts

+
+ +
+ 100% + Statements + 32/32 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 32/32 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +331x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +1x +1x +3x +3x +3x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x +2x +1x +1x +1x + 
import "reflect-metadata";
+import { inject, injectable } from "tsyringe";
+import Country from "../infra/typeorm/entities/Country";
+import { AppError } from "../../../shared/Error/AppError";
+import { ICreateCountryDTO } from "../dto/ICreateCountryDto";
+import { ICountryRepository } from "../repository/ICountry";
+ 
+@injectable()
+class CreateCountryUseCase {
+  constructor(
+    @inject("CountryRepository")
+    private countryRepository: ICountryRepository
+  ) {}
+ 
+  async execute({ id, name, flag_url }: ICreateCountryDTO): Promise<Country> {
+    const countryExists = await this.countryRepository.findByName(name);
+ 
+    if (countryExists) {
+      throw new AppError("Country already exists!");
+    }
+ 
+    const country = await this.countryRepository.create({
+      id,
+      name,
+      flag_url,
+    });
+ 
+    return country;
+  }
+}
+ 
+export default CreateCountryUseCase;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/country/useCase/index.html b/coverage/lcov-report/modules/country/useCase/index.html new file mode 100644 index 00000000..447190a4 --- /dev/null +++ b/coverage/lcov-report/modules/country/useCase/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for modules/country/useCase + + + + + + + + + +
+
+

All files modules/country/useCase

+
+ +
+ 100% + Statements + 32/32 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 32/32 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CreateCountryUseCase.ts +
+
100%32/32100%4/4100%2/2100%32/32
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/infra/typeorm/entities/Place.ts.html b/coverage/lcov-report/modules/places/infra/typeorm/entities/Place.ts.html new file mode 100644 index 00000000..abc6ed1d --- /dev/null +++ b/coverage/lcov-report/modules/places/infra/typeorm/entities/Place.ts.html @@ -0,0 +1,211 @@ + + + + + + Code coverage report for modules/places/infra/typeorm/entities/Place.ts + + + + + + + + + +
+
+

All files / modules/places/infra/typeorm/entities Place.ts

+
+ +
+ 100% + Statements + 42/42 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 50% + Functions + 1/2 +
+ + +
+ 100% + Lines + 42/42 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +431x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +7x +7x +7x +7x +1x +1x +1x + 
import Country from "../../../../country/infra/typeorm/entities/Country";
+import { v4 as uuidV4 } from "uuid";
+import {
+  Column,
+  CreateDateColumn,
+  Entity,
+  JoinColumn,
+  ManyToOne,
+  PrimaryColumn,
+  Unique,
+  UpdateDateColumn,
+} from "typeorm";
+ 
+@Entity("places")
+export class Place {
+  @PrimaryColumn()
+  id: string;
+ 
+  @ManyToOne(() => Country, (country) => country.id)
+  @JoinColumn({ name: "country_id" })
+  country: Country;
+ 
+  @Column()
+  name: string;
+ 
+  @Column()
+  goal: string;
+ 
+  @CreateDateColumn()
+  created_at: Date;
+ 
+  @UpdateDateColumn()
+  updated_at: Date;
+ 
+  constructor() {
+    if (!this.id) {
+      this.id = uuidV4();
+    }
+  }
+}
+ 
+export default Place;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/infra/typeorm/entities/index.html b/coverage/lcov-report/modules/places/infra/typeorm/entities/index.html new file mode 100644 index 00000000..e340b040 --- /dev/null +++ b/coverage/lcov-report/modules/places/infra/typeorm/entities/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for modules/places/infra/typeorm/entities + + + + + + + + + +
+
+

All files modules/places/infra/typeorm/entities

+
+ +
+ 100% + Statements + 42/42 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 50% + Functions + 1/2 +
+ + +
+ 100% + Lines + 42/42 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
Place.ts +
+
100%42/42100%1/150%1/2100%42/42
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/repository/inMemory/CreatePlaceRepositoryInMemory.ts.html b/coverage/lcov-report/modules/places/repository/inMemory/CreatePlaceRepositoryInMemory.ts.html new file mode 100644 index 00000000..9703c83b --- /dev/null +++ b/coverage/lcov-report/modules/places/repository/inMemory/CreatePlaceRepositoryInMemory.ts.html @@ -0,0 +1,271 @@ + + + + + + Code coverage report for modules/places/repository/inMemory/CreatePlaceRepositoryInMemory.ts + + + + + + + + + +
+
+

All files / modules/places/repository/inMemory CreatePlaceRepositoryInMemory.ts

+
+ +
+ 83.87% + Statements + 52/62 +
+ + +
+ 100% + Branches + 11/11 +
+ + +
+ 85.71% + Functions + 6/7 +
+ + +
+ 83.87% + Lines + 52/62 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +631x +1x +1x +1x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +4x +4x +4x +7x +4x +4x +4x +4x +7x +1x +3x +3x +1x +1x +1x +1x +1x +1x +1x +7x +7x +  +  +  +  +  +  +  +  +  +  +7x +7x +1x +1x +1x +1x +1x +7x +1x +1x + 
import { ICreatePlaceDTO } from "../../dto/ICreatePlaceDTO";
+import Place from "../../infra/typeorm/entities/Place";
+import { IPlaceRepository } from "../IPlacle";
+ 
+class CreatePlaceRepositoryInMemory implements IPlaceRepository {
+  private placeRepository: Place[] = [];
+ 
+  async create({ name, goal, country_id }: ICreatePlaceDTO): Promise<Place> {
+    const place = new Place();
+ 
+    Object.assign(place, {
+      name,
+      goal,
+      country_id,
+    });
+ 
+    this.placeRepository.push(place);
+    return place;
+  }
+ 
+  async findById(id: string): Promise<Place> {
+    const place = this.placeRepository.find((find) => find.id === id);
+    return place;
+  }
+  async findName(name: string): Promise<Place> {
+    const Place = this.placeRepository.find((find) => find.name === name);
+ 
+    return Place;
+  }
+  async findAll(): Promise<Place[]> {
+    const places = this.placeRepository.map((place) => ({
+      ...place,
+      id: place.id.toString(), // converte o UUID para string
+    }));
+ 
+    // ordena o array de lugares
+    places.sort((a, b) => a.goal.localeCompare(b.goal));
+ 
+    return places;
+  }
+ 
+  async update(data: ICreatePlaceDTO): Promise<Place> {
+    const update = this.placeRepository.find((find) => find.id === data.id);
+    Object.assign(update, {
+      name: data.name,
+      goal: data.goal,
+    });
+
+    this.placeRepository.push(update);
+
+    return update;
+  }
+ 
+  async delete(id: string): Promise<void> {
+    const deleted = this.placeRepository.findIndex((place) => place.id === id);
+    if (deleted >= 0) {
+      this.placeRepository.slice(deleted, 1);
+    }
+  }
+}
+ 
+export { CreatePlaceRepositoryInMemory };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/repository/inMemory/index.html b/coverage/lcov-report/modules/places/repository/inMemory/index.html new file mode 100644 index 00000000..df459c7a --- /dev/null +++ b/coverage/lcov-report/modules/places/repository/inMemory/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for modules/places/repository/inMemory + + + + + + + + + +
+
+

All files modules/places/repository/inMemory

+
+ +
+ 83.87% + Statements + 52/62 +
+ + +
+ 100% + Branches + 11/11 +
+ + +
+ 85.71% + Functions + 6/7 +
+ + +
+ 83.87% + Lines + 52/62 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CreatePlaceRepositoryInMemory.ts +
+
83.87%52/62100%11/1185.71%6/783.87%52/62
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/useCases/create/PlaceUseCase.ts.html b/coverage/lcov-report/modules/places/useCases/create/PlaceUseCase.ts.html new file mode 100644 index 00000000..da346e13 --- /dev/null +++ b/coverage/lcov-report/modules/places/useCases/create/PlaceUseCase.ts.html @@ -0,0 +1,223 @@ + + + + + + Code coverage report for modules/places/useCases/create/PlaceUseCase.ts + + + + + + + + + +
+
+

All files / modules/places/useCases/create PlaceUseCase.ts

+
+ +
+ 100% + Statements + 46/46 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 46/46 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +471x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +1x +1x +3x +3x +3x +3x +3x +3x +3x +3x +3x +1x +1x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +3x +1x +1x +3x +1x +1x +1x + 
import "reflect-metadata";
+import { inject, injectable } from "tsyringe";
+import Place from "../../infra/typeorm/entities/Place";
+import { AppError } from "../../../../shared/Error/AppError";
+import { ICreatePlaceDTO } from "../../dto/ICreatePlaceDTO";
+import { IPlaceRepository } from "../../repository/IPlacle";
+import { formatGoalDate } from "../../../../shared/utils/formatGoal";
+ 
+@injectable()
+class PlaceUseCase {
+  constructor(
+    @inject("PlaceRepository")
+    private placeRepository: IPlaceRepository
+  ) {}
+ 
+  async execute({
+    id,
+    goal,
+    name,
+    country_id,
+  }: ICreatePlaceDTO): Promise<Place> {
+    try {
+      const placeExists = await this.placeRepository.findName(name);
+ 
+      if (placeExists) {
+        throw new AppError(
+          "A place with the same name already exists in this country!"
+        );
+      }
+ 
+      const formatDate = formatGoalDate(goal);
+ 
+      const place = await this.placeRepository.create({
+        country_id,
+        name,
+        goal: formatDate,
+      });
+ 
+      return place;
+    } catch (error) {
+      throw new AppError(error);
+    }
+  }
+}
+ 
+export { PlaceUseCase };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/useCases/create/index.html b/coverage/lcov-report/modules/places/useCases/create/index.html new file mode 100644 index 00000000..363f7851 --- /dev/null +++ b/coverage/lcov-report/modules/places/useCases/create/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for modules/places/useCases/create + + + + + + + + + +
+
+

All files modules/places/useCases/create

+
+ +
+ 100% + Statements + 46/46 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 46/46 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
PlaceUseCase.ts +
+
100%46/46100%5/5100%2/2100%46/46
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/useCases/delete/DaletePlaceUseCase.ts.html b/coverage/lcov-report/modules/places/useCases/delete/DaletePlaceUseCase.ts.html new file mode 100644 index 00000000..d5164dbb --- /dev/null +++ b/coverage/lcov-report/modules/places/useCases/delete/DaletePlaceUseCase.ts.html @@ -0,0 +1,172 @@ + + + + + + Code coverage report for modules/places/useCases/delete/DaletePlaceUseCase.ts + + + + + + + + + +
+
+

All files / modules/places/useCases/delete DaletePlaceUseCase.ts

+
+ +
+ 100% + Statements + 29/29 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 29/29 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +301x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +1x +1x +2x +2x +2x +2x +1x +1x +1x +1x +1x +1x +1x +2x +1x +1x +1x + 
import "reflect-metadata";
+import { inject, injectable } from "tsyringe";
+import Place from "../../infra/typeorm/entities/Place";
+import { AppError } from "../../../../shared/Error/AppError";
+import { IPlaceRepository } from "../../repository/IPlacle";
+ 
+@injectable()
+class DaletePlaceUseCase {
+  constructor(
+    @inject("DeletePlaceRepository")
+    private placeRepository: IPlaceRepository
+  ) {}
+ 
+  async execute(id: string): Promise<void> {
+    try {
+      const placeExists = await this.placeRepository.findById(id);
+ 
+      if (!placeExists) {
+        throw new AppError("place not found!");
+      }
+ 
+      await this.placeRepository.delete(id);
+    } catch (error) {
+      throw new AppError(error);
+    }
+  }
+}
+ 
+export { DaletePlaceUseCase };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/useCases/delete/index.html b/coverage/lcov-report/modules/places/useCases/delete/index.html new file mode 100644 index 00000000..c193e6ad --- /dev/null +++ b/coverage/lcov-report/modules/places/useCases/delete/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for modules/places/useCases/delete + + + + + + + + + +
+
+

All files modules/places/useCases/delete

+
+ +
+ 100% + Statements + 29/29 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 29/29 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
DaletePlaceUseCase.ts +
+
100%29/29100%3/3100%2/2100%29/29
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/useCases/listByGoal/ListPlaceByGoalUseCase.ts.html b/coverage/lcov-report/modules/places/useCases/listByGoal/ListPlaceByGoalUseCase.ts.html new file mode 100644 index 00000000..83462634 --- /dev/null +++ b/coverage/lcov-report/modules/places/useCases/listByGoal/ListPlaceByGoalUseCase.ts.html @@ -0,0 +1,136 @@ + + + + + + Code coverage report for modules/places/useCases/listByGoal/ListPlaceByGoalUseCase.ts + + + + + + + + + +
+
+

All files / modules/places/useCases/listByGoal ListPlaceByGoalUseCase.ts

+
+ +
+ 100% + Statements + 17/17 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 17/17 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +181x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import "reflect-metadata";
+import { inject, injectable } from "tsyringe";
+import Place from "../../infra/typeorm/entities/Place";
+import { IPlaceRepository } from "../../repository/IPlacle";
+ 
+@injectable()
+class ListPlaceByGoalUseCase {
+  constructor(
+    @inject("listPlaceRepository")
+    private placeRepository: IPlaceRepository
+  ) {}
+ 
+  async execute(): Promise<Place[]> {
+    return await this.placeRepository.findAll();
+  }
+}
+export { ListPlaceByGoalUseCase };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/useCases/listByGoal/index.html b/coverage/lcov-report/modules/places/useCases/listByGoal/index.html new file mode 100644 index 00000000..e7544047 --- /dev/null +++ b/coverage/lcov-report/modules/places/useCases/listByGoal/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for modules/places/useCases/listByGoal + + + + + + + + + +
+
+

All files modules/places/useCases/listByGoal

+
+ +
+ 100% + Statements + 17/17 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 17/17 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ListPlaceByGoalUseCase.ts +
+
100%17/17100%2/2100%2/2100%17/17
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/useCases/updatePlace/UpdatePlaceUseCase.ts.html b/coverage/lcov-report/modules/places/useCases/updatePlace/UpdatePlaceUseCase.ts.html new file mode 100644 index 00000000..aa87d71c --- /dev/null +++ b/coverage/lcov-report/modules/places/useCases/updatePlace/UpdatePlaceUseCase.ts.html @@ -0,0 +1,196 @@ + + + + + + Code coverage report for modules/places/useCases/updatePlace/UpdatePlaceUseCase.ts + + + + + + + + + +
+
+

All files / modules/places/useCases/updatePlace UpdatePlaceUseCase.ts

+
+ +
+ 75.67% + Statements + 28/37 +
+ + +
+ 66.66% + Branches + 2/3 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 75.67% + Lines + 28/37 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +381x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +1x +1x +2x +2x +2x +2x +2x +2x +  +  +  +  +  +  +  +  +  +2x +2x +2x +2x +1x +1x + 
import "reflect-metadata";
+import { inject, injectable } from "tsyringe";
+import Place from "../../infra/typeorm/entities/Place";
+import { AppError } from "../../../../shared/Error/AppError";
+import { ICreatePlaceDTO } from "../../../places/dto/ICreatePlaceDTO";
+import { IPlaceRepository } from "../../../places/repository/IPlacle";
+import { formatGoalDate } from "../../../../shared/utils/formatGoal";
+ 
+@injectable()
+class UpdatePlaceUseCase {
+  constructor(
+    @inject("UpdateRepository")
+    private placeRepository: IPlaceRepository
+  ) {}
+ 
+  async execute({ id, name, goal }: ICreatePlaceDTO): Promise<Place> {
+    try {
+      const place = await this.placeRepository.findById(id);
+ 
+      if (!place) {
+        throw new AppError("Place not found!");
+      }
+
+      const formatDate = formatGoalDate(goal);
+
+      const update = await this.placeRepository.update({
+        name,
+        goal: formatDate,
+      });
+
+      return update;
+    } catch (error) {
+      throw new AppError(error);
+    }
+  }
+}
+export { UpdatePlaceUseCase };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/modules/places/useCases/updatePlace/index.html b/coverage/lcov-report/modules/places/useCases/updatePlace/index.html new file mode 100644 index 00000000..ed1069bc --- /dev/null +++ b/coverage/lcov-report/modules/places/useCases/updatePlace/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for modules/places/useCases/updatePlace + + + + + + + + + +
+
+

All files modules/places/useCases/updatePlace

+
+ +
+ 75.67% + Statements + 28/37 +
+ + +
+ 66.66% + Branches + 2/3 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 75.67% + Lines + 28/37 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
UpdatePlaceUseCase.ts +
+
75.67%28/3766.66%2/3100%2/275.67%28/37
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css new file mode 100644 index 00000000..b317a7cd --- /dev/null +++ b/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js new file mode 100644 index 00000000..b3225238 --- /dev/null +++ b/coverage/lcov-report/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/shared/Error/AppError.ts.html b/coverage/lcov-report/shared/Error/AppError.ts.html new file mode 100644 index 00000000..6120f8ea --- /dev/null +++ b/coverage/lcov-report/shared/Error/AppError.ts.html @@ -0,0 +1,112 @@ + + + + + + Code coverage report for shared/Error/AppError.ts + + + + + + + + + +
+
+

All files / shared/Error AppError.ts

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 9/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +101x +1x +1x +1x +1x +9x +9x +9x +1x + 
export class AppError {
+  public readonly message: string;
+  public readonly statusCode: number;
+ 
+  constructor(message: string, statusCode = 400) {
+    this.message = message;
+    this.statusCode = statusCode;
+  }
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/shared/Error/index.html b/coverage/lcov-report/shared/Error/index.html new file mode 100644 index 00000000..9a2117dd --- /dev/null +++ b/coverage/lcov-report/shared/Error/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for shared/Error + + + + + + + + + +
+
+

All files shared/Error

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 9/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
AppError.ts +
+
100%9/9100%1/1100%1/1100%9/9
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/shared/utils/formatGoal.ts.html b/coverage/lcov-report/shared/utils/formatGoal.ts.html new file mode 100644 index 00000000..dcce8e96 --- /dev/null +++ b/coverage/lcov-report/shared/utils/formatGoal.ts.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for shared/utils/formatGoal.ts + + + + + + + + + +
+
+

All files / shared/utils formatGoal.ts

+
+ +
+ 100% + Statements + 10/10 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 10/10 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +111x +1x +1x +1x +1x +1x +2x +2x +2x +2x + 
import dayjs from "dayjs";
+import "dayjs/locale/pt-br";
+import customParseFormat from "dayjs/plugin/customParseFormat";
+ 
+dayjs.extend(customParseFormat);
+ 
+export function formatGoalDate(goal: string): string {
+  const parsedDate = dayjs(goal, "DD/MM/YYYY", true);
+  return parsedDate.format("MM/YYYY");
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/shared/utils/index.html b/coverage/lcov-report/shared/utils/index.html new file mode 100644 index 00000000..60f13710 --- /dev/null +++ b/coverage/lcov-report/shared/utils/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for shared/utils + + + + + + + + + +
+
+

All files shared/utils

+
+ +
+ 100% + Statements + 10/10 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 10/10 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
formatGoal.ts +
+
100%10/10100%1/1100%1/1100%10/10
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed68316eb3f65dec9063332d2f69bf3093bbfab GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc literal 0 HcmV?d00001 diff --git a/coverage/lcov-report/sorter.js b/coverage/lcov-report/sorter.js new file mode 100644 index 00000000..2bb296a8 --- /dev/null +++ b/coverage/lcov-report/sorter.js @@ -0,0 +1,196 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + if ( + row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()) + ) { + row.style.display = ''; + } else { + row.style.display = 'none'; + } + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/coverage/lcov.info b/coverage/lcov.info new file mode 100644 index 00000000..12c96377 --- /dev/null +++ b/coverage/lcov.info @@ -0,0 +1,518 @@ +TN: +SF:src\modules\country\infra\typeorm\entities\Country.ts +FN:15,Country +FNF:1 +FNH:1 +FNDA:2,Country +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,2 +DA:17,2 +DA:18,2 +DA:19,2 +DA:20,1 +DA:21,1 +DA:22,1 +LF:22 +LH:22 +BRDA:15,0,0,2 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src\modules\country\repository\inMemory\CreateCountryInMemory.ts +FN:5,CreateCountryRepositoryInMemory +FN:8,create +FN:20,findByName +FNF:3 +FNH:3 +FNDA:2,CreateCountryRepositoryInMemory +FNDA:2,create +FNDA:4,findByName +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,2 +DA:6,2 +DA:7,2 +DA:8,2 +DA:9,2 +DA:10,2 +DA:11,2 +DA:12,2 +DA:13,2 +DA:14,2 +DA:15,2 +DA:16,2 +DA:17,2 +DA:18,2 +DA:19,2 +DA:20,2 +DA:21,4 +DA:22,4 +DA:23,4 +DA:24,4 +DA:25,2 +DA:26,1 +DA:27,1 +LF:27 +LH:27 +BRDA:5,0,0,2 +BRDA:8,1,0,2 +BRDA:20,2,0,4 +BRDA:21,3,0,2 +BRF:4 +BRH:4 +end_of_record +TN: +SF:src\modules\country\useCase\CreateCountryUseCase.ts +FN:10,CreateCountryUseCase +FN:15,execute +FNF:2 +FNH:2 +FNDA:2,CreateCountryUseCase +FNDA:3,execute +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,2 +DA:12,2 +DA:13,2 +DA:14,1 +DA:15,1 +DA:16,3 +DA:17,3 +DA:18,3 +DA:19,1 +DA:20,1 +DA:21,2 +DA:22,2 +DA:23,2 +DA:24,2 +DA:25,2 +DA:26,2 +DA:27,2 +DA:28,2 +DA:29,2 +DA:30,1 +DA:31,1 +DA:32,1 +LF:32 +LH:32 +BRDA:10,0,0,2 +BRDA:15,1,0,3 +BRDA:18,2,0,1 +BRDA:21,3,0,2 +BRF:4 +BRH:4 +end_of_record +TN: +SF:src\modules\places\infra\typeorm\entities\Place.ts +FN:35,Place +FN:19,Object..__decorate.name +FNF:2 +FNH:1 +FNDA:7,Place +FNDA:0,Object..__decorate.name +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,7 +DA:37,7 +DA:38,7 +DA:39,7 +DA:40,1 +DA:41,1 +DA:42,1 +LF:42 +LH:42 +BRDA:35,0,0,7 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src\modules\places\repository\inMemory\CreatePlaceRepositoryInMemory.ts +FN:5,CreatePlaceRepositoryInMemory +FN:8,create +FN:21,findById +FN:25,findName +FN:30,findAll +FN:42,update +FN:54,delete +FNF:7 +FNH:6 +FNDA:7,CreatePlaceRepositoryInMemory +FNDA:7,create +FNDA:4,findById +FNDA:4,findName +FNDA:1,findAll +FNDA:0,update +FNDA:1,delete +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,7 +DA:6,7 +DA:7,7 +DA:8,7 +DA:9,7 +DA:10,7 +DA:11,7 +DA:12,7 +DA:13,7 +DA:14,7 +DA:15,7 +DA:16,7 +DA:17,7 +DA:18,7 +DA:19,7 +DA:20,7 +DA:21,7 +DA:22,4 +DA:23,4 +DA:24,4 +DA:25,7 +DA:26,4 +DA:27,4 +DA:28,4 +DA:29,4 +DA:30,7 +DA:31,1 +DA:32,3 +DA:33,3 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,7 +DA:42,7 +DA:43,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,0 +DA:48,0 +DA:49,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,7 +DA:54,7 +DA:55,1 +DA:56,1 +DA:57,1 +DA:58,1 +DA:59,1 +DA:60,7 +DA:61,1 +DA:62,1 +LF:62 +LH:52 +BRDA:5,0,0,7 +BRDA:8,1,0,7 +BRDA:21,2,0,4 +BRDA:22,3,0,2 +BRDA:25,4,0,4 +BRDA:26,5,0,2 +BRDA:30,6,0,1 +BRDA:31,7,0,3 +BRDA:37,8,0,2 +BRDA:54,9,0,1 +BRDA:55,10,0,1 +BRF:11 +BRH:11 +end_of_record +TN: +SF:src\modules\places\useCases\create\PlaceUseCase.ts +FN:11,PlaceUseCase +FN:16,execute +FNF:2 +FNH:2 +FNDA:2,PlaceUseCase +FNDA:3,execute +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,2 +DA:13,2 +DA:14,2 +DA:15,1 +DA:16,1 +DA:17,3 +DA:18,3 +DA:19,3 +DA:20,3 +DA:21,3 +DA:22,3 +DA:23,3 +DA:24,3 +DA:25,3 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,2 +DA:31,2 +DA:32,2 +DA:33,2 +DA:34,2 +DA:35,2 +DA:36,2 +DA:37,2 +DA:38,2 +DA:39,2 +DA:40,3 +DA:41,1 +DA:42,1 +DA:43,3 +DA:44,1 +DA:45,1 +DA:46,1 +LF:46 +LH:46 +BRDA:11,0,0,2 +BRDA:16,1,0,3 +BRDA:25,2,0,1 +BRDA:30,3,0,2 +BRDA:40,4,0,1 +BRF:5 +BRH:5 +end_of_record +TN: +SF:src\modules\places\useCases\delete\DaletePlaceUseCase.ts +FN:9,DaletePlaceUseCase +FN:14,execute +FNF:2 +FNH:2 +FNDA:2,DaletePlaceUseCase +FNDA:2,execute +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,2 +DA:11,2 +DA:12,2 +DA:13,1 +DA:14,1 +DA:15,2 +DA:16,2 +DA:17,2 +DA:18,2 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,2 +DA:27,1 +DA:28,1 +DA:29,1 +LF:29 +LH:29 +BRDA:9,0,0,2 +BRDA:14,1,0,2 +BRDA:18,2,0,1 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src\modules\places\useCases\listByGoal\ListPlaceByGoalUseCase.ts +FN:8,ListPlaceByGoalUseCase +FN:13,execute +FNF:2 +FNH:2 +FNDA:1,ListPlaceByGoalUseCase +FNDA:1,execute +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +LF:17 +LH:17 +BRDA:8,0,0,1 +BRDA:13,1,0,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src\modules\places\useCases\updatePlace\UpdatePlaceUseCase.ts +FN:11,UpdatePlaceUseCase +FN:16,execute +FNF:2 +FNH:2 +FNDA:2,UpdatePlaceUseCase +FNDA:2,execute +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,2 +DA:13,2 +DA:14,2 +DA:15,1 +DA:16,1 +DA:17,2 +DA:18,2 +DA:19,2 +DA:20,2 +DA:21,2 +DA:22,2 +DA:23,0 +DA:24,0 +DA:25,0 +DA:26,0 +DA:27,0 +DA:28,0 +DA:29,0 +DA:30,0 +DA:31,0 +DA:32,2 +DA:33,2 +DA:34,2 +DA:35,2 +DA:36,1 +DA:37,1 +LF:37 +LH:28 +BRDA:11,0,0,2 +BRDA:16,1,0,2 +BRDA:23,2,0,0 +BRF:3 +BRH:2 +end_of_record +TN: +SF:src\shared\Error\AppError.ts +FN:5,AppError +FNF:1 +FNH:1 +FNDA:9,AppError +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,9 +DA:7,9 +DA:8,9 +DA:9,1 +LF:9 +LH:9 +BRDA:5,0,0,9 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src\shared\utils\formatGoal.ts +FN:7,formatGoalDate +FNF:1 +FNH:1 +FNDA:2,formatGoalDate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,2 +DA:8,2 +DA:9,2 +DA:10,2 +LF:10 +LH:10 +BRDA:7,0,0,2 +BRF:1 +BRH:1 +end_of_record diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..0afdaff3 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +version: '3.7' + +services: + database: + image: postgres + container_name: database_api + restart: always + ports: + - 5432:5432 + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=password + - POSTGRES_DB=API + volumes: + - pgdata:/data/postgres + + app: + build: . + container_name: places + restart: always + ports: + - 3333:3333 + + volumes: + - .:/usr/app + links: + - database + depends_on: + - database + +volumes: + pgdata: + driver: local diff --git a/img/challenge.png b/img/challenge.png deleted file mode 100644 index 2cff2ce4f7ae441e86b60b0b8edb1e6e127c632e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106137 zcmeFZcT`i|x-YCC77$TUkS;0$Qi7l$B?Lr8rAn0&0zyCtp(m6O5DUCYQ(B~pG?Av1 zP(l*~r1ug+Ktu=-5_%{Ba^t)AIcIO(;~U?&W8D7^V+2;#TyxDipZWCpdw6N6ug%HM z&wk**0nU4OZy6mpaLDGs0ak&dhnaVLkPnIu95|@ytfggmPfP2(p_jX(vn%w#0f{&E zwzjA5N=tmRv$M7R)+Hs$?&WLr*IyAvw!!TU-x?Yly5IG@i+O8p{r%j@@2n<`2QnXg zseow=X?R%hIt(i!4@2qRsz|lKQ>}FW1gmQ~0cRTGV=PmSXE6?V8hL3xIL69q&+@v^ z+Q#U>qlyFg3%51258@Rx7JZJQIR8pLWG8YU|JX6F!zINB@GNb7FC{f-+~=*tkKI!f zddXSNd+0_=WG68~hV$r+cpt+U%Lgp)Q`b1Igv$>o+&?22A{zJcdm^SFH`CU^*5O;j z0e1Jl7J8H#roKtEgq+kNerd4nKYpg><;jkq)`m|`r&w7hRiD58sQx-QIb_PvQuEP+ z3*!ePCLg{Uh=@GzN~Ih>UNErFUwBI#KPFAhpbzgk>ggT0!n{6u;9!{ZfkVuzgUk;<^TQ;4Oz43l%)h6ZpIh%({;Tzn z%{$irx@Hyl^`NG)*1dbozsB}nP^g>tV|SmXQ@qT*J2>KO^3dm@p00|$J6zVz!Tk|b z)(`IStIGj3KNaRB9O`3t-Vg5T=B?rfyzuuED$MI&w*eQ<|NV#$40z$8p5b{dcQ5F9 zMOisnxeMy-=g*&4^Kx)hF}iiStZdYt>7M zx{mUjE5UUJn*)2gdOf;IoyQXs4K#B;rsaQ}7&0a9k#j#9!A6RN*!5j- zLjVd@m|xmjts0Q~6zdnszo2nXL8>%pgq%Ie1_`JRC>%pP&nuGI1Z3>*fue3%toFq@vovxNpia6G6sdy! zCyxEOC*^E8;P2U4IbUXlO4@f|BnvR2v>Z89>6r{)Dk`lD`NHMDK#}r1$n)aiX`+oa z07Fglf>BcJxZsc$U7w9jX; z%2-)CR!vA7SRk5v#d#4M@q`3$X`n?sb*}hR)QPU1l0l8=>@nXe&-!HFXB>mqWELx4 zaBN}`n?s`L`-=HF0~@+{%2V01vufn2b42ee0;;-$0*|J;HXLpE^mSZW#TS*JMvyFCAr*Y_;Xey|(+2*CG)*5J)o zQTRrDm%46$pVbtqYH^hKeW`ENgf4AW@0}K(aANdhj(CAuJax**w9h^picV{8w%!GT zg~w_-h4G&&%5lN~&KVrst_x{pgu}DX!^9+KZLbXG( zGH8Dz#R0wJS@#Qau$>9l;A?HL3c#msD!Y^v;4?H##zX1n5LEB@@BDIJ&Xg@@9cZ)Q zG%|V+P*92uiIYjKZQD?rM_i4I+t}n9olUqyAcEnAKvQf5`Lld}&Jf$}cDOg$mCWyf zVXv}t(oUrSKMk=N9(J`NNc*l4`{xj^OT>{>II9emhI^U3n!~|4I{wj-5KN7geQj)K z0N2}mnK=JcoxeR_2R{FWgYwyGl<3WY3@ibTAWLBj&=pRB23}f zs#?!)`b*~bcnA5^=3+8^#uk%!q@;9u%tx{cV5n@4+0Nx{ATZkuOoWD;ca;upx(bdT z^8S-vVux}Tv+tmaEp6$GwFDL7p0$sAyqwQQ0zR`Vyr80fd~D~VD>Wh&Te%{cY&E$E zkV-P`<9Su>*{(=+E72amn0aIq`SR7RSg~OzRL}Siqy8@m;MDTrej6wSd{(yF7|IGg zOTBkjk18w=RK#J29L*3Gd+!5amV+nD8!!DypR*y7e16W4lbm(Z2;b8*OlF@+27G+; zRCIw@;z-!l#2g+nm+FmK)qEY#G5ip{Q6x$q-gM=QNdnoqQBLGbF0CdCAbYSB9GQ{_ zjvOAhfk918v7e?S^Ya#vl0xc{L=L%4q#A`Ni{}?)bJD8S9mz7Wz(z^saF9vFx-L zRH&le`O*`%6(%=JUn$40RgLHz96a;;rr7o$)y-?rxs6Ed8p9!v z2EE)MP}A=FZbYZK#MO<2KLu2eyt;5fEH8+RG~f&H>$reJHyu>$0lWD$6kIP#eH4(M zHO}eRQIK6R2JRkw#91_=Q>R($amJxdsnfy|14z8~yMjCUHjBmh%CbDF_)h)@S&=(8CF)SgH_{1b*SJGK z8RuG*NjZz!yj=s)sb%A%XRULi;Q|$ud7!f>>Iws}_m?y8QI~>}{`;GUF8%4uy*>SF z3Py_geU!M9%jar>eU9+XTr;T{i^3izOqh{bufB?2uX@tKZN*z9E>OO$txKMe#nHn# zpB#UfjnZAWQ5f&?2S@XArUIeZ^6ZI?9Ldr!B^ku@wTj_vTvofVZ*=)Y-^5(IX?26{ z%X+~)mtkuN2K49dZ?oleb|H+Z6O!QxS*V!f6;@a7?-b(MlxK(CHZ|WOeL)z$v#HqG zyjoW+lyQz_kyE<|<)@CXuh(Z*5^&b7fG}?lqJZOR(Oq;4gmZ48yJV>tr+{l0jSU+( z5g_95z{BZFCuMkA*q=CVvy@&mXhLvV<4qWyPF|G>`44;J%3^$ZS-!Nc{o}ZO;`KRs z5pcVLgU3B@nD0)mprirXRv2G0s)+63Gb$TBR6aDbbaB8=hVoWKO(2 z+XrwUFLC{Rmlr(pU@;%4~%lvs%*7d+XlYXRF7%kaV4J^m`-Z1Kr=3 z`=mkmk{px;z_e_@Jt)?WWNjr6iw%co(NlcZ;|LV8nPrbgUVVkmZRhB&VmuY8IW9hv zNO|)rMwn3STo@mpgr;PIK2;~(QJv9h<#aL8@isqIC0bz(jw(YEtgS{XyN2{82eJo& z{&~4Q*T4SmeI8(mwXt2t_36jx>2j`*whSv5`G#Ade6t}iAm8II+V(Ik!00u3;|GgS zDtZQ+t+$Ef8z1yb|%&bl_34rPpSXq<0AB$2}s;cYZbG@of%aB8D81 zwne=6KcmXp%CF~QhXAm$>QaH^MTiaEhE7HYV+9yAZAcBadcaI@*$CANvvJ^MEQDbL zDBRSRYT)qTpo6<#lfdE&?fPCt*KylP`o!kqw~Ntbn3|trw9nD#&ZOjIwA}m)Kww5{ z;A$JTN1gsqM<*PN#6xNHNrpP^O8VAUaaVi^lt%SsBgFI9N1+gRlH(#yWQKq4$b~)EEz79s^y#>(paf90i?V;X#wC4xS-b z#KGg>*|qh6hC$OZCjg8;ajXCvkW>3(Ze;Y8Sbo1w$M~z+*Jv2!Cnoh#LWzl{t~?00zeA=B6$h1H z?@EJu)}B*A9z6v2FqR z*va&EI;oR2;|bkkwmM0Q`2G;RB3|7WoRu2dS7wCqYTw<;2o_7SnpZxXn5XI-*W`^1 zC-230VGaWezYtA)HAZe$WfWXO2lMJ}`mE!Xm(b};(A6BJ+BVs$pQptLS6c-YK8T0+ z58`IrgXzh{AUb7uV8FfQ60U{i3Ha1NyHF{GQ_@S_(kxHoUJYwl+j>X#`tSG&;B3RrAWeHWgemrj5 zMqIt~^bgrg6sKh01en4i!9I7qt^Kk@!~1szYU>-br|-*0zZ-TbE9cyr5L1p>LwusyyBI0t^3bzaBRG`_qd7j-bNF$}b8hufS$p^4lE zYJDz_!&@5NyW4AejBD2ZGx4;Yk@^Xws7S zaJVI%&szB?X#@oFGCqEWMY2tCmpkD!Gw9y@*`8}1eTGvYi9~4Gkj$3=Y;JlS1Df4L z6&6-wbltXk7`q0lo8#W_jfEju+kshy1OOyW>UE;gckvTR($VC2o0myd=~3I zX@@`{Xv`IV=~i3QRVAf(FHVavD(j0ow@K;l>HF)sg-si>kN(Vo^|76vdeSGg*e5oI ztsd%_MBg^J77$3XF*BWj>NvWU&y=Q>)$$`p--l9Y$u%a5;cFT*WWwVnX38wOWB zckyGqB5|t&7`z{10K5%z0uIK8M zvRQfMnmBcNu!y>`nrDD+7e*~!#Z5=47JUBPH~Dz8Pg`UIBUrnZx>VNPt&dyyn7{Z& zTX=>1o?bU+1NhJDXRldDlo29khla1h>c0->^XgJBOGggLxCMD6UHM>s-va+cCb1k3 zPBK{%2BmWNNCa+o3yO$<^tIqp#f4j@KTQi~by z&WEYTzZA7Ic|AMsT55|s!m5JEMn?+vxy!}oLJ|9 z%lY|*r6sHKBFhi9tGr2LymiZL!4_}a>TtGSSd88Ifwx~C{3Dsk&V4r(O~bSD+W6Vo zWs7U(C2eyQptIdHk~zwl#wSdLe$ycGpsM3ia3%f2PuY!oZf5o2ZDnQVgxD?)ILf?o zNvEjRVcT!tR9mf;f1y7bWw!Gpl+(;=$T_;ezhT%NZ;Phh(^_+)Lh}t{Hgu#X7H%$xs~4P!N=s`LL>oRu`SLc zV^cF4v`2Xq8Rp@M3lc72CPzs%_Fg zqXq`f4EH~G$>Tv(@AT51;Qci`?d_ks2577if{{ez zy?J}Y+Bd$geABY6-G3PLcn|K^7_3&(s_J)VydDo$&0LNK^FJYWniNY-cD2>%()Go zlk$AkJ!iH)FmoaXpn!g!#h`X7V$)|{pjR(Yo4p~+)k^zW;U~m?oiq_nRF})LQD6pd zW>%@xW2I9WLc{psSnvnxfY*#dA@1j5S_KnO}3GB#=3mAL5 zQDq|o1kcmkKeXx~UT`#4dOE=>;5MnutPF?KzC^El-xnU@$ZZ3K{w@^XA7<`*;;}fj z(gl)-(3oSD(4f3Jl*Pf3&&5zkbvue&pT81Jyqj;cIRQAk#%u&lRZD zZ_X&JYGM<-UugG5m+@il^TZwEJKy1m)cwOXaNrPaMJdg-3r?Z!59oigq6U160tlWo&OtI)zGpnncRc5A1Cko0cd`C5p2suQn?|i78yHz>h71L;^4wW`&I zJ~m%|F%a2=amx6bvC?nVV zwCQQmmLQoW5{OZ?Hv-qqC=1Vpp`na(^2keguz?A5Z;mf>XA zJyybaIdHmkWM~b#opPP_8l^iZ5RI;r0n4=#O)8oeq;x2inGkpv4ofI5-g{vhZ(eo& zb~150_lRpg>Qx_C&@!vY89dWd=1LGmj@sqeT*4u<0T835*t9fZ)tNZsz<0M{#brv& zD5B1{jp?F^lNT0NXU@Ls)AL8T^MHA>kc#jz2O&4$nQK+dwJ$~}bT5a*P3}>Be?@CU z7}Q)wm~M1M|GUo#g&OzYGWIv?m)xoO4LwW~0dq=4Bm|e0C*(r&oFW5ipEtZN{`SY& z#K~orywVSoYqhbBW&nu#}K6R8X4F=>73jwl+vcrP`@-MV34|1UDG3YC~3J ziHN2;oz>Re!S@8sF3rn75|uyoyM3{ZKK)iP1oN)We*+04ekRa>fg#srV0S@BcM_3L zJbPXY8@~!bZay@gKTIx~fG3a5zU5z<%lj0`Mfuca;95E%Y(D3Ff;E74?N5uUdnLq~ z*ROBlL2)dq7y|d^Q5u`*Nu5p$Fqw9*vsyoUSN7a{kGt;X>4@^pQ4NU7jgohD_>at} zU@uk@MqI8eUvx_}0kE6#{9%Mz?$}x$wqYR}laurqv(*PWpR)49hZ`+*;urEXGrr2% zZ>W1Rd=WIuXgV*8>=h!(Z5C$_&WHIHmMej3J6?raTxt6w-6q#|htd!;S@T#4SH`#EjMlEgn+o-{mX zP9xF7i|4ODQV|2UpEPv%;0IjA{{t%?2*Df^cMAFAg>v9SM{9I3z%JyU$D99OL%k~~ z$r$A4F(ouKJgEY?;f$#ewG(GV!D}l%-wdK+p^brFf(w#ht%u0Bw3q(-5hm)=7fr%D zTAVG1?`l03kI=%)iL{6UmCb_AH6oksXI{u}_fMC7Dv&#YFmAqvGdaU%Tz`?D6o!n2Y9;>ktDN~tAxXu$ ziYtqZ+$-wvSX+@FvXS8JkLSsm_N*&u+cms1-!`w?|N21)TBi*!M`+o+<(ht-CMX3u{@K|Y5chJ;R6LH)O%QXe<8D+eVr@oBW^u$} z-(xKUJOi`T8o!gmgVDnX?kaUhlV2E#%5=g60aE&01D?sAmT&bfrGQ1;0PielGvX#e zR7Uy4_KOHDaQu+ZxyAreGMB#{TC4VTk&2y)uoTcjF;S#l0;rsNk6->(g=i6Xf71;U z-J)mxO{+H({nU)M-;AArU+Q?i?kCv(-18g9nw?;Oto=-wsA44fg}i6o!gKki$Z2^y zzBbPix4OXW$e$?%ncKZ?Z-;NVX>Iez5aRTOb}M?ZKP*>Deyqz0Rq*A$m=7eM9XUoW zUcD$IRm44Z!nw`!8^A$u;bTEg)5&4g$-r+MWPybjK10U_Rvyl`{UuCXLG~mE4yyU=#s38EA<}+ z$BQ^yc&7Fu@9IQp1&K}@nnSM(g?^gYp4GB>IB5vT%GZAz)q39`L2oup{=R{}Q%q>Y z5BOi?=j(DO&c>48t$(U9yeu4T5|oA25@?eb1qz4B+X=2V2A&IB|M_s+?%XGn_AX4; zK>MtarM-^otVQtVlZ{Pn0shO=*duy4K9LWexUTDStV(u#D-SsaUP~sYwe3a{IQTNN zt7w6z$}tv2lkaX4xH|eCk`=9i5ZU&g3Y!N47x}laWony%%Fwc@7Ein%aN1`mlB9iw z7a(2~>v~ZZXqhJAWI1 zuVsa8`=v;$O7wI+hl;ho7%@D@HCFLJKpnD{$(N6ok(LIy*!Mcr$RrJ)T)4DWGB10v zba!zl2X*gJZHBjq}K)Naf?=bcb{@2*c0aNj-fZ!;`p`3^t z``i+Ju0O8Fb)8BU`7x5N^UZhBaqRn6&uiyvDKHa<(Y8ve$AEvrmz8vFlOREczpebe z6|$6U^NI-Ucv^Q&)?x9>v!UL4XF5~`Muglf&rYj>I_Qj(27I2oTy|}jFWG2St;@~q zHj+lCY&H`W@1PjwK_ABp%H+{+9$2(T8bier_~$BO_CGZ|_P509=x>AEF6=B%)va!g z)VpNYpU5V^*h}p`es*0<5?$j!xLYIp^jSf_=C(d=GNBteZ6v znnlnhIbo(x9|=5I9xJ;f&^GuW$^E>-l6kXU80Dya{EC0wQ+H9-_`=NFkI~o6O8K3} zykhZXa;H`sABx=sGF|kVpRb9+(8@qatBk85{*!RxP7qk$xef@CB$fbTBy-~y73qmS zd@`4^U+ci; zZ@TTFVOLVXj*k6ZM+l3Ltd$|1q-=sv*`6$T`^#klHvOn@9UH{ZIPWLy9(-$KMFyHI zu_ADW54ZS95M*{QJ>jZ%spzEAdr%+JaX_B?O1>sxA^b&2qR))yZZ7)9zISoqBDtk@ zt5N56u{EbZDL%37n-C@=)TYr*MWJIQJ+vPZ6}N_aNe8a2i5yr?C#MRCw6r7F@DJPn__5OT_iZTS30oU|M#pe^;AW3fU_*z_Utp zO@4Y0gs#kvCVTW|zihnvL0O%V+jE;QaZw`h&c?CC5tAE`8TOfO=>0WP`EkStUYp$g zp+x_eJ0;sT9kL*4EqhKu26Y$H1Dd{=x$baS$v9y;*hQGJ|JE=iTe`Ns!zf$K%xLNa z_XyjaBZW57iFzZ?MU1GA`IkjJtfSJ0ZzLxNg+MzTZ1f)lN$^GQh4;t5BnYJ}4Y!eS z#lArW*4bhsVqks1w6&Fs(x8s}hlLlSVA<3qD+D2DaUGkVvhcH|3T~RXu98K#j|m^R zNyy;ThVK>02pKZ1K~-LXszk+sC-mp5 z)~g?@NUK)3$0wnHxtKRLW^O>Q$XtS{5NFk1M!-Dw2*xz;linBja&`8IWUY0)K9?Q+ z8YVxzEh6D8&7j&^7Npxe{fRQKGLJk$$`$e|=A1b^U50+hbn#n*clp0>MMI1Q87rO% z>a?f#cHXkL+U%&ss@L7LywSaT>aDW)Y`15XH)m^oce=BAYQB%!>V6Ns-iBKxv|q~) zoizzV2(Ijlq~{OZcUItg(Gz-~#N-W|H@9~-&ZLLM^Vq;@7_G&5>sNUv2>p)E_2VSN z#E(%n-dEC#(u*>k)fugqSIDyPbLzn)6gZ$;GuVr&Os;G&QQap>eYudMA#ick$x|gHcc)Zrypfh8_Xq;D}T5O)5^2+*m#aMD;G8dxphB=@@ z=6=TvX<@cKH17@5nBQzQ$dwU7TMqPvIuP2n`xZz&J$y4g07b-O)b@z?K=dl9?H#6wA?Tt-+%DZ6lAVZ~ZURUPvp)y~J=Egzc{1s7kBaHWZKW-tZ#4FS8CR zaw~Fu%P$Ftll0m38T+vnjqs*R>&v(%P1m2y{Rz9~+o{G)znLJ|{o^14~(uxsth}Ze$#9`x%uW6}abaYjqWxCznUDHcXh|7Hd6vL*TdvhQI1= z1bHPUs_OAG?k11o_kr{G2finJ9&l49JbHT++AlWnBA&OLMBa8gi@*6mtLVcRC*tNC zKXvZUx=zsHi_(ynD=H5C+O7%&Z1Oo1_0CGgCWjig#B24!cJ%R4gHW}up8|0r3lbm; z*`lRfVtQqSBQbDTvXl3d^kg<<#z)aG`6Y6%29m=r78(czpAw^A*@=~zb}U&-oY(cn zBYHZ+4&Mw2SX|h`_9L`xBm_P>`s&~PRurN0SFToFOX9j~@`E%3j@xDX{MXEc_Bgce zazJkeoC|}Bx3>E_tK)|_J2-|KVO>38)t;$78`hsY13r8RU7UK8mrpA{i1+CV6?Fq; zIi~=K71OJ`G_PF}Qsd`Lgc{gS?~p=biBK}RbR6wykBVPf4aDXPB=CNOLbwyX@XXBx z1CtlU<^4a#0K4~C`YGPKPSy^mL;V=rKA6{d%)Gr+XC=E`e|-3)x0W#;OL=OItCXtK?gt_r=7)O+&uY5MuH zSlPI(WQ#jk-M8jfl_*YNoSi>@%q}s}YpNVm7+aL4cY>TlyLLQ)0v#JU>@YCU+#fuR z;Fkg74xIhD2dZEd)b{YP2l3JDGvr0@q^QM*hZ#bg+jSt5X|kurj{AG=83N+&Ve?fo0&Bh*0?P6}hZ>p$87c|qr}`0B%QNIXQ!CLk%~}$aTNX>tL*~Is`(i}r=9M2Fm|^XR4y{CJz$r5ld!#NqOT

O)q6ZakfC|W*E%e2dFR#M)8zKA+nxa_ykqyN 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'Q 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 diff --git a/img/logo-clubpetro.png b/img/logo-clubpetro.png deleted file mode 100644 index ce47bb7d958fd50c0f7cf7bb14b9f5214d3f9441..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37994 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" + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + // testEnvironment: "jest-environment-node", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + testMatch: ["**/*spec.ts"], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "\\\\node_modules\\\\" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jest-circus/runner", + + // A map from regular expressions to paths to transformers + // transform: undefined, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "\\\\node_modules\\\\", + // "\\.pnp\\.[^\\\\]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: undefined, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; diff --git a/package.json b/package.json new file mode 100644 index 00000000..77b1cf82 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "backend-challenge", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "scripts": { + "dev": "ts-node-dev --inspect --transpile-only --ignore-watch node_modules --respawn src/shared/infra/http/server.ts", + "typeorm": "ts-node-dev ./node_modules/typeorm/cli", + "test": "jest --no-cache" + }, + "dependencies": { + "@types/express": "^4.17.17", + "@types/jest": "^29.5.1", + "@types/uuid": "^9.0.1", + "dayjs": "^1.11.7", + "express": "^4.18.2", + "express-async-errors": "^3.1.1", + "jest": "^29.5.0", + "pg": "^8.10.0", + "reflect-metadata": "^0.1.13", + "ts-jest": "^29.1.0", + "ts-node-dev": "^2.0.0", + "tsyringe": "^4.7.0", + "typeorm": "^0.3.15", + "typescript": "^5.0.4", + "uuid": "^9.0.0" + } +} diff --git a/src/@types/index.d.ts b/src/@types/index.d.ts new file mode 100644 index 00000000..21e621c3 --- /dev/null +++ b/src/@types/index.d.ts @@ -0,0 +1,7 @@ +declare namespace Express { + export interface Request { + conuntry: { + id: string; + }; + } +} diff --git a/src/modules/country/dto/ICreateCountryDto.ts b/src/modules/country/dto/ICreateCountryDto.ts new file mode 100644 index 00000000..42db8807 --- /dev/null +++ b/src/modules/country/dto/ICreateCountryDto.ts @@ -0,0 +1,9 @@ +import Country from "../infra/typeorm/entities/Country"; + +interface ICreateCountryDTO { + id?: string; + name: string; + flag_url: string; +} + +export { ICreateCountryDTO }; diff --git a/src/modules/country/infra/typeorm/entities/Country.ts b/src/modules/country/infra/typeorm/entities/Country.ts new file mode 100644 index 00000000..00b713c7 --- /dev/null +++ b/src/modules/country/infra/typeorm/entities/Country.ts @@ -0,0 +1,22 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; +import { v4 as uuidV4 } from "uuid"; + +@Entity("country") +class Country { + @PrimaryColumn() + id: string; + + @Column() + name: string; + + @Column() + flag_url: string; + + constructor() { + if (!this.id) { + this.id = uuidV4(); + } + } +} + +export default Country; diff --git a/src/modules/country/repository/CountryRepository.ts b/src/modules/country/repository/CountryRepository.ts new file mode 100644 index 00000000..85a64357 --- /dev/null +++ b/src/modules/country/repository/CountryRepository.ts @@ -0,0 +1,30 @@ +import { datasource } from "../../../shared/infra/typeorm"; +import { Repository } from "typeorm"; +import Country from "../infra/typeorm/entities/Country"; +import { ICreateCountryDTO } from "../dto/ICreateCountryDto"; +import { ICountryRepository } from "./ICountry"; + +class CountryRepository implements ICountryRepository { + private repository: Repository; + + constructor() { + this.repository = datasource.getRepository(Country); + } + + async create({ id, name, flag_url }: ICreateCountryDTO): Promise { + const country = this.repository.create({ + id, + name, + flag_url, + }); + + await this.repository.save(country); + + return country; + } + + async findByName(name: string): Promise { + return await this.repository.findOne({ where: { name } }); + } +} +export default CountryRepository; diff --git a/src/modules/country/repository/ICountry.ts b/src/modules/country/repository/ICountry.ts new file mode 100644 index 00000000..948f161d --- /dev/null +++ b/src/modules/country/repository/ICountry.ts @@ -0,0 +1,8 @@ +import { ICreateCountryDTO } from "../dto/ICreateCountryDto"; +import Country from "../infra/typeorm/entities/Country"; +interface ICountryRepository { + create(data: ICreateCountryDTO): Promise; + findByName(name: string): Promise; +} + +export { ICountryRepository }; diff --git a/src/modules/country/repository/inMemory/CreateCountryInMemory.ts b/src/modules/country/repository/inMemory/CreateCountryInMemory.ts new file mode 100644 index 00000000..588aed8c --- /dev/null +++ b/src/modules/country/repository/inMemory/CreateCountryInMemory.ts @@ -0,0 +1,27 @@ +import { ICreateCountryDTO } from "../../dto/ICreateCountryDto"; +import Country from "../../infra/typeorm/entities/Country"; +import { ICountryRepository } from "../ICountry"; + +class CreateCountryRepositoryInMemory implements ICountryRepository { + private countryRepository: Country[] = []; + + async create({ name, flag_url }: ICreateCountryDTO): Promise { + const country = new Country(); + + Object.assign(country, { + name, + flag_url, + }); + + this.countryRepository.push(country); + return country; + } + + async findByName(name: string): Promise { + const country = this.countryRepository.find((find) => find.name === name); + + return country; + } +} + +export { CreateCountryRepositoryInMemory }; diff --git a/src/modules/country/useCase/CreateCountryController.ts b/src/modules/country/useCase/CreateCountryController.ts new file mode 100644 index 00000000..2270bd1a --- /dev/null +++ b/src/modules/country/useCase/CreateCountryController.ts @@ -0,0 +1,22 @@ +import { Request, Response } from "express"; +import { container } from "tsyringe"; +import CreateCountryUseCase from "./CreateCountryUseCase"; + +class CreateCountryController { + async handle(request: Request, response: Response): Promise { + const { name, flag_url } = request.body; + const { id } = request.params; + + const createCountryUsecase = container.resolve(CreateCountryUseCase); + + const country = await createCountryUsecase.execute({ + id, + name, + flag_url, + }); + + return response.status(201).json(country); + } +} + +export default CreateCountryController; diff --git a/src/modules/country/useCase/CreateCountryInMemory.spec.ts b/src/modules/country/useCase/CreateCountryInMemory.spec.ts new file mode 100644 index 00000000..e0afe279 --- /dev/null +++ b/src/modules/country/useCase/CreateCountryInMemory.spec.ts @@ -0,0 +1,47 @@ +import CreateCountryUseCase from "./CreateCountryUseCase"; +import { AppError } from "../../../shared/Error/AppError"; +import { CreateCountryRepositoryInMemory } from "../repository/inMemory/CreateCountryInMemory"; + +let createCountry: CreateCountryUseCase; +let createCountryRepositoryInMemory: CreateCountryRepositoryInMemory; + +describe("Unit test create Country", () => { + beforeEach(() => { + createCountryRepositoryInMemory = new CreateCountryRepositoryInMemory(); + createCountry = new CreateCountryUseCase(createCountryRepositoryInMemory); + }); + + it("should be to create a new country", async () => { + const country = { + name: "Country's test", + flag_url: "http://exemple.flag.png", + }; + await createCountry.execute({ + name: country.name, + flag_url: country.flag_url, + }); + + const countryCreated = await createCountryRepositoryInMemory.findByName( + country.name + ); + + expect(countryCreated).toHaveProperty("id"); + }); + + it("should not be to create a new country with same name", async () => { + expect(async () => { + const country = { + name: "country's test", + flag_url: "http://exemple.flag.png", + }; + await createCountry.execute({ + name: country.name, + flag_url: country.flag_url, + }); + await createCountry.execute({ + name: country.name, + flag_url: country.flag_url, + }); + }).rejects.toBeInstanceOf(AppError); + }); +}); diff --git a/src/modules/country/useCase/CreateCountryUseCase.ts b/src/modules/country/useCase/CreateCountryUseCase.ts new file mode 100644 index 00000000..62a17569 --- /dev/null +++ b/src/modules/country/useCase/CreateCountryUseCase.ts @@ -0,0 +1,32 @@ +import "reflect-metadata"; +import { inject, injectable } from "tsyringe"; +import Country from "../infra/typeorm/entities/Country"; +import { AppError } from "../../../shared/Error/AppError"; +import { ICreateCountryDTO } from "../dto/ICreateCountryDto"; +import { ICountryRepository } from "../repository/ICountry"; + +@injectable() +class CreateCountryUseCase { + constructor( + @inject("CountryRepository") + private countryRepository: ICountryRepository + ) {} + + async execute({ id, name, flag_url }: ICreateCountryDTO): Promise { + const countryExists = await this.countryRepository.findByName(name); + + if (countryExists) { + throw new AppError("Country already exists!"); + } + + const country = await this.countryRepository.create({ + id, + name, + flag_url, + }); + + return country; + } +} + +export default CreateCountryUseCase; diff --git a/src/modules/places/dto/ICreatePlaceDTO.ts b/src/modules/places/dto/ICreatePlaceDTO.ts new file mode 100644 index 00000000..38a37087 --- /dev/null +++ b/src/modules/places/dto/ICreatePlaceDTO.ts @@ -0,0 +1,8 @@ +interface ICreatePlaceDTO { + id?: string; + name: string; + goal: string; + country_id?: string; +} + +export { ICreatePlaceDTO }; diff --git a/src/modules/places/infra/typeorm/entities/Place.ts b/src/modules/places/infra/typeorm/entities/Place.ts new file mode 100644 index 00000000..14fd78eb --- /dev/null +++ b/src/modules/places/infra/typeorm/entities/Place.ts @@ -0,0 +1,42 @@ +import Country from "../../../../country/infra/typeorm/entities/Country"; +import { v4 as uuidV4 } from "uuid"; +import { + Column, + CreateDateColumn, + Entity, + JoinColumn, + ManyToOne, + PrimaryColumn, + Unique, + UpdateDateColumn, +} from "typeorm"; + +@Entity("places") +export class Place { + @PrimaryColumn() + id: string; + + @ManyToOne(() => Country, (country) => country.id) + @JoinColumn({ name: "country_id" }) + country: Country; + + @Column() + name: string; + + @Column() + goal: string; + + @CreateDateColumn() + created_at: Date; + + @UpdateDateColumn() + updated_at: Date; + + constructor() { + if (!this.id) { + this.id = uuidV4(); + } + } +} + +export default Place; diff --git a/src/modules/places/repository/IPlacle.ts b/src/modules/places/repository/IPlacle.ts new file mode 100644 index 00000000..458c9c37 --- /dev/null +++ b/src/modules/places/repository/IPlacle.ts @@ -0,0 +1,12 @@ +import { ICreatePlaceDTO } from "../dto/ICreatePlaceDTO"; +import Place from "../infra/typeorm/entities/Place"; +interface IPlaceRepository { + create(data: ICreatePlaceDTO): Promise; + findName(name: string): Promise; + findById(id: string): Promise; + findAll(): Promise; + update(data): Promise; + delete(id: string): Promise; +} + +export { IPlaceRepository }; diff --git a/src/modules/places/repository/PlaceRepository.ts b/src/modules/places/repository/PlaceRepository.ts new file mode 100644 index 00000000..0181fce1 --- /dev/null +++ b/src/modules/places/repository/PlaceRepository.ts @@ -0,0 +1,73 @@ +import { datasource } from "../../../shared/infra/typeorm"; +import { Repository } from "typeorm"; +import Place from "../infra/typeorm/entities/Place"; +import Country from "../../country/infra/typeorm/entities/Country"; +import { ICreatePlaceDTO } from "../dto/ICreatePlaceDTO"; +import { IPlaceRepository } from "./IPlacle"; + +class PlaceRepository implements IPlaceRepository { + private repository: Repository; + private countryRepository: Repository; + constructor() { + this.repository = datasource.getRepository(Place); + this.countryRepository = datasource.getRepository(Country); + } + + async create({ name, goal, country_id }: ICreatePlaceDTO): Promise { + const country = await this.countryRepository.findOneOrFail({ + where: { id: country_id }, + }); + const place = this.repository.create({ + country, + name, + goal, + }); + await this.repository.save(place); + + return place; + } + + async findAll(): Promise { + const place = await this.repository.find({ + order: { + goal: "ASC", + }, + }); + return place; + } + + async findName(name: string): Promise { + const place = await this.repository.findOne({ + where: { name: name }, + }); + + return place; + } + async findByNameAndCountryId( + name: string, + country_id: string + ): Promise { + const places = await this.repository.find({ + where: { name: name, country: { id: country_id } }, + }); + return places; + } + + async update({ id, name, goal }: ICreatePlaceDTO): Promise { + const place = await this.repository.findOne({ where: { id } }); + place.name = name; + place.goal = goal; + + return await this.repository.save(place); + } + + async findById(id: string): Promise { + return await this.repository.findOne({ where: { id } }); + } + + async delete(id: string): Promise { + await this.repository.delete(id); + } +} + +export default PlaceRepository; diff --git a/src/modules/places/repository/inMemory/CreatePlaceRepositoryInMemory.ts b/src/modules/places/repository/inMemory/CreatePlaceRepositoryInMemory.ts new file mode 100644 index 00000000..615fe559 --- /dev/null +++ b/src/modules/places/repository/inMemory/CreatePlaceRepositoryInMemory.ts @@ -0,0 +1,62 @@ +import { ICreatePlaceDTO } from "../../dto/ICreatePlaceDTO"; +import Place from "../../infra/typeorm/entities/Place"; +import { IPlaceRepository } from "../IPlacle"; + +class CreatePlaceRepositoryInMemory implements IPlaceRepository { + private placeRepository: Place[] = []; + + async create({ name, goal, country_id }: ICreatePlaceDTO): Promise { + const place = new Place(); + + Object.assign(place, { + name, + goal, + country_id, + }); + + this.placeRepository.push(place); + return place; + } + + async findById(id: string): Promise { + const place = this.placeRepository.find((find) => find.id === id); + return place; + } + async findName(name: string): Promise { + const Place = this.placeRepository.find((find) => find.name === name); + + return Place; + } + async findAll(): Promise { + const places = this.placeRepository.map((place) => ({ + ...place, + id: place.id.toString(), // converte o UUID para string + })); + + // ordena o array de lugares + places.sort((a, b) => a.goal.localeCompare(b.goal)); + + return places; + } + + async update(data: ICreatePlaceDTO): Promise { + const update = this.placeRepository.find((find) => find.id === data.id); + Object.assign(update, { + name: data.name, + goal: data.goal, + }); + + this.placeRepository.push(update); + + return update; + } + + async delete(id: string): Promise { + const deleted = this.placeRepository.findIndex((place) => place.id === id); + if (deleted >= 0) { + this.placeRepository.slice(deleted, 1); + } + } +} + +export { CreatePlaceRepositoryInMemory }; diff --git a/src/modules/places/useCases/create/CreatePlaceRepository.spec.ts b/src/modules/places/useCases/create/CreatePlaceRepository.spec.ts new file mode 100644 index 00000000..f83bb9d0 --- /dev/null +++ b/src/modules/places/useCases/create/CreatePlaceRepository.spec.ts @@ -0,0 +1,54 @@ +import { PlaceUseCase } from "./PlaceUseCase"; +import { AppError } from "../../../../shared/Error/AppError"; +import { CreatePlaceRepositoryInMemory } from "../../repository/inMemory/CreatePlaceRepositoryInMemory"; + +let createPlace: PlaceUseCase; +let createPlaceRepositoryInMemory: CreatePlaceRepositoryInMemory; + +describe("Unit test create Place", () => { + beforeEach(() => { + createPlaceRepositoryInMemory = new CreatePlaceRepositoryInMemory(); + createPlace = new PlaceUseCase(createPlaceRepositoryInMemory); + }); + + it("should be to create a new Place", async () => { + const place = { + name: "place's test", + goal: "02/2024", + country_id: "123456798", + }; + + await createPlace.execute({ + name: place.name, + goal: place.goal, + country_id: place.country_id, + }); + + const placeCreated = await createPlaceRepositoryInMemory.findName( + place.name + ); + + expect(placeCreated).toHaveProperty("id"); + }); + + it("should not be to create a place with the same name already exists in this country", async () => { + expect(async () => { + const place = { + name: "place's test", + goal: "02/2024", + country_id: "123456798", + }; + + await createPlace.execute({ + name: place.name, + goal: place.goal, + country_id: place.country_id, + }); + await createPlace.execute({ + name: place.name, + goal: place.goal, + country_id: place.country_id, + }); + }).rejects.toBeInstanceOf(AppError); + }); +}); diff --git a/src/modules/places/useCases/create/PlaceController.ts b/src/modules/places/useCases/create/PlaceController.ts new file mode 100644 index 00000000..a8152c96 --- /dev/null +++ b/src/modules/places/useCases/create/PlaceController.ts @@ -0,0 +1,21 @@ +import { Request, Response } from "express"; +import { container } from "tsyringe"; +import { PlaceUseCase } from "./PlaceUseCase"; + +class PlaceController { + async handle(request: Request, response: Response): Promise { + const { name, goal, country_id } = request.body; + + const placeUsecase = container.resolve(PlaceUseCase); + + const place = await placeUsecase.execute({ + country_id, + name, + goal, + }); + + return response.status(201).json(place); + } +} + +export default PlaceController; diff --git a/src/modules/places/useCases/create/PlaceUseCase.ts b/src/modules/places/useCases/create/PlaceUseCase.ts new file mode 100644 index 00000000..5a0066ea --- /dev/null +++ b/src/modules/places/useCases/create/PlaceUseCase.ts @@ -0,0 +1,46 @@ +import "reflect-metadata"; +import { inject, injectable } from "tsyringe"; +import Place from "../../infra/typeorm/entities/Place"; +import { AppError } from "../../../../shared/Error/AppError"; +import { ICreatePlaceDTO } from "../../dto/ICreatePlaceDTO"; +import { IPlaceRepository } from "../../repository/IPlacle"; +import { formatGoalDate } from "../../../../shared/utils/formatGoal"; + +@injectable() +class PlaceUseCase { + constructor( + @inject("PlaceRepository") + private placeRepository: IPlaceRepository + ) {} + + async execute({ + id, + goal, + name, + country_id, + }: ICreatePlaceDTO): Promise { + try { + const placeExists = await this.placeRepository.findName(name); + + if (placeExists) { + throw new AppError( + "A place with the same name already exists in this country!" + ); + } + + const formatDate = formatGoalDate(goal); + + const place = await this.placeRepository.create({ + country_id, + name, + goal: formatDate, + }); + + return place; + } catch (error) { + throw new AppError(error); + } + } +} + +export { PlaceUseCase }; diff --git a/src/modules/places/useCases/delete/DaletePlaceUseCase.ts b/src/modules/places/useCases/delete/DaletePlaceUseCase.ts new file mode 100644 index 00000000..bd398660 --- /dev/null +++ b/src/modules/places/useCases/delete/DaletePlaceUseCase.ts @@ -0,0 +1,29 @@ +import "reflect-metadata"; +import { inject, injectable } from "tsyringe"; +import Place from "../../infra/typeorm/entities/Place"; +import { AppError } from "../../../../shared/Error/AppError"; +import { IPlaceRepository } from "../../repository/IPlacle"; + +@injectable() +class DaletePlaceUseCase { + constructor( + @inject("DeletePlaceRepository") + private placeRepository: IPlaceRepository + ) {} + + async execute(id: string): Promise { + try { + const placeExists = await this.placeRepository.findById(id); + + if (!placeExists) { + throw new AppError("place not found!"); + } + + await this.placeRepository.delete(id); + } catch (error) { + throw new AppError(error); + } + } +} + +export { DaletePlaceUseCase }; diff --git a/src/modules/places/useCases/delete/DeletePlace.spec.ts b/src/modules/places/useCases/delete/DeletePlace.spec.ts new file mode 100644 index 00000000..a359bf03 --- /dev/null +++ b/src/modules/places/useCases/delete/DeletePlace.spec.ts @@ -0,0 +1,34 @@ +import { DaletePlaceUseCase } from "./DaletePlaceUseCase"; +import { AppError } from "../../../../shared/Error/AppError"; +import { CreatePlaceRepositoryInMemory } from "../../repository/inMemory/CreatePlaceRepositoryInMemory"; + +let deletePlaceUseCase: DaletePlaceUseCase; +let createPlaceRepositoryInMemory: CreatePlaceRepositoryInMemory; + +describe("Unit Test delete Place", () => { + beforeEach(() => { + createPlaceRepositoryInMemory = new CreatePlaceRepositoryInMemory(); + deletePlaceUseCase = new DaletePlaceUseCase(createPlaceRepositoryInMemory); + }); + DaletePlaceUseCase; + + it("should be able to delete place", async () => { + const data = { + name: "place's test", + goal: "02/2024", + country_id: "123456798", + }; + + const place = await createPlaceRepositoryInMemory.create(data); + + const placeDeleted = await deletePlaceUseCase.execute(place.id); + + expect(placeDeleted).toBe(placeDeleted); + }); + + it("should not be able to delete a non-existing place", async () => { + await expect( + deletePlaceUseCase.execute("non-existing-id") + ).rejects.toBeInstanceOf(AppError); + }); +}); diff --git a/src/modules/places/useCases/delete/DeletePlaceController.ts b/src/modules/places/useCases/delete/DeletePlaceController.ts new file mode 100644 index 00000000..657f7573 --- /dev/null +++ b/src/modules/places/useCases/delete/DeletePlaceController.ts @@ -0,0 +1,17 @@ +import { Request, Response } from "express"; +import { container } from "tsyringe"; +import { DaletePlaceUseCase } from "./DaletePlaceUseCase"; + +class DeletePlaceController { + async handle(request: Request, response: Response): Promise { + const { id } = request.params; + + const deletePlaceUseCase = container.resolve(DaletePlaceUseCase); + + await deletePlaceUseCase.execute(id); + + return response.status(201).send({ message: "Place was deleted!" }); + } +} + +export { DeletePlaceController }; diff --git a/src/modules/places/useCases/listByGoal/ListPlaceByGoal.spec.ts b/src/modules/places/useCases/listByGoal/ListPlaceByGoal.spec.ts new file mode 100644 index 00000000..947625c8 --- /dev/null +++ b/src/modules/places/useCases/listByGoal/ListPlaceByGoal.spec.ts @@ -0,0 +1,41 @@ +import { ListPlaceByGoalUseCase } from "./ListPlaceByGoalUseCase"; +import { AppError } from "../../../../shared/Error/AppError"; +import { CreatePlaceRepositoryInMemory } from "../../repository/inMemory/CreatePlaceRepositoryInMemory"; + +let listPlaceByGoalUseCase: ListPlaceByGoalUseCase; +let createPlaceRepositoryInMemory: CreatePlaceRepositoryInMemory; + +describe("Unit test list all Goal", () => { + beforeEach(() => { + createPlaceRepositoryInMemory = new CreatePlaceRepositoryInMemory(); + listPlaceByGoalUseCase = new ListPlaceByGoalUseCase( + createPlaceRepositoryInMemory + ); + }); + + it("should be to ASCENDING ORDER", async () => { + const place1 = { + name: "place's test", + goal: "02/2024", + country_id: "123456798", + }; + const place2 = { + name: "place's test", + goal: "06/2024", + country_id: "123456", + }; + const place3 = { + name: "place's test", + goal: "10/2024", + country_id: "123456", + }; + + const placeCreated = await createPlaceRepositoryInMemory.create(place1); + const placeCreated2 = await createPlaceRepositoryInMemory.create(place2); + const placeCreated3 = await createPlaceRepositoryInMemory.create(place3); + + const places = await listPlaceByGoalUseCase.execute(); + + expect(places).toEqual([placeCreated, placeCreated2, placeCreated3]); + }); +}); diff --git a/src/modules/places/useCases/listByGoal/ListPlaceByGoalController.ts b/src/modules/places/useCases/listByGoal/ListPlaceByGoalController.ts new file mode 100644 index 00000000..a31286c0 --- /dev/null +++ b/src/modules/places/useCases/listByGoal/ListPlaceByGoalController.ts @@ -0,0 +1,14 @@ +import { Request, Response } from "express"; +import { container } from "tsyringe"; +import { ListPlaceByGoalUseCase } from "./ListPlaceByGoalUseCase"; + +class ListPlaceByGoalController { + async handle(request: Request, response: Response): Promise { + const listPlaceGoalByUseCase = container.resolve(ListPlaceByGoalUseCase); + + const places = await listPlaceGoalByUseCase.execute(); + return response.status(201).json(places); + } +} + +export default ListPlaceByGoalController; diff --git a/src/modules/places/useCases/listByGoal/ListPlaceByGoalUseCase.ts b/src/modules/places/useCases/listByGoal/ListPlaceByGoalUseCase.ts new file mode 100644 index 00000000..b09c9fb3 --- /dev/null +++ b/src/modules/places/useCases/listByGoal/ListPlaceByGoalUseCase.ts @@ -0,0 +1,17 @@ +import "reflect-metadata"; +import { inject, injectable } from "tsyringe"; +import Place from "../../infra/typeorm/entities/Place"; +import { IPlaceRepository } from "../../repository/IPlacle"; + +@injectable() +class ListPlaceByGoalUseCase { + constructor( + @inject("listPlaceRepository") + private placeRepository: IPlaceRepository + ) {} + + async execute(): Promise { + return await this.placeRepository.findAll(); + } +} +export { ListPlaceByGoalUseCase }; diff --git a/src/modules/places/useCases/updatePlace/UpdatePlace.spec.ts b/src/modules/places/useCases/updatePlace/UpdatePlace.spec.ts new file mode 100644 index 00000000..c424a8b3 --- /dev/null +++ b/src/modules/places/useCases/updatePlace/UpdatePlace.spec.ts @@ -0,0 +1,53 @@ +import { AppError } from "../../../../shared/Error/AppError"; +import { CreatePlaceRepositoryInMemory } from "../../repository/inMemory/CreatePlaceRepositoryInMemory"; +import { UpdatePlaceUseCase } from "./UpdatePlaceUseCase"; + +let upadatePlaceUseCase: UpdatePlaceUseCase; +let createPlaceRespository: CreatePlaceRepositoryInMemory; + +describe("Unit test Update Place", () => { + beforeEach(() => { + createPlaceRespository = new CreatePlaceRepositoryInMemory(); + upadatePlaceUseCase = new UpdatePlaceUseCase(createPlaceRespository); + }); + + it("Should able update a place or goal ", async () => { + const place = { + name: "place's test", + goal: "02/2024", + country_id: "123456798", + }; + await createPlaceRespository.create({ + name: place.name, + goal: place.goal, + country_id: place.country_id, + }); + + const updatedPlaceData = { + name: "new place name", + goal: "03/2025", + }; + + const placeUpdated = await upadatePlaceUseCase.execute({ + name: updatedPlaceData.name, + goal: updatedPlaceData.goal, + }); + + const updatedPlace = await createPlaceRespository.findById(placeUpdated.id); + + expect(updatedPlace.name).toBe(updatedPlaceData.name); + expect(updatedPlace.goal).toBe(updatedPlaceData.goal); + }); + + it("Should throw an error if place does not exist", async () => { + try { + await upadatePlaceUseCase.execute({ + id: "non-existing-id", + name: "new name", + goal: "01/2025", + }); + } catch (error) { + expect(error).toBeInstanceOf(AppError); + } + }); +}); diff --git a/src/modules/places/useCases/updatePlace/UpdatePlaceController.ts b/src/modules/places/useCases/updatePlace/UpdatePlaceController.ts new file mode 100644 index 00000000..8a4f331a --- /dev/null +++ b/src/modules/places/useCases/updatePlace/UpdatePlaceController.ts @@ -0,0 +1,23 @@ +import { Request, Response } from "express"; +import { container } from "tsyringe"; +import { UpdatePlaceUseCase } from "./UpdatePlaceUseCase"; + +class UpdatePlaceController { + async handle(request: Request, response: Response): Promise { + const { name, goal, country_id } = request.body; + const { id } = request.params; + + const placeUsecase = container.resolve(UpdatePlaceUseCase); + + const update = await placeUsecase.execute({ + id: id, + country_id, + name, + goal, + }); + + return response.status(201).json(update); + } +} + +export default UpdatePlaceController; diff --git a/src/modules/places/useCases/updatePlace/UpdatePlaceUseCase.ts b/src/modules/places/useCases/updatePlace/UpdatePlaceUseCase.ts new file mode 100644 index 00000000..5ffa14b0 --- /dev/null +++ b/src/modules/places/useCases/updatePlace/UpdatePlaceUseCase.ts @@ -0,0 +1,37 @@ +import "reflect-metadata"; +import { inject, injectable } from "tsyringe"; +import Place from "../../infra/typeorm/entities/Place"; +import { AppError } from "../../../../shared/Error/AppError"; +import { ICreatePlaceDTO } from "../../../places/dto/ICreatePlaceDTO"; +import { IPlaceRepository } from "../../../places/repository/IPlacle"; +import { formatGoalDate } from "../../../../shared/utils/formatGoal"; + +@injectable() +class UpdatePlaceUseCase { + constructor( + @inject("UpdateRepository") + private placeRepository: IPlaceRepository + ) {} + + async execute({ id, name, goal }: ICreatePlaceDTO): Promise { + try { + const place = await this.placeRepository.findById(id); + + if (!place) { + throw new AppError("Place not found!"); + } + + const formatDate = formatGoalDate(goal); + + const update = await this.placeRepository.update({ + name, + goal: formatDate, + }); + + return update; + } catch (error) { + throw new AppError(error); + } + } +} +export { UpdatePlaceUseCase }; diff --git a/src/shared/Error/AppError.ts b/src/shared/Error/AppError.ts new file mode 100644 index 00000000..fa449e33 --- /dev/null +++ b/src/shared/Error/AppError.ts @@ -0,0 +1,9 @@ +export class AppError { + public readonly message: string; + public readonly statusCode: number; + + constructor(message: string, statusCode = 400) { + this.message = message; + this.statusCode = statusCode; + } +} diff --git a/src/shared/container/index.ts b/src/shared/container/index.ts new file mode 100644 index 00000000..d39db1ad --- /dev/null +++ b/src/shared/container/index.ts @@ -0,0 +1,31 @@ +import "reflect-metadata"; +import { container } from "tsyringe"; +import { ICountryRepository } from "../../modules/country/repository/ICountry"; +import CountryRepository from "../../modules/country/repository/CountryRepository"; +import { IPlaceRepository } from "../../modules/places/repository/IPlacle"; +import PlaceRepository from "../../modules/places/repository/PlaceRepository"; + +container.registerSingleton( + "CountryRepository", + CountryRepository +); + +container.registerSingleton( + "PlaceRepository", + PlaceRepository +); + +container.registerSingleton( + "listPlaceRepository", + PlaceRepository +); + +container.registerSingleton( + "UpdateRepository", + PlaceRepository +); + +container.registerSingleton( + "DeletePlaceRepository", + PlaceRepository +); diff --git a/src/shared/infra/http/app.ts b/src/shared/infra/http/app.ts new file mode 100644 index 00000000..fdd65780 --- /dev/null +++ b/src/shared/infra/http/app.ts @@ -0,0 +1,28 @@ +import "reflect-metadata"; +import express, { Request, Response, NextFunction } from "express"; +import "express-async-errors"; +import { router } from "../routes"; +import { AppError } from "../../Error/AppError"; + +const app = express(); + +app.use(express.json()); + +app.use(router); + +app.use( + (err: Error, request: Request, response: Response, next: NextFunction) => { + if (err instanceof AppError) { + return response.status(Number(err.statusCode)).json({ + message: err.message, + }); + } + + return response.status(500).json({ + status: "error", + message: `internal error - ${err.message}`, + }); + } +); + +export { app }; diff --git a/src/shared/infra/http/server.ts b/src/shared/infra/http/server.ts new file mode 100644 index 00000000..c201a02b --- /dev/null +++ b/src/shared/infra/http/server.ts @@ -0,0 +1,13 @@ +import { app } from "./app"; +import { datasource } from "../typeorm"; +import "../../../shared/container"; + +const Port = 3333; + +datasource.initialize().then(() => { + app.listen(`${Port}`, () => { + return console.log(`Server started on port ${Port}! 🏆`); + }); +}); + +export default app; diff --git a/src/shared/infra/routes/country.routes.ts b/src/shared/infra/routes/country.routes.ts new file mode 100644 index 00000000..355b11e6 --- /dev/null +++ b/src/shared/infra/routes/country.routes.ts @@ -0,0 +1,9 @@ +import { Router } from "express"; + +import CreateCountryController from "../../../modules/country/useCase/CreateCountryController"; +const countryRouter = Router(); + +const createCountryController = new CreateCountryController(); +countryRouter.post("/", createCountryController.handle); + +export default countryRouter; diff --git a/src/shared/infra/routes/index.ts b/src/shared/infra/routes/index.ts new file mode 100644 index 00000000..2eff9483 --- /dev/null +++ b/src/shared/infra/routes/index.ts @@ -0,0 +1,11 @@ +import { Router } from "express"; + +import countryRoutes from "./country.routes"; +import { placeRouter } from "./place.routes"; + +const router = Router(); +router.use("/country", countryRoutes); +router.use("/place", placeRouter); +router.use("/", placeRouter); + +export { router }; diff --git a/src/shared/infra/routes/place.routes.ts b/src/shared/infra/routes/place.routes.ts new file mode 100644 index 00000000..8afc64e3 --- /dev/null +++ b/src/shared/infra/routes/place.routes.ts @@ -0,0 +1,20 @@ +import { Router } from "express"; + +import PlaceController from "../../../modules/places/useCases/create/PlaceController"; +import ListPlaceByGoalController from "../../../modules/places/useCases/listByGoal/ListPlaceByGoalController"; +import UpdatePlaceController from "../../../modules/places/useCases/updatePlace/UpdatePlaceController"; +import { DeletePlaceController } from "../../../modules/places/useCases/delete/DeletePlaceController"; + +const placeRouter = Router(); + +const placeController = new PlaceController(); +const listByGoalCrontroller = new ListPlaceByGoalController(); +const updatePlaceController = new UpdatePlaceController(); +const deletePlaceController = new DeletePlaceController(); + +placeRouter.post("/", placeController.handle); +placeRouter.get("", listByGoalCrontroller.handle); +placeRouter.patch("/update/:id", updatePlaceController.handle); +placeRouter.delete("/delete/:id", deletePlaceController.handle); + +export { placeRouter }; diff --git a/src/shared/infra/typeorm/index.ts b/src/shared/infra/typeorm/index.ts new file mode 100644 index 00000000..bf82f9bf --- /dev/null +++ b/src/shared/infra/typeorm/index.ts @@ -0,0 +1,16 @@ +import { DataSource } from "typeorm"; +import Country from "../../../modules/country/infra/typeorm/entities/Country"; +import Place from "../../../modules/places/infra/typeorm/entities/Place"; +import { Country1682615091268 } from "./migrations/1682615091268-Country"; +import { Place1682616036653 } from "./migrations/1682616036653-Place"; + +export const datasource = new DataSource({ + type: "postgres", + host: "192.168.99.100", + port: 5432, + username: "postgres", + password: "password", + database: "API", + migrations: [Country1682615091268, Place1682616036653], + entities: [Country, Place], +}); diff --git a/src/shared/infra/typeorm/migrations/1682615091268-Country.ts b/src/shared/infra/typeorm/migrations/1682615091268-Country.ts new file mode 100644 index 00000000..fe3984a0 --- /dev/null +++ b/src/shared/infra/typeorm/migrations/1682615091268-Country.ts @@ -0,0 +1,31 @@ +import { MigrationInterface, QueryRunner, Table } from "typeorm"; + +export class Country1682615091268 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: "country", + + columns: [ + { + name: "id", + type: "uuid", + isPrimary: true, + }, + { + name: "name", + type: "varchar", + }, + { + name: "flag_url", + type: "varchar", + }, + ], + }) + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable("country"); + } +} diff --git a/src/shared/infra/typeorm/migrations/1682616036653-Place.ts b/src/shared/infra/typeorm/migrations/1682616036653-Place.ts new file mode 100644 index 00000000..a9dc6e6e --- /dev/null +++ b/src/shared/infra/typeorm/migrations/1682616036653-Place.ts @@ -0,0 +1,58 @@ +import { MigrationInterface, QueryRunner, Table } from "typeorm"; + +export class Place1682616036653 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: "places", + + columns: [ + { + name: "id", + type: "uuid", + isPrimary: true, + }, + { + name: "name", + type: "varchar", + }, + { + name: "goal", + type: "varchar", + }, + { + name: "country_id", + type: "uuid", + }, + { + name: "created_at", + type: "timestamp", + default: "now()", + }, + { + name: "updated_at", + type: "timestamp", + default: "now()", + }, + ], + foreignKeys: [ + { + name: "FK_Country", + //Referenciando a tabela da chave estrangeira + referencedTableName: "country", + //Referenciando a coluna + referencedColumnNames: ["id"], + //Referenciando a nome da coluna + columnNames: ["country_id"], + onDelete: "SET NULL", + onUpdate: "SET NULL", + }, + ], + }) + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable("places"); + } +} diff --git a/src/shared/utils/formatGoal.ts b/src/shared/utils/formatGoal.ts new file mode 100644 index 00000000..12d26ee0 --- /dev/null +++ b/src/shared/utils/formatGoal.ts @@ -0,0 +1,10 @@ +import dayjs from "dayjs"; +import "dayjs/locale/pt-br"; +import customParseFormat from "dayjs/plugin/customParseFormat"; + +dayjs.extend(customParseFormat); + +export function formatGoalDate(goal: string): string { + const parsedDate = dayjs(goal, "DD/MM/YYYY", true); + return parsedDate.format("MM/YYYY"); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..f64e3a15 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,109 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + //"strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/yarn-error.log b/yarn-error.log new file mode 100644 index 00000000..9e406ff8 --- /dev/null +++ b/yarn-error.log @@ -0,0 +1,1370 @@ +Arguments: + C:\Program Files\nodejs\node.exe C:\Program Files (x86)\Yarn\bin\yarn.js add jest @types/jest + +PATH: + C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Users\fagne\bin;C:\Python310\Scripts;C:\Python310;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Python27;C:\Python27\Scripts;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS;C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\ProgramData\chocolatey\bin;C:\Program Files (x86)\Yarn\bin;%ANDROID_HOME%\emulator;%ANDROID_HOME%\tools;%ANDROID_HOME%\tools\bin;%ANDROID_HOME%\platform-tools;C:\Program Files\Git\cmd;C:\Program Files\nodejs;C:\Program Files\Docker\Docker\resources\bin;C:\Users\fagne\AppData\Local\Microsoft\WindowsApps;C:\Users\fagne\AppData\Local\Microsoft\WindowsApps;C:\Users\fagne\AppData\Local\Yarn\bin;C:\Users\fagne\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\Docker Toolbox;C:\Users\fagne\AppData\Roaming\npm;C:\ProgramData\chocolatey\lib\deno;C:\Program Files\Docker Toolbox + +Yarn version: + 1.22.4 + +Node version: + 16.14.0 + +Platform: + win32 x64 + +Trace: + Error: EBUSY: resource busy or locked, unlink 'C:\Users\fagne\Documents\backend-challenge\node_modules\.bin\ts-node-dev' + +npm manifest: + { + "name": "backend-challenge", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "scripts": { + "dev": "ts-node-dev --inspect --transpile-only --ignore-watch node_modules --respawn src/shared/infra/http/server.ts", + "typeorm": "ts-node-dev ./node_modules/typeorm/cli" + }, + "dependencies": { + "@types/express": "^4.17.17", + "@types/uuid": "^9.0.1", + "dayjs": "^1.11.7", + "express": "^4.18.2", + "express-async-errors": "^3.1.1", + "pg": "^8.10.0", + "reflect-metadata": "^0.1.13", + "ts-node-dev": "^2.0.0", + "tsyringe": "^4.7.0", + "typeorm": "^0.3.15", + "typescript": "^5.0.4", + "uuid": "^9.0.0" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + + "@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + + "@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + + "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + + "@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + + "@sqltools/formatter@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" + integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== + + "@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + + "@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + + "@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + + "@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + + "@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + + "@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + + "@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + + "@types/express@^4.17.17": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + + "@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + + "@types/node@*": + version "18.16.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.0.tgz#4668bc392bb6938637b47e98b1f2ed5426f33316" + integrity sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ== + + "@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + + "@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + + "@types/serve-static@*": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + + "@types/strip-bom@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" + integrity sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== + + "@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + + "@types/uuid@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.1.tgz#98586dc36aee8dacc98cc396dbca8d0429647aa6" + integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== + + accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + + acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + + acorn@^8.4.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + + ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + + ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + + any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + + anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + + app-root-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + + arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + + array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + + balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + + base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + + binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + + body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + 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.1" + type-is "~1.6.18" + unpipe "1.0.0" + + brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + + brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + + braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + + buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + + buffer-writer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + + buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + + bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + + call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + + chalk@^4.0.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + + chokidar@^3.5.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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" + optionalDependencies: + fsevents "~2.3.2" + + cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + 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" + + cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + + cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + 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" + + color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + + color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + + concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + + content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + + content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + + cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + + cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + + create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + + dayjs@^1.11.7: + version "1.11.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + + debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + + debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + + depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + + destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + + diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + + dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + + dynamic-dedupe@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" + integrity sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ== + dependencies: + xtend "^4.0.0" + + ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + + emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + + encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + + escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + + escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + + etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + + express-async-errors@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/express-async-errors/-/express-async-errors-3.1.1.tgz#6053236d61d21ddef4892d6bd1d736889fc9da41" + integrity sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng== + + express@^4.18.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.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" + + fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + + finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + 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" + + forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + + fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + + fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + + fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + + function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + + get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + + get-intrinsic@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + + glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + + glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + + glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + + has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + + has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + + has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + + highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + + http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + 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" + + iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + + ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + + inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + + inherits@2, inherits@2.0.4, inherits@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + + ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + + is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + + is-core-module@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== + dependencies: + has "^1.0.3" + + is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + + is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + + is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + + is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + + make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + + media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + + merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + + methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + + mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + + mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + + mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + + minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + + minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + + minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + + mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + + mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + + ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + + ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + + ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + + mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + + negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + + normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + + object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + + object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + + on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + + once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + + packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + + parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + + parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + + parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + + parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + + path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + + path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + + path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + + pg-connection-string@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" + integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== + + pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + + pg-pool@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.0.tgz#3190df3e4747a0d23e5e9e8045bcd99bda0a712e" + integrity sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ== + + pg-protocol@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" + integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== + + pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + 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" + + pg@^8.10.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.10.0.tgz#5b8379c9b4a36451d110fc8cd98fc325fe62ad24" + integrity sha512-ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.5.0" + pg-pool "^3.6.0" + pg-protocol "^1.6.0" + pg-types "^2.1.0" + pgpass "1.x" + + pgpass@1.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + + picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + + postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + + postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + + postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + + postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + + proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + + qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + + range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + + raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + + readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + + reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + + require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + + resolve@^1.0.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + + rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + + safe-buffer@5.2.1, safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + + "safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + + send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + 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" + + serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + + setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + + sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + + side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + + source-map-support@^0.5.12: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + + source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + + split2@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + + statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + 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" + + strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + + strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + + strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + + supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + + supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + + thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + + "thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + + to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + + toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + + tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + + ts-node-dev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-2.0.0.tgz#bdd53e17ab3b5d822ef519928dc6b4a7e0f13065" + integrity sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w== + dependencies: + chokidar "^3.5.1" + dynamic-dedupe "^0.3.0" + minimist "^1.2.6" + mkdirp "^1.0.4" + resolve "^1.0.0" + rimraf "^2.6.1" + source-map-support "^0.5.12" + tree-kill "^1.2.2" + ts-node "^10.4.0" + tsconfig "^7.0.0" + + ts-node@^10.4.0: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + 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" + + tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + + tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + + tslib@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + + tsyringe@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.7.0.tgz#aea0a9d565385deebb6def60cda342b15016f283" + integrity sha512-ncFDM1jTLsok4ejMvSW5jN1VGPQD48y2tfAR0pdptWRKYX4bkbqPt92k7KJ5RFJ1KV36JEs/+TMh7I6OUgj74g== + dependencies: + tslib "^1.9.3" + + type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + + typeorm@^0.3.15: + version "0.3.15" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.15.tgz#8548cba64b746a0eadeab65b18ea21cd31ac7468" + integrity sha512-R4JSw8QjDP1W+ypeRz/XrCXIqubrLSnNAzJAp9EQSQIPHTv+YmUHZis8g08lOwFpuhqL9m8jkPSz8GWEKlU/ow== + 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" + debug "^4.3.4" + dotenv "^16.0.3" + glob "^8.1.0" + mkdirp "^2.1.3" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.5.0" + uuid "^9.0.0" + yargs "^17.6.2" + + typescript@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== + + unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + + utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + + uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + + v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + + vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + + wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + + wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + + xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + + y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + + yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + + yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + + yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + 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" + + yargs@^17.6.2: + version "17.7.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + 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" + + yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..652a7239 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,3184 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.5.tgz#887a54ebe20c9f21edf27caf4ffcf8da6fdd5bd2" + integrity sha512-M+XAiQ7GzQ3FDPf0KOLkugzptnIypt0X0ma0wmlTKPR3IchgNFdx2JXxZdvd18JY5s7QkaFD/qyX0dsMpog/Ug== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.5.tgz#92f753e8b9f96e15d4b398dbe2f25d1408c9c426" + integrity sha512-9M398B/QH5DlfCOTKDZT1ozXr0x8uBEeFd+dJraGUZGiaNpGCDVGCc14hZexsMblw3XxltJ+6kSvogp9J+5a9g== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helpers" "^7.21.5" + "@babel/parser" "^7.21.5" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.21.5", "@babel/generator@^7.7.2": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" + integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== + dependencies: + "@babel/types" "^7.21.5" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" + integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== + dependencies: + "@babel/compat-data" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" + integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== + +"@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-transforms@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" + integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== + dependencies: + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-simple-access" "^7.21.5" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" + integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== + +"@babel/helper-simple-access@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" + integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" + integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helpers@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" + integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.5.tgz#821bb520118fd25b982eaf8d37421cf5c64a312b" + integrity sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/template@^7.20.7", "@babel/template@^7.3.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.21.5", "@babel/traverse@^7.7.2": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" + integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.5" + "@babel/types" "^7.21.5" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" + integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== + dependencies: + "@babel/helper-string-parser" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + 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" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57" + integrity sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + slash "^3.0.0" + +"@jest/core@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03" + integrity sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ== + dependencies: + "@jest/console" "^29.5.0" + "@jest/reporters" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@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.5.0" + jest-config "^29.5.0" + jest-haste-map "^29.5.0" + jest-message-util "^29.5.0" + jest-regex-util "^29.4.3" + jest-resolve "^29.5.0" + jest-resolve-dependencies "^29.5.0" + jest-runner "^29.5.0" + jest-runtime "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" + jest-watcher "^29.5.0" + micromatch "^4.0.4" + pretty-format "^29.5.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" + integrity sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ== + dependencies: + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + jest-mock "^29.5.0" + +"@jest/expect-utils@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" + integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== + dependencies: + jest-get-type "^29.4.3" + +"@jest/expect@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.5.0.tgz#80952f5316b23c483fbca4363ce822af79c38fba" + integrity sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g== + dependencies: + expect "^29.5.0" + jest-snapshot "^29.5.0" + +"@jest/fake-timers@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" + integrity sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg== + dependencies: + "@jest/types" "^29.5.0" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.5.0" + jest-mock "^29.5.0" + jest-util "^29.5.0" + +"@jest/globals@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298" + integrity sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/expect" "^29.5.0" + "@jest/types" "^29.5.0" + jest-mock "^29.5.0" + +"@jest/reporters@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b" + integrity sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@jridgewell/trace-mapping" "^0.3.15" + "@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 "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + jest-worker "^29.5.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/source-map@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" + integrity sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.15" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408" + integrity sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ== + dependencies: + "@jest/console" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4" + integrity sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ== + dependencies: + "@jest/test-result" "^29.5.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" + slash "^3.0.0" + +"@jest/transform@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" + integrity sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.5.0" + "@jridgewell/trace-mapping" "^0.3.15" + 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.5.0" + jest-regex-util "^29.4.3" + jest-util "^29.5.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.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" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" + integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== + dependencies: + "@sinonjs/commons" "^2.0.0" + +"@sqltools/formatter@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" + integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/babel__core@^7.1.14": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" + integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.5.tgz#c107216842905afafd3b6e774f6f935da6f5db80" + integrity sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q== + dependencies: + "@babel/types" "^7.3.0" + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@^4.17.17": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.5.1": + version "29.5.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.1.tgz#83c818aa9a87da27d6da85d3378e5a34d2f31a47" + integrity sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/node@*": + version "18.16.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.0.tgz#4668bc392bb6938637b47e98b1f2ed5426f33316" + integrity sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ== + +"@types/prettier@^2.1.5": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/serve-static@*": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/strip-bom@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" + integrity sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + +"@types/uuid@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.1.tgz#98586dc36aee8dacc98cc396dbca8d0429647aa6" + integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +app-root-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +babel-jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" + integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q== + dependencies: + "@jest/transform" "^29.5.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.5.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + 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" + +babel-plugin-jest-hoist@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" + integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + 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" + +babel-preset-jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" + integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== + dependencies: + babel-plugin-jest-hoist "^29.5.0" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + 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.1" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.3: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-writer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001449: + version "1.0.30001481" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz#f58a717afe92f9e69d0e35ff64df596bfad93912" + integrity sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +chokidar@^3.5.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + 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" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + 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" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +dayjs@^1.11.7: + version "1.11.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" + integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + +dynamic-dedupe@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" + integrity sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ== + dependencies: + xtend "^4.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.284: + version "1.4.377" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.377.tgz#7f326a0b2c1b96eca6bb65907addc505d0d15989" + integrity sha512-H3BYG6DW5Z+l0xcfXaicJGxrpA4kMlCxnN71+iNX+dBLkRMOdVJqFJiAmbNZZKA1zISpRg17JR03qGifXNsJtw== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + 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" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.0.0, expect@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" + integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== + dependencies: + "@jest/expect-utils" "^29.5.0" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + +express-async-errors@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/express-async-errors/-/express-async-errors-3.1.1.tgz#6053236d61d21ddef4892d6bd1d736889fc9da41" + integrity sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng== + +express@^4.18.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.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" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + 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" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + 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" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + 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" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" + integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317" + integrity sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/expect" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^29.5.0" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-runtime "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" + p-limit "^3.1.0" + pretty-format "^29.5.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67" + integrity sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw== + dependencies: + "@jest/core" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da" + integrity sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.5.0" + "@jest/types" "^29.5.0" + babel-jest "^29.5.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.5.0" + jest-environment-node "^29.5.0" + jest-get-type "^29.4.3" + jest-regex-util "^29.4.3" + jest-resolve "^29.5.0" + jest-runner "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.5.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" + integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.4.3" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + +jest-docblock@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" + integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06" + integrity sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA== + dependencies: + "@jest/types" "^29.5.0" + chalk "^4.0.0" + jest-get-type "^29.4.3" + jest-util "^29.5.0" + pretty-format "^29.5.0" + +jest-environment-node@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" + integrity sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + jest-mock "^29.5.0" + jest-util "^29.5.0" + +jest-get-type@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" + integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== + +jest-haste-map@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" + integrity sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA== + dependencies: + "@jest/types" "^29.5.0" + "@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.4.3" + jest-util "^29.5.0" + jest-worker "^29.5.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" + integrity sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow== + dependencies: + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + +jest-matcher-utils@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" + integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== + dependencies: + chalk "^4.0.0" + jest-diff "^29.5.0" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + +jest-message-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" + integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.5.0" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.5.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" + integrity sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + jest-util "^29.5.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" + integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== + +jest-resolve-dependencies@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" + integrity sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg== + dependencies: + jest-regex-util "^29.4.3" + jest-snapshot "^29.5.0" + +jest-resolve@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc" + integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.5.0" + jest-validate "^29.5.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8" + integrity sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ== + dependencies: + "@jest/console" "^29.5.0" + "@jest/environment" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.4.3" + jest-environment-node "^29.5.0" + jest-haste-map "^29.5.0" + jest-leak-detector "^29.5.0" + jest-message-util "^29.5.0" + jest-resolve "^29.5.0" + jest-runtime "^29.5.0" + jest-util "^29.5.0" + jest-watcher "^29.5.0" + jest-worker "^29.5.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420" + integrity sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/globals" "^29.5.0" + "@jest/source-map" "^29.4.3" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@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.5.0" + jest-message-util "^29.5.0" + jest-mock "^29.5.0" + jest-regex-util "^29.4.3" + jest-resolve "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce" + integrity sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g== + 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/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.5.0" + graceful-fs "^4.2.9" + jest-diff "^29.5.0" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + natural-compare "^1.4.0" + pretty-format "^29.5.0" + semver "^7.3.5" + +jest-util@^29.0.0, jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" + integrity sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ== + dependencies: + "@jest/types" "^29.5.0" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.4.3" + leven "^3.1.0" + pretty-format "^29.5.0" + +jest-watcher@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363" + integrity sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA== + dependencies: + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.5.0" + string-length "^4.0.1" + +jest-worker@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" + integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== + dependencies: + "@types/node" "*" + jest-util "^29.5.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" + integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== + dependencies: + "@jest/core" "^29.5.0" + "@jest/types" "^29.5.0" + import-local "^3.0.2" + jest-cli "^29.5.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + 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" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +pg-connection-string@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" + integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.0.tgz#3190df3e4747a0d23e5e9e8045bcd99bda0a712e" + integrity sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ== + +pg-protocol@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" + integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + 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" + +pg@^8.10.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.10.0.tgz#5b8379c9b4a36451d110fc8cd98fc325fe62ad24" + integrity sha512-ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.5.0" + pg-pool "^3.6.0" + pg-protocol "^1.6.0" + pg-types "^2.1.0" + pgpass "1.x" + +pgpass@1.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +pretty-format@^29.0.0, pretty-format@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" + integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== + dependencies: + "@jest/schemas" "^29.4.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pure-rand@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" + integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.0.0, resolve@^1.20.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +safe-buffer@5.2.1, safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@7.x, semver@^7.3.5: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + 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" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.12: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split2@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + 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" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +ts-jest@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.0.tgz#4a9db4104a49b76d2b368ea775b6c9535c603891" + integrity sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA== + dependencies: + bs-logger "0.x" + 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.x" + yargs-parser "^21.0.1" + +ts-node-dev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-2.0.0.tgz#bdd53e17ab3b5d822ef519928dc6b4a7e0f13065" + integrity sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w== + dependencies: + chokidar "^3.5.1" + dynamic-dedupe "^0.3.0" + minimist "^1.2.6" + mkdirp "^1.0.4" + resolve "^1.0.0" + rimraf "^2.6.1" + source-map-support "^0.5.12" + tree-kill "^1.2.2" + ts-node "^10.4.0" + tsconfig "^7.0.0" + +ts-node@^10.4.0: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + 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" + +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +tsyringe@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.7.0.tgz#aea0a9d565385deebb6def60cda342b15016f283" + integrity sha512-ncFDM1jTLsok4ejMvSW5jN1VGPQD48y2tfAR0pdptWRKYX4bkbqPt92k7KJ5RFJ1KV36JEs/+TMh7I6OUgj74g== + dependencies: + tslib "^1.9.3" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typeorm@^0.3.15: + version "0.3.15" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.15.tgz#8548cba64b746a0eadeab65b18ea21cd31ac7468" + integrity sha512-R4JSw8QjDP1W+ypeRz/XrCXIqubrLSnNAzJAp9EQSQIPHTv+YmUHZis8g08lOwFpuhqL9m8jkPSz8GWEKlU/ow== + 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" + debug "^4.3.4" + dotenv "^16.0.3" + glob "^8.1.0" + mkdirp "^2.1.3" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.5.0" + uuid "^9.0.0" + yargs "^17.6.2" + +typescript@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + 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" + +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + 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" + +yargs@^17.6.2: + version "17.7.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + 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" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==