From 8e92420fa703ebec9f738c2dcd646d10fc2a63e5 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Fri, 15 Jan 2021 10:47:13 -0300 Subject: [PATCH 01/80] Colocar arquivos /img no .github p separar da api --- {img => .github/img}/challenge.png | Bin {img => .github/img}/logo-clubpetro.png | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename {img => .github/img}/challenge.png (100%) rename {img => .github/img}/logo-clubpetro.png (100%) diff --git a/img/challenge.png b/.github/img/challenge.png similarity index 100% rename from img/challenge.png rename to .github/img/challenge.png diff --git a/img/logo-clubpetro.png b/.github/img/logo-clubpetro.png similarity index 100% rename from img/logo-clubpetro.png rename to .github/img/logo-clubpetro.png From f611bb7c5ba223cd5dd395f8b9a57d8c410cc18b Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Fri, 15 Jan 2021 10:47:30 -0300 Subject: [PATCH 02/80] =?UTF-8?q?Adicionar=20instru=C3=A7=C3=B5es=20de=20e?= =?UTF-8?q?xecu=C3=A7=C3=A3o=20no=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0fd0fd48..bebf64d7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Desafio de Backend -Clubpetro - [Descrição](#descrição) @@ -8,6 +8,7 @@ - [Requisitos Obrigatórios](#requisitos-obrigatórios) - [Bônus](#bônus) - [Submissão e Prazo de Entrega](#submissão-e-prazo-de-entrega) +- [Instruções de execução](#instruções-de-execução) ## Descrição @@ -17,7 +18,7 @@ Este desafio tem como objetivo avaliar as habilidades técnicas do candidato a v 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: -Desafio +Desafio Os dados a ser considerados são: @@ -55,3 +56,35 @@ Os dados a ser considerados são: - 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 canditado recebeu o email com o link do repositório; - Ao finalizar o desafio, o candidato deverá enviar um email para jobs@clubpetro.com.br contendo o link do seu PR. + + +# Instruções de execução + +> Instalação das dependências + +```bash +$ yarn +``` + +> Executando a aplicação + +```bash +# development +$ yarn start + +# watch mode +$ yarn start:dev + +# production mode +$ yarn start:prod +``` + +> Testes + +```bash +# unit tests +$ yarn run test + +# test coverage +$ yarn run test:cov +``` \ No newline at end of file From 3470b90cdad4f69ce621f955bb8d5cab91c705ec Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Fri, 15 Jan 2021 10:49:43 -0300 Subject: [PATCH 03/80] Adicionar estrutura nestjs limpa --- .eslintrc.js | 25 + .gitignore | 34 + .prettierrc | 4 + nest-cli.json | 4 + package.json | 70 + src/app.controller.ts | 12 + src/app.module.ts | 10 + src/app.service.ts | 8 + src/main.ts | 8 + test/app.e2e-spec.ts | 24 + test/jest-e2e.json | 9 + tsconfig.build.json | 4 + tsconfig.json | 15 + yarn.lock | 5963 +++++++++++++++++++++++++++++++++++++++++ 14 files changed, 6190 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 nest-cli.json create mode 100644 package.json create mode 100644 src/app.controller.ts create mode 100644 src/app.module.ts create mode 100644 src/app.service.ts create mode 100644 src/main.ts create mode 100644 test/app.e2e-spec.ts create mode 100644 test/jest-e2e.json create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..64d11856 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'prettier/@typescript-eslint', + 'plugin:prettier/recommended', + ], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..c16ef026 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +# compiled output +/dist +/node_modules + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# OS +.DS_Store + +# Tests +/coverage +/.nyc_output + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..dcb72794 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/nest-cli.json b/nest-cli.json new file mode 100644 index 00000000..56167b36 --- /dev/null +++ b/nest-cli.json @@ -0,0 +1,4 @@ +{ + "collection": "@nestjs/schematics", + "sourceRoot": "src" +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..fc6bfd56 --- /dev/null +++ b/package.json @@ -0,0 +1,70 @@ +{ + "name": "challenge-api", + "version": "0.0.1", + "description": "", + "author": "", + "private": true, + "license": "UNLICENSED", + "scripts": { + "prebuild": "rimraf dist", + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json" + }, + "dependencies": { + "@nestjs/common": "^7.5.1", + "@nestjs/core": "^7.5.1", + "@nestjs/platform-express": "^7.5.1", + "reflect-metadata": "^0.1.13", + "rimraf": "^3.0.2", + "rxjs": "^6.6.3" + }, + "devDependencies": { + "@nestjs/cli": "^7.5.1", + "@nestjs/schematics": "^7.1.3", + "@nestjs/testing": "^7.5.1", + "@types/express": "^4.17.8", + "@types/jest": "^26.0.15", + "@types/node": "^14.14.6", + "@types/supertest": "^2.0.10", + "@typescript-eslint/eslint-plugin": "^4.6.1", + "@typescript-eslint/parser": "^4.6.1", + "eslint": "^7.12.1", + "eslint-config-prettier": "7.1.0", + "eslint-plugin-prettier": "^3.1.4", + "jest": "^26.6.3", + "prettier": "^2.1.2", + "supertest": "^6.0.0", + "ts-jest": "^26.4.3", + "ts-loader": "^8.0.8", + "ts-node": "^9.0.0", + "tsconfig-paths": "^3.9.0", + "typescript": "^4.0.5" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } +} diff --git a/src/app.controller.ts b/src/app.controller.ts new file mode 100644 index 00000000..cce879ee --- /dev/null +++ b/src/app.controller.ts @@ -0,0 +1,12 @@ +import { Controller, Get } from '@nestjs/common'; +import { AppService } from './app.service'; + +@Controller() +export class AppController { + constructor(private readonly appService: AppService) {} + + @Get() + getHello(): string { + return this.appService.getHello(); + } +} diff --git a/src/app.module.ts b/src/app.module.ts new file mode 100644 index 00000000..86628031 --- /dev/null +++ b/src/app.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +@Module({ + imports: [], + controllers: [AppController], + providers: [AppService], +}) +export class AppModule {} diff --git a/src/app.service.ts b/src/app.service.ts new file mode 100644 index 00000000..927d7cca --- /dev/null +++ b/src/app.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + getHello(): string { + return 'Hello World!'; + } +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 00000000..13cad38c --- /dev/null +++ b/src/main.ts @@ -0,0 +1,8 @@ +import { NestFactory } from '@nestjs/core'; +import { AppModule } from './app.module'; + +async function bootstrap() { + const app = await NestFactory.create(AppModule); + await app.listen(3000); +} +bootstrap(); diff --git a/test/app.e2e-spec.ts b/test/app.e2e-spec.ts new file mode 100644 index 00000000..50cda623 --- /dev/null +++ b/test/app.e2e-spec.ts @@ -0,0 +1,24 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from './../src/app.module'; + +describe('AppController (e2e)', () => { + let app: INestApplication; + + beforeEach(async () => { + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it('/ (GET)', () => { + return request(app.getHttpServer()) + .get('/') + .expect(200) + .expect('Hello World!'); + }); +}); diff --git a/test/jest-e2e.json b/test/jest-e2e.json new file mode 100644 index 00000000..e9d912f3 --- /dev/null +++ b/test/jest-e2e.json @@ -0,0 +1,9 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "rootDir": ".", + "testEnvironment": "node", + "testRegex": ".e2e-spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + } +} diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..64f86c6b --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..bf10a239 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "es2017", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..0648cecb --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5963 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@angular-devkit/core@11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.3.tgz#2acc7c90f1597b87455e0a5f93ebb1cd01b873aa" + integrity sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g== + dependencies: + ajv "6.12.6" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.3" + source-map "0.7.3" + +"@angular-devkit/core@11.0.5": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.5.tgz#8239486d2de6c08fc55d2a64f12a7f5d518c8beb" + integrity sha512-hwV8fjF8JNPJkiVWw8MNzeIfDo01aD/OAOlC4L5rQnVHn+i2EiU3brSDmFqyeHPPV3h/QjuBkS3tkN7gSnVWaQ== + dependencies: + ajv "6.12.6" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.3" + source-map "0.7.3" + +"@angular-devkit/schematics-cli@0.1100.3": + version "0.1100.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-0.1100.3.tgz#89ed076946d643c285228ea30b00c0def1fdb11d" + integrity sha512-dECFHCDTgWfSHosfKTeQoyTgUUqgJaftxg4DxA23sMsQtDb1U8ZsIIPpH+L4QhCDT2zlhv51ynd5RUgu28h2DQ== + dependencies: + "@angular-devkit/core" "11.0.3" + "@angular-devkit/schematics" "11.0.3" + "@schematics/schematics" "0.1100.3" + ansi-colors "4.1.1" + inquirer "7.3.3" + minimist "1.2.5" + symbol-observable "2.0.3" + +"@angular-devkit/schematics@11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-11.0.3.tgz#fc7fb9432d9e2678162794afdaf4fd338e731509" + integrity sha512-VZnqgnnfyzyMluIDvGp+ZlDU2P9BnjrhacBOdqBS/jNQ7oxyE0AWrUApGXcejOJ13Z7pEf31E64P3bImcjwP+A== + dependencies: + "@angular-devkit/core" "11.0.3" + ora "5.1.0" + rxjs "6.6.3" + +"@angular-devkit/schematics@11.0.5": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-11.0.5.tgz#e5d89451daa644eccce93970709f7cdf44c11982" + integrity sha512-0NKGC8Nf/4vvDpWKB7bwxIazvNnNHnZBX6XlyBXNl+fW8tpTef3PNMJMSErTz9LFnuv61vsKbc36u/Ek2YChWg== + dependencies: + "@angular-devkit/core" "11.0.5" + ora "5.1.0" + rxjs "6.6.3" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.8.3": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/core@^7.1.0", "@babel/core@^7.7.5": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.10", "@babel/generator@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== + dependencies: + "@babel/types" "^7.12.11" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" + +"@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-member-expression-to-functions@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-module-imports@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + dependencies: + "@babel/types" "^7.12.11" + +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== + +"@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.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@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-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.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" + integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== + dependencies: + "@babel/code-frame" "^7.12.11" + "@babel/generator" "^7.12.11" + "@babel/helper-function-name" "^7.12.11" + "@babel/helper-split-export-declaration" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/types" "^7.12.12" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" + integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + 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== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@eslint/eslintrc@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@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.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@nestjs/cli@^7.5.1": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@nestjs/cli/-/cli-7.5.4.tgz#d4cdce388d7f6a32dabdf5bab909af23653f7740" + integrity sha512-qKdniSA7NXO/5HqSxGaalMS7roIJXeT4yXTadBQ47Qv68DHh/0jfCcTzH6hqCuyRV7DV2k0bxob+rq4peMaZBw== + dependencies: + "@angular-devkit/core" "11.0.3" + "@angular-devkit/schematics" "11.0.3" + "@angular-devkit/schematics-cli" "0.1100.3" + "@nestjs/schematics" "^7.1.0" + "@types/webpack" "4.41.25" + chalk "3.0.0" + chokidar "3.4.3" + cli-table3 "0.5.1" + commander "4.1.1" + fork-ts-checker-webpack-plugin "6.0.5" + inquirer "7.3.3" + node-emoji "1.10.0" + ora "5.1.0" + os-name "4.0.0" + rimraf "3.0.2" + shelljs "0.8.4" + tree-kill "1.2.2" + tsconfig-paths "3.9.0" + tsconfig-paths-webpack-plugin "3.3.0" + typescript "4.0.5" + webpack "5.9.0" + webpack-node-externals "2.5.2" + +"@nestjs/common@^7.5.1": + version "7.6.5" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-7.6.5.tgz#d6e9435453eef2d1b492384ca27fa23358744949" + integrity sha512-WvBJd71ktaCRm9KTURVqn1YMyUzsOIkvezjP7WEpP9DVqQUOFVvn6/osJGZky/qL+zE4P7NBNyoXM94bpYvMwQ== + dependencies: + axios "0.21.1" + iterare "1.2.1" + tslib "2.0.3" + uuid "8.3.2" + +"@nestjs/core@^7.5.1": + version "7.6.5" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-7.6.5.tgz#93c642d1abf8d3f09f8f78c262814eaf83bc2ad6" + integrity sha512-syRpXT09RDMySs1BLQSXJfq1NXGfG4VmF9hZYGef+/QWqTRfSMEDEH5MsCCLt2lK3AZnOXE9BQwWKeNBhKLplA== + dependencies: + "@nuxtjs/opencollective" "0.3.2" + fast-safe-stringify "2.0.7" + iterare "1.2.1" + object-hash "2.1.1" + path-to-regexp "3.2.0" + tslib "2.0.3" + uuid "8.3.2" + +"@nestjs/platform-express@^7.5.1": + version "7.6.5" + resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-7.6.5.tgz#7ee3df2c104aadac766af8b310bb4d04f4039d4a" + integrity sha512-A3UYYpDFih3WORBcOCiWfPOvKoEmS6Dk7YzrXyCh5KapatqX+XvLbObcjcvqzqonk4bT3IMceyhJp/ZBSwvEPA== + dependencies: + body-parser "1.19.0" + cors "2.8.5" + express "4.17.1" + multer "1.4.2" + tslib "2.0.3" + +"@nestjs/schematics@^7.1.0", "@nestjs/schematics@^7.1.3": + version "7.2.6" + resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-7.2.6.tgz#cc2c029927550f9b551947053849ebff66c99803" + integrity sha512-4geGO9pjYG4Sc4Qi+pkUVIbaxPEeySHi/z17po8nP9uaPPo8AUKP9rXjNL+mhMrXqFlB/hhN6xBBYtMyL5pB2Q== + dependencies: + "@angular-devkit/core" "11.0.5" + "@angular-devkit/schematics" "11.0.5" + fs-extra "9.0.1" + pluralize "8.0.0" + +"@nestjs/testing@^7.5.1": + version "7.6.5" + resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-7.6.5.tgz#e2ee5c8a26e303cba17de858b1d7f64d7b0eef98" + integrity sha512-CVjECV3pqy5+HlBSLBRitHgJ8WRW2jns3mKJpSBzUgbJbrGWCB7Y7JGYkP7CQ+29EDKfetnz3+z0q6GPdubfUQ== + dependencies: + optional "0.1.4" + tslib "2.0.3" + +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + +"@nuxtjs/opencollective@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz#620ce1044f7ac77185e825e1936115bb38e2681c" + integrity sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA== + dependencies: + chalk "^4.1.0" + consola "^2.15.0" + node-fetch "^2.6.1" + +"@schematics/schematics@0.1100.3": + version "0.1100.3" + resolved "https://registry.yarnpkg.com/@schematics/schematics/-/schematics-0.1100.3.tgz#bc929e78b1ad09386f7a849a3e08f91429d674d7" + integrity sha512-tzjKnjD90FQ4LgRN9ALT2qCqgJYZrAKoy1embFJRuGKA8vv1hTG4JonVDqQEUoNwTc9r/Ok2Z1eenAI9TSUd1A== + dependencies: + "@angular-devkit/core" "11.0.3" + "@angular-devkit/schematics" "11.0.3" + +"@sinonjs/commons@^1.7.0": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" + integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.12" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" + integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== + dependencies: + "@babel/types" "^7.3.0" + +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.34" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" + integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== + dependencies: + "@types/node" "*" + +"@types/cookiejar@*": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8" + integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog== + +"@types/eslint-scope@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" + integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "7.2.6" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.6.tgz#5e9aff555a975596c03a98b59ecd103decc70c3c" + integrity sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + +"@types/estree@^0.0.45": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + +"@types/express-serve-static-core@^4.17.18": + version "4.17.18" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz#8371e260f40e0e1ca0c116a9afcd9426fa094c40" + integrity sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@^4.17.8": + version "4.17.11" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" + integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" + integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@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.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@26.x", "@types/jest@^26.0.15": + version "26.0.20" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" + integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/mime@*": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" + integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== + +"@types/node@*", "@types/node@^14.14.6": + version "14.14.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.21.tgz#d934aacc22424fe9622ebf6857370c052eae464e" + integrity sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.0.0": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.6.tgz#f4b1efa784e8db479cdb8b14403e2144b1e9ff03" + integrity sha512-6gOkRe7OIioWAXfnO/2lFiv+SJichKVSys1mSsgyrYHSEjk8Ctv4tSR/Odvnu+HWlH2C8j53dahU03XmQdd5fA== + +"@types/qs@*": + version "6.9.5" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" + integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + +"@types/serve-static@*": + version "1.13.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.8.tgz#851129d434433c7082148574ffec263d58309c46" + integrity sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== + +"@types/superagent@*": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.10.tgz#5e2cc721edf58f64fe9b819f326ee74803adee86" + integrity sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g== + dependencies: + "@types/cookiejar" "*" + "@types/node" "*" + +"@types/supertest@^2.0.10": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@types/supertest/-/supertest-2.0.10.tgz#630d79b4d82c73e043e43ff777a9ca98d457cab7" + integrity sha512-Xt8TbEyZTnD5Xulw95GLMOkmjGICrOQyJ2jqgkSjAUR3mm7pAIzSR0NFBaMcwlzVvlpCjNwbATcWWwjNiZiFrQ== + dependencies: + "@types/superagent" "*" + +"@types/tapable@*": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + +"@types/uglify-js@*": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" + integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== + dependencies: + source-map "^0.6.1" + +"@types/webpack-sources@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@4.41.25": + version "4.41.25" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.25.tgz#4d3b5aecc4e44117b376280fbfd2dc36697968c4" + integrity sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@types/yargs-parser@*": + version "20.2.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" + integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + +"@types/yargs@^15.0.0": + version "15.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.12.tgz#6234ce3e3e3fa32c5db301a170f96a599c960d74" + integrity sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^4.6.1": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.13.0.tgz#5f580ea520fa46442deb82c038460c3dd3524bb6" + integrity sha512-ygqDUm+BUPvrr0jrXqoteMqmIaZ/bixYOc3A4BRwzEPTZPi6E+n44rzNZWaB0YvtukgP+aoj0i/fyx7FkM2p1w== + dependencies: + "@typescript-eslint/experimental-utils" "4.13.0" + "@typescript-eslint/scope-manager" "4.13.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + lodash "^4.17.15" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.13.0.tgz#9dc9ab375d65603b43d938a0786190a0c72be44e" + integrity sha512-/ZsuWmqagOzNkx30VWYV3MNB/Re/CGv/7EzlqZo5RegBN8tMuPaBgNK6vPBCQA8tcYrbsrTdbx3ixMRRKEEGVw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.13.0" + "@typescript-eslint/types" "4.13.0" + "@typescript-eslint/typescript-estree" "4.13.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^4.6.1": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.13.0.tgz#c413d640ea66120cfcc37f891e8cb3fd1c9d247d" + integrity sha512-KO0J5SRF08pMXzq9+abyHnaGQgUJZ3Z3ax+pmqz9vl81JxmTTOUfQmq7/4awVfq09b6C4owNlOgOwp61pYRBSg== + dependencies: + "@typescript-eslint/scope-manager" "4.13.0" + "@typescript-eslint/types" "4.13.0" + "@typescript-eslint/typescript-estree" "4.13.0" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.13.0.tgz#5b45912a9aa26b29603d8fa28f5e09088b947141" + integrity sha512-UpK7YLG2JlTp/9G4CHe7GxOwd93RBf3aHO5L+pfjIrhtBvZjHKbMhBXTIQNkbz7HZ9XOe++yKrXutYm5KmjWgQ== + dependencies: + "@typescript-eslint/types" "4.13.0" + "@typescript-eslint/visitor-keys" "4.13.0" + +"@typescript-eslint/types@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.13.0.tgz#6a7c6015a59a08fbd70daa8c83dfff86250502f8" + integrity sha512-/+aPaq163oX+ObOG00M0t9tKkOgdv9lq0IQv/y4SqGkAXmhFmCfgsELV7kOCTb2vVU5VOmVwXBXJTDr353C1rQ== + +"@typescript-eslint/typescript-estree@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.13.0.tgz#cf6e2207c7d760f5dfd8d18051428fadfc37b45e" + integrity sha512-9A0/DFZZLlGXn5XA349dWQFwPZxcyYyCFX5X88nWs2uachRDwGeyPz46oTsm9ZJE66EALvEns1lvBwa4d9QxMg== + dependencies: + "@typescript-eslint/types" "4.13.0" + "@typescript-eslint/visitor-keys" "4.13.0" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.13.0.tgz#9acb1772d3b3183182b6540d3734143dce9476fe" + integrity sha512-6RoxWK05PAibukE7jElqAtNMq+RWZyqJ6Q/GdIxaiUj2Ept8jh8+FUVlbq9WxMYxkmEOPvCE5cRSyupMpwW31g== + dependencies: + "@typescript-eslint/types" "4.13.0" + eslint-visitor-keys "^2.0.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.4.tgz#7a3ae4191466a6984eee0fe3407a4f3aa9db8354" + integrity sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ== + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@6.12.6, ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" + integrity sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@4.1.1, ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +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" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" + integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY= + +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" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios@0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@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@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +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.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +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" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, 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" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.14.5: + version "4.16.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" + integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== + dependencies: + caniuse-lite "^1.0.30001173" + colorette "^1.2.1" + electron-to-chromium "^1.3.634" + escalade "^3.1.1" + node-releases "^1.1.69" + +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.x, buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +busboy@^0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + integrity sha1-bCpiLvz0fFe7vh4qnDetNseSVFM= + dependencies: + dicer "0.2.5" + readable-stream "1.1.x" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +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.0.0, 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.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-lite@^1.0.30001173: + version "1.0.30001177" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001177.tgz#2c3b384933aafda03e29ccca7bb3d8c3389e1ece" + integrity sha512-6Ld7t3ifCL02jTj3MxPMM5wAYjbo4h/TAQGFTgv1inihP1tWnWp8mxxT4ut4JBEHLbpFXEXJJQ119JCJTBkYDw== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.0.0, chalk@^2.3.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.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + 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== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + +chokidar@^3.4.2: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.0.tgz#458a4816a415e9d3b3caa4faec2b96a6935a9e65" + integrity sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" + integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== + +cli-table3@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +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== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +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 sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +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== + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +component-emitter@^1.2.1, component-emitter@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +consola@^2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.0.tgz#40fc4eefa4d2f8ef2e2806147f056ea207fcc0e9" + integrity sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ== + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cors@2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +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@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2: + 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" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + 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.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +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== + +dicer@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + integrity sha1-WZbAhrszIYyBLAkL3cCc0S+stw8= + dependencies: + readable-stream "1.1.x" + streamsearch "0.1.2" + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +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== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.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 sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.634: + version "1.3.640" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.640.tgz#94e68c0ae79181a1d6fd1ed9a42b9790d51a1bca" + integrity sha512-cU6wQdXYzuSPzLdszsa4whStYfmU7CVNnG6c5z6/z9YlCOQ2Xh/uKB1gTxlIRr0ubgSg1/dZuSbUAoeESeQ3sQ== + +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + +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== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enhanced-resolve@^5.3.1: + version "5.7.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" + integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +errno@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +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 sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +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 sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +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== + +escodegen@^1.14.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz#5402eb559aa94b894effd6bddfa0b1ca051c858f" + integrity sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA== + +eslint-plugin-prettier@^3.1.4: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.12.1: + version "7.17.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.17.0.tgz#4ccda5bf12572ad3bf760e6f195886f50569adb0" + integrity sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^6.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +events@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0, execa@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + 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 sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + +express@4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.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== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-safe-stringify@2.0.7, fast-safe-stringify@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + +fastq@^1.6.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== + dependencies: + flat-cache "^3.0.4" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +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.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + 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" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== + +follow-redirects@^1.10.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" + integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +fork-ts-checker-webpack-plugin@6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.0.5.tgz#20d8766b644833cc5c600b9b7c6fbba0c8087419" + integrity sha512-2jIHv2RhXzSxWtvRQX/ZtOxd5joo+FQYzn+sJ/hyLqApKGgvjMEMF951GnvuSNPheGsqiVzIDjvSZo1qRtry1Q== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +form-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" + integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formidable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" + integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@9.0.1, fs-extra@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-monkey@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.1.tgz#4a82f36944365e619f4454d9fff106553067b781" + integrity sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^2.1.2, fsevents@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" + integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +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== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.1: + 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.1: + 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-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@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.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== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@^11.0.1: + version "11.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" + integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +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-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +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" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +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@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24, 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" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + 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 sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@7.3.3: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +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-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +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-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +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.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +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-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.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.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +iterare@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.1.tgz#139c400ff7363690e33abffa33cbba8920f00042" + integrity sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q== + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.0.0, jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.1.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== + dependencies: + "@jest/core" "^26.6.3" + import-local "^3.0.2" + jest-cli "^26.6.3" + +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" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + dependencies: + abab "^2.0.3" + acorn "^7.1.1" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.2.0" + data-urls "^2.0.0" + decimal.js "^10.2.0" + domexception "^2.0.1" + escodegen "^1.14.1" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" + symbol-tree "^3.2.4" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.2.3" + xml-name-validator "^3.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-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +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== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@2.x, json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +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== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +loader-runner@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +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 sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +log-symbols@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +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" + +macos-release@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" + integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== + +magic-string@0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +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.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memfs@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.2.0.tgz#f9438e622b5acd1daa8a4ae160c496fdd1325b26" + integrity sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A== + dependencies: + fs-monkey "1.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +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== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@1.1.2, methods@^1.1.2, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.0, micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +mime-db@1.45.0: + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== + dependencies: + mime-db "1.45.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== + +mime@^2.4.6: + version "2.4.7" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" + integrity sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA== + +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: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@1.2.5, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@1.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +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== + +multer@1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.2.tgz#2f1f4d12dbaeeba74cb37e623f234bf4d3d2057a" + integrity sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg== + dependencies: + append-field "^1.0.0" + busboy "^0.2.11" + concat-stream "^1.5.2" + mkdirp "^0.5.1" + object-assign "^4.1.1" + on-finished "^2.3.0" + type-is "^1.6.4" + xtend "^4.0.0" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-emoji@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + dependencies: + lodash.toarray "^4.4.0" + +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" + integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^1.1.69: + version "1.1.69" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.69.tgz#3149dbde53b781610cd8b486d62d86e26c3725f6" + integrity sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA== + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +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@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + 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" + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09" + integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +on-finished@^2.3.0, on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + 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" + +optional@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/optional/-/optional-0.1.4.tgz#cdb1a9bedc737d2025f690ceeb50e049444fd5b3" + integrity sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw== + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.1.0.tgz#b188cf8cd2d4d9b13fd25383bc3e5cba352c94f8" + integrity sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w== + dependencies: + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.4.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-name@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-4.0.0.tgz#6c05c09c41c15848ea74658d12c9606f0f286599" + integrity sha512-caABzDdJMbtykt7GmSogEat3faTKQhmZf0BS5l/pZGmP0vPWQjXWqOhbLyK+b6j2/DQPmEvYdzLXJXXLJNVDNg== + dependencies: + macos-release "^2.2.0" + windows-release "^4.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +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== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + 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@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== + +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== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +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.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +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 sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-to-regexp@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.2.0.tgz#fa7877ecbc495c601907562222453c43cc204a5f" + integrity sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +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" + +pluralize@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prompts@^2.0.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@^6.9.4: + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +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.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.1, readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +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== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +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@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +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-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.18.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== + +rxjs@6.6.3, rxjs@^6.6.0, rxjs@^6.6.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +saxes@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + 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.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +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== + +shelljs@0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +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== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.7.3, source-map@^0.7.3, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, 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== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + +string-length@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +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-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +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@^3.1.0, 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== + +superagent@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-6.1.0.tgz#09f08807bc41108ef164cfb4be293cebd480f4a6" + integrity sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.2" + debug "^4.1.1" + fast-safe-stringify "^2.0.7" + form-data "^3.0.0" + formidable "^1.2.2" + methods "^1.1.2" + mime "^2.4.6" + qs "^6.9.4" + readable-stream "^3.6.0" + semver "^7.3.2" + +supertest@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-6.0.1.tgz#f6b54370de85c45d6557192c8d7df604ca2c9e18" + integrity sha512-8yDNdm+bbAN/jeDdXsRipbq9qMpVF7wRsbwLgsANHqdjPsCoecmlTuqEcLQMGpmojFBhxayZ0ckXmLXYq7e+0g== + dependencies: + methods "1.1.2" + superagent "6.1.0" + +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.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-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +symbol-observable@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" + integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^6.0.4: + version "6.0.7" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + dependencies: + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^5.0.3: + version "5.1.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673" + integrity sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q== + dependencies: + jest-worker "^26.6.2" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.5.1" + +terser@^5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +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" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +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 sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +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" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + +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@^26.4.3: + version "26.4.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49" + integrity sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg== + dependencies: + "@types/jest" "26.x" + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + jest-util "^26.1.0" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "20.x" + +ts-loader@^8.0.8: + version "8.0.14" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.14.tgz#e46ac1f8dcb88808d0b1335d2eae65b74bd78fe8" + integrity sha512-Jt/hHlUnApOZjnSjTmZ+AbD5BGlQFx3f1D0nYuNKwz0JJnuDGHJas6az+FlWKwwRTu+26GXpv249A8UAnYUpqA== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^4.0.0" + loader-utils "^2.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + +ts-node@^9.0.0: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tsconfig-paths-webpack-plugin@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.3.0.tgz#a7461723c20623ca9148621a5ce36532682ad2ff" + integrity sha512-MpQeZpwPY4gYASCUjY4yt2Zj8yv86O8f++3Ai4o0yI0fUC6G1syvnL9VuY71PBgimRYDQU47f12BEmJq9wRaSw== + dependencies: + chalk "^2.3.0" + enhanced-resolve "^4.0.0" + tsconfig-paths "^3.4.0" + +tsconfig-paths@3.9.0, tsconfig-paths@^3.4.0, tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + +tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.17.1: + version "3.19.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.19.1.tgz#d8566e0c51c82f32f9c25a4d367cd62409a547a9" + integrity sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +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.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@^1.6.4, type-is@~1.6.17, 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" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389" + integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ== + +typescript@^4.0.5: + version "4.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" + integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +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 sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@8.3.2, uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + +v8-to-istanbul@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" + integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +watchpack@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.0.tgz#e63194736bf3aa22026f7b191cd57907b0f9f696" + integrity sha512-UjgD1mqjkG99+3lgG36at4wPnUXNvis2v1utwTgQ43C22c4LD71LsYMExdWXh4HZ+RmW+B0t1Vrg2GpXAkTOQw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-node-externals@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-2.5.2.tgz#178e017a24fec6015bc9e672c77958a6afac861d" + integrity sha512-aHdl/y2N7PW2Sx7K+r3AxpJO+aDMcYzMQd60Qxefq3+EwhewSbTBqNumOsCE1JsCUNoyfGj5465N0sSf6hc/5w== + +webpack-sources@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" + integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack@5.9.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.9.0.tgz#af2e9cf9d6c7867cdcf214ea3bb5eb77aece6895" + integrity sha512-YnnqIV/uAS5ZrNpctSv378qV7HmbJ74DL+XfvMxzbX1bV9e7eeT6eEWU4wuUw33CNr/HspBh7R/xQlVjTEyAeA== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.45" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^8.0.4" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.3.1" + eslint-scope "^5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" + json-parse-better-errors "^1.0.2" + loader-runner "^4.1.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + pkg-dir "^4.2.0" + schema-utils "^3.0.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.0.3" + watchpack "^2.0.0" + webpack-sources "^2.1.1" + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + 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" + +windows-release@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-4.0.0.tgz#4725ec70217d1bf6e02c7772413b29cdde9ec377" + integrity sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg== + dependencies: + execa "^4.0.2" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + 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 sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.2.3: + version "7.4.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" + integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +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@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +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== + +yaml@^1.7.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yargs-parser@20.x: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +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== From b217e99dfb4696651cc3e83463df63be0040c5cb Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Fri, 15 Jan 2021 11:25:24 -0300 Subject: [PATCH 04/80] Remover controller e service de app --- src/app.controller.ts | 12 ------------ src/app.service.ts | 8 -------- 2 files changed, 20 deletions(-) delete mode 100644 src/app.controller.ts delete mode 100644 src/app.service.ts diff --git a/src/app.controller.ts b/src/app.controller.ts deleted file mode 100644 index cce879ee..00000000 --- a/src/app.controller.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Controller, Get } from '@nestjs/common'; -import { AppService } from './app.service'; - -@Controller() -export class AppController { - constructor(private readonly appService: AppService) {} - - @Get() - getHello(): string { - return this.appService.getHello(); - } -} diff --git a/src/app.service.ts b/src/app.service.ts deleted file mode 100644 index 927d7cca..00000000 --- a/src/app.service.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -@Injectable() -export class AppService { - getHello(): string { - return 'Hello World!'; - } -} From f8dcca2449d6243b814597723d807331fa2062db Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:49:38 -0300 Subject: [PATCH 05/80] Criar as typeorm migrations --- .../1610892781445-CreateFilesTable.ts | 42 +++++++++++++ .../1610892919013-CreateCountriesTable.ts | 60 +++++++++++++++++++ .../1610908952492-CreateLocalsTable.ts | 58 ++++++++++++++++++ .../1610910224768-CreateMetasTable.ts | 59 ++++++++++++++++++ 4 files changed, 219 insertions(+) create mode 100644 src/migrations/1610892781445-CreateFilesTable.ts create mode 100644 src/migrations/1610892919013-CreateCountriesTable.ts create mode 100644 src/migrations/1610908952492-CreateLocalsTable.ts create mode 100644 src/migrations/1610910224768-CreateMetasTable.ts diff --git a/src/migrations/1610892781445-CreateFilesTable.ts b/src/migrations/1610892781445-CreateFilesTable.ts new file mode 100644 index 00000000..38f46504 --- /dev/null +++ b/src/migrations/1610892781445-CreateFilesTable.ts @@ -0,0 +1,42 @@ +import { MigrationInterface, QueryRunner, Table } from 'typeorm'; + +export class CreateFlagFilesTable1610892781445 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'files', + columns: [ + { + name: 'id', + type: 'int', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'hashedName', + type: 'varchar', + }, + { + name: 'url', + type: 'varchar', + }, + { + name: 'createdAt', + type: 'timestamp', + default: 'now()', + }, + { + name: 'updatedAt', + type: 'timestamp', + default: 'now()', + }, + ], + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('files'); + } +} diff --git a/src/migrations/1610892919013-CreateCountriesTable.ts b/src/migrations/1610892919013-CreateCountriesTable.ts new file mode 100644 index 00000000..fb4db666 --- /dev/null +++ b/src/migrations/1610892919013-CreateCountriesTable.ts @@ -0,0 +1,60 @@ +import { + MigrationInterface, + QueryRunner, + Table, + TableForeignKey, +} from 'typeorm'; + +export class CreateCountriesTable1610892919013 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'countries', + columns: [ + { + name: 'id', + type: 'int', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'name', + type: 'varchar', + isUnique: true, + }, + { + name: 'createdAt', + type: 'timestamp', + default: 'now()', + }, + { + name: 'updatedAt', + type: 'timestamp', + default: 'now()', + }, + { + name: 'fileId', + type: 'int', + }, + ], + }), + ); + + await queryRunner.createForeignKey( + 'countries', + new TableForeignKey({ + name: 'foreignKeyFilesCountries', + columnNames: ['fileId'], + referencedColumnNames: ['id'], + referencedTableName: 'files', + onDelete: 'CASCADE', + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropForeignKey('countries', 'foreignKeyFilesCountries'); + await queryRunner.dropTable('countries'); + } +} diff --git a/src/migrations/1610908952492-CreateLocalsTable.ts b/src/migrations/1610908952492-CreateLocalsTable.ts new file mode 100644 index 00000000..eeed1f85 --- /dev/null +++ b/src/migrations/1610908952492-CreateLocalsTable.ts @@ -0,0 +1,58 @@ +import { + MigrationInterface, + QueryRunner, + Table, + TableForeignKey, +} from 'typeorm'; + +export class CreateLocalsTable1610908952492 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'locals', + columns: [ + { + name: 'id', + type: 'int', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'name', + type: 'varchar', + isNullable: false, + }, + { + name: 'createdAt', + type: 'timestamp', + default: 'now()', + }, + { + name: 'updatedAt', + type: 'timestamp', + default: 'now()', + }, + { + name: 'countryId', + type: 'int', + }, + ], + }), + ); + await queryRunner.createForeignKey( + 'locals', + new TableForeignKey({ + name: 'foreignKeyCountriesLocals', + columnNames: ['countryId'], + referencedColumnNames: ['id'], + referencedTableName: 'countries', + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropForeignKey('locals', 'foreignKeyCountriesLocals'); + await queryRunner.dropTable('locals'); + } +} diff --git a/src/migrations/1610910224768-CreateMetasTable.ts b/src/migrations/1610910224768-CreateMetasTable.ts new file mode 100644 index 00000000..a110c6a5 --- /dev/null +++ b/src/migrations/1610910224768-CreateMetasTable.ts @@ -0,0 +1,59 @@ +import { + MigrationInterface, + QueryRunner, + Table, + TableForeignKey, +} from 'typeorm'; + +export class CreateMetasTable1610910224768 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'metas', + columns: [ + { + name: 'id', + type: 'int', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'date', + type: 'timestamp', + isNullable: false, + }, + { + name: 'createdAt', + type: 'timestamp', + default: 'now()', + }, + { + name: 'updatedAt', + type: 'timestamp', + default: 'now()', + }, + { + name: 'localId', + type: 'int', + isPrimary: true, + }, + ], + }), + ); + await queryRunner.createForeignKey( + 'metas', + new TableForeignKey({ + name: 'foreignKeyMetasLocals', + columnNames: ['localId'], + referencedColumnNames: ['id'], + referencedTableName: 'locals', + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropForeignKey('metas', 'foreignKeyMetasLocals'); + await queryRunner.dropTable('metas'); + } +} From 26376a787a78d372ff0465f316686523fdeaa508 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:50:12 -0300 Subject: [PATCH 06/80] Adicionar .editorconfig --- .editorconfig | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..59a1f774 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +# EditorConfig is awesome: https://EditorConfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false \ No newline at end of file From 2d8e76fb3e57b3600c460d0bec68f5b67475c565 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:50:27 -0300 Subject: [PATCH 07/80] Criar .env.example para o ambiente de dev --- .env.example | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..9ab5466b --- /dev/null +++ b/.env.example @@ -0,0 +1,18 @@ +# API configuration +API_BASE_URL=http://localhost +API_PORT=3000 +API_PREFIX=/api/v1 + +# Database ORM configuration +DB_CONNECTION=mysql +DB_HOST=0.0.0.0 +DB_PORT=3306 +DB_USERNAME=root +DB_PASSWORD=lucasdevpassword +DB_NAME=challenge_db + +# TypeORM internals +TYPEORM_SYNCHRONIZE= + +# Multer Options +MULTER_DESTINATION= \ No newline at end of file From 849ef4bad969edc43b785da1cfce7ecc80a7d395 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:50:59 -0300 Subject: [PATCH 08/80] Adicinionar .env e arquivos upload ao .gitignore --- .gitignore | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c16ef026..e703e22c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ /dist /node_modules +# Environment +.env + # Logs logs *.log @@ -31,4 +34,9 @@ lerna-debug.log* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json -!.vscode/extensions.json \ No newline at end of file +!.vscode/extensions.json + + +# Uploads folder +uploads/* +!uploads/.gitkeep \ No newline at end of file From 51639ae3cfe48264fcae7bc5f8ead5f7a8c8d748 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:51:24 -0300 Subject: [PATCH 09/80] Docker-compose p o banco de dados em ambiente dev --- docker-compose.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..6469a6c3 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +# docker compose apenas para ambiente de desenvolvimento + +version: '3.7' + +services: + mysql_db: + container_name: mysql_db + image: mysql:5.7 + environment: + MYSQL_DATABASE: ${DB_NAME} + MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} + ports: + - ${DB_PORT}:${DB_PORT} + restart: always + + adminer: + image: adminer + restart: always + ports: + - 8080:8080 \ No newline at end of file From 199f0fb21a69861dd77ff39cdd2d0ab41332c804 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:52:30 -0300 Subject: [PATCH 10/80] Adicionar DER desenvolvida para o projeto --- .github/diagram-entity-relationship/der.mwb | Bin 0 -> 8160 bytes .github/diagram-entity-relationship/der.mwb.bak | Bin 0 -> 8160 bytes .github/diagram-entity-relationship/der.png | Bin 0 -> 45607 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .github/diagram-entity-relationship/der.mwb create mode 100644 .github/diagram-entity-relationship/der.mwb.bak create mode 100644 .github/diagram-entity-relationship/der.png diff --git a/.github/diagram-entity-relationship/der.mwb b/.github/diagram-entity-relationship/der.mwb new file mode 100644 index 0000000000000000000000000000000000000000..c9c13efeb65552e4b62dd46d790e56413bfe6ad8 GIT binary patch literal 8160 zcmZ{Jbx>T*w=EW2210PiV1XcmySuxE;4-*NaQH}YcXxujyEC{?aCi6M0Ur78tNOiq z_uf9$wY$64{^#`C>zvw4Sq>fn7v}F!v}RM?^sWd(d|UsW2yfHI-o%=fnU$3TM*08Z zkYP^VaJ3Q{vi!s_Fv1LQFn~9lslAD-E!fTlWb0-Oa<{cP)w5LFmY#VL?CR~2Z2!m! z_w|ltd0difs-yoKlwqo_E;~fE#FYKu;=sbt_qlAe5xr5jfX-xe2fsI|M13xCGTzm+ z^L5{ZAi_6}>Sp_(&)=Jh^w0Hu@*QYo$|A$GNk1ci_Q@d!S14kIV4pm+cKO6oRFK5m ztMz4ae%fz)XN?@Ylh`L*4~L{a&{Art=aMOZ`YD@sXt)@J$L9ygAdQ$|7+ zUJ{ZnKdtA!lXZBZ)^j3xgSZo~>vrEwF?Cu$dA79mF8V;O{Kn^{0@wNwTj|OWqpOaT zCLy0IhtNEyU-MQ?+2d)}ffNfG{McdgXIV41f6CZX1N zLQk*{as3abb{l5VU$4v5@Mp1eMqQ^_$*t<8%a{VeR$bX8!G&9Uq^8niq(7yjDvTsN z3MHk~xW$FlbRiylQfRAj^<)CaNs2zzAjND6jgiJIz$wiZDY#+WOSzR%U?Ig zYAKowI)jz8SgzUUT*RQbgpAWa!+CPDx6AG~=|cw=SJ4n_R0BSaBWvdO_SDpOUR<9s zQ`?{&M8$It^;wiE-%#rRU;cK- z2xC=qqE0N z_4Zn(XQ~cCAREBMh$8{n0t!>_nwQMt@YtEuOp?*~M?at7Xn=5og|~9~hkWV%&iTTY zSSO(2{K&<@(9tNi*@-9}lbyRw>mBz^{d z6tM`aa>fns@jVTW|A(Ijezq?TnS^AU+Xmfyi`Qt$J1Yv3FIv_(ImF4-yM%g6*4^NB z($?{=-(QaFvsdd1d-3|Lcc#^)5gF{*GR@dEZg;zgaaM5f509`)_=68Qckiip$5uHn z68&HwQ*xE!VIFUhA910u2PVOt@gKFc%<;LJxc1j4D(wY*+g1ee=#pN-zR>!=(!ijy z2~k-F^$s`oR5RBW7(J%IQm_K^a#LGD+KFt%a1>`q6s2*9A@XD4TL zc>1U}unI4-WFj>A2n<7|4&QXw6B0b5F06s0Vff_T!EV*oGQ;`q;BbBCuq!k>Hp@I+ zSEhThaMDrqkE41qD~Em^65IrLLqU^tWWT(XJc>3MXhnwX$JLdCo+y7@0upfb@vtVq zR!^dGrU6p~tgi2p{7J`qO34q|R>F$}syxDxcpRLSb~3G>l{0wzeTBz&!(54Z6j~M3(__cjfgEb+npcm7tQ2!M4Tot}S+6ad$hn$B_aFDvDCa>e-Rm z$Q^A?tnjqc>EUPOR9?hFhY=99@INmm|kx7u7onQO0W4hW;dKot8yoO0$l4Tm4Ld?#DJ zwH;jx7SU3Y;6ib0`D?lTl)r*JB~3o9avrYW&sG0USy5mRbZZco>>aihf#)u~7+cII ztjYWKW4SWEXoNTEr%{Vys|m)mYw7Y=#Ca6mB1Q+XuvE+yK=bB6^JaAT_3Iz*?ZP0O zJMfYYnL^=?G8sS5FH)4DP3ECZ>pIcN1cub1rI;_d5qfH5Kzf^{uSlBQx|-66qo|f< zyw#$Hflm{tqg~x-)&#Z^$#D9}?bQ%8OU1NPAd|~a*sI>c3fBdhpv;~5{lGuwvi|sR zOgkHa`}jrXUG|xHmAv0Qj@zQ`y_{SA(J+NoB0*I0eva>#tJkh??GO(*xTN!yeoFc@ zoRT3GSTN>J^(SPG@DC=eZ@-Fv2*26K z{(_Wzm(j?GbFZI)rKxTa3Mw6kE11ff<>VDcX%odgK=^)qN+wzFYf$u9*MK-7TtNL z7P{swQ0o(XiR`dN{96WZwU|C`?c*(%x>4C~jwqTAP#V;WVnu&w#NUv|hacd1E*6XX zpd5z<_M$55qQmo|SMj8c0LB{^Eg<59?s=3 zNeJKT5sG7yq#aKJF07PctHOGa9$;wSovC-1)owE*wC6cW05@iZoi;9lZWqO41|?}Q znC+vPC+n~c*8nV&VnjRLghU4-m>D8s*_cyJLR0&)M9p4e0iAiR&eNDf*`0GHdx6Yj12?(z=2Cs+PU!MfG?Xm zW`O|x_ILTL7roDWfdDd`Ua?!gf5@qRUn2M?0Bv()?TlKJA7ZYo3J;9`4H-*w;I#+c+SFd(_ zENmk<3$9tmT7Ge5&LjX3IT_CP0NG9FU+^)Gx^6QMBx%r7nxs<9zYzUCLqw)Pt~HpenlSEIyRoD|?F1ej*+ks{f-DhBub`|0BQq0zZgy(7RZHGxv+niD~>13in$6Au6 zJ4mAAppsRM8~>hdZO(U*Y>@q@lfv%fW)UMcdDCgX!3@J5`S6g2{_Qj5ZhA02{rVgq zZt7UO8M@^ReJt&tex#2&&np)0Na6Xp@*N?n7w()Mk8wUL>w8RziQ!04v&_SvJ^th0 zHa5|tMqZw-8@lKA0#Y-*38kdI1D_ilL3^v~h>jvk&}G8JxCcwZI(1N7eE=LcJo31% zl7WJm{_46_&WGgzc=Y<2`i9<>Ie-QD$zRjr4EDq&=R;cR1ffNsy(c?*3iH!PW`RZ_ zf&10u=WH@SF!B~aWXFj`>wBOs+F4=Bk`9(A)mX#&5|0lj6KHq=E*T;nLJr?&CGxyeU7BDD+E9TN{ zk;mzS*g*R8gnOUcEr4}Rcz}4w9iGs>RYctXFF^7e$Gq2g1XpQ&Lj)Ixb8rHeDE{EP zqV}GkKzX&<6nrbB)T8W0feHm*H7WA4|Ffc4sPs3eZpgxy!gLG@plR!(a3OIX{f|)> zC^J!D>U6tiVR|I>EHJFpo)3zFk-Z{bn4Wh=z`Dv_Vee4?V#c;A-IjJ3g#Y)artnm; zkod(SGv=`HSk*deXn=Yv;5{XI~E}xmwFASuH6AF7lK_g zhn@64#Bf|Is9XWKWNi|d8c6@8P?+?;f%i^F}EK+P{7-*mN zK@>F_FM_BW%^x46a4PBOVs_`Ad-g?4{#3K6VR&V(8_f;aKzxVN#dt0HBIfiL=XBAV zDYIGQ(1c+qav<6DA)~uKC-A|B+9$`wa!j|v>U8T4} zr2hrr!izYqOCLprHHhtD=2~yj`+m7`KO{(ymzjA-kiYJI#jFEIfh9K<(;WW$J7~Jf z0?_Ahk7JtsOjWliHZplk^kbIFF*QH2p)plK1&hrzg6c_2rm%z{9_1@BHw&#h`f%Jm z-g<6M1h|&2xEe<6XW2?Jk^6tT$O~HV(QUJPu)YK zDi*mBs8nayQsSM?O0}nOS+G3!Hs|>1UR;XmWYcw$9>9R?q%a{a?quk4@Ud296f{h| zfJ2F*#Gr>md1OZ+UG%ijgu{|2dmm=%UyI99JA-5#78{^?@?vvz0bA%G_B9#%q z9}=7RP?C#GbV4H?uJFL(J}cj1Dq!1A?&Ho=Ga#irg?t2#e|U*6v7hN>`v~y05EA`Pwa0#x?^~ceDErnB6*lLvEsANl0W!?# z@IbF;w@xRpIK0YX2K?QT)VreVs+|4VdORtWYDq7BOr(H9*H zVU-Kzdsd?qFs1*k@vsxZkCS2Uz-I2n<$Ukm74>rj8vJaZKc>orFZRad$6d0S8NfS# zZb!()^|f*azhfMUAA@2Fe!p}=c`qvBckvcS{V7Y8UgTRbqte7do_C>P2qTZ7II(G= zA85AFo!bgUcN5KMDWmhu{DoB-FmPy@L-K2eO7R%?5o#!{5<=c2WXF|R8K=^MyiUQ}Yl? zcp8~^zZcb1r}EnJkRXX%zIHPA7?GKF4h5AXpxTd1D#R)r-S>WRB|$<6oe3BBpdG0q zCtNQepOD`WQjO!kM!24%Tv|ZRh^>`n{A#bnXUALdRrS6if(>5^jXsX(I_zgCU?zmm zHY_`GD(c3?TUozrZuM)1h+qG3eKACRCVG#WIw=n2vzfSTA^1aJ zfdgSOlTyiAvnhGWVc9PDA&HPsD=NjV-?aj1zZV^ zd%b?bQp$vFDqrai?g`Cd4tlIQ^x)S_j~nUWNf+j z*)HPK`Y~FSP)6CO=eB)UNku)i7eD!3LX+bPPp;6F_lh_B6x>$AWOWFcIj)O%nnzP~ zYh4tKHojq#5p^OX8MK5+C^r6LDycEXjz%_JCL4C%Qda@3_* z)Aou*yk1V`uc0(Jza0cn{zR0~Sf$@Ce%wb%jb7Y)s@ZO-Et*FmO65}YYHzhlJ{$%2 ziKP{46va1;w|ip)h*;JZ;SE%ymeZgh$)v`3&viBivp$B;hpf+8cZPD6g6nn) zi~%;pfn=VP2!kxjS3pH8ne8Ly&EaNZDa{{M9Pt`NW0hD1Mgnt7F>Zo zf_`^t`C!-Ee1YI+hgE4Bf0iD*61$8l$BxK^Kf<)Xg3T6CRNhG%tz|v_ot55~glk5* zDODMb5*?6-BARgT7po?eiEv=KD@ataS=CxVdg(I)(qM2HP>6qIp8rGWhP>5F@n^hI z&`0ojXvrm@;Z6tHQOo5;&u9rey2Wv3Fb%b#=PDLdQpgxy-C&G_-}>66zTYWeckH>z3((^X)VSj>~==jrP|XA#@#5T#5f z1%c~7jKkC^m^2>0yR%)eO>^a{Ue>8zR`7I2**RHPN>)1kMi9YlA3*`W)u0d1-y(!8i$nwuI~!T0 zmw5A@I)fMn%Rd(j^OtI^G3I^-wq!#Ni+3)49}y!{E73<%KF@R$q{_;XCx2m+@rj?a zfePL@$pzU=Dr5Xahs0@Au#ZS{kBG6;J)9sHSVs8ldX_{s?- zNB~1^Z4Hwm`{qxUCf1=Gy*g&e&d(3kU^#|TYSKmC?FZ(5FToRtx(9Zps~&x3re0*4 zB3NxLDOn;cf`;jgo-Lx%e%IjTX}v?sD}B#KPu^@2iKeYKD0Xkmsdhk{F^M|NB>7>V zr?k0NNI)S;f46$;Du?pBy>dt=CdFfM)d93^kX=rf;mYEV9G(X|gS|wG`kax?73MaR zOomdL3O`7w$ol&lYi|#)Bn69BYDhpVyIUtnA}$L_an2EES^W`lZxxyPP)^#DRK+|% z_sjto4O>%nrvLe92mSif5DoaEU1{}qlf7FN-QCb*9?cw_AH=b_UB_U+FBgkJZF`-+ zcr3!UUFUdM)Sgs zF$d3b!;5LTnDb_oF}dVAxqt~h6tXG2Q~PJbK$!&nvutQ}EMnX7#-5SePAq%>@MJ8g zYtpBs436pP4LdM0cp%vb_80Lp{H8nNA9sYQ(isB9Q5IH24Jv0AJS>8FNAf!>?B9dB@YTs@Z(CLMz z-*FF?XwZ`@I&QrA2Cwi*s)%J`R4#iz7N02vD|FGD8KwR^j|e zz)bdWEs?>Q_thY@v&Z$yKZ%M+3;rc)RztB%8QQ8WV1OEv5kuwWvA)}|H(ncBYnEY< z$I|jiTk{vSZM1VF=_dvJ^g`P-=$eI`{!+kc_#7?a({vH{DBWBMX~)91bI?P>6?SAk z{*%rsq|&M@p=CwkaH)d6fdHX)gK0Y9MsbTuE+)GMGrqMijO7~})-`XckA3U}(tfe0 zKBQ1$iEX*{=sS;O0ZkEG)MF;`@hb0xV5gs!ieD#p{Yq1dZjg$v`RG4>53AjvwCn zrKKvo1d>U*=>qN3jQ>(e*(TjUZQ2}0HQFDC%Bo6by8KQ`f?%<KXe$d`LTSre3*KbMMqjaml&f>eZGPsQdES&rk&(kGKjrXbcJTj}Y#7Zw^$5e|_4B!P`ugJ5 z{}o8zqAQpqN4_<+%{yjkU0b_HoLgRz-`i?qIzykzj_$Gmlrkf33Na{2bh9qoPx4uT zFxJT|cUkeQtu6htPgKL*&jH`XB4@syZdk)tfoJJ8U$0rx>8?@U8OSthzX`#>TD^KG zu=$jkXgmzrs)Zr44JNr;&7~{9L9~F!s7&acRrML#GMy|4iEd$|TGM0##}&f7Qi7++?~x_j{b4gg`ic zY+X)5IQlM`vS6{>;cK$)GqcF_lkJ|iiWUVy2qnoGdct(y5-dxyV4a=(VzQswyRV&J zRehtb#5F^V)xu)A81yEGd9+16@B{fB8M0p6${xCMHukT!U!H^zJHIbr3-G7$D|w^s z{i8Vb+?X{ed4Hda5{-oBY|oycty>x3WT1rp3LoQ&Z=DwQj8~7sSk3I5&o!{c$~hRI zIOkHtvKBSOhwafjV*O6bSsjupNR-U)gv!}LbnzJZ3iCMZ&g?*w8DgJ!C~xet@kMt4 z5#*w(P16-KPjN*{QB`;4@q-{LXyKmW^<{r+>)7w@6)Z;hk>8R`MTQ?Y9vu&F1}>~> zlk0Pn&jrd49bO&f>mQ&^|YRM!hF@7cH`z#?oSMqmY*9gY5f z!(XraKNrJ!LjApQ+mOIF2gugYN9kNv*|^RcXKjVxK1SXkI0Pe5Tt{GK>ffO+Zs7ro7gxpSi2fBxLI4B=`1^}ir0BxRO_3Op7)7}4|d)B zNw1+;F2K=R6nBuDO30U|mNzpnFsdzldy0r6r;gLdET=|S?&1<37B{6&J20kCyLf-Z zfi1`(mw4rRvLhjufO`kN?R7@5u;EcHS7K8EM)?V-2Z%*&BClgbmaXsD0K_O=d^+z3 zCx_kk4i~ZTn^9c@3nle)JbOwYb_=T6B@0mI2RhJq=ogm!fckfKWqznu$id1 z09UJga%2KXh@NpiiOG2GTO6{~<7F39$6H`!xyohp6R_o5jx?IGuG>&)IB0bhoD`F- z#^<56x>c)k|D6*uAQ01-VGoIzNafd=%Tywc`ijAk-g4V~v$f8{t_`XRK1mT!N9b`+ zAJ{f$R#=Rf4qfP`Fj&?Q+mv^Zi{EeVJC>5X?%QBl-;q!qpH8`0dar$O7Qo|tZ=B!W zdU$O=78rl?+!DLjNjQ><_qNSm5_mwx93`F`-@m_*+@7egem|Y%(Cp_RSLD=a2S!YhWyaDDAD*tBUsA** z1Qwc<&T+R9mPbnb{;VLXO~h_0R8`OQ-Ke*C+@IPj1U-;7UOVB`5ci@e%d74;=cDYX zJwFYOM{@1~?By((0vjC)l(M2vvMPPt4hPZmsXh9`pD6|fOd)%Ca-z|I)8?xSZ;*o4 zpu0yL9OSK&2e)1E3b!5Ns3#=e9LkWkjzDKQL5z(DjHu&M)*Q)aq<%loW@cJA42H7PL`^f0mKp?@mk`tj|HAH6)H4VM%YLD6* z;`9)bcRI{;v)FV=DvBU6?@iWAOB+vnOKT_hyNiqW_2uf`U9EiWjat7D0$2c2KJ^hG z!HOZtiO{~Z(6UI0}giA}J-Q&2>O^k?YL&{tIEoR*)V zidE*?0yp!(}`NJoAn!xKFwN5tmP+Zx%Q_Wa~n6Ej?>Zr8Vd)I=4)jDQ18S@0+_Qg$JGP-5o2;Enzw8;fLo*Mu+p>XnL!5E9!eJ`V!)V);`Nd z#~PxycBC`Wfo2S~sjSBTPM*cM^4U0sBT<;sdFwzgmJb;bA!940?w~TooMpiI;?%$I z&txnr{~qmrb}<>1P)o@1Iad4b?HhkDFCQY6Sh!c( z$q^}K|0bz!8ef?KxI3 zl1MNbKo!zP2FXnT%k5>YdYBeZ@l^vK{aa$KTe*iF(4_plCKh-9I;tD7+&z2`^6_vG39}e}%S!2s-}0 zfNxIkE9ZJu#F%Wo?=P)w8L(@@>9)f9w!*4?~ah5~)8hCMnsD8>hMoB&Lf_^GHS~h=efs0ma@5{Zg zo9O1F?Cnvt^TPP;e9Yxmfovx-nxpEZD!*G`(g>&QpoP8H!tRuYOokX-n87}?>0(KI zoHOsHwK2E@3~14Og?T(5(IL8gh)Ih~6owc=CBN)DC)q_!HYuf$2n*u z$4S;Z7uqgZpDOmV)7nbw<=eYw2_FNiRy^`n>ct^j5-HWb=e&FK>jCr@*n((yTZ#v zBgfU@0~=C_alS|26h8HAQGWmX}49l?Qqa_X97uM|5}i++qo${Tak_!6(qo>HjAYm zEWkS(^5kZ*EfCv)@U;0{-b4;?9xdpiL_ddzn6Z^*gT#5a2q5W_>!Ua%ya z`~YIV+-kV1GwsR@LvlW3i*+Oj?-%6OSg*cRY6$cd!wHD;m za=oz05gIE0AnLZAaV410dDP2!k$S^i2x+`&YuY+8UfbkOv!;>=phUEIS}{DgY{BSy zmD+wWQE&31$sC;BR^-zD9C8D;1;e)d8n)$Eimj>hc}~;qI3n`YUyE(&+Y5$o0oe6b z+6&|V$Jz;tGj??{seAyQC5x|v;k9?DeDyPUeD;?BhZ7{4yES|&k z^a0e(8QM+S=Ri-sTwAy~ztnQbBSBc$pjZ-1V$?VY((|vRZKz1+2&8Q=|1wTYdhX+2 zp(7$PamS{nQjVhlC$jcMq(M3q4Xzbvp;1EtujPOGTVI9o{z$uLa;xIz{Orkla6RDr z@K+jsxx!!HR*J7h9F)?VZm=qUk2ee^#_nzB{{}LcY;&#Ek5%2y84Wp_$W=ENVP;Dy zFb4msz?l5>7TMgWcQ?e0T&6wO;`3lGB{FQydzr$9$V-mfIyzR{{lNd^=HU4DDg@!d zC*`W?W#gfj#O2{TaH)fVS&GeClBgBib6MB(9RA+RUdBByi*wG$u??wjuXBRiK(o$T{v6z-=lba)avV)CHZ{^UFG1Xn)w8+O? z9fX!{n7wK2U0aGZGkFeEH9Lnqb;`%YlRA)Y=milWLsO1l!le$~O#}#dE&E>o1d7Cl zz_X-8w4&4PYT9uQ%x`$0lN#i``j|4Kj!nk>!lB(bbsfO(st=LBgr(gO9KbJin?ol3{2xHwuhtDq)eeQC zN|lbXG~UDxv^Fk=mR)2HI^*>6!47%e;do9FM_7fcVq8qZE3GpHpKo$Pv76zNThV*X zSH{R!S~LBC*i8!(3R^Sz_eMt^4j$Z}?$3el(NL+J;^U4?`Wrn=)zWkg*3-Y7A^sQz z@qN{|_0^9N=Lz)S)3?2kfBrf$P15?_V~0ArehN*h`7_irFtiTFZ_9@ypUyx~M6ll{ zwB>ov#sv+{#BeOwpfsdy4>wA--x&f8E-Dn>upht>g}&@}Cin;C)D=%sq&8z;sDF@l z-3k>lZ*~Hfb{$m*SGy=9c!qjBa=-DzUs3w;{_Dn9ZKD7fd; zIuc!3kmT$bo@Zuew|1pn{|h<^l;qS&$rp~#YiL!YEgnVg6sg6u3AOo>+bd(#G?|ND zjryqol2X_F2~QZD^s&j~zU!U~Q!}F@M6VVEV^VL=6b)?{Ytk?&yPu?~1`g0YYxEWz z5wXzOlp0#MtW87Pz^~a^uEj!d!q~K6+Q3r)T_Om|QD7aokQ`bFRZEe-sj$uvu&Aq+ zelOpLtQRucs*n#*p6L0!$@VP}oroTX{Uub{8DJWHduY7^4v0^wb~E+ zT+p2J{Hu@Fe$Y$E?myh_RuHdJuhF&@ZsG;?wlb6t7n09|hZtF&6I|lCx{KhVpnRKA zx0LJOEbhQrLisjmNms$6XdBeH+%aBn*p{0Jc7lVbJB1d@^3JL73 zNT2JGJ}ZP!Af3H1m|+&NO{6@O*>gV;AMYu5IBBAa0x ziM#4}={Y7!>;?{dL;1fr@f4TzUBchf#*9@I4Irb%)s_j-LcShf{Cwicq4<)*r^!CY zhIT|zC2^HNt`||2$+EB<0J>{Z`~om%DA(FE|M5v{t;R#}SBNy%HOIv3etf3lRP%MR z4ys=EX>nqF{OR!J&{Lhp7{ds~A9OMVIXWG5vSS-k@sj61&FIYek`Lj=esvhkb+d4W z;c>Xy>kb&Jd?IpaEJ*8_lvtj;1MQiWEhiz1VO$y zf#f$RP&v&shKXMtl3yK6H(UJqnc*n?bL!aB8W^ z>j1hP4Ud!=qiLRK4=J(=k(`&9Py=PjUjUR| zu3$UVvDWfPRUG&;?<~QctA!IEW`JnP*>w$lUvBZj`;_C_>ifoW>H7qUoA793`|7={ zpmywMCSe^F`kSAW!zHe;Ju)a}Ot}F?Qlb+@1%GDq-RI`sXITt8Z~@D(!=h-nbs zAklZd#$V3LH^KPW4iM0;kkDrnM!7{AtNnsfDR4o4haacC+)AUZ@cT)|s;MfE4p&F# zx4p6Dg=xVhpNL#b^Vto*Dm|SC$l>)*!_FLETAT8%zB*VB;9~58IX_O7oqWSOm*AMO zxfo8+=|vV6@~M|C6=1_X0@ZfR?1H2Vb=MPB{9(<<({&+J#_~#;m>4IWC|OVxgKf6=)b`>e11?t6V394)CMwMq`g3sGPU$P zJ5tT;n!#uZf_UlF`>cNOu=FKt8Fv%Yo_|R#lT_9nL3BXw!+RIgZv!IZuHonkn9mmz zqB3zh#}B>g&IE8UVY3k;?$oqZ0Nl+Yz@+4sfMPr_0_J*=Y-J5TGp$aNUb8#fWz9*m zvGA`}8i*kpOO>2`A5-Ehpb*V<1ycY&j}US38WW4^J|ee!i(*e`Ft5X>vb~Wj;4L)a z=oi*ph7X&slA${*Am~S-@l#cPO^5dW-k4Iko_1aAeB{EF>tix5u3B`eO}}#`Y^9}x z<3ZHXL=`*vq>Z9_+tI+3tFr>e!j>xR|0 zLSXgngkuHk436FWwey+M^^Tr_HJOtCXgI%d%4eZuL*DkTYx6E6>>Bpfe+usx-e#7dP3*{fi-c7JdC zA*b+M$>ee&E*>ddN}IJb$jM6V+{?-XxSxDK`Kkl>CMr_eO!@Su_G`s@o2p2gc^V43 zIPN;2{zBe44FZD?S_;Klf7qPn{lbGug-#_yaZHa7kj#k>_{j}sI=~c)UPzsrC%aJ5 zII}iF*+CK1&}6@CUmF|U6PDW3;n&9Tt$rdkTdo;p{pCU-3tK|YLMaZ!p%c( z%tP~gX66plrF-fGUcI>x)F z$@SKz#Kl_XQ1LeNS%vAA*=cScWkY#!9i~sw*%QHeDgS zGkiLm2bmKSMPT~|79c!zck^Xuy^#^hfY~Nq(Inr-Uvn;pDacBkV14{OMg_{e(L%7F zz3v`wPMz>|rRU)G`i(91cM}3U%LlczPpk>~?dYPg5F+SWnK4JD)77RJn+gWO|ZR#&GrMvZHiN(x! zaS@_l(fbR46H*|mce2YJ&ckJCBl&EZ=0-nvj%f9IOI}~OC3xF3;mO;BzGV8^(qt#& zlgNWU)QiU&?BXj@os%|Q9^Q65_JGmi4tmBh3|u+gH8s;zoy}3-#|z(k-81X9dS~Xe zPNK}yQ9RLf)?Xudphop%x@evAoP$#E=;aNYhDTCg_*g*bC!Ln2E(p231m8ZItUTmXnI{lYDy&$@h5UC5=qf=E(Mv>)MBw zRE1!}p+-psM-@|;4D^iS>nkS%M)a!+D?E_lVfeXpiQ{b$gGzK29a;5}QXpeOi{?zx z*MJsL)8BZkZ2UCimINsg%y8pJ{l#^f%l$yp^JB?iOM?+!{Rja6o_Sg(BcaY7HvDw)MRW6=|Dp9W%|Z|QCn+SeYr^PuAAosWB*f;Ep=gaWc=57W5$d2j^uSZ)wnyD9~{oNQ=HLuvd?F&p)uvX7@2 zo>DK7;L{%M)7C#7ZROYL8m?J$)v(<6_O;ErRKZgr?ot(I}Ap{X`c7LnC zCwjkn|F6m^pZEx0!}R(>Af)pGT-Lw7Svfi^SrYk4cN z%srPHRLi>DR4TfH7{_e42avz4Up*FCQD!9>jtqe7An>e12<|sH%|lWjdQM=RSx=>v zHY%t8N<1p0VX*p;L><&IhdhKBI7CNVwnPo>sz3)lIiz>! zSZ8d@^zc`#1_b&VCdUHKK`;x)P@wFhQwj4%^e``)d+(^_CpAaqfi!-+6rjUrj!wM4 zPf_m>Pa|$jc2rrRwn<0QhE7}R+JmqRPKp{--LXrgSJb4{^;hlzIMKm>9_ZfR4#40O z-;We5NBRQp2&SVVPMVHSMz(|gtZM*txd4kn(!(cc?qsAnpgj}CSZ5uz*WGX*C5OHE zrPPO0J$WfeC=BTTzqHgM!2F|u+tv@>yXu+=j%GqAEUu>qNU{vWh9p(OwS literal 0 HcmV?d00001 diff --git a/.github/diagram-entity-relationship/der.png b/.github/diagram-entity-relationship/der.png new file mode 100644 index 0000000000000000000000000000000000000000..b9788ddbfb03179a5f75989ef6f7041658115bfc GIT binary patch literal 45607 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 Date: Tue, 19 Jan 2021 14:52:49 -0300 Subject: [PATCH 11/80] Remover e2e testes --- test/app.e2e-spec.ts | 24 ------------------------ test/jest-e2e.json | 9 --------- 2 files changed, 33 deletions(-) delete mode 100644 test/app.e2e-spec.ts delete mode 100644 test/jest-e2e.json diff --git a/test/app.e2e-spec.ts b/test/app.e2e-spec.ts deleted file mode 100644 index 50cda623..00000000 --- a/test/app.e2e-spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { INestApplication } from '@nestjs/common'; -import * as request from 'supertest'; -import { AppModule } from './../src/app.module'; - -describe('AppController (e2e)', () => { - let app: INestApplication; - - beforeEach(async () => { - const moduleFixture: TestingModule = await Test.createTestingModule({ - imports: [AppModule], - }).compile(); - - app = moduleFixture.createNestApplication(); - await app.init(); - }); - - it('/ (GET)', () => { - return request(app.getHttpServer()) - .get('/') - .expect(200) - .expect('Hello World!'); - }); -}); diff --git a/test/jest-e2e.json b/test/jest-e2e.json deleted file mode 100644 index e9d912f3..00000000 --- a/test/jest-e2e.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "moduleFileExtensions": ["js", "json", "ts"], - "rootDir": ".", - "testEnvironment": "node", - "testRegex": ".e2e-spec.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - } -} From 92a5d9177bd0536b8c8cdacdfcef3a610b0b67ef Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:53:38 -0300 Subject: [PATCH 12/80] Adicionar gitkeep p/ falar que existe arquivos --- uploads/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 uploads/.gitkeep diff --git a/uploads/.gitkeep b/uploads/.gitkeep new file mode 100644 index 00000000..e69de29b From 3a7f887892a95ccf7b4c9b061c9784c607981923 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:54:25 -0300 Subject: [PATCH 13/80] =?UTF-8?q?Adicionar=20novas=20depend=C3=AAncias=20e?= =?UTF-8?q?=20configs=20no=20package?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index fc6bfd56..9cc49f58 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "challenge-api", "version": "0.0.1", - "description": "", - "author": "", + "description": "API em desenvolvimento para o processo seletivo de estágio na ClubPetro", + "author": "Lucas Pereira Miranda", "private": true, "license": "UNLICENSED", "scripts": { @@ -10,7 +10,7 @@ "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", - "start:dev": "nest start --watch", + "start:dev": "env-cmd -f .env nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", @@ -18,15 +18,28 @@ "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./test/jest-e2e.json" + "test:e2e": "jest --config ./test/jest-e2e.json", + "typeorm": "env-cmd -f .env ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --config src/config/orm.config.ts" }, "dependencies": { "@nestjs/common": "^7.5.1", + "@nestjs/config": "^0.6.1", "@nestjs/core": "^7.5.1", "@nestjs/platform-express": "^7.5.1", + "@nestjs/serve-static": "^2.1.4", + "@nestjs/typeorm": "^7.1.5", + "@types/dotenv": "^8.2.0", + "class-transformer": "^0.3.2", + "class-validator": "^0.13.1", + "dotenv": "^8.2.0", + "env-cmd": "^10.1.0", + "helmet": "^4.3.1", + "multer": "^1.4.2", + "mysql": "^2.18.1", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", - "rxjs": "^6.6.3" + "rxjs": "^6.6.3", + "typeorm": "^0.2.30" }, "devDependencies": { "@nestjs/cli": "^7.5.1", @@ -34,6 +47,7 @@ "@nestjs/testing": "^7.5.1", "@types/express": "^4.17.8", "@types/jest": "^26.0.15", + "@types/multer": "^1.4.5", "@types/node": "^14.14.6", "@types/supertest": "^2.0.10", "@typescript-eslint/eslint-plugin": "^4.6.1", @@ -46,7 +60,7 @@ "supertest": "^6.0.0", "ts-jest": "^26.4.3", "ts-loader": "^8.0.8", - "ts-node": "^9.0.0", + "ts-node": "^9.1.1", "tsconfig-paths": "^3.9.0", "typescript": "^4.0.5" }, From ad951e8547d30c20a497b052ce9d05deca67fc22 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:54:48 -0300 Subject: [PATCH 14/80] =?UTF-8?q?Novas=20altera=C3=A7=C3=B5es=20no=20yarn.?= =?UTF-8?q?lock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yarn.lock | 390 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 375 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0648cecb..eb8332ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -572,6 +572,18 @@ tslib "2.0.3" uuid "8.3.2" +"@nestjs/config@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@nestjs/config/-/config-0.6.1.tgz#26e4bfd4b2f9d3a6b6bed6445a2a1e766abdf1c6" + integrity sha512-sSIEbHp0xV7bneG2/CePqJh60ELojsBXBPuRM40AcVQwuDRQQ4RAnLT5uaJbWB2xFQjQwik4zejN+27t1cCiBQ== + dependencies: + dotenv "8.2.0" + dotenv-expand "5.1.0" + lodash.get "4.4.2" + lodash.has "4.5.2" + lodash.set "4.3.2" + uuid "8.3.1" + "@nestjs/core@^7.5.1": version "7.6.5" resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-7.6.5.tgz#93c642d1abf8d3f09f8f78c262814eaf83bc2ad6" @@ -606,6 +618,13 @@ fs-extra "9.0.1" pluralize "8.0.0" +"@nestjs/serve-static@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nestjs/serve-static/-/serve-static-2.1.4.tgz#d25f7691b0cb19d3f12d161129dd1469dfdc880d" + integrity sha512-w2PpLKzQOB8rJ+vMOy28xm8jwE8VjJfA9U+KOm0H0OY62g2oOWJ+OQPSDogP7XxAzZwq+Bt8wNU2oS8+z6v6Zg== + dependencies: + path-to-regexp "0.1.7" + "@nestjs/testing@^7.5.1": version "7.6.5" resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-7.6.5.tgz#e2ee5c8a26e303cba17de858b1d7f64d7b0eef98" @@ -614,6 +633,13 @@ optional "0.1.4" tslib "2.0.3" +"@nestjs/typeorm@^7.1.5": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@nestjs/typeorm/-/typeorm-7.1.5.tgz#50e3bf85ff8cf78d47d8dd19210c5f02b488f5e3" + integrity sha512-utE1FkYM/gyCXUqw3zKYYS0YZ3DfkAnzsCx4T48cNnSDTCeWS+u3yt0FMDFjwSiQSaLrzpiSff/FaxJQvRlYow== + dependencies: + uuid "8.3.1" + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -666,6 +692,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@sqltools/formatter@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.2.tgz#9390a8127c0dcba61ebd7fdcc748655e191bdd68" + integrity sha512-/5O7Fq6Vnv8L6ucmPjaWbVG1XkP4FO+w5glqfkIsq3Xw4oyNAdJddbnYodNDAfjVUvo/rrSCTom4kAND7T1o5Q== + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -724,6 +755,13 @@ resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8" integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog== +"@types/dotenv@^8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-8.2.0.tgz#5cd64710c3c98e82d9d15844375a33bf1b45d053" + integrity sha512-ylSC9GhfRH7m1EUXBXofhgx4lUWmFeQDINW5oLuS+gxWdfUeW4zJdeVTYVkexEW+e2VUvlZR2kGnGGipAWR7kw== + dependencies: + dotenv "*" + "@types/eslint-scope@^3.7.0": version "3.7.0" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" @@ -759,7 +797,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@^4.17.8": +"@types/express@*", "@types/express@^4.17.8": version "4.17.11" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== @@ -818,6 +856,13 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== +"@types/multer@^1.4.5": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.5.tgz#db0557562307e9adb6661a9500c334cd7ddd0cd9" + integrity sha512-9b/0a8JyrR0r2nQhL73JR86obWL7cogfX12augvlrvcpciCo/hkvEsgu80Z4S2g2DHGVXHr8pUIi1VhqFJ8Ufw== + dependencies: + "@types/express" "*" + "@types/node@*", "@types/node@^14.14.6": version "14.14.21" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.21.tgz#d934aacc22424fe9622ebf6857370c052eae464e" @@ -893,6 +938,11 @@ dependencies: source-map "^0.6.1" +"@types/validator@^13.1.3": + version "13.1.3" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.1.3.tgz#366b394aa3fbeed2392bf0a20ded606fa4a3d35e" + integrity sha512-DaOWN1zf7j+8nHhqXhIgNmS+ltAC53NXqGxYuBhWqWgqolRhddKzfZU814lkHQSTG0IUfQxU7Cg0gb8fFWo2mA== + "@types/webpack-sources@*": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" @@ -1230,6 +1280,11 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.11.0" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" @@ -1240,6 +1295,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1254,6 +1314,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: 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 sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1270,6 +1335,11 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +app-root-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" + integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== + append-field@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" @@ -1437,6 +1507,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +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== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1462,6 +1537,11 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bignumber.js@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" + integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -1549,6 +1629,14 @@ buffer-from@1.x, buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + busboy@^0.2.11: version "0.2.14" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" @@ -1617,6 +1705,17 @@ chalk@3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.0.0, chalk@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1691,6 +1790,11 @@ cjs-module-lexer@^0.6.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +class-transformer@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.3.2.tgz#779ef5f124784324b40f8e927c774bd96cdecd4b" + integrity sha512-9QY6QXBH/+Gt1C3HBmJCrgY6+EFpIa6aLjfDnlXFx0zQl/HjrCE7qoaI0srNrxpMIfsobCpgUdDG5JYtJOpVsw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1701,6 +1805,15 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +class-validator@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.13.1.tgz#381b2001ee6b9e05afd133671fbdf760da7dec67" + integrity sha512-zWIeYFhUitvAHBwNhDdCRK09hWx+P0HUwFE8US8/CxFpMVzkUK8RJl7yOIE+BVu2lxyPNgeOaFv78tLE47jBIg== + dependencies: + "@types/validator" "^13.1.3" + libphonenumber-js "^1.9.7" + validator "^13.5.2" + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -1708,6 +1821,18 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-highlight@^2.1.10: + version "2.1.10" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.10.tgz#26a087da9209dce4fcb8cf5427dc97cd96ac173a" + integrity sha512-CcPFD3JwdQ2oSzy+AMG6j3LRTkNjM82kzcSKzoVw6cLanDCJNlsLjeqVTOTfOfucnWv5F0rmBemVf1m9JiIasw== + dependencies: + chalk "^4.0.0" + highlight.js "^10.0.0" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + cli-spinners@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" @@ -1737,6 +1862,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.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" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -1801,7 +1935,7 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@4.1.1: +commander@4.1.1, commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== @@ -2084,6 +2218,16 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" +dotenv-expand@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@*, dotenv@8.2.0, dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2153,6 +2297,14 @@ enquirer@^2.3.5: dependencies: ansi-colors "^4.1.1" +env-cmd@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/env-cmd/-/env-cmd-10.1.0.tgz#c7f5d3b550c9519f137fdac4dd8fb6866a8c8c4b" + integrity sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA== + dependencies: + commander "^4.0.0" + cross-spawn "^7.0.0" + errno@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -2177,7 +2329,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, 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 sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -2535,6 +2687,11 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +figlet@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c" + integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww== + figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -2718,7 +2875,7 @@ gensync@^1.0.0-beta.1: 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.1: +get-caller-file@^2.0.1, 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== @@ -2766,7 +2923,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -2825,6 +2982,13 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2873,6 +3037,16 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +helmet@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-4.3.1.tgz#e374e2fb3f8da045d0233f13299b1fde6e59e4e1" + integrity sha512-WsafDyKsIexB0+pUNkq3rL1rB5GVAghR68TP8ssM9DPEMzfBiluEQlVzJ/FEj6Vq2Ag3CNuxf7aYMjXrN0X49Q== + +highlight.js@^10.0.0: + version "10.5.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.5.0.tgz#3f09fede6a865757378f2d9ebdcbc15ba268f98f" + integrity sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw== + hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" @@ -2933,6 +3107,11 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -2972,7 +3151,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3649,7 +3828,7 @@ js-tokens@^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: +js-yaml@^3.13.1, js-yaml@^3.14.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -3817,6 +3996,11 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libphonenumber-js@^1.9.7: + version "1.9.8" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.9.8.tgz#82f88ea473c2214667709c24220bade4b85e0752" + integrity sha512-gXzuhvlqdH20MlKAy1jXOVouCYByz43ZGCAeNnNuKQXUM+Wl36gbql0M27QQI3ahYCHJErd2W8ciqWweoQdbrQ== + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -3843,11 +4027,26 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.get@4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.has@4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" + integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= + lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.set@4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -4034,7 +4233,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@1.x: +mkdirp@1.x, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -4061,7 +4260,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -multer@1.4.2: +multer@1.4.2, multer@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.2.tgz#2f1f4d12dbaeeba74cb37e623f234bf4d3d2057a" integrity sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg== @@ -4080,6 +4279,25 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mysql@^2.18.1: + version "2.18.1" + resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.18.1.tgz#2254143855c5a8c73825e4522baf2ea021766717" + integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig== + dependencies: + bignumber.js "9.0.0" + readable-stream "2.3.7" + safe-buffer "5.1.2" + sqlstring "2.3.1" + +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" + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -4202,7 +4420,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -4355,6 +4573,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parent-require@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" + integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc= + parse-json@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" @@ -4365,11 +4588,23 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@5.1.1: +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, 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" @@ -4606,7 +4841,7 @@ readable-stream@1.1.x: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.1, readable-stream@^2.2.2: +readable-stream@2.3.7, readable-stream@^2.0.1, readable-stream@^2.2.2: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -4846,6 +5081,11 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + saxes@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -4944,6 +5184,14 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +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@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -5123,6 +5371,11 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +sqlstring@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" + integrity sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A= + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -5212,6 +5465,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" @@ -5276,6 +5536,11 @@ supertest@^6.0.0: methods "1.1.2" superagent "6.1.0" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -5371,6 +5636,20 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + 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" + throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -5492,7 +5771,7 @@ ts-loader@^8.0.8: micromatch "^4.0.0" semver "^7.3.4" -ts-node@^9.0.0: +ts-node@^9.1.1: version "9.1.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== @@ -5528,7 +5807,7 @@ tslib@2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== -tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -5606,6 +5885,28 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typeorm@^0.2.30: + version "0.2.30" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.30.tgz#a0df2256402cbcdde8049a244437560495ce9b38" + integrity sha512-qpr8AO3Phi6ZF7qMHOrRdNisVt8jE1KfmW0ooLFcXscA87aJ12aBPyB9cJfxGNjNwd7B3WIK9ZlBveWiqd74QA== + dependencies: + "@sqltools/formatter" "1.2.2" + app-root-path "^3.0.0" + buffer "^5.5.0" + chalk "^4.1.0" + cli-highlight "^2.1.10" + debug "^4.1.1" + dotenv "^8.2.0" + glob "^7.1.6" + js-yaml "^3.14.0" + mkdirp "^1.0.4" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^1.13.0" + xml2js "^0.4.23" + yargonaut "^1.1.2" + yargs "^16.0.3" + typescript@4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389" @@ -5676,6 +5977,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@8.3.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== + uuid@8.3.2, uuid@^8.3.0: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -5708,6 +6014,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validator@^13.5.2: + version "13.5.2" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.5.2.tgz#c97ae63ed4224999fb6f42c91eaca9567fe69a46" + integrity sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ== + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -5872,6 +6183,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.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" @@ -5897,6 +6217,19 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml2js@^0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" @@ -5912,6 +6245,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -5922,7 +6260,16 @@ yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@20.x: +yargonaut@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c" + integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA== + dependencies: + chalk "^1.1.1" + figlet "^1.1.1" + parent-require "^1.0.0" + +yargs-parser@20.x, yargs-parser@^20.2.2: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== @@ -5952,6 +6299,19 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^16.0.0, yargs@^16.0.3: + 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" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From 940b6d52c5a2988f7f4875cf1ec0b078f9ad9793 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:55:21 -0300 Subject: [PATCH 15/80] Adicionar novos recursos e configs ao app.module --- src/app.module.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/app.module.ts b/src/app.module.ts index 86628031..73076cf4 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,10 +1,16 @@ -import { Module } from '@nestjs/common'; -import { AppController } from './app.controller'; -import { AppService } from './app.service'; +import { HttpModule, Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { FilesModule } from './files/files.module'; +import { CountriesModule } from './countries/countries.module'; +import { envConfig } from './config/env.load'; +import * as ormConfig from './config/orm.config'; @Module({ - imports: [], - controllers: [AppController], - providers: [AppService], + imports: [ + HttpModule.register({ baseURL: envConfig.api.baseUrl }), + TypeOrmModule.forRoot(ormConfig), + FilesModule, + CountriesModule, + ], }) export class AppModule {} From db4426dee36e1112c8b1f0e61db3649aede630ed Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:55:47 -0300 Subject: [PATCH 16/80] =?UTF-8?q?Adicionar=20novas=20configura=C3=A7=C3=B5?= =?UTF-8?q?es=20ao=20main?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 13cad38c..c063ff4c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,22 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; +import { ValidationPipe } from '@nestjs/common'; +import * as express from 'express'; +import * as helmet from 'helmet'; + +import { envConfig } from './config/env.load'; +import * as uploadConfig from './config/upload.config'; async function bootstrap() { const app = await NestFactory.create(AppModule); - await app.listen(3000); + app.setGlobalPrefix(envConfig.api.prefix); + app.useGlobalPipes(new ValidationPipe()); + app.use( + `${envConfig.api.prefix}/files`, + express.static(uploadConfig.default.directory), + ); + console.log(envConfig); + app.use(helmet()); + await app.listen(`${envConfig.api.port}`); } bootstrap(); From 7979390ad535ca6188455e5732afa196e1c18f8b Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:56:05 -0300 Subject: [PATCH 17/80] =?UTF-8?q?Adicionar=20arquivos=20de=20configura?= =?UTF-8?q?=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/env.load.ts | 41 +++++++++++++++++++++++++++++++++++++ src/config/orm.config.ts | 21 +++++++++++++++++++ src/config/upload.config.ts | 32 +++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 src/config/env.load.ts create mode 100644 src/config/orm.config.ts create mode 100644 src/config/upload.config.ts diff --git a/src/config/env.load.ts b/src/config/env.load.ts new file mode 100644 index 00000000..7a0269fd --- /dev/null +++ b/src/config/env.load.ts @@ -0,0 +1,41 @@ +interface ConfigProps { + api: { + port: number; + prefix: string; + baseUrl: string; + }; + db: { + connection: string; + host: string; + username: string; + password: string; + database: string; + port: number; + synchronize: boolean; + }; + multer: { + destinaton: string; + }; +} + +const env: any = process.env; + +export const envConfig: ConfigProps = { + api: { + baseUrl: env.API_BASE_URL || 'http://localhost', + port: parseInt(env.SERVER_PORT, 10) || 3000, + prefix: env.API_PREFIX || 'api/v1', + }, + db: { + connection: env.DB_CONNECTION, + host: env.DB_HOST, + username: env.DB_USERNAME, + password: env.DB_PASSWORD, + database: env.DB_NAME, + port: parseInt(env.DB_PORT, 10) || 3306, + synchronize: !!env.TYPEORM_SYNCHRONIZE, + }, + multer: { + destinaton: env.MULTER_DESTINATION, + }, +}; diff --git a/src/config/orm.config.ts b/src/config/orm.config.ts new file mode 100644 index 00000000..e5c5a8c9 --- /dev/null +++ b/src/config/orm.config.ts @@ -0,0 +1,21 @@ +import { ConnectionOptions } from 'typeorm'; +import { envConfig } from './env.load'; +import { resolve } from 'path'; + +const config: ConnectionOptions = { + type: 'mysql', + host: envConfig.db.host, + port: envConfig.db.port, + username: envConfig.db.username, + password: envConfig.db.password, + database: envConfig.db.database, + synchronize: envConfig.db.synchronize, + entities: [resolve(__dirname, '..', '**', '*.entity{.ts,.js}')], + migrationsRun: false, + migrations: [resolve(__dirname, '..', 'migrations', '**/*{.ts,.js}')], + cli: { + migrationsDir: resolve(__dirname, '..', 'migrations'), + }, +}; + +export = config; diff --git a/src/config/upload.config.ts b/src/config/upload.config.ts new file mode 100644 index 00000000..d3c0452d --- /dev/null +++ b/src/config/upload.config.ts @@ -0,0 +1,32 @@ +import { diskStorage } from 'multer'; +import { resolve, extname } from 'path'; +import { envConfig } from './env.load'; + +const folder = + envConfig.multer.destinaton || resolve(__dirname, '..', '..', 'uploads'); + +export default { + directory: folder, + storage: diskStorage({ + destination: folder, + filename: (req, file, cb) => { + const randomName = Array(32) + .fill(null) + .map(() => Math.round(Math.random() * 16).toString(16)) + .join(''); + return cb(null, `${randomName}${extname(file.originalname)}`); + }, + }), + fileFilter: (req, file, cb) => { + if ( + file.mimetype == 'image/png' || + file.mimetype == 'image/jpg' || + file.mimetype == 'image/jpeg' + ) { + cb(null, true); + } else { + cb(null, false); + return cb(new Error('Only .png, .jpg and .jpeg format for files!')); + } + }, +}; From fd962b251ed9725459c817cacfbde5213c54dfb6 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:56:26 -0300 Subject: [PATCH 18/80] Adicionar controller de countries --- src/countries/countries.controller.ts | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/countries/countries.controller.ts diff --git a/src/countries/countries.controller.ts b/src/countries/countries.controller.ts new file mode 100644 index 00000000..2369c65c --- /dev/null +++ b/src/countries/countries.controller.ts @@ -0,0 +1,30 @@ +import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common'; +import { CountriesService } from './countries.service'; +import { CreateCountryDto } from './dto/create-country.dto'; +import Country from './country.entity'; + +@Controller('countries') +export class CountriesController { + constructor(private readonly countriesService: CountriesService) {} + + @Post() + create(@Body() createCountryDto: CreateCountryDto): Promise { + const country = this.countriesService.create(createCountryDto); + return country; + } + + @Get() + findAll(): Promise { + return this.countriesService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string): Promise { + return this.countriesService.findOne(id); + } + + @Delete(':id') + remove(@Param('id') id: string): Promise { + return this.countriesService.remove(id); + } +} From cc754187e53865a98e83d1879bdddbbd03fee137 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:56:34 -0300 Subject: [PATCH 19/80] Adicionar module de countries --- src/countries/countries.module.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/countries/countries.module.ts diff --git a/src/countries/countries.module.ts b/src/countries/countries.module.ts new file mode 100644 index 00000000..b3a0b8da --- /dev/null +++ b/src/countries/countries.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import Country from './country.entity'; +import { CountriesController } from './countries.controller'; +import { CountriesService } from './countries.service'; +import { FilesModule } from '../files/files.module'; +@Module({ + imports: [TypeOrmModule.forFeature([Country]), FilesModule], + controllers: [CountriesController], + providers: [CountriesService], + exports: [TypeOrmModule], +}) +export class CountriesModule {} From aff3b2cc1e9b138e0959f57c62875265a88a3f62 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:56:44 -0300 Subject: [PATCH 20/80] Adicionar service de countries --- src/countries/countries.service.ts | 77 ++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/countries/countries.service.ts diff --git a/src/countries/countries.service.ts b/src/countries/countries.service.ts new file mode 100644 index 00000000..02ffdde5 --- /dev/null +++ b/src/countries/countries.service.ts @@ -0,0 +1,77 @@ +import { + BadRequestException, + Injectable, + NotFoundException, +} from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { CreateCountryDto } from './dto/create-country.dto'; +import Country from './country.entity'; +import File from '../files/file.entity'; + +@Injectable() +export class CountriesService { + constructor( + @InjectRepository(Country) + private countryRepository: Repository, + @InjectRepository(File) + private fileRepository: Repository, + ) {} + + public async create(createCountryDto: CreateCountryDto): Promise { + const { name, fileId } = createCountryDto; + const country = new Country(); + country.name = name; + country.file = fileId; + + /*Validacao para ver se o id de arquivo enviado existe*/ + const existsFile = await this.fileRepository.findOne(fileId); + if (!existsFile) { + throw new NotFoundException(`file with id ${fileId} not found!`); + } + + /*Validacao para garantir que + de um pais nao esteja associado a um mesmo arquivo (bandeira)*/ + const existsFileAssociatedCountry = await this.countryRepository.findOne({ + where: [{ file: country.file }], + }); + if (existsFileAssociatedCountry) { + throw new BadRequestException( + 'One flag file must be associated with only one country', + ); + } + + /*Validacao para evitar paises com nomes duplicados**/ + const duplicateCountryName = await this.countryRepository.findOne({ + where: [{ name: country.name }], + }); + if (duplicateCountryName) { + throw new BadRequestException('The Country cannot has duplicate name.'); + } + + await this.countryRepository.save(country); + return this.countryRepository.findOne(country.id); + } + + public findAll(): Promise { + return this.countryRepository.find(); + } + + public async findOne(id: string): Promise { + const country = await this.countryRepository.findOne(id); + if (!country) { + throw new NotFoundException(`Country whith id ${id} not found`); + } + return country; + } + + public async remove(id: string): Promise { + const country = await this.countryRepository.findOne(id); + if (!country) { + throw new NotFoundException(`Country whith id ${id} not found`); + } + if (country.file) { + await this.fileRepository.remove(country.file); + } + await this.countryRepository.delete(id); + } +} From 53e4814e0e873119d8366653a8f71a6c99664efd Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:56:58 -0300 Subject: [PATCH 21/80] Criar entity de countries --- src/countries/country.entity.ts | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/countries/country.entity.ts diff --git a/src/countries/country.entity.ts b/src/countries/country.entity.ts new file mode 100644 index 00000000..04c9eb51 --- /dev/null +++ b/src/countries/country.entity.ts @@ -0,0 +1,36 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, + OneToOne, + JoinColumn, +} from 'typeorm'; + +import File from '../files/file.entity'; + +@Entity({ name: 'countries' }) +class Country { + @PrimaryGeneratedColumn('increment') + id: number; + + @Column({ unique: true }) + @Column() + name: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @OneToOne(() => File, (file) => file.country, { + eager: true, + onDelete: 'CASCADE', + }) + @JoinColumn({ name: 'fileId' }) + file: File; +} + +export default Country; From 4d011053cbf87737ded052b6e543c1a3d41baf7c Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:57:18 -0300 Subject: [PATCH 22/80] =?UTF-8?q?Criar=20dto=20para=20a=20cria=C3=A7=C3=A3?= =?UTF-8?q?o=20de=20novos=20countries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/dto/create-country.dto.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/countries/dto/create-country.dto.ts diff --git a/src/countries/dto/create-country.dto.ts b/src/countries/dto/create-country.dto.ts new file mode 100644 index 00000000..dec3724b --- /dev/null +++ b/src/countries/dto/create-country.dto.ts @@ -0,0 +1,13 @@ +import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; + +import File from '../../files/file.entity'; + +export class CreateCountryDto { + @IsNotEmpty() + @IsString() + name: string; + + @IsNotEmpty() + @IsNumber() + fileId: File; +} From cfd241d8129b71d5fd58c13ae612f0a8de27ebe6 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:58:19 -0300 Subject: [PATCH 23/80] =?UTF-8?q?Mudar=20caminho=20dos=20testes=20(os=20te?= =?UTF-8?q?stes=20padr=C3=B5es=20do=20fw)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/countries.controller.spec.ts | 18 ++++++++++++++++++ src/countries/tests/countries.service.spec.ts | 18 ++++++++++++++++++ src/files/tests/files.controller.spec.ts | 18 ++++++++++++++++++ src/files/tests/files.service.spec.ts | 18 ++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 src/countries/tests/countries.controller.spec.ts create mode 100644 src/countries/tests/countries.service.spec.ts create mode 100644 src/files/tests/files.controller.spec.ts create mode 100644 src/files/tests/files.service.spec.ts diff --git a/src/countries/tests/countries.controller.spec.ts b/src/countries/tests/countries.controller.spec.ts new file mode 100644 index 00000000..3152b335 --- /dev/null +++ b/src/countries/tests/countries.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CountriesController } from '../countries.controller'; + +describe('CountriesController', () => { + let controller: CountriesController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [CountriesController], + }).compile(); + + controller = module.get(CountriesController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/countries/tests/countries.service.spec.ts b/src/countries/tests/countries.service.spec.ts new file mode 100644 index 00000000..ec947d48 --- /dev/null +++ b/src/countries/tests/countries.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CountriesService } from '../countries.service'; + +describe('CountriesService', () => { + let service: CountriesService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [CountriesService], + }).compile(); + + service = module.get(CountriesService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/files/tests/files.controller.spec.ts b/src/files/tests/files.controller.spec.ts new file mode 100644 index 00000000..f123f500 --- /dev/null +++ b/src/files/tests/files.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { FilesController } from '../files.controller'; + +describe('FilesController', () => { + let controller: FilesController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [FilesController], + }).compile(); + + controller = module.get(FilesController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/files/tests/files.service.spec.ts b/src/files/tests/files.service.spec.ts new file mode 100644 index 00000000..bacc5dda --- /dev/null +++ b/src/files/tests/files.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { FilesService } from '../files.service'; + +describe('FilesService', () => { + let service: FilesService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [FilesService], + }).compile(); + + service = module.get(FilesService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); From b730e730c22b2be1c8629555855796fd47461c3a Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:58:30 -0300 Subject: [PATCH 24/80] Criar entity para files --- src/files/file.entity.ts | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/files/file.entity.ts diff --git a/src/files/file.entity.ts b/src/files/file.entity.ts new file mode 100644 index 00000000..1f8791e7 --- /dev/null +++ b/src/files/file.entity.ts @@ -0,0 +1,56 @@ +import Country from 'src/countries/country.entity'; +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, + BeforeInsert, + OneToOne, + AfterRemove, +} from 'typeorm'; + +import { join } from 'path'; +import { promises } from 'fs'; +import { envConfig } from '../config/env.load'; +import * as uploadConfig from '../config/upload.config'; + +@Entity({ name: 'files' }) +class File { + constructor(hashedName: string) { + this.hashedName = hashedName; + } + + @PrimaryGeneratedColumn('increment') + id: number; + + @Column() + hashedName: string; + + @Column() + url: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @BeforeInsert() + setUrl() { + if (!this.url) { + this.url = `${envConfig.api.baseUrl}:${envConfig.api.port}${envConfig.api.prefix}/files/${this.hashedName}`; + } + } + + @AfterRemove() + async removeUploadedImage() { + const flagImagePath = join(uploadConfig.default.directory, this.hashedName); + await promises.unlink(flagImagePath); + } + + @OneToOne(() => Country, (country) => country.file) + country: Country; +} + +export default File; From 3dfe765be4e977c7ecf3341cbe7d6c5b1b047ccc Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:58:39 -0300 Subject: [PATCH 25/80] Adicionar controller para files --- src/files/files.controller.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/files/files.controller.ts diff --git a/src/files/files.controller.ts b/src/files/files.controller.ts new file mode 100644 index 00000000..7338e490 --- /dev/null +++ b/src/files/files.controller.ts @@ -0,0 +1,27 @@ +import { + Controller, + Get, + Param, + Post, + UploadedFile, + UseInterceptors, +} from '@nestjs/common'; +import File from './file.entity'; +import { FileInterceptor } from '@nestjs/platform-express'; +import { FilesService } from './files.service'; + +@Controller('files') +export class FilesController { + constructor(private readonly filesService: FilesService) {} + + @Post() + @UseInterceptors(FileInterceptor('file')) + create(@UploadedFile() file): Promise { + return this.filesService.create(file); + } + + @Get(':id') + findOne(@Param('id') id: string): Promise { + return this.filesService.findOne(id); + } +} From d934e9820f84861ef6f2cedd41885225cb4e544c Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:58:46 -0300 Subject: [PATCH 26/80] Criar module para files --- src/files/files.module.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/files/files.module.ts diff --git a/src/files/files.module.ts b/src/files/files.module.ts new file mode 100644 index 00000000..62d97255 --- /dev/null +++ b/src/files/files.module.ts @@ -0,0 +1,22 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { MulterModule } from '@nestjs/platform-express'; +import { FilesService } from './files.service'; +import { FilesController } from './files.controller'; +import File from './file.entity'; +import * as uploadConfig from '../config/upload.config'; + +@Module({ + imports: [ + MulterModule.register({ + storage: uploadConfig.default.storage, + dest: uploadConfig.default.directory, + fileFilter: uploadConfig.default.fileFilter, + }), + TypeOrmModule.forFeature([File]), + ], + providers: [FilesService], + controllers: [FilesController], + exports: [TypeOrmModule], +}) +export class FilesModule {} From 0c35aafc032240ee52ce7a0158bf14266e91f1c2 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:59:13 -0300 Subject: [PATCH 27/80] Adicionar dto de files --- src/files/dto/create-files.dto.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/files/dto/create-files.dto.ts diff --git a/src/files/dto/create-files.dto.ts b/src/files/dto/create-files.dto.ts new file mode 100644 index 00000000..0f4bb9ef --- /dev/null +++ b/src/files/dto/create-files.dto.ts @@ -0,0 +1,6 @@ +import { IsNotEmpty, IsString } from 'class-validator'; +export class CreateFileDto { + @IsString() + @IsNotEmpty() + filename: string; +} From d44ac910575096bfcf9f7292f8519cad66a8e8cd Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 19 Jan 2021 14:59:47 -0300 Subject: [PATCH 28/80] Criar service para files (contendo as bandeiras) --- src/files/files.service.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/files/files.service.ts diff --git a/src/files/files.service.ts b/src/files/files.service.ts new file mode 100644 index 00000000..b1bd5c67 --- /dev/null +++ b/src/files/files.service.ts @@ -0,0 +1,26 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { CreateFileDto } from './dto/create-files.dto'; +import File from './file.entity'; + +@Injectable() +export class FilesService { + constructor( + @InjectRepository(File) + private fileRepository: Repository, + ) {} + + async create({ filename }: CreateFileDto): Promise { + const file = await this.fileRepository.save(new File(filename)); + return file; + } + + async findOne(id: string): Promise { + const file = await this.fileRepository.findOne(id); + if (!file) { + throw new NotFoundException(`File whith id ${id} not found`); + } + return file; + } +} From 11d0dc8b32374740bc60ca41a70a9b995bcfcf2e Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Wed, 20 Jan 2021 11:50:51 -0300 Subject: [PATCH 29/80] Adicionar volume ao service mysql docker-compose --- docker-compose.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6469a6c3..a663c040 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -# docker compose apenas para ambiente de desenvolvimento - version: '3.7' services: @@ -12,9 +10,14 @@ services: ports: - ${DB_PORT}:${DB_PORT} restart: always + volumes: + - dbdata:/var/lib/mysql adminer: image: adminer restart: always ports: - - 8080:8080 \ No newline at end of file + - 8080:8080 + +volumes: + dbdata: \ No newline at end of file From 6a5d0a97be03dc8d432123d27df93a425628b72b Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Wed, 20 Jan 2021 11:51:34 -0300 Subject: [PATCH 30/80] =?UTF-8?q?Adicionar=20m=C3=B3dulo=20de=20locals=20a?= =?UTF-8?q?o=20m=C3=B3dulo=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.module.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app.module.ts b/src/app.module.ts index 73076cf4..e35ad6da 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -3,6 +3,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { FilesModule } from './files/files.module'; import { CountriesModule } from './countries/countries.module'; import { envConfig } from './config/env.load'; +import { LocalsModule } from './locals/locals.module'; import * as ormConfig from './config/orm.config'; @Module({ @@ -11,6 +12,7 @@ import * as ormConfig from './config/orm.config'; TypeOrmModule.forRoot(ormConfig), FilesModule, CountriesModule, + LocalsModule, ], }) export class AppModule {} From 3d48dec953fffbb3402b5a536166b991437900f3 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Wed, 20 Jan 2021 11:52:03 -0300 Subject: [PATCH 31/80] =?UTF-8?q?Adicionar=20rela=C3=A7=C3=A3o=20com=20Loc?= =?UTF-8?q?al=20em=20Country?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/country.entity.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/countries/country.entity.ts b/src/countries/country.entity.ts index 04c9eb51..4f5dc8ed 100644 --- a/src/countries/country.entity.ts +++ b/src/countries/country.entity.ts @@ -6,9 +6,11 @@ import { UpdateDateColumn, OneToOne, JoinColumn, + OneToMany, } from 'typeorm'; import File from '../files/file.entity'; +import Local from '../locals/local.entity'; @Entity({ name: 'countries' }) class Country { @@ -16,7 +18,6 @@ class Country { id: number; @Column({ unique: true }) - @Column() name: string; @CreateDateColumn() @@ -31,6 +32,9 @@ class Country { }) @JoinColumn({ name: 'fileId' }) file: File; + + @OneToMany(() => Local, (local) => local.country) + locals: Local[]; } export default Country; From f466a42474e077f0175800000b13acd1e26386ba Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Wed, 20 Jan 2021 11:54:41 -0300 Subject: [PATCH 32/80] =?UTF-8?q?Criar=20m=C3=B3dulo=20para=20Locals?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locals/locals.module.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/locals/locals.module.ts diff --git a/src/locals/locals.module.ts b/src/locals/locals.module.ts new file mode 100644 index 00000000..f86c8f38 --- /dev/null +++ b/src/locals/locals.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { LocalsService } from './locals.service'; +import { LocalsController } from './locals.controller'; +import Local from './local.entity'; +@Module({ + imports: [TypeOrmModule.forFeature([Local])], + providers: [LocalsService], + controllers: [LocalsController], +}) +export class LocalsModule {} From f5523af3a1398b7e5b16723ee9ff623f37abdcd0 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Wed, 20 Jan 2021 11:55:05 -0300 Subject: [PATCH 33/80] Criar estrutura para os resources de Locals --- src/locals/locals.controller.ts | 4 ++++ src/locals/locals.service.ts | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 src/locals/locals.controller.ts create mode 100644 src/locals/locals.service.ts diff --git a/src/locals/locals.controller.ts b/src/locals/locals.controller.ts new file mode 100644 index 00000000..76c9b1ee --- /dev/null +++ b/src/locals/locals.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('locals') +export class LocalsController {} diff --git a/src/locals/locals.service.ts b/src/locals/locals.service.ts new file mode 100644 index 00000000..329ea5bb --- /dev/null +++ b/src/locals/locals.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class LocalsService {} From f61180a9a0f55b7866601d252189ad38e72ce89b Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Wed, 20 Jan 2021 11:55:32 -0300 Subject: [PATCH 34/80] =?UTF-8?q?Adicionar=20testes=20pad=C3=B5es=20em=20/?= =?UTF-8?q?tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locals/tests/locals.controller.spec.ts | 18 ++++++++++++++++++ src/locals/tests/locals.service.spec.ts | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/locals/tests/locals.controller.spec.ts create mode 100644 src/locals/tests/locals.service.spec.ts diff --git a/src/locals/tests/locals.controller.spec.ts b/src/locals/tests/locals.controller.spec.ts new file mode 100644 index 00000000..93ccb1a4 --- /dev/null +++ b/src/locals/tests/locals.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { LocalsController } from './locals.controller'; + +describe('LocalsController', () => { + let controller: LocalsController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [LocalsController], + }).compile(); + + controller = module.get(LocalsController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/locals/tests/locals.service.spec.ts b/src/locals/tests/locals.service.spec.ts new file mode 100644 index 00000000..28f4e9de --- /dev/null +++ b/src/locals/tests/locals.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { LocalsService } from './locals.service'; + +describe('LocalsService', () => { + let service: LocalsService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [LocalsService], + }).compile(); + + service = module.get(LocalsService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); From 47cc17901528c8c6941d2e4d5b2ce426d9db89a7 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Wed, 20 Jan 2021 11:55:45 -0300 Subject: [PATCH 35/80] Criar entidate de Local --- src/locals/local.entity.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/locals/local.entity.ts diff --git a/src/locals/local.entity.ts b/src/locals/local.entity.ts new file mode 100644 index 00000000..b462a28a --- /dev/null +++ b/src/locals/local.entity.ts @@ -0,0 +1,34 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, + JoinColumn, + ManyToOne, +} from 'typeorm'; + +import Country from '../countries/country.entity'; + +@Entity({ name: 'locals' }) +class Local { + @PrimaryGeneratedColumn('increment') + id: number; + + @Column() + name: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @ManyToOne(() => Country, (country) => country.locals, { + eager: true, + }) + @JoinColumn({ name: 'localId' }) + country: Country; +} + +export default Local; From 7feb24a4d6fd8a00744af6167d07cd1143b2be86 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Wed, 20 Jan 2021 15:00:03 -0300 Subject: [PATCH 36/80] =?UTF-8?q?Mover=20locals=20para=20o=20dom=C3=ADnio?= =?UTF-8?q?=20de=20country=20(pa=C3=ADs)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/countries.module.ts | 3 ++- src/countries/country.entity.ts | 2 +- src/countries/locals/dto/create-local.dto.ts | 13 ++++++++++++ src/{ => countries}/locals/local.entity.ts | 4 ++-- src/countries/locals/locals.controller.ts | 15 ++++++++++++++ src/{ => countries}/locals/locals.module.ts | 0 src/countries/locals/locals.service.ts | 20 +++++++++++++++++++ .../locals/tests/locals.controller.spec.ts | 0 .../locals/tests/locals.service.spec.ts | 0 src/locals/locals.controller.ts | 4 ---- src/locals/locals.service.ts | 4 ---- 11 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 src/countries/locals/dto/create-local.dto.ts rename src/{ => countries}/locals/local.entity.ts (84%) create mode 100644 src/countries/locals/locals.controller.ts rename src/{ => countries}/locals/locals.module.ts (100%) create mode 100644 src/countries/locals/locals.service.ts rename src/{ => countries}/locals/tests/locals.controller.spec.ts (100%) rename src/{ => countries}/locals/tests/locals.service.spec.ts (100%) delete mode 100644 src/locals/locals.controller.ts delete mode 100644 src/locals/locals.service.ts diff --git a/src/countries/countries.module.ts b/src/countries/countries.module.ts index b3a0b8da..3dc6a49f 100644 --- a/src/countries/countries.module.ts +++ b/src/countries/countries.module.ts @@ -4,8 +4,9 @@ import Country from './country.entity'; import { CountriesController } from './countries.controller'; import { CountriesService } from './countries.service'; import { FilesModule } from '../files/files.module'; +import { LocalsModule } from './locals/locals.module'; @Module({ - imports: [TypeOrmModule.forFeature([Country]), FilesModule], + imports: [TypeOrmModule.forFeature([Country]), FilesModule, LocalsModule], controllers: [CountriesController], providers: [CountriesService], exports: [TypeOrmModule], diff --git a/src/countries/country.entity.ts b/src/countries/country.entity.ts index 4f5dc8ed..35d546dc 100644 --- a/src/countries/country.entity.ts +++ b/src/countries/country.entity.ts @@ -10,7 +10,7 @@ import { } from 'typeorm'; import File from '../files/file.entity'; -import Local from '../locals/local.entity'; +import Local from './locals/local.entity'; @Entity({ name: 'countries' }) class Country { diff --git a/src/countries/locals/dto/create-local.dto.ts b/src/countries/locals/dto/create-local.dto.ts new file mode 100644 index 00000000..264adabb --- /dev/null +++ b/src/countries/locals/dto/create-local.dto.ts @@ -0,0 +1,13 @@ +import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; + +import Country from '../../country.entity'; + +export class CreateLocalDto { + @IsNotEmpty() + @IsString() + name: string; + + @IsNotEmpty() + @IsNumber() + countryId: Country; +} diff --git a/src/locals/local.entity.ts b/src/countries/locals/local.entity.ts similarity index 84% rename from src/locals/local.entity.ts rename to src/countries/locals/local.entity.ts index b462a28a..d71c522b 100644 --- a/src/locals/local.entity.ts +++ b/src/countries/locals/local.entity.ts @@ -8,7 +8,7 @@ import { ManyToOne, } from 'typeorm'; -import Country from '../countries/country.entity'; +import Country from '../country.entity'; @Entity({ name: 'locals' }) class Local { @@ -27,7 +27,7 @@ class Local { @ManyToOne(() => Country, (country) => country.locals, { eager: true, }) - @JoinColumn({ name: 'localId' }) + @JoinColumn({ name: 'countryId' }) country: Country; } diff --git a/src/countries/locals/locals.controller.ts b/src/countries/locals/locals.controller.ts new file mode 100644 index 00000000..2cc34327 --- /dev/null +++ b/src/countries/locals/locals.controller.ts @@ -0,0 +1,15 @@ +import { Body, Controller, Post } from '@nestjs/common'; +import { CreateLocalDto } from './dto/create-local.dto'; +import Local from './local.entity'; +import { LocalsService } from './locals.service'; + +@Controller('locals') +export class LocalsController { + constructor(private readonly localsService: LocalsService) {} + + @Post() + create(@Body() createLocalDto: CreateLocalDto): Promise { + const local = this.localsService.create(createLocalDto); + return local; + } +} diff --git a/src/locals/locals.module.ts b/src/countries/locals/locals.module.ts similarity index 100% rename from src/locals/locals.module.ts rename to src/countries/locals/locals.module.ts diff --git a/src/countries/locals/locals.service.ts b/src/countries/locals/locals.service.ts new file mode 100644 index 00000000..f440f53b --- /dev/null +++ b/src/countries/locals/locals.service.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { CreateLocalDto } from './dto/create-local.dto'; +import Local from './local.entity'; + +@Injectable() +export class LocalsService { + constructor( + @InjectRepository(Local) + private localRepository: Repository, + ) {} + + async create(createLocalDto: CreateLocalDto): Promise { + const local = new Local(); + local.name = createLocalDto.name; + local.country = createLocalDto.countryId; + return await this.localRepository.save(local); + } +} diff --git a/src/locals/tests/locals.controller.spec.ts b/src/countries/locals/tests/locals.controller.spec.ts similarity index 100% rename from src/locals/tests/locals.controller.spec.ts rename to src/countries/locals/tests/locals.controller.spec.ts diff --git a/src/locals/tests/locals.service.spec.ts b/src/countries/locals/tests/locals.service.spec.ts similarity index 100% rename from src/locals/tests/locals.service.spec.ts rename to src/countries/locals/tests/locals.service.spec.ts diff --git a/src/locals/locals.controller.ts b/src/locals/locals.controller.ts deleted file mode 100644 index 76c9b1ee..00000000 --- a/src/locals/locals.controller.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Controller } from '@nestjs/common'; - -@Controller('locals') -export class LocalsController {} diff --git a/src/locals/locals.service.ts b/src/locals/locals.service.ts deleted file mode 100644 index 329ea5bb..00000000 --- a/src/locals/locals.service.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -@Injectable() -export class LocalsService {} From 84b30a02895ff6991b62d13ea2aa899c5821ad6d Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Wed, 20 Jan 2021 15:00:38 -0300 Subject: [PATCH 37/80] Remover LocalsModule de app.module --- src/app.module.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app.module.ts b/src/app.module.ts index e35ad6da..73076cf4 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -3,7 +3,6 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { FilesModule } from './files/files.module'; import { CountriesModule } from './countries/countries.module'; import { envConfig } from './config/env.load'; -import { LocalsModule } from './locals/locals.module'; import * as ormConfig from './config/orm.config'; @Module({ @@ -12,7 +11,6 @@ import * as ormConfig from './config/orm.config'; TypeOrmModule.forRoot(ormConfig), FilesModule, CountriesModule, - LocalsModule, ], }) export class AppModule {} From bb4959823e042946b11ea5aa42a4d1b6034ae9cb Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 13:34:44 -0300 Subject: [PATCH 38/80] Remover trigger onDelete Cascade --- src/countries/country.entity.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/countries/country.entity.ts b/src/countries/country.entity.ts index 35d546dc..0eb7def0 100644 --- a/src/countries/country.entity.ts +++ b/src/countries/country.entity.ts @@ -28,7 +28,6 @@ class Country { @OneToOne(() => File, (file) => file.country, { eager: true, - onDelete: 'CASCADE', }) @JoinColumn({ name: 'fileId' }) file: File; From 3decef96d627930c575260bdb70fac1b4da90734 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 13:57:38 -0300 Subject: [PATCH 39/80] =?UTF-8?q?Criar=20dto=20de=20atualiza=C3=A7=C3=A3o?= =?UTF-8?q?=20de=20locais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/locals/dto/update-local.dto.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/countries/locals/dto/update-local.dto.ts diff --git a/src/countries/locals/dto/update-local.dto.ts b/src/countries/locals/dto/update-local.dto.ts new file mode 100644 index 00000000..1667b513 --- /dev/null +++ b/src/countries/locals/dto/update-local.dto.ts @@ -0,0 +1,11 @@ +import { IsNumber, IsString } from 'class-validator'; + +import Country from '../../country.entity'; + +export class UpdateLocalDto { + @IsString() + name?: string; + + @IsNumber() + countryId?: Country; +} From 1aab564e0b5cd1f091ac6f30cd0132aae5aa91d1 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 17:42:09 -0300 Subject: [PATCH 40/80] =?UTF-8?q?Chamar=20m=C3=A9todo=20ao=20inv=C3=A9s=20?= =?UTF-8?q?do=20repository?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/files/files.service.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/files/files.service.ts b/src/files/files.service.ts index b1bd5c67..4f56b600 100644 --- a/src/files/files.service.ts +++ b/src/files/files.service.ts @@ -19,8 +19,13 @@ export class FilesService { async findOne(id: string): Promise { const file = await this.fileRepository.findOne(id); if (!file) { - throw new NotFoundException(`File whith id ${id} not found`); + throw new NotFoundException(`File with id ${id} not found`); } return file; } + + async remove(id: string): Promise { + const file = await this.findOne(id); + await this.fileRepository.remove(file); + } } From 2d98c5a109975fab96d141385c2b28d09ace9211 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 17:42:33 -0300 Subject: [PATCH 41/80] Exportar FilesService --- src/files/files.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/files/files.module.ts b/src/files/files.module.ts index 62d97255..37d1819e 100644 --- a/src/files/files.module.ts +++ b/src/files/files.module.ts @@ -17,6 +17,6 @@ import * as uploadConfig from '../config/upload.config'; ], providers: [FilesService], controllers: [FilesController], - exports: [TypeOrmModule], + exports: [TypeOrmModule, FilesService], }) export class FilesModule {} From f86bd4658669efe8779619edfd79005c8e7c73a2 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 17:43:07 -0300 Subject: [PATCH 42/80] Criar findLocalsByCountry --- src/countries/countries.controller.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/countries/countries.controller.ts b/src/countries/countries.controller.ts index 2369c65c..f17dd29d 100644 --- a/src/countries/countries.controller.ts +++ b/src/countries/countries.controller.ts @@ -2,6 +2,7 @@ import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common'; import { CountriesService } from './countries.service'; import { CreateCountryDto } from './dto/create-country.dto'; import Country from './country.entity'; +import Local from './locals/local.entity'; @Controller('countries') export class CountriesController { @@ -27,4 +28,9 @@ export class CountriesController { remove(@Param('id') id: string): Promise { return this.countriesService.remove(id); } + + @Get(':id/locals') + findLocalsByCountry(@Param('id') id: string): Promise { + return this.countriesService.findAllLocalsInCountry(id); + } } From 8131aee9dc86c077cb1dfeda2ed0cf4401c8794e Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 17:44:04 -0300 Subject: [PATCH 43/80] =?UTF-8?q?Contornar=20depend=C3=AAncia=20circular?= =?UTF-8?q?=20com=20forwardRef?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/countries.module.ts | 11 ++++++++--- src/countries/locals/locals.module.ts | 12 +++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/countries/countries.module.ts b/src/countries/countries.module.ts index 3dc6a49f..6413eacb 100644 --- a/src/countries/countries.module.ts +++ b/src/countries/countries.module.ts @@ -1,14 +1,19 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import Country from './country.entity'; import { CountriesController } from './countries.controller'; import { CountriesService } from './countries.service'; import { FilesModule } from '../files/files.module'; import { LocalsModule } from './locals/locals.module'; + @Module({ - imports: [TypeOrmModule.forFeature([Country]), FilesModule, LocalsModule], + imports: [ + TypeOrmModule.forFeature([Country]), + FilesModule, + forwardRef(() => LocalsModule), + ], controllers: [CountriesController], providers: [CountriesService], - exports: [TypeOrmModule], + exports: [TypeOrmModule, CountriesService], }) export class CountriesModule {} diff --git a/src/countries/locals/locals.module.ts b/src/countries/locals/locals.module.ts index f86c8f38..ec399d02 100644 --- a/src/countries/locals/locals.module.ts +++ b/src/countries/locals/locals.module.ts @@ -1,11 +1,17 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { LocalsService } from './locals.service'; import { LocalsController } from './locals.controller'; +import { CountriesModule } from '../countries.module'; import Local from './local.entity'; + @Module({ - imports: [TypeOrmModule.forFeature([Local])], - providers: [LocalsService], + imports: [ + TypeOrmModule.forFeature([Local]), + forwardRef(() => CountriesModule), + ], controllers: [LocalsController], + providers: [LocalsService], + exports: [TypeOrmModule, LocalsService], }) export class LocalsModule {} From 1e37335185e9892845cf557338af8e9530e62853 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 17:44:22 -0300 Subject: [PATCH 44/80] Criar novas funcionalidades em countries service --- src/countries/countries.service.ts | 52 +++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/src/countries/countries.service.ts b/src/countries/countries.service.ts index 02ffdde5..a92729b7 100644 --- a/src/countries/countries.service.ts +++ b/src/countries/countries.service.ts @@ -1,5 +1,7 @@ import { BadRequestException, + forwardRef, + Inject, Injectable, NotFoundException, } from '@nestjs/common'; @@ -7,28 +9,30 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { CreateCountryDto } from './dto/create-country.dto'; import Country from './country.entity'; -import File from '../files/file.entity'; +import { FilesService } from 'src/files/files.service'; +import { LocalsService } from './locals/locals.service'; +import Local from './locals/local.entity'; @Injectable() export class CountriesService { constructor( @InjectRepository(Country) private countryRepository: Repository, - @InjectRepository(File) - private fileRepository: Repository, + @Inject(FilesService) + private fileService: FilesService, + @Inject(forwardRef(() => LocalsService)) + private localService: LocalsService, ) {} public async create(createCountryDto: CreateCountryDto): Promise { const { name, fileId } = createCountryDto; + + /*Validacao para ver se o id de arquivo enviado existe, retornando o arquivo*/ + const file = await this.fileService.findOne(String(fileId)); + const country = new Country(); country.name = name; - country.file = fileId; - - /*Validacao para ver se o id de arquivo enviado existe*/ - const existsFile = await this.fileRepository.findOne(fileId); - if (!existsFile) { - throw new NotFoundException(`file with id ${fileId} not found!`); - } + country.file = file; /*Validacao para garantir que + de um pais nao esteja associado a um mesmo arquivo (bandeira)*/ const existsFileAssociatedCountry = await this.countryRepository.findOne({ @@ -59,7 +63,7 @@ export class CountriesService { public async findOne(id: string): Promise { const country = await this.countryRepository.findOne(id); if (!country) { - throw new NotFoundException(`Country whith id ${id} not found`); + throw new NotFoundException(`Country with id ${id} not found`); } return country; } @@ -67,11 +71,27 @@ export class CountriesService { public async remove(id: string): Promise { const country = await this.countryRepository.findOne(id); if (!country) { - throw new NotFoundException(`Country whith id ${id} not found`); - } - if (country.file) { - await this.fileRepository.remove(country.file); + throw new NotFoundException(`Country with id ${id} not found`); } - await this.countryRepository.delete(id); + await this.fileService.remove(String(country.file.id)); + await this.countryRepository.delete(country); + } + + public async verifyLocalNameExistsInCountry( + localName: string, + country: Country, + ): Promise { + const countryLocals = await this.findAllLocalsInCountry(String(country.id)); + const exists = countryLocals.find((local) => local.name === localName); + return !!exists; + } + + public async findAllLocalsInCountry(countryId: string): Promise { + await this.findOne(countryId); + const locals = await this.localService.findAll(); + const countryLocals = locals.filter( + (local) => local.country.id === Number(countryId), + ); + return countryLocals; } } From c614ff249498bebed866ee1f69a7eaa73a23d503 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 17:44:31 -0300 Subject: [PATCH 45/80] Criar update-local dto --- src/countries/locals/dto/update-local.dto.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/countries/locals/dto/update-local.dto.ts b/src/countries/locals/dto/update-local.dto.ts index 1667b513..13497def 100644 --- a/src/countries/locals/dto/update-local.dto.ts +++ b/src/countries/locals/dto/update-local.dto.ts @@ -1,11 +1,13 @@ -import { IsNumber, IsString } from 'class-validator'; +import { IsNumber, IsString, IsOptional } from 'class-validator'; import Country from '../../country.entity'; export class UpdateLocalDto { @IsString() + @IsOptional() name?: string; @IsNumber() + @IsOptional() countryId?: Country; } From b232e9e20f46b1c144f80cbbfa72d421bd161bf4 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 17:44:40 -0300 Subject: [PATCH 46/80] Criar novas funcionalidades em locals service --- src/countries/locals/locals.service.ts | 88 ++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 4 deletions(-) diff --git a/src/countries/locals/locals.service.ts b/src/countries/locals/locals.service.ts index f440f53b..44a15c57 100644 --- a/src/countries/locals/locals.service.ts +++ b/src/countries/locals/locals.service.ts @@ -1,20 +1,100 @@ -import { Injectable } from '@nestjs/common'; +import { + BadRequestException, + forwardRef, + Inject, + Injectable, + NotFoundException, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { CreateLocalDto } from './dto/create-local.dto'; import Local from './local.entity'; +import { CountriesService } from '../countries.service'; +import { UpdateLocalDto } from './dto/update-local.dto'; @Injectable() export class LocalsService { constructor( @InjectRepository(Local) private localRepository: Repository, + @Inject(forwardRef(() => CountriesService)) + private countryService: CountriesService, ) {} async create(createLocalDto: CreateLocalDto): Promise { + const { name, countryId } = createLocalDto; + + /*Validacao para ver se o id de country enviado existe, retornando o country*/ + const country = await this.countryService.findOne(String(countryId)); + + /*Validacao para ver se o pais ja possui o local nome*/ + const exists = await this.countryService.verifyLocalNameExistsInCountry( + name, + country, + ); + + if (exists) { + throw new BadRequestException( + `Local with name ${name} already exists in Country ${country.id}`, + ); + } + const local = new Local(); - local.name = createLocalDto.name; - local.country = createLocalDto.countryId; - return await this.localRepository.save(local); + local.name = name; + local.country = country; + + await this.localRepository.save(local); + return this.localRepository.findOne(local.id); + } + + async findAll(): Promise { + return await this.localRepository.find(); + } + + public async findOne(id: string): Promise { + const local = await this.localRepository.findOne(id); + if (!local) { + throw new NotFoundException(`Local with id ${id} not found`); + } + return local; + } + + public async remove(id: string) { + const local = await this.findOne(id); + await this.localRepository.delete(local); + } + + public async update( + id: string, + updateLocalDto: UpdateLocalDto, + ): Promise { + /*Verificar se existe local com id enviado na request, retornando o local*/ + const local = await this.findOne(id); + const { name, countryId } = updateLocalDto; + + if (!!countryId) { + const updatedCountry = await this.countryService.findOne( + String(countryId), + ); + local.name = name || local.name; + local.country = updatedCountry; + } else { + local.name = name || local.name; + } + + console.log(local.country.id); + + const exists = await this.countryService.verifyLocalNameExistsInCountry( + name, + local.country, + ); + if (exists) { + throw new BadRequestException( + `Local with name ${name} already exists in Country ${local.country.name}`, + ); + } + + await this.localRepository.save(local); + return this.localRepository.findOne(local.id); } } From 887c4e47438718f0634d8b11b77903ac65392a24 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 17:45:03 -0300 Subject: [PATCH 47/80] Desenvolver novos endpoints em locals controller --- src/countries/locals/locals.controller.ts | 34 ++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/countries/locals/locals.controller.ts b/src/countries/locals/locals.controller.ts index 2cc34327..c7e82bd1 100644 --- a/src/countries/locals/locals.controller.ts +++ b/src/countries/locals/locals.controller.ts @@ -1,5 +1,14 @@ -import { Body, Controller, Post } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + Get, + Param, + Post, + Put, +} from '@nestjs/common'; import { CreateLocalDto } from './dto/create-local.dto'; +import { UpdateLocalDto } from './dto/update-local.dto'; import Local from './local.entity'; import { LocalsService } from './locals.service'; @@ -12,4 +21,27 @@ export class LocalsController { const local = this.localsService.create(createLocalDto); return local; } + + @Get() + findAll(): Promise { + return this.localsService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string): Promise { + return this.localsService.findOne(id); + } + + @Put(':id') + update( + @Param('id') id: string, + @Body() updateLocalDto: UpdateLocalDto, + ): Promise { + return this.localsService.update(id, updateLocalDto); + } + + @Delete(':id') + remove(@Param('id') id: string): Promise { + return this.localsService.remove(id); + } } From 768766aadfc223d4bac6ebfc507bcd3f6c72cc7e Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 19:33:28 -0300 Subject: [PATCH 48/80] Criar estrutura para metas --- src/metas/metas.controller.ts | 4 ++++ src/metas/metas.module.ts | 9 +++++++++ src/metas/metas.service.ts | 4 ++++ src/metas/tests/metas.controller.spec.ts | 18 ++++++++++++++++++ src/metas/tests/metas.service.spec.ts | 18 ++++++++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 src/metas/metas.controller.ts create mode 100644 src/metas/metas.module.ts create mode 100644 src/metas/metas.service.ts create mode 100644 src/metas/tests/metas.controller.spec.ts create mode 100644 src/metas/tests/metas.service.spec.ts diff --git a/src/metas/metas.controller.ts b/src/metas/metas.controller.ts new file mode 100644 index 00000000..fa8cb380 --- /dev/null +++ b/src/metas/metas.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('metas') +export class MetasController {} diff --git a/src/metas/metas.module.ts b/src/metas/metas.module.ts new file mode 100644 index 00000000..4db980bd --- /dev/null +++ b/src/metas/metas.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { MetasController } from './metas.controller'; +import { MetasService } from './metas.service'; + +@Module({ + controllers: [MetasController], + providers: [MetasService] +}) +export class MetasModule {} diff --git a/src/metas/metas.service.ts b/src/metas/metas.service.ts new file mode 100644 index 00000000..e20fb89c --- /dev/null +++ b/src/metas/metas.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class MetasService {} diff --git a/src/metas/tests/metas.controller.spec.ts b/src/metas/tests/metas.controller.spec.ts new file mode 100644 index 00000000..92db0837 --- /dev/null +++ b/src/metas/tests/metas.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MetasController } from '../metas.controller'; + +describe('MetasController', () => { + let controller: MetasController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [MetasController], + }).compile(); + + controller = module.get(MetasController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/metas/tests/metas.service.spec.ts b/src/metas/tests/metas.service.spec.ts new file mode 100644 index 00000000..bf29e8ba --- /dev/null +++ b/src/metas/tests/metas.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MetasService } from '../metas.service'; + +describe('MetasService', () => { + let service: MetasService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [MetasService], + }).compile(); + + service = module.get(MetasService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); From 216c2cc07a59e3318d817e9cc2667abd15291d8a Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 19:35:03 -0300 Subject: [PATCH 49/80] Adicionar modulo de metas --- src/app.module.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app.module.ts b/src/app.module.ts index 73076cf4..5f8f0af2 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -3,6 +3,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { FilesModule } from './files/files.module'; import { CountriesModule } from './countries/countries.module'; import { envConfig } from './config/env.load'; +import { MetasModule } from './metas/metas.module'; import * as ormConfig from './config/orm.config'; @Module({ @@ -11,6 +12,7 @@ import * as ormConfig from './config/orm.config'; TypeOrmModule.forRoot(ormConfig), FilesModule, CountriesModule, + MetasModule, ], }) export class AppModule {} From 1f318b933e7db0e2a9ac61eb9eb522f8fde431d6 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 23:01:05 -0300 Subject: [PATCH 50/80] =?UTF-8?q?Adicionar=20date-fns=20as=20depend=C3=AAn?= =?UTF-8?q?cias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 ++ yarn.lock | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/package.json b/package.json index 9cc49f58..be755869 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@types/dotenv": "^8.2.0", "class-transformer": "^0.3.2", "class-validator": "^0.13.1", + "date-fns": "^2.16.1", "dotenv": "^8.2.0", "env-cmd": "^10.1.0", "helmet": "^4.3.1", @@ -45,6 +46,7 @@ "@nestjs/cli": "^7.5.1", "@nestjs/schematics": "^7.1.3", "@nestjs/testing": "^7.5.1", + "@types/date-fns": "^2.6.0", "@types/express": "^4.17.8", "@types/jest": "^26.0.15", "@types/multer": "^1.4.5", diff --git a/yarn.lock b/yarn.lock index eb8332ca..60986bcb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -755,6 +755,13 @@ resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8" integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog== +"@types/date-fns@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@types/date-fns/-/date-fns-2.6.0.tgz#b062ca46562002909be0c63a6467ed173136acc1" + integrity sha1-sGLKRlYgApCb4MY6ZGftFzE2rME= + dependencies: + date-fns "*" + "@types/dotenv@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-8.2.0.tgz#5cd64710c3c98e82d9d15844375a33bf1b45d053" @@ -2091,6 +2098,11 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +date-fns@*, date-fns@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" + integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" From 421c1452741311f9ecbf7af193e21a8095e318ee Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 23:01:57 -0300 Subject: [PATCH 51/80] =?UTF-8?q?Adicionar=20rela=C3=A7=C3=A3o=20com=20Met?= =?UTF-8?q?a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/locals/local.entity.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/countries/locals/local.entity.ts b/src/countries/locals/local.entity.ts index d71c522b..1f9a9a55 100644 --- a/src/countries/locals/local.entity.ts +++ b/src/countries/locals/local.entity.ts @@ -6,9 +6,11 @@ import { UpdateDateColumn, JoinColumn, ManyToOne, + OneToOne, } from 'typeorm'; import Country from '../country.entity'; +import Meta from '../../metas/meta.entity'; @Entity({ name: 'locals' }) class Local { @@ -29,6 +31,9 @@ class Local { }) @JoinColumn({ name: 'countryId' }) country: Country; + + @OneToOne(() => Meta, (meta) => meta.local) + meta: Meta; } export default Local; From 00f7eb2664ded42a47bdc5aa05e447ffb060a910 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 23:02:08 -0300 Subject: [PATCH 52/80] Criar meta entity --- src/metas/meta.entity.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/metas/meta.entity.ts diff --git a/src/metas/meta.entity.ts b/src/metas/meta.entity.ts new file mode 100644 index 00000000..48df4858 --- /dev/null +++ b/src/metas/meta.entity.ts @@ -0,0 +1,34 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, + OneToOne, + JoinColumn, +} from 'typeorm'; + +import Local from '../countries/locals/local.entity'; + +@Entity({ name: 'metas' }) +class Meta { + @PrimaryGeneratedColumn('increment') + id: number; + + @Column() + date: Date; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @OneToOne(() => Local, (local) => local.meta, { + eager: true, + }) + @JoinColumn({ name: 'localId' }) + local: Local; +} + +export default Meta; From afeaa6a901c94f60174f5bde7aea5c74d6fcbb92 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 23:02:26 -0300 Subject: [PATCH 53/80] Criar endpoints no controller de meta --- src/metas/metas.controller.ts | 48 +++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/metas/metas.controller.ts b/src/metas/metas.controller.ts index fa8cb380..67ad7d46 100644 --- a/src/metas/metas.controller.ts +++ b/src/metas/metas.controller.ts @@ -1,4 +1,48 @@ -import { Controller } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + Get, + Param, + Post, + Put, +} from '@nestjs/common'; +import { MetasService } from './metas.service'; + +import { CreateMetaDto } from './dto/create-meta.dto'; +import { UpdateMetaDto } from './dto/update-meta.dto'; +import Meta from './meta.entity'; @Controller('metas') -export class MetasController {} +export class MetasController { + constructor(private readonly metasService: MetasService) {} + + @Post() + create(@Body() createMetaDto: CreateMetaDto): Promise { + const meta = this.metasService.create(createMetaDto); + return meta; + } + + @Get() + findAll(): Promise { + return this.metasService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string): Promise { + return this.metasService.findOne(id); + } + + @Delete(':id') + remove(@Param('id') id: string): Promise { + return this.metasService.remove(id); + } + + @Put(':id') + update( + @Param('id') id: string, + @Body() updateMetaDto: UpdateMetaDto, + ): Promise { + return this.metasService.update(id, updateMetaDto); + } +} From b66e8b8085f828b1f8a5bb254aa82864fdbe51ec Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 23:02:44 -0300 Subject: [PATCH 54/80] =?UTF-8?q?Adicionar=20m=C3=B3dulos=20em=20meta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/metas/metas.module.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/metas/metas.module.ts b/src/metas/metas.module.ts index 4db980bd..4e4ea545 100644 --- a/src/metas/metas.module.ts +++ b/src/metas/metas.module.ts @@ -1,9 +1,14 @@ import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; import { MetasController } from './metas.controller'; import { MetasService } from './metas.service'; +import { LocalsModule } from '../countries/locals/locals.module'; +import Meta from './meta.entity'; @Module({ + imports: [TypeOrmModule.forFeature([Meta]), LocalsModule], controllers: [MetasController], - providers: [MetasService] + providers: [MetasService], + exports: [TypeOrmModule], }) export class MetasModule {} From 8c0c6297968c03f9153d7addd2277aec80367e52 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 23:03:10 -0300 Subject: [PATCH 55/80] =?UTF-8?q?Criar=20l=C3=B3gica=20no=20metas=20servic?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/metas/metas.service.ts | 112 ++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 2 deletions(-) diff --git a/src/metas/metas.service.ts b/src/metas/metas.service.ts index e20fb89c..ad8e6b72 100644 --- a/src/metas/metas.service.ts +++ b/src/metas/metas.service.ts @@ -1,4 +1,112 @@ -import { Injectable } from '@nestjs/common'; +import { + BadRequestException, + Inject, + Injectable, + NotFoundException, +} from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { LocalsService } from 'src/countries/locals/locals.service'; +import { Repository } from 'typeorm'; +import { CreateMetaDto } from './dto/create-meta.dto'; +import { UpdateMetaDto } from './dto/update-meta.dto'; +import Meta from './meta.entity'; + +import { compareDate } from '../utils/compare.date'; @Injectable() -export class MetasService {} +export class MetasService { + constructor( + @InjectRepository(Meta) + private metaRepository: Repository, + @Inject(LocalsService) + private localService: LocalsService, + ) {} + + public async create(createMetaDto: CreateMetaDto): Promise { + const { date, localId } = createMetaDto; + + /*Validacao para ver se o id de local enviado existe, retornando o local*/ + const local = await this.localService.findOne(String(localId)); + + const meta = new Meta(); + meta.date = date; + meta.local = local; + + /*Validacao para garantir que + de uma meta nao esteja associado a um mesmo local*/ + const existsLocalAssociatedMeta = await this.metaRepository.findOne({ + where: [{ local: meta.local }], + }); + if (existsLocalAssociatedMeta) { + throw new BadRequestException( + 'One meta must be associated with only one local', + ); + } + + /* Se verdadeiro, a primeira data é menor(antes) que a segunda, + sendo uma meta passada inválida */ + const isBeforeThanToday = compareDate(new Date(meta.date), new Date()); + if (isBeforeThanToday) { + throw new BadRequestException( + 'Your meta date is before today. Please set one after today date', + ); + } + await this.metaRepository.save(meta); + return this.metaRepository.findOne(meta.id); + } + + async findAll(): Promise { + return await this.metaRepository.find(); + } + + async findOne(id: string): Promise { + const meta = await this.metaRepository.findOne(id); + if (!meta) { + throw new NotFoundException(`Meta with id ${id} not found`); + } + return meta; + } + + async remove(id: string): Promise { + const meta = await this.findOne(id); + await this.metaRepository.delete(meta.id); + } + + public async update(id: string, updateMetaDto: UpdateMetaDto): Promise { + const { date, localId } = updateMetaDto; + + /*Verificar se existe meta com id enviado na request, retornando a meta*/ + const meta = await this.findOne(id); + + /*Validacao para garantir que + de uma meta nao esteja associado a um mesmo local*/ + if (!(!!localId && meta.local.id === Number(localId))) { + const existsLocalAssociatedMeta = await this.metaRepository.findOne({ + where: [{ local: meta.local }], + }); + if (existsLocalAssociatedMeta) { + throw new BadRequestException( + 'One meta must be associated with only one local', + ); + } + } + + if (!!localId) { + const updatedLocal = await this.localService.findOne(String(localId)); + meta.date = date || meta.date; + meta.local = updatedLocal; + } else { + meta.date = date || meta.date; + } + + /* Se verdadeiro, a primeira data é menor(antes) que a segunda, + sendo uma meta passada inválida */ + const isBeforeThanToday = compareDate(new Date(meta.date), new Date()); + if (isBeforeThanToday) { + throw new BadRequestException( + 'Your meta date is before today. Please set one after today date', + ); + } + + await this.metaRepository.save(meta); + return this.metaRepository.findOne(meta.id); + } +} From e49ce51fcb0bae6be78ca0b54a0093bf09bb0484 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 23:03:45 -0300 Subject: [PATCH 56/80] =?UTF-8?q?Adicionar=20fun=C3=A7=C3=A3o=20para=20com?= =?UTF-8?q?parar=20duas=20datas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/compare.date.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/utils/compare.date.ts diff --git a/src/utils/compare.date.ts b/src/utils/compare.date.ts new file mode 100644 index 00000000..e35b5a90 --- /dev/null +++ b/src/utils/compare.date.ts @@ -0,0 +1,13 @@ +import { compareAsc } from 'date-fns'; + +/* Se a primeira data é menor, retorne true + * se for maior ou igual, retorne false + */ +export const compareDate = (firstDate: Date, secondDate: Date): boolean => { + const result = compareAsc(firstDate, secondDate); + if (result === -1) { + return true; + } else { + return false; + } +}; From 7de893ccb735a5c36fe5c09c13391689007d1580 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sat, 23 Jan 2021 23:03:57 -0300 Subject: [PATCH 57/80] Criar dtos de meta --- src/metas/dto/create-meta.dto.ts | 13 +++++++++++++ src/metas/dto/update-meta.dto.ts | 13 +++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/metas/dto/create-meta.dto.ts create mode 100644 src/metas/dto/update-meta.dto.ts diff --git a/src/metas/dto/create-meta.dto.ts b/src/metas/dto/create-meta.dto.ts new file mode 100644 index 00000000..fe659df8 --- /dev/null +++ b/src/metas/dto/create-meta.dto.ts @@ -0,0 +1,13 @@ +import { IsNotEmpty, IsNumber, IsDateString } from 'class-validator'; + +import Local from '../../countries/locals/local.entity'; + +export class CreateMetaDto { + @IsNotEmpty() + @IsDateString() + date: Date; + + @IsNotEmpty() + @IsNumber() + localId: Local; +} diff --git a/src/metas/dto/update-meta.dto.ts b/src/metas/dto/update-meta.dto.ts new file mode 100644 index 00000000..0b8f8f65 --- /dev/null +++ b/src/metas/dto/update-meta.dto.ts @@ -0,0 +1,13 @@ +import { IsNumber, IsDateString, IsOptional } from 'class-validator'; + +import Local from '../../countries/locals/local.entity'; + +export class UpdateMetaDto { + @IsDateString() + @IsOptional() + date?: Date; + + @IsNumber() + @IsOptional() + localId?: Local; +} From 55ff9554f0b5e7fbb19564150a3eef7957df1b09 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sun, 24 Jan 2021 08:52:13 -0300 Subject: [PATCH 58/80] Ordenar findAll pela data da meta (crescente) --- src/metas/metas.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/metas/metas.service.ts b/src/metas/metas.service.ts index ad8e6b72..e6151f85 100644 --- a/src/metas/metas.service.ts +++ b/src/metas/metas.service.ts @@ -55,7 +55,7 @@ export class MetasService { } async findAll(): Promise { - return await this.metaRepository.find(); + return await this.metaRepository.find({ order: { date: 'ASC' } }); } async findOne(id: string): Promise { From c4e0480ca1accf418b87eeda8876bb39b2c1561d Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sun, 24 Jan 2021 10:14:26 -0300 Subject: [PATCH 59/80] =?UTF-8?q?Adicionar=20lodash=20as=20depend=C3=AAnci?= =?UTF-8?q?as?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 ++ yarn.lock | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/package.json b/package.json index be755869..1382b2c8 100644 --- a/package.json +++ b/package.json @@ -29,12 +29,14 @@ "@nestjs/serve-static": "^2.1.4", "@nestjs/typeorm": "^7.1.5", "@types/dotenv": "^8.2.0", + "@types/lodash": "^4.14.168", "class-transformer": "^0.3.2", "class-validator": "^0.13.1", "date-fns": "^2.16.1", "dotenv": "^8.2.0", "env-cmd": "^10.1.0", "helmet": "^4.3.1", + "lodash": "^4.17.20", "multer": "^1.4.2", "mysql": "^2.18.1", "reflect-metadata": "^0.1.13", diff --git a/yarn.lock b/yarn.lock index 60986bcb..9705c0fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -858,6 +858,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/lodash@^4.14.168": + version "4.14.168" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" + integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + "@types/mime@*": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" From db6c736cbc03213043984f2489f41892689d9673 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sun, 24 Jan 2021 10:14:59 -0300 Subject: [PATCH 60/80] =?UTF-8?q?Mudar=20de=20Error=20gen=C3=A9rico=20para?= =?UTF-8?q?=20BadRequestException?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/upload.config.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/config/upload.config.ts b/src/config/upload.config.ts index d3c0452d..50449876 100644 --- a/src/config/upload.config.ts +++ b/src/config/upload.config.ts @@ -1,3 +1,4 @@ +import { BadRequestException } from '@nestjs/common'; import { diskStorage } from 'multer'; import { resolve, extname } from 'path'; import { envConfig } from './env.load'; @@ -26,7 +27,9 @@ export default { cb(null, true); } else { cb(null, false); - return cb(new Error('Only .png, .jpg and .jpeg format for files!')); + return cb( + new BadRequestException('Only .png, .jpg and .jpeg format for files!'), + ); } }, }; From 58db53b2fcfa95b7f4848a6103e74e0d8b47f00a Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sun, 24 Jan 2021 10:15:26 -0300 Subject: [PATCH 61/80] Adicionar multerOptions ao FileInterceptor --- src/files/files.controller.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/files/files.controller.ts b/src/files/files.controller.ts index 7338e490..9c4435dd 100644 --- a/src/files/files.controller.ts +++ b/src/files/files.controller.ts @@ -9,15 +9,23 @@ import { import File from './file.entity'; import { FileInterceptor } from '@nestjs/platform-express'; import { FilesService } from './files.service'; +import { CreateFileDto } from './dto/create-files.dto'; +import uploadConfig from 'src/config/upload.config'; @Controller('files') export class FilesController { constructor(private readonly filesService: FilesService) {} @Post() - @UseInterceptors(FileInterceptor('file')) - create(@UploadedFile() file): Promise { - return this.filesService.create(file); + @UseInterceptors( + FileInterceptor('file', { + fileFilter: uploadConfig.fileFilter, + storage: uploadConfig.storage, + dest: uploadConfig.directory, + }), + ) + create(@UploadedFile() fileData: CreateFileDto): Promise { + return this.filesService.create(fileData); } @Get(':id') From 98a93cf430b8a947a2cfe0bed2df5bfb73fc86b0 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sun, 24 Jan 2021 10:15:48 -0300 Subject: [PATCH 62/80] Remover MulterModule --- src/files/files.module.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/files/files.module.ts b/src/files/files.module.ts index 37d1819e..7de382c2 100644 --- a/src/files/files.module.ts +++ b/src/files/files.module.ts @@ -1,20 +1,11 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { MulterModule } from '@nestjs/platform-express'; import { FilesService } from './files.service'; import { FilesController } from './files.controller'; import File from './file.entity'; -import * as uploadConfig from '../config/upload.config'; @Module({ - imports: [ - MulterModule.register({ - storage: uploadConfig.default.storage, - dest: uploadConfig.default.directory, - fileFilter: uploadConfig.default.fileFilter, - }), - TypeOrmModule.forFeature([File]), - ], + imports: [TypeOrmModule.forFeature([File])], providers: [FilesService], controllers: [FilesController], exports: [TypeOrmModule, FilesService], From c99d195e475257153910a7d0b2b5e7ebcdc6fc77 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sun, 24 Jan 2021 10:16:46 -0300 Subject: [PATCH 63/80] =?UTF-8?q?Adicionar=20valida=C3=A7=C3=B5es=20e=20re?= =?UTF-8?q?nomear=20par=C3=A2metros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/files/files.service.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/files/files.service.ts b/src/files/files.service.ts index 4f56b600..94b43546 100644 --- a/src/files/files.service.ts +++ b/src/files/files.service.ts @@ -1,6 +1,11 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; +import { + BadRequestException, + Injectable, + NotFoundException, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import * as _ from 'lodash'; import { CreateFileDto } from './dto/create-files.dto'; import File from './file.entity'; @@ -11,7 +16,14 @@ export class FilesService { private fileRepository: Repository, ) {} - async create({ filename }: CreateFileDto): Promise { + async create(fileData: CreateFileDto): Promise { + if (_.isNil(fileData)) { + throw new BadRequestException( + 'Validation Failed. Please set multipart/form .png, .jpg or .jpeg in file property', + ); + } + + const { filename } = fileData; const file = await this.fileRepository.save(new File(filename)); return file; } From fca508cb365663a7d243695786b4bd4d4d18a3f2 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sun, 24 Jan 2021 20:19:32 -0300 Subject: [PATCH 64/80] =?UTF-8?q?Refatorar.=20Reaproveitar=20service=20ao?= =?UTF-8?q?=20inv=C3=A9s=20de=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/countries.service.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/countries/countries.service.ts b/src/countries/countries.service.ts index a92729b7..0955d504 100644 --- a/src/countries/countries.service.ts +++ b/src/countries/countries.service.ts @@ -69,10 +69,7 @@ export class CountriesService { } public async remove(id: string): Promise { - const country = await this.countryRepository.findOne(id); - if (!country) { - throw new NotFoundException(`Country with id ${id} not found`); - } + const country = await this.findOne(id); await this.fileService.remove(String(country.file.id)); await this.countryRepository.delete(country); } From d323093b6d083eed6700a3ee0d9eab60ac500001 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sun, 24 Jan 2021 21:15:55 -0300 Subject: [PATCH 65/80] Desenvolver testes para FileService --- src/files/tests/files.service.spec.ts | 45 +++++++++++++++++++++------ 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/src/files/tests/files.service.spec.ts b/src/files/tests/files.service.spec.ts index bacc5dda..e6ce457b 100644 --- a/src/files/tests/files.service.spec.ts +++ b/src/files/tests/files.service.spec.ts @@ -1,18 +1,43 @@ -import { Test, TestingModule } from '@nestjs/testing'; +import { Test } from '@nestjs/testing'; import { FilesService } from '../files.service'; +import File from '../file.entity'; +import { getRepositoryToken } from '@nestjs/typeorm'; describe('FilesService', () => { - let service: FilesService; - + let filesService: FilesService; + let findOne: jest.Mock; beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [FilesService], + const module = await Test.createTestingModule({ + providers: [ + FilesService, + { + provide: getRepositoryToken(File), + useValue: { findOne }, + }, + ], }).compile(); - - service = module.get(FilesService); + filesService = await module.get(FilesService); }); - - it('should be defined', () => { - expect(service).toBeDefined(); + describe('when getting a user by email', () => { + describe('and the user is matched', () => { + let file: File; + beforeEach(() => { + const hashedName = 'sdcksdkclsdc12354scdsdc7.jpg'; + file = new File(hashedName); + findOne.mockReturnValue(Promise.resolve(file)); + }); + it('should return the file', async () => { + const fetchedFile = await filesService.findOne('1'); + expect(fetchedFile).toEqual(file); + }); + }); + describe('and the user is not matched', () => { + beforeEach(() => { + findOne.mockReturnValue(undefined); + }); + it('should throw an error', async () => { + await expect(filesService.findOne('150')).rejects.toThrow(); + }); + }); }); }); From 8eec94d7a02c80d2a3fea615c5a56172e1877246 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Sun, 24 Jan 2021 21:20:35 -0300 Subject: [PATCH 66/80] =?UTF-8?q?Colocar=20caminhos=20relativos=20na=20imp?= =?UTF-8?q?orta=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/files/file.entity.ts | 2 +- src/files/files.controller.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/files/file.entity.ts b/src/files/file.entity.ts index 1f8791e7..d44187f0 100644 --- a/src/files/file.entity.ts +++ b/src/files/file.entity.ts @@ -1,4 +1,3 @@ -import Country from 'src/countries/country.entity'; import { Column, CreateDateColumn, @@ -13,6 +12,7 @@ import { import { join } from 'path'; import { promises } from 'fs'; import { envConfig } from '../config/env.load'; +import Country from '../countries/country.entity'; import * as uploadConfig from '../config/upload.config'; @Entity({ name: 'files' }) diff --git a/src/files/files.controller.ts b/src/files/files.controller.ts index 9c4435dd..ebc46aa7 100644 --- a/src/files/files.controller.ts +++ b/src/files/files.controller.ts @@ -10,7 +10,7 @@ import File from './file.entity'; import { FileInterceptor } from '@nestjs/platform-express'; import { FilesService } from './files.service'; import { CreateFileDto } from './dto/create-files.dto'; -import uploadConfig from 'src/config/upload.config'; +import uploadConfig from '../config/upload.config'; @Controller('files') export class FilesController { From 1ab9d7badd34df5c34032cab6e0547ec2fa82061 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 13:49:00 -0300 Subject: [PATCH 67/80] =?UTF-8?q?Remover=20testes=20automatizados=20vindos?= =?UTF-8?q?=20por=20padr=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../locals/tests/locals.controller.spec.ts | 18 -------- .../locals/tests/locals.service.spec.ts | 18 -------- .../tests/countries.controller.spec.ts | 18 -------- src/countries/tests/countries.service.spec.ts | 18 -------- src/files/tests/files.controller.spec.ts | 18 -------- src/files/tests/files.service.spec.ts | 43 ------------------- src/metas/tests/metas.controller.spec.ts | 18 -------- src/metas/tests/metas.service.spec.ts | 18 -------- 8 files changed, 169 deletions(-) delete mode 100644 src/countries/locals/tests/locals.controller.spec.ts delete mode 100644 src/countries/locals/tests/locals.service.spec.ts delete mode 100644 src/countries/tests/countries.controller.spec.ts delete mode 100644 src/countries/tests/countries.service.spec.ts delete mode 100644 src/files/tests/files.controller.spec.ts delete mode 100644 src/files/tests/files.service.spec.ts delete mode 100644 src/metas/tests/metas.controller.spec.ts delete mode 100644 src/metas/tests/metas.service.spec.ts diff --git a/src/countries/locals/tests/locals.controller.spec.ts b/src/countries/locals/tests/locals.controller.spec.ts deleted file mode 100644 index 93ccb1a4..00000000 --- a/src/countries/locals/tests/locals.controller.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { LocalsController } from './locals.controller'; - -describe('LocalsController', () => { - let controller: LocalsController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [LocalsController], - }).compile(); - - controller = module.get(LocalsController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/countries/locals/tests/locals.service.spec.ts b/src/countries/locals/tests/locals.service.spec.ts deleted file mode 100644 index 28f4e9de..00000000 --- a/src/countries/locals/tests/locals.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { LocalsService } from './locals.service'; - -describe('LocalsService', () => { - let service: LocalsService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [LocalsService], - }).compile(); - - service = module.get(LocalsService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/countries/tests/countries.controller.spec.ts b/src/countries/tests/countries.controller.spec.ts deleted file mode 100644 index 3152b335..00000000 --- a/src/countries/tests/countries.controller.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { CountriesController } from '../countries.controller'; - -describe('CountriesController', () => { - let controller: CountriesController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [CountriesController], - }).compile(); - - controller = module.get(CountriesController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/countries/tests/countries.service.spec.ts b/src/countries/tests/countries.service.spec.ts deleted file mode 100644 index ec947d48..00000000 --- a/src/countries/tests/countries.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { CountriesService } from '../countries.service'; - -describe('CountriesService', () => { - let service: CountriesService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [CountriesService], - }).compile(); - - service = module.get(CountriesService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/files/tests/files.controller.spec.ts b/src/files/tests/files.controller.spec.ts deleted file mode 100644 index f123f500..00000000 --- a/src/files/tests/files.controller.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { FilesController } from '../files.controller'; - -describe('FilesController', () => { - let controller: FilesController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [FilesController], - }).compile(); - - controller = module.get(FilesController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/files/tests/files.service.spec.ts b/src/files/tests/files.service.spec.ts deleted file mode 100644 index e6ce457b..00000000 --- a/src/files/tests/files.service.spec.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Test } from '@nestjs/testing'; -import { FilesService } from '../files.service'; -import File from '../file.entity'; -import { getRepositoryToken } from '@nestjs/typeorm'; - -describe('FilesService', () => { - let filesService: FilesService; - let findOne: jest.Mock; - beforeEach(async () => { - const module = await Test.createTestingModule({ - providers: [ - FilesService, - { - provide: getRepositoryToken(File), - useValue: { findOne }, - }, - ], - }).compile(); - filesService = await module.get(FilesService); - }); - describe('when getting a user by email', () => { - describe('and the user is matched', () => { - let file: File; - beforeEach(() => { - const hashedName = 'sdcksdkclsdc12354scdsdc7.jpg'; - file = new File(hashedName); - findOne.mockReturnValue(Promise.resolve(file)); - }); - it('should return the file', async () => { - const fetchedFile = await filesService.findOne('1'); - expect(fetchedFile).toEqual(file); - }); - }); - describe('and the user is not matched', () => { - beforeEach(() => { - findOne.mockReturnValue(undefined); - }); - it('should throw an error', async () => { - await expect(filesService.findOne('150')).rejects.toThrow(); - }); - }); - }); -}); diff --git a/src/metas/tests/metas.controller.spec.ts b/src/metas/tests/metas.controller.spec.ts deleted file mode 100644 index 92db0837..00000000 --- a/src/metas/tests/metas.controller.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { MetasController } from '../metas.controller'; - -describe('MetasController', () => { - let controller: MetasController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [MetasController], - }).compile(); - - controller = module.get(MetasController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/metas/tests/metas.service.spec.ts b/src/metas/tests/metas.service.spec.ts deleted file mode 100644 index bf29e8ba..00000000 --- a/src/metas/tests/metas.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { MetasService } from '../metas.service'; - -describe('MetasService', () => { - let service: MetasService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [MetasService], - }).compile(); - - service = module.get(MetasService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); From 985080d6cb33b7bbd6c5bcdd3530f7e80b67ba1f Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 13:49:59 -0300 Subject: [PATCH 68/80] =?UTF-8?q?Adicionar=20seguran=C3=A7a=20contra=20rem?= =?UTF-8?q?o=C3=A7=C3=A3o=20de=20fk=20pai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/countries.service.ts | 8 +++++++- src/countries/locals/locals.service.ts | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/countries/countries.service.ts b/src/countries/countries.service.ts index 0955d504..9b9182c5 100644 --- a/src/countries/countries.service.ts +++ b/src/countries/countries.service.ts @@ -71,7 +71,13 @@ export class CountriesService { public async remove(id: string): Promise { const country = await this.findOne(id); await this.fileService.remove(String(country.file.id)); - await this.countryRepository.delete(country); + try { + await this.countryRepository.delete(country); + } catch (err) { + throw new Error( + 'Country have children locals. Please remove this locals first before remove this country', + ); + } } public async verifyLocalNameExistsInCountry( diff --git a/src/countries/locals/locals.service.ts b/src/countries/locals/locals.service.ts index 44a15c57..726f2f27 100644 --- a/src/countries/locals/locals.service.ts +++ b/src/countries/locals/locals.service.ts @@ -61,7 +61,13 @@ export class LocalsService { public async remove(id: string) { const local = await this.findOne(id); - await this.localRepository.delete(local); + try { + await this.localRepository.delete(local); + } catch (err) { + throw new Error( + 'Local have children meta. Please remove this meta first before remove this local', + ); + } } public async update( From be17568b8a24087762a7d2a212f4fd6c887b2ace Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 16:59:14 -0300 Subject: [PATCH 69/80] Adicionar env-cmd ao script start --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1382b2c8..9db55a58 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "prebuild": "rimraf dist", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", + "start": "env-cmd -f .env nest start", "start:dev": "env-cmd -f .env nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", From 61dbe0e8ec5929a68788e4dfdcacbd6a141bbbaf Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 16:59:31 -0300 Subject: [PATCH 70/80] =?UTF-8?q?Adicionar=20instru=C3=A7=C3=B5es=20de=20e?= =?UTF-8?q?xecu=C3=A7=C3=A3o=20ao=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 133 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 118 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index bebf64d7..2d6ccec3 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,17 @@ - [Bônus](#bônus) - [Submissão e Prazo de Entrega](#submissão-e-prazo-de-entrega) - [Instruções de execução](#instruções-de-execução) - + - [Requisitos](#requisitos) + - [Instalação das dependências](#instalação-das-dependências) + - [Variáveis de ambiente](#variáveis-de-ambiente) + - [Container Docker](#container-docker) + - [Migrações](#migrações) + - [Execução da aplicação](#execução-da-aplicação) +- [Endpoints disponíveis](endpoints-disponíveis) + - [Recursos para Files](#recursos-para-files) + - [Recursos para Countries](#recursos-para-countries) + - [Recursos para Locals](#recursos-para-locals) + - [Recursos para Metas](#recursos-para-metas) ## Descrição Este desafio tem como objetivo avaliar as habilidades técnicas do candidato a vaga de desenvolvedor backend no Clubpetro. @@ -60,31 +70,124 @@ Os dados a ser considerados são: # Instruções de execução -> Instalação das dependências +## Requisitos + +Para executar a aplicação no ambiente de desenvolvimento, precisamos ter no ambiente: + +- [Docker](https://www.docker.com/) +- [Docker Compose](https://docs.docker.com/compose/install/) +- [yarn](https://classic.yarnpkg.com/en/docs/install/#debian-stable) +- [nest-cli](https://docs.nestjs.com/cli/overview) + +## Instalação das dependências + +Dentro do diretório raiz do projeto, podemos executar ```bash $ yarn ``` +para instalar as dependências. + +## Variáveis de ambiente -> Executando a aplicação +Duplique o arquivo .env.example presente na raiz do projeto e renomeie uma das cópias para apenas .env + +O arquivo .env contém as variáveis de ambiente com informações secretas que serão utilizadas na API. + +## Container Docker + +Após instalar as dependências, podemor subir o container contendo o serviço MySQL. + +O serviço relativo ao banco de dados MySQL está configurado para escutar a porta 3306. Caso essa porta já esteja sendo usada em seu ambiente, deixe ela disponível para o container, por favor. + +Após esses detalhes, podemos executar: ```bash -# development -$ yarn start +$ docker-compose up +``` + +Esse processo pode demorar um pouco caso as imagens Docker não estejam disponíveis em seu ambiente local. + +## Migrações -# watch mode -$ yarn start:dev +Após o container contendo o MySQL estiver disponível para conexões no container Docker, execute o seguinte comando para executar as migrações no banco de dados: -# production mode -$ yarn start:prod +```bash +$ yarn typeorm migration:run ``` -> Testes +## Execução da aplicação + +Agora podemos iniciar a aplicação (modo de desenvolvimento) executando: ```bash -# unit tests -$ yarn run test +# development mode +$ yarn start +``` + +# Endpoints disponíveis + +A URL base no ambiente de desenvolvimento é http://localhost:3000/api/v1/ + +***Obs***: As listagens utilizam [eager loading](https://orkhan.gitbook.io/typeorm/docs/eager-and-lazy-relations) para carregar os dados das relações. + +## Recursos para Files + +***Obs***: Files é o arquivo relativo a bandeira de um país. + +- `POST /files`: Cria um novo arquivo enviado como multipart/form a chave `file`. O arquivo deve ser uma imagem com extensão `.png`, `.jpg` ou `.jpeg` + +- `GET /files/:id`: O arquivo com `id` presente no parâmetro da rota deve ter seus dados retornados. + +## Recursos para Countries + +- `POST /countries`: +O endpoint deve receber `name` e `fileId` no corpo da requisição e registrar um novo país. + +- `GET /countries`: +Rota que lista todos os países presentes no repositório. + +- `GET /countries/:id`: +O país com `id` presente no parâmetro da rota deve ter seus dados retornados. + +- `DELETE /countries/:id`: +O País com `id` presente no parâmetro da rota deve ser excluído. + +- `GET /countries/:id/locals`: +Retorna os locais relacionados ao `id` do País presente no parâmetro da rota. + + +## Recursos para Locals + +- `POST /locals`: +O endpoint deve receber `name` e `countryId` no corpo da requisição e registrar um novo local. + +- `GET /locals`: +Rota que lista todos os locais presentes no repositório. + +- `GET /locals/:id`: +O local com `id` presente no parâmetro da rota deve ter seus dados retornados. + +- `DELETE /locals/:id`: +O local com `id` presente no parâmetro da rota deve ser excluído. + +- `PUT /locals/:id`: +O endpoint pode receber `name` e `countryId` no corpo da requisição e alterar o local relativo ao `id` presente no parâmetro da rota. + + +## Recursos para Metas + +- `POST /metas`: +O endpoint deve receber `date` (ISO-8601) e `localId` no corpo da requisição para registrar uma nova meta. + +- `GET /metas`: +Rota que lista todas as metas presentes no repositório. + +- `GET /metas/:id`: +A meta com `id` presente no parâmetro da rota deve ter seus dados retornados. + +- `DELETE /metas/:id`: +A meta com `id` presente no parâmetro da rota deve ser excluída. -# test coverage -$ yarn run test:cov -``` \ No newline at end of file +- `PUT /metas/:id`: +O endpoint pode receber `date` e `localId` no corpo da requisição e alterar a meta relativa ao `id` presente no parâmetro da rota. \ No newline at end of file From 11ab7984ecd7b39976b7c3ddfe4889a6ad3f59aa Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 18:02:55 -0300 Subject: [PATCH 71/80] Adicionar arquivos contendo imagens exemplo --- .github/example/criar-arquivo.png | Bin 0 -> 46214 bytes .github/example/criar-local.png | Bin 0 -> 64833 bytes .github/example/criar-meta.png | Bin 0 -> 77671 bytes .github/example/criar-pais.png | Bin 0 -> 52810 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .github/example/criar-arquivo.png create mode 100644 .github/example/criar-local.png create mode 100644 .github/example/criar-meta.png create mode 100644 .github/example/criar-pais.png diff --git a/.github/example/criar-arquivo.png b/.github/example/criar-arquivo.png new file mode 100644 index 0000000000000000000000000000000000000000..da16d608a8750906b322ea9dc94d7b0f65e9e459 GIT binary patch literal 46214 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 z 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 literal 0 HcmV?d00001 diff --git a/.github/example/criar-local.png b/.github/example/criar-local.png new file mode 100644 index 0000000000000000000000000000000000000000..60f273697551ef50bdb8ca6d08daa9910faa23f1 GIT binary patch literal 64833 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 z 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 literal 0 HcmV?d00001 diff --git a/.github/example/criar-pais.png b/.github/example/criar-pais.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd34c6415b282df32735b1df8886895c521a2b3 GIT binary patch literal 52810 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 k40wqD?Mv`~^2a-PRbk Date: Mon, 25 Jan 2021 18:03:12 -0300 Subject: [PATCH 72/80] =?UTF-8?q?Adicionar=20altera=C3=A7=C3=B5es=20no=20R?= =?UTF-8?q?EADME.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2d6ccec3..7af516dc 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ - [Bônus](#bônus) - [Submissão e Prazo de Entrega](#submissão-e-prazo-de-entrega) - [Instruções de execução](#instruções-de-execução) - - [Requisitos](#requisitos) + - [Requisitos para execução](#requisitos-para-execução) - [Instalação das dependências](#instalação-das-dependências) - [Variáveis de ambiente](#variáveis-de-ambiente) - [Container Docker](#container-docker) @@ -20,6 +20,10 @@ - [Recursos para Countries](#recursos-para-countries) - [Recursos para Locals](#recursos-para-locals) - [Recursos para Metas](#recursos-para-metas) +- [Jornada de criações POST do cliente da API](#jornada-de-criações-post-do-cliente-da-api) + + + ## Descrição Este desafio tem como objetivo avaliar as habilidades técnicas do candidato a vaga de desenvolvedor backend no Clubpetro. @@ -70,7 +74,7 @@ Os dados a ser considerados são: # Instruções de execução -## Requisitos +## Requisitos para execução Para executar a aplicação no ambiente de desenvolvimento, precisamos ter no ambiente: @@ -110,7 +114,7 @@ Esse processo pode demorar um pouco caso as imagens Docker não estejam disponí ## Migrações -Após o container contendo o MySQL estiver disponível para conexões no container Docker, execute o seguinte comando para executar as migrações no banco de dados: +Após o container contendo o MySQL estiver disponível para conexões, execute o seguinte comando para executar as migrações no banco de dados: ```bash $ yarn typeorm migration:run @@ -190,4 +194,30 @@ A meta com `id` presente no parâmetro da rota deve ter seus dados retornados. A meta com `id` presente no parâmetro da rota deve ser excluída. - `PUT /metas/:id`: -O endpoint pode receber `date` e `localId` no corpo da requisição e alterar a meta relativa ao `id` presente no parâmetro da rota. \ No newline at end of file +O endpoint pode receber `date` e `localId` no corpo da requisição e alterar a meta relativa ao `id` presente no parâmetro da rota. + + +# Jornada de criações POST do cliente da API + +Nesta seção temos um exemplo com requisições POST nos principais endpoints da API usando o [Insomnia](https://insomnia.rest/). +O objetivo é criar uma meta com todos os seus dados relacionados (bandeira, local e país) + +1) Receber um arquivo (bandeira). Veja mais em [Recursos para Files](#recursos-para-files)) + +Requisição POST para receber arquivo + +2) Criar um novo país. Veja mais em [Recursos para Countries](#recursos-para-countries) + +Requisição POST para criar país + +3) Criar um local "dentro" do país. Veja mais em [Recursos para Locals](#recursos-para-locals) + +Requisição POST para criar um local + +4) Criar uma meta associada a um local. Veja mais em [Recursos para Metas](#recursos-para-metas) + +Requisição POST para criar uma meta associada a um local \ No newline at end of file From 41f7c36f3f9d4b2bb53c428c88f3de86fb7c3eec Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 18:06:17 -0300 Subject: [PATCH 73/80] Alterar width das imagens exemplo --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7af516dc..3ad2daf5 100644 --- a/README.md +++ b/README.md @@ -204,20 +204,20 @@ O objetivo é criar uma meta com todos os seus dados relacionados (bandeira, loc 1) Receber um arquivo (bandeira). Veja mais em [Recursos para Files](#recursos-para-files)) -Requisição POST para receber arquivo +Requisição POST para receber arquivo 2) Criar um novo país. Veja mais em [Recursos para Countries](#recursos-para-countries) -Requisição POST para criar país +Requisição POST para criar país 3) Criar um local "dentro" do país. Veja mais em [Recursos para Locals](#recursos-para-locals) -Requisição POST para criar um local +Requisição POST para criar um local 4) Criar uma meta associada a um local. Veja mais em [Recursos para Metas](#recursos-para-metas) -Requisição POST para criar uma meta associada a um local \ No newline at end of file +Requisição POST para criar uma meta associada a um local \ No newline at end of file From 657dce6c17801e96eb8f48349d0439af354ef8a8 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 23:28:35 -0300 Subject: [PATCH 74/80] =?UTF-8?q?Atualizar=20dto=20de=20atualiza=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20metas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/metas/dto/update-meta.dto.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/metas/dto/update-meta.dto.ts b/src/metas/dto/update-meta.dto.ts index 0b8f8f65..f82195fb 100644 --- a/src/metas/dto/update-meta.dto.ts +++ b/src/metas/dto/update-meta.dto.ts @@ -1,13 +1,7 @@ -import { IsNumber, IsDateString, IsOptional } from 'class-validator'; - -import Local from '../../countries/locals/local.entity'; +import { IsDateString, IsOptional } from 'class-validator'; export class UpdateMetaDto { @IsDateString() @IsOptional() date?: Date; - - @IsNumber() - @IsOptional() - localId?: Local; } From fc34b314b7c1c6aa3c21bab530b0047b7e147ee0 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 23:29:09 -0300 Subject: [PATCH 75/80] =?UTF-8?q?Evitar=20depend=C3=AAncia=20circular=20en?= =?UTF-8?q?tre=20locals=20e=20metas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/locals/locals.module.ts | 2 ++ src/metas/metas.module.ts | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/countries/locals/locals.module.ts b/src/countries/locals/locals.module.ts index ec399d02..6cb5a085 100644 --- a/src/countries/locals/locals.module.ts +++ b/src/countries/locals/locals.module.ts @@ -4,11 +4,13 @@ import { LocalsService } from './locals.service'; import { LocalsController } from './locals.controller'; import { CountriesModule } from '../countries.module'; import Local from './local.entity'; +import { MetasModule } from 'src/metas/metas.module'; @Module({ imports: [ TypeOrmModule.forFeature([Local]), forwardRef(() => CountriesModule), + forwardRef(() => MetasModule), ], controllers: [LocalsController], providers: [LocalsService], diff --git a/src/metas/metas.module.ts b/src/metas/metas.module.ts index 4e4ea545..61417fd0 100644 --- a/src/metas/metas.module.ts +++ b/src/metas/metas.module.ts @@ -1,4 +1,4 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { MetasController } from './metas.controller'; import { MetasService } from './metas.service'; @@ -6,9 +6,9 @@ import { LocalsModule } from '../countries/locals/locals.module'; import Meta from './meta.entity'; @Module({ - imports: [TypeOrmModule.forFeature([Meta]), LocalsModule], + imports: [TypeOrmModule.forFeature([Meta]), forwardRef(() => LocalsModule)], controllers: [MetasController], providers: [MetasService], - exports: [TypeOrmModule], + exports: [TypeOrmModule, MetasService], }) export class MetasModule {} From ac22d920f033e8f27a3c0e23ac7702818a5252a6 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 23:30:24 -0300 Subject: [PATCH 76/80] =?UTF-8?q?Evitar=20remo=C3=A7=C3=A3o=20de=20countri?= =?UTF-8?q?es=20com=20chaves=20em=20filhos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/countries/countries.service.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/countries/countries.service.ts b/src/countries/countries.service.ts index 9b9182c5..cf412393 100644 --- a/src/countries/countries.service.ts +++ b/src/countries/countries.service.ts @@ -3,6 +3,7 @@ import { forwardRef, Inject, Injectable, + NotAcceptableException, NotFoundException, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; @@ -70,14 +71,17 @@ export class CountriesService { public async remove(id: string): Promise { const country = await this.findOne(id); - await this.fileService.remove(String(country.file.id)); - try { - await this.countryRepository.delete(country); - } catch (err) { - throw new Error( + + /*Verificar se o país possui locais. Impedir remoção caso tenha (sem onDelete CASCADE)*/ + const locals = await this.findAllLocalsInCountry(String(country.id)); + if (locals.length !== 0) { + throw new NotAcceptableException( 'Country have children locals. Please remove this locals first before remove this country', ); } + + await this.fileService.remove(String(country.file.id)); + await this.countryRepository.delete(country); } public async verifyLocalNameExistsInCountry( From 4ce5289638b09b5759bfb3476d4a18d27c30e639 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 23:31:25 -0300 Subject: [PATCH 77/80] =?UTF-8?q?Resolver=20bug=20durante=20a=20atualiza?= =?UTF-8?q?=C3=A7=C3=A3o=20de=20metas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/metas/metas.service.ts | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/src/metas/metas.service.ts b/src/metas/metas.service.ts index e6151f85..89ab364b 100644 --- a/src/metas/metas.service.ts +++ b/src/metas/metas.service.ts @@ -1,5 +1,6 @@ import { BadRequestException, + forwardRef, Inject, Injectable, NotFoundException, @@ -18,7 +19,7 @@ export class MetasService { constructor( @InjectRepository(Meta) private metaRepository: Repository, - @Inject(LocalsService) + @Inject(forwardRef(() => LocalsService)) private localService: LocalsService, ) {} @@ -72,30 +73,11 @@ export class MetasService { } public async update(id: string, updateMetaDto: UpdateMetaDto): Promise { - const { date, localId } = updateMetaDto; + const { date } = updateMetaDto; /*Verificar se existe meta com id enviado na request, retornando a meta*/ const meta = await this.findOne(id); - - /*Validacao para garantir que + de uma meta nao esteja associado a um mesmo local*/ - if (!(!!localId && meta.local.id === Number(localId))) { - const existsLocalAssociatedMeta = await this.metaRepository.findOne({ - where: [{ local: meta.local }], - }); - if (existsLocalAssociatedMeta) { - throw new BadRequestException( - 'One meta must be associated with only one local', - ); - } - } - - if (!!localId) { - const updatedLocal = await this.localService.findOne(String(localId)); - meta.date = date || meta.date; - meta.local = updatedLocal; - } else { - meta.date = date || meta.date; - } + meta.date = date || meta.date; /* Se verdadeiro, a primeira data é menor(antes) que a segunda, sendo uma meta passada inválida */ From ca2a127a934fd9026050ceb16ec68592fbc9c176 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 23:33:07 -0300 Subject: [PATCH 78/80] Evitar prob. dep. circular e consertar validacao --- src/countries/locals/locals.service.ts | 27 +++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/countries/locals/locals.service.ts b/src/countries/locals/locals.service.ts index 726f2f27..54ed275a 100644 --- a/src/countries/locals/locals.service.ts +++ b/src/countries/locals/locals.service.ts @@ -3,6 +3,7 @@ import { forwardRef, Inject, Injectable, + NotAcceptableException, NotFoundException, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; @@ -11,6 +12,7 @@ import { CreateLocalDto } from './dto/create-local.dto'; import Local from './local.entity'; import { CountriesService } from '../countries.service'; import { UpdateLocalDto } from './dto/update-local.dto'; +import { MetasService } from 'src/metas/metas.service'; @Injectable() export class LocalsService { @@ -19,6 +21,8 @@ export class LocalsService { private localRepository: Repository, @Inject(forwardRef(() => CountriesService)) private countryService: CountriesService, + @Inject(forwardRef(() => MetasService)) + private metaService: MetasService, ) {} async create(createLocalDto: CreateLocalDto): Promise { @@ -61,13 +65,15 @@ export class LocalsService { public async remove(id: string) { const local = await this.findOne(id); - try { - await this.localRepository.delete(local); - } catch (err) { - throw new Error( - 'Local have children meta. Please remove this meta first before remove this local', + /*verificação para ver se existe uma meta associada. se existir, impedir a remoção*/ + const exists = await this.existsMetaAssociatedLocal(String(local.id)); + console.log(exists); + if (exists) { + throw new NotAcceptableException( + 'Local have children meta. Please remove this meta first before remove the present local', ); } + await this.localRepository.delete(local); } public async update( @@ -103,4 +109,15 @@ export class LocalsService { await this.localRepository.save(local); return this.localRepository.findOne(local.id); } + + public async existsMetaAssociatedLocal(localId: string): Promise { + await this.findOne(localId); + const metas = await this.metaService.findAll(); + /*Se existir, o array vai ter 1 elemento*/ + const arrayAssociatedMetas = metas.filter( + (meta) => meta.local.id === Number(localId), + ); + const exists = arrayAssociatedMetas.length === 0 ? false : true; + return exists; + } } From d6a7ba5e212adf0e55d9180fcd4f860f923f2c2c Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Mon, 25 Jan 2021 23:34:34 -0300 Subject: [PATCH 79/80] Atualizar README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ad2daf5..d670d807 100644 --- a/README.md +++ b/README.md @@ -194,7 +194,7 @@ A meta com `id` presente no parâmetro da rota deve ter seus dados retornados. A meta com `id` presente no parâmetro da rota deve ser excluída. - `PUT /metas/:id`: -O endpoint pode receber `date` e `localId` no corpo da requisição e alterar a meta relativa ao `id` presente no parâmetro da rota. +O endpoint pode receber `date` no corpo da requisição e alterar a meta relativa ao `id` presente no parâmetro da rota. # Jornada de criações POST do cliente da API From 66157d41db6c12fa5b2fa0f69ae9cad39b7bda88 Mon Sep 17 00:00:00 2001 From: Lucas Pereira Miranda Date: Tue, 26 Jan 2021 08:25:09 -0300 Subject: [PATCH 80/80] Remover console.log --- src/countries/locals/locals.service.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/countries/locals/locals.service.ts b/src/countries/locals/locals.service.ts index 54ed275a..bd10bb77 100644 --- a/src/countries/locals/locals.service.ts +++ b/src/countries/locals/locals.service.ts @@ -67,7 +67,6 @@ export class LocalsService { const local = await this.findOne(id); /*verificação para ver se existe uma meta associada. se existir, impedir a remoção*/ const exists = await this.existsMetaAssociatedLocal(String(local.id)); - console.log(exists); if (exists) { throw new NotAcceptableException( 'Local have children meta. Please remove this meta first before remove the present local', @@ -94,8 +93,6 @@ export class LocalsService { local.name = name || local.name; } - console.log(local.country.id); - const exists = await this.countryService.verifyLocalNameExistsInCountry( name, local.country,