From 6af42905a6483fbae48c35211b9c17d5490af5d3 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Thu, 13 Apr 2023 15:05:10 -0300 Subject: [PATCH 01/15] add backend initial configuration --- backend/.editorconfig | 12 + backend/.env | 1 + backend/.eslintrc.json | 20 + backend/.gitignore | 40 + backend/.prettierrc | 5 + backend/docker-compose.yml | 10 + backend/package.json | 33 + backend/src/app.module.ts | 7 + backend/src/helpers/HttpError.ts | 20 + backend/src/main.ts | 28 + backend/src/server.ts | 7 + backend/src/static/POKEMON_DATA.ts | 1967 ++++++++++++++++++++++++++++ backend/tsconfig.json | 19 + backend/yarn.lock | 1690 ++++++++++++++++++++++++ 14 files changed, 3859 insertions(+) create mode 100644 backend/.editorconfig create mode 100644 backend/.env create mode 100644 backend/.eslintrc.json create mode 100644 backend/.gitignore create mode 100644 backend/.prettierrc create mode 100644 backend/docker-compose.yml create mode 100644 backend/package.json create mode 100644 backend/src/app.module.ts create mode 100644 backend/src/helpers/HttpError.ts create mode 100644 backend/src/main.ts create mode 100644 backend/src/server.ts create mode 100644 backend/src/static/POKEMON_DATA.ts create mode 100644 backend/tsconfig.json create mode 100644 backend/yarn.lock diff --git a/backend/.editorconfig b/backend/.editorconfig new file mode 100644 index 000000000..ad4c3113e --- /dev/null +++ b/backend/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = false diff --git a/backend/.env b/backend/.env new file mode 100644 index 000000000..9dbb8d544 --- /dev/null +++ b/backend/.env @@ -0,0 +1 @@ +DATABASE_URL="postgresql://m1guelsb:123@localhost:5434/pokemondb?schema=public" diff --git a/backend/.eslintrc.json b/backend/.eslintrc.json new file mode 100644 index 000000000..3b30c8ece --- /dev/null +++ b/backend/.eslintrc.json @@ -0,0 +1,20 @@ +{ + "env": { + "es2021": true, + "node": true + }, + "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], + "overrides": [], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "rules": { + "indent": ["error", 2], + "linebreak-style": ["error", "unix"], + "quotes": ["error", "single"], + "semi": ["error", "always"] + } +} diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 000000000..47511a474 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,40 @@ +# compiled output +/dist +/node_modules + +# env files +# .env +# .env*.local +# .env*.test + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# OS +.DS_Store + +# Tests +/coverage +/.nyc_output + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json \ No newline at end of file diff --git a/backend/.prettierrc b/backend/.prettierrc new file mode 100644 index 000000000..0820853e4 --- /dev/null +++ b/backend/.prettierrc @@ -0,0 +1,5 @@ +{ + "tabWidth": 2, + "useTabs": false, + "singleQuote": false +} diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 000000000..92a7ddc8d --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,10 @@ +version: '3.8' +services: + dev-db: + image: postgres:13 + ports: + - 5434:5432 + environment: + POSTGRES_USER: m1guelsb + POSTGRES_PASSWORD: 123 + POSTGRES_DB: pokemondb diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 000000000..dd062dd69 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,33 @@ +{ + "name": "pokemon-back", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "scripts": { + "build": "tsc", + "start": "ts-node -r tsconfig-paths/register src/server.ts", + "dev": "ts-node-dev -r tsconfig-paths/register --transpile-only --respawn --ignore-watch node_modules --exit-child src/server.ts", + "prisma:dev:deploy": "prisma migrate deploy", + "db:dev:up": "docker compose up dev-db -d", + "db:dev:rm": "docker compose rm dev-db -s -f -v", + "db:dev:restart": "yarn db:dev:rm && yarn db:dev:up && sleep 3 && yarn prisma:dev:deploy" + }, + "dependencies": { + "@prisma/client": "^4.12.0", + "cors": "^2.8.5", + "express": "^4.18.2" + }, + "devDependencies": { + "@types/cors": "^2.8.12", + "@types/express": "^4.17.14", + "@types/multer": "^1.4.7", + "@typescript-eslint/eslint-plugin": "^5.43.0", + "@typescript-eslint/parser": "^5.43.0", + "dotenv": "^16.0.3", + "eslint": "^8.27.0", + "ts-node": "^10.9.1", + "ts-node-dev": "^2.0.0", + "tsconfig-paths": "^4.1.0", + "typescript": "^4.9.3" + } +} diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts new file mode 100644 index 000000000..badbbc212 --- /dev/null +++ b/backend/src/app.module.ts @@ -0,0 +1,7 @@ +import { PokemonModule } from "./modules/pokemon/pokemon.module"; + +export class AppModule { + instantiate() { + new PokemonModule().instantiate(); + } +} diff --git a/backend/src/helpers/HttpError.ts b/backend/src/helpers/HttpError.ts new file mode 100644 index 000000000..dfafe554d --- /dev/null +++ b/backend/src/helpers/HttpError.ts @@ -0,0 +1,20 @@ +type HttpStatusCode = 200 | 400 | 404 | 500; + +export interface iHttpError extends Error { + name: string; + statusCode: HttpStatusCode; + message: string; +} + +export class HttpError extends Error { + name: string; + statusCode: HttpStatusCode; + message: string; + + constructor({ name, statusCode, message }: iHttpError) { + super(); + this.name = name; + this.statusCode = statusCode; + this.message = message; + } +} diff --git a/backend/src/main.ts b/backend/src/main.ts new file mode 100644 index 000000000..7ca5a13fa --- /dev/null +++ b/backend/src/main.ts @@ -0,0 +1,28 @@ +import "dotenv/config"; +import cors from "cors"; +import express, { Request, Response, Router } from "express"; +import { AppModule } from "./app.module"; +import { PrismaClient } from "@prisma/client"; + +export const prisma = new PrismaClient(); + +export const router = Router(); +const app = express(); + +app.use(express.urlencoded({ extended: false })); +app.use(express.json()); +app.use(cors()); + +app.use(router); + +app.use((err: Error, request: Request, response: Response) => { + if (err instanceof Error) { + return response.status(500).json({ + message: err.message, + }); + } +}); + +new AppModule().instantiate(); + +export { app }; diff --git a/backend/src/server.ts b/backend/src/server.ts new file mode 100644 index 000000000..f0ea08a76 --- /dev/null +++ b/backend/src/server.ts @@ -0,0 +1,7 @@ +import { app } from "./main"; + +const PORT = process.env.PORT || 3001; + +app.listen(PORT, () => { + console.log(`\x1b[42m--SERVER RUNNING AT ${PORT}\x1b[0m`); +}); diff --git a/backend/src/static/POKEMON_DATA.ts b/backend/src/static/POKEMON_DATA.ts new file mode 100644 index 000000000..3766ed715 --- /dev/null +++ b/backend/src/static/POKEMON_DATA.ts @@ -0,0 +1,1967 @@ +import { Pokemon } from "@prisma/client"; + +export const POKEMON_DATA: Pokemon[] = [ + { + id: 1, + name: "Bulbasaur", + evolutionStage: 1, + type1: "grass", + type2: "poison", + statsTotal: 326, + atk: 118, + def: 118, + sta: 90, + isLegendary: false, + isEvolved: false, + }, + { + id: 2, + name: "Ivysaur", + evolutionStage: 2, + type1: "grass", + type2: "poison", + statsTotal: 422, + atk: 151, + def: 151, + sta: 120, + isLegendary: false, + isEvolved: false, + }, + { + id: 3, + name: "Venusaur", + evolutionStage: 3, + type1: "grass", + type2: "poison", + statsTotal: 556, + atk: 198, + def: 198, + sta: 160, + isLegendary: false, + isEvolved: true, + }, + { + id: 4, + name: "Charmander", + isEvolved: false, + type1: "fire", + type2: null, + statsTotal: 290, + atk: 116, + def: 96, + sta: 78, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 5, + name: "Charmeleon", + isEvolved: false, + type1: "fire", + type2: null, + statsTotal: 403, + atk: 158, + def: 129, + sta: 116, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 6, + name: "Charizard", + evolutionStage: 3, + type1: "fire", + type2: "flying", + statsTotal: 555, + atk: 223, + def: 176, + sta: 156, + isLegendary: false, + isEvolved: true, + }, + { + id: 7, + name: "Squirtle", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 304, + atk: 94, + def: 122, + sta: 88, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 8, + name: "Wartortle", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 399, + atk: 126, + def: 155, + sta: 118, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 9, + name: "Blastoise", + isEvolved: true, + type1: "water", + type2: null, + statsTotal: 539, + atk: 171, + def: 210, + sta: 158, + isLegendary: false, + evolutionStage: 3, + }, + { + id: 10, + name: "Caterpie", + isEvolved: false, + type1: "bug", + type2: null, + statsTotal: 207, + atk: 55, + def: 62, + sta: 90, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 11, + name: "Metapod", + isEvolved: false, + type1: "bug", + type2: null, + statsTotal: 239, + atk: 45, + def: 94, + sta: 100, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 12, + name: "Butterfree", + evolutionStage: 3, + type1: "bug", + type2: "flying", + statsTotal: 438, + atk: 167, + def: 151, + sta: 120, + isLegendary: false, + isEvolved: false, + }, + { + id: 13, + name: "Weedle", + evolutionStage: 1, + type1: "bug", + type2: "poison", + statsTotal: 198, + atk: 63, + def: 55, + sta: 80, + isLegendary: false, + isEvolved: false, + }, + { + id: 14, + name: "Kakuna", + evolutionStage: 2, + type1: "bug", + type2: "poison", + statsTotal: 222, + atk: 46, + def: 86, + sta: 90, + isLegendary: false, + isEvolved: false, + }, + { + id: 15, + name: "Beedrill", + evolutionStage: 3, + type1: "bug", + type2: "poison", + statsTotal: 449, + atk: 169, + def: 150, + sta: 130, + isLegendary: false, + isEvolved: false, + }, + { + id: 16, + name: "Pidgey", + evolutionStage: 1, + type1: "normal", + type2: "flying", + statsTotal: 241, + atk: 85, + def: 76, + sta: 80, + isLegendary: false, + isEvolved: false, + }, + { + id: 17, + name: "Pidgeotto", + evolutionStage: 2, + type1: "normal", + type2: "flying", + statsTotal: 351, + atk: 117, + def: 108, + sta: 126, + isLegendary: false, + isEvolved: false, + }, + { + id: 18, + name: "Pidgeot", + evolutionStage: 3, + type1: "normal", + type2: "flying", + statsTotal: 489, + atk: 166, + def: 157, + sta: 166, + isLegendary: false, + isEvolved: false, + }, + { + id: 19, + name: "Rattata", + isEvolved: false, + type1: "normal", + type2: null, + statsTotal: 233, + atk: 103, + def: 70, + sta: 60, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 20, + name: "Raticate", + isEvolved: false, + type1: "normal", + type2: null, + statsTotal: 415, + atk: 161, + def: 144, + sta: 110, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 21, + name: "Spearow", + evolutionStage: 1, + type1: "normal", + type2: "flying", + statsTotal: 253, + atk: 112, + def: 61, + sta: 80, + isLegendary: false, + isEvolved: false, + }, + { + id: 22, + name: "Fearow", + evolutionStage: 2, + type1: "normal", + type2: "flying", + statsTotal: 447, + atk: 182, + def: 135, + sta: 130, + isLegendary: false, + isEvolved: true, + }, + { + id: 23, + name: "Ekans", + isEvolved: false, + type1: "poison", + type2: null, + statsTotal: 282, + atk: 110, + def: 102, + sta: 70, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 24, + name: "Arbok", + isEvolved: true, + type1: "poison", + type2: null, + statsTotal: 445, + atk: 167, + def: 158, + sta: 120, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 25, + name: "Pikachu", + isEvolved: false, + type1: "electric", + type2: null, + statsTotal: 283, + atk: 112, + def: 101, + sta: 70, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 26, + name: "Raichu", + isEvolved: true, + type1: "electric", + type2: null, + statsTotal: 478, + atk: 193, + def: 165, + sta: 120, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 27, + name: "Sandshrew", + isEvolved: false, + type1: "ground", + type2: null, + statsTotal: 371, + atk: 126, + def: 145, + sta: 100, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 28, + name: "Sandslash", + isEvolved: true, + type1: "ground", + type2: null, + statsTotal: 534, + atk: 182, + def: 202, + sta: 150, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 29, + name: "Nidoran F", + isEvolved: false, + type1: "poison", + type2: null, + statsTotal: 290, + atk: 86, + def: 94, + sta: 110, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 30, + name: "Nidorina", + isEvolved: false, + type1: "poison", + type2: null, + statsTotal: 383, + atk: 117, + def: 126, + sta: 140, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 31, + name: "Nidoqueen", + evolutionStage: 3, + type1: "poison", + type2: "ground", + statsTotal: 534, + atk: 180, + def: 174, + sta: 180, + isLegendary: false, + isEvolved: true, + }, + { + id: 32, + name: "Nidoran M", + isEvolved: false, + type1: "poison", + type2: null, + statsTotal: 273, + atk: 105, + def: 76, + sta: 92, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 33, + name: "Nidorino", + isEvolved: false, + type1: "poison", + type2: null, + statsTotal: 371, + atk: 137, + def: 112, + sta: 122, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 34, + name: "Nidoking", + evolutionStage: 3, + type1: "poison", + type2: "ground", + statsTotal: 523, + atk: 204, + def: 157, + sta: 162, + isLegendary: false, + isEvolved: true, + }, + { + id: 35, + name: "Clefairy", + isEvolved: false, + type1: "fairy", + type2: null, + statsTotal: 363, + atk: 107, + def: 116, + sta: 140, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 36, + name: "Clefable", + isEvolved: true, + type1: "fairy", + type2: null, + statsTotal: 539, + atk: 178, + def: 171, + sta: 190, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 37, + name: "Vulpix", + isEvolved: false, + type1: "fire", + type2: null, + statsTotal: 294, + atk: 96, + def: 122, + sta: 76, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 38, + name: "Ninetales", + isEvolved: true, + type1: "fire", + type2: null, + statsTotal: 519, + atk: 169, + def: 204, + sta: 146, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 39, + name: "Jigglypuff", + evolutionStage: 1, + type1: "normal", + type2: "fairy", + statsTotal: 354, + atk: 80, + def: 44, + sta: 230, + isLegendary: false, + isEvolved: false, + }, + { + id: 40, + name: "Wigglytuff", + evolutionStage: 2, + type1: "normal", + type2: "fairy", + statsTotal: 529, + atk: 156, + def: 93, + sta: 280, + isLegendary: false, + isEvolved: true, + }, + { + id: 41, + name: "Zubat", + evolutionStage: 1, + type1: "poison", + type2: "flying", + statsTotal: 239, + atk: 83, + def: 76, + sta: 80, + isLegendary: false, + isEvolved: false, + }, + { + id: 42, + name: "Golbat", + evolutionStage: 2, + type1: "poison", + type2: "flying", + statsTotal: 464, + atk: 161, + def: 153, + sta: 150, + isLegendary: false, + isEvolved: false, + }, + { + id: 43, + name: "Oddish", + evolutionStage: 1, + type1: "grass", + type2: "poison", + statsTotal: 337, + atk: 131, + def: 116, + sta: 90, + isLegendary: false, + isEvolved: false, + }, + { + id: 44, + name: "Gloom", + evolutionStage: 2, + type1: "grass", + type2: "poison", + statsTotal: 412, + atk: 153, + def: 139, + sta: 120, + isLegendary: false, + isEvolved: false, + }, + { + id: 45, + name: "Vileplume", + evolutionStage: 3, + type1: "grass", + type2: "poison", + statsTotal: 522, + atk: 202, + def: 170, + sta: 150, + isLegendary: false, + isEvolved: true, + }, + { + id: 46, + name: "Paras", + evolutionStage: 1, + type1: "bug", + type2: "grass", + statsTotal: 290, + atk: 121, + def: 99, + sta: 70, + isLegendary: false, + isEvolved: false, + }, + { + id: 47, + name: "Parasect", + evolutionStage: 2, + type1: "bug", + type2: "grass", + statsTotal: 431, + atk: 165, + def: 146, + sta: 120, + isLegendary: false, + isEvolved: true, + }, + { + id: 48, + name: "Venonat", + evolutionStage: 1, + type1: "bug", + type2: "poison", + statsTotal: 322, + atk: 100, + def: 102, + sta: 120, + isLegendary: false, + isEvolved: false, + }, + { + id: 49, + name: "Venomoth", + evolutionStage: 2, + type1: "bug", + type2: "poison", + statsTotal: 469, + atk: 179, + def: 150, + sta: 140, + isLegendary: false, + isEvolved: true, + }, + { + id: 50, + name: "Diglett", + isEvolved: false, + type1: "ground", + type2: null, + statsTotal: 217, + atk: 109, + def: 88, + sta: 20, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 51, + name: "Dugtrio", + isEvolved: true, + type1: "ground", + type2: null, + statsTotal: 384, + atk: 167, + def: 147, + sta: 70, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 52, + name: "Meowth", + isEvolved: false, + type1: "normal", + type2: null, + statsTotal: 253, + atk: 92, + def: 81, + sta: 80, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 53, + name: "Persian", + isEvolved: true, + type1: "normal", + type2: null, + statsTotal: 419, + atk: 150, + def: 139, + sta: 130, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 54, + name: "Psyduck", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 318, + atk: 122, + def: 96, + sta: 100, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 55, + name: "Golduck", + isEvolved: true, + type1: "water", + type2: null, + statsTotal: 514, + atk: 191, + def: 163, + sta: 160, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 56, + name: "Mankey", + isEvolved: false, + type1: "fighting", + type2: null, + statsTotal: 315, + atk: 148, + def: 87, + sta: 80, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 57, + name: "Primeape", + isEvolved: true, + type1: "fighting", + type2: null, + statsTotal: 481, + atk: 207, + def: 144, + sta: 130, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 58, + name: "Growlithe", + isEvolved: false, + type1: "fire", + type2: null, + statsTotal: 342, + atk: 136, + def: 96, + sta: 110, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 59, + name: "Arcanine", + isEvolved: true, + type1: "fire", + type2: null, + statsTotal: 573, + atk: 227, + def: 166, + sta: 180, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 60, + name: "Poliwag", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 263, + atk: 101, + def: 82, + sta: 80, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 61, + name: "Poliwhirl", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 390, + atk: 130, + def: 130, + sta: 130, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 62, + name: "Poliwrath", + evolutionStage: 3, + type1: "water", + type2: "fighting", + statsTotal: 549, + atk: 182, + def: 187, + sta: 180, + isLegendary: false, + isEvolved: true, + }, + { + id: 63, + name: "Abra", + isEvolved: false, + type1: "psychic", + type2: null, + statsTotal: 348, + atk: 195, + def: 103, + sta: 50, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 64, + name: "Kadabra", + isEvolved: false, + type1: "psychic", + type2: null, + statsTotal: 450, + atk: 232, + def: 138, + sta: 80, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 65, + name: "Alakazam", + isEvolved: true, + type1: "psychic", + type2: null, + statsTotal: 575, + atk: 271, + def: 194, + sta: 110, + isLegendary: false, + evolutionStage: 3, + }, + { + id: 66, + name: "Machop", + isEvolved: false, + type1: "fighting", + type2: null, + statsTotal: 365, + atk: 137, + def: 88, + sta: 140, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 67, + name: "Machoke", + isEvolved: false, + type1: "fighting", + type2: null, + statsTotal: 467, + atk: 177, + def: 130, + sta: 160, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 68, + name: "Machamp", + isEvolved: true, + type1: "fighting", + type2: null, + statsTotal: 576, + atk: 234, + def: 162, + sta: 180, + isLegendary: false, + evolutionStage: 3, + }, + { + id: 69, + name: "Bellsprout", + evolutionStage: 1, + type1: "grass", + type2: "poison", + statsTotal: 303, + atk: 139, + def: 64, + sta: 100, + isLegendary: false, + isEvolved: false, + }, + { + id: 70, + name: "Weepinbell", + evolutionStage: 2, + type1: "grass", + type2: "poison", + statsTotal: 397, + atk: 172, + def: 95, + sta: 130, + isLegendary: false, + isEvolved: false, + }, + { + id: 71, + name: "Victreebel", + evolutionStage: 3, + type1: "grass", + type2: "poison", + statsTotal: 505, + atk: 207, + def: 138, + sta: 160, + isLegendary: false, + isEvolved: true, + }, + { + id: 72, + name: "Tentacool", + evolutionStage: 1, + type1: "water", + type2: "poison", + statsTotal: 359, + atk: 97, + def: 182, + sta: 80, + isLegendary: false, + isEvolved: false, + }, + { + id: 73, + name: "Tentacruel", + evolutionStage: 2, + type1: "water", + type2: "poison", + statsTotal: 563, + atk: 166, + def: 237, + sta: 160, + isLegendary: false, + isEvolved: true, + }, + { + id: 74, + name: "Geodude", + evolutionStage: 1, + type1: "rock", + type2: "ground", + statsTotal: 375, + atk: 132, + def: 163, + sta: 80, + isLegendary: false, + isEvolved: false, + }, + { + id: 75, + name: "Graveler", + evolutionStage: 2, + type1: "rock", + type2: "ground", + statsTotal: 470, + atk: 164, + def: 196, + sta: 110, + isLegendary: false, + isEvolved: false, + }, + { + id: 76, + name: "Golem", + evolutionStage: 3, + type1: "rock", + type2: "ground", + statsTotal: 600, + atk: 211, + def: 229, + sta: 160, + isLegendary: false, + isEvolved: true, + }, + { + id: 77, + name: "Ponyta", + isEvolved: false, + type1: "fire", + type2: null, + statsTotal: 402, + atk: 170, + def: 132, + sta: 100, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 78, + name: "Rapidash", + isEvolved: true, + type1: "fire", + type2: null, + statsTotal: 504, + atk: 207, + def: 167, + sta: 130, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 79, + name: "Slowpoke", + evolutionStage: 1, + type1: "water", + type2: "psychic", + statsTotal: 398, + atk: 109, + def: 109, + sta: 180, + isLegendary: false, + isEvolved: false, + }, + { + id: 80, + name: "Slowbro", + evolutionStage: 2, + type1: "water", + type2: "psychic", + statsTotal: 561, + atk: 177, + def: 194, + sta: 190, + isLegendary: false, + isEvolved: true, + }, + { + id: 81, + name: "Magnemite", + evolutionStage: 1, + type1: "electric", + type2: "steel", + statsTotal: 343, + atk: 165, + def: 128, + sta: 50, + isLegendary: false, + isEvolved: false, + }, + { + id: 82, + name: "Magneton", + evolutionStage: 2, + type1: "electric", + type2: "steel", + statsTotal: 505, + atk: 223, + def: 182, + sta: 100, + isLegendary: false, + isEvolved: true, + }, + { + id: 83, + name: "Farfetchd", + evolutionStage: 1, + type1: "normal", + type2: "flying", + statsTotal: 346, + atk: 124, + def: 118, + sta: 104, + isLegendary: false, + isEvolved: false, + }, + { + id: 84, + name: "Doduo", + evolutionStage: 1, + type1: "normal", + type2: "flying", + statsTotal: 316, + atk: 158, + def: 88, + sta: 70, + isLegendary: false, + isEvolved: false, + }, + { + id: 85, + name: "Dodrio", + evolutionStage: 2, + type1: "normal", + type2: "flying", + statsTotal: 483, + atk: 218, + def: 145, + sta: 120, + isLegendary: false, + isEvolved: true, + }, + { + id: 86, + name: "Seel", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 343, + atk: 85, + def: 128, + sta: 130, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 87, + name: "Dewgong", + evolutionStage: 2, + type1: "water", + type2: "ice", + statsTotal: 503, + atk: 139, + def: 184, + sta: 180, + isLegendary: false, + isEvolved: true, + }, + { + id: 88, + name: "Grimer", + isEvolved: false, + type1: "poison", + type2: null, + statsTotal: 385, + atk: 135, + def: 90, + sta: 160, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 89, + name: "Muk", + isEvolved: true, + type1: "poison", + type2: null, + statsTotal: 584, + atk: 190, + def: 184, + sta: 210, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 90, + name: "Shellder", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 344, + atk: 116, + def: 168, + sta: 60, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 91, + name: "Cloyster", + evolutionStage: 2, + type1: "water", + type2: "ice", + statsTotal: 609, + atk: 186, + def: 323, + sta: 100, + isLegendary: false, + isEvolved: true, + }, + { + id: 92, + name: "Gastly", + evolutionStage: 1, + type1: "ghost", + type2: "poison", + statsTotal: 316, + atk: 186, + def: 70, + sta: 60, + isLegendary: false, + isEvolved: false, + }, + { + id: 93, + name: "Haunter", + evolutionStage: 2, + type1: "ghost", + type2: "poison", + statsTotal: 425, + atk: 223, + def: 112, + sta: 90, + isLegendary: false, + isEvolved: false, + }, + { + id: 94, + name: "Gengar", + evolutionStage: 3, + type1: "ghost", + type2: "poison", + statsTotal: 537, + atk: 261, + def: 156, + sta: 120, + isLegendary: false, + isEvolved: true, + }, + { + id: 95, + name: "Onix", + evolutionStage: 1, + type1: "rock", + type2: "ground", + statsTotal: 443, + atk: 85, + def: 288, + sta: 70, + isLegendary: false, + isEvolved: false, + }, + { + id: 96, + name: "Drowzee", + isEvolved: false, + type1: "psychic", + type2: null, + statsTotal: 367, + atk: 89, + def: 158, + sta: 120, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 97, + name: "Hypno", + isEvolved: true, + type1: "psychic", + type2: null, + statsTotal: 529, + atk: 144, + def: 215, + sta: 170, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 98, + name: "Krabby", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 397, + atk: 181, + def: 156, + sta: 60, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 99, + name: "Kingler", + isEvolved: true, + type1: "water", + type2: null, + statsTotal: 564, + atk: 240, + def: 214, + sta: 110, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 100, + name: "Voltorb", + isEvolved: false, + type1: "electric", + type2: null, + statsTotal: 303, + atk: 109, + def: 114, + sta: 80, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 101, + name: "Electrode", + isEvolved: true, + type1: "electric", + type2: null, + statsTotal: 472, + atk: 173, + def: 179, + sta: 120, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 102, + name: "Exeggcute", + evolutionStage: 1, + type1: "grass", + type2: "psychic", + statsTotal: 367, + atk: 107, + def: 140, + sta: 120, + isLegendary: false, + isEvolved: false, + }, + { + id: 103, + name: "Exeggutor", + evolutionStage: 2, + type1: "grass", + type2: "psychic", + statsTotal: 581, + atk: 233, + def: 158, + sta: 190, + isLegendary: false, + isEvolved: true, + }, + { + id: 104, + name: "Cubone", + isEvolved: false, + type1: "ground", + type2: null, + statsTotal: 355, + atk: 90, + def: 165, + sta: 100, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 105, + name: "Marowak", + isEvolved: true, + type1: "ground", + type2: null, + statsTotal: 464, + atk: 144, + def: 200, + sta: 120, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 106, + name: "Hitmonlee", + isEvolved: true, + type1: "fighting", + type2: null, + statsTotal: 535, + atk: 224, + def: 211, + sta: 100, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 107, + name: "Hitmonchan", + isEvolved: true, + type1: "fighting", + type2: null, + statsTotal: 505, + atk: 193, + def: 212, + sta: 100, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 108, + name: "Lickitung", + isEvolved: true, + type1: "normal", + type2: null, + statsTotal: 425, + atk: 108, + def: 137, + sta: 180, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 109, + name: "Koffing", + isEvolved: false, + type1: "poison", + type2: null, + statsTotal: 363, + atk: 119, + def: 164, + sta: 80, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 110, + name: "Weezing", + isEvolved: true, + type1: "poison", + type2: null, + statsTotal: 525, + atk: 174, + def: 221, + sta: 130, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 111, + name: "Rhyhorn", + evolutionStage: 1, + type1: "ground", + type2: "rock", + statsTotal: 457, + atk: 140, + def: 157, + sta: 160, + isLegendary: false, + isEvolved: false, + }, + { + id: 112, + name: "Rhydon", + evolutionStage: 2, + type1: "ground", + type2: "rock", + statsTotal: 638, + atk: 222, + def: 206, + sta: 210, + isLegendary: false, + isEvolved: true, + }, + { + id: 113, + name: "Chansey", + isEvolved: false, + type1: "normal", + type2: null, + statsTotal: 736, + atk: 60, + def: 176, + sta: 500, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 114, + name: "Tangela", + isEvolved: true, + type1: "grass", + type2: null, + statsTotal: 518, + atk: 183, + def: 205, + sta: 130, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 115, + name: "Kangaskhan", + isEvolved: true, + type1: "normal", + type2: null, + statsTotal: 556, + atk: 181, + def: 165, + sta: 210, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 116, + name: "Horsea", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 314, + atk: 129, + def: 125, + sta: 60, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 117, + name: "Seadra", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 479, + atk: 187, + def: 182, + sta: 110, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 118, + name: "Goldeen", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 328, + atk: 123, + def: 115, + sta: 90, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 119, + name: "Seaking", + isEvolved: true, + type1: "water", + type2: null, + statsTotal: 489, + atk: 175, + def: 154, + sta: 160, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 120, + name: "Staryu", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 309, + atk: 137, + def: 112, + sta: 60, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 121, + name: "Starmie", + evolutionStage: 2, + type1: "water", + type2: "psychic", + statsTotal: 514, + atk: 210, + def: 184, + sta: 120, + isLegendary: false, + isEvolved: true, + }, + { + id: 122, + name: "Mr Mime", + evolutionStage: 1, + type1: "psychic", + type2: "fairy", + statsTotal: 505, + atk: 192, + def: 233, + sta: 80, + isLegendary: false, + isEvolved: true, + }, + { + id: 123, + name: "Scyther", + evolutionStage: 1, + type1: "bug", + type2: "flying", + statsTotal: 528, + atk: 218, + def: 170, + sta: 140, + isLegendary: false, + isEvolved: false, + }, + { + id: 124, + name: "Jynx", + evolutionStage: 1, + type1: "ice", + type2: "psychic", + statsTotal: 535, + atk: 223, + def: 182, + sta: 130, + isLegendary: false, + isEvolved: true, + }, + { + id: 125, + name: "Electabuzz", + isEvolved: true, + type1: "electric", + type2: null, + statsTotal: 501, + atk: 198, + def: 173, + sta: 130, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 126, + name: "Magmar", + isEvolved: true, + type1: "fire", + type2: null, + statsTotal: 505, + atk: 206, + def: 169, + sta: 130, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 127, + name: "Pinsir", + isEvolved: true, + type1: "bug", + type2: null, + statsTotal: 565, + atk: 238, + def: 197, + sta: 130, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 128, + name: "Tauros", + isEvolved: true, + type1: "normal", + type2: null, + statsTotal: 545, + atk: 198, + def: 197, + sta: 150, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 129, + name: "Magikarp", + isEvolved: false, + type1: "water", + type2: null, + statsTotal: 171, + atk: 29, + def: 102, + sta: 40, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 130, + name: "Gyarados", + evolutionStage: 2, + type1: "water", + type2: "flying", + statsTotal: 624, + atk: 237, + def: 197, + sta: 190, + isLegendary: false, + isEvolved: true, + }, + { + id: 131, + name: "Lapras", + evolutionStage: 1, + type1: "water", + type2: "ice", + statsTotal: 605, + atk: 165, + def: 180, + sta: 260, + isLegendary: false, + isEvolved: false, + }, + { + id: 132, + name: "Ditto", + isEvolved: false, + type1: "normal", + type2: null, + statsTotal: 278, + atk: 91, + def: 91, + sta: 96, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 133, + name: "Eevee", + isEvolved: false, + type1: "normal", + type2: null, + statsTotal: 335, + atk: 104, + def: 121, + sta: 110, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 134, + name: "Vaporeon", + isEvolved: true, + type1: "water", + type2: null, + statsTotal: 642, + atk: 205, + def: 177, + sta: 260, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 135, + name: "Jolteon", + isEvolved: true, + type1: "electric", + type2: null, + statsTotal: 563, + atk: 232, + def: 201, + sta: 130, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 136, + name: "Flareon", + isEvolved: true, + type1: "fire", + type2: null, + statsTotal: 580, + atk: 246, + def: 204, + sta: 130, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 137, + name: "Porygon", + isEvolved: false, + type1: "normal", + type2: null, + statsTotal: 422, + atk: 153, + def: 139, + sta: 130, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 138, + name: "Omanyte", + evolutionStage: 1, + type1: "rock", + type2: "water", + statsTotal: 399, + atk: 155, + def: 174, + sta: 70, + isLegendary: false, + isEvolved: false, + }, + { + id: 139, + name: "Omastar", + evolutionStage: 2, + type1: "rock", + type2: "water", + statsTotal: 574, + atk: 207, + def: 227, + sta: 140, + isLegendary: false, + isEvolved: true, + }, + { + id: 140, + name: "Kabuto", + evolutionStage: 1, + type1: "rock", + type2: "water", + statsTotal: 370, + atk: 148, + def: 162, + sta: 60, + isLegendary: false, + isEvolved: false, + }, + { + id: 141, + name: "Kabutops", + evolutionStage: 2, + type1: "rock", + type2: "water", + statsTotal: 543, + atk: 220, + def: 203, + sta: 120, + isLegendary: false, + isEvolved: true, + }, + { + id: 142, + name: "Aerodactyl", + evolutionStage: 1, + type1: "rock", + type2: "flying", + statsTotal: 545, + atk: 221, + def: 164, + sta: 160, + isLegendary: false, + isEvolved: false, + }, + { + id: 143, + name: "Snorlax", + isEvolved: false, + type1: "normal", + type2: null, + statsTotal: 700, + atk: 190, + def: 190, + sta: 320, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 144, + name: "Articuno", + evolutionStage: 1, + type1: "ice", + type2: "flying", + statsTotal: 621, + atk: 192, + def: 249, + sta: 180, + isLegendary: true, + isEvolved: false, + }, + { + id: 145, + name: "Zapdos", + evolutionStage: 1, + type1: "electric", + type2: "flying", + statsTotal: 621, + atk: 253, + def: 188, + sta: 180, + isLegendary: true, + isEvolved: false, + }, + { + id: 146, + name: "Moltres", + evolutionStage: 1, + type1: "fire", + type2: "flying", + statsTotal: 615, + atk: 251, + def: 184, + sta: 180, + isLegendary: true, + isEvolved: false, + }, + { + id: 147, + name: "Dratini", + isEvolved: false, + type1: "dragon", + type2: null, + statsTotal: 295, + atk: 119, + def: 94, + sta: 82, + isLegendary: false, + evolutionStage: 1, + }, + { + id: 148, + name: "Dragonair", + isEvolved: true, + type1: "dragon", + type2: null, + statsTotal: 423, + atk: 163, + def: 138, + sta: 122, + isLegendary: false, + evolutionStage: 2, + }, + { + id: 149, + name: "Dragonite", + evolutionStage: 3, + type1: "dragon", + type2: "flying", + statsTotal: 646, + atk: 263, + def: 201, + sta: 182, + isLegendary: false, + isEvolved: true, + }, + { + id: 150, + name: "Mewtwo", + isEvolved: false, + type1: "psychic", + type2: null, + statsTotal: 675, + atk: 300, + def: 182, + sta: 193, + isLegendary: true, + evolutionStage: 1, + }, + { + id: 151, + name: "Mew", + isEvolved: true, + type1: "psychic", + type2: null, + statsTotal: 620, + atk: 210, + def: 210, + sta: 200, + isLegendary: false, + evolutionStage: 1, + }, +]; diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 000000000..9d1dc4e5d --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es2016", + "module": "commonjs", + "outDir": "dist", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"], + "@/models/*": ["src/models/*"], + "@/modules/*": ["src/modules/*"], + "@/static/*": ["src/static/*"] + } + } +} diff --git a/backend/yarn.lock b/backend/yarn.lock new file mode 100644 index 000000000..41778d8f0 --- /dev/null +++ b/backend/yarn.lock @@ -0,0 +1,1690 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724" + integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== + +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.1" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.38.0": + version "8.38.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.38.0.tgz#73a8a0d8aa8a8e6fe270431c5e72ae91b5337892" + integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@prisma/client@^4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.12.0.tgz#119b692888b1fe0fd3305c7d0e0ac48520aa6839" + integrity sha512-j9/ighfWwux97J2dS15nqhl60tYoH8V0IuSsgZDb6bCFcQD3fXbXmxjYC8GHhIgOk3lB7Pq+8CwElz2MiDpsSg== + dependencies: + "@prisma/engines-version" "4.12.0-67.659ef412370fa3b41cd7bf6e94587c1dfb7f67e7" + +"@prisma/engines-version@4.12.0-67.659ef412370fa3b41cd7bf6e94587c1dfb7f67e7": + version "4.12.0-67.659ef412370fa3b41cd7bf6e94587c1dfb7f67e7" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.12.0-67.659ef412370fa3b41cd7bf6e94587c1dfb7f67e7.tgz#51a1cc5c886564b542acde64a873645d0dee2566" + integrity sha512-JIHNj5jlXb9mcaJwakM0vpgRYJIAurxTUqM0iX0tfEQA5XLZ9ONkIckkhuAKdAzocZ+80GYg7QSsfpjg7OxbOA== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/cors@^2.8.12": + version "2.8.13" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94" + integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA== + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.14": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/multer@^1.4.7": + version "1.4.7" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.7.tgz#89cf03547c28c7bbcc726f029e2a76a7232cc79e" + integrity sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA== + dependencies: + "@types/express" "*" + +"@types/node@*": + version "18.15.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@types/serve-static@*": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/strip-bom@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" + integrity sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + +"@typescript-eslint/eslint-plugin@^5.43.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz#b1d4b0ad20243269d020ef9bbb036a40b0849829" + integrity sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/type-utils" "5.58.0" + "@typescript-eslint/utils" "5.58.0" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.43.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.58.0.tgz#2ac4464cf48bef2e3234cb178ede5af352dddbc6" + integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== + dependencies: + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz#5e023a48352afc6a87be6ce3c8e763bc9e2f0bc8" + integrity sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA== + dependencies: + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" + +"@typescript-eslint/type-utils@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz#f7d5b3971483d4015a470d8a9e5b8a7d10066e52" + integrity sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w== + dependencies: + "@typescript-eslint/typescript-estree" "5.58.0" + "@typescript-eslint/utils" "5.58.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.58.0.tgz#54c490b8522c18986004df7674c644ffe2ed77d8" + integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== + +"@typescript-eslint/typescript-estree@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz#4966e6ff57eaf6e0fce2586497edc097e2ab3e61" + integrity sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q== + dependencies: + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.58.0.tgz#430d7c95f23ec457b05be5520c1700a0dfd559d5" + integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz#eb9de3a61d2331829e6761ce7fd13061781168b4" + integrity sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA== + dependencies: + "@typescript-eslint/types" "5.58.0" + eslint-visitor-keys "^3.3.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv@^6.10.0, ajv@^6.12.4: + 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" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.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@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +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@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +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== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +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" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.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" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +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" + +dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + +dynamic-dedupe@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" + integrity sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ== + dependencies: + xtend "^4.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +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-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== + +eslint@^8.27.0: + version "8.38.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.38.0.tgz#a62c6f36e548a5574dd35728ac3c6209bd1e2f1a" + integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.38.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.0" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + 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: + 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.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +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 sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +express@^4.18.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + 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-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +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: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.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.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-intrinsic@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.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" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sdsl@^4.1.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +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-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 sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +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" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge2@^1.3.0, merge2@^1.4.1: + 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: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +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" + +p-limit@^3.0.2: + 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@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +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" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +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== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +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== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +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@^1.0.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +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@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +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" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^7.3.7: + version "7.4.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@^0.5.12: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +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== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +ts-node-dev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-2.0.0.tgz#bdd53e17ab3b5d822ef519928dc6b4a7e0f13065" + integrity sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w== + dependencies: + chokidar "^3.5.1" + dynamic-dedupe "^0.3.0" + minimist "^1.2.6" + mkdirp "^1.0.4" + resolve "^1.0.0" + rimraf "^2.6.1" + source-map-support "^0.5.12" + tree-kill "^1.2.2" + ts-node "^10.4.0" + tsconfig "^7.0.0" + +ts-node@^10.4.0, ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +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-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +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" + +typescript@^4.9.3: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +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" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +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== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +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== + +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 23f73284d743cc76f8fa3a994308095499ae4499 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Thu, 13 Apr 2023 15:05:51 -0300 Subject: [PATCH 02/15] [feat] add Pokemon prisma model and migration --- .../migration.sql | 19 ++++++++ backend/prisma/migrations/migration_lock.toml | 3 ++ backend/prisma/schema.prisma | 45 +++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 backend/prisma/migrations/20230412230923_add_pokemon_table/migration.sql create mode 100644 backend/prisma/migrations/migration_lock.toml create mode 100644 backend/prisma/schema.prisma diff --git a/backend/prisma/migrations/20230412230923_add_pokemon_table/migration.sql b/backend/prisma/migrations/20230412230923_add_pokemon_table/migration.sql new file mode 100644 index 000000000..034e3109a --- /dev/null +++ b/backend/prisma/migrations/20230412230923_add_pokemon_table/migration.sql @@ -0,0 +1,19 @@ +-- CreateEnum +CREATE TYPE "PokemonTypes" AS ENUM ('normal', 'fire', 'water', 'grass', 'flying', 'fighting', 'poison', 'electric', 'ground', 'rock', 'psychic', 'ice', 'bug', 'ghost', 'steel', 'dragon', 'dark', 'fairy'); + +-- CreateTable +CREATE TABLE "pokemons" ( + "id" INTEGER NOT NULL, + "name" TEXT NOT NULL, + "evolutionStage" INTEGER NOT NULL, + "type1" "PokemonTypes" NOT NULL, + "type2" "PokemonTypes", + "statsTotal" INTEGER NOT NULL, + "atk" INTEGER NOT NULL, + "def" INTEGER NOT NULL, + "sta" INTEGER NOT NULL, + "isEvolved" BOOLEAN NOT NULL, + "isLegendary" BOOLEAN NOT NULL, + + CONSTRAINT "pokemons_pkey" PRIMARY KEY ("id") +); diff --git a/backend/prisma/migrations/migration_lock.toml b/backend/prisma/migrations/migration_lock.toml new file mode 100644 index 000000000..fbffa92c2 --- /dev/null +++ b/backend/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma new file mode 100644 index 000000000..5fd718967 --- /dev/null +++ b/backend/prisma/schema.prisma @@ -0,0 +1,45 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model Pokemon { + id Int @id + name String + evolutionStage Int + type1 PokemonTypes + type2 PokemonTypes? + statsTotal Int + atk Int + def Int + sta Int + isEvolved Boolean + isLegendary Boolean + + @@map("pokemons") +} + +enum PokemonTypes { + normal + fire + water + grass + flying + fighting + poison + electric + ground + rock + psychic + ice + bug + ghost + steel + dragon + dark + fairy +} From 624405d13277e2256aa3ffff0544a76e6a77ae4b Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Thu, 13 Apr 2023 15:06:15 -0300 Subject: [PATCH 03/15] [feat] add pokemon routes --- .../src/modules/pokemon/pokemon.controller.ts | 48 ++++++++++++++++++ backend/src/modules/pokemon/pokemon.module.ts | 22 +++++++++ .../src/modules/pokemon/pokemon.service.ts | 17 +++++++ .../pokemon/repositories/PokemonRepository.ts | 49 +++++++++++++++++++ .../repositories/iPokemonRepository.ts | 9 ++++ 5 files changed, 145 insertions(+) create mode 100644 backend/src/modules/pokemon/pokemon.controller.ts create mode 100644 backend/src/modules/pokemon/pokemon.module.ts create mode 100644 backend/src/modules/pokemon/pokemon.service.ts create mode 100644 backend/src/modules/pokemon/repositories/PokemonRepository.ts create mode 100644 backend/src/modules/pokemon/repositories/iPokemonRepository.ts diff --git a/backend/src/modules/pokemon/pokemon.controller.ts b/backend/src/modules/pokemon/pokemon.controller.ts new file mode 100644 index 000000000..7d1adf466 --- /dev/null +++ b/backend/src/modules/pokemon/pokemon.controller.ts @@ -0,0 +1,48 @@ +import { Request, Response } from "express"; +import { PokemonService } from "./pokemon.service"; +import { HttpError } from "@/helpers/HttpError"; + +export class PokemonController { + constructor(private pokemonService: PokemonService) {} + + async createAllPokemons(req: Request, res: Response) { + try { + await this.pokemonService.createAllPokemons(); + return res.status(200).json({ + message: "All pokemons created", + }); + } catch (error) { + if (error instanceof HttpError) { + return res.status(error.statusCode).json(error); + } + return error; + } + } + + async findAllPokemons(req: Request, res: Response) { + try { + const pokemonsList = await this.pokemonService.findAllPokemons(); + res.json(pokemonsList); + } catch (error) { + if (error instanceof HttpError) { + return res.status(error.statusCode).json(error); + } + return error; + } + } + + async findOnePokemon(req: Request<{ pokemonId: string }>, res: Response) { + const pokemonId = Number(req.params.pokemonId); + try { + const categoriesList = await this.pokemonService.findOnePokemon( + pokemonId + ); + res.json(categoriesList); + } catch (error) { + if (error instanceof HttpError) { + return res.status(error.statusCode).json(error); + } + return error; + } + } +} diff --git a/backend/src/modules/pokemon/pokemon.module.ts b/backend/src/modules/pokemon/pokemon.module.ts new file mode 100644 index 000000000..916ab9b76 --- /dev/null +++ b/backend/src/modules/pokemon/pokemon.module.ts @@ -0,0 +1,22 @@ +import { prisma, router } from "@/main"; +import { PokemonController } from "./pokemon.controller"; +import { PokemonService } from "./pokemon.service"; +import { PokemonRepository } from "./repositories/PokemonRepository"; + +export class PokemonModule { + instantiate() { + const repository = new PokemonRepository(prisma); + const service = new PokemonService(repository); + const controller = new PokemonController(service); + + router.post("/pokemons", (req, res) => + controller.createAllPokemons(req, res) + ); + + router.get("/pokemons", (req, res) => controller.findAllPokemons(req, res)); + + router.get("/pokemons/:pokemonId", (req, res) => + controller.findOnePokemon(req, res) + ); + } +} diff --git a/backend/src/modules/pokemon/pokemon.service.ts b/backend/src/modules/pokemon/pokemon.service.ts new file mode 100644 index 000000000..aedb56ce9 --- /dev/null +++ b/backend/src/modules/pokemon/pokemon.service.ts @@ -0,0 +1,17 @@ +import { iPokemonRepository } from "./repositories/iPokemonRepository"; + +export class PokemonService { + constructor(private iPokemonRepository: iPokemonRepository) {} + + async createAllPokemons() { + return this.iPokemonRepository.createAll(); + } + + async findAllPokemons() { + return this.iPokemonRepository.findAll(); + } + + async findOnePokemon(pokemonId: number) { + return this.iPokemonRepository.findOne(pokemonId); + } +} diff --git a/backend/src/modules/pokemon/repositories/PokemonRepository.ts b/backend/src/modules/pokemon/repositories/PokemonRepository.ts new file mode 100644 index 000000000..8d9fd8829 --- /dev/null +++ b/backend/src/modules/pokemon/repositories/PokemonRepository.ts @@ -0,0 +1,49 @@ +import { PrismaClient } from "@prisma/client"; +import { POKEMON_DATA } from "@/static/POKEMON_DATA"; +import { iPokemonRepository } from "./iPokemonRepository"; +import { HttpError } from "@/helpers/HttpError"; + +export class PokemonRepository implements iPokemonRepository { + constructor(private prisma: PrismaClient) {} + + async createAll() { + const thereIsDataAlready = !!(await this.prisma.pokemon.findFirst({ + where: { + id: POKEMON_DATA[0].id, + }, + })); + + if (thereIsDataAlready) + throw new HttpError({ + name: "Pokemon data already exists", + statusCode: 400, + message: "all pokemon data already exists in the database", + }); + + return await this.prisma.pokemon.createMany({ + data: POKEMON_DATA, + }); + } + + async findAll() { + const pokemonList = await this.prisma.pokemon.findMany(); + return pokemonList; + } + + async findOne(pokemonId: number) { + const pokemon = await this.prisma.pokemon.findUnique({ + where: { + id: pokemonId, + }, + }); + + if (!pokemon) + throw new HttpError({ + name: "Pokemon not founded", + statusCode: 404, + message: "no pokemon found with the provided id", + }); + + return pokemon; + } +} diff --git a/backend/src/modules/pokemon/repositories/iPokemonRepository.ts b/backend/src/modules/pokemon/repositories/iPokemonRepository.ts new file mode 100644 index 000000000..666ef8a6c --- /dev/null +++ b/backend/src/modules/pokemon/repositories/iPokemonRepository.ts @@ -0,0 +1,9 @@ +import { Pokemon } from "@prisma/client"; + +export interface iPokemonRepository { + createAll: () => Promise; + + findAll: () => Promise; + + findOne: (id: number) => Promise; +} From 72637ef9bc449ef8bfecc169e38cad79f97e904b Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Thu, 13 Apr 2023 17:53:02 -0300 Subject: [PATCH 04/15] [feat] add image property/column to pokemon model/table --- backend/package.json | 1 + .../migration.sql | 8 ++++ backend/prisma/schema.prisma | 1 + .../src/helpers/api/getPokemonsWithImages.ts | 27 +++++++++++ .../pokemon/repositories/PokemonRepository.ts | 11 +++-- backend/yarn.lock | 45 ++++++++++++++++++- 6 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 backend/prisma/migrations/20230413204115_add_image_column_to_pokemon_table/migration.sql create mode 100644 backend/src/helpers/api/getPokemonsWithImages.ts diff --git a/backend/package.json b/backend/package.json index dd062dd69..8cb06992a 100644 --- a/backend/package.json +++ b/backend/package.json @@ -14,6 +14,7 @@ }, "dependencies": { "@prisma/client": "^4.12.0", + "axios": "^1.3.5", "cors": "^2.8.5", "express": "^4.18.2" }, diff --git a/backend/prisma/migrations/20230413204115_add_image_column_to_pokemon_table/migration.sql b/backend/prisma/migrations/20230413204115_add_image_column_to_pokemon_table/migration.sql new file mode 100644 index 000000000..483586f4b --- /dev/null +++ b/backend/prisma/migrations/20230413204115_add_image_column_to_pokemon_table/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - Added the required column `image` to the `pokemons` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "pokemons" ADD COLUMN "image" TEXT NOT NULL; diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma index 5fd718967..de5010100 100644 --- a/backend/prisma/schema.prisma +++ b/backend/prisma/schema.prisma @@ -10,6 +10,7 @@ datasource db { model Pokemon { id Int @id name String + image String evolutionStage Int type1 PokemonTypes type2 PokemonTypes? diff --git a/backend/src/helpers/api/getPokemonsWithImages.ts b/backend/src/helpers/api/getPokemonsWithImages.ts new file mode 100644 index 000000000..4e589f03e --- /dev/null +++ b/backend/src/helpers/api/getPokemonsWithImages.ts @@ -0,0 +1,27 @@ +import axios from "axios"; +import { POKEMON_DATA } from "@/static/POKEMON_DATA"; +import { Pokemon } from "@prisma/client"; + +export const getPokemonsWithImages = async (): Promise => { + return await Promise.all( + POKEMON_DATA.map(async (pokemon) => { + try { + const res = await axios.get( + `https://pokeapi.co/api/v2/pokemon/${pokemon.id}` + ); + const pokeImg = res.data.sprites.other.dream_world + .front_default as string; + + return { + ...pokemon, + image: pokeImg, + }; + } catch { + return { + ...pokemon, + image: "", + }; + } + }) + ); +}; diff --git a/backend/src/modules/pokemon/repositories/PokemonRepository.ts b/backend/src/modules/pokemon/repositories/PokemonRepository.ts index 8d9fd8829..91154efe5 100644 --- a/backend/src/modules/pokemon/repositories/PokemonRepository.ts +++ b/backend/src/modules/pokemon/repositories/PokemonRepository.ts @@ -2,26 +2,29 @@ import { PrismaClient } from "@prisma/client"; import { POKEMON_DATA } from "@/static/POKEMON_DATA"; import { iPokemonRepository } from "./iPokemonRepository"; import { HttpError } from "@/helpers/HttpError"; +import { getPokemonsWithImages } from "@/helpers/api/getPokemonsWithImages"; export class PokemonRepository implements iPokemonRepository { constructor(private prisma: PrismaClient) {} async createAll() { - const thereIsDataAlready = !!(await this.prisma.pokemon.findFirst({ + const isThereDataAlready = !!(await this.prisma.pokemon.findFirst({ where: { id: POKEMON_DATA[0].id, }, })); - if (thereIsDataAlready) + if (isThereDataAlready) throw new HttpError({ - name: "Pokemon data already exists", + name: "Pokemon data has already be set", statusCode: 400, message: "all pokemon data already exists in the database", }); + const pokemonsWithImage = await getPokemonsWithImages(); + return await this.prisma.pokemon.createMany({ - data: POKEMON_DATA, + data: pokemonsWithImage, }); } diff --git a/backend/yarn.lock b/backend/yarn.lock index 41778d8f0..0fb30d835 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -384,6 +384,20 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.5.tgz#e07209b39a0d11848e3e341fa087acd71dadc542" + integrity sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -485,6 +499,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -553,6 +572,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -842,6 +866,20 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -1130,7 +1168,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -1304,6 +1342,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" From 385e5f7ce95b19e010159f9f7f1e1c1efdd37e96 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Thu, 13 Apr 2023 20:42:49 -0300 Subject: [PATCH 05/15] [feat] add pokemon pagination and filter --- .../src/modules/pokemon/pokemon.controller.ts | 8 +++-- .../src/modules/pokemon/pokemon.service.ts | 5 ++-- .../pokemon/repositories/PokemonRepository.ts | 29 +++++++++++++++++-- .../repositories/iPokemonRepository.ts | 10 ++++++- backend/src/types/QueryParams.ts | 5 ++++ 5 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 backend/src/types/QueryParams.ts diff --git a/backend/src/modules/pokemon/pokemon.controller.ts b/backend/src/modules/pokemon/pokemon.controller.ts index 7d1adf466..755af87b2 100644 --- a/backend/src/modules/pokemon/pokemon.controller.ts +++ b/backend/src/modules/pokemon/pokemon.controller.ts @@ -19,9 +19,13 @@ export class PokemonController { } } - async findAllPokemons(req: Request, res: Response) { + async findAllPokemons({ query }: Request, res: Response) { try { - const pokemonsList = await this.pokemonService.findAllPokemons(); + const pokemonsList = await this.pokemonService.findAllPokemons({ + name: query.name ? String(query.name) : undefined, + offset: Number(query?.offset || 0), + limit: Number(query?.limit || 10), + }); res.json(pokemonsList); } catch (error) { if (error instanceof HttpError) { diff --git a/backend/src/modules/pokemon/pokemon.service.ts b/backend/src/modules/pokemon/pokemon.service.ts index aedb56ce9..97cda0d25 100644 --- a/backend/src/modules/pokemon/pokemon.service.ts +++ b/backend/src/modules/pokemon/pokemon.service.ts @@ -1,3 +1,4 @@ +import { QueryParams } from "@/types/QueryParams"; import { iPokemonRepository } from "./repositories/iPokemonRepository"; export class PokemonService { @@ -7,8 +8,8 @@ export class PokemonService { return this.iPokemonRepository.createAll(); } - async findAllPokemons() { - return this.iPokemonRepository.findAll(); + async findAllPokemons(queries: QueryParams) { + return this.iPokemonRepository.findAll(queries); } async findOnePokemon(pokemonId: number) { diff --git a/backend/src/modules/pokemon/repositories/PokemonRepository.ts b/backend/src/modules/pokemon/repositories/PokemonRepository.ts index 91154efe5..ad3f204da 100644 --- a/backend/src/modules/pokemon/repositories/PokemonRepository.ts +++ b/backend/src/modules/pokemon/repositories/PokemonRepository.ts @@ -3,6 +3,7 @@ import { POKEMON_DATA } from "@/static/POKEMON_DATA"; import { iPokemonRepository } from "./iPokemonRepository"; import { HttpError } from "@/helpers/HttpError"; import { getPokemonsWithImages } from "@/helpers/api/getPokemonsWithImages"; +import { QueryParams } from "@/types/QueryParams"; export class PokemonRepository implements iPokemonRepository { constructor(private prisma: PrismaClient) {} @@ -28,9 +29,31 @@ export class PokemonRepository implements iPokemonRepository { }); } - async findAll() { - const pokemonList = await this.prisma.pokemon.findMany(); - return pokemonList; + async findAll({ offset, limit, name }: QueryParams) { + const count = await this.prisma.pokemon.count(); + const next = offset + limit; + const previous = offset - count < 0 ? null : offset - limit; + const nextUrl = next < count ? `?limit=${limit}&offset=${next}` : null; + const previousUrl = + previous != null ? `?limit=${limit}&offset=${previous}` : null; + + const filteredPokemonList = await this.prisma.pokemon.findMany({ + skip: offset, + take: limit, + where: { + name: { + contains: name, + mode: "insensitive", + }, + }, + }); + + return { + count, + previous: previousUrl, + next: nextUrl, + results: filteredPokemonList, + }; } async findOne(pokemonId: number) { diff --git a/backend/src/modules/pokemon/repositories/iPokemonRepository.ts b/backend/src/modules/pokemon/repositories/iPokemonRepository.ts index 666ef8a6c..20de96d9c 100644 --- a/backend/src/modules/pokemon/repositories/iPokemonRepository.ts +++ b/backend/src/modules/pokemon/repositories/iPokemonRepository.ts @@ -1,9 +1,17 @@ +import { QueryParams } from "@/types/QueryParams"; import { Pokemon } from "@prisma/client"; +interface PokemonPaginationResponse { + count: number; + previous: string | null; + next: string | null; + results: Pokemon[]; +} + export interface iPokemonRepository { createAll: () => Promise; - findAll: () => Promise; + findAll: (arg1: QueryParams) => Promise; findOne: (id: number) => Promise; } diff --git a/backend/src/types/QueryParams.ts b/backend/src/types/QueryParams.ts new file mode 100644 index 000000000..b186a9c4b --- /dev/null +++ b/backend/src/types/QueryParams.ts @@ -0,0 +1,5 @@ +export interface QueryParams { + name: string | undefined; + offset: number; + limit: number; +} From d55c24a44a83b0ec45fc11ef3ed86efc74cee295 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Fri, 14 Apr 2023 12:05:27 -0300 Subject: [PATCH 06/15] [feat] add Home page --- frontend/.editorconfig | 12 + frontend/.eslintrc.json | 3 + frontend/.gitignore | 35 + frontend/.prettierrc | 5 + frontend/next.config.js | 14 + frontend/package.json | 32 + frontend/postcss.config.js | 6 + frontend/public/favicon.ico | Bin 0 -> 727 bytes .../display/PokemonCard/PokemonCard.tsx | 43 + .../display/PokemonTypeTag/PokemonTypeTag.tsx | 12 + frontend/src/components/display/index.ts | 1 + frontend/src/components/feedback/Skeleton.tsx | 32 + frontend/src/components/feedback/Spinner.tsx | 23 + frontend/src/components/feedback/index.ts | 2 + frontend/src/hooks/helpers/useDebounce.ts | 15 + frontend/src/hooks/useQueryGet.ts | 32 + frontend/src/hooks/useQueryPagination.ts | 38 + frontend/src/pages/_app.tsx | 24 + frontend/src/pages/_document.tsx | 15 + frontend/src/pages/index.tsx | 109 + frontend/src/pages/pokemon/[pokemon-id].tsx | 0 frontend/src/services/axios.ts | 5 + frontend/src/styles/globals.css | 36 + frontend/src/styles/pokemonTypeColors.ts | 20 + frontend/src/types/PaginationResponse.ts | 6 + frontend/src/types/Pokemon.ts | 16 + frontend/src/types/PokemonTypes.ts | 19 + frontend/src/types/index.ts | 3 + frontend/tailwind.config.js | 12 + frontend/tsconfig.json | 26 + frontend/yarn.lock | 2544 +++++++++++++++++ 31 files changed, 3140 insertions(+) create mode 100644 frontend/.editorconfig create mode 100644 frontend/.eslintrc.json create mode 100644 frontend/.gitignore create mode 100644 frontend/.prettierrc create mode 100644 frontend/next.config.js create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/src/components/display/PokemonCard/PokemonCard.tsx create mode 100644 frontend/src/components/display/PokemonTypeTag/PokemonTypeTag.tsx create mode 100644 frontend/src/components/display/index.ts create mode 100644 frontend/src/components/feedback/Skeleton.tsx create mode 100644 frontend/src/components/feedback/Spinner.tsx create mode 100644 frontend/src/components/feedback/index.ts create mode 100644 frontend/src/hooks/helpers/useDebounce.ts create mode 100644 frontend/src/hooks/useQueryGet.ts create mode 100644 frontend/src/hooks/useQueryPagination.ts create mode 100644 frontend/src/pages/_app.tsx create mode 100644 frontend/src/pages/_document.tsx create mode 100644 frontend/src/pages/index.tsx create mode 100644 frontend/src/pages/pokemon/[pokemon-id].tsx create mode 100644 frontend/src/services/axios.ts create mode 100644 frontend/src/styles/globals.css create mode 100644 frontend/src/styles/pokemonTypeColors.ts create mode 100644 frontend/src/types/PaginationResponse.ts create mode 100644 frontend/src/types/Pokemon.ts create mode 100644 frontend/src/types/PokemonTypes.ts create mode 100644 frontend/src/types/index.ts create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.json create mode 100644 frontend/yarn.lock diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 000000000..ebe51d3bf --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +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 diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json new file mode 100644 index 000000000..bffb357a7 --- /dev/null +++ b/frontend/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 000000000..8f322f0d8 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 000000000..0820853e4 --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,5 @@ +{ + "tabWidth": 2, + "useTabs": false, + "singleQuote": false +} diff --git a/frontend/next.config.js b/frontend/next.config.js new file mode 100644 index 000000000..7021a5df9 --- /dev/null +++ b/frontend/next.config.js @@ -0,0 +1,14 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "iconscout.com", + }, + ], + }, +}; + +module.exports = nextConfig; diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 000000000..43953c228 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,32 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@tanstack/react-query": "^4.29.1", + "@types/node": "18.15.11", + "@types/react": "18.0.35", + "@types/react-dom": "18.0.11", + "autoprefixer": "10.4.14", + "axios": "^1.3.5", + "eslint": "8.38.0", + "eslint-config-next": "13.3.0", + "next": "13.3.0", + "postcss": "8.4.21", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-infinite-scroll-hook": "^4.1.1", + "tailwindcss": "3.3.1", + "typescript": "5.0.4" + }, + "devDependencies": { + "@tanstack/react-query-devtools": "^4.29.1", + "delayed-stream": "^1.0.0" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 000000000..33ad091d2 --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..136514ae8050fbda73a4186f21a4fe9c2323111b GIT binary patch literal 727 zcmV;|0x127P)5@D_3VQGpkfa46xuQvdjZA8D zP(?y!#%KF%-^Pyb;>bSTCrvWD-mzCZJ2Ptow-BAgD<~SS$vsq@2YZZB0`YkYJpPAb z+$Z~=fRJ3W@@!9#k4mx#8*fP7qZsc*K_k)!#$p@6fTaquyXWHp8wR5o={EKd&oT5CQ$MnCzi|@d*plOo0ti)X` z5V)21%V!*ym+<#wd@jDbEAQgF3Eq@iM6u3_poH8BI`xwZd|_%p9ZZI$Euk^xAATgB#lh{!$7dyhAY>jdESQ zSS)th)5Iee?{nlYj7q`5SeAwHczop=i%11e76)I!5KYsrZ2GK~JK73{@IDJyGi2Aw z4Tr;M-!&SIA!5fZjg@x0t@L`mDeD|C)9Dn)gePv>(Sce(a=PZu(%fCdtt3%+-<@V| zO08a+IBHZ@n$4y{(PyyU>2xreOi%_Kxu$9QIt7T1%Xect&sHGVuryJxEK&ytY2B;s zr;o_pj^lJ_6%#(@Dpyn?yrRg;9!Wp%;gxss zKHmqK#0I9ac(&bc3)Moduj}>NNOkjzk&6=0ais6mm3MLF`43{++(0-qOeFvS002ov JPDHLkV1ke6P>TQn literal 0 HcmV?d00001 diff --git a/frontend/src/components/display/PokemonCard/PokemonCard.tsx b/frontend/src/components/display/PokemonCard/PokemonCard.tsx new file mode 100644 index 000000000..45270b244 --- /dev/null +++ b/frontend/src/components/display/PokemonCard/PokemonCard.tsx @@ -0,0 +1,43 @@ +import { pokemonTypeColors } from "@/styles/pokemonTypeColors"; +import { Pokemon } from "@/types"; +import Image from "next/image"; +import { PokemonTypeTag } from "../PokemonTypeTag/PokemonTypeTag"; +import Link from "next/link"; + +type PokemonCardProps = Pick< + Pokemon, + "id" | "name" | "image" | "type1" | "type2" +>; + +export const PokemonCard = ({ + id, + name, + image, + type1, + type2, +}: PokemonCardProps) => { + return ( + // +
+

+ #{("00" + id).slice(-3)} +

+

{name}

+ +
+
+ + +
+ +
+ {name} +
+
+
+ // + ); +}; diff --git a/frontend/src/components/display/PokemonTypeTag/PokemonTypeTag.tsx b/frontend/src/components/display/PokemonTypeTag/PokemonTypeTag.tsx new file mode 100644 index 000000000..9a3c2c13a --- /dev/null +++ b/frontend/src/components/display/PokemonTypeTag/PokemonTypeTag.tsx @@ -0,0 +1,12 @@ +import { PokemonTypes } from "@/types"; +type PokemonTypeTagProp = { type: PokemonTypes | null }; + +export const PokemonTypeTag = ({ type }: PokemonTypeTagProp) => { + return ( + type && ( + + {type.charAt(0).toUpperCase() + type.slice(1)} + + ) + ); +}; diff --git a/frontend/src/components/display/index.ts b/frontend/src/components/display/index.ts new file mode 100644 index 000000000..222f46c39 --- /dev/null +++ b/frontend/src/components/display/index.ts @@ -0,0 +1 @@ +export * from "./PokemonCard/PokemonCard"; diff --git a/frontend/src/components/feedback/Skeleton.tsx b/frontend/src/components/feedback/Skeleton.tsx new file mode 100644 index 000000000..b9689ab9f --- /dev/null +++ b/frontend/src/components/feedback/Skeleton.tsx @@ -0,0 +1,32 @@ +import { Fragment } from "react"; + +interface SkeletonProps { + quantity: number; + h?: string; + w?: string; + radius?: string; +} + +export const Skeleton = ({ + quantity, + h = "144px", + w = "100%", + radius = "1.5rem", +}: SkeletonProps) => { + const skeletonArray = Array.from({ + length: quantity, + }); + + return ( + + {skeletonArray.map((_, index) => ( +
+ ))} + + ); +}; diff --git a/frontend/src/components/feedback/Spinner.tsx b/frontend/src/components/feedback/Spinner.tsx new file mode 100644 index 000000000..ae0ed06ba --- /dev/null +++ b/frontend/src/components/feedback/Spinner.tsx @@ -0,0 +1,23 @@ +export const Spinner = () => { + return ( +
+ + Loading... +
+ ); +}; diff --git a/frontend/src/components/feedback/index.ts b/frontend/src/components/feedback/index.ts new file mode 100644 index 000000000..63e0eb5fb --- /dev/null +++ b/frontend/src/components/feedback/index.ts @@ -0,0 +1,2 @@ +export * from "./Skeleton"; +export * from "./Spinner"; diff --git a/frontend/src/hooks/helpers/useDebounce.ts b/frontend/src/hooks/helpers/useDebounce.ts new file mode 100644 index 000000000..fa7debce0 --- /dev/null +++ b/frontend/src/hooks/helpers/useDebounce.ts @@ -0,0 +1,15 @@ +import { useEffect, useState } from "react"; + +export const useDebounce = (value: T, delay: number): T => { + const [debouncedValue, setDebouncedValue] = useState(value); + useEffect(() => { + const handler = setTimeout(() => { + setDebouncedValue(value); + }, delay); + + return () => { + clearTimeout(handler); + }; + }, [value, delay]); + return debouncedValue; +}; diff --git a/frontend/src/hooks/useQueryGet.ts b/frontend/src/hooks/useQueryGet.ts new file mode 100644 index 000000000..92a69e374 --- /dev/null +++ b/frontend/src/hooks/useQueryGet.ts @@ -0,0 +1,32 @@ +import { api } from "@/services/axios"; +import { useQuery } from "@tanstack/react-query"; + +interface useReactQueryProps { + queryKeys: string[]; + url: string; + params?: { [key: string]: string | number }; + queryConfigs?: { + enabled?: boolean; + refetchOnWindowFocus?: boolean; + }; +} + +export function useQueryGet({ + queryKeys, + url, + params, + queryConfigs, +}: useReactQueryProps) { + const queryResponse = useQuery( + queryKeys, + async () => { + const { data } = await api.get(url, { + params, + }); + return data; + }, + { retry: false, ...queryConfigs } + ); + + return queryResponse; +} diff --git a/frontend/src/hooks/useQueryPagination.ts b/frontend/src/hooks/useQueryPagination.ts new file mode 100644 index 000000000..b11ea0e6c --- /dev/null +++ b/frontend/src/hooks/useQueryPagination.ts @@ -0,0 +1,38 @@ +import { api } from "@/services/axios"; +import { PaginationResponse } from "@/types"; +import { useInfiniteQuery } from "@tanstack/react-query"; + +interface useQueryPaginationProps { + url: string; + queryKeys: string[]; + pageLimit?: number; + searchParams: { [key: string]: string | undefined }; +} +export const useQueryPagination = ({ + url, + queryKeys, + searchParams, + pageLimit = 20, +}: useQueryPaginationProps) => { + const getData = async ({ pageParam = 0 }) => { + const { data } = await api.get>(url, { + params: { + offset: pageParam, + limit: pageLimit, + ...searchParams, + }, + }); + return data; + }; + + const infiniteQuery = useInfiniteQuery(queryKeys, getData, { + getNextPageParam: (lastPage, pages) => { + const nextOffset = pages.length * pageLimit; + return lastPage.next ? nextOffset : undefined; + }, + refetchOnWindowFocus: false, + keepPreviousData: true, + }); + + return infiniteQuery; +}; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx new file mode 100644 index 000000000..f0f95b465 --- /dev/null +++ b/frontend/src/pages/_app.tsx @@ -0,0 +1,24 @@ +import "@/styles/globals.css"; +import { + Hydrate, + QueryClient, + QueryClientProvider, +} from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; + +import type { AppProps } from "next/app"; +import { useState } from "react"; + +export default function App({ Component, pageProps }: AppProps) { + const [queryClient] = useState(() => new QueryClient()); + + return ( + + + + + + + + ); +} diff --git a/frontend/src/pages/_document.tsx b/frontend/src/pages/_document.tsx new file mode 100644 index 000000000..93af3b4ee --- /dev/null +++ b/frontend/src/pages/_document.tsx @@ -0,0 +1,15 @@ +import { Html, Head, Main, NextScript } from "next/document"; + +export default function Document() { + return ( + + + + + +
+ + + + ); +} diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx new file mode 100644 index 000000000..beb132b6d --- /dev/null +++ b/frontend/src/pages/index.tsx @@ -0,0 +1,109 @@ +import { Fragment, useState } from "react"; +import useInfiniteScroll from "react-infinite-scroll-hook"; +import Head from "next/head"; +import { Inter } from "next/font/google"; +import { PokemonCard } from "@/components/display"; +import { Pokemon } from "@/types"; +import { useQueryPagination } from "@/hooks/useQueryPagination"; +import { useDebounce } from "@/hooks/helpers/useDebounce"; +import { Skeleton, Spinner } from "@/components/feedback"; + +const inter = Inter({ subsets: ["latin"] }); + +export default function Home() { + const [pokeSearch, setPokeSearch] = useState(""); + const debouncedPokeSearch = useDebounce(pokeSearch, 800); + + const { + data: pokemonData, + fetchNextPage, + hasNextPage, + isFetchingNextPage, + isFetching, + isLoading, + isSuccess, + error, + } = useQueryPagination({ + queryKeys: [debouncedPokeSearch], + url: "/pokemons", + searchParams: { + name: debouncedPokeSearch, + }, + }); + + const handlePokeSearch = (nameSearch: string) => { + setPokeSearch(nameSearch); + }; + + const [sentryRef, { rootRef }] = useInfiniteScroll({ + loading: isLoading, + hasNextPage: hasNextPage ?? false, + onLoadMore: fetchNextPage, + disabled: !!error, + rootMargin: "0px 0px 200px 0px", + }); + + const dataTotal = pokemonData && pokemonData?.pages[0].results.length; + const hasData = pokemonData && pokemonData?.pages[0].results.length > 0; + const hasSearch = pokeSearch.length > 0; + const hasResultsOnSearch = hasSearch && hasData; + + return ( + <> + + Pokedex + + +
+
+

Pokedex

+ +
+ {isFetching && hasSearch ? : null} + handlePokeSearch(e.target.value)} + /> +
+
+ +
+ {pokemonData?.pages.map((group, i) => ( + + {group?.results.map(({ id, name, image, type1, type2 }) => ( + + ))} + + ))} + + {isLoading ? : null} + + {isFetchingNextPage && !isFetching ? : null} + + + + {!hasResultsOnSearch && hasSearch ? ( +
+ No pokemon found +
+ ) : null} +
+
+ + ); +} diff --git a/frontend/src/pages/pokemon/[pokemon-id].tsx b/frontend/src/pages/pokemon/[pokemon-id].tsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/services/axios.ts b/frontend/src/services/axios.ts new file mode 100644 index 000000000..a26c5a74a --- /dev/null +++ b/frontend/src/services/axios.ts @@ -0,0 +1,5 @@ +import axios from "axios"; + +export const api = axios.create({ + baseURL: "http://localhost:3001", +}); diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css new file mode 100644 index 000000000..95db661a0 --- /dev/null +++ b/frontend/src/styles/globals.css @@ -0,0 +1,36 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; +} + + +#__next{ + height: 100%; +} +body { + color: rgb(var(--foreground-rgb)); + background: rgb(var(--background-start-rgb)); + height: 100dvh; + display: flex; + flex-direction: column; + align-items: center; + padding: 1rem; + overflow: hidden; +} +*::-webkit-scrollbar { + width: 0.5rem; +} + +*::-webkit-scrollbar-track { + background-color: lightgrey; + border-radius: 999px; +} + +*::-webkit-scrollbar-thumb { + background-color: #EF4444; + border-radius: 999px +} \ No newline at end of file diff --git a/frontend/src/styles/pokemonTypeColors.ts b/frontend/src/styles/pokemonTypeColors.ts new file mode 100644 index 000000000..c0550dd62 --- /dev/null +++ b/frontend/src/styles/pokemonTypeColors.ts @@ -0,0 +1,20 @@ +export const pokemonTypeColors = { + bug: "#729f3f", + dragon: "#53a4cf", + fairy: "#fdb9e9", + fire: "#fd7d24", + ghost: "#7b62a3", + ground: "#f7de3f", + normal: "#a4acaf", + psychic: "#f366b9", + steel: "#9eb7bf", + dark: "#707070", + electric: "#eed535", + fighting: "#d56723", + flying: "#89AAE3", + grass: "#9bcc50", + ice: "#81CAED", + poison: "#b97fc9", + rock: "#a38c21", + water: "#4592c4", +}; diff --git a/frontend/src/types/PaginationResponse.ts b/frontend/src/types/PaginationResponse.ts new file mode 100644 index 000000000..78ebe40ab --- /dev/null +++ b/frontend/src/types/PaginationResponse.ts @@ -0,0 +1,6 @@ +export interface PaginationResponse { + count: number; + next: string; + previous: string; + results: Data; +} diff --git a/frontend/src/types/Pokemon.ts b/frontend/src/types/Pokemon.ts new file mode 100644 index 000000000..e8c5c4f34 --- /dev/null +++ b/frontend/src/types/Pokemon.ts @@ -0,0 +1,16 @@ +import { PokemonTypes } from "./PokemonTypes"; + +export type Pokemon = { + id: number; + name: string; + image: string; + evolutionStage: number; + type1: PokemonTypes; + type2: PokemonTypes | null; + statsTotal: number; + atk: number; + def: number; + sta: number; + isEvolved: boolean; + isLegendary: boolean; +}; diff --git a/frontend/src/types/PokemonTypes.ts b/frontend/src/types/PokemonTypes.ts new file mode 100644 index 000000000..39553b1d9 --- /dev/null +++ b/frontend/src/types/PokemonTypes.ts @@ -0,0 +1,19 @@ +export type PokemonTypes = + | "normal" + | "fire" + | "water" + | "grass" + | "flying" + | "fighting" + | "poison" + | "electric" + | "ground" + | "rock" + | "psychic" + | "ice" + | "bug" + | "ghost" + | "steel" + | "dragon" + | "dark" + | "fairy"; diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts new file mode 100644 index 000000000..e1e16c4ee --- /dev/null +++ b/frontend/src/types/index.ts @@ -0,0 +1,3 @@ +export * from "./Pokemon"; +export * from "./PokemonTypes"; +export * from "./PaginationResponse"; diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 000000000..514e77940 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./src/pages/**/*.{js,ts,jsx,tsx}", + "./src/components/**/*.{js,ts,jsx,tsx}", + "./src/app/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 000000000..cbb0f6697 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "paths": { + "@/*": ["./src/*"], + "@/components/*": ["./src/components/*"], + "@/types/*": ["./src/types/*"], + "@/assets/*": ["./src/assets/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 000000000..76998f440 --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,2544 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime@^7.20.7": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724" + integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== + +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.1" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.38.0": + version "8.38.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.38.0.tgz#73a8a0d8aa8a8e6fe270431c5e72ae91b5337892" + integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@next/env@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.3.0.tgz#cc2e49f03060a4684ce7ec7fd617a21bc5b9edba" + integrity sha512-AjppRV4uG3No7L1plinoTQETH+j2F10TEnrMfzbTUYwze5sBUPveeeBAPZPm8OkJZ1epq9OyYKhZrvbD6/9HCQ== + +"@next/eslint-plugin-next@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.3.0.tgz#3a4742b0817575cc0dd4d152cb10363584c215ac" + integrity sha512-wuGN5qSEjSgcq9fVkH0Y/qIPFjnZtW3ZPwfjJOn7l/rrf6y8J24h/lo61kwqunTyzZJm/ETGfGVU9PUs8cnzEA== + dependencies: + glob "7.1.7" + +"@next/swc-darwin-arm64@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.3.0.tgz#38f18e0639cd4c7edc6a38d4b83fe00f38eea4f2" + integrity sha512-DmIQCNq6JtccLPPBzf0dgh2vzMWt5wjxbP71pCi5EWpWYE3MsP6FcRXi4MlAmFNDQOfcFXR2r7kBeG1LpZUh1w== + +"@next/swc-darwin-x64@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.3.0.tgz#b670ed1fd1d231aa21279173ec52e3ad56dc6aeb" + integrity sha512-oQoqFa88OGgwnYlnAGHVct618FRI/749se0N3S8t9Bzdv5CRbscnO0RcX901+YnNK4Q6yeiizfgO3b7kogtsZg== + +"@next/swc-linux-arm64-gnu@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.3.0.tgz#b114935f6b4c94c123f6cac55a4823d483209ba5" + integrity sha512-Wzz2p/WqAJUqTVoLo6H18WMeAXo3i+9DkPDae4oQG8LMloJ3if4NEZTnOnTUlro6cq+S/W4pTGa97nWTrOjbGw== + +"@next/swc-linux-arm64-musl@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.3.0.tgz#67a57309f8761c7d00d629d6785d56ed0567a0d2" + integrity sha512-xPVrIQOQo9WXJYgmoTlMnAD/HlR/1e1ZIWGbwIzEirXBVBqMARUulBEIKdC19zuvoJ477qZJgBDCKtKEykCpyQ== + +"@next/swc-linux-x64-gnu@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.3.0.tgz#11bd2bea7c00b40be111c0dd16e71171f3792086" + integrity sha512-jOFlpGuPD7W2tuXVJP4wt9a3cpNxWAPcloq5EfMJRiXsBBOjLVFZA7boXYxEBzSVgUiVVr1V9T0HFM7pULJ1qA== + +"@next/swc-linux-x64-musl@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.3.0.tgz#d57e99f85890799b78719c3ea32a4624de8d701b" + integrity sha512-2OwKlzaBgmuet9XYHc3KwsEilzb04F540rlRXkAcjMHL7eCxB7uZIGtsVvKOnQLvC/elrUegwSw1+5f7WmfyOw== + +"@next/swc-win32-arm64-msvc@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.3.0.tgz#0c209aa35d1c88b01e78259a89cd68f4139b5093" + integrity sha512-OeHiA6YEvndxT46g+rzFK/MQTfftKxJmzslERMu9LDdC6Kez0bdrgEYed5eXFK2Z1viKZJCGRlhd06rBusyztA== + +"@next/swc-win32-ia32-msvc@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.3.0.tgz#52ae74da1dd6d840c3743923367d27ed013803dd" + integrity sha512-4aB7K9mcVK1lYEzpOpqWrXHEZympU3oK65fnNcY1Qc4HLJFLJj8AViuqQd4jjjPNuV4sl8jAwTz3gN5VNGWB7w== + +"@next/swc-win32-x64-msvc@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.0.tgz#db7b55fee834dc8c2c484c696469e65bae2ee770" + integrity sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgr/utils@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" + integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== + dependencies: + cross-spawn "^7.0.3" + is-glob "^4.0.3" + open "^8.4.0" + picocolors "^1.0.0" + tiny-glob "^0.2.9" + tslib "^2.4.0" + +"@rushstack/eslint-patch@^1.1.3": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" + integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== + +"@swc/helpers@0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + dependencies: + tslib "^2.4.0" + +"@tanstack/match-sorter-utils@^8.7.0": + version "8.8.4" + resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.8.4.tgz#0b2864d8b7bac06a9f84cb903d405852cc40a457" + integrity sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw== + dependencies: + remove-accents "0.4.2" + +"@tanstack/query-core@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.29.1.tgz#62a4bc120b85e6bb3c6c0aca96346e643e232248" + integrity sha512-vkPewLEG8ua0efo3SsVT0BcBtkq5RZX8oPhDAyKL+k/rdOYSQTEocfGEXSaBwIwsXeOGBUpfKqI+UmHvNqdWXg== + +"@tanstack/react-query-devtools@^4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-4.29.1.tgz#4cd09673b56b204fd6f18b8f4d47705ca9d288ca" + integrity sha512-lbtNGArplXLVmY8eEh8LFqZz61PJI38sASEcuKoSnEK8UgWvLCwY5vjlT8fzk10yQ4jhR3+PHKLDMXA5ifCTXw== + dependencies: + "@tanstack/match-sorter-utils" "^8.7.0" + superjson "^1.10.0" + use-sync-external-store "^1.2.0" + +"@tanstack/react-query@^4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.29.1.tgz#5f166aca63915c52f6eda930a54d6933bfd11d1b" + integrity sha512-/crv1v+OeuGG6EOvaQmyeo9GCKtH4jbmuhZkvk9ulufRiHcTr/A9+YP9GevEAZzUTdzXMwenpTbyxBGvG2xXvw== + dependencies: + "@tanstack/query-core" "4.29.1" + use-sync-external-store "^1.2.0" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/node@18.15.11": + version "18.15.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react-dom@18.0.11": + version "18.0.11" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" + integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@18.0.35": + version "18.0.35" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.35.tgz#192061cb1044fe01f2d3a94272cd35dd50502741" + integrity sha512-6Laome31HpetaIUGFWl1VQ3mdSImwxtFZ39rh059a1MNnKGqBpC88J6NJ8n/Is3Qx7CefDGLgf/KhN/sYCf7ag== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + +"@typescript-eslint/parser@^5.42.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.58.0.tgz#2ac4464cf48bef2e3234cb178ede5af352dddbc6" + integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== + dependencies: + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz#5e023a48352afc6a87be6ce3c8e763bc9e2f0bc8" + integrity sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA== + dependencies: + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" + +"@typescript-eslint/types@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.58.0.tgz#54c490b8522c18986004df7674c644ffe2ed77d8" + integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== + +"@typescript-eslint/typescript-estree@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz#4966e6ff57eaf6e0fce2586497edc097e2ab3e61" + integrity sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q== + dependencies: + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz#eb9de3a61d2331829e6761ce7fd13061781168b4" + integrity sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA== + dependencies: + "@typescript-eslint/types" "5.58.0" + eslint-visitor-keys "^3.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv@^6.10.0, ajv@^6.12.4: + 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" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.5, array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +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.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +autoprefixer@10.4.14: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axe-core@^4.6.2: + version "4.6.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" + integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== + +axios@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.5.tgz#e07209b39a0d11848e3e341fa087acd71dadc542" + integrity sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" + integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== + dependencies: + deep-equal "^2.0.5" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +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== + +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@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +busboy@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001478" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a" + integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@^1.1.4, 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== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + +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== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +copy-anything@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.3.tgz#206767156f08da0e02efd392f71abcdf79643559" + integrity sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw== + dependencies: + is-what "^4.1.8" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-equal@^2.0.5: + version "2.2.0" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" + integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== + dependencies: + call-bind "^1.0.2" + es-get-iterator "^1.1.2" + get-intrinsic "^1.1.3" + is-arguments "^1.1.1" + is-array-buffer "^3.0.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.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 sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +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" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +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" + +electron-to-chromium@^1.4.284: + version "1.4.362" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.362.tgz#1dfd7a076fc4785a16941f06410d0668e1a7a1aa" + integrity sha512-PYzAoScDfUcAwZfJQvr6hK2xXzLsMocj/Wuz6LpW6TZQNVv9TflBSB+UoEPuFujc478BgAxCoCFarcVPmjzsog== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +enhanced-resolve@^5.12.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-get-iterator@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +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-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-next@13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.3.0.tgz#c302fbecfe2b976ea306f7622af637ef9d9e3802" + integrity sha512-6YEwmFBX0VjBd3ODGW9df0Is0FLaRFdMN8eAahQG9CN6LjQ28J8AFr19ngxqMSg7Qv6Uca/3VeeBosJh1bzu0w== + dependencies: + "@next/eslint-plugin-next" "13.3.0" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.42.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.31.7" + eslint-plugin-react-hooks "^4.5.0" + +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-import-resolver-typescript@^3.5.2: + version "3.5.5" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" + integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + get-tsconfig "^4.5.0" + globby "^13.1.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + synckit "^0.8.5" + +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.26.0: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + dependencies: + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + ast-types-flow "^0.0.7" + axe-core "^4.6.2" + axobject-query "^3.1.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + semver "^6.3.0" + +eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.31.7: + version "7.32.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" + integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.4" + semver "^6.3.0" + string.prototype.matchall "^4.0.8" + +eslint-scope@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== + +eslint@8.38.0: + version "8.38.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.38.0.tgz#a62c6f36e548a5574dd35728ac3c6209bd1e2f1a" + integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.38.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.0" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + 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@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +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== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + 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-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +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: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +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" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.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.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.5.0.tgz#6d52d1c7b299bd3ee9cd7638561653399ac77b0f" + integrity sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.6: + 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" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + 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" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.3: + version "13.1.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +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-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +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" + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.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" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +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-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.9.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +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-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +is-what@^4.1.8: + version "4.1.8" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.8.tgz#0e2a8807fda30980ddb2571c79db3d209b14cbe4" + integrity sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA== + +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@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jiti@^1.17.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" + integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== + +js-sdsl@^4.1.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== + +"js-tokens@^3.0.0 || ^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@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +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-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 sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@=1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +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" + +lilconfig@^2.0.5, lilconfig@^2.0.6: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^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" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mz@^2.7.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" + +nanoid@^3.3.4: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next@13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/next/-/next-13.3.0.tgz#40632d303d74fc8521faa0a5bf4a033a392749b1" + integrity sha512-OVTw8MpIPa12+DCUkPqRGPS3thlJPcwae2ZL4xti3iBff27goH024xy4q2lhlsdoYiKOi8Kz6uJoLW/GXwgfOA== + dependencies: + "@next/env" "13.3.0" + "@swc/helpers" "0.4.14" + busboy "1.6.0" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.1" + optionalDependencies: + "@next/swc-darwin-arm64" "13.3.0" + "@next/swc-darwin-x64" "13.3.0" + "@next/swc-linux-arm64-gnu" "13.3.0" + "@next/swc-linux-arm64-musl" "13.3.0" + "@next/swc-linux-x64-gnu" "13.3.0" + "@next/swc-linux-x64-musl" "13.3.0" + "@next/swc-win32-arm64-msvc" "13.3.0" + "@next/swc-win32-ia32-msvc" "13.3.0" + "@next/swc-win32-x64-msvc" "13.3.0" + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +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" + +p-limit@^3.0.2: + 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@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +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" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-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== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +postcss-import@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-nested@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" + integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +postcss@8.4.21, postcss@^8.0.9: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +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== + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-infinite-scroll-hook@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-infinite-scroll-hook/-/react-infinite-scroll-hook-4.1.1.tgz#25c0c2cb9a41039019bd723823e21db1404c137d" + integrity sha512-1bu2572rF3DtjFMhIOzoasLMdYW0vMWxROtl99M5FYGSxm84Ro4aNBZW6ivgE45ofus4Ymo7jIS0Be3zcuLk8g== + dependencies: + react-intersection-observer-hook "^2.1.1" + +react-intersection-observer-hook@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-intersection-observer-hook/-/react-intersection-observer-hook-2.1.1.tgz#6222a82624d2a507aa5ad187c99d2d530e746e4f" + integrity sha512-MeFGpYtcfHB9v6oGqQuHAbSwaWBpd7yZ4wMIeVtboWRdGusAF4V+/8QQ0OKZ36Ez19grYnoDVhRUCjtwI2ZVaw== + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +remove-accents@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" + integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== + +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@^1.1.7, resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.4: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +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: + 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" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.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== + +semver@^7.3.7: + version "7.4.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.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@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^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== + +styled-jsx@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" + integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== + dependencies: + client-only "0.0.1" + +sucrase@^3.29.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7" + integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +superjson@^1.10.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/superjson/-/superjson-1.12.2.tgz#072471f1e6add2d95a38b77fef8c7a199d82103a" + integrity sha512-ugvUo9/WmvWOjstornQhsN/sR9mnGtWGYeTxFuqLb4AiT4QdUavjGFRALCPKWWnAiUJ4HTpytj5e0t5HoMRkXg== + dependencies: + copy-anything "^3.0.2" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" + +tailwindcss@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.1.tgz#b6662fab6a9b704779e48d083a9fef5a81d2b81e" + integrity sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g== + dependencies: + arg "^5.0.2" + chokidar "^3.5.3" + color-name "^1.1.4" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.12" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.17.2" + lilconfig "^2.0.6" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.0.9" + postcss-import "^14.1.0" + postcss-js "^4.0.0" + postcss-load-config "^3.1.4" + postcss-nested "6.0.0" + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" + quick-lru "^5.1.1" + resolve "^1.22.1" + sucrase "^3.29.0" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + +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" + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tsconfig-paths@^3.14.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.4.0, tslib@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +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-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.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" + +use-sync-external-store@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +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== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +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.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +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 2f14e9fd6fb415b5230fe60bd47abb60290fb363 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Fri, 14 Apr 2023 14:58:35 -0300 Subject: [PATCH 07/15] [feat] add Pokemon details page --- Pokemon Go.xlsx | Bin 108523 -> 0 bytes frontend/package.json | 1 + .../display/PokemonCard/PokemonCard.tsx | 3 - frontend/src/components/display/index.ts | 1 + frontend/src/pages/[pokemon-id].tsx | 160 ++++++++++++++++++ frontend/src/pages/index.tsx | 20 ++- frontend/src/pages/pokemon/[pokemon-id].tsx | 0 frontend/yarn.lock | 30 ++++ 8 files changed, 203 insertions(+), 12 deletions(-) delete mode 100644 Pokemon Go.xlsx create mode 100644 frontend/src/pages/[pokemon-id].tsx delete mode 100644 frontend/src/pages/pokemon/[pokemon-id].tsx diff --git a/Pokemon Go.xlsx b/Pokemon Go.xlsx deleted file mode 100644 index c991e83ed68856c9c516152313e06e966f4ae508..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108523 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 diff --git a/frontend/package.json b/frontend/package.json index 43953c228..493ede593 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "@rsuite/icons": "^1.0.2", "@tanstack/react-query": "^4.29.1", "@types/node": "18.15.11", "@types/react": "18.0.35", diff --git a/frontend/src/components/display/PokemonCard/PokemonCard.tsx b/frontend/src/components/display/PokemonCard/PokemonCard.tsx index 45270b244..210caa21f 100644 --- a/frontend/src/components/display/PokemonCard/PokemonCard.tsx +++ b/frontend/src/components/display/PokemonCard/PokemonCard.tsx @@ -2,7 +2,6 @@ import { pokemonTypeColors } from "@/styles/pokemonTypeColors"; import { Pokemon } from "@/types"; import Image from "next/image"; import { PokemonTypeTag } from "../PokemonTypeTag/PokemonTypeTag"; -import Link from "next/link"; type PokemonCardProps = Pick< Pokemon, @@ -17,7 +16,6 @@ export const PokemonCard = ({ type2, }: PokemonCardProps) => { return ( - //
- // ); }; diff --git a/frontend/src/components/display/index.ts b/frontend/src/components/display/index.ts index 222f46c39..09caadc40 100644 --- a/frontend/src/components/display/index.ts +++ b/frontend/src/components/display/index.ts @@ -1 +1,2 @@ export * from "./PokemonCard/PokemonCard"; +export * from "./PokemonTypeTag/PokemonTypeTag"; diff --git a/frontend/src/pages/[pokemon-id].tsx b/frontend/src/pages/[pokemon-id].tsx new file mode 100644 index 000000000..2251b8362 --- /dev/null +++ b/frontend/src/pages/[pokemon-id].tsx @@ -0,0 +1,160 @@ +import { PokemonTypeTag } from "@/components/display"; +import { useQueryGet } from "@/hooks/useQueryGet"; +import { pokemonTypeColors } from "@/styles/pokemonTypeColors"; +import { Pokemon } from "@/types"; +import { ArrowLeftLine, ArrowRightLine } from "@rsuite/icons"; +import { useQueryClient } from "@tanstack/react-query"; +import Head from "next/head"; +import Image from "next/image"; +import { useRouter } from "next/router"; + +export default function PokemonSlug() { + const { query, back, push } = useRouter(); + const pokemonId = String(query["pokemon-id"]); + const queryClient = useQueryClient(); + + const { data: pokemonData, isSuccess } = useQueryGet({ + queryKeys: ["pokemon", pokemonId], + url: `pokemons/${pokemonId}`, + queryConfigs: { + enabled: !!pokemonId, + refetchOnWindowFocus: false, + }, + }); + + return ( + <> + + {pokemonData?.name} + + +
+
+
+ + +
+
+

+ {pokemonData?.name} +

+ +
+ {isSuccess && } + {isSuccess && } +
+
+ +
+

+ # + {pokemonData?.id ? ("00" + pokemonData?.id).slice(-3) : "000"} +

+
+
+
+ +
+ +
+ {isSuccess && ( + {pokemonData?.name} + )} +
+ +
+
+ +
+
+
+

ATK

+

{pokemonData?.atk}

+
+ +
+

DEF

+

{pokemonData?.def}

+
+ +
+

STA

+

{pokemonData?.sta}

+
+
+ +
+
+ {!pokemonData?.isLegendary && ( +

STAGE

+ )} + + {!pokemonData?.isLegendary ? ( +

+ {pokemonData?.isEvolved + ? "Final" + : pokemonData?.evolutionStage} +

+ ) : ( +

Legendary

+ )} +
+
+
+
+ + ); +} diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index beb132b6d..d8e60bae6 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -7,6 +7,7 @@ import { Pokemon } from "@/types"; import { useQueryPagination } from "@/hooks/useQueryPagination"; import { useDebounce } from "@/hooks/helpers/useDebounce"; import { Skeleton, Spinner } from "@/components/feedback"; +import Link from "next/link"; const inter = Inter({ subsets: ["latin"] }); @@ -54,7 +55,7 @@ export default function Home() { Pokedex -
+

Pokedex

@@ -79,14 +80,15 @@ export default function Home() { {pokemonData?.pages.map((group, i) => ( {group?.results.map(({ id, name, image, type1, type2 }) => ( - + + + ))} ))} diff --git a/frontend/src/pages/pokemon/[pokemon-id].tsx b/frontend/src/pages/pokemon/[pokemon-id].tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 76998f440..1c343a7cf 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -187,6 +187,21 @@ tiny-glob "^0.2.9" tslib "^2.4.0" +"@rsuite/icon-font@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@rsuite/icon-font/-/icon-font-4.0.0.tgz#c4a772af5020bb3bbf74761879f80da23e914123" + integrity sha512-rZTgpTH3H3HLczCA2rnkWfoMKm0ZXoRzsrkVujfP/FfslnKUMvO6w56pa8pCvhWGpNEPUsLS2ULnFGpTEcup/Q== + +"@rsuite/icons@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@rsuite/icons/-/icons-1.0.2.tgz#1b53f6e5dc1dabec7a40ac5773ecc2172f05d09e" + integrity sha512-Y7vJNDQpJnFlyYSUXQ2iQ9Meg7+ZKcrIenhpYDdM3c7vYDE/L7pml+hrK28jk6QfV/QkVv5B504D+l7aM6AAJQ== + dependencies: + "@rsuite/icon-font" "^4.0.0" + classnames "^2.2.5" + insert-css "^2.0.0" + lodash "^4.17.20" + "@rushstack/eslint-patch@^1.1.3": version "1.2.0" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" @@ -561,6 +576,11 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +classnames@^2.2.5: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + client-only@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -1361,6 +1381,11 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +insert-css@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/insert-css/-/insert-css-2.0.0.tgz#eb5d1097b7542f4c79ea3060d3aee07d053880f4" + integrity sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA== + internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" @@ -1648,6 +1673,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash@^4.17.20: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" From 591f03d1735d509fd99a254bec4cb6b3fdba0909 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Fri, 14 Apr 2023 14:59:34 -0300 Subject: [PATCH 08/15] [docs] add project documentation --- README.md | 85 ++++++++++++++++++------------------------------------- 1 file changed, 27 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index c71cbfa0c..67e16584a 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,27 @@ -# Teste de Desenvolvimento Web - -Olá Dev! Tudo bem? - -A RedFox está sempre em busca de profissionais interessantes e interessados, com boa capacidade de aprendizado, adaptação e principalmente motivação! - -Este teste tem como objetivo avaliar e desafiar você. Não é obrigatório realizá-lo completamente, queremos apenas conhecer você, seu esforço e potencial para aprender, se adaptar e tomar decisões. - -Agora vamos ao teste! - - -## Desafio Pokémon - -Nós temos um problema, atualmente nosso sistema é só um excel, cheio de informações sobre Pokémon. Nós usamos ele como banco de dados e ao mesmo tempo interface de gerenciamento, inserindo, editando, deletando e filtrando os dados. - -A missão é criar um sistema para substituir este excel, pois queremos expandir e acrescentar funcionalidades. Queremos manter o básico, mas principalmente queremos uma forma prática e agradável de buscar os dados, com listagem, filtros, paginação e detalhes sobre cada Pokémon. - -Fique à vontade com o layout, precisamos de uma interface que consiga entregar as funcionalidades principais e substituir o excel, só isso. - - -## Consigo fazer tudo isso? - -Consegue sim! - -O teste é flexível, você pode escolher alguma parte específica dele para fazer, em que se sinta mais confortável e confiante, por exemplo: a interface, as funcionalidades, o banco de dados, etc...O importante é tentar atingir o objetivo de alguma forma. - -Aqui na RedFox queremos aproveitar ao máximo suas habilidades e aptidões, mas também desafiar você a adquirir novas, então nossa equipe tem a liberdade de trasitar entre frontend, backend, infraestrutura, etc...Sem se restringir, tudo depende do esforço e vontade de cada um. - - -## Por onde começo? - -Primeiramente, você pode fazer um fork desse repositório aqui, para sua conta do Github, depois disso crie uma branch nova com o seu nome, para podermos indentificá-lo. - -Após terminar o desafio, você pode solicitar um pull request para a branch master do nosso repositório. Vamos receber e fazer a avaliação de todos. - - -## E o Layout?? - -Fique a vontade quanto a isso, não vamos avaliar o design da sua interface. Se quiser desenhar algo bacana, diferente, pensar até em UI/UX, etc...é claro que vamos valorizar o seu esforço e considerar como um diferencial, mas não se preocupe. - - -## Regras - -Para o desafio ficar mais interessante, decidimos criar algumas regras: -- No layout, deve utilizar algum framework CSS (ex: Bootstrap, MaterializeCSS, Bulma...) -- No frontend, deve utilizar algum framework JS (ex: VueJS, ReactJS, Angular...tente não usar jQuery) -- No backend, deve utilizar NodeJS -- Documentar um pouco o projeto, o que você fez e de que forma devemos executar-lo - - -## Só isso? - -Só!...mas se quiser ir além, tente preparar o projeto para ser executado de maneira simples e prática, se coloque no lugar de alguém com menos conhecimentos, que precisa ver o que você desenvolveu. - -ps: Se fizer deploy em algum servidor ou utilizar alguma ferramenta que facilite a execução (ex: docker), será um diferencial. - - -Boa sorte! (^_^) +# Teste de Desenvolvimento Web - Documentação + +Olá! Meu nome é Miguel! + +# Getting Started: +## Back-end +Desenvolvido com NodeJS e ExpressJS usando como base arquitetura limpa. +### Iniciar server back-end: +```bash + yarn dev +``` +URL da API [http://localhost:3001](http://localhost:3001) + +## Database +Banco de dados PostgreSQL virtualizado usando Docker compose. +### Iniciar database com docker compose: +```bash + yarn dev db:dev:up +``` + +## Front-end +Desenvolvido com NextJS e tecnologias relacionadas. +### Iniciar server back-end: +```bash + yarn dev +``` +Abra pra visualizar o projeto: [http://localhost:3000](http://localhost:3000). \ No newline at end of file From 5e38d6e47c37524000e46e9602829e69b405ec2a Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Fri, 14 Apr 2023 15:27:45 -0300 Subject: [PATCH 09/15] [fix] add keepPreviousData prop to useQueryHook Add keepPreviousData prop in React Query useQueryHook to reduce layout shift --- frontend/src/hooks/useQueryGet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/hooks/useQueryGet.ts b/frontend/src/hooks/useQueryGet.ts index 92a69e374..e9e07a2ca 100644 --- a/frontend/src/hooks/useQueryGet.ts +++ b/frontend/src/hooks/useQueryGet.ts @@ -25,7 +25,7 @@ export function useQueryGet({ }); return data; }, - { retry: false, ...queryConfigs } + { retry: false, keepPreviousData: true, ...queryConfigs } ); return queryResponse; From ed499abbe155faa0ba2840e53c66167e143b40a7 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Fri, 14 Apr 2023 16:07:27 -0300 Subject: [PATCH 10/15] [style] adjusts global layout styles --- frontend/src/pages/[pokemon-id].tsx | 20 +++++++++++++------- frontend/src/pages/index.tsx | 2 +- frontend/src/styles/globals.css | 5 +++++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/frontend/src/pages/[pokemon-id].tsx b/frontend/src/pages/[pokemon-id].tsx index 2251b8362..1d3a02a8a 100644 --- a/frontend/src/pages/[pokemon-id].tsx +++ b/frontend/src/pages/[pokemon-id].tsx @@ -7,13 +7,17 @@ import { useQueryClient } from "@tanstack/react-query"; import Head from "next/head"; import Image from "next/image"; import { useRouter } from "next/router"; +import pokeSilhouet from "@/assets/poke-silhouet.png"; export default function PokemonSlug() { const { query, back, push } = useRouter(); const pokemonId = String(query["pokemon-id"]); - const queryClient = useQueryClient(); - const { data: pokemonData, isSuccess } = useQueryGet({ + const { + data: pokemonData, + isSuccess, + isLoading, + } = useQueryGet({ queryKeys: ["pokemon", pokemonId], url: `pokemons/${pokemonId}`, queryConfigs: { @@ -22,6 +26,8 @@ export default function PokemonSlug() { }, }); + console.log("isLoading", isLoading); + return ( <> @@ -29,7 +35,7 @@ export default function PokemonSlug() {
-
+

{pokemonData?.name} @@ -74,7 +80,7 @@ export default function PokemonSlug() {

-
+
-
+

{pokemonData?.name} @@ -95,7 +91,7 @@ export default function PokemonSlug() {
{isSuccess && ( {pokemonData?.name} Date: Sat, 15 Apr 2023 18:35:26 -0300 Subject: [PATCH 12/15] [fix] adjusts types errors --- backend/package.json | 3 +- .../src/modules/pokemon/pokemon.controller.ts | 14 -- backend/src/modules/pokemon/pokemon.module.ts | 4 - .../src/modules/pokemon/pokemon.service.ts | 4 - .../pokemon/repositories/PokemonRepository.ts | 23 +-- .../repositories/iPokemonRepository.ts | 2 - backend/src/static/POKEMON_DATA.ts | 170 +++++++++++++++++- 7 files changed, 178 insertions(+), 42 deletions(-) diff --git a/backend/package.json b/backend/package.json index 8cb06992a..80c5a486b 100644 --- a/backend/package.json +++ b/backend/package.json @@ -29,6 +29,7 @@ "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", "tsconfig-paths": "^4.1.0", - "typescript": "^4.9.3" + "typescript": "^4.9.3", + "delayed-stream": "~1.0.0" } } diff --git a/backend/src/modules/pokemon/pokemon.controller.ts b/backend/src/modules/pokemon/pokemon.controller.ts index 755af87b2..f2d95a243 100644 --- a/backend/src/modules/pokemon/pokemon.controller.ts +++ b/backend/src/modules/pokemon/pokemon.controller.ts @@ -5,20 +5,6 @@ import { HttpError } from "@/helpers/HttpError"; export class PokemonController { constructor(private pokemonService: PokemonService) {} - async createAllPokemons(req: Request, res: Response) { - try { - await this.pokemonService.createAllPokemons(); - return res.status(200).json({ - message: "All pokemons created", - }); - } catch (error) { - if (error instanceof HttpError) { - return res.status(error.statusCode).json(error); - } - return error; - } - } - async findAllPokemons({ query }: Request, res: Response) { try { const pokemonsList = await this.pokemonService.findAllPokemons({ diff --git a/backend/src/modules/pokemon/pokemon.module.ts b/backend/src/modules/pokemon/pokemon.module.ts index 916ab9b76..e9af2cff6 100644 --- a/backend/src/modules/pokemon/pokemon.module.ts +++ b/backend/src/modules/pokemon/pokemon.module.ts @@ -9,10 +9,6 @@ export class PokemonModule { const service = new PokemonService(repository); const controller = new PokemonController(service); - router.post("/pokemons", (req, res) => - controller.createAllPokemons(req, res) - ); - router.get("/pokemons", (req, res) => controller.findAllPokemons(req, res)); router.get("/pokemons/:pokemonId", (req, res) => diff --git a/backend/src/modules/pokemon/pokemon.service.ts b/backend/src/modules/pokemon/pokemon.service.ts index 97cda0d25..e824f3982 100644 --- a/backend/src/modules/pokemon/pokemon.service.ts +++ b/backend/src/modules/pokemon/pokemon.service.ts @@ -4,10 +4,6 @@ import { iPokemonRepository } from "./repositories/iPokemonRepository"; export class PokemonService { constructor(private iPokemonRepository: iPokemonRepository) {} - async createAllPokemons() { - return this.iPokemonRepository.createAll(); - } - async findAllPokemons(queries: QueryParams) { return this.iPokemonRepository.findAll(queries); } diff --git a/backend/src/modules/pokemon/repositories/PokemonRepository.ts b/backend/src/modules/pokemon/repositories/PokemonRepository.ts index ad3f204da..382d22ad0 100644 --- a/backend/src/modules/pokemon/repositories/PokemonRepository.ts +++ b/backend/src/modules/pokemon/repositories/PokemonRepository.ts @@ -8,28 +8,21 @@ import { QueryParams } from "@/types/QueryParams"; export class PokemonRepository implements iPokemonRepository { constructor(private prisma: PrismaClient) {} - async createAll() { - const isThereDataAlready = !!(await this.prisma.pokemon.findFirst({ + async findAll({ offset, limit, name }: QueryParams) { + const thereIsData = !!(await this.prisma.pokemon.findFirst({ where: { id: POKEMON_DATA[0].id, }, })); - if (isThereDataAlready) - throw new HttpError({ - name: "Pokemon data has already be set", - statusCode: 400, - message: "all pokemon data already exists in the database", - }); - - const pokemonsWithImage = await getPokemonsWithImages(); + if (!thereIsData) { + const pokemonsWithImage = await getPokemonsWithImages(); - return await this.prisma.pokemon.createMany({ - data: pokemonsWithImage, - }); - } + await this.prisma.pokemon.createMany({ + data: pokemonsWithImage, + }); + } - async findAll({ offset, limit, name }: QueryParams) { const count = await this.prisma.pokemon.count(); const next = offset + limit; const previous = offset - count < 0 ? null : offset - limit; diff --git a/backend/src/modules/pokemon/repositories/iPokemonRepository.ts b/backend/src/modules/pokemon/repositories/iPokemonRepository.ts index 20de96d9c..afe91522b 100644 --- a/backend/src/modules/pokemon/repositories/iPokemonRepository.ts +++ b/backend/src/modules/pokemon/repositories/iPokemonRepository.ts @@ -9,8 +9,6 @@ interface PokemonPaginationResponse { } export interface iPokemonRepository { - createAll: () => Promise; - findAll: (arg1: QueryParams) => Promise; findOne: (id: number) => Promise; diff --git a/backend/src/static/POKEMON_DATA.ts b/backend/src/static/POKEMON_DATA.ts index 3766ed715..de1189180 100644 --- a/backend/src/static/POKEMON_DATA.ts +++ b/backend/src/static/POKEMON_DATA.ts @@ -1,9 +1,25 @@ -import { Pokemon } from "@prisma/client"; +import { Pokemon, PokemonTypes } from "@prisma/client"; -export const POKEMON_DATA: Pokemon[] = [ +interface OptionalPokemon { + id: number; + name: string; + image: string; + evolutionStage: number; + type1: PokemonTypes; + type2: PokemonTypes | null; + statsTotal: number; + atk: number; + def: number; + sta: number; + isEvolved: boolean; + isLegendary: boolean; +} + +export const POKEMON_DATA: OptionalPokemon[] = [ { id: 1, name: "Bulbasaur", + image: "", evolutionStage: 1, type1: "grass", type2: "poison", @@ -17,6 +33,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 2, name: "Ivysaur", + image: "", evolutionStage: 2, type1: "grass", type2: "poison", @@ -30,6 +47,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 3, name: "Venusaur", + image: "", evolutionStage: 3, type1: "grass", type2: "poison", @@ -43,6 +61,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 4, name: "Charmander", + image: "", isEvolved: false, type1: "fire", type2: null, @@ -56,6 +75,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 5, name: "Charmeleon", + image: "", isEvolved: false, type1: "fire", type2: null, @@ -69,6 +89,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 6, name: "Charizard", + image: "", evolutionStage: 3, type1: "fire", type2: "flying", @@ -82,6 +103,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 7, name: "Squirtle", + image: "", isEvolved: false, type1: "water", type2: null, @@ -95,6 +117,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 8, name: "Wartortle", + image: "", isEvolved: false, type1: "water", type2: null, @@ -108,6 +131,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 9, name: "Blastoise", + image: "", isEvolved: true, type1: "water", type2: null, @@ -121,6 +145,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 10, name: "Caterpie", + image: "", isEvolved: false, type1: "bug", type2: null, @@ -134,6 +159,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 11, name: "Metapod", + image: "", isEvolved: false, type1: "bug", type2: null, @@ -147,6 +173,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 12, name: "Butterfree", + image: "", evolutionStage: 3, type1: "bug", type2: "flying", @@ -160,6 +187,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 13, name: "Weedle", + image: "", evolutionStage: 1, type1: "bug", type2: "poison", @@ -173,6 +201,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 14, name: "Kakuna", + image: "", evolutionStage: 2, type1: "bug", type2: "poison", @@ -186,6 +215,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 15, name: "Beedrill", + image: "", evolutionStage: 3, type1: "bug", type2: "poison", @@ -199,6 +229,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 16, name: "Pidgey", + image: "", evolutionStage: 1, type1: "normal", type2: "flying", @@ -212,6 +243,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 17, name: "Pidgeotto", + image: "", evolutionStage: 2, type1: "normal", type2: "flying", @@ -225,6 +257,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 18, name: "Pidgeot", + image: "", evolutionStage: 3, type1: "normal", type2: "flying", @@ -238,6 +271,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 19, name: "Rattata", + image: "", isEvolved: false, type1: "normal", type2: null, @@ -251,6 +285,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 20, name: "Raticate", + image: "", isEvolved: false, type1: "normal", type2: null, @@ -264,6 +299,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 21, name: "Spearow", + image: "", evolutionStage: 1, type1: "normal", type2: "flying", @@ -277,6 +313,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 22, name: "Fearow", + image: "", evolutionStage: 2, type1: "normal", type2: "flying", @@ -290,6 +327,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 23, name: "Ekans", + image: "", isEvolved: false, type1: "poison", type2: null, @@ -303,6 +341,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 24, name: "Arbok", + image: "", isEvolved: true, type1: "poison", type2: null, @@ -316,6 +355,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 25, name: "Pikachu", + image: "", isEvolved: false, type1: "electric", type2: null, @@ -329,6 +369,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 26, name: "Raichu", + image: "", isEvolved: true, type1: "electric", type2: null, @@ -342,6 +383,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 27, name: "Sandshrew", + image: "", isEvolved: false, type1: "ground", type2: null, @@ -355,6 +397,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 28, name: "Sandslash", + image: "", isEvolved: true, type1: "ground", type2: null, @@ -368,6 +411,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 29, name: "Nidoran F", + image: "", isEvolved: false, type1: "poison", type2: null, @@ -381,6 +425,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 30, name: "Nidorina", + image: "", isEvolved: false, type1: "poison", type2: null, @@ -394,6 +439,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 31, name: "Nidoqueen", + image: "", evolutionStage: 3, type1: "poison", type2: "ground", @@ -407,6 +453,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 32, name: "Nidoran M", + image: "", isEvolved: false, type1: "poison", type2: null, @@ -420,6 +467,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 33, name: "Nidorino", + image: "", isEvolved: false, type1: "poison", type2: null, @@ -433,6 +481,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 34, name: "Nidoking", + image: "", evolutionStage: 3, type1: "poison", type2: "ground", @@ -446,6 +495,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 35, name: "Clefairy", + image: "", isEvolved: false, type1: "fairy", type2: null, @@ -459,6 +509,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 36, name: "Clefable", + image: "", isEvolved: true, type1: "fairy", type2: null, @@ -472,6 +523,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 37, name: "Vulpix", + image: "", isEvolved: false, type1: "fire", type2: null, @@ -485,6 +537,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 38, name: "Ninetales", + image: "", isEvolved: true, type1: "fire", type2: null, @@ -498,6 +551,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 39, name: "Jigglypuff", + image: "", evolutionStage: 1, type1: "normal", type2: "fairy", @@ -511,6 +565,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 40, name: "Wigglytuff", + image: "", evolutionStage: 2, type1: "normal", type2: "fairy", @@ -524,6 +579,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 41, name: "Zubat", + image: "", evolutionStage: 1, type1: "poison", type2: "flying", @@ -537,6 +593,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 42, name: "Golbat", + image: "", evolutionStage: 2, type1: "poison", type2: "flying", @@ -550,6 +607,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 43, name: "Oddish", + image: "", evolutionStage: 1, type1: "grass", type2: "poison", @@ -563,6 +621,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 44, name: "Gloom", + image: "", evolutionStage: 2, type1: "grass", type2: "poison", @@ -576,6 +635,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 45, name: "Vileplume", + image: "", evolutionStage: 3, type1: "grass", type2: "poison", @@ -589,6 +649,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 46, name: "Paras", + image: "", evolutionStage: 1, type1: "bug", type2: "grass", @@ -602,6 +663,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 47, name: "Parasect", + image: "", evolutionStage: 2, type1: "bug", type2: "grass", @@ -615,6 +677,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 48, name: "Venonat", + image: "", evolutionStage: 1, type1: "bug", type2: "poison", @@ -628,6 +691,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 49, name: "Venomoth", + image: "", evolutionStage: 2, type1: "bug", type2: "poison", @@ -641,6 +705,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 50, name: "Diglett", + image: "", isEvolved: false, type1: "ground", type2: null, @@ -654,6 +719,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 51, name: "Dugtrio", + image: "", isEvolved: true, type1: "ground", type2: null, @@ -667,6 +733,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 52, name: "Meowth", + image: "", isEvolved: false, type1: "normal", type2: null, @@ -680,6 +747,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 53, name: "Persian", + image: "", isEvolved: true, type1: "normal", type2: null, @@ -693,6 +761,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 54, name: "Psyduck", + image: "", isEvolved: false, type1: "water", type2: null, @@ -706,6 +775,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 55, name: "Golduck", + image: "", isEvolved: true, type1: "water", type2: null, @@ -719,6 +789,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 56, name: "Mankey", + image: "", isEvolved: false, type1: "fighting", type2: null, @@ -732,6 +803,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 57, name: "Primeape", + image: "", isEvolved: true, type1: "fighting", type2: null, @@ -745,6 +817,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 58, name: "Growlithe", + image: "", isEvolved: false, type1: "fire", type2: null, @@ -758,6 +831,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 59, name: "Arcanine", + image: "", isEvolved: true, type1: "fire", type2: null, @@ -771,6 +845,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 60, name: "Poliwag", + image: "", isEvolved: false, type1: "water", type2: null, @@ -784,6 +859,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 61, name: "Poliwhirl", + image: "", isEvolved: false, type1: "water", type2: null, @@ -797,6 +873,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 62, name: "Poliwrath", + image: "", evolutionStage: 3, type1: "water", type2: "fighting", @@ -810,6 +887,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 63, name: "Abra", + image: "", isEvolved: false, type1: "psychic", type2: null, @@ -823,6 +901,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 64, name: "Kadabra", + image: "", isEvolved: false, type1: "psychic", type2: null, @@ -836,6 +915,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 65, name: "Alakazam", + image: "", isEvolved: true, type1: "psychic", type2: null, @@ -849,6 +929,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 66, name: "Machop", + image: "", isEvolved: false, type1: "fighting", type2: null, @@ -862,6 +943,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 67, name: "Machoke", + image: "", isEvolved: false, type1: "fighting", type2: null, @@ -875,6 +957,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 68, name: "Machamp", + image: "", isEvolved: true, type1: "fighting", type2: null, @@ -888,6 +971,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 69, name: "Bellsprout", + image: "", evolutionStage: 1, type1: "grass", type2: "poison", @@ -901,6 +985,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 70, name: "Weepinbell", + image: "", evolutionStage: 2, type1: "grass", type2: "poison", @@ -914,6 +999,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 71, name: "Victreebel", + image: "", evolutionStage: 3, type1: "grass", type2: "poison", @@ -927,6 +1013,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 72, name: "Tentacool", + image: "", evolutionStage: 1, type1: "water", type2: "poison", @@ -940,6 +1027,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 73, name: "Tentacruel", + image: "", evolutionStage: 2, type1: "water", type2: "poison", @@ -953,6 +1041,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 74, name: "Geodude", + image: "", evolutionStage: 1, type1: "rock", type2: "ground", @@ -966,6 +1055,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 75, name: "Graveler", + image: "", evolutionStage: 2, type1: "rock", type2: "ground", @@ -979,6 +1069,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 76, name: "Golem", + image: "", evolutionStage: 3, type1: "rock", type2: "ground", @@ -992,6 +1083,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 77, name: "Ponyta", + image: "", isEvolved: false, type1: "fire", type2: null, @@ -1005,6 +1097,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 78, name: "Rapidash", + image: "", isEvolved: true, type1: "fire", type2: null, @@ -1018,6 +1111,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 79, name: "Slowpoke", + image: "", evolutionStage: 1, type1: "water", type2: "psychic", @@ -1031,6 +1125,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 80, name: "Slowbro", + image: "", evolutionStage: 2, type1: "water", type2: "psychic", @@ -1044,6 +1139,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 81, name: "Magnemite", + image: "", evolutionStage: 1, type1: "electric", type2: "steel", @@ -1057,6 +1153,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 82, name: "Magneton", + image: "", evolutionStage: 2, type1: "electric", type2: "steel", @@ -1070,6 +1167,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 83, name: "Farfetchd", + image: "", evolutionStage: 1, type1: "normal", type2: "flying", @@ -1083,6 +1181,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 84, name: "Doduo", + image: "", evolutionStage: 1, type1: "normal", type2: "flying", @@ -1096,6 +1195,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 85, name: "Dodrio", + image: "", evolutionStage: 2, type1: "normal", type2: "flying", @@ -1109,6 +1209,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 86, name: "Seel", + image: "", isEvolved: false, type1: "water", type2: null, @@ -1122,6 +1223,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 87, name: "Dewgong", + image: "", evolutionStage: 2, type1: "water", type2: "ice", @@ -1135,6 +1237,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 88, name: "Grimer", + image: "", isEvolved: false, type1: "poison", type2: null, @@ -1148,6 +1251,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 89, name: "Muk", + image: "", isEvolved: true, type1: "poison", type2: null, @@ -1161,6 +1265,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 90, name: "Shellder", + image: "", isEvolved: false, type1: "water", type2: null, @@ -1174,6 +1279,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 91, name: "Cloyster", + image: "", evolutionStage: 2, type1: "water", type2: "ice", @@ -1187,6 +1293,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 92, name: "Gastly", + image: "", evolutionStage: 1, type1: "ghost", type2: "poison", @@ -1200,6 +1307,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 93, name: "Haunter", + image: "", evolutionStage: 2, type1: "ghost", type2: "poison", @@ -1213,6 +1321,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 94, name: "Gengar", + image: "", evolutionStage: 3, type1: "ghost", type2: "poison", @@ -1226,6 +1335,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 95, name: "Onix", + image: "", evolutionStage: 1, type1: "rock", type2: "ground", @@ -1239,6 +1349,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 96, name: "Drowzee", + image: "", isEvolved: false, type1: "psychic", type2: null, @@ -1252,6 +1363,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 97, name: "Hypno", + image: "", isEvolved: true, type1: "psychic", type2: null, @@ -1265,6 +1377,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 98, name: "Krabby", + image: "", isEvolved: false, type1: "water", type2: null, @@ -1278,6 +1391,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 99, name: "Kingler", + image: "", isEvolved: true, type1: "water", type2: null, @@ -1291,6 +1405,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 100, name: "Voltorb", + image: "", isEvolved: false, type1: "electric", type2: null, @@ -1304,6 +1419,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 101, name: "Electrode", + image: "", isEvolved: true, type1: "electric", type2: null, @@ -1317,6 +1433,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 102, name: "Exeggcute", + image: "", evolutionStage: 1, type1: "grass", type2: "psychic", @@ -1330,6 +1447,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 103, name: "Exeggutor", + image: "", evolutionStage: 2, type1: "grass", type2: "psychic", @@ -1343,6 +1461,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 104, name: "Cubone", + image: "", isEvolved: false, type1: "ground", type2: null, @@ -1356,6 +1475,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 105, name: "Marowak", + image: "", isEvolved: true, type1: "ground", type2: null, @@ -1369,6 +1489,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 106, name: "Hitmonlee", + image: "", isEvolved: true, type1: "fighting", type2: null, @@ -1382,6 +1503,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 107, name: "Hitmonchan", + image: "", isEvolved: true, type1: "fighting", type2: null, @@ -1395,6 +1517,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 108, name: "Lickitung", + image: "", isEvolved: true, type1: "normal", type2: null, @@ -1408,6 +1531,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 109, name: "Koffing", + image: "", isEvolved: false, type1: "poison", type2: null, @@ -1421,6 +1545,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 110, name: "Weezing", + image: "", isEvolved: true, type1: "poison", type2: null, @@ -1434,6 +1559,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 111, name: "Rhyhorn", + image: "", evolutionStage: 1, type1: "ground", type2: "rock", @@ -1447,6 +1573,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 112, name: "Rhydon", + image: "", evolutionStage: 2, type1: "ground", type2: "rock", @@ -1460,6 +1587,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 113, name: "Chansey", + image: "", isEvolved: false, type1: "normal", type2: null, @@ -1473,6 +1601,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 114, name: "Tangela", + image: "", isEvolved: true, type1: "grass", type2: null, @@ -1486,6 +1615,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 115, name: "Kangaskhan", + image: "", isEvolved: true, type1: "normal", type2: null, @@ -1499,6 +1629,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 116, name: "Horsea", + image: "", isEvolved: false, type1: "water", type2: null, @@ -1512,6 +1643,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 117, name: "Seadra", + image: "", isEvolved: false, type1: "water", type2: null, @@ -1525,6 +1657,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 118, name: "Goldeen", + image: "", isEvolved: false, type1: "water", type2: null, @@ -1538,6 +1671,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 119, name: "Seaking", + image: "", isEvolved: true, type1: "water", type2: null, @@ -1551,6 +1685,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 120, name: "Staryu", + image: "", isEvolved: false, type1: "water", type2: null, @@ -1564,6 +1699,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 121, name: "Starmie", + image: "", evolutionStage: 2, type1: "water", type2: "psychic", @@ -1577,6 +1713,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 122, name: "Mr Mime", + image: "", evolutionStage: 1, type1: "psychic", type2: "fairy", @@ -1590,6 +1727,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 123, name: "Scyther", + image: "", evolutionStage: 1, type1: "bug", type2: "flying", @@ -1603,6 +1741,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 124, name: "Jynx", + image: "", evolutionStage: 1, type1: "ice", type2: "psychic", @@ -1616,6 +1755,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 125, name: "Electabuzz", + image: "", isEvolved: true, type1: "electric", type2: null, @@ -1629,6 +1769,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 126, name: "Magmar", + image: "", isEvolved: true, type1: "fire", type2: null, @@ -1642,6 +1783,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 127, name: "Pinsir", + image: "", isEvolved: true, type1: "bug", type2: null, @@ -1655,6 +1797,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 128, name: "Tauros", + image: "", isEvolved: true, type1: "normal", type2: null, @@ -1668,6 +1811,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 129, name: "Magikarp", + image: "", isEvolved: false, type1: "water", type2: null, @@ -1681,6 +1825,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 130, name: "Gyarados", + image: "", evolutionStage: 2, type1: "water", type2: "flying", @@ -1694,6 +1839,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 131, name: "Lapras", + image: "", evolutionStage: 1, type1: "water", type2: "ice", @@ -1707,6 +1853,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 132, name: "Ditto", + image: "", isEvolved: false, type1: "normal", type2: null, @@ -1720,6 +1867,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 133, name: "Eevee", + image: "", isEvolved: false, type1: "normal", type2: null, @@ -1733,6 +1881,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 134, name: "Vaporeon", + image: "", isEvolved: true, type1: "water", type2: null, @@ -1746,6 +1895,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 135, name: "Jolteon", + image: "", isEvolved: true, type1: "electric", type2: null, @@ -1759,6 +1909,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 136, name: "Flareon", + image: "", isEvolved: true, type1: "fire", type2: null, @@ -1772,6 +1923,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 137, name: "Porygon", + image: "", isEvolved: false, type1: "normal", type2: null, @@ -1785,6 +1937,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 138, name: "Omanyte", + image: "", evolutionStage: 1, type1: "rock", type2: "water", @@ -1798,6 +1951,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 139, name: "Omastar", + image: "", evolutionStage: 2, type1: "rock", type2: "water", @@ -1811,6 +1965,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 140, name: "Kabuto", + image: "", evolutionStage: 1, type1: "rock", type2: "water", @@ -1824,6 +1979,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 141, name: "Kabutops", + image: "", evolutionStage: 2, type1: "rock", type2: "water", @@ -1837,6 +1993,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 142, name: "Aerodactyl", + image: "", evolutionStage: 1, type1: "rock", type2: "flying", @@ -1850,6 +2007,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 143, name: "Snorlax", + image: "", isEvolved: false, type1: "normal", type2: null, @@ -1863,6 +2021,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 144, name: "Articuno", + image: "", evolutionStage: 1, type1: "ice", type2: "flying", @@ -1876,6 +2035,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 145, name: "Zapdos", + image: "", evolutionStage: 1, type1: "electric", type2: "flying", @@ -1889,6 +2049,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 146, name: "Moltres", + image: "", evolutionStage: 1, type1: "fire", type2: "flying", @@ -1902,6 +2063,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 147, name: "Dratini", + image: "", isEvolved: false, type1: "dragon", type2: null, @@ -1915,6 +2077,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 148, name: "Dragonair", + image: "", isEvolved: true, type1: "dragon", type2: null, @@ -1928,6 +2091,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 149, name: "Dragonite", + image: "", evolutionStage: 3, type1: "dragon", type2: "flying", @@ -1941,6 +2105,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 150, name: "Mewtwo", + image: "", isEvolved: false, type1: "psychic", type2: null, @@ -1954,6 +2119,7 @@ export const POKEMON_DATA: Pokemon[] = [ { id: 151, name: "Mew", + image: "", isEvolved: true, type1: "psychic", type2: null, From 1fd82c1f8f03a959adf1f7f26911647036114c04 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Sat, 15 Apr 2023 18:36:47 -0300 Subject: [PATCH 13/15] [docs] Update Readme --- README.md | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 67e16584a..a1a10dce9 100644 --- a/README.md +++ b/README.md @@ -5,23 +5,29 @@ Olá! Meu nome é Miguel! # Getting Started: ## Back-end Desenvolvido com NodeJS e ExpressJS usando como base arquitetura limpa. -### Iniciar server back-end: -```bash - yarn dev -``` -URL da API [http://localhost:3001](http://localhost:3001) +### Inicindo e configurando server back-end e database: +Rode os seguintes comandos: +```bash +cd backend +yarn + +yarn db:dev:up +npx prisma generate +npx prisma db push -## Database -Banco de dados PostgreSQL virtualizado usando Docker compose. -### Iniciar database com docker compose: -```bash - yarn dev db:dev:up +yarn build +yarn start ``` +URL da API [http://localhost:3001](http://localhost:3001) ## Front-end Desenvolvido com NextJS e tecnologias relacionadas. -### Iniciar server back-end: -```bash - yarn dev +### Iniciar server front-end: +```bash +cd frontend +yarn + +yarn build +yarn start ``` Abra pra visualizar o projeto: [http://localhost:3000](http://localhost:3000). \ No newline at end of file From 60e2a4de171e8cf5cf82649cb6f4aee78c67b698 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Sat, 15 Apr 2023 19:04:07 -0300 Subject: [PATCH 14/15] [docs] Update Readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a1a10dce9..8bf0ac4bf 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Teste de Desenvolvimento Web - Documentação +# Pokedex Olá! Meu nome é Miguel! @@ -30,4 +30,4 @@ yarn yarn build yarn start ``` -Abra pra visualizar o projeto: [http://localhost:3000](http://localhost:3000). \ No newline at end of file +Abra pra visualizar o projeto: [http://localhost:3000](http://localhost:3000). From 66b49061e5f8e3fbf59f74867068454bb795aaf6 Mon Sep 17 00:00:00 2001 From: "Miguel S. Barbosa" Date: Sat, 15 Apr 2023 20:27:39 -0300 Subject: [PATCH 15/15] [docs] Update Readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8bf0ac4bf..764f48e97 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,8 @@ Olá! Meu nome é Miguel! # Getting Started: ## Back-end -Desenvolvido com NodeJS e ExpressJS usando como base arquitetura limpa. +Desenvolvido com NodeJS e ExpressJS. +Database postgreSQL com Docker compose ### Inicindo e configurando server back-end e database: Rode os seguintes comandos: ```bash