├── .env.example ├── .gitignore ├── README.md ├── package.json ├── prisma ├── migrations │ ├── 20220118223421_create_product │ │ └── migration.sql │ ├── 20220118224803_create_category │ │ └── migration.sql │ ├── 20220118225645_create_product_category │ │ └── migration.sql │ └── migration_lock.toml └── schema.prisma ├── src ├── controllers │ ├── CreateCategoryController.ts │ ├── CreateProductCategoryController.ts │ ├── CreateProductController.ts │ ├── CreateProductWithExistCategory.ts │ ├── FindCategoryController.ts │ └── FindProductController.ts ├── database │ └── prismaClient.ts ├── routes.ts └── server.ts ├── tsconfig.json └── yarn.lock /.env.example: -------------------------------------------------------------------------------- 1 | DATABASE_URL="postgresql://admin:admin@localhost:5432/prisma_rocketseat?schema=public" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | # Keep environment variables out of version control 3 | .env 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
Nessa live vimos o poder do PrismaIO e os motivos para usarmos ele em nossas aplicações
7 | 8 | ## 👨🏼💻 Instrutor 9 | 10 | - [Dani Leão](https://www.instagram.com/dani_leao/) 11 | 12 | ## ✋🏻 Pré-requisitos 13 | 14 | - [Node.js](https://nodejs.org/en/) 15 | - [Yarn](classic.yarnpkg.com/en/docs/install) 16 | 17 | ## 🔥 Instalação e execução 18 | 19 | 1. Faça um clone desse repositório; 20 | 2. Entre na pasta `cd prisma_decode`; 21 | 3. Rode `yarn` ; 22 | 4. Rode `yarn prisma generate` para instalar os models do prisma no projeto 23 | 5. Rode `yarn dev` ou `npm run dev` para rodar a aplicação; 24 | 6. Acesse a URL `http://localhost:4003`; 25 | 26 | ## Como mostrar log da aplicação? 27 | 28 | ```ts 29 | const prismaClient = new PrismaClient({ 30 | log: ["error", "info", "query", "warn"], 31 | }); 32 | ``` 33 | 34 | ## Como incluir informações em um select com relacionamento 35 | 36 | ```ts 37 | const product = await prismaClient.product.findFirst({ 38 | where: { 39 | id, 40 | }, 41 | include: { 42 | ProductCategory: { 43 | // Seleciona o model 44 | include: { 45 | category: true, // Dentro do model seleciono o relacionamento que quero trazer completo. 46 | }, 47 | }, 48 | }, 49 | }); 50 | ``` 51 | 52 | Esse projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE.md) para mais detalhes. 53 | 54 | --- 55 | 56 | Feito com 💖 by Rocketseat 👋 [Entre na nossa comunidade!](https://discordapp.com/invite/gCRAFhc) 57 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "prisma", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "dev": "ts-node-dev --exit-child --transpile-only --ignore-watch node_modules src/server.ts" 8 | }, 9 | "dependencies": { 10 | "@prisma/client": "3.8.1", 11 | "@types/express": "^4.17.13", 12 | "express": "^4.17.2", 13 | "ts-node-dev": "^1.1.8", 14 | "typescript": "^4.5.4" 15 | }, 16 | "devDependencies": { 17 | "prisma": "^3.8.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /prisma/migrations/20220118223421_create_product/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "products" ( 3 | "id" TEXT NOT NULL, 4 | "name" TEXT NOT NULL, 5 | "bar_code" TEXT NOT NULL, 6 | "price" DECIMAL(65,30) NOT NULL, 7 | "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 8 | 9 | CONSTRAINT "products_pkey" PRIMARY KEY ("id") 10 | ); 11 | 12 | -- CreateIndex 13 | CREATE UNIQUE INDEX "products_bar_code_key" ON "products"("bar_code"); 14 | -------------------------------------------------------------------------------- /prisma/migrations/20220118224803_create_category/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "categories" ( 3 | "id" TEXT NOT NULL, 4 | "name" TEXT NOT NULL, 5 | 6 | CONSTRAINT "categories_pkey" PRIMARY KEY ("id") 7 | ); 8 | -------------------------------------------------------------------------------- /prisma/migrations/20220118225645_create_product_category/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "products_categories" ( 3 | "id" TEXT NOT NULL, 4 | "id_product" TEXT NOT NULL, 5 | "id_category" TEXT NOT NULL, 6 | 7 | CONSTRAINT "products_categories_pkey" PRIMARY KEY ("id") 8 | ); 9 | 10 | -- AddForeignKey 11 | ALTER TABLE "products_categories" ADD CONSTRAINT "products_categories_id_product_fkey" FOREIGN KEY ("id_product") REFERENCES "products"("id") ON DELETE RESTRICT ON UPDATE CASCADE; 12 | 13 | -- AddForeignKey 14 | ALTER TABLE "products_categories" ADD CONSTRAINT "products_categories_id_category_fkey" FOREIGN KEY ("id_category") REFERENCES "categories"("id") ON DELETE RESTRICT ON UPDATE CASCADE; 15 | -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "postgresql" -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | generator client { 2 | provider = "prisma-client-js" 3 | } 4 | 5 | datasource db { 6 | provider = "postgresql" 7 | url = env("DATABASE_URL") 8 | } 9 | 10 | model Product { 11 | id String @id @default(uuid()) 12 | name String 13 | bar_code String @unique 14 | price Decimal 15 | created_at DateTime @default(now()) 16 | 17 | ProductCategory ProductCategory[] 18 | @@map("products") 19 | } 20 | 21 | model Category { 22 | id String @id @default(uuid()) 23 | name String 24 | 25 | ProductCategory ProductCategory[] 26 | @@map("categories") 27 | } 28 | 29 | model ProductCategory { 30 | id String @id @default(uuid()) 31 | id_product String 32 | product Product @relation(fields: [id_product], references: [id]) 33 | id_category String 34 | category Category @relation(fields: [id_category], references: [id]) 35 | 36 | @@map("products_categories") 37 | } 38 | -------------------------------------------------------------------------------- /src/controllers/CreateCategoryController.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { prismaClient } from "../database/prismaClient"; 3 | 4 | export class CreateCategoryController { 5 | async handle(request: Request, response: Response) { 6 | const { name } = request.body; 7 | 8 | const category = await prismaClient.category.create({ 9 | data: { 10 | name, 11 | }, 12 | }); 13 | 14 | return response.json(category); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/controllers/CreateProductCategoryController.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { prismaClient } from "../database/prismaClient"; 3 | 4 | export class CreateProductCategoryController { 5 | async handle(request: Request, response: Response) { 6 | const { id_product, id_category } = request.body; 7 | 8 | const productCategory = await prismaClient.productCategory.create({ 9 | data: { 10 | id_category, 11 | id_product, 12 | }, 13 | }); 14 | 15 | return response.json(productCategory); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/controllers/CreateProductController.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { prismaClient } from "../database/prismaClient"; 3 | 4 | export class CreateProductController { 5 | async handle(request: Request, response: Response) { 6 | const { name, bar_code, price } = request.body; 7 | 8 | const product = await prismaClient.product.create({ 9 | data: { 10 | bar_code, 11 | name, 12 | price, 13 | }, 14 | }); 15 | 16 | return response.json(product); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/controllers/CreateProductWithExistCategory.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { prismaClient } from "../database/prismaClient"; 3 | 4 | export class CreateProductWithExistCategory { 5 | async handle(request: Request, response: Response) { 6 | const { name, price, bar_code, id_category } = request.body; 7 | 8 | const product = await prismaClient.productCategory.create({ 9 | data: { 10 | product: { 11 | create: { 12 | bar_code, 13 | name, 14 | price, 15 | }, 16 | }, 17 | category: { 18 | connect: { 19 | id: id_category, 20 | }, 21 | }, 22 | }, 23 | }); 24 | 25 | return response.json(product); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/controllers/FindCategoryController.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { prismaClient } from "../database/prismaClient"; 3 | 4 | export class FindCategoryController { 5 | async handle(request: Request, response: Response) { 6 | const { id } = request.params; 7 | 8 | const category = await prismaClient.category.findFirst({ 9 | where: { 10 | id, 11 | }, 12 | include: { 13 | ProductCategory: true, 14 | }, 15 | }); 16 | 17 | return response.json(category); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/controllers/FindProductController.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { prismaClient } from "../database/prismaClient"; 3 | 4 | export class FindProductController { 5 | async handle(request: Request, response: Response) { 6 | const { id } = request.params; 7 | 8 | const product = await prismaClient.product.findFirst({ 9 | where: { 10 | id, 11 | }, 12 | include: { 13 | ProductCategory: { 14 | include: { 15 | category: true, 16 | }, 17 | }, 18 | }, 19 | }); 20 | 21 | return response.json(product); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/database/prismaClient.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from "@prisma/client"; 2 | 3 | const prismaClient = new PrismaClient({ 4 | log: ["error", "info", "query", "warn"], 5 | }); 6 | 7 | export { prismaClient }; 8 | -------------------------------------------------------------------------------- /src/routes.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "express"; 2 | import { CreateCategoryController } from "./controllers/CreateCategoryController"; 3 | import { CreateProductCategoryController } from "./controllers/CreateProductCategoryController"; 4 | import { CreateProductController } from "./controllers/CreateProductController"; 5 | import { CreateProductWithExistCategory } from "./controllers/CreateProductWithExistCategory"; 6 | import { FindCategoryController } from "./controllers/FindCategoryController"; 7 | import { FindProductController } from "./controllers/FindProductController"; 8 | 9 | const router = Router(); 10 | 11 | const createProduct = new CreateProductController(); 12 | const createCategory = new CreateCategoryController(); 13 | const createProductCategory = new CreateProductCategoryController(); 14 | const createProductCategoryExist = new CreateProductWithExistCategory(); 15 | 16 | const findProduct = new FindProductController(); 17 | const findCategory = new FindCategoryController(); 18 | 19 | router.post("/product", createProduct.handle); 20 | router.post("/category", createCategory.handle); 21 | router.post("/categoryProduct", createProductCategory.handle); 22 | router.post("/productWithCategory", createProductCategoryExist.handle); 23 | router.get("/product/:id", findProduct.handle); 24 | router.get("/category/:id", findCategory.handle); 25 | 26 | export { router }; 27 | -------------------------------------------------------------------------------- /src/server.ts: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import { router } from "./routes"; 3 | 4 | const app = express(); 5 | 6 | app.use(express.json()); 7 | app.use(router); 8 | 9 | app.listen(4003, () => console.log("Server is running on PORT 4003")); 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "sourceMap": true, 4 | "outDir": "dist", 5 | "strict": true, 6 | "lib": ["esnext"], 7 | "esModuleInterop": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@prisma/client@3.8.1": 6 | version "3.8.1" 7 | resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.8.1.tgz#c11eda8e84760867552ffde4de7b48fb2cf1e1c0" 8 | integrity sha512-NxD1Xbkx1eT1mxSwo1RwZe665mqBETs0VxohuwNfFIxMqcp0g6d4TgugPxwZ4Jb4e5wCu8mQ9quMedhNWIWcZQ== 9 | dependencies: 10 | "@prisma/engines-version" "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f" 11 | 12 | "@prisma/engines-version@3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f": 13 | version "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f" 14 | resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f.tgz#4c8d9744b5e54650a8ba5fde0a711399d6adba24" 15 | integrity sha512-G2JH6yWt6ixGKmsRmVgaQYahfwMopim0u/XLIZUo2o/mZ5jdu7+BL+2V5lZr7XiG1axhyrpvlyqE/c0OgYSl3g== 16 | 17 | "@prisma/engines@3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f": 18 | version "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f" 19 | resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f.tgz#4479099b99f6a082ce5843ee7208943ccedd127f" 20 | integrity sha512-bHYubuItSN/DGYo36aDu7xJiJmK52JOSHs4MK+KbceAtwS20BCWadRgtpQ3iZ2EXfN/B1T0iCXlNraaNwnpU2w== 21 | 22 | "@types/body-parser@*": 23 | version "1.19.2" 24 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" 25 | integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== 26 | dependencies: 27 | "@types/connect" "*" 28 | "@types/node" "*" 29 | 30 | "@types/connect@*": 31 | version "3.4.35" 32 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 33 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 34 | dependencies: 35 | "@types/node" "*" 36 | 37 | "@types/express-serve-static-core@^4.17.18": 38 | version "4.17.28" 39 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" 40 | integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== 41 | dependencies: 42 | "@types/node" "*" 43 | "@types/qs" "*" 44 | "@types/range-parser" "*" 45 | 46 | "@types/express@^4.17.13": 47 | version "4.17.13" 48 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" 49 | integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== 50 | dependencies: 51 | "@types/body-parser" "*" 52 | "@types/express-serve-static-core" "^4.17.18" 53 | "@types/qs" "*" 54 | "@types/serve-static" "*" 55 | 56 | "@types/mime@^1": 57 | version "1.3.2" 58 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" 59 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== 60 | 61 | "@types/node@*": 62 | version "17.0.10" 63 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.10.tgz#616f16e9d3a2a3d618136b1be244315d95bd7cab" 64 | integrity sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog== 65 | 66 | "@types/qs@*": 67 | version "6.9.7" 68 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 69 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 70 | 71 | "@types/range-parser@*": 72 | version "1.2.4" 73 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 74 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 75 | 76 | "@types/serve-static@*": 77 | version "1.13.10" 78 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" 79 | integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== 80 | dependencies: 81 | "@types/mime" "^1" 82 | "@types/node" "*" 83 | 84 | "@types/strip-bom@^3.0.0": 85 | version "3.0.0" 86 | resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" 87 | integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= 88 | 89 | "@types/strip-json-comments@0.0.30": 90 | version "0.0.30" 91 | resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" 92 | integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== 93 | 94 | accepts@~1.3.7: 95 | version "1.3.7" 96 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 97 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 98 | dependencies: 99 | mime-types "~2.1.24" 100 | negotiator "0.6.2" 101 | 102 | anymatch@~3.1.2: 103 | version "3.1.2" 104 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 105 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 106 | dependencies: 107 | normalize-path "^3.0.0" 108 | picomatch "^2.0.4" 109 | 110 | arg@^4.1.0: 111 | version "4.1.3" 112 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 113 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 114 | 115 | array-flatten@1.1.1: 116 | version "1.1.1" 117 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 118 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 119 | 120 | balanced-match@^1.0.0: 121 | version "1.0.2" 122 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 123 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 124 | 125 | binary-extensions@^2.0.0: 126 | version "2.2.0" 127 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 128 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 129 | 130 | body-parser@1.19.1: 131 | version "1.19.1" 132 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" 133 | integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== 134 | dependencies: 135 | bytes "3.1.1" 136 | content-type "~1.0.4" 137 | debug "2.6.9" 138 | depd "~1.1.2" 139 | http-errors "1.8.1" 140 | iconv-lite "0.4.24" 141 | on-finished "~2.3.0" 142 | qs "6.9.6" 143 | raw-body "2.4.2" 144 | type-is "~1.6.18" 145 | 146 | brace-expansion@^1.1.7: 147 | version "1.1.11" 148 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 149 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 150 | dependencies: 151 | balanced-match "^1.0.0" 152 | concat-map "0.0.1" 153 | 154 | braces@~3.0.2: 155 | version "3.0.2" 156 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 157 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 158 | dependencies: 159 | fill-range "^7.0.1" 160 | 161 | buffer-from@^1.0.0: 162 | version "1.1.2" 163 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 164 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 165 | 166 | bytes@3.1.1: 167 | version "3.1.1" 168 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a" 169 | integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg== 170 | 171 | chokidar@^3.5.1: 172 | version "3.5.3" 173 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 174 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 175 | dependencies: 176 | anymatch "~3.1.2" 177 | braces "~3.0.2" 178 | glob-parent "~5.1.2" 179 | is-binary-path "~2.1.0" 180 | is-glob "~4.0.1" 181 | normalize-path "~3.0.0" 182 | readdirp "~3.6.0" 183 | optionalDependencies: 184 | fsevents "~2.3.2" 185 | 186 | concat-map@0.0.1: 187 | version "0.0.1" 188 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 189 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 190 | 191 | content-disposition@0.5.4: 192 | version "0.5.4" 193 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 194 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 195 | dependencies: 196 | safe-buffer "5.2.1" 197 | 198 | content-type@~1.0.4: 199 | version "1.0.4" 200 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 201 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 202 | 203 | cookie-signature@1.0.6: 204 | version "1.0.6" 205 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 206 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 207 | 208 | cookie@0.4.1: 209 | version "0.4.1" 210 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" 211 | integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== 212 | 213 | create-require@^1.1.0: 214 | version "1.1.1" 215 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 216 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 217 | 218 | debug@2.6.9: 219 | version "2.6.9" 220 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 221 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 222 | dependencies: 223 | ms "2.0.0" 224 | 225 | depd@~1.1.2: 226 | version "1.1.2" 227 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 228 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 229 | 230 | destroy@~1.0.4: 231 | version "1.0.4" 232 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 233 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 234 | 235 | diff@^4.0.1: 236 | version "4.0.2" 237 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 238 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 239 | 240 | dynamic-dedupe@^0.3.0: 241 | version "0.3.0" 242 | resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" 243 | integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= 244 | dependencies: 245 | xtend "^4.0.0" 246 | 247 | ee-first@1.1.1: 248 | version "1.1.1" 249 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 250 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 251 | 252 | encodeurl@~1.0.2: 253 | version "1.0.2" 254 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 255 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 256 | 257 | escape-html@~1.0.3: 258 | version "1.0.3" 259 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 260 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 261 | 262 | etag@~1.8.1: 263 | version "1.8.1" 264 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 265 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 266 | 267 | express@^4.17.2: 268 | version "4.17.2" 269 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.2.tgz#c18369f265297319beed4e5558753cc8c1364cb3" 270 | integrity sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg== 271 | dependencies: 272 | accepts "~1.3.7" 273 | array-flatten "1.1.1" 274 | body-parser "1.19.1" 275 | content-disposition "0.5.4" 276 | content-type "~1.0.4" 277 | cookie "0.4.1" 278 | cookie-signature "1.0.6" 279 | debug "2.6.9" 280 | depd "~1.1.2" 281 | encodeurl "~1.0.2" 282 | escape-html "~1.0.3" 283 | etag "~1.8.1" 284 | finalhandler "~1.1.2" 285 | fresh "0.5.2" 286 | merge-descriptors "1.0.1" 287 | methods "~1.1.2" 288 | on-finished "~2.3.0" 289 | parseurl "~1.3.3" 290 | path-to-regexp "0.1.7" 291 | proxy-addr "~2.0.7" 292 | qs "6.9.6" 293 | range-parser "~1.2.1" 294 | safe-buffer "5.2.1" 295 | send "0.17.2" 296 | serve-static "1.14.2" 297 | setprototypeof "1.2.0" 298 | statuses "~1.5.0" 299 | type-is "~1.6.18" 300 | utils-merge "1.0.1" 301 | vary "~1.1.2" 302 | 303 | fill-range@^7.0.1: 304 | version "7.0.1" 305 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 306 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 307 | dependencies: 308 | to-regex-range "^5.0.1" 309 | 310 | finalhandler@~1.1.2: 311 | version "1.1.2" 312 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 313 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 314 | dependencies: 315 | debug "2.6.9" 316 | encodeurl "~1.0.2" 317 | escape-html "~1.0.3" 318 | on-finished "~2.3.0" 319 | parseurl "~1.3.3" 320 | statuses "~1.5.0" 321 | unpipe "~1.0.0" 322 | 323 | forwarded@0.2.0: 324 | version "0.2.0" 325 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 326 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 327 | 328 | fresh@0.5.2: 329 | version "0.5.2" 330 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 331 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 332 | 333 | fs.realpath@^1.0.0: 334 | version "1.0.0" 335 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 336 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 337 | 338 | fsevents@~2.3.2: 339 | version "2.3.2" 340 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 341 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 342 | 343 | function-bind@^1.1.1: 344 | version "1.1.1" 345 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 346 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 347 | 348 | glob-parent@~5.1.2: 349 | version "5.1.2" 350 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 351 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 352 | dependencies: 353 | is-glob "^4.0.1" 354 | 355 | glob@^7.1.3: 356 | version "7.2.0" 357 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 358 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 359 | dependencies: 360 | fs.realpath "^1.0.0" 361 | inflight "^1.0.4" 362 | inherits "2" 363 | minimatch "^3.0.4" 364 | once "^1.3.0" 365 | path-is-absolute "^1.0.0" 366 | 367 | has@^1.0.3: 368 | version "1.0.3" 369 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 370 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 371 | dependencies: 372 | function-bind "^1.1.1" 373 | 374 | http-errors@1.8.1: 375 | version "1.8.1" 376 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" 377 | integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== 378 | dependencies: 379 | depd "~1.1.2" 380 | inherits "2.0.4" 381 | setprototypeof "1.2.0" 382 | statuses ">= 1.5.0 < 2" 383 | toidentifier "1.0.1" 384 | 385 | iconv-lite@0.4.24: 386 | version "0.4.24" 387 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 388 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 389 | dependencies: 390 | safer-buffer ">= 2.1.2 < 3" 391 | 392 | inflight@^1.0.4: 393 | version "1.0.6" 394 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 395 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 396 | dependencies: 397 | once "^1.3.0" 398 | wrappy "1" 399 | 400 | inherits@2, inherits@2.0.4: 401 | version "2.0.4" 402 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 403 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 404 | 405 | ipaddr.js@1.9.1: 406 | version "1.9.1" 407 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 408 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 409 | 410 | is-binary-path@~2.1.0: 411 | version "2.1.0" 412 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 413 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 414 | dependencies: 415 | binary-extensions "^2.0.0" 416 | 417 | is-core-module@^2.8.0: 418 | version "2.8.1" 419 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" 420 | integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== 421 | dependencies: 422 | has "^1.0.3" 423 | 424 | is-extglob@^2.1.1: 425 | version "2.1.1" 426 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 427 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 428 | 429 | is-glob@^4.0.1, is-glob@~4.0.1: 430 | version "4.0.3" 431 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 432 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 433 | dependencies: 434 | is-extglob "^2.1.1" 435 | 436 | is-number@^7.0.0: 437 | version "7.0.0" 438 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 439 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 440 | 441 | make-error@^1.1.1: 442 | version "1.3.6" 443 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 444 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 445 | 446 | media-typer@0.3.0: 447 | version "0.3.0" 448 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 449 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 450 | 451 | merge-descriptors@1.0.1: 452 | version "1.0.1" 453 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 454 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 455 | 456 | methods@~1.1.2: 457 | version "1.1.2" 458 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 459 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 460 | 461 | mime-db@1.51.0: 462 | version "1.51.0" 463 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" 464 | integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== 465 | 466 | mime-types@~2.1.24: 467 | version "2.1.34" 468 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" 469 | integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== 470 | dependencies: 471 | mime-db "1.51.0" 472 | 473 | mime@1.6.0: 474 | version "1.6.0" 475 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 476 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 477 | 478 | minimatch@^3.0.4: 479 | version "3.0.4" 480 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 481 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 482 | dependencies: 483 | brace-expansion "^1.1.7" 484 | 485 | minimist@^1.2.5: 486 | version "1.2.5" 487 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 488 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 489 | 490 | mkdirp@^1.0.4: 491 | version "1.0.4" 492 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 493 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 494 | 495 | ms@2.0.0: 496 | version "2.0.0" 497 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 498 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 499 | 500 | ms@2.1.3: 501 | version "2.1.3" 502 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 503 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 504 | 505 | negotiator@0.6.2: 506 | version "0.6.2" 507 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 508 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 509 | 510 | normalize-path@^3.0.0, normalize-path@~3.0.0: 511 | version "3.0.0" 512 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 513 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 514 | 515 | on-finished@~2.3.0: 516 | version "2.3.0" 517 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 518 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 519 | dependencies: 520 | ee-first "1.1.1" 521 | 522 | once@^1.3.0: 523 | version "1.4.0" 524 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 525 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 526 | dependencies: 527 | wrappy "1" 528 | 529 | parseurl@~1.3.3: 530 | version "1.3.3" 531 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 532 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 533 | 534 | path-is-absolute@^1.0.0: 535 | version "1.0.1" 536 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 537 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 538 | 539 | path-parse@^1.0.7: 540 | version "1.0.7" 541 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 542 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 543 | 544 | path-to-regexp@0.1.7: 545 | version "0.1.7" 546 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 547 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 548 | 549 | picomatch@^2.0.4, picomatch@^2.2.1: 550 | version "2.3.1" 551 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 552 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 553 | 554 | prisma@^3.8.1: 555 | version "3.8.1" 556 | resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.8.1.tgz#44395cef7cbb1ea86216cb84ee02f856c08a7873" 557 | integrity sha512-Q8zHwS9m70TaD7qI8u+8hTAmiTpK+IpvRYF3Rgb/OeWGQJOMgZCFFvNCiSfoLEQ95wilK7ctW3KOpc9AuYnRUA== 558 | dependencies: 559 | "@prisma/engines" "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f" 560 | 561 | proxy-addr@~2.0.7: 562 | version "2.0.7" 563 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 564 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 565 | dependencies: 566 | forwarded "0.2.0" 567 | ipaddr.js "1.9.1" 568 | 569 | qs@6.9.6: 570 | version "6.9.6" 571 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" 572 | integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== 573 | 574 | range-parser@~1.2.1: 575 | version "1.2.1" 576 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 577 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 578 | 579 | raw-body@2.4.2: 580 | version "2.4.2" 581 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32" 582 | integrity sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ== 583 | dependencies: 584 | bytes "3.1.1" 585 | http-errors "1.8.1" 586 | iconv-lite "0.4.24" 587 | unpipe "1.0.0" 588 | 589 | readdirp@~3.6.0: 590 | version "3.6.0" 591 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 592 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 593 | dependencies: 594 | picomatch "^2.2.1" 595 | 596 | resolve@^1.0.0: 597 | version "1.21.0" 598 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" 599 | integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA== 600 | dependencies: 601 | is-core-module "^2.8.0" 602 | path-parse "^1.0.7" 603 | supports-preserve-symlinks-flag "^1.0.0" 604 | 605 | rimraf@^2.6.1: 606 | version "2.7.1" 607 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 608 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 609 | dependencies: 610 | glob "^7.1.3" 611 | 612 | safe-buffer@5.2.1: 613 | version "5.2.1" 614 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 615 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 616 | 617 | "safer-buffer@>= 2.1.2 < 3": 618 | version "2.1.2" 619 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 620 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 621 | 622 | send@0.17.2: 623 | version "0.17.2" 624 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" 625 | integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== 626 | dependencies: 627 | debug "2.6.9" 628 | depd "~1.1.2" 629 | destroy "~1.0.4" 630 | encodeurl "~1.0.2" 631 | escape-html "~1.0.3" 632 | etag "~1.8.1" 633 | fresh "0.5.2" 634 | http-errors "1.8.1" 635 | mime "1.6.0" 636 | ms "2.1.3" 637 | on-finished "~2.3.0" 638 | range-parser "~1.2.1" 639 | statuses "~1.5.0" 640 | 641 | serve-static@1.14.2: 642 | version "1.14.2" 643 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" 644 | integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== 645 | dependencies: 646 | encodeurl "~1.0.2" 647 | escape-html "~1.0.3" 648 | parseurl "~1.3.3" 649 | send "0.17.2" 650 | 651 | setprototypeof@1.2.0: 652 | version "1.2.0" 653 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 654 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 655 | 656 | source-map-support@^0.5.12, source-map-support@^0.5.17: 657 | version "0.5.21" 658 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 659 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 660 | dependencies: 661 | buffer-from "^1.0.0" 662 | source-map "^0.6.0" 663 | 664 | source-map@^0.6.0: 665 | version "0.6.1" 666 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 667 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 668 | 669 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 670 | version "1.5.0" 671 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 672 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 673 | 674 | strip-bom@^3.0.0: 675 | version "3.0.0" 676 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 677 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 678 | 679 | strip-json-comments@^2.0.0: 680 | version "2.0.1" 681 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 682 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 683 | 684 | supports-preserve-symlinks-flag@^1.0.0: 685 | version "1.0.0" 686 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 687 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 688 | 689 | to-regex-range@^5.0.1: 690 | version "5.0.1" 691 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 692 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 693 | dependencies: 694 | is-number "^7.0.0" 695 | 696 | toidentifier@1.0.1: 697 | version "1.0.1" 698 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 699 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 700 | 701 | tree-kill@^1.2.2: 702 | version "1.2.2" 703 | resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" 704 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== 705 | 706 | ts-node-dev@^1.1.8: 707 | version "1.1.8" 708 | resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.1.8.tgz#95520d8ab9d45fffa854d6668e2f8f9286241066" 709 | integrity sha512-Q/m3vEwzYwLZKmV6/0VlFxcZzVV/xcgOt+Tx/VjaaRHyiBcFlV0541yrT09QjzzCxlDZ34OzKjrFAynlmtflEg== 710 | dependencies: 711 | chokidar "^3.5.1" 712 | dynamic-dedupe "^0.3.0" 713 | minimist "^1.2.5" 714 | mkdirp "^1.0.4" 715 | resolve "^1.0.0" 716 | rimraf "^2.6.1" 717 | source-map-support "^0.5.12" 718 | tree-kill "^1.2.2" 719 | ts-node "^9.0.0" 720 | tsconfig "^7.0.0" 721 | 722 | ts-node@^9.0.0: 723 | version "9.1.1" 724 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" 725 | integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== 726 | dependencies: 727 | arg "^4.1.0" 728 | create-require "^1.1.0" 729 | diff "^4.0.1" 730 | make-error "^1.1.1" 731 | source-map-support "^0.5.17" 732 | yn "3.1.1" 733 | 734 | tsconfig@^7.0.0: 735 | version "7.0.0" 736 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" 737 | integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== 738 | dependencies: 739 | "@types/strip-bom" "^3.0.0" 740 | "@types/strip-json-comments" "0.0.30" 741 | strip-bom "^3.0.0" 742 | strip-json-comments "^2.0.0" 743 | 744 | type-is@~1.6.18: 745 | version "1.6.18" 746 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 747 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 748 | dependencies: 749 | media-typer "0.3.0" 750 | mime-types "~2.1.24" 751 | 752 | typescript@^4.5.4: 753 | version "4.5.4" 754 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" 755 | integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== 756 | 757 | unpipe@1.0.0, unpipe@~1.0.0: 758 | version "1.0.0" 759 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 760 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 761 | 762 | utils-merge@1.0.1: 763 | version "1.0.1" 764 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 765 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 766 | 767 | vary@~1.1.2: 768 | version "1.1.2" 769 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 770 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 771 | 772 | wrappy@1: 773 | version "1.0.2" 774 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 775 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 776 | 777 | xtend@^4.0.0: 778 | version "4.0.2" 779 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 780 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 781 | 782 | yn@3.1.1: 783 | version "3.1.1" 784 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 785 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 786 | --------------------------------------------------------------------------------