├── .gitignore ├── README.md ├── config └── default.ts ├── package.json ├── src ├── app.ts ├── controller │ ├── product.controller.ts │ ├── session.controller.ts │ └── user.controller.ts ├── middleware │ ├── deserializeUser.ts │ ├── requireUser.ts │ └── validateResource.ts ├── models │ ├── product.model.ts │ ├── session.model.ts │ └── user.model.ts ├── routes.ts ├── schema │ ├── product.schema.ts │ ├── session.schema.ts │ └── user.schema.ts ├── service │ ├── product.service.ts │ ├── session.service.ts │ └── user.service.ts └── utils │ ├── connect.ts │ ├── jwt.utils.ts │ └── logger.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | build 4 | .env -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # REST API with Node.js, MongoDB with Mongoose & TypeScript 2 | 3 | ## Concepts 4 | 5 | - REST API principals 6 | - CRUD 7 | - HTTP methods 8 | - JWT & refresh tokens 9 | - Request validation 10 | 11 | ## Technologies 12 | 13 | - Node.js 14 | - MongoDB with Mongoose 15 | - TypeScript 16 | - Express.js & Express.js middleware 17 | - Zod validation 18 | 19 | ## Features 20 | 21 | - logger 22 | - Validate request middleware 23 | - Registration 24 | 1. User model 25 | 2. User endpoint 26 | 3. User session 27 | 4. Deserialize user middleware (refresh tokens) 28 | 5. Get sessions 29 | 6. Delete session 30 | 7. Require user middleware 31 | - Product resource 32 | 1. Product model 33 | 2. Create product 34 | 3. Read product 35 | 4. Update product 36 | 5. Delete product 37 | 38 | Note: Make sure you add .env to your .gitignore before pushing any changes to your repository. You will also want to generate new ACCESS_TOKEN_PUBLIC_KEY & ACCESS_TOKEN_PRIVATE_KEY keys and add them to your .env 39 | 40 | #### Generate new keys: https://travistidwell.com/jsencrypt/demo/ 41 | -------------------------------------------------------------------------------- /config/default.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | port: 1337, 3 | dbUri: "mongodb://localhost:27017/rest-api-tutorial", 4 | saltWorkFactor: 10, 5 | accessTokenTtl: "15m", 6 | refreshTokenTtl: "1y", 7 | }; 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rest-api-nodejs-ts-express-mongodb-zod", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "type": "module", 7 | "scripts": { 8 | "dev": "ts-node-dev --respawn --transpile-only src/app.ts" 9 | }, 10 | "dependencies": { 11 | "bcrypt": "^5.0.1", 12 | "config": "^3.3.7", 13 | "cors": "^2.8.5", 14 | "dayjs": "^1.11.4", 15 | "dotenv": "^16.0.1", 16 | "express": "^4.18.1", 17 | "jsonwebtoken": "^8.5.1", 18 | "lodash": "^4.17.21", 19 | "mongoose": "^6.4.6", 20 | "pino": "^8.3.0", 21 | "pino-pretty": "^8.1.0", 22 | "zod": "^3.17.10" 23 | }, 24 | "devDependencies": { 25 | "@types/bcrypt": "^5.0.0", 26 | "@types/body-parser": "^1.19.2", 27 | "@types/config": "^0.0.41", 28 | "@types/cors": "^2.8.12", 29 | "@types/express": "^4.17.13", 30 | "@types/jsonwebtoken": "^8.5.8", 31 | "@types/lodash": "^4.14.182", 32 | "@types/nanoid": "^3.0.0", 33 | "@types/node": "^18.6.1", 34 | "@types/pino": "^7.0.5", 35 | "ts-node-dev": "^2.0.0", 36 | "typescript": "^4.7.4" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import dotenv from "dotenv"; 3 | import config from "config"; 4 | import connect from "./utils/connect"; 5 | import logger from "./utils/logger"; 6 | import routes from "./routes"; 7 | 8 | import deserializeUser from "./middleware/deserializeUser"; 9 | 10 | dotenv.config(); 11 | 12 | const port = config.get("port"); 13 | 14 | const app = express(); 15 | 16 | app.use(express.json()); 17 | 18 | app.use(deserializeUser); 19 | 20 | app.listen(port, async () => { 21 | logger.info(`App is running at http://localhost:${port}`); 22 | 23 | await connect(); 24 | 25 | routes(app); 26 | }); 27 | -------------------------------------------------------------------------------- /src/controller/product.controller.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { 3 | CreateProductInput, 4 | UpdateProductInput, 5 | } from "../schema/product.schema"; 6 | import { 7 | createProduct, 8 | deleteProduct, 9 | findAndUpdateProduct, 10 | findProduct, 11 | } from "../service/product.service"; 12 | import logger from "../utils/logger"; 13 | 14 | export async function createProductHandler( 15 | req: Request<{}, {}, CreateProductInput["body"]>, 16 | res: Response 17 | ) { 18 | try { 19 | const userId = res.locals.user._id; 20 | 21 | const body = req.body; 22 | 23 | const product = await createProduct({ ...body, user: userId }); 24 | 25 | res.send(product); 26 | } catch (e: any) { 27 | logger.error(e); 28 | res.status(409).send(e.message); 29 | } 30 | } 31 | 32 | export async function updateProductHandler( 33 | req: Request, 34 | res: Response 35 | ) { 36 | const userId = res.locals.user._id; 37 | 38 | const productId = req.params.productId; 39 | 40 | const update = req.body; 41 | 42 | const product = await findProduct({ productId }); 43 | 44 | if (!product) return res.sendStatus(404); 45 | 46 | if (String(product.user) !== userId) return res.sendStatus(403); 47 | 48 | const updateProduct = await findAndUpdateProduct({ productId }, update, { 49 | new: true, 50 | }); 51 | 52 | return res.send(updateProduct); 53 | } 54 | 55 | export async function getProductHandler( 56 | req: Request, 57 | res: Response 58 | ) { 59 | const productId = req.params.productId; 60 | 61 | const product = await findProduct({ productId }); 62 | 63 | if (!product) return res.sendStatus(404); 64 | 65 | return res.send(product); 66 | } 67 | 68 | export async function deleteProductHandler( 69 | req: Request, 70 | res: Response 71 | ) { 72 | const userId = res.locals.user._id; 73 | 74 | const productId = req.params.productId; 75 | 76 | const product = await findProduct({ productId }); 77 | 78 | if (!product) return res.sendStatus(404); 79 | 80 | if (String(product.user) !== userId) return res.sendStatus(403); 81 | 82 | await deleteProduct({ productId }); 83 | 84 | return res.sendStatus(200); 85 | } 86 | -------------------------------------------------------------------------------- /src/controller/session.controller.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { 3 | createSession, 4 | findSessions, 5 | updateSession, 6 | } from "../service/session.service"; 7 | import { validatePassword } from "../service/user.service"; 8 | import { signJwt } from "../utils/jwt.utils"; 9 | import config from "config"; 10 | 11 | export async function createUserSessionHandler(req: Request, res: Response) { 12 | const user = await validatePassword(req.body); 13 | 14 | if (!user) return res.status(401).send("Invalid email or password"); 15 | 16 | const session = await createSession(user._id, req.get("user-agent") || ""); 17 | 18 | const accessToken = signJwt( 19 | { ...user, session: session._id }, 20 | { expiresIn: config.get("accessTokenTtl") } // 15 minutes, 21 | ); 22 | 23 | const refreshToken = signJwt( 24 | { ...user, session: session._id }, 25 | { expiresIn: config.get("refreshTokenTtl") } // 1 year, 26 | ); 27 | 28 | return res.send({ accessToken, refreshToken }); 29 | } 30 | 31 | export async function getUserSessionsHandler(req: Request, res: Response) { 32 | const userId = res.locals.user._id; 33 | 34 | const sessions = await findSessions({ user: userId, valid: true }); 35 | 36 | return res.send(sessions); 37 | } 38 | 39 | export async function deleteSessionHandler(req: Request, res: Response) { 40 | const sessionId = res.locals.user.session; 41 | 42 | await updateSession({ _id: sessionId }, { valid: false }); 43 | 44 | return res.send({ 45 | accessToken: null, 46 | refreshToken: null, 47 | }); 48 | } 49 | -------------------------------------------------------------------------------- /src/controller/user.controller.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { omit } from "lodash"; 3 | import { CreateUserInput } from "../schema/user.schema"; 4 | import { createUser } from "../service/user.service"; 5 | import logger from "../utils/logger"; 6 | 7 | export async function createUserHandler( 8 | req: Request<{}, {}, CreateUserInput["body"]>, 9 | res: Response 10 | ) { 11 | try { 12 | const user = await createUser(req.body); 13 | return res.send(omit(user.toJSON(), "password")); 14 | } catch (e: any) { 15 | logger.error(e); 16 | res.status(409).send(e.message); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/middleware/deserializeUser.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, NextFunction } from "express"; 2 | import { get } from "lodash"; 3 | import { reIssueAccessToken } from "../service/session.service"; 4 | import { verifyJwt } from "../utils/jwt.utils"; 5 | 6 | const deserializeUser = async ( 7 | req: Request, 8 | res: Response, 9 | next: NextFunction 10 | ) => { 11 | const accessToken = get(req, "headers.authorization", "").replace( 12 | /^Bearer\s/, 13 | "" 14 | ); 15 | 16 | const refreshToken = get(req, "headers.x-refresh"); 17 | 18 | if (!accessToken) return next(); 19 | 20 | const { decoded, expired } = verifyJwt(accessToken); 21 | 22 | if (decoded) { 23 | res.locals.user = decoded; 24 | return next(); 25 | } 26 | 27 | if (expired && refreshToken) { 28 | const newAccessToken = await reIssueAccessToken(refreshToken); 29 | 30 | if (newAccessToken) { 31 | res.setHeader("x-access-token", newAccessToken); 32 | 33 | const result = verifyJwt(newAccessToken); 34 | 35 | res.locals.user = result.decoded; 36 | return next(); 37 | } 38 | } 39 | 40 | return next(); 41 | }; 42 | 43 | export default deserializeUser; 44 | -------------------------------------------------------------------------------- /src/middleware/requireUser.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, NextFunction } from "express"; 2 | 3 | const requireUser = (req: Request, res: Response, next: NextFunction) => { 4 | const user = res.locals.user; 5 | 6 | if (!user) return res.sendStatus(403); 7 | 8 | return next(); 9 | }; 10 | 11 | export default requireUser; 12 | -------------------------------------------------------------------------------- /src/middleware/validateResource.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, NextFunction } from "express"; 2 | import { AnyZodObject } from "zod"; 3 | 4 | const validate = 5 | (schema: AnyZodObject) => 6 | (req: Request, res: Response, next: NextFunction) => { 7 | try { 8 | schema.parse({ 9 | body: req.body, 10 | query: req.query, 11 | params: req.params, 12 | }); 13 | next(); 14 | } catch (e: any) { 15 | return res.status(400).send(e.errors); 16 | } 17 | }; 18 | 19 | export default validate; 20 | -------------------------------------------------------------------------------- /src/models/product.model.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | import { UserDocument } from "./user.model"; 3 | 4 | export interface ProductDocument extends mongoose.Document { 5 | user: UserDocument["_id"]; 6 | title: string; 7 | description: string; 8 | price: number; 9 | image: string; 10 | createdAt: Date; 11 | updatedAt: Date; 12 | } 13 | 14 | const productSchema = new mongoose.Schema( 15 | { 16 | productId: { 17 | type: String, 18 | required: true, 19 | unique: true, 20 | default: () => `product_${new Date().getTime() + Math.random()}`, 21 | }, 22 | user: { 23 | type: mongoose.Schema.Types.ObjectId, 24 | ref: "User", 25 | }, 26 | title: { type: String, required: true }, 27 | description: { type: String, required: true }, 28 | price: { type: Number, required: true }, 29 | image: { type: String, required: true }, 30 | }, 31 | { 32 | timestamps: true, 33 | } 34 | ); 35 | 36 | const ProductModel = mongoose.model("Product", productSchema); 37 | 38 | export default ProductModel; 39 | -------------------------------------------------------------------------------- /src/models/session.model.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | import { UserDocument } from "./user.model"; 3 | 4 | export interface SessionDocument extends mongoose.Document { 5 | user: UserDocument["_id"]; 6 | valid: boolean; 7 | userAgent: string; 8 | createdAt: Date; 9 | updatedAt: Date; 10 | } 11 | 12 | const sessionSchema = new mongoose.Schema( 13 | { 14 | user: { 15 | type: mongoose.Schema.Types.ObjectId, 16 | ref: "User", 17 | }, 18 | valid: { 19 | type: Boolean, 20 | default: true, 21 | }, 22 | userAgent: { type: String }, 23 | }, 24 | { 25 | timestamps: true, 26 | } 27 | ); 28 | 29 | const SessionModel = mongoose.model("Session", sessionSchema); 30 | 31 | export default SessionModel; 32 | -------------------------------------------------------------------------------- /src/models/user.model.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | import bcrypt from "bcrypt"; 3 | import config from "config"; 4 | 5 | export interface UserDocument extends mongoose.Document { 6 | email: string; 7 | name: string; 8 | password: string; 9 | createdAt: Date; 10 | updatedAt: Date; 11 | comparePassword(candidatePassword: string): Promise; 12 | } 13 | 14 | const userSchema = new mongoose.Schema( 15 | { 16 | email: { 17 | type: String, 18 | required: true, 19 | unique: true, 20 | }, 21 | name: { 22 | type: String, 23 | required: true, 24 | }, 25 | password: { 26 | type: String, 27 | required: true, 28 | }, 29 | }, 30 | { 31 | timestamps: true, 32 | } 33 | ); 34 | 35 | userSchema.pre( 36 | "save", 37 | async function (next: mongoose.CallbackWithoutResultAndOptionalError) { 38 | let user = this as UserDocument; 39 | 40 | if (!user.isModified("password")) { 41 | return next(); 42 | } 43 | 44 | const salt = await bcrypt.genSalt(config.get("saltWorkFactor")); 45 | 46 | const hash = await bcrypt.hashSync(user.password, salt); 47 | 48 | user.password = hash; 49 | 50 | return next(); 51 | } 52 | ); 53 | 54 | userSchema.methods.comparePassword = async function ( 55 | candidatePassword: string 56 | ): Promise { 57 | const user = this as UserDocument; 58 | 59 | return bcrypt.compare(candidatePassword, user.password).catch((e) => false); 60 | }; 61 | 62 | const UserModel = mongoose.model("User", userSchema); 63 | 64 | export default UserModel; 65 | -------------------------------------------------------------------------------- /src/routes.ts: -------------------------------------------------------------------------------- 1 | import { Express } from "express"; 2 | import { 3 | createUserSessionHandler, 4 | deleteSessionHandler, 5 | getUserSessionsHandler, 6 | } from "./controller/session.controller"; 7 | import { createUserHandler } from "./controller/user.controller"; 8 | import validateResource from "./middleware/validateResource"; 9 | import { createSessionSchema } from "./schema/session.schema"; 10 | import { createUserSchema } from "./schema/user.schema"; 11 | import requireUser from "./middleware/requireUser"; 12 | import { 13 | createProductSchema, 14 | deleteProductSchema, 15 | getProductSchema, 16 | updateProductSchema, 17 | } from "./schema/product.schema"; 18 | import { 19 | createProductHandler, 20 | deleteProductHandler, 21 | getProductHandler, 22 | updateProductHandler, 23 | } from "./controller/product.controller"; 24 | 25 | function routes(app: Express) { 26 | app.post("/api/users", validateResource(createUserSchema), createUserHandler); 27 | 28 | app.post( 29 | "/api/sessions", 30 | validateResource(createSessionSchema), 31 | createUserSessionHandler 32 | ); 33 | 34 | app.get("/api/sessions", requireUser, getUserSessionsHandler); 35 | 36 | app.delete("/api/sessions", requireUser, deleteSessionHandler); 37 | 38 | app.post( 39 | "/api/products", 40 | [requireUser, validateResource(createProductSchema)], 41 | createProductHandler 42 | ); 43 | 44 | app.put( 45 | "/api/products/:productId", 46 | [requireUser, validateResource(updateProductSchema)], 47 | updateProductHandler 48 | ); 49 | 50 | app.get( 51 | "/api/products/:productId", 52 | validateResource(getProductSchema), 53 | getProductHandler 54 | ); 55 | 56 | app.delete( 57 | "/api/products/:productId", 58 | [requireUser, validateResource(deleteProductSchema)], 59 | deleteProductHandler 60 | ); 61 | } 62 | 63 | export default routes; 64 | -------------------------------------------------------------------------------- /src/schema/product.schema.ts: -------------------------------------------------------------------------------- 1 | import { object, number, string, TypeOf } from "zod"; 2 | 3 | const payload = { 4 | body: object({ 5 | title: string({ 6 | required_error: "Title is required", 7 | }), 8 | description: string({ 9 | required_error: "Description is required", 10 | }).min(120, "Description should be at least 120 characters long"), 11 | price: number({ 12 | required_error: "Price is required", 13 | }), 14 | image: string({ 15 | required_error: "Image is required", 16 | }), 17 | }), 18 | }; 19 | 20 | const params = { 21 | params: object({ 22 | productId: string({ 23 | required_error: "Product ID is required", 24 | }), 25 | }), 26 | }; 27 | 28 | export const createProductSchema = object({ 29 | ...payload, 30 | }); 31 | 32 | export const updateProductSchema = object({ 33 | ...payload, 34 | ...params, 35 | }); 36 | 37 | export const deleteProductSchema = object({ 38 | ...params, 39 | }); 40 | 41 | export const getProductSchema = object({ 42 | ...params, 43 | }); 44 | 45 | export type CreateProductInput = TypeOf; 46 | export type ReadProductInput = TypeOf; 47 | export type UpdateProductInput = TypeOf; 48 | export type DeleteProductInput = TypeOf; 49 | -------------------------------------------------------------------------------- /src/schema/session.schema.ts: -------------------------------------------------------------------------------- 1 | import { object, string } from "zod"; 2 | 3 | export const createSessionSchema = object({ 4 | body: object({ 5 | email: string({ 6 | required_error: "Email is required", 7 | }).email("Not a valid email"), 8 | password: string({ 9 | required_error: "Password is required", 10 | }), 11 | }), 12 | }); 13 | -------------------------------------------------------------------------------- /src/schema/user.schema.ts: -------------------------------------------------------------------------------- 1 | import { object, string, TypeOf } from "zod"; 2 | 3 | export const createUserSchema = object({ 4 | body: object({ 5 | name: string({ 6 | required_error: "Name is required", 7 | }), 8 | password: string({ 9 | required_error: "Password is required", 10 | }).min(6, "Password too short - should be 6 characters minimum"), 11 | passwordConfirmation: string({ 12 | required_error: "Password confirmation is required", 13 | }), 14 | email: string({ 15 | required_error: "Email is required", 16 | }).email("Not a valid email"), 17 | }).refine((data) => data.password === data.passwordConfirmation, { 18 | message: "Passwords do not match", 19 | path: ["passwordConfirmation"], 20 | }), 21 | }); 22 | 23 | export type CreateUserInput = Omit< 24 | TypeOf, 25 | "body.passwordConfirmation" 26 | >; 27 | -------------------------------------------------------------------------------- /src/service/product.service.ts: -------------------------------------------------------------------------------- 1 | import { 2 | DocumentDefinition, 3 | FilterQuery, 4 | QueryOptions, 5 | UpdateQuery, 6 | } from "mongoose"; 7 | import ProductModel, { ProductDocument } from "../models/product.model"; 8 | 9 | export async function createProduct( 10 | input: DocumentDefinition> 11 | ) { 12 | return ProductModel.create(input); 13 | } 14 | 15 | export async function findProduct( 16 | query: FilterQuery, 17 | options: QueryOptions = { lean: true } 18 | ) { 19 | return ProductModel.findOne(query, {}, options); 20 | } 21 | 22 | export async function findAndUpdateProduct( 23 | query: FilterQuery, 24 | update: UpdateQuery, 25 | options: QueryOptions 26 | ) { 27 | return ProductModel.findOneAndUpdate(query, update, options); 28 | } 29 | 30 | export async function deleteProduct(query: FilterQuery) { 31 | return ProductModel.deleteOne(query); 32 | } 33 | -------------------------------------------------------------------------------- /src/service/session.service.ts: -------------------------------------------------------------------------------- 1 | import { FilterQuery, UpdateQuery } from "mongoose"; 2 | import SessionModel, { SessionDocument } from "../models/session.model"; 3 | import { signJwt, verifyJwt } from "../utils/jwt.utils"; 4 | import { get } from "lodash"; 5 | import { findUser } from "./user.service"; 6 | import config from "config"; 7 | 8 | export async function createSession(userId: string, userAgent: string) { 9 | const session = await SessionModel.create({ user: userId, userAgent }); 10 | return session.toJSON(); 11 | } 12 | 13 | export async function findSessions(query: FilterQuery) { 14 | return SessionModel.find(query).lean(); 15 | } 16 | 17 | export async function updateSession( 18 | query: FilterQuery, 19 | update: UpdateQuery 20 | ) { 21 | return SessionModel.updateOne(query, update); 22 | } 23 | 24 | export async function reIssueAccessToken({ 25 | refreshToken, 26 | }: { 27 | refreshToken: string; 28 | }) { 29 | const { decoded } = verifyJwt(refreshToken); 30 | 31 | if (!decoded || !get(decoded, "session")) return false; 32 | 33 | const session = await SessionModel.findById(get(decoded, "session")); 34 | 35 | if (!session || !session.valid) return false; 36 | 37 | const user = await findUser({ _id: session.user }); 38 | 39 | if (!user) return false; 40 | 41 | const accessToken = signJwt( 42 | { ...user, session: session._id }, 43 | { expiresIn: config.get("accessTokenTtl") } // 15 minutes, 44 | ); 45 | 46 | return accessToken; 47 | } 48 | -------------------------------------------------------------------------------- /src/service/user.service.ts: -------------------------------------------------------------------------------- 1 | import { DocumentDefinition, FilterQuery } from "mongoose"; 2 | import UserModel, { UserDocument } from "../models/user.model"; 3 | import { omit } from "lodash"; 4 | 5 | export async function createUser( 6 | input: DocumentDefinition< 7 | Omit 8 | > 9 | ) { 10 | try { 11 | const user = await UserModel.create(input); 12 | return omit(user.toJSON(), "password"); 13 | } catch (e: any) { 14 | throw new Error(e); 15 | } 16 | } 17 | 18 | export async function validatePassword({ 19 | email, 20 | password, 21 | }: { 22 | email: string; 23 | password: string; 24 | }) { 25 | const user = await UserModel.findOne({ email }); 26 | 27 | if (!user) return false; 28 | 29 | const isValid = await user.comparePassword(password); 30 | 31 | if (!isValid) return false; 32 | 33 | return omit(user.toJSON(), "password"); 34 | } 35 | 36 | export async function findUser(query: FilterQuery) { 37 | return UserModel.findOne(query).lean(); 38 | } 39 | -------------------------------------------------------------------------------- /src/utils/connect.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | import config from "config"; 3 | import logger from "./logger"; 4 | 5 | async function connect() { 6 | const dbUri = config.get("dbUri"); 7 | 8 | try { 9 | await mongoose.connect(dbUri); 10 | logger.info("DB connected"); 11 | } catch (error) { 12 | logger.error("Could not connect to DB"); 13 | process.exit(1); 14 | } 15 | } 16 | 17 | export default connect; 18 | -------------------------------------------------------------------------------- /src/utils/jwt.utils.ts: -------------------------------------------------------------------------------- 1 | import jwt from "jsonwebtoken"; 2 | 3 | export function signJwt(object: Object, options?: jwt.SignOptions | undefined) { 4 | return jwt.sign(object, process.env.ACCESS_TOKEN_PRIVATE_KEY!, { 5 | ...(options && options), 6 | algorithm: "RS256", 7 | }); 8 | } 9 | 10 | export function verifyJwt(token: string) { 11 | try { 12 | const decoded = jwt.verify(token, process.env.ACCESS_TOKEN_PUBLIC_KEY!); 13 | return { 14 | valid: true, 15 | expired: false, 16 | decoded, 17 | }; 18 | } catch (e: any) { 19 | return { 20 | valid: false, 21 | expired: e.message === "jwt expired", 22 | decoded: null, 23 | }; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/utils/logger.ts: -------------------------------------------------------------------------------- 1 | import logger from "pino"; 2 | import dayjs from "dayjs"; 3 | 4 | const log = logger({ 5 | transport: { 6 | target: "pino-pretty", 7 | options: { 8 | colorize: true, 9 | }, 10 | }, 11 | base: { 12 | pid: false, 13 | }, 14 | timestamp: () => `,"time":"${dayjs().format("DD/MM/YYYY HH:mm:ss")}"`, 15 | }); 16 | 17 | export default log; 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | "outDir": "build", 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs" /* Specify what module code is generated. */, 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "resolveJsonModule": true, /* Enable importing .json files. */ 39 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 40 | 41 | /* JavaScript Support */ 42 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 43 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 44 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 45 | 46 | /* Emit */ 47 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 48 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 49 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 50 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 51 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 52 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 53 | // "removeComments": true, /* Disable emitting comments. */ 54 | // "noEmit": true, /* Disable emitting files from a compilation. */ 55 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 56 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 57 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 58 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 59 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 60 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 63 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 64 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 67 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 69 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 70 | 71 | /* Interop Constraints */ 72 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 74 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 76 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 77 | 78 | /* Type Checking */ 79 | "strict": true /* Enable all strict type-checking options. */, 80 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 81 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 82 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 83 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 84 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 85 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 86 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 87 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 88 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 89 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 90 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 91 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 92 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 93 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 94 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 95 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 96 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 97 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 98 | 99 | /* Completeness */ 100 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 101 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cspotcode/source-map-support@^0.8.0": 6 | version "0.8.1" 7 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 8 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 9 | dependencies: 10 | "@jridgewell/trace-mapping" "0.3.9" 11 | 12 | "@jridgewell/resolve-uri@^3.0.3": 13 | version "3.1.0" 14 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 15 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 16 | 17 | "@jridgewell/sourcemap-codec@^1.4.10": 18 | version "1.4.14" 19 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 20 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 21 | 22 | "@jridgewell/trace-mapping@0.3.9": 23 | version "0.3.9" 24 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 25 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 26 | dependencies: 27 | "@jridgewell/resolve-uri" "^3.0.3" 28 | "@jridgewell/sourcemap-codec" "^1.4.10" 29 | 30 | "@mapbox/node-pre-gyp@^1.0.0": 31 | version "1.0.9" 32 | resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz#09a8781a3a036151cdebbe8719d6f8b25d4058bc" 33 | integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== 34 | dependencies: 35 | detect-libc "^2.0.0" 36 | https-proxy-agent "^5.0.0" 37 | make-dir "^3.1.0" 38 | node-fetch "^2.6.7" 39 | nopt "^5.0.0" 40 | npmlog "^5.0.1" 41 | rimraf "^3.0.2" 42 | semver "^7.3.5" 43 | tar "^6.1.11" 44 | 45 | "@tsconfig/node10@^1.0.7": 46 | version "1.0.9" 47 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 48 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 49 | 50 | "@tsconfig/node12@^1.0.7": 51 | version "1.0.11" 52 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 53 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 54 | 55 | "@tsconfig/node14@^1.0.0": 56 | version "1.0.3" 57 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 58 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 59 | 60 | "@tsconfig/node16@^1.0.2": 61 | version "1.0.3" 62 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" 63 | integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== 64 | 65 | "@types/bcrypt@^5.0.0": 66 | version "5.0.0" 67 | resolved "https://registry.yarnpkg.com/@types/bcrypt/-/bcrypt-5.0.0.tgz#a835afa2882d165aff5690893db314eaa98b9f20" 68 | integrity sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw== 69 | dependencies: 70 | "@types/node" "*" 71 | 72 | "@types/body-parser@*", "@types/body-parser@^1.19.2": 73 | version "1.19.2" 74 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" 75 | integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== 76 | dependencies: 77 | "@types/connect" "*" 78 | "@types/node" "*" 79 | 80 | "@types/config@^0.0.41": 81 | version "0.0.41" 82 | resolved "https://registry.yarnpkg.com/@types/config/-/config-0.0.41.tgz#c8237ab09730380801f3643beaefa077ca5f3c28" 83 | integrity sha512-HjXUmIld0gwvyG8MU/17QtLzOyuMX4jbGuijmS9sWsob5xxgZ/hY9cbRCaHIHqTQ3HMLhwS3F8uXq3Bt9zgzHA== 84 | 85 | "@types/connect@*": 86 | version "3.4.35" 87 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 88 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 89 | dependencies: 90 | "@types/node" "*" 91 | 92 | "@types/cors@^2.8.12": 93 | version "2.8.12" 94 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" 95 | integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== 96 | 97 | "@types/express-serve-static-core@^4.17.18": 98 | version "4.17.29" 99 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" 100 | integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== 101 | dependencies: 102 | "@types/node" "*" 103 | "@types/qs" "*" 104 | "@types/range-parser" "*" 105 | 106 | "@types/express@^4.17.13": 107 | version "4.17.13" 108 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" 109 | integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== 110 | dependencies: 111 | "@types/body-parser" "*" 112 | "@types/express-serve-static-core" "^4.17.18" 113 | "@types/qs" "*" 114 | "@types/serve-static" "*" 115 | 116 | "@types/jsonwebtoken@^8.5.8": 117 | version "8.5.8" 118 | resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz#01b39711eb844777b7af1d1f2b4cf22fda1c0c44" 119 | integrity sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A== 120 | dependencies: 121 | "@types/node" "*" 122 | 123 | "@types/lodash@^4.14.182": 124 | version "4.14.182" 125 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" 126 | integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== 127 | 128 | "@types/mime@^1": 129 | version "1.3.2" 130 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" 131 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== 132 | 133 | "@types/nanoid@^3.0.0": 134 | version "3.0.0" 135 | resolved "https://registry.yarnpkg.com/@types/nanoid/-/nanoid-3.0.0.tgz#c757b20f343f3a1dd76e80a9a431b6290fc20f35" 136 | integrity sha512-UXitWSmXCwhDmAKe7D3hNQtQaHeHt5L8LO1CB8GF8jlYVzOv5cBWDNqiJ+oPEWrWei3i3dkZtHY/bUtd0R/uOQ== 137 | dependencies: 138 | nanoid "*" 139 | 140 | "@types/node@*", "@types/node@^18.6.1": 141 | version "18.6.1" 142 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.1.tgz#828e4785ccca13f44e2fb6852ae0ef11e3e20ba5" 143 | integrity sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg== 144 | 145 | "@types/pino@^7.0.5": 146 | version "7.0.5" 147 | resolved "https://registry.yarnpkg.com/@types/pino/-/pino-7.0.5.tgz#1c84a81b924a6a9e263dbb581dffdbad7a3c60c4" 148 | integrity sha512-wKoab31pknvILkxAF8ss+v9iNyhw5Iu/0jLtRkUD74cNfOOLJNnqfFKAv0r7wVaTQxRZtWrMpGfShwwBjOcgcg== 149 | dependencies: 150 | pino "*" 151 | 152 | "@types/qs@*": 153 | version "6.9.7" 154 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 155 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 156 | 157 | "@types/range-parser@*": 158 | version "1.2.4" 159 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 160 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 161 | 162 | "@types/serve-static@*": 163 | version "1.13.10" 164 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" 165 | integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== 166 | dependencies: 167 | "@types/mime" "^1" 168 | "@types/node" "*" 169 | 170 | "@types/strip-bom@^3.0.0": 171 | version "3.0.0" 172 | resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" 173 | integrity sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== 174 | 175 | "@types/strip-json-comments@0.0.30": 176 | version "0.0.30" 177 | resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" 178 | integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== 179 | 180 | "@types/webidl-conversions@*": 181 | version "6.1.1" 182 | resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz#e33bc8ea812a01f63f90481c666334844b12a09e" 183 | integrity sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q== 184 | 185 | "@types/whatwg-url@^8.2.1": 186 | version "8.2.2" 187 | resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" 188 | integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== 189 | dependencies: 190 | "@types/node" "*" 191 | "@types/webidl-conversions" "*" 192 | 193 | abbrev@1: 194 | version "1.1.1" 195 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 196 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 197 | 198 | abort-controller@^3.0.0: 199 | version "3.0.0" 200 | resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" 201 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 202 | dependencies: 203 | event-target-shim "^5.0.0" 204 | 205 | accepts@~1.3.8: 206 | version "1.3.8" 207 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 208 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 209 | dependencies: 210 | mime-types "~2.1.34" 211 | negotiator "0.6.3" 212 | 213 | acorn-walk@^8.1.1: 214 | version "8.2.0" 215 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 216 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 217 | 218 | acorn@^8.4.1: 219 | version "8.8.0" 220 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" 221 | integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== 222 | 223 | agent-base@6: 224 | version "6.0.2" 225 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 226 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 227 | dependencies: 228 | debug "4" 229 | 230 | ansi-regex@^5.0.1: 231 | version "5.0.1" 232 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 233 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 234 | 235 | anymatch@~3.1.2: 236 | version "3.1.2" 237 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 238 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 239 | dependencies: 240 | normalize-path "^3.0.0" 241 | picomatch "^2.0.4" 242 | 243 | "aproba@^1.0.3 || ^2.0.0": 244 | version "2.0.0" 245 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" 246 | integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== 247 | 248 | are-we-there-yet@^2.0.0: 249 | version "2.0.0" 250 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" 251 | integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== 252 | dependencies: 253 | delegates "^1.0.0" 254 | readable-stream "^3.6.0" 255 | 256 | arg@^4.1.0: 257 | version "4.1.3" 258 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 259 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 260 | 261 | array-flatten@1.1.1: 262 | version "1.1.1" 263 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 264 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== 265 | 266 | atomic-sleep@^1.0.0: 267 | version "1.0.0" 268 | resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" 269 | integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== 270 | 271 | balanced-match@^1.0.0: 272 | version "1.0.2" 273 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 274 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 275 | 276 | base64-js@^1.3.1: 277 | version "1.5.1" 278 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 279 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 280 | 281 | bcrypt@^5.0.1: 282 | version "5.0.1" 283 | resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.0.1.tgz#f1a2c20f208e2ccdceea4433df0c8b2c54ecdf71" 284 | integrity sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw== 285 | dependencies: 286 | "@mapbox/node-pre-gyp" "^1.0.0" 287 | node-addon-api "^3.1.0" 288 | 289 | binary-extensions@^2.0.0: 290 | version "2.2.0" 291 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 292 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 293 | 294 | body-parser@1.20.0: 295 | version "1.20.0" 296 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" 297 | integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== 298 | dependencies: 299 | bytes "3.1.2" 300 | content-type "~1.0.4" 301 | debug "2.6.9" 302 | depd "2.0.0" 303 | destroy "1.2.0" 304 | http-errors "2.0.0" 305 | iconv-lite "0.4.24" 306 | on-finished "2.4.1" 307 | qs "6.10.3" 308 | raw-body "2.5.1" 309 | type-is "~1.6.18" 310 | unpipe "1.0.0" 311 | 312 | brace-expansion@^1.1.7: 313 | version "1.1.11" 314 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 315 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 316 | dependencies: 317 | balanced-match "^1.0.0" 318 | concat-map "0.0.1" 319 | 320 | brace-expansion@^2.0.1: 321 | version "2.0.1" 322 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 323 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 324 | dependencies: 325 | balanced-match "^1.0.0" 326 | 327 | braces@~3.0.2: 328 | version "3.0.2" 329 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 330 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 331 | dependencies: 332 | fill-range "^7.0.1" 333 | 334 | bson@^4.6.2, bson@^4.6.3: 335 | version "4.6.5" 336 | resolved "https://registry.yarnpkg.com/bson/-/bson-4.6.5.tgz#1a410148c20eef4e40d484878a037a7036e840fb" 337 | integrity sha512-uqrgcjyOaZsHfz7ea8zLRCLe1u+QGUSzMZmvXqO24CDW7DWoW1qiN9folSwa7hSneTSgM2ykDIzF5kcQQ8cwNw== 338 | dependencies: 339 | buffer "^5.6.0" 340 | 341 | buffer-equal-constant-time@1.0.1: 342 | version "1.0.1" 343 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" 344 | integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== 345 | 346 | buffer-from@^1.0.0: 347 | version "1.1.2" 348 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 349 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 350 | 351 | buffer@^5.6.0: 352 | version "5.7.1" 353 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 354 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 355 | dependencies: 356 | base64-js "^1.3.1" 357 | ieee754 "^1.1.13" 358 | 359 | bytes@3.1.2: 360 | version "3.1.2" 361 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 362 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 363 | 364 | call-bind@^1.0.0: 365 | version "1.0.2" 366 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 367 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 368 | dependencies: 369 | function-bind "^1.1.1" 370 | get-intrinsic "^1.0.2" 371 | 372 | chokidar@^3.5.1: 373 | version "3.5.3" 374 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 375 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 376 | dependencies: 377 | anymatch "~3.1.2" 378 | braces "~3.0.2" 379 | glob-parent "~5.1.2" 380 | is-binary-path "~2.1.0" 381 | is-glob "~4.0.1" 382 | normalize-path "~3.0.0" 383 | readdirp "~3.6.0" 384 | optionalDependencies: 385 | fsevents "~2.3.2" 386 | 387 | chownr@^2.0.0: 388 | version "2.0.0" 389 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" 390 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== 391 | 392 | color-support@^1.1.2: 393 | version "1.1.3" 394 | resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" 395 | integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== 396 | 397 | colorette@^2.0.7: 398 | version "2.0.19" 399 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" 400 | integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== 401 | 402 | concat-map@0.0.1: 403 | version "0.0.1" 404 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 405 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 406 | 407 | config@^3.3.7: 408 | version "3.3.7" 409 | resolved "https://registry.yarnpkg.com/config/-/config-3.3.7.tgz#4310410dc2bf4e0effdca21a12a4035860a24ee4" 410 | integrity sha512-mX/n7GKDYZMqvvkY6e6oBY49W8wxdmQt+ho/5lhwFDXqQW9gI+Ahp8EKp8VAbISPnmf2+Bv5uZK7lKXZ6pf1aA== 411 | dependencies: 412 | json5 "^2.1.1" 413 | 414 | console-control-strings@^1.0.0, console-control-strings@^1.1.0: 415 | version "1.1.0" 416 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 417 | integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== 418 | 419 | content-disposition@0.5.4: 420 | version "0.5.4" 421 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 422 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 423 | dependencies: 424 | safe-buffer "5.2.1" 425 | 426 | content-type@~1.0.4: 427 | version "1.0.4" 428 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 429 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 430 | 431 | cookie-signature@1.0.6: 432 | version "1.0.6" 433 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 434 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== 435 | 436 | cookie@0.5.0: 437 | version "0.5.0" 438 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" 439 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== 440 | 441 | cors@^2.8.5: 442 | version "2.8.5" 443 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 444 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 445 | dependencies: 446 | object-assign "^4" 447 | vary "^1" 448 | 449 | create-require@^1.1.0: 450 | version "1.1.1" 451 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 452 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 453 | 454 | dateformat@^4.6.3: 455 | version "4.6.3" 456 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" 457 | integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== 458 | 459 | dayjs@^1.11.4: 460 | version "1.11.4" 461 | resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.4.tgz#3b3c10ca378140d8917e06ebc13a4922af4f433e" 462 | integrity sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g== 463 | 464 | debug@2.6.9: 465 | version "2.6.9" 466 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 467 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 468 | dependencies: 469 | ms "2.0.0" 470 | 471 | debug@4, debug@4.x: 472 | version "4.3.4" 473 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 474 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 475 | dependencies: 476 | ms "2.1.2" 477 | 478 | delegates@^1.0.0: 479 | version "1.0.0" 480 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 481 | integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== 482 | 483 | denque@^2.0.1: 484 | version "2.1.0" 485 | resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" 486 | integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== 487 | 488 | depd@2.0.0: 489 | version "2.0.0" 490 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 491 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 492 | 493 | destroy@1.2.0: 494 | version "1.2.0" 495 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 496 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 497 | 498 | detect-libc@^2.0.0: 499 | version "2.0.1" 500 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" 501 | integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== 502 | 503 | diff@^4.0.1: 504 | version "4.0.2" 505 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 506 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 507 | 508 | dotenv@^16.0.1: 509 | version "16.0.1" 510 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" 511 | integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== 512 | 513 | dynamic-dedupe@^0.3.0: 514 | version "0.3.0" 515 | resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" 516 | integrity sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ== 517 | dependencies: 518 | xtend "^4.0.0" 519 | 520 | ecdsa-sig-formatter@1.0.11: 521 | version "1.0.11" 522 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" 523 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== 524 | dependencies: 525 | safe-buffer "^5.0.1" 526 | 527 | ee-first@1.1.1: 528 | version "1.1.1" 529 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 530 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 531 | 532 | emoji-regex@^8.0.0: 533 | version "8.0.0" 534 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 535 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 536 | 537 | encodeurl@~1.0.2: 538 | version "1.0.2" 539 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 540 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 541 | 542 | end-of-stream@^1.1.0: 543 | version "1.4.4" 544 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 545 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 546 | dependencies: 547 | once "^1.4.0" 548 | 549 | escape-html@~1.0.3: 550 | version "1.0.3" 551 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 552 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 553 | 554 | etag@~1.8.1: 555 | version "1.8.1" 556 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 557 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 558 | 559 | event-target-shim@^5.0.0: 560 | version "5.0.1" 561 | resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 562 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 563 | 564 | express@^4.18.1: 565 | version "4.18.1" 566 | resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" 567 | integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== 568 | dependencies: 569 | accepts "~1.3.8" 570 | array-flatten "1.1.1" 571 | body-parser "1.20.0" 572 | content-disposition "0.5.4" 573 | content-type "~1.0.4" 574 | cookie "0.5.0" 575 | cookie-signature "1.0.6" 576 | debug "2.6.9" 577 | depd "2.0.0" 578 | encodeurl "~1.0.2" 579 | escape-html "~1.0.3" 580 | etag "~1.8.1" 581 | finalhandler "1.2.0" 582 | fresh "0.5.2" 583 | http-errors "2.0.0" 584 | merge-descriptors "1.0.1" 585 | methods "~1.1.2" 586 | on-finished "2.4.1" 587 | parseurl "~1.3.3" 588 | path-to-regexp "0.1.7" 589 | proxy-addr "~2.0.7" 590 | qs "6.10.3" 591 | range-parser "~1.2.1" 592 | safe-buffer "5.2.1" 593 | send "0.18.0" 594 | serve-static "1.15.0" 595 | setprototypeof "1.2.0" 596 | statuses "2.0.1" 597 | type-is "~1.6.18" 598 | utils-merge "1.0.1" 599 | vary "~1.1.2" 600 | 601 | fast-copy@^2.1.1: 602 | version "2.1.3" 603 | resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-2.1.3.tgz#bf6e05ac3cb7a9d66fbf12c51dd4440e9ddd4afb" 604 | integrity sha512-LDzYKNTHhD+XOp8wGMuCkY4eTxFZOOycmpwLBiuF3r3OjOmZnURRD8t2dUAbmKuXGbo/MGggwbSjcBdp8QT0+g== 605 | 606 | fast-redact@^3.1.1: 607 | version "3.1.1" 608 | resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.1.1.tgz#790fcff8f808c2e12fabbfb2be5cb2deda448fa0" 609 | integrity sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A== 610 | 611 | fast-safe-stringify@^2.1.1: 612 | version "2.1.1" 613 | resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" 614 | integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== 615 | 616 | fill-range@^7.0.1: 617 | version "7.0.1" 618 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 619 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 620 | dependencies: 621 | to-regex-range "^5.0.1" 622 | 623 | finalhandler@1.2.0: 624 | version "1.2.0" 625 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" 626 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== 627 | dependencies: 628 | debug "2.6.9" 629 | encodeurl "~1.0.2" 630 | escape-html "~1.0.3" 631 | on-finished "2.4.1" 632 | parseurl "~1.3.3" 633 | statuses "2.0.1" 634 | unpipe "~1.0.0" 635 | 636 | forwarded@0.2.0: 637 | version "0.2.0" 638 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 639 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 640 | 641 | fresh@0.5.2: 642 | version "0.5.2" 643 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 644 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 645 | 646 | fs-minipass@^2.0.0: 647 | version "2.1.0" 648 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" 649 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== 650 | dependencies: 651 | minipass "^3.0.0" 652 | 653 | fs.realpath@^1.0.0: 654 | version "1.0.0" 655 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 656 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 657 | 658 | fsevents@~2.3.2: 659 | version "2.3.2" 660 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 661 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 662 | 663 | function-bind@^1.1.1: 664 | version "1.1.1" 665 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 666 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 667 | 668 | gauge@^3.0.0: 669 | version "3.0.2" 670 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" 671 | integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== 672 | dependencies: 673 | aproba "^1.0.3 || ^2.0.0" 674 | color-support "^1.1.2" 675 | console-control-strings "^1.0.0" 676 | has-unicode "^2.0.1" 677 | object-assign "^4.1.1" 678 | signal-exit "^3.0.0" 679 | string-width "^4.2.3" 680 | strip-ansi "^6.0.1" 681 | wide-align "^1.1.2" 682 | 683 | get-intrinsic@^1.0.2: 684 | version "1.1.2" 685 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" 686 | integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== 687 | dependencies: 688 | function-bind "^1.1.1" 689 | has "^1.0.3" 690 | has-symbols "^1.0.3" 691 | 692 | glob-parent@~5.1.2: 693 | version "5.1.2" 694 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 695 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 696 | dependencies: 697 | is-glob "^4.0.1" 698 | 699 | glob@^7.1.3: 700 | version "7.2.3" 701 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 702 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 703 | dependencies: 704 | fs.realpath "^1.0.0" 705 | inflight "^1.0.4" 706 | inherits "2" 707 | minimatch "^3.1.1" 708 | once "^1.3.0" 709 | path-is-absolute "^1.0.0" 710 | 711 | glob@^8.0.0: 712 | version "8.0.3" 713 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" 714 | integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== 715 | dependencies: 716 | fs.realpath "^1.0.0" 717 | inflight "^1.0.4" 718 | inherits "2" 719 | minimatch "^5.0.1" 720 | once "^1.3.0" 721 | 722 | has-symbols@^1.0.3: 723 | version "1.0.3" 724 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 725 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 726 | 727 | has-unicode@^2.0.1: 728 | version "2.0.1" 729 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 730 | integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== 731 | 732 | has@^1.0.3: 733 | version "1.0.3" 734 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 735 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 736 | dependencies: 737 | function-bind "^1.1.1" 738 | 739 | help-me@^4.0.1: 740 | version "4.0.1" 741 | resolved "https://registry.yarnpkg.com/help-me/-/help-me-4.0.1.tgz#b618ca10ae1392508dfad5eca75fce03e25f7616" 742 | integrity sha512-PLv01Z+OhEPKj2QPYB4kjoCUkopYNPUK3EROlaPIf5bib752fZ+VCvGDAoA+FXo/OwCyLEA4D2e0mX8+Zhcplw== 743 | dependencies: 744 | glob "^8.0.0" 745 | readable-stream "^3.6.0" 746 | 747 | http-errors@2.0.0: 748 | version "2.0.0" 749 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 750 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 751 | dependencies: 752 | depd "2.0.0" 753 | inherits "2.0.4" 754 | setprototypeof "1.2.0" 755 | statuses "2.0.1" 756 | toidentifier "1.0.1" 757 | 758 | https-proxy-agent@^5.0.0: 759 | version "5.0.1" 760 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 761 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 762 | dependencies: 763 | agent-base "6" 764 | debug "4" 765 | 766 | iconv-lite@0.4.24: 767 | version "0.4.24" 768 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 769 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 770 | dependencies: 771 | safer-buffer ">= 2.1.2 < 3" 772 | 773 | ieee754@^1.1.13: 774 | version "1.2.1" 775 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 776 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 777 | 778 | inflight@^1.0.4: 779 | version "1.0.6" 780 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 781 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 782 | dependencies: 783 | once "^1.3.0" 784 | wrappy "1" 785 | 786 | inherits@2, inherits@2.0.4, inherits@^2.0.3: 787 | version "2.0.4" 788 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 789 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 790 | 791 | ip@^2.0.0: 792 | version "2.0.0" 793 | resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" 794 | integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== 795 | 796 | ipaddr.js@1.9.1: 797 | version "1.9.1" 798 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 799 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 800 | 801 | is-binary-path@~2.1.0: 802 | version "2.1.0" 803 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 804 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 805 | dependencies: 806 | binary-extensions "^2.0.0" 807 | 808 | is-core-module@^2.9.0: 809 | version "2.9.0" 810 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" 811 | integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== 812 | dependencies: 813 | has "^1.0.3" 814 | 815 | is-extglob@^2.1.1: 816 | version "2.1.1" 817 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 818 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 819 | 820 | is-fullwidth-code-point@^3.0.0: 821 | version "3.0.0" 822 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 823 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 824 | 825 | is-glob@^4.0.1, is-glob@~4.0.1: 826 | version "4.0.3" 827 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 828 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 829 | dependencies: 830 | is-extglob "^2.1.1" 831 | 832 | is-number@^7.0.0: 833 | version "7.0.0" 834 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 835 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 836 | 837 | joycon@^3.1.1: 838 | version "3.1.1" 839 | resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" 840 | integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== 841 | 842 | json5@^2.1.1: 843 | version "2.2.1" 844 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" 845 | integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== 846 | 847 | jsonwebtoken@^8.5.1: 848 | version "8.5.1" 849 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" 850 | integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== 851 | dependencies: 852 | jws "^3.2.2" 853 | lodash.includes "^4.3.0" 854 | lodash.isboolean "^3.0.3" 855 | lodash.isinteger "^4.0.4" 856 | lodash.isnumber "^3.0.3" 857 | lodash.isplainobject "^4.0.6" 858 | lodash.isstring "^4.0.1" 859 | lodash.once "^4.0.0" 860 | ms "^2.1.1" 861 | semver "^5.6.0" 862 | 863 | jwa@^1.4.1: 864 | version "1.4.1" 865 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" 866 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== 867 | dependencies: 868 | buffer-equal-constant-time "1.0.1" 869 | ecdsa-sig-formatter "1.0.11" 870 | safe-buffer "^5.0.1" 871 | 872 | jws@^3.2.2: 873 | version "3.2.2" 874 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" 875 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== 876 | dependencies: 877 | jwa "^1.4.1" 878 | safe-buffer "^5.0.1" 879 | 880 | kareem@2.4.1: 881 | version "2.4.1" 882 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.4.1.tgz#7d81ec518204a48c1cb16554af126806c3cd82b0" 883 | integrity sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA== 884 | 885 | lodash.includes@^4.3.0: 886 | version "4.3.0" 887 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" 888 | integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== 889 | 890 | lodash.isboolean@^3.0.3: 891 | version "3.0.3" 892 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" 893 | integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== 894 | 895 | lodash.isinteger@^4.0.4: 896 | version "4.0.4" 897 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" 898 | integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== 899 | 900 | lodash.isnumber@^3.0.3: 901 | version "3.0.3" 902 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" 903 | integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== 904 | 905 | lodash.isplainobject@^4.0.6: 906 | version "4.0.6" 907 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 908 | integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== 909 | 910 | lodash.isstring@^4.0.1: 911 | version "4.0.1" 912 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 913 | integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== 914 | 915 | lodash.once@^4.0.0: 916 | version "4.1.1" 917 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" 918 | integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== 919 | 920 | lodash@^4.17.21: 921 | version "4.17.21" 922 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 923 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 924 | 925 | lru-cache@^6.0.0: 926 | version "6.0.0" 927 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 928 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 929 | dependencies: 930 | yallist "^4.0.0" 931 | 932 | make-dir@^3.1.0: 933 | version "3.1.0" 934 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 935 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 936 | dependencies: 937 | semver "^6.0.0" 938 | 939 | make-error@^1.1.1: 940 | version "1.3.6" 941 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 942 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 943 | 944 | media-typer@0.3.0: 945 | version "0.3.0" 946 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 947 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 948 | 949 | memory-pager@^1.0.2: 950 | version "1.5.0" 951 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" 952 | integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== 953 | 954 | merge-descriptors@1.0.1: 955 | version "1.0.1" 956 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 957 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== 958 | 959 | methods@~1.1.2: 960 | version "1.1.2" 961 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 962 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 963 | 964 | mime-db@1.52.0: 965 | version "1.52.0" 966 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 967 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 968 | 969 | mime-types@~2.1.24, mime-types@~2.1.34: 970 | version "2.1.35" 971 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 972 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 973 | dependencies: 974 | mime-db "1.52.0" 975 | 976 | mime@1.6.0: 977 | version "1.6.0" 978 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 979 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 980 | 981 | minimatch@^3.1.1: 982 | version "3.1.2" 983 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 984 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 985 | dependencies: 986 | brace-expansion "^1.1.7" 987 | 988 | minimatch@^5.0.1: 989 | version "5.1.0" 990 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" 991 | integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== 992 | dependencies: 993 | brace-expansion "^2.0.1" 994 | 995 | minimist@^1.2.6: 996 | version "1.2.6" 997 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 998 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 999 | 1000 | minipass@^3.0.0: 1001 | version "3.3.4" 1002 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" 1003 | integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== 1004 | dependencies: 1005 | yallist "^4.0.0" 1006 | 1007 | minizlib@^2.1.1: 1008 | version "2.1.2" 1009 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" 1010 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== 1011 | dependencies: 1012 | minipass "^3.0.0" 1013 | yallist "^4.0.0" 1014 | 1015 | mkdirp@^1.0.3, mkdirp@^1.0.4: 1016 | version "1.0.4" 1017 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1018 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1019 | 1020 | mongodb-connection-string-url@^2.5.2: 1021 | version "2.5.3" 1022 | resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.3.tgz#c0c572b71570e58be2bd52b33dffd1330cfb6990" 1023 | integrity sha512-f+/WsED+xF4B74l3k9V/XkTVj5/fxFH2o5ToKXd8Iyi5UhM+sO9u0Ape17Mvl/GkZaFtM0HQnzAG5OTmhKw+tQ== 1024 | dependencies: 1025 | "@types/whatwg-url" "^8.2.1" 1026 | whatwg-url "^11.0.0" 1027 | 1028 | mongodb@4.7.0: 1029 | version "4.7.0" 1030 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-4.7.0.tgz#99f7323271d93659067695b60e7b4efee2de9bf0" 1031 | integrity sha512-HhVar6hsUeMAVlIbwQwWtV36iyjKd9qdhY+s4wcU8K6TOj4Q331iiMy+FoPuxEntDIijTYWivwFJkLv8q/ZgvA== 1032 | dependencies: 1033 | bson "^4.6.3" 1034 | denque "^2.0.1" 1035 | mongodb-connection-string-url "^2.5.2" 1036 | socks "^2.6.2" 1037 | optionalDependencies: 1038 | saslprep "^1.0.3" 1039 | 1040 | mongoose@^6.4.6: 1041 | version "6.4.6" 1042 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-6.4.6.tgz#57bc7ae68de56abcc5e890284f2d10acac863aa2" 1043 | integrity sha512-ZAfNCWgXhwev6k/+rMzjHIJ/+wLkundQU/i+aUTqmCgGoYqc+B5e4EC4Y3E1XaLzNXiWID1/vocSM6zs5IAGvA== 1044 | dependencies: 1045 | bson "^4.6.2" 1046 | kareem "2.4.1" 1047 | mongodb "4.7.0" 1048 | mpath "0.9.0" 1049 | mquery "4.0.3" 1050 | ms "2.1.3" 1051 | sift "16.0.0" 1052 | 1053 | mpath@0.9.0: 1054 | version "0.9.0" 1055 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.9.0.tgz#0c122fe107846e31fc58c75b09c35514b3871904" 1056 | integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew== 1057 | 1058 | mquery@4.0.3: 1059 | version "4.0.3" 1060 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-4.0.3.tgz#4d15f938e6247d773a942c912d9748bd1965f89d" 1061 | integrity sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA== 1062 | dependencies: 1063 | debug "4.x" 1064 | 1065 | ms@2.0.0: 1066 | version "2.0.0" 1067 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1068 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 1069 | 1070 | ms@2.1.2: 1071 | version "2.1.2" 1072 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1073 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1074 | 1075 | ms@2.1.3, ms@^2.1.1: 1076 | version "2.1.3" 1077 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1078 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1079 | 1080 | nanoid@*: 1081 | version "4.0.0" 1082 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-4.0.0.tgz#6e144dee117609232c3f415c34b0e550e64999a5" 1083 | integrity sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg== 1084 | 1085 | negotiator@0.6.3: 1086 | version "0.6.3" 1087 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 1088 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 1089 | 1090 | node-addon-api@^3.1.0: 1091 | version "3.2.1" 1092 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" 1093 | integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== 1094 | 1095 | node-fetch@^2.6.7: 1096 | version "2.6.7" 1097 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 1098 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 1099 | dependencies: 1100 | whatwg-url "^5.0.0" 1101 | 1102 | nopt@^5.0.0: 1103 | version "5.0.0" 1104 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" 1105 | integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== 1106 | dependencies: 1107 | abbrev "1" 1108 | 1109 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1110 | version "3.0.0" 1111 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1112 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1113 | 1114 | npmlog@^5.0.1: 1115 | version "5.0.1" 1116 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" 1117 | integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== 1118 | dependencies: 1119 | are-we-there-yet "^2.0.0" 1120 | console-control-strings "^1.1.0" 1121 | gauge "^3.0.0" 1122 | set-blocking "^2.0.0" 1123 | 1124 | object-assign@^4, object-assign@^4.1.1: 1125 | version "4.1.1" 1126 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1127 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1128 | 1129 | object-inspect@^1.9.0: 1130 | version "1.12.2" 1131 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" 1132 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 1133 | 1134 | on-exit-leak-free@^1.0.0: 1135 | version "1.0.0" 1136 | resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-1.0.0.tgz#4a2accb382278a266848bb1a21439e5fc3cd9881" 1137 | integrity sha512-Ve8ubhrXRdnuCJ5bQSQpP3uaV43K1PMcOfSRC1pqHgRZommXCgsXwh08jVC5NpjwScE23BPDwDvVg4cov3mwjw== 1138 | 1139 | on-exit-leak-free@^2.1.0: 1140 | version "2.1.0" 1141 | resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" 1142 | integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== 1143 | 1144 | on-finished@2.4.1: 1145 | version "2.4.1" 1146 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 1147 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 1148 | dependencies: 1149 | ee-first "1.1.1" 1150 | 1151 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1152 | version "1.4.0" 1153 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1154 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1155 | dependencies: 1156 | wrappy "1" 1157 | 1158 | parseurl@~1.3.3: 1159 | version "1.3.3" 1160 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1161 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1162 | 1163 | path-is-absolute@^1.0.0: 1164 | version "1.0.1" 1165 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1166 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1167 | 1168 | path-parse@^1.0.7: 1169 | version "1.0.7" 1170 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1171 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1172 | 1173 | path-to-regexp@0.1.7: 1174 | version "0.1.7" 1175 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1176 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== 1177 | 1178 | picomatch@^2.0.4, picomatch@^2.2.1: 1179 | version "2.3.1" 1180 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1181 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1182 | 1183 | pino-abstract-transport@^1.0.0, pino-abstract-transport@v1.0.0: 1184 | version "1.0.0" 1185 | resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz#cc0d6955fffcadb91b7b49ef220a6cc111d48bb3" 1186 | integrity sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA== 1187 | dependencies: 1188 | readable-stream "^4.0.0" 1189 | split2 "^4.0.0" 1190 | 1191 | pino-pretty@^8.1.0: 1192 | version "8.1.0" 1193 | resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-8.1.0.tgz#1dda4ca71701dfeaf1f72057da1b5b718a0d0f04" 1194 | integrity sha512-oKfI8qKXR2a3haHs/X8iB6QSnWLqoOGAjwxIAXem4+XOGIGNw7IKpozId1uE7j89Rj46HIfWnGbAgmQmr8+yRw== 1195 | dependencies: 1196 | colorette "^2.0.7" 1197 | dateformat "^4.6.3" 1198 | fast-copy "^2.1.1" 1199 | fast-safe-stringify "^2.1.1" 1200 | help-me "^4.0.1" 1201 | joycon "^3.1.1" 1202 | minimist "^1.2.6" 1203 | on-exit-leak-free "^1.0.0" 1204 | pino-abstract-transport "^1.0.0" 1205 | pump "^3.0.0" 1206 | readable-stream "^4.0.0" 1207 | secure-json-parse "^2.4.0" 1208 | sonic-boom "^3.0.0" 1209 | strip-json-comments "^3.1.1" 1210 | 1211 | pino-std-serializers@^6.0.0: 1212 | version "6.0.0" 1213 | resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.0.0.tgz#4c20928a1bafca122fdc2a7a4a171ca1c5f9c526" 1214 | integrity sha512-mMMOwSKrmyl+Y12Ri2xhH1lbzQxwwpuru9VjyJpgFIH4asSj88F2csdMwN6+M5g1Ll4rmsYghHLQJw81tgZ7LQ== 1215 | 1216 | pino@*, pino@^8.3.0: 1217 | version "8.3.0" 1218 | resolved "https://registry.yarnpkg.com/pino/-/pino-8.3.0.tgz#13e400df4ef39ce716b33b8e5486fb8e24a30c45" 1219 | integrity sha512-CUOOU5sYgyLVijf7qsOWkPLOdzIXaVE9Oyl6zAkjgJn30uGBFUtrRaaCzbtOSJ1I6BqfanBqBttbazEJIwHkJg== 1220 | dependencies: 1221 | atomic-sleep "^1.0.0" 1222 | fast-redact "^3.1.1" 1223 | on-exit-leak-free "^2.1.0" 1224 | pino-abstract-transport v1.0.0 1225 | pino-std-serializers "^6.0.0" 1226 | process-warning "^2.0.0" 1227 | quick-format-unescaped "^4.0.3" 1228 | real-require "^0.1.0" 1229 | safe-stable-stringify "^2.3.1" 1230 | sonic-boom "^3.1.0" 1231 | thread-stream "^2.0.0" 1232 | 1233 | process-warning@^2.0.0: 1234 | version "2.0.0" 1235 | resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.0.0.tgz#341dbeaac985b90a04ebcd844d50097c7737b2ee" 1236 | integrity sha512-+MmoAXoUX+VTHAlwns0h+kFUWFs/3FZy+ZuchkgjyOu3oioLAo2LB5aCfKPh2+P9O18i3m43tUEv3YqttSy0Ww== 1237 | 1238 | proxy-addr@~2.0.7: 1239 | version "2.0.7" 1240 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 1241 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 1242 | dependencies: 1243 | forwarded "0.2.0" 1244 | ipaddr.js "1.9.1" 1245 | 1246 | pump@^3.0.0: 1247 | version "3.0.0" 1248 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1249 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1250 | dependencies: 1251 | end-of-stream "^1.1.0" 1252 | once "^1.3.1" 1253 | 1254 | punycode@^2.1.1: 1255 | version "2.1.1" 1256 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1257 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1258 | 1259 | qs@6.10.3: 1260 | version "6.10.3" 1261 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" 1262 | integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== 1263 | dependencies: 1264 | side-channel "^1.0.4" 1265 | 1266 | quick-format-unescaped@^4.0.3: 1267 | version "4.0.4" 1268 | resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" 1269 | integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== 1270 | 1271 | range-parser@~1.2.1: 1272 | version "1.2.1" 1273 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1274 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1275 | 1276 | raw-body@2.5.1: 1277 | version "2.5.1" 1278 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" 1279 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== 1280 | dependencies: 1281 | bytes "3.1.2" 1282 | http-errors "2.0.0" 1283 | iconv-lite "0.4.24" 1284 | unpipe "1.0.0" 1285 | 1286 | readable-stream@^3.6.0: 1287 | version "3.6.0" 1288 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 1289 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 1290 | dependencies: 1291 | inherits "^2.0.3" 1292 | string_decoder "^1.1.1" 1293 | util-deprecate "^1.0.1" 1294 | 1295 | readable-stream@^4.0.0: 1296 | version "4.1.0" 1297 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.1.0.tgz#280d0a29f559d3fb684a277254e02b6f61ae0631" 1298 | integrity sha512-sVisi3+P2lJ2t0BPbpK629j8wRW06yKGJUcaLAGXPAUhyUxVJm7VsCTit1PFgT4JHUDMrGNR+ZjSKpzGaRF3zw== 1299 | dependencies: 1300 | abort-controller "^3.0.0" 1301 | 1302 | readdirp@~3.6.0: 1303 | version "3.6.0" 1304 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1305 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1306 | dependencies: 1307 | picomatch "^2.2.1" 1308 | 1309 | real-require@^0.1.0: 1310 | version "0.1.0" 1311 | resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" 1312 | integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== 1313 | 1314 | resolve@^1.0.0: 1315 | version "1.22.1" 1316 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 1317 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1318 | dependencies: 1319 | is-core-module "^2.9.0" 1320 | path-parse "^1.0.7" 1321 | supports-preserve-symlinks-flag "^1.0.0" 1322 | 1323 | rimraf@^2.6.1: 1324 | version "2.7.1" 1325 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1326 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 1327 | dependencies: 1328 | glob "^7.1.3" 1329 | 1330 | rimraf@^3.0.2: 1331 | version "3.0.2" 1332 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1333 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1334 | dependencies: 1335 | glob "^7.1.3" 1336 | 1337 | safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: 1338 | version "5.2.1" 1339 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1340 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1341 | 1342 | safe-stable-stringify@^2.3.1: 1343 | version "2.3.1" 1344 | resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz#ab67cbe1fe7d40603ca641c5e765cb942d04fc73" 1345 | integrity sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg== 1346 | 1347 | "safer-buffer@>= 2.1.2 < 3": 1348 | version "2.1.2" 1349 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1350 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1351 | 1352 | saslprep@^1.0.3: 1353 | version "1.0.3" 1354 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" 1355 | integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== 1356 | dependencies: 1357 | sparse-bitfield "^3.0.3" 1358 | 1359 | secure-json-parse@^2.4.0: 1360 | version "2.4.0" 1361 | resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.4.0.tgz#5aaeaaef85c7a417f76271a4f5b0cc3315ddca85" 1362 | integrity sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg== 1363 | 1364 | semver@^5.6.0: 1365 | version "5.7.1" 1366 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1367 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1368 | 1369 | semver@^6.0.0: 1370 | version "6.3.0" 1371 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1372 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1373 | 1374 | semver@^7.3.5: 1375 | version "7.3.7" 1376 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 1377 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 1378 | dependencies: 1379 | lru-cache "^6.0.0" 1380 | 1381 | send@0.18.0: 1382 | version "0.18.0" 1383 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" 1384 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 1385 | dependencies: 1386 | debug "2.6.9" 1387 | depd "2.0.0" 1388 | destroy "1.2.0" 1389 | encodeurl "~1.0.2" 1390 | escape-html "~1.0.3" 1391 | etag "~1.8.1" 1392 | fresh "0.5.2" 1393 | http-errors "2.0.0" 1394 | mime "1.6.0" 1395 | ms "2.1.3" 1396 | on-finished "2.4.1" 1397 | range-parser "~1.2.1" 1398 | statuses "2.0.1" 1399 | 1400 | serve-static@1.15.0: 1401 | version "1.15.0" 1402 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" 1403 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== 1404 | dependencies: 1405 | encodeurl "~1.0.2" 1406 | escape-html "~1.0.3" 1407 | parseurl "~1.3.3" 1408 | send "0.18.0" 1409 | 1410 | set-blocking@^2.0.0: 1411 | version "2.0.0" 1412 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1413 | integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== 1414 | 1415 | setprototypeof@1.2.0: 1416 | version "1.2.0" 1417 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 1418 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1419 | 1420 | side-channel@^1.0.4: 1421 | version "1.0.4" 1422 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 1423 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1424 | dependencies: 1425 | call-bind "^1.0.0" 1426 | get-intrinsic "^1.0.2" 1427 | object-inspect "^1.9.0" 1428 | 1429 | sift@16.0.0: 1430 | version "16.0.0" 1431 | resolved "https://registry.yarnpkg.com/sift/-/sift-16.0.0.tgz#447991577db61f1a8fab727a8a98a6db57a23eb8" 1432 | integrity sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ== 1433 | 1434 | signal-exit@^3.0.0: 1435 | version "3.0.7" 1436 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1437 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1438 | 1439 | smart-buffer@^4.2.0: 1440 | version "4.2.0" 1441 | resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" 1442 | integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== 1443 | 1444 | socks@^2.6.2: 1445 | version "2.7.0" 1446 | resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" 1447 | integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== 1448 | dependencies: 1449 | ip "^2.0.0" 1450 | smart-buffer "^4.2.0" 1451 | 1452 | sonic-boom@^3.0.0, sonic-boom@^3.1.0: 1453 | version "3.1.0" 1454 | resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.1.0.tgz#c79f4298ae841f236f3bc0d6c1225d39d51f8eb2" 1455 | integrity sha512-qVr246G5307nz5JmhtsvHudxNMrRTWTCmTg+tA4gHQJnVyx/SsyQnky/5peC23B8etvlKli9P6sNXWQGDxoskQ== 1456 | dependencies: 1457 | atomic-sleep "^1.0.0" 1458 | 1459 | source-map-support@^0.5.12: 1460 | version "0.5.21" 1461 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1462 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1463 | dependencies: 1464 | buffer-from "^1.0.0" 1465 | source-map "^0.6.0" 1466 | 1467 | source-map@^0.6.0: 1468 | version "0.6.1" 1469 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1470 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1471 | 1472 | sparse-bitfield@^3.0.3: 1473 | version "3.0.3" 1474 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" 1475 | integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== 1476 | dependencies: 1477 | memory-pager "^1.0.2" 1478 | 1479 | split2@^4.0.0: 1480 | version "4.1.0" 1481 | resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" 1482 | integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== 1483 | 1484 | statuses@2.0.1: 1485 | version "2.0.1" 1486 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 1487 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 1488 | 1489 | "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: 1490 | version "4.2.3" 1491 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1492 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1493 | dependencies: 1494 | emoji-regex "^8.0.0" 1495 | is-fullwidth-code-point "^3.0.0" 1496 | strip-ansi "^6.0.1" 1497 | 1498 | string_decoder@^1.1.1: 1499 | version "1.3.0" 1500 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1501 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1502 | dependencies: 1503 | safe-buffer "~5.2.0" 1504 | 1505 | strip-ansi@^6.0.1: 1506 | version "6.0.1" 1507 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1508 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1509 | dependencies: 1510 | ansi-regex "^5.0.1" 1511 | 1512 | strip-bom@^3.0.0: 1513 | version "3.0.0" 1514 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1515 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 1516 | 1517 | strip-json-comments@^2.0.0: 1518 | version "2.0.1" 1519 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1520 | integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== 1521 | 1522 | strip-json-comments@^3.1.1: 1523 | version "3.1.1" 1524 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1525 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1526 | 1527 | supports-preserve-symlinks-flag@^1.0.0: 1528 | version "1.0.0" 1529 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1530 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1531 | 1532 | tar@^6.1.11: 1533 | version "6.1.11" 1534 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" 1535 | integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== 1536 | dependencies: 1537 | chownr "^2.0.0" 1538 | fs-minipass "^2.0.0" 1539 | minipass "^3.0.0" 1540 | minizlib "^2.1.1" 1541 | mkdirp "^1.0.3" 1542 | yallist "^4.0.0" 1543 | 1544 | thread-stream@^2.0.0: 1545 | version "2.0.0" 1546 | resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.0.0.tgz#1ecb450324ebb1bb284d4398b8af15cb6905028c" 1547 | integrity sha512-tnbzCbIrA4Khq5SJt/Fyz5DlE8pUnPR3//nWv+cqdRktvAl2NuC9O08HHq2Ifa10bhkvHLuzcesNjaH15EgTXA== 1548 | dependencies: 1549 | real-require "^0.1.0" 1550 | 1551 | to-regex-range@^5.0.1: 1552 | version "5.0.1" 1553 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1554 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1555 | dependencies: 1556 | is-number "^7.0.0" 1557 | 1558 | toidentifier@1.0.1: 1559 | version "1.0.1" 1560 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 1561 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1562 | 1563 | tr46@^3.0.0: 1564 | version "3.0.0" 1565 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" 1566 | integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== 1567 | dependencies: 1568 | punycode "^2.1.1" 1569 | 1570 | tr46@~0.0.3: 1571 | version "0.0.3" 1572 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1573 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1574 | 1575 | tree-kill@^1.2.2: 1576 | version "1.2.2" 1577 | resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" 1578 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== 1579 | 1580 | ts-node-dev@^2.0.0: 1581 | version "2.0.0" 1582 | resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-2.0.0.tgz#bdd53e17ab3b5d822ef519928dc6b4a7e0f13065" 1583 | integrity sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w== 1584 | dependencies: 1585 | chokidar "^3.5.1" 1586 | dynamic-dedupe "^0.3.0" 1587 | minimist "^1.2.6" 1588 | mkdirp "^1.0.4" 1589 | resolve "^1.0.0" 1590 | rimraf "^2.6.1" 1591 | source-map-support "^0.5.12" 1592 | tree-kill "^1.2.2" 1593 | ts-node "^10.4.0" 1594 | tsconfig "^7.0.0" 1595 | 1596 | ts-node@^10.4.0: 1597 | version "10.9.1" 1598 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" 1599 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== 1600 | dependencies: 1601 | "@cspotcode/source-map-support" "^0.8.0" 1602 | "@tsconfig/node10" "^1.0.7" 1603 | "@tsconfig/node12" "^1.0.7" 1604 | "@tsconfig/node14" "^1.0.0" 1605 | "@tsconfig/node16" "^1.0.2" 1606 | acorn "^8.4.1" 1607 | acorn-walk "^8.1.1" 1608 | arg "^4.1.0" 1609 | create-require "^1.1.0" 1610 | diff "^4.0.1" 1611 | make-error "^1.1.1" 1612 | v8-compile-cache-lib "^3.0.1" 1613 | yn "3.1.1" 1614 | 1615 | tsconfig@^7.0.0: 1616 | version "7.0.0" 1617 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" 1618 | integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== 1619 | dependencies: 1620 | "@types/strip-bom" "^3.0.0" 1621 | "@types/strip-json-comments" "0.0.30" 1622 | strip-bom "^3.0.0" 1623 | strip-json-comments "^2.0.0" 1624 | 1625 | type-is@~1.6.18: 1626 | version "1.6.18" 1627 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1628 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1629 | dependencies: 1630 | media-typer "0.3.0" 1631 | mime-types "~2.1.24" 1632 | 1633 | typescript@^4.7.4: 1634 | version "4.7.4" 1635 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 1636 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 1637 | 1638 | unpipe@1.0.0, unpipe@~1.0.0: 1639 | version "1.0.0" 1640 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1641 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 1642 | 1643 | util-deprecate@^1.0.1: 1644 | version "1.0.2" 1645 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1646 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1647 | 1648 | utils-merge@1.0.1: 1649 | version "1.0.1" 1650 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1651 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 1652 | 1653 | v8-compile-cache-lib@^3.0.1: 1654 | version "3.0.1" 1655 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 1656 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 1657 | 1658 | vary@^1, vary@~1.1.2: 1659 | version "1.1.2" 1660 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1661 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 1662 | 1663 | webidl-conversions@^3.0.0: 1664 | version "3.0.1" 1665 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1666 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1667 | 1668 | webidl-conversions@^7.0.0: 1669 | version "7.0.0" 1670 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" 1671 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== 1672 | 1673 | whatwg-url@^11.0.0: 1674 | version "11.0.0" 1675 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" 1676 | integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== 1677 | dependencies: 1678 | tr46 "^3.0.0" 1679 | webidl-conversions "^7.0.0" 1680 | 1681 | whatwg-url@^5.0.0: 1682 | version "5.0.0" 1683 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1684 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1685 | dependencies: 1686 | tr46 "~0.0.3" 1687 | webidl-conversions "^3.0.0" 1688 | 1689 | wide-align@^1.1.2: 1690 | version "1.1.5" 1691 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" 1692 | integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== 1693 | dependencies: 1694 | string-width "^1.0.2 || 2 || 3 || 4" 1695 | 1696 | wrappy@1: 1697 | version "1.0.2" 1698 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1699 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1700 | 1701 | xtend@^4.0.0: 1702 | version "4.0.2" 1703 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 1704 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 1705 | 1706 | yallist@^4.0.0: 1707 | version "4.0.0" 1708 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1709 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1710 | 1711 | yn@3.1.1: 1712 | version "3.1.1" 1713 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 1714 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1715 | 1716 | zod@^3.17.10: 1717 | version "3.17.10" 1718 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.17.10.tgz#8716a05e6869df6faaa878a44ffe3c79e615defb" 1719 | integrity sha512-IHXnQYQuOOOL/XgHhgl8YjNxBHi3xX0mVcHmqsvJgcxKkEczPshoWdxqyFwsARpf41E0v9U95WUROqsHHxt0UQ== 1720 | --------------------------------------------------------------------------------