├── .eslintignore ├── .npmrc ├── test ├── jest.setup.ts ├── jest-e2e.json └── app.e2e-spec.ts ├── src ├── database │ ├── schema │ │ ├── index.ts │ │ └── base.schema.ts │ ├── index.ts │ └── database.connection.ts ├── middleware │ ├── index.ts │ └── validate-body.middleware.ts ├── api │ ├── auth │ │ ├── dto │ │ │ ├── index.ts │ │ │ ├── refresh-token.dto.ts │ │ │ ├── signin.dto.ts │ │ │ └── register.dto.ts │ │ ├── schema │ │ │ ├── index.ts │ │ │ ├── refresh-token.schema.ts │ │ │ └── user.schema.ts │ │ ├── repository │ │ │ ├── index.ts │ │ │ ├── user.repository.ts │ │ │ └── refresh-token.repository.ts │ │ ├── strategy │ │ │ ├── index.ts │ │ │ ├── access-token.strategy.ts │ │ │ └── refresh-token.strategy.ts │ │ ├── auth.controller.ts │ │ └── auth.service.ts │ └── common │ │ ├── common.service.ts │ │ └── common.controller.ts ├── config │ ├── index.ts │ ├── jwt.config.ts │ ├── inversify.config.ts │ ├── exception.config.ts │ ├── server.config.ts │ └── logger.config.ts └── main.ts ├── tsconfig.build.json ├── .env.example ├── nodemon.json ├── .prettierrc ├── .gitignore ├── .eslintrc.json ├── LICENSE ├── package.json ├── README.md ├── tsconfig.json └── pnpm-lock.yaml /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | enable-pre-post-scripts=true -------------------------------------------------------------------------------- /test/jest.setup.ts: -------------------------------------------------------------------------------- 1 | import 'reflect-metadata'; 2 | -------------------------------------------------------------------------------- /src/database/schema/index.ts: -------------------------------------------------------------------------------- 1 | export * from './base.schema'; 2 | -------------------------------------------------------------------------------- /src/database/index.ts: -------------------------------------------------------------------------------- 1 | export * from './database.connection'; 2 | -------------------------------------------------------------------------------- /src/middleware/index.ts: -------------------------------------------------------------------------------- 1 | export * from './validate-body.middleware'; 2 | -------------------------------------------------------------------------------- /tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } -------------------------------------------------------------------------------- /src/api/auth/dto/index.ts: -------------------------------------------------------------------------------- 1 | export * from './register.dto'; 2 | export * from './signin.dto'; 3 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | DB_HOST= 2 | DB_PORT= 3 | DB_NAME= 4 | 5 | ACCESS_TOKEN_SECRET= 6 | REFRESH_TOKEN_SECRET= -------------------------------------------------------------------------------- /src/api/auth/schema/index.ts: -------------------------------------------------------------------------------- 1 | export * from './user.schema'; 2 | export * from './refresh-token.schema'; 3 | -------------------------------------------------------------------------------- /src/api/auth/repository/index.ts: -------------------------------------------------------------------------------- 1 | export * from './user.repository'; 2 | export * from './refresh-token.repository'; 3 | -------------------------------------------------------------------------------- /src/api/auth/strategy/index.ts: -------------------------------------------------------------------------------- 1 | export * from './access-token.strategy'; 2 | export * from './refresh-token.strategy'; 3 | -------------------------------------------------------------------------------- /nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": [ 3 | "src" 4 | ], 5 | "ext": ".ts", 6 | "ignore": [], 7 | "exec": "ts-node ./src/main.ts" 8 | } -------------------------------------------------------------------------------- /src/config/index.ts: -------------------------------------------------------------------------------- 1 | export * from './logger.config'; 2 | export * from './server.config'; 3 | export * from './inversify.config'; 4 | export * from './exception.config'; 5 | export * from './jwt.config'; 6 | -------------------------------------------------------------------------------- /src/api/auth/dto/refresh-token.dto.ts: -------------------------------------------------------------------------------- 1 | import { IsNotEmpty, IsString } from 'class-validator'; 2 | 3 | export class RefreshTokenDto { 4 | @IsString() 5 | @IsNotEmpty() 6 | refreshToken: string; 7 | } 8 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": [ 4 | "node_modules", 5 | "test", 6 | "dist", 7 | "**/*spec.ts" 8 | ], 9 | "singleQuote": true 10 | } -------------------------------------------------------------------------------- /src/api/common/common.service.ts: -------------------------------------------------------------------------------- 1 | import { injectable } from 'inversify'; 2 | 3 | @injectable() 4 | export class CommonService { 5 | public getGreetings(): { message: string } { 6 | return { 7 | message: 'Express TS', 8 | }; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/api/auth/dto/signin.dto.ts: -------------------------------------------------------------------------------- 1 | import { IsEmail, IsNotEmpty, IsString } from 'class-validator'; 2 | 3 | export class SigninDto { 4 | @IsEmail() 5 | @IsNotEmpty() 6 | email: string; 7 | 8 | @IsString() 9 | @IsNotEmpty() 10 | password: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/database/schema/base.schema.ts: -------------------------------------------------------------------------------- 1 | import { Transform } from 'class-transformer'; 2 | 3 | export class BaseSchema { 4 | @Transform((value) => { 5 | if ('value' in value) { 6 | return value.obj[value.key].toString(); 7 | } 8 | 9 | return 'unknown value'; 10 | }) 11 | public readonly _id: string; 12 | 13 | public readonly __v: number; 14 | } 15 | -------------------------------------------------------------------------------- /test/jest-e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": [ 3 | "js", 4 | "json", 5 | "ts" 6 | ], 7 | "rootDir": ".", 8 | "setupFilesAfterEnv": [ 9 | "/jest.setup.ts" 10 | ], 11 | "testEnvironment": "node", 12 | "testPathIgnorePatterns": [ 13 | "node_modules" 14 | ], 15 | "testRegex": ".e2e-spec.ts$", 16 | "transform": { 17 | "^.+\\.ts$": "ts-jest" 18 | } 19 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # compiled output 2 | /dist 3 | /node_modules 4 | 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | pnpm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | lerna-debug.log* 13 | 14 | # OS 15 | .DS_Store 16 | 17 | # IDE - VSCode 18 | .vscode/* 19 | !.vscode/settings.json 20 | !.vscode/tasks.json 21 | !.vscode/launch.json 22 | !.vscode/extensions.json 23 | 24 | # Environment variables 25 | .env 26 | .env.test -------------------------------------------------------------------------------- /src/config/jwt.config.ts: -------------------------------------------------------------------------------- 1 | export type JwtConfig = { 2 | secret: string; 3 | expiresIn: string; 4 | }; 5 | 6 | export type Payload = { 7 | sub: string; 8 | email: string; 9 | }; 10 | 11 | export const accessTokenConfig: JwtConfig = { 12 | secret: process.env.ACCESS_TOKEN_SECRET, 13 | expiresIn: '10m', 14 | }; 15 | 16 | export const refreshTokenConfig: JwtConfig = { 17 | secret: process.env.REFRESH_TOKEN_SECRET, 18 | expiresIn: '60d', 19 | }; 20 | -------------------------------------------------------------------------------- /src/config/inversify.config.ts: -------------------------------------------------------------------------------- 1 | import { Container } from 'inversify'; 2 | import { RefreshTokenModel, UserModel } from '../api/auth/schema'; 3 | 4 | import '../api/common/common.controller'; 5 | import '../api/auth/auth.controller'; 6 | 7 | export const container = new Container({ autoBindInjectable: true }); 8 | 9 | container.bind(UserModel).toConstantValue(UserModel.getModel()); 10 | container.bind(RefreshTokenModel).toConstantValue(RefreshTokenModel.getModel()); 11 | -------------------------------------------------------------------------------- /src/api/auth/dto/register.dto.ts: -------------------------------------------------------------------------------- 1 | import { 2 | IsEmail, 3 | IsNotEmpty, 4 | IsString, 5 | IsStrongPassword, 6 | } from 'class-validator'; 7 | 8 | export class RegisterDto { 9 | @IsString() 10 | @IsNotEmpty() 11 | name: string; 12 | 13 | @IsEmail() 14 | @IsNotEmpty() 15 | email: string; 16 | 17 | @IsString() 18 | @IsNotEmpty() 19 | @IsStrongPassword({ 20 | minLength: 6, 21 | minLowercase: 1, 22 | minUppercase: 1, 23 | minNumbers: 1, 24 | minSymbols: 1, 25 | }) 26 | password: string; 27 | } 28 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import 'dotenv/config'; 2 | import 'reflect-metadata'; 3 | import { InversifyExpressServer } from 'inversify-express-utils'; 4 | import { Logger, serverConfig, container, serverErrorConfig } from './config'; 5 | 6 | export async function Bootstrap() { 7 | const server = new InversifyExpressServer(container); 8 | server.setConfig(serverConfig); 9 | server.setErrorConfig(serverErrorConfig); 10 | 11 | const app = server.build(); 12 | app.listen(3000, () => 13 | new Logger().info('Server up on http://127.0.0.1:3000/') 14 | ); 15 | } 16 | 17 | Bootstrap(); 18 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es2021": true 5 | }, 6 | "extends": [ 7 | "eslint:recommended", 8 | "plugin:@typescript-eslint/recommended" 9 | ], 10 | "parser": "@typescript-eslint/parser", 11 | "parserOptions": { 12 | "ecmaVersion": "latest", 13 | "sourceType": "module" 14 | }, 15 | "plugins": [ 16 | "@typescript-eslint" 17 | ], 18 | "rules": { 19 | "@typescript-eslint/interface-name-prefix": "off", 20 | "@typescript-eslint/explicit-function-return-type": "off", 21 | "@typescript-eslint/explicit-module-boundary-types": "off", 22 | "@typescript-eslint/no-explicit-any": "off", 23 | "no-console": "error" 24 | } 25 | } -------------------------------------------------------------------------------- /src/api/common/common.controller.ts: -------------------------------------------------------------------------------- 1 | import { inject } from 'inversify'; 2 | import { 3 | BaseHttpController, 4 | controller, 5 | httpGet, 6 | httpMethod, 7 | } from 'inversify-express-utils'; 8 | import { CommonService } from './common.service'; 9 | import { NotFoundException } from '../../config'; 10 | 11 | @controller('/') 12 | export class CommonController extends BaseHttpController { 13 | constructor( 14 | @inject(CommonService) private readonly commonService: CommonService 15 | ) { 16 | super(); 17 | } 18 | 19 | @httpGet('/') 20 | public getGreetings(): { message: string } { 21 | return this.commonService.getGreetings(); 22 | } 23 | 24 | @httpMethod('all', '*') 25 | public getNotFound(): string { 26 | throw new NotFoundException('Endpoint not found'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/middleware/validate-body.middleware.ts: -------------------------------------------------------------------------------- 1 | import { NextFunction, Request, Response } from 'express'; 2 | import { ClassConstructor, plainToClass } from 'class-transformer'; 3 | import { validate } from 'class-validator'; 4 | import { sanitize } from 'class-sanitizer'; 5 | import { ValidationException } from '../config'; 6 | 7 | export function validateBody( 8 | dto: ClassConstructor, 9 | skipMissingProperties = false 10 | ) { 11 | return async (req: Request, _res: Response, next: NextFunction) => { 12 | const dtoObj = plainToClass(dto, req.body); 13 | const errors = await validate(dtoObj, { skipMissingProperties }); 14 | 15 | if (errors.length > 0) { 16 | const errorMessages = errors 17 | .map((error) => Object.values(error.constraints)) 18 | .flat(); 19 | return next(new ValidationException(errorMessages.join(', '))); 20 | } 21 | 22 | sanitize(dtoObj); 23 | req.body = dtoObj; 24 | next(); 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /src/api/auth/repository/user.repository.ts: -------------------------------------------------------------------------------- 1 | import { inject, injectable } from 'inversify'; 2 | import { IUser, IUserDoc, UserModel, UserSchema } from '../schema'; 3 | import { Model } from 'mongoose'; 4 | import { ForbiddenException } from '../../../config'; 5 | 6 | @injectable() 7 | export class UserRepository { 8 | constructor( 9 | @inject(UserModel) 10 | private readonly userModel: Model 11 | ) {} 12 | 13 | async createUser(user: IUser): Promise { 14 | try { 15 | return await new this.userModel(user).save(); 16 | } catch (error) { 17 | if (error.code === 11000) { 18 | throw new ForbiddenException(`Email ${user.email} is already in use`); 19 | } 20 | 21 | throw error; 22 | } 23 | } 24 | 25 | async findById(id: string): Promise { 26 | return await this.userModel.findById(id); 27 | } 28 | 29 | async findUserByEmail(email: string): Promise { 30 | return await this.userModel.findOne({ email }); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/api/auth/strategy/access-token.strategy.ts: -------------------------------------------------------------------------------- 1 | import { inject, injectable } from 'inversify'; 2 | import passport from 'passport'; 3 | import { ExtractJwt, Strategy, VerifiedCallback } from 'passport-jwt'; 4 | import { Payload, accessTokenConfig } from '../../../config'; 5 | import { UserRepository } from '../repository'; 6 | 7 | @injectable() 8 | export class AccessTokenStrategy { 9 | constructor( 10 | @inject(UserRepository) private readonly userRepo: UserRepository 11 | ) {} 12 | 13 | public init() { 14 | passport.use( 15 | 'access-jwt', 16 | new Strategy( 17 | { 18 | jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), 19 | secretOrKey: accessTokenConfig.secret, 20 | }, 21 | async (payload: Payload, done: VerifiedCallback) => { 22 | const user = await this.userRepo.findById(payload.sub); 23 | 24 | if (!user) { 25 | return done(null, false); 26 | } 27 | 28 | return done(null, user); 29 | } 30 | ) 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/api/auth/strategy/refresh-token.strategy.ts: -------------------------------------------------------------------------------- 1 | import { inject, injectable } from 'inversify'; 2 | import passport from 'passport'; 3 | import { ExtractJwt, Strategy, VerifiedCallback } from 'passport-jwt'; 4 | import { Payload, refreshTokenConfig } from '../../../config'; 5 | import { UserRepository } from '../repository'; 6 | 7 | @injectable() 8 | export class RefreshTokenStrategy { 9 | constructor( 10 | @inject(UserRepository) private readonly userRepo: UserRepository 11 | ) {} 12 | 13 | public init() { 14 | passport.use( 15 | 'refresh-jwt', 16 | new Strategy( 17 | { 18 | jwtFromRequest: ExtractJwt.fromBodyField('refreshToken'), 19 | secretOrKey: refreshTokenConfig.secret, 20 | }, 21 | async (payload: Payload, done: VerifiedCallback) => { 22 | const user = await this.userRepo.findById(payload.sub); 23 | 24 | if (!user) { 25 | return done(null, false); 26 | } 27 | 28 | return done(null, user); 29 | } 30 | ) 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Vishnu C Prasad 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/database/database.connection.ts: -------------------------------------------------------------------------------- 1 | import { connect, connection } from 'mongoose'; 2 | import { Logger } from '../config'; 3 | import { injectable } from 'inversify'; 4 | 5 | @injectable() 6 | export class DatabaseConnection { 7 | private readonly logger: Logger = new Logger(DatabaseConnection.name); 8 | 9 | public async initConnection(): Promise { 10 | process.env.DB_CONN_STR = `mongodb://${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.DB_NAME}`; 11 | await this.connect(process.env.DB_CONN_STR); 12 | } 13 | 14 | public async connect(connectionString: string): Promise { 15 | connect(connectionString); 16 | 17 | connection.on('connected', () => { 18 | this.logger.info(`mongoose connected to ${connectionString}`); 19 | }); 20 | 21 | connection.on('error', (err) => { 22 | this.logger.error(`mongoose connection error: ${err}`); 23 | }); 24 | } 25 | 26 | public setAutoReconnect(): void { 27 | connection.on('disconnected', () => { 28 | this.logger.error('mongoose disconnected trying to reconnect...'); 29 | this.connect(process.env.DB_CONN_STR); 30 | }); 31 | } 32 | 33 | public async disconnect(): Promise { 34 | await connection.close(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/api/auth/schema/refresh-token.schema.ts: -------------------------------------------------------------------------------- 1 | import { Prop, getModelForClass, modelOptions } from '@typegoose/typegoose'; 2 | import { Document, Model, SchemaOptions } from 'mongoose'; 3 | import { ObjectId } from 'mongodb'; 4 | import { BaseSchema } from '../../../database/schema'; 5 | 6 | export interface IRefreshToken { 7 | user: string; 8 | token: string; 9 | } 10 | 11 | export interface IRefreshTokenDoc extends Document { 12 | _id: string; 13 | user: string; 14 | token: string; 15 | } 16 | 17 | const schemaOptions: SchemaOptions = { 18 | collection: 'refreshtokens', 19 | versionKey: false, 20 | }; 21 | 22 | @modelOptions({ schemaOptions }) 23 | export class RefreshTokenSchema extends BaseSchema { 24 | @Prop({ 25 | required: true, 26 | unique: true, 27 | }) 28 | public user: ObjectId; 29 | 30 | @Prop({ 31 | required: true, 32 | }) 33 | public token: string; 34 | } 35 | 36 | export class RefreshTokenModel { 37 | public static model: Model; 38 | 39 | private constructor() {} 40 | 41 | public static getModel(): Model { 42 | if (!RefreshTokenModel.model) { 43 | RefreshTokenModel.model = getModelForClass(RefreshTokenSchema); 44 | } 45 | 46 | return RefreshTokenModel.model; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/config/exception.config.ts: -------------------------------------------------------------------------------- 1 | export class BaseException extends Error { 2 | public type: string; 3 | public statusCode: number; 4 | public errorMessage: string; 5 | 6 | constructor(type: string, statusCode: number, errorMessage: string) { 7 | super(errorMessage); 8 | this.type = type; 9 | this.statusCode = statusCode; 10 | this.errorMessage = errorMessage; 11 | } 12 | } 13 | 14 | export class InternalServerException extends BaseException { 15 | constructor(message: string) { 16 | super('Internal Server Error', 500, message); 17 | } 18 | } 19 | 20 | export class NotFoundException extends BaseException { 21 | constructor(message: string) { 22 | super('Not found', 404, message); 23 | } 24 | } 25 | 26 | export class BadRequestException extends BaseException { 27 | constructor(message: string) { 28 | super('Bad Request', 400, message); 29 | } 30 | } 31 | 32 | export class UnauthorizedException extends BaseException { 33 | constructor(message: string) { 34 | super('Unauthorized', 401, message); 35 | } 36 | } 37 | 38 | export class ForbiddenException extends BaseException { 39 | constructor(message: string) { 40 | super('Forbidden', 403, message); 41 | } 42 | } 43 | 44 | export class ValidationException extends BaseException { 45 | constructor(message: string) { 46 | super('Validation Error', 400, message); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/api/auth/schema/user.schema.ts: -------------------------------------------------------------------------------- 1 | import { Prop, getModelForClass, modelOptions } from '@typegoose/typegoose'; 2 | import { Document, Model, SchemaOptions } from 'mongoose'; 3 | import { BaseSchema } from '../../../database/schema'; 4 | 5 | export interface IUser { 6 | name: string; 7 | email: string; 8 | password: string; 9 | } 10 | 11 | export interface IUserDoc extends Document { 12 | _id: string; 13 | name: string; 14 | email: string; 15 | password: string; 16 | } 17 | 18 | const schemaOptions: SchemaOptions = { 19 | collection: 'users', 20 | versionKey: false, 21 | toJSON: { 22 | transform: (_doc, ret) => { 23 | delete ret.password; 24 | }, 25 | }, 26 | }; 27 | 28 | @modelOptions({ schemaOptions }) 29 | export class UserSchema extends BaseSchema { 30 | @Prop({ 31 | required: true, 32 | }) 33 | public name: string; 34 | 35 | @Prop({ 36 | required: true, 37 | unique: true, 38 | }) 39 | public email: string; 40 | 41 | @Prop({ 42 | required: true, 43 | }) 44 | public password: string; 45 | } 46 | 47 | export class UserModel { 48 | public static model: Model; 49 | 50 | private constructor() {} 51 | 52 | public static getModel(): Model { 53 | if (!UserModel.model) { 54 | UserModel.model = getModelForClass(UserSchema); 55 | } 56 | 57 | return UserModel.model; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/config/server.config.ts: -------------------------------------------------------------------------------- 1 | import { json, urlencoded } from 'body-parser'; 2 | import { Application, NextFunction, Request, Response } from 'express'; 3 | import { BaseException, InternalServerException } from './exception.config'; 4 | import passport from 'passport'; 5 | import { DatabaseConnection } from '../database'; 6 | import { 7 | AccessTokenStrategy, 8 | RefreshTokenStrategy, 9 | } from '../api/auth/strategy'; 10 | import { container } from './inversify.config'; 11 | 12 | export async function serverConfig(app: Application) { 13 | app.use( 14 | urlencoded({ 15 | extended: true, 16 | }) 17 | ); 18 | app.use(json()); 19 | 20 | app.use(passport.initialize()); 21 | const accessTokenStrategy = container.get(AccessTokenStrategy); 22 | accessTokenStrategy.init(); 23 | const refreshTokenStrategy = container.get(RefreshTokenStrategy); 24 | refreshTokenStrategy.init(); 25 | 26 | const database = container.get(DatabaseConnection); 27 | await database.initConnection(); 28 | database.setAutoReconnect(); 29 | } 30 | 31 | export function serverErrorConfig(app: Application) { 32 | app.use((err: Error, _req: Request, res: Response, next: NextFunction) => { 33 | if (err && err instanceof BaseException) { 34 | return res.status(err.statusCode).json(err); 35 | } 36 | 37 | if (err) { 38 | return res.status(500).json(new InternalServerException(err.message)); 39 | } 40 | 41 | next(); 42 | }); 43 | } 44 | -------------------------------------------------------------------------------- /src/api/auth/repository/refresh-token.repository.ts: -------------------------------------------------------------------------------- 1 | import { inject, injectable } from 'inversify'; 2 | import { 3 | IRefreshToken, 4 | IRefreshTokenDoc, 5 | RefreshTokenModel, 6 | RefreshTokenSchema, 7 | } from '../schema'; 8 | import { Model } from 'mongoose'; 9 | import { ForbiddenException } from '../../../config'; 10 | 11 | @injectable() 12 | export class RefreshTokenRepository { 13 | constructor( 14 | @inject(RefreshTokenModel) 15 | private readonly refreshTokenModel: Model 16 | ) {} 17 | 18 | async create(refreshToken: IRefreshToken): Promise { 19 | try { 20 | const newRefreshToken = new this.refreshTokenModel(refreshToken); 21 | await newRefreshToken.save(); 22 | } catch (error) { 23 | if (error.code === 11000) { 24 | throw new ForbiddenException( 25 | 'A refresh token already exists for this user' 26 | ); 27 | } 28 | 29 | throw error; 30 | } 31 | } 32 | 33 | async findByUserId(userId: string): Promise { 34 | return await this.refreshTokenModel.findOne({ 35 | user: userId, 36 | }); 37 | } 38 | 39 | async findByToken(token: string): Promise { 40 | return await this.refreshTokenModel.findOne({ token }); 41 | } 42 | 43 | async findByIdAndUpdate( 44 | userId: string, 45 | patch: Partial 46 | ): Promise { 47 | await this.refreshTokenModel.findByIdAndUpdate(userId, patch); 48 | } 49 | 50 | async findByUserIdAndDelete(userId: string): Promise { 51 | await this.refreshTokenModel.findOneAndDelete({ user: userId }); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/api/auth/auth.controller.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BaseHttpController, 3 | controller, 4 | httpDelete, 5 | httpGet, 6 | httpPost, 7 | request, 8 | requestBody, 9 | } from 'inversify-express-utils'; 10 | import { inject } from 'inversify'; 11 | import { RegisterDto, SigninDto } from './dto'; 12 | import { validateBody } from '../../middleware'; 13 | import { AuthService } from './auth.service'; 14 | import passport from 'passport'; 15 | import { Request } from 'express'; 16 | import { RefreshTokenDto } from './dto/refresh-token.dto'; 17 | import { IUserDoc } from './schema'; 18 | 19 | @controller('/auth') 20 | export class AuthController extends BaseHttpController { 21 | constructor(@inject(AuthService) private readonly authService: AuthService) { 22 | super(); 23 | } 24 | 25 | @httpPost('/register', validateBody(RegisterDto)) 26 | register(@requestBody() dto: RegisterDto) { 27 | return this.authService.register(dto); 28 | } 29 | 30 | @httpPost('/signin', validateBody(SigninDto)) 31 | signin(@requestBody() dto: SigninDto) { 32 | return this.authService.signin(dto); 33 | } 34 | 35 | @httpGet('/', passport.authenticate('access-jwt', { session: false })) 36 | getUser(@request() req: Request) { 37 | return req.user; 38 | } 39 | 40 | @httpPost( 41 | '/refresh', 42 | validateBody(RefreshTokenDto), 43 | passport.authenticate('refresh-jwt', { session: false }) 44 | ) 45 | refreshToken(@requestBody() dto: RefreshTokenDto, @request() req: Request) { 46 | return this.authService.refreshToken(dto, req.user as IUserDoc); 47 | } 48 | 49 | @httpDelete( 50 | '/signout', 51 | passport.authenticate('access-jwt', { session: false }) 52 | ) 53 | signout(@request() req: Request) { 54 | return this.authService.signout((req.user as IUserDoc)._id); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express_ts", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "./dist/main.js", 6 | "scripts": { 7 | "lint": "eslint . --ext .ts --quiet", 8 | "lintfix": "eslint . --ext .ts --fix", 9 | "prebuild": "pnpm lint", 10 | "build": "npx tsc", 11 | "prestart": "pnpm build", 12 | "start": "node dist/main.js", 13 | "prestart:dev": "pnpm lint", 14 | "start:dev": "nodemon", 15 | "test": "dotenv -e .env.test -- jest --config ./test/jest-e2e.json --watch --detectOpenHandles" 16 | }, 17 | "keywords": [], 18 | "author": "", 19 | "license": "ISC", 20 | "dependencies": { 21 | "@typegoose/typegoose": "^11.4.0", 22 | "argon2": "^0.30.3", 23 | "body-parser": "^1.20.2", 24 | "class-sanitizer": "^1.0.1", 25 | "class-transformer": "^0.5.1", 26 | "class-validator": "^0.14.0", 27 | "express": "^4.18.2", 28 | "inversify": "^6.0.1", 29 | "inversify-express-utils": "^6.4.3", 30 | "jsonwebtoken": "^9.0.1", 31 | "mongodb": "^5.7.0", 32 | "mongoose": "^7.4.0", 33 | "passport": "^0.6.0", 34 | "passport-jwt": "^4.0.1", 35 | "reflect-metadata": "^0.1.13", 36 | "winston": "^3.10.0" 37 | }, 38 | "devDependencies": { 39 | "@types/body-parser": "^1.19.2", 40 | "@types/express": "^4.17.17", 41 | "@types/jest": "^29.5.3", 42 | "@types/jsonwebtoken": "^9.0.2", 43 | "@types/node": "^20.4.2", 44 | "@types/passport": "^1.0.12", 45 | "@types/passport-jwt": "^3.0.9", 46 | "@types/supertest": "^2.0.12", 47 | "@typescript-eslint/eslint-plugin": "^6.1.0", 48 | "@typescript-eslint/parser": "^6.1.0", 49 | "dotenv": "^16.3.1", 50 | "dotenv-cli": "^7.2.1", 51 | "eslint": "^8.45.0", 52 | "jest": "^29.6.1", 53 | "nodemon": "^3.0.1", 54 | "supertest": "^6.3.3", 55 | "ts-jest": "^29.1.1", 56 | "ts-node": "^10.9.1", 57 | "typescript": "^5.1.6" 58 | } 59 | } -------------------------------------------------------------------------------- /src/config/logger.config.ts: -------------------------------------------------------------------------------- 1 | import { injectable } from 'inversify'; 2 | import { format, createLogger, transports, LogCallback } from 'winston'; 3 | 4 | const { colorize, combine, json, label, printf, timestamp } = format; 5 | 6 | @injectable() 7 | export class Logger { 8 | constructor(private readonly loggerLabel: string = 'ExpressApplication') {} 9 | 10 | private readonly consoleTransport = new transports.Console({ 11 | format: combine( 12 | colorize({ 13 | all: true, 14 | colors: { 15 | info: 'bold blue', // fontStyle color 16 | warn: 'italic yellow', 17 | error: 'bold red', 18 | debug: 'green', 19 | }, 20 | }) 21 | ), 22 | }); 23 | private readonly debugFileTransport = new transports.File({ 24 | filename: 'logs/debug.log', 25 | format: combine(json()), 26 | }); 27 | private readonly exceptionFileTransport = new transports.File({ 28 | filename: 'logs/exceptions.log', 29 | format: combine(json()), 30 | }); 31 | 32 | private logger = createLogger({ 33 | level: 'debug', 34 | format: combine( 35 | label({ label: `[${this.loggerLabel}]` }), 36 | timestamp({ 37 | format: 'MMM-DD-YYYY HH:mm:ss', 38 | }), 39 | printf(function (info) { 40 | return `\x1B[33m\x1B[3[${info.label}\x1B[23m\x1B[39m \x1B[32m${info.timestamp}\x1B[39m ${info.level} : ${info.message}`; 41 | }) 42 | ), 43 | transports: [this.consoleTransport, this.debugFileTransport], 44 | exceptionHandlers: [this.consoleTransport, this.exceptionFileTransport], 45 | }); 46 | 47 | public info(message: any, callback?: LogCallback) { 48 | this.logger.info(message, callback); 49 | } 50 | 51 | public warn(message: any, callback?: LogCallback) { 52 | this.logger.warn(message, callback); 53 | } 54 | 55 | public error(message: any, callback?: LogCallback) { 56 | this.logger.error(message, callback); 57 | } 58 | 59 | public debug(message: any, callback?: LogCallback) { 60 | this.logger.debug(message, callback); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Express TS 2 | 3 | Express TS is a robust and scalable web server that harnesses the power of the popular Express.js framework, the flexibility of TypeScript, and the dependency injection capabilities of Inversify. 4 | 5 | ## Installation 6 | 7 | To install Express TS, follow these steps: 8 | 9 | 1. Clone the repository: 10 | 11 | ```bash 12 | git clone https://github.com/vishnucprasad/express_ts.git 13 | ``` 14 | 15 | 2. Navigate to the project directory: 16 | 17 | ```bash 18 | cd express-ts 19 | ``` 20 | 21 | 3. Install dependencies using pnpm: 22 | ```bash 23 | pnpm install 24 | ``` 25 | 26 | ## Running the Server 27 | 28 | To run the server, execute the following command: 29 | 30 | ```bash 31 | pnpm start 32 | ``` 33 | 34 | This will start the server using TypeScript and automatically transpile the code into JavaScript. The server will then be accessible at `http://localhost:3000`. 35 | 36 | ### Development Mode 37 | 38 | To run the server in development mode, use the following command: 39 | 40 | ```bash 41 | pnpm start:dev 42 | ``` 43 | 44 | This will start the server using nodemon, which automatically restarts the server when changes are detected in the code. 45 | 46 | ## Usage 47 | 48 | Express TS provides a flexible and scalable architecture for building web applications. Here are some key features: 49 | 50 | - **Express.js Framework**: Leveraging the robustness and simplicity of Express.js, Express TS provides a solid foundation for building web servers. 51 | - **TypeScript Support**: With TypeScript, developers can write cleaner and more maintainable code by leveraging static typing and modern ECMAScript features. 52 | - **Dependency Injection with Inversify**: Express TS utilizes Inversify for managing dependencies, making it easy to inject dependencies into controllers, services, and other components. 53 | 54 | ## Scripts 55 | 56 | - `lint`: Runs ESLint to lint TypeScript files. 57 | - `lintfix`: Runs ESLint with the `--fix` flag to automatically fix linting issues. 58 | - `build`: Transpiles TypeScript files into JavaScript using TypeScript compiler. 59 | - `start`: Starts the server by running the main JavaScript file located in the `dist` directory. 60 | - `start:dev`: Starts the server in development mode using nodemon for automatic restarts. 61 | - `test`: Runs tests using Jest with the configuration specified in `jest-e2e.json` file. 62 | 63 | ## Contributing 64 | 65 | Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests to help improve Express TS. 66 | 67 | ## License 68 | 69 | This project is licensed under the MIT License - see the [LICENSE](https://github.com/vishnucprasad/express_ts/blob/78b414bfe883b92f19495f71e5493427ae3c0afc/LICENSE) file for details. 70 | -------------------------------------------------------------------------------- /src/api/auth/auth.service.ts: -------------------------------------------------------------------------------- 1 | import { inject, injectable } from 'inversify'; 2 | import { RegisterDto, SigninDto } from './dto'; 3 | import { RefreshTokenRepository, UserRepository } from './repository'; 4 | import * as argon from 'argon2'; 5 | import jwt from 'jsonwebtoken'; 6 | import { 7 | JwtConfig, 8 | NotFoundException, 9 | Payload, 10 | UnauthorizedException, 11 | accessTokenConfig, 12 | refreshTokenConfig, 13 | } from '../../config'; 14 | import { IRefreshToken, IUserDoc } from './schema'; 15 | import { RefreshTokenDto } from './dto/refresh-token.dto'; 16 | 17 | @injectable() 18 | export class AuthService { 19 | constructor( 20 | @inject(UserRepository) private readonly userRepo: UserRepository, 21 | @inject(RefreshTokenRepository) 22 | private readonly refreshTokenRepo: RefreshTokenRepository 23 | ) {} 24 | 25 | async register(dto: RegisterDto) { 26 | dto.password = await argon.hash(dto.password); 27 | return await this.userRepo.createUser(dto); 28 | } 29 | 30 | async signin(dto: SigninDto): Promise<{ 31 | access_token: string; 32 | refresh_token: string; 33 | }> { 34 | const user = await this.userRepo.findUserByEmail(dto.email); 35 | 36 | if (!user) throw new NotFoundException('User not found'); 37 | 38 | const checkPassword = await argon.verify(user.password, dto.password); 39 | 40 | if (!checkPassword) throw new UnauthorizedException('Invalid password'); 41 | 42 | const payload: Payload = { 43 | sub: user._id, 44 | email: user.email, 45 | }; 46 | 47 | const accessToken = this.generateJWT(payload, accessTokenConfig); 48 | const refreshToken = this.generateJWT(payload, refreshTokenConfig); 49 | 50 | const doc = await this.refreshTokenRepo.findByUserId(user._id); 51 | 52 | if (doc) { 53 | await this.refreshTokenRepo.findByIdAndUpdate(doc._id, { 54 | token: refreshToken, 55 | } as Partial); 56 | 57 | return { 58 | access_token: accessToken, 59 | refresh_token: refreshToken, 60 | }; 61 | } 62 | 63 | await this.refreshTokenRepo.create({ 64 | user: user._id, 65 | token: refreshToken, 66 | }); 67 | 68 | return { 69 | access_token: accessToken, 70 | refresh_token: refreshToken, 71 | }; 72 | } 73 | 74 | generateJWT(payload: Payload, config: JwtConfig) { 75 | return jwt.sign(payload, config.secret, { 76 | expiresIn: config.expiresIn, 77 | }); 78 | } 79 | 80 | async refreshToken( 81 | dto: RefreshTokenDto, 82 | user: IUserDoc 83 | ): Promise<{ access_token: string }> { 84 | const refreshToken = await this.refreshTokenRepo.findByToken( 85 | dto.refreshToken 86 | ); 87 | 88 | if (!refreshToken) { 89 | throw new UnauthorizedException('Unauthorized'); 90 | } 91 | 92 | const payload: Payload = { 93 | sub: user._id, 94 | email: user.email, 95 | }; 96 | 97 | const accessToken = await this.generateJWT(payload, accessTokenConfig); 98 | 99 | return { 100 | access_token: accessToken, 101 | }; 102 | } 103 | 104 | async signout(userId: string) { 105 | return await this.refreshTokenRepo.findByUserIdAndDelete(userId); 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /test/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { InversifyExpressServer } from 'inversify-express-utils'; 2 | import { Application } from 'express'; 3 | import request from 'supertest'; 4 | import { connection } from 'mongoose'; 5 | import { container, serverConfig, serverErrorConfig } from '../src/config'; 6 | import { RegisterDto, SigninDto } from '../src/api/auth/dto'; 7 | 8 | import '../src/api/auth/auth.controller'; 9 | import { RefreshTokenDto } from '../src/api/auth/dto/refresh-token.dto'; 10 | 11 | let app: Application; 12 | let testServer: any; 13 | const store: Record = {}; 14 | 15 | beforeAll(async () => { 16 | const server = new InversifyExpressServer(container); 17 | server.setConfig(serverConfig); 18 | server.setErrorConfig(serverErrorConfig); 19 | 20 | app = server.build(); 21 | testServer = app.listen(3001); 22 | }); 23 | 24 | afterAll(() => { 25 | connection.collection('users').deleteMany(); 26 | connection.collection('refreshtokens').deleteMany(); 27 | 28 | if (testServer) { 29 | testServer.close(); 30 | } 31 | }); 32 | 33 | // common controller 34 | describe('GET /', () => { 35 | it('should retrun a greetings message', async () => { 36 | const response = await request(app).get('/'); 37 | expect(response.status).toBe(200); 38 | expect(response.body['message']).toBe('Express TS'); 39 | }); 40 | }); 41 | 42 | describe('NOT_FOUND', () => { 43 | it('should return a not found message', async () => { 44 | const response = await request(app).get('/unknown'); 45 | expect(response.status).toBe(404); 46 | }); 47 | }); 48 | 49 | // auth controller 50 | describe('POST /auth/register', () => { 51 | it('should throw an error if body not provided ', async () => { 52 | const response = await request(app).post('/auth/register'); 53 | expect(response.status).toBe(400); 54 | expect(response.body['type']).toBe('Validation Error'); 55 | }); 56 | 57 | it('should throw an error if name is empty', async () => { 58 | const dto: Omit = { 59 | email: 'johndoe@example.com', 60 | password: 'JohnDoe@123', 61 | }; 62 | 63 | const response = await request(app).post('/auth/register').send(dto); 64 | expect(response.status).toBe(400); 65 | expect(response.body['type']).toBe('Validation Error'); 66 | }); 67 | 68 | it('should throw an error if email is empty', async () => { 69 | const dto: Omit = { 70 | name: 'John Doe', 71 | password: 'JohnDoe@123', 72 | }; 73 | 74 | const response = await request(app).post('/auth/register').send(dto); 75 | expect(response.status).toBe(400); 76 | expect(response.body['type']).toBe('Validation Error'); 77 | }); 78 | 79 | it('should throw an error if password is empty', async () => { 80 | const dto: Omit = { 81 | name: 'John Doe', 82 | email: 'johndoe@example.com', 83 | }; 84 | 85 | const response = await request(app).post('/auth/register').send(dto); 86 | expect(response.status).toBe(400); 87 | expect(response.body['type']).toBe('Validation Error'); 88 | }); 89 | 90 | it('should throw an error if password is not strong enough', async () => { 91 | const dto: RegisterDto = { 92 | name: 'John Doe', 93 | email: 'johndoe@example.com', 94 | password: '12345', 95 | }; 96 | 97 | const response = await request(app).post('/auth/register').send(dto); 98 | expect(response.status).toBe(400); 99 | expect(response.body['type']).toBe('Validation Error'); 100 | }); 101 | 102 | it('should register user', async () => { 103 | const dto: RegisterDto = { 104 | name: 'John Doe', 105 | email: 'johndoe@example.com', 106 | password: 'JohnDoe@123', 107 | }; 108 | 109 | const response = await request(app).post('/auth/register').send(dto); 110 | expect(response.status).toBe(200); 111 | const body = JSON.stringify(response.body); 112 | expect(body).toContain(dto.name); 113 | expect(body).toContain(dto.email); 114 | }); 115 | }); 116 | 117 | describe('POST /auth/signin', () => { 118 | it('should throw an error if body not provided ', async () => { 119 | const response = await request(app).post('/auth/signin'); 120 | expect(response.status).toBe(400); 121 | expect(response.body['type']).toBe('Validation Error'); 122 | }); 123 | 124 | it('should throw an error if email is empty', async () => { 125 | const dto: Omit = { 126 | password: 'JohnDoe@123', 127 | }; 128 | 129 | const response = await request(app).post('/auth/signin').send(dto); 130 | expect(response.status).toBe(400); 131 | expect(response.body['type']).toBe('Validation Error'); 132 | }); 133 | 134 | it('should throw an error if password is empty', async () => { 135 | const dto: Omit = { 136 | email: 'johndoe@example.com', 137 | }; 138 | 139 | const response = await request(app).post('/auth/signin').send(dto); 140 | expect(response.status).toBe(400); 141 | expect(response.body['type']).toBe('Validation Error'); 142 | }); 143 | 144 | it('should throw an error if email is invalid', async () => { 145 | const dto: SigninDto = { 146 | email: 'invaliduser@invalid.com', 147 | password: 'JohnDoe@123', 148 | }; 149 | 150 | const response = await request(app).post('/auth/signin').send(dto); 151 | expect(response.status).toBe(404); 152 | expect(response.body['type']).toBe('Not found'); 153 | }); 154 | 155 | it('should throw an error if password is invalid', async () => { 156 | const dto: SigninDto = { 157 | email: 'johndoe@example.com', 158 | password: 'invalid', 159 | }; 160 | 161 | const response = await request(app).post('/auth/signin').send(dto); 162 | expect(response.status).toBe(401); 163 | expect(response.body['type']).toBe('Unauthorized'); 164 | }); 165 | 166 | it('should signin user', async () => { 167 | const dto: SigninDto = { 168 | email: 'johndoe@example.com', 169 | password: 'JohnDoe@123', 170 | }; 171 | 172 | const response = await request(app).post('/auth/signin').send(dto); 173 | expect(response.status).toBe(200); 174 | store['access_token'] = response.body['access_token']; 175 | store['refresh_token'] = response.body['refresh_token']; 176 | }); 177 | }); 178 | 179 | describe('GET /auth', () => { 180 | it('should trow an error if no authorization token is provided', async () => { 181 | const response = await request(app).get('/auth'); 182 | expect(response.status).toBe(401); 183 | expect(response.text).toBe('Unauthorized'); 184 | }); 185 | 186 | it('should get authenticated user details', async () => { 187 | const response = await request(app) 188 | .get('/auth') 189 | .set('Authorization', `Bearer ${store.access_token}`); 190 | expect(response.status).toBe(200); 191 | }); 192 | }); 193 | 194 | describe('POST /auth/refresh', () => { 195 | it('should throw an error if provided refreshtoken is invalid', async () => { 196 | const dto: RefreshTokenDto = { 197 | refreshToken: 'invalid', 198 | }; 199 | 200 | const response = await request(app).post('/auth/refresh').send(dto); 201 | expect(response.status).toBe(401); 202 | expect(response.text).toBe('Unauthorized'); 203 | }); 204 | 205 | it('should throw an error if no body is provided', async () => { 206 | const response = await request(app).post('/auth/refresh'); 207 | expect(response.status).toBe(400); 208 | expect(response.body['type']).toBe('Validation Error'); 209 | }); 210 | 211 | it('should refresh the token', async () => { 212 | const dto: RefreshTokenDto = { 213 | refreshToken: store.refresh_token, 214 | }; 215 | 216 | const response = await request(app).post('/auth/refresh').send(dto); 217 | expect(response.status).toBe(200); 218 | store['access_token'] = response.body['access_token']; 219 | }); 220 | }); 221 | 222 | describe('DELETE /auth/signout', () => { 223 | it('should throw an error if no authorization token is provided', async () => { 224 | const response = await request(app).delete('/auth/signout'); 225 | 226 | expect(response.status).toBe(401); 227 | expect(response.text).toBe('Unauthorized'); 228 | }); 229 | 230 | it('should signout the user', async () => { 231 | const response = await request(app) 232 | .delete('/auth/signout') 233 | .set('Authorization', `Bearer ${store.access_token}`); 234 | 235 | expect(response.status).toBe(204); 236 | expect(response.body).toBeNull; 237 | }); 238 | }); 239 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | /* Projects */ 5 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 6 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 7 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 8 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 9 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 10 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 11 | /* Language and Environment */ 12 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 13 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 14 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 15 | "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 16 | "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 17 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 18 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 19 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 20 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 21 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 22 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 23 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 24 | /* Modules */ 25 | "module": "commonjs", /* Specify what module code is generated. */ 26 | "rootDir": "./src", /* Specify the root folder within your source files. */ 27 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 28 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 29 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 30 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 31 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 32 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 33 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 34 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 35 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 36 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 37 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 38 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 39 | // "resolveJsonModule": true, /* Enable importing .json files. */ 40 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 41 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 42 | /* JavaScript Support */ 43 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 44 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 45 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 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 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 52 | // "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. */ 53 | "outDir": "./dist", /* Specify an output folder for all emitted files. */ 54 | // "removeComments": true, /* Disable emitting comments. */ 55 | // "noEmit": true, /* Disable emitting files from a compilation. */ 56 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 57 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 58 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 59 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 60 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 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 | /* Interop Constraints */ 71 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 72 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 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 | /* Type Checking */ 78 | // "strict": true, /* Enable all strict type-checking options. */ 79 | "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 80 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 81 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 82 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 83 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 84 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 85 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 86 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 87 | "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 88 | "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 89 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 90 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 91 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 92 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 93 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 94 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 95 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 96 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 97 | /* Completeness */ 98 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 99 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 100 | }, 101 | "include": [ 102 | "src" 103 | ] 104 | } -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@typegoose/typegoose': 9 | specifier: ^11.4.0 10 | version: 11.4.0(mongoose@7.4.0) 11 | argon2: 12 | specifier: ^0.30.3 13 | version: 0.30.3 14 | body-parser: 15 | specifier: ^1.20.2 16 | version: 1.20.2 17 | class-sanitizer: 18 | specifier: ^1.0.1 19 | version: 1.0.1 20 | class-transformer: 21 | specifier: ^0.5.1 22 | version: 0.5.1 23 | class-validator: 24 | specifier: ^0.14.0 25 | version: 0.14.0 26 | express: 27 | specifier: ^4.18.2 28 | version: 4.18.2 29 | inversify: 30 | specifier: ^6.0.1 31 | version: 6.0.1 32 | inversify-express-utils: 33 | specifier: ^6.4.3 34 | version: 6.4.3 35 | jsonwebtoken: 36 | specifier: ^9.0.1 37 | version: 9.0.1 38 | mongodb: 39 | specifier: ^5.7.0 40 | version: 5.7.0 41 | mongoose: 42 | specifier: ^7.4.0 43 | version: 7.4.0 44 | passport: 45 | specifier: ^0.6.0 46 | version: 0.6.0 47 | passport-jwt: 48 | specifier: ^4.0.1 49 | version: 4.0.1 50 | reflect-metadata: 51 | specifier: ^0.1.13 52 | version: 0.1.13 53 | winston: 54 | specifier: ^3.10.0 55 | version: 3.10.0 56 | 57 | devDependencies: 58 | '@types/body-parser': 59 | specifier: ^1.19.2 60 | version: 1.19.2 61 | '@types/express': 62 | specifier: ^4.17.17 63 | version: 4.17.17 64 | '@types/jest': 65 | specifier: ^29.5.3 66 | version: 29.5.3 67 | '@types/jsonwebtoken': 68 | specifier: ^9.0.2 69 | version: 9.0.2 70 | '@types/node': 71 | specifier: ^20.4.2 72 | version: 20.4.2 73 | '@types/passport': 74 | specifier: ^1.0.12 75 | version: 1.0.12 76 | '@types/passport-jwt': 77 | specifier: ^3.0.9 78 | version: 3.0.9 79 | '@types/supertest': 80 | specifier: ^2.0.12 81 | version: 2.0.12 82 | '@typescript-eslint/eslint-plugin': 83 | specifier: ^6.1.0 84 | version: 6.1.0(@typescript-eslint/parser@6.1.0)(eslint@8.45.0)(typescript@5.1.6) 85 | '@typescript-eslint/parser': 86 | specifier: ^6.1.0 87 | version: 6.1.0(eslint@8.45.0)(typescript@5.1.6) 88 | dotenv: 89 | specifier: ^16.3.1 90 | version: 16.3.1 91 | dotenv-cli: 92 | specifier: ^7.2.1 93 | version: 7.2.1 94 | eslint: 95 | specifier: ^8.45.0 96 | version: 8.45.0 97 | jest: 98 | specifier: ^29.6.1 99 | version: 29.6.1(@types/node@20.4.2)(ts-node@10.9.1) 100 | nodemon: 101 | specifier: ^3.0.1 102 | version: 3.0.1 103 | supertest: 104 | specifier: ^6.3.3 105 | version: 6.3.3 106 | ts-jest: 107 | specifier: ^29.1.1 108 | version: 29.1.1(@babel/core@7.22.9)(jest@29.6.1)(typescript@5.1.6) 109 | ts-node: 110 | specifier: ^10.9.1 111 | version: 10.9.1(@types/node@20.4.2)(typescript@5.1.6) 112 | typescript: 113 | specifier: ^5.1.6 114 | version: 5.1.6 115 | 116 | packages: 117 | 118 | /@aashutoshrathi/word-wrap@1.2.6: 119 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 120 | engines: {node: '>=0.10.0'} 121 | dev: true 122 | 123 | /@ampproject/remapping@2.2.1: 124 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 125 | engines: {node: '>=6.0.0'} 126 | dependencies: 127 | '@jridgewell/gen-mapping': 0.3.3 128 | '@jridgewell/trace-mapping': 0.3.18 129 | dev: true 130 | 131 | /@babel/code-frame@7.22.5: 132 | resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} 133 | engines: {node: '>=6.9.0'} 134 | dependencies: 135 | '@babel/highlight': 7.22.5 136 | dev: true 137 | 138 | /@babel/compat-data@7.22.9: 139 | resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} 140 | engines: {node: '>=6.9.0'} 141 | dev: true 142 | 143 | /@babel/core@7.22.9: 144 | resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} 145 | engines: {node: '>=6.9.0'} 146 | dependencies: 147 | '@ampproject/remapping': 2.2.1 148 | '@babel/code-frame': 7.22.5 149 | '@babel/generator': 7.22.9 150 | '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) 151 | '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) 152 | '@babel/helpers': 7.22.6 153 | '@babel/parser': 7.22.7 154 | '@babel/template': 7.22.5 155 | '@babel/traverse': 7.22.8 156 | '@babel/types': 7.22.5 157 | convert-source-map: 1.9.0 158 | debug: 4.3.4 159 | gensync: 1.0.0-beta.2 160 | json5: 2.2.3 161 | semver: 6.3.1 162 | transitivePeerDependencies: 163 | - supports-color 164 | dev: true 165 | 166 | /@babel/generator@7.22.9: 167 | resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} 168 | engines: {node: '>=6.9.0'} 169 | dependencies: 170 | '@babel/types': 7.22.5 171 | '@jridgewell/gen-mapping': 0.3.3 172 | '@jridgewell/trace-mapping': 0.3.18 173 | jsesc: 2.5.2 174 | dev: true 175 | 176 | /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9): 177 | resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} 178 | engines: {node: '>=6.9.0'} 179 | peerDependencies: 180 | '@babel/core': ^7.0.0 181 | dependencies: 182 | '@babel/compat-data': 7.22.9 183 | '@babel/core': 7.22.9 184 | '@babel/helper-validator-option': 7.22.5 185 | browserslist: 4.21.9 186 | lru-cache: 5.1.1 187 | semver: 6.3.1 188 | dev: true 189 | 190 | /@babel/helper-environment-visitor@7.22.5: 191 | resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} 192 | engines: {node: '>=6.9.0'} 193 | dev: true 194 | 195 | /@babel/helper-function-name@7.22.5: 196 | resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} 197 | engines: {node: '>=6.9.0'} 198 | dependencies: 199 | '@babel/template': 7.22.5 200 | '@babel/types': 7.22.5 201 | dev: true 202 | 203 | /@babel/helper-hoist-variables@7.22.5: 204 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 205 | engines: {node: '>=6.9.0'} 206 | dependencies: 207 | '@babel/types': 7.22.5 208 | dev: true 209 | 210 | /@babel/helper-module-imports@7.22.5: 211 | resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} 212 | engines: {node: '>=6.9.0'} 213 | dependencies: 214 | '@babel/types': 7.22.5 215 | dev: true 216 | 217 | /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): 218 | resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} 219 | engines: {node: '>=6.9.0'} 220 | peerDependencies: 221 | '@babel/core': ^7.0.0 222 | dependencies: 223 | '@babel/core': 7.22.9 224 | '@babel/helper-environment-visitor': 7.22.5 225 | '@babel/helper-module-imports': 7.22.5 226 | '@babel/helper-simple-access': 7.22.5 227 | '@babel/helper-split-export-declaration': 7.22.6 228 | '@babel/helper-validator-identifier': 7.22.5 229 | dev: true 230 | 231 | /@babel/helper-plugin-utils@7.22.5: 232 | resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} 233 | engines: {node: '>=6.9.0'} 234 | dev: true 235 | 236 | /@babel/helper-simple-access@7.22.5: 237 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 238 | engines: {node: '>=6.9.0'} 239 | dependencies: 240 | '@babel/types': 7.22.5 241 | dev: true 242 | 243 | /@babel/helper-split-export-declaration@7.22.6: 244 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 245 | engines: {node: '>=6.9.0'} 246 | dependencies: 247 | '@babel/types': 7.22.5 248 | dev: true 249 | 250 | /@babel/helper-string-parser@7.22.5: 251 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} 252 | engines: {node: '>=6.9.0'} 253 | dev: true 254 | 255 | /@babel/helper-validator-identifier@7.22.5: 256 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} 257 | engines: {node: '>=6.9.0'} 258 | dev: true 259 | 260 | /@babel/helper-validator-option@7.22.5: 261 | resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} 262 | engines: {node: '>=6.9.0'} 263 | dev: true 264 | 265 | /@babel/helpers@7.22.6: 266 | resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} 267 | engines: {node: '>=6.9.0'} 268 | dependencies: 269 | '@babel/template': 7.22.5 270 | '@babel/traverse': 7.22.8 271 | '@babel/types': 7.22.5 272 | transitivePeerDependencies: 273 | - supports-color 274 | dev: true 275 | 276 | /@babel/highlight@7.22.5: 277 | resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} 278 | engines: {node: '>=6.9.0'} 279 | dependencies: 280 | '@babel/helper-validator-identifier': 7.22.5 281 | chalk: 2.4.2 282 | js-tokens: 4.0.0 283 | dev: true 284 | 285 | /@babel/parser@7.22.7: 286 | resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} 287 | engines: {node: '>=6.0.0'} 288 | hasBin: true 289 | dependencies: 290 | '@babel/types': 7.22.5 291 | dev: true 292 | 293 | /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.9): 294 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 295 | peerDependencies: 296 | '@babel/core': ^7.0.0-0 297 | dependencies: 298 | '@babel/core': 7.22.9 299 | '@babel/helper-plugin-utils': 7.22.5 300 | dev: true 301 | 302 | /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.9): 303 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 304 | peerDependencies: 305 | '@babel/core': ^7.0.0-0 306 | dependencies: 307 | '@babel/core': 7.22.9 308 | '@babel/helper-plugin-utils': 7.22.5 309 | dev: true 310 | 311 | /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.9): 312 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 313 | peerDependencies: 314 | '@babel/core': ^7.0.0-0 315 | dependencies: 316 | '@babel/core': 7.22.9 317 | '@babel/helper-plugin-utils': 7.22.5 318 | dev: true 319 | 320 | /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.9): 321 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 322 | peerDependencies: 323 | '@babel/core': ^7.0.0-0 324 | dependencies: 325 | '@babel/core': 7.22.9 326 | '@babel/helper-plugin-utils': 7.22.5 327 | dev: true 328 | 329 | /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.9): 330 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 331 | peerDependencies: 332 | '@babel/core': ^7.0.0-0 333 | dependencies: 334 | '@babel/core': 7.22.9 335 | '@babel/helper-plugin-utils': 7.22.5 336 | dev: true 337 | 338 | /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.9): 339 | resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} 340 | engines: {node: '>=6.9.0'} 341 | peerDependencies: 342 | '@babel/core': ^7.0.0-0 343 | dependencies: 344 | '@babel/core': 7.22.9 345 | '@babel/helper-plugin-utils': 7.22.5 346 | dev: true 347 | 348 | /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.9): 349 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 350 | peerDependencies: 351 | '@babel/core': ^7.0.0-0 352 | dependencies: 353 | '@babel/core': 7.22.9 354 | '@babel/helper-plugin-utils': 7.22.5 355 | dev: true 356 | 357 | /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.9): 358 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 359 | peerDependencies: 360 | '@babel/core': ^7.0.0-0 361 | dependencies: 362 | '@babel/core': 7.22.9 363 | '@babel/helper-plugin-utils': 7.22.5 364 | dev: true 365 | 366 | /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.9): 367 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 368 | peerDependencies: 369 | '@babel/core': ^7.0.0-0 370 | dependencies: 371 | '@babel/core': 7.22.9 372 | '@babel/helper-plugin-utils': 7.22.5 373 | dev: true 374 | 375 | /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.9): 376 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 377 | peerDependencies: 378 | '@babel/core': ^7.0.0-0 379 | dependencies: 380 | '@babel/core': 7.22.9 381 | '@babel/helper-plugin-utils': 7.22.5 382 | dev: true 383 | 384 | /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.9): 385 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 386 | peerDependencies: 387 | '@babel/core': ^7.0.0-0 388 | dependencies: 389 | '@babel/core': 7.22.9 390 | '@babel/helper-plugin-utils': 7.22.5 391 | dev: true 392 | 393 | /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.9): 394 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 395 | peerDependencies: 396 | '@babel/core': ^7.0.0-0 397 | dependencies: 398 | '@babel/core': 7.22.9 399 | '@babel/helper-plugin-utils': 7.22.5 400 | dev: true 401 | 402 | /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.9): 403 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 404 | engines: {node: '>=6.9.0'} 405 | peerDependencies: 406 | '@babel/core': ^7.0.0-0 407 | dependencies: 408 | '@babel/core': 7.22.9 409 | '@babel/helper-plugin-utils': 7.22.5 410 | dev: true 411 | 412 | /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.9): 413 | resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} 414 | engines: {node: '>=6.9.0'} 415 | peerDependencies: 416 | '@babel/core': ^7.0.0-0 417 | dependencies: 418 | '@babel/core': 7.22.9 419 | '@babel/helper-plugin-utils': 7.22.5 420 | dev: true 421 | 422 | /@babel/template@7.22.5: 423 | resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} 424 | engines: {node: '>=6.9.0'} 425 | dependencies: 426 | '@babel/code-frame': 7.22.5 427 | '@babel/parser': 7.22.7 428 | '@babel/types': 7.22.5 429 | dev: true 430 | 431 | /@babel/traverse@7.22.8: 432 | resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} 433 | engines: {node: '>=6.9.0'} 434 | dependencies: 435 | '@babel/code-frame': 7.22.5 436 | '@babel/generator': 7.22.9 437 | '@babel/helper-environment-visitor': 7.22.5 438 | '@babel/helper-function-name': 7.22.5 439 | '@babel/helper-hoist-variables': 7.22.5 440 | '@babel/helper-split-export-declaration': 7.22.6 441 | '@babel/parser': 7.22.7 442 | '@babel/types': 7.22.5 443 | debug: 4.3.4 444 | globals: 11.12.0 445 | transitivePeerDependencies: 446 | - supports-color 447 | dev: true 448 | 449 | /@babel/types@7.22.5: 450 | resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} 451 | engines: {node: '>=6.9.0'} 452 | dependencies: 453 | '@babel/helper-string-parser': 7.22.5 454 | '@babel/helper-validator-identifier': 7.22.5 455 | to-fast-properties: 2.0.0 456 | dev: true 457 | 458 | /@bcoe/v8-coverage@0.2.3: 459 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 460 | dev: true 461 | 462 | /@colors/colors@1.5.0: 463 | resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} 464 | engines: {node: '>=0.1.90'} 465 | dev: false 466 | 467 | /@cspotcode/source-map-support@0.8.1: 468 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 469 | engines: {node: '>=12'} 470 | dependencies: 471 | '@jridgewell/trace-mapping': 0.3.9 472 | dev: true 473 | 474 | /@dabh/diagnostics@2.0.3: 475 | resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} 476 | dependencies: 477 | colorspace: 1.1.4 478 | enabled: 2.0.0 479 | kuler: 2.0.0 480 | dev: false 481 | 482 | /@eslint-community/eslint-utils@4.4.0(eslint@8.45.0): 483 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 484 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 485 | peerDependencies: 486 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 487 | dependencies: 488 | eslint: 8.45.0 489 | eslint-visitor-keys: 3.4.1 490 | dev: true 491 | 492 | /@eslint-community/regexpp@4.5.1: 493 | resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} 494 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 495 | dev: true 496 | 497 | /@eslint/eslintrc@2.1.0: 498 | resolution: {integrity: sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==} 499 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 500 | dependencies: 501 | ajv: 6.12.6 502 | debug: 4.3.4 503 | espree: 9.6.1 504 | globals: 13.20.0 505 | ignore: 5.2.4 506 | import-fresh: 3.3.0 507 | js-yaml: 4.1.0 508 | minimatch: 3.1.2 509 | strip-json-comments: 3.1.1 510 | transitivePeerDependencies: 511 | - supports-color 512 | dev: true 513 | 514 | /@eslint/js@8.44.0: 515 | resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} 516 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 517 | dev: true 518 | 519 | /@humanwhocodes/config-array@0.11.10: 520 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} 521 | engines: {node: '>=10.10.0'} 522 | dependencies: 523 | '@humanwhocodes/object-schema': 1.2.1 524 | debug: 4.3.4 525 | minimatch: 3.1.2 526 | transitivePeerDependencies: 527 | - supports-color 528 | dev: true 529 | 530 | /@humanwhocodes/module-importer@1.0.1: 531 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 532 | engines: {node: '>=12.22'} 533 | dev: true 534 | 535 | /@humanwhocodes/object-schema@1.2.1: 536 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 537 | dev: true 538 | 539 | /@istanbuljs/load-nyc-config@1.1.0: 540 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 541 | engines: {node: '>=8'} 542 | dependencies: 543 | camelcase: 5.3.1 544 | find-up: 4.1.0 545 | get-package-type: 0.1.0 546 | js-yaml: 3.14.1 547 | resolve-from: 5.0.0 548 | dev: true 549 | 550 | /@istanbuljs/schema@0.1.3: 551 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 552 | engines: {node: '>=8'} 553 | dev: true 554 | 555 | /@jest/console@29.6.1: 556 | resolution: {integrity: sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==} 557 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 558 | dependencies: 559 | '@jest/types': 29.6.1 560 | '@types/node': 20.4.2 561 | chalk: 4.1.2 562 | jest-message-util: 29.6.1 563 | jest-util: 29.6.1 564 | slash: 3.0.0 565 | dev: true 566 | 567 | /@jest/core@29.6.1(ts-node@10.9.1): 568 | resolution: {integrity: sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==} 569 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 570 | peerDependencies: 571 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 572 | peerDependenciesMeta: 573 | node-notifier: 574 | optional: true 575 | dependencies: 576 | '@jest/console': 29.6.1 577 | '@jest/reporters': 29.6.1 578 | '@jest/test-result': 29.6.1 579 | '@jest/transform': 29.6.1 580 | '@jest/types': 29.6.1 581 | '@types/node': 20.4.2 582 | ansi-escapes: 4.3.2 583 | chalk: 4.1.2 584 | ci-info: 3.8.0 585 | exit: 0.1.2 586 | graceful-fs: 4.2.11 587 | jest-changed-files: 29.5.0 588 | jest-config: 29.6.1(@types/node@20.4.2)(ts-node@10.9.1) 589 | jest-haste-map: 29.6.1 590 | jest-message-util: 29.6.1 591 | jest-regex-util: 29.4.3 592 | jest-resolve: 29.6.1 593 | jest-resolve-dependencies: 29.6.1 594 | jest-runner: 29.6.1 595 | jest-runtime: 29.6.1 596 | jest-snapshot: 29.6.1 597 | jest-util: 29.6.1 598 | jest-validate: 29.6.1 599 | jest-watcher: 29.6.1 600 | micromatch: 4.0.5 601 | pretty-format: 29.6.1 602 | slash: 3.0.0 603 | strip-ansi: 6.0.1 604 | transitivePeerDependencies: 605 | - supports-color 606 | - ts-node 607 | dev: true 608 | 609 | /@jest/environment@29.6.1: 610 | resolution: {integrity: sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==} 611 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 612 | dependencies: 613 | '@jest/fake-timers': 29.6.1 614 | '@jest/types': 29.6.1 615 | '@types/node': 20.4.2 616 | jest-mock: 29.6.1 617 | dev: true 618 | 619 | /@jest/expect-utils@29.6.1: 620 | resolution: {integrity: sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==} 621 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 622 | dependencies: 623 | jest-get-type: 29.4.3 624 | dev: true 625 | 626 | /@jest/expect@29.6.1: 627 | resolution: {integrity: sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==} 628 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 629 | dependencies: 630 | expect: 29.6.1 631 | jest-snapshot: 29.6.1 632 | transitivePeerDependencies: 633 | - supports-color 634 | dev: true 635 | 636 | /@jest/fake-timers@29.6.1: 637 | resolution: {integrity: sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==} 638 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 639 | dependencies: 640 | '@jest/types': 29.6.1 641 | '@sinonjs/fake-timers': 10.3.0 642 | '@types/node': 20.4.2 643 | jest-message-util: 29.6.1 644 | jest-mock: 29.6.1 645 | jest-util: 29.6.1 646 | dev: true 647 | 648 | /@jest/globals@29.6.1: 649 | resolution: {integrity: sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==} 650 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 651 | dependencies: 652 | '@jest/environment': 29.6.1 653 | '@jest/expect': 29.6.1 654 | '@jest/types': 29.6.1 655 | jest-mock: 29.6.1 656 | transitivePeerDependencies: 657 | - supports-color 658 | dev: true 659 | 660 | /@jest/reporters@29.6.1: 661 | resolution: {integrity: sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==} 662 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 663 | peerDependencies: 664 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 665 | peerDependenciesMeta: 666 | node-notifier: 667 | optional: true 668 | dependencies: 669 | '@bcoe/v8-coverage': 0.2.3 670 | '@jest/console': 29.6.1 671 | '@jest/test-result': 29.6.1 672 | '@jest/transform': 29.6.1 673 | '@jest/types': 29.6.1 674 | '@jridgewell/trace-mapping': 0.3.18 675 | '@types/node': 20.4.2 676 | chalk: 4.1.2 677 | collect-v8-coverage: 1.0.2 678 | exit: 0.1.2 679 | glob: 7.2.3 680 | graceful-fs: 4.2.11 681 | istanbul-lib-coverage: 3.2.0 682 | istanbul-lib-instrument: 5.2.1 683 | istanbul-lib-report: 3.0.0 684 | istanbul-lib-source-maps: 4.0.1 685 | istanbul-reports: 3.1.5 686 | jest-message-util: 29.6.1 687 | jest-util: 29.6.1 688 | jest-worker: 29.6.1 689 | slash: 3.0.0 690 | string-length: 4.0.2 691 | strip-ansi: 6.0.1 692 | v8-to-istanbul: 9.1.0 693 | transitivePeerDependencies: 694 | - supports-color 695 | dev: true 696 | 697 | /@jest/schemas@29.6.0: 698 | resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} 699 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 700 | dependencies: 701 | '@sinclair/typebox': 0.27.8 702 | dev: true 703 | 704 | /@jest/source-map@29.6.0: 705 | resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==} 706 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 707 | dependencies: 708 | '@jridgewell/trace-mapping': 0.3.18 709 | callsites: 3.1.0 710 | graceful-fs: 4.2.11 711 | dev: true 712 | 713 | /@jest/test-result@29.6.1: 714 | resolution: {integrity: sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==} 715 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 716 | dependencies: 717 | '@jest/console': 29.6.1 718 | '@jest/types': 29.6.1 719 | '@types/istanbul-lib-coverage': 2.0.4 720 | collect-v8-coverage: 1.0.2 721 | dev: true 722 | 723 | /@jest/test-sequencer@29.6.1: 724 | resolution: {integrity: sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==} 725 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 726 | dependencies: 727 | '@jest/test-result': 29.6.1 728 | graceful-fs: 4.2.11 729 | jest-haste-map: 29.6.1 730 | slash: 3.0.0 731 | dev: true 732 | 733 | /@jest/transform@29.6.1: 734 | resolution: {integrity: sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==} 735 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 736 | dependencies: 737 | '@babel/core': 7.22.9 738 | '@jest/types': 29.6.1 739 | '@jridgewell/trace-mapping': 0.3.18 740 | babel-plugin-istanbul: 6.1.1 741 | chalk: 4.1.2 742 | convert-source-map: 2.0.0 743 | fast-json-stable-stringify: 2.1.0 744 | graceful-fs: 4.2.11 745 | jest-haste-map: 29.6.1 746 | jest-regex-util: 29.4.3 747 | jest-util: 29.6.1 748 | micromatch: 4.0.5 749 | pirates: 4.0.6 750 | slash: 3.0.0 751 | write-file-atomic: 4.0.2 752 | transitivePeerDependencies: 753 | - supports-color 754 | dev: true 755 | 756 | /@jest/types@29.6.1: 757 | resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==} 758 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 759 | dependencies: 760 | '@jest/schemas': 29.6.0 761 | '@types/istanbul-lib-coverage': 2.0.4 762 | '@types/istanbul-reports': 3.0.1 763 | '@types/node': 20.4.2 764 | '@types/yargs': 17.0.24 765 | chalk: 4.1.2 766 | dev: true 767 | 768 | /@jridgewell/gen-mapping@0.3.3: 769 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 770 | engines: {node: '>=6.0.0'} 771 | dependencies: 772 | '@jridgewell/set-array': 1.1.2 773 | '@jridgewell/sourcemap-codec': 1.4.15 774 | '@jridgewell/trace-mapping': 0.3.18 775 | dev: true 776 | 777 | /@jridgewell/resolve-uri@3.1.0: 778 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 779 | engines: {node: '>=6.0.0'} 780 | dev: true 781 | 782 | /@jridgewell/resolve-uri@3.1.1: 783 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 784 | engines: {node: '>=6.0.0'} 785 | dev: true 786 | 787 | /@jridgewell/set-array@1.1.2: 788 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 789 | engines: {node: '>=6.0.0'} 790 | dev: true 791 | 792 | /@jridgewell/sourcemap-codec@1.4.14: 793 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 794 | dev: true 795 | 796 | /@jridgewell/sourcemap-codec@1.4.15: 797 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 798 | dev: true 799 | 800 | /@jridgewell/trace-mapping@0.3.18: 801 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 802 | dependencies: 803 | '@jridgewell/resolve-uri': 3.1.0 804 | '@jridgewell/sourcemap-codec': 1.4.14 805 | dev: true 806 | 807 | /@jridgewell/trace-mapping@0.3.9: 808 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 809 | dependencies: 810 | '@jridgewell/resolve-uri': 3.1.1 811 | '@jridgewell/sourcemap-codec': 1.4.15 812 | dev: true 813 | 814 | /@mapbox/node-pre-gyp@1.0.11: 815 | resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} 816 | hasBin: true 817 | dependencies: 818 | detect-libc: 2.0.2 819 | https-proxy-agent: 5.0.1 820 | make-dir: 3.1.0 821 | node-fetch: 2.6.12 822 | nopt: 5.0.0 823 | npmlog: 5.0.1 824 | rimraf: 3.0.2 825 | semver: 7.5.4 826 | tar: 6.1.15 827 | transitivePeerDependencies: 828 | - encoding 829 | - supports-color 830 | dev: false 831 | 832 | /@nodelib/fs.scandir@2.1.5: 833 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 834 | engines: {node: '>= 8'} 835 | dependencies: 836 | '@nodelib/fs.stat': 2.0.5 837 | run-parallel: 1.2.0 838 | dev: true 839 | 840 | /@nodelib/fs.stat@2.0.5: 841 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 842 | engines: {node: '>= 8'} 843 | dev: true 844 | 845 | /@nodelib/fs.walk@1.2.8: 846 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 847 | engines: {node: '>= 8'} 848 | dependencies: 849 | '@nodelib/fs.scandir': 2.1.5 850 | fastq: 1.15.0 851 | dev: true 852 | 853 | /@phc/format@1.0.0: 854 | resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} 855 | engines: {node: '>=10'} 856 | dev: false 857 | 858 | /@sinclair/typebox@0.27.8: 859 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 860 | dev: true 861 | 862 | /@sinonjs/commons@3.0.0: 863 | resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} 864 | dependencies: 865 | type-detect: 4.0.8 866 | dev: true 867 | 868 | /@sinonjs/fake-timers@10.3.0: 869 | resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} 870 | dependencies: 871 | '@sinonjs/commons': 3.0.0 872 | dev: true 873 | 874 | /@tsconfig/node10@1.0.9: 875 | resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} 876 | dev: true 877 | 878 | /@tsconfig/node12@1.0.11: 879 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 880 | dev: true 881 | 882 | /@tsconfig/node14@1.0.3: 883 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 884 | dev: true 885 | 886 | /@tsconfig/node16@1.0.4: 887 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 888 | dev: true 889 | 890 | /@typegoose/typegoose@11.4.0(mongoose@7.4.0): 891 | resolution: {integrity: sha512-MQE1go8wsTJCZ2PnGaOOfBsZ7e0gFVhZGZLY8g5vIs11oesNMLWpKaDxLrzrljqtMISRcBOn+iXDalo30Ibnxg==} 892 | engines: {node: '>=14.17.0'} 893 | peerDependencies: 894 | mongoose: ~7.4.0 895 | dependencies: 896 | lodash: 4.17.21 897 | loglevel: 1.8.1 898 | mongoose: 7.4.0 899 | reflect-metadata: 0.1.13 900 | semver: 7.5.4 901 | tslib: 2.6.0 902 | dev: false 903 | 904 | /@types/babel__core@7.20.1: 905 | resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} 906 | dependencies: 907 | '@babel/parser': 7.22.7 908 | '@babel/types': 7.22.5 909 | '@types/babel__generator': 7.6.4 910 | '@types/babel__template': 7.4.1 911 | '@types/babel__traverse': 7.20.1 912 | dev: true 913 | 914 | /@types/babel__generator@7.6.4: 915 | resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} 916 | dependencies: 917 | '@babel/types': 7.22.5 918 | dev: true 919 | 920 | /@types/babel__template@7.4.1: 921 | resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} 922 | dependencies: 923 | '@babel/parser': 7.22.7 924 | '@babel/types': 7.22.5 925 | dev: true 926 | 927 | /@types/babel__traverse@7.20.1: 928 | resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} 929 | dependencies: 930 | '@babel/types': 7.22.5 931 | dev: true 932 | 933 | /@types/body-parser@1.19.2: 934 | resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} 935 | dependencies: 936 | '@types/connect': 3.4.35 937 | '@types/node': 20.4.2 938 | dev: true 939 | 940 | /@types/connect@3.4.35: 941 | resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} 942 | dependencies: 943 | '@types/node': 20.4.2 944 | dev: true 945 | 946 | /@types/cookiejar@2.1.2: 947 | resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} 948 | dev: true 949 | 950 | /@types/express-serve-static-core@4.17.35: 951 | resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} 952 | dependencies: 953 | '@types/node': 20.4.2 954 | '@types/qs': 6.9.7 955 | '@types/range-parser': 1.2.4 956 | '@types/send': 0.17.1 957 | dev: true 958 | 959 | /@types/express@4.17.17: 960 | resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} 961 | dependencies: 962 | '@types/body-parser': 1.19.2 963 | '@types/express-serve-static-core': 4.17.35 964 | '@types/qs': 6.9.7 965 | '@types/serve-static': 1.15.2 966 | dev: true 967 | 968 | /@types/graceful-fs@4.1.6: 969 | resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} 970 | dependencies: 971 | '@types/node': 20.4.2 972 | dev: true 973 | 974 | /@types/http-errors@2.0.1: 975 | resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} 976 | dev: true 977 | 978 | /@types/istanbul-lib-coverage@2.0.4: 979 | resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} 980 | dev: true 981 | 982 | /@types/istanbul-lib-report@3.0.0: 983 | resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} 984 | dependencies: 985 | '@types/istanbul-lib-coverage': 2.0.4 986 | dev: true 987 | 988 | /@types/istanbul-reports@3.0.1: 989 | resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} 990 | dependencies: 991 | '@types/istanbul-lib-report': 3.0.0 992 | dev: true 993 | 994 | /@types/jest@29.5.3: 995 | resolution: {integrity: sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==} 996 | dependencies: 997 | expect: 29.6.1 998 | pretty-format: 29.6.1 999 | dev: true 1000 | 1001 | /@types/json-schema@7.0.12: 1002 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} 1003 | dev: true 1004 | 1005 | /@types/jsonwebtoken@9.0.2: 1006 | resolution: {integrity: sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==} 1007 | dependencies: 1008 | '@types/node': 20.4.2 1009 | dev: true 1010 | 1011 | /@types/mime@1.3.2: 1012 | resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} 1013 | dev: true 1014 | 1015 | /@types/mime@3.0.1: 1016 | resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} 1017 | dev: true 1018 | 1019 | /@types/node@20.4.2: 1020 | resolution: {integrity: sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==} 1021 | 1022 | /@types/passport-jwt@3.0.9: 1023 | resolution: {integrity: sha512-5XJt+79emfgpuBvBQusUPylFIVtW1QVAAkTRwCbRJAmxUjmLtIqUU6V1ovpnHPu6Qut3mR5Juc+s7kd06roNTg==} 1024 | dependencies: 1025 | '@types/express': 4.17.17 1026 | '@types/jsonwebtoken': 9.0.2 1027 | '@types/passport-strategy': 0.2.35 1028 | dev: true 1029 | 1030 | /@types/passport-strategy@0.2.35: 1031 | resolution: {integrity: sha512-o5D19Jy2XPFoX2rKApykY15et3Apgax00RRLf0RUotPDUsYrQa7x4howLYr9El2mlUApHmCMv5CZ1IXqKFQ2+g==} 1032 | dependencies: 1033 | '@types/express': 4.17.17 1034 | '@types/passport': 1.0.12 1035 | dev: true 1036 | 1037 | /@types/passport@1.0.12: 1038 | resolution: {integrity: sha512-QFdJ2TiAEoXfEQSNDISJR1Tm51I78CymqcBa8imbjo6dNNu+l2huDxxbDEIoFIwOSKMkOfHEikyDuZ38WwWsmw==} 1039 | dependencies: 1040 | '@types/express': 4.17.17 1041 | dev: true 1042 | 1043 | /@types/prettier@2.7.3: 1044 | resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} 1045 | dev: true 1046 | 1047 | /@types/qs@6.9.7: 1048 | resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} 1049 | dev: true 1050 | 1051 | /@types/range-parser@1.2.4: 1052 | resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} 1053 | dev: true 1054 | 1055 | /@types/semver@7.5.0: 1056 | resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} 1057 | dev: true 1058 | 1059 | /@types/send@0.17.1: 1060 | resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} 1061 | dependencies: 1062 | '@types/mime': 1.3.2 1063 | '@types/node': 20.4.2 1064 | dev: true 1065 | 1066 | /@types/serve-static@1.15.2: 1067 | resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==} 1068 | dependencies: 1069 | '@types/http-errors': 2.0.1 1070 | '@types/mime': 3.0.1 1071 | '@types/node': 20.4.2 1072 | dev: true 1073 | 1074 | /@types/stack-utils@2.0.1: 1075 | resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} 1076 | dev: true 1077 | 1078 | /@types/superagent@4.1.18: 1079 | resolution: {integrity: sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w==} 1080 | dependencies: 1081 | '@types/cookiejar': 2.1.2 1082 | '@types/node': 20.4.2 1083 | dev: true 1084 | 1085 | /@types/supertest@2.0.12: 1086 | resolution: {integrity: sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==} 1087 | dependencies: 1088 | '@types/superagent': 4.1.18 1089 | dev: true 1090 | 1091 | /@types/triple-beam@1.3.2: 1092 | resolution: {integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==} 1093 | dev: false 1094 | 1095 | /@types/validator@13.7.17: 1096 | resolution: {integrity: sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==} 1097 | dev: false 1098 | 1099 | /@types/webidl-conversions@7.0.0: 1100 | resolution: {integrity: sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==} 1101 | dev: false 1102 | 1103 | /@types/whatwg-url@8.2.2: 1104 | resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} 1105 | dependencies: 1106 | '@types/node': 20.4.2 1107 | '@types/webidl-conversions': 7.0.0 1108 | dev: false 1109 | 1110 | /@types/yargs-parser@21.0.0: 1111 | resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} 1112 | dev: true 1113 | 1114 | /@types/yargs@17.0.24: 1115 | resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} 1116 | dependencies: 1117 | '@types/yargs-parser': 21.0.0 1118 | dev: true 1119 | 1120 | /@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.1.0)(eslint@8.45.0)(typescript@5.1.6): 1121 | resolution: {integrity: sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw==} 1122 | engines: {node: ^16.0.0 || >=18.0.0} 1123 | peerDependencies: 1124 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 1125 | eslint: ^7.0.0 || ^8.0.0 1126 | typescript: '*' 1127 | peerDependenciesMeta: 1128 | typescript: 1129 | optional: true 1130 | dependencies: 1131 | '@eslint-community/regexpp': 4.5.1 1132 | '@typescript-eslint/parser': 6.1.0(eslint@8.45.0)(typescript@5.1.6) 1133 | '@typescript-eslint/scope-manager': 6.1.0 1134 | '@typescript-eslint/type-utils': 6.1.0(eslint@8.45.0)(typescript@5.1.6) 1135 | '@typescript-eslint/utils': 6.1.0(eslint@8.45.0)(typescript@5.1.6) 1136 | '@typescript-eslint/visitor-keys': 6.1.0 1137 | debug: 4.3.4 1138 | eslint: 8.45.0 1139 | graphemer: 1.4.0 1140 | ignore: 5.2.4 1141 | natural-compare: 1.4.0 1142 | natural-compare-lite: 1.4.0 1143 | semver: 7.5.4 1144 | ts-api-utils: 1.0.1(typescript@5.1.6) 1145 | typescript: 5.1.6 1146 | transitivePeerDependencies: 1147 | - supports-color 1148 | dev: true 1149 | 1150 | /@typescript-eslint/parser@6.1.0(eslint@8.45.0)(typescript@5.1.6): 1151 | resolution: {integrity: sha512-hIzCPvX4vDs4qL07SYzyomamcs2/tQYXg5DtdAfj35AyJ5PIUqhsLf4YrEIFzZcND7R2E8tpQIZKayxg8/6Wbw==} 1152 | engines: {node: ^16.0.0 || >=18.0.0} 1153 | peerDependencies: 1154 | eslint: ^7.0.0 || ^8.0.0 1155 | typescript: '*' 1156 | peerDependenciesMeta: 1157 | typescript: 1158 | optional: true 1159 | dependencies: 1160 | '@typescript-eslint/scope-manager': 6.1.0 1161 | '@typescript-eslint/types': 6.1.0 1162 | '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.1.6) 1163 | '@typescript-eslint/visitor-keys': 6.1.0 1164 | debug: 4.3.4 1165 | eslint: 8.45.0 1166 | typescript: 5.1.6 1167 | transitivePeerDependencies: 1168 | - supports-color 1169 | dev: true 1170 | 1171 | /@typescript-eslint/scope-manager@6.1.0: 1172 | resolution: {integrity: sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==} 1173 | engines: {node: ^16.0.0 || >=18.0.0} 1174 | dependencies: 1175 | '@typescript-eslint/types': 6.1.0 1176 | '@typescript-eslint/visitor-keys': 6.1.0 1177 | dev: true 1178 | 1179 | /@typescript-eslint/type-utils@6.1.0(eslint@8.45.0)(typescript@5.1.6): 1180 | resolution: {integrity: sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w==} 1181 | engines: {node: ^16.0.0 || >=18.0.0} 1182 | peerDependencies: 1183 | eslint: ^7.0.0 || ^8.0.0 1184 | typescript: '*' 1185 | peerDependenciesMeta: 1186 | typescript: 1187 | optional: true 1188 | dependencies: 1189 | '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.1.6) 1190 | '@typescript-eslint/utils': 6.1.0(eslint@8.45.0)(typescript@5.1.6) 1191 | debug: 4.3.4 1192 | eslint: 8.45.0 1193 | ts-api-utils: 1.0.1(typescript@5.1.6) 1194 | typescript: 5.1.6 1195 | transitivePeerDependencies: 1196 | - supports-color 1197 | dev: true 1198 | 1199 | /@typescript-eslint/types@6.1.0: 1200 | resolution: {integrity: sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==} 1201 | engines: {node: ^16.0.0 || >=18.0.0} 1202 | dev: true 1203 | 1204 | /@typescript-eslint/typescript-estree@6.1.0(typescript@5.1.6): 1205 | resolution: {integrity: sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==} 1206 | engines: {node: ^16.0.0 || >=18.0.0} 1207 | peerDependencies: 1208 | typescript: '*' 1209 | peerDependenciesMeta: 1210 | typescript: 1211 | optional: true 1212 | dependencies: 1213 | '@typescript-eslint/types': 6.1.0 1214 | '@typescript-eslint/visitor-keys': 6.1.0 1215 | debug: 4.3.4 1216 | globby: 11.1.0 1217 | is-glob: 4.0.3 1218 | semver: 7.5.4 1219 | ts-api-utils: 1.0.1(typescript@5.1.6) 1220 | typescript: 5.1.6 1221 | transitivePeerDependencies: 1222 | - supports-color 1223 | dev: true 1224 | 1225 | /@typescript-eslint/utils@6.1.0(eslint@8.45.0)(typescript@5.1.6): 1226 | resolution: {integrity: sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ==} 1227 | engines: {node: ^16.0.0 || >=18.0.0} 1228 | peerDependencies: 1229 | eslint: ^7.0.0 || ^8.0.0 1230 | dependencies: 1231 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) 1232 | '@types/json-schema': 7.0.12 1233 | '@types/semver': 7.5.0 1234 | '@typescript-eslint/scope-manager': 6.1.0 1235 | '@typescript-eslint/types': 6.1.0 1236 | '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.1.6) 1237 | eslint: 8.45.0 1238 | semver: 7.5.4 1239 | transitivePeerDependencies: 1240 | - supports-color 1241 | - typescript 1242 | dev: true 1243 | 1244 | /@typescript-eslint/visitor-keys@6.1.0: 1245 | resolution: {integrity: sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==} 1246 | engines: {node: ^16.0.0 || >=18.0.0} 1247 | dependencies: 1248 | '@typescript-eslint/types': 6.1.0 1249 | eslint-visitor-keys: 3.4.1 1250 | dev: true 1251 | 1252 | /abbrev@1.1.1: 1253 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 1254 | 1255 | /accepts@1.3.8: 1256 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 1257 | engines: {node: '>= 0.6'} 1258 | dependencies: 1259 | mime-types: 2.1.35 1260 | negotiator: 0.6.3 1261 | dev: false 1262 | 1263 | /acorn-jsx@5.3.2(acorn@8.10.0): 1264 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 1265 | peerDependencies: 1266 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 1267 | dependencies: 1268 | acorn: 8.10.0 1269 | dev: true 1270 | 1271 | /acorn-walk@8.2.0: 1272 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 1273 | engines: {node: '>=0.4.0'} 1274 | dev: true 1275 | 1276 | /acorn@8.10.0: 1277 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} 1278 | engines: {node: '>=0.4.0'} 1279 | hasBin: true 1280 | dev: true 1281 | 1282 | /agent-base@6.0.2: 1283 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 1284 | engines: {node: '>= 6.0.0'} 1285 | dependencies: 1286 | debug: 4.3.4 1287 | transitivePeerDependencies: 1288 | - supports-color 1289 | dev: false 1290 | 1291 | /ajv@6.12.6: 1292 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 1293 | dependencies: 1294 | fast-deep-equal: 3.1.3 1295 | fast-json-stable-stringify: 2.1.0 1296 | json-schema-traverse: 0.4.1 1297 | uri-js: 4.4.1 1298 | dev: true 1299 | 1300 | /ansi-escapes@4.3.2: 1301 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 1302 | engines: {node: '>=8'} 1303 | dependencies: 1304 | type-fest: 0.21.3 1305 | dev: true 1306 | 1307 | /ansi-regex@5.0.1: 1308 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1309 | engines: {node: '>=8'} 1310 | 1311 | /ansi-styles@3.2.1: 1312 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 1313 | engines: {node: '>=4'} 1314 | dependencies: 1315 | color-convert: 1.9.3 1316 | dev: true 1317 | 1318 | /ansi-styles@4.3.0: 1319 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1320 | engines: {node: '>=8'} 1321 | dependencies: 1322 | color-convert: 2.0.1 1323 | dev: true 1324 | 1325 | /ansi-styles@5.2.0: 1326 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 1327 | engines: {node: '>=10'} 1328 | dev: true 1329 | 1330 | /anymatch@3.1.3: 1331 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 1332 | engines: {node: '>= 8'} 1333 | dependencies: 1334 | normalize-path: 3.0.0 1335 | picomatch: 2.3.1 1336 | dev: true 1337 | 1338 | /aproba@2.0.0: 1339 | resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} 1340 | dev: false 1341 | 1342 | /are-we-there-yet@2.0.0: 1343 | resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} 1344 | engines: {node: '>=10'} 1345 | dependencies: 1346 | delegates: 1.0.0 1347 | readable-stream: 3.6.2 1348 | dev: false 1349 | 1350 | /arg@4.1.3: 1351 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 1352 | dev: true 1353 | 1354 | /argon2@0.30.3: 1355 | resolution: {integrity: sha512-DoH/kv8c9127ueJSBxAVJXinW9+EuPA3EMUxoV2sAY1qDE5H9BjTyVF/aD2XyHqbqUWabgBkIfcP3ZZuGhbJdg==} 1356 | engines: {node: '>=14.0.0'} 1357 | requiresBuild: true 1358 | dependencies: 1359 | '@mapbox/node-pre-gyp': 1.0.11 1360 | '@phc/format': 1.0.0 1361 | node-addon-api: 5.1.0 1362 | transitivePeerDependencies: 1363 | - encoding 1364 | - supports-color 1365 | dev: false 1366 | 1367 | /argparse@1.0.10: 1368 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 1369 | dependencies: 1370 | sprintf-js: 1.0.3 1371 | dev: true 1372 | 1373 | /argparse@2.0.1: 1374 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1375 | dev: true 1376 | 1377 | /array-flatten@1.1.1: 1378 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 1379 | dev: false 1380 | 1381 | /array-union@2.1.0: 1382 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 1383 | engines: {node: '>=8'} 1384 | dev: true 1385 | 1386 | /asap@2.0.6: 1387 | resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} 1388 | dev: true 1389 | 1390 | /async@3.2.4: 1391 | resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} 1392 | dev: false 1393 | 1394 | /asynckit@0.4.0: 1395 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 1396 | dev: true 1397 | 1398 | /babel-jest@29.6.1(@babel/core@7.22.9): 1399 | resolution: {integrity: sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==} 1400 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1401 | peerDependencies: 1402 | '@babel/core': ^7.8.0 1403 | dependencies: 1404 | '@babel/core': 7.22.9 1405 | '@jest/transform': 29.6.1 1406 | '@types/babel__core': 7.20.1 1407 | babel-plugin-istanbul: 6.1.1 1408 | babel-preset-jest: 29.5.0(@babel/core@7.22.9) 1409 | chalk: 4.1.2 1410 | graceful-fs: 4.2.11 1411 | slash: 3.0.0 1412 | transitivePeerDependencies: 1413 | - supports-color 1414 | dev: true 1415 | 1416 | /babel-plugin-istanbul@6.1.1: 1417 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 1418 | engines: {node: '>=8'} 1419 | dependencies: 1420 | '@babel/helper-plugin-utils': 7.22.5 1421 | '@istanbuljs/load-nyc-config': 1.1.0 1422 | '@istanbuljs/schema': 0.1.3 1423 | istanbul-lib-instrument: 5.2.1 1424 | test-exclude: 6.0.0 1425 | transitivePeerDependencies: 1426 | - supports-color 1427 | dev: true 1428 | 1429 | /babel-plugin-jest-hoist@29.5.0: 1430 | resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} 1431 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1432 | dependencies: 1433 | '@babel/template': 7.22.5 1434 | '@babel/types': 7.22.5 1435 | '@types/babel__core': 7.20.1 1436 | '@types/babel__traverse': 7.20.1 1437 | dev: true 1438 | 1439 | /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.9): 1440 | resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} 1441 | peerDependencies: 1442 | '@babel/core': ^7.0.0 1443 | dependencies: 1444 | '@babel/core': 7.22.9 1445 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) 1446 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.9) 1447 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) 1448 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.9) 1449 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) 1450 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) 1451 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) 1452 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) 1453 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) 1454 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) 1455 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) 1456 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.9) 1457 | dev: true 1458 | 1459 | /babel-preset-jest@29.5.0(@babel/core@7.22.9): 1460 | resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} 1461 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1462 | peerDependencies: 1463 | '@babel/core': ^7.0.0 1464 | dependencies: 1465 | '@babel/core': 7.22.9 1466 | babel-plugin-jest-hoist: 29.5.0 1467 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.9) 1468 | dev: true 1469 | 1470 | /balanced-match@1.0.2: 1471 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1472 | 1473 | /binary-extensions@2.2.0: 1474 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 1475 | engines: {node: '>=8'} 1476 | dev: true 1477 | 1478 | /body-parser@1.20.1: 1479 | resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} 1480 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1481 | dependencies: 1482 | bytes: 3.1.2 1483 | content-type: 1.0.5 1484 | debug: 2.6.9 1485 | depd: 2.0.0 1486 | destroy: 1.2.0 1487 | http-errors: 2.0.0 1488 | iconv-lite: 0.4.24 1489 | on-finished: 2.4.1 1490 | qs: 6.11.0 1491 | raw-body: 2.5.1 1492 | type-is: 1.6.18 1493 | unpipe: 1.0.0 1494 | transitivePeerDependencies: 1495 | - supports-color 1496 | dev: false 1497 | 1498 | /body-parser@1.20.2: 1499 | resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} 1500 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1501 | dependencies: 1502 | bytes: 3.1.2 1503 | content-type: 1.0.5 1504 | debug: 2.6.9 1505 | depd: 2.0.0 1506 | destroy: 1.2.0 1507 | http-errors: 2.0.0 1508 | iconv-lite: 0.4.24 1509 | on-finished: 2.4.1 1510 | qs: 6.11.0 1511 | raw-body: 2.5.2 1512 | type-is: 1.6.18 1513 | unpipe: 1.0.0 1514 | transitivePeerDependencies: 1515 | - supports-color 1516 | dev: false 1517 | 1518 | /brace-expansion@1.1.11: 1519 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1520 | dependencies: 1521 | balanced-match: 1.0.2 1522 | concat-map: 0.0.1 1523 | 1524 | /braces@3.0.2: 1525 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1526 | engines: {node: '>=8'} 1527 | dependencies: 1528 | fill-range: 7.0.1 1529 | dev: true 1530 | 1531 | /browserslist@4.21.9: 1532 | resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} 1533 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1534 | hasBin: true 1535 | dependencies: 1536 | caniuse-lite: 1.0.30001517 1537 | electron-to-chromium: 1.4.468 1538 | node-releases: 2.0.13 1539 | update-browserslist-db: 1.0.11(browserslist@4.21.9) 1540 | dev: true 1541 | 1542 | /bs-logger@0.2.6: 1543 | resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} 1544 | engines: {node: '>= 6'} 1545 | dependencies: 1546 | fast-json-stable-stringify: 2.1.0 1547 | dev: true 1548 | 1549 | /bser@2.1.1: 1550 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 1551 | dependencies: 1552 | node-int64: 0.4.0 1553 | dev: true 1554 | 1555 | /bson@5.4.0: 1556 | resolution: {integrity: sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==} 1557 | engines: {node: '>=14.20.1'} 1558 | dev: false 1559 | 1560 | /buffer-equal-constant-time@1.0.1: 1561 | resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} 1562 | dev: false 1563 | 1564 | /buffer-from@1.1.2: 1565 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 1566 | dev: true 1567 | 1568 | /bytes@3.1.2: 1569 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 1570 | engines: {node: '>= 0.8'} 1571 | dev: false 1572 | 1573 | /call-bind@1.0.2: 1574 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 1575 | dependencies: 1576 | function-bind: 1.1.1 1577 | get-intrinsic: 1.2.1 1578 | 1579 | /callsites@3.1.0: 1580 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1581 | engines: {node: '>=6'} 1582 | dev: true 1583 | 1584 | /camelcase@5.3.1: 1585 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 1586 | engines: {node: '>=6'} 1587 | dev: true 1588 | 1589 | /camelcase@6.3.0: 1590 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 1591 | engines: {node: '>=10'} 1592 | dev: true 1593 | 1594 | /caniuse-lite@1.0.30001517: 1595 | resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} 1596 | dev: true 1597 | 1598 | /chalk@2.4.2: 1599 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1600 | engines: {node: '>=4'} 1601 | dependencies: 1602 | ansi-styles: 3.2.1 1603 | escape-string-regexp: 1.0.5 1604 | supports-color: 5.5.0 1605 | dev: true 1606 | 1607 | /chalk@4.1.2: 1608 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1609 | engines: {node: '>=10'} 1610 | dependencies: 1611 | ansi-styles: 4.3.0 1612 | supports-color: 7.2.0 1613 | dev: true 1614 | 1615 | /char-regex@1.0.2: 1616 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 1617 | engines: {node: '>=10'} 1618 | dev: true 1619 | 1620 | /chokidar@3.5.3: 1621 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1622 | engines: {node: '>= 8.10.0'} 1623 | dependencies: 1624 | anymatch: 3.1.3 1625 | braces: 3.0.2 1626 | glob-parent: 5.1.2 1627 | is-binary-path: 2.1.0 1628 | is-glob: 4.0.3 1629 | normalize-path: 3.0.0 1630 | readdirp: 3.6.0 1631 | optionalDependencies: 1632 | fsevents: 2.3.2 1633 | dev: true 1634 | 1635 | /chownr@2.0.0: 1636 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} 1637 | engines: {node: '>=10'} 1638 | dev: false 1639 | 1640 | /ci-info@3.8.0: 1641 | resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} 1642 | engines: {node: '>=8'} 1643 | dev: true 1644 | 1645 | /cjs-module-lexer@1.2.3: 1646 | resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} 1647 | dev: true 1648 | 1649 | /class-sanitizer@1.0.1: 1650 | resolution: {integrity: sha512-E4lgSXP3nbJo5aflAsV9H/sauXxMbUr8XdriYEI6Cc3L5CtnEkSmxoAS8Rbj90Yq/s/S1ceoXGARjOnOgyyKQQ==} 1651 | dependencies: 1652 | validator: 13.9.0 1653 | dev: false 1654 | 1655 | /class-transformer@0.5.1: 1656 | resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} 1657 | dev: false 1658 | 1659 | /class-validator@0.14.0: 1660 | resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==} 1661 | dependencies: 1662 | '@types/validator': 13.7.17 1663 | libphonenumber-js: 1.10.37 1664 | validator: 13.9.0 1665 | dev: false 1666 | 1667 | /cliui@8.0.1: 1668 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 1669 | engines: {node: '>=12'} 1670 | dependencies: 1671 | string-width: 4.2.3 1672 | strip-ansi: 6.0.1 1673 | wrap-ansi: 7.0.0 1674 | dev: true 1675 | 1676 | /co@4.6.0: 1677 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 1678 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 1679 | dev: true 1680 | 1681 | /collect-v8-coverage@1.0.2: 1682 | resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} 1683 | dev: true 1684 | 1685 | /color-convert@1.9.3: 1686 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1687 | dependencies: 1688 | color-name: 1.1.3 1689 | 1690 | /color-convert@2.0.1: 1691 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1692 | engines: {node: '>=7.0.0'} 1693 | dependencies: 1694 | color-name: 1.1.4 1695 | dev: true 1696 | 1697 | /color-name@1.1.3: 1698 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1699 | 1700 | /color-name@1.1.4: 1701 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1702 | 1703 | /color-string@1.9.1: 1704 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 1705 | dependencies: 1706 | color-name: 1.1.4 1707 | simple-swizzle: 0.2.2 1708 | dev: false 1709 | 1710 | /color-support@1.1.3: 1711 | resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} 1712 | hasBin: true 1713 | dev: false 1714 | 1715 | /color@3.2.1: 1716 | resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} 1717 | dependencies: 1718 | color-convert: 1.9.3 1719 | color-string: 1.9.1 1720 | dev: false 1721 | 1722 | /colorspace@1.1.4: 1723 | resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} 1724 | dependencies: 1725 | color: 3.2.1 1726 | text-hex: 1.0.0 1727 | dev: false 1728 | 1729 | /combined-stream@1.0.8: 1730 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1731 | engines: {node: '>= 0.8'} 1732 | dependencies: 1733 | delayed-stream: 1.0.0 1734 | dev: true 1735 | 1736 | /component-emitter@1.3.0: 1737 | resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} 1738 | dev: true 1739 | 1740 | /concat-map@0.0.1: 1741 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1742 | 1743 | /console-control-strings@1.1.0: 1744 | resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} 1745 | dev: false 1746 | 1747 | /content-disposition@0.5.4: 1748 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 1749 | engines: {node: '>= 0.6'} 1750 | dependencies: 1751 | safe-buffer: 5.2.1 1752 | dev: false 1753 | 1754 | /content-type@1.0.5: 1755 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 1756 | engines: {node: '>= 0.6'} 1757 | dev: false 1758 | 1759 | /convert-source-map@1.9.0: 1760 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 1761 | dev: true 1762 | 1763 | /convert-source-map@2.0.0: 1764 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 1765 | dev: true 1766 | 1767 | /cookie-signature@1.0.6: 1768 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 1769 | dev: false 1770 | 1771 | /cookie@0.5.0: 1772 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 1773 | engines: {node: '>= 0.6'} 1774 | dev: false 1775 | 1776 | /cookiejar@2.1.4: 1777 | resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} 1778 | dev: true 1779 | 1780 | /create-require@1.1.1: 1781 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 1782 | dev: true 1783 | 1784 | /cross-spawn@7.0.3: 1785 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1786 | engines: {node: '>= 8'} 1787 | dependencies: 1788 | path-key: 3.1.1 1789 | shebang-command: 2.0.0 1790 | which: 2.0.2 1791 | dev: true 1792 | 1793 | /debug@2.6.9: 1794 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1795 | peerDependencies: 1796 | supports-color: '*' 1797 | peerDependenciesMeta: 1798 | supports-color: 1799 | optional: true 1800 | dependencies: 1801 | ms: 2.0.0 1802 | dev: false 1803 | 1804 | /debug@3.2.7(supports-color@5.5.0): 1805 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 1806 | peerDependencies: 1807 | supports-color: '*' 1808 | peerDependenciesMeta: 1809 | supports-color: 1810 | optional: true 1811 | dependencies: 1812 | ms: 2.1.3 1813 | supports-color: 5.5.0 1814 | dev: true 1815 | 1816 | /debug@4.3.4: 1817 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1818 | engines: {node: '>=6.0'} 1819 | peerDependencies: 1820 | supports-color: '*' 1821 | peerDependenciesMeta: 1822 | supports-color: 1823 | optional: true 1824 | dependencies: 1825 | ms: 2.1.2 1826 | 1827 | /dedent@0.7.0: 1828 | resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} 1829 | dev: true 1830 | 1831 | /deep-is@0.1.4: 1832 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1833 | dev: true 1834 | 1835 | /deepmerge@4.3.1: 1836 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1837 | engines: {node: '>=0.10.0'} 1838 | dev: true 1839 | 1840 | /delayed-stream@1.0.0: 1841 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1842 | engines: {node: '>=0.4.0'} 1843 | dev: true 1844 | 1845 | /delegates@1.0.0: 1846 | resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} 1847 | dev: false 1848 | 1849 | /depd@2.0.0: 1850 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 1851 | engines: {node: '>= 0.8'} 1852 | dev: false 1853 | 1854 | /destroy@1.2.0: 1855 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 1856 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1857 | dev: false 1858 | 1859 | /detect-libc@2.0.2: 1860 | resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} 1861 | engines: {node: '>=8'} 1862 | dev: false 1863 | 1864 | /detect-newline@3.1.0: 1865 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 1866 | engines: {node: '>=8'} 1867 | dev: true 1868 | 1869 | /dezalgo@1.0.4: 1870 | resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} 1871 | dependencies: 1872 | asap: 2.0.6 1873 | wrappy: 1.0.2 1874 | dev: true 1875 | 1876 | /diff-sequences@29.4.3: 1877 | resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} 1878 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1879 | dev: true 1880 | 1881 | /diff@4.0.2: 1882 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 1883 | engines: {node: '>=0.3.1'} 1884 | dev: true 1885 | 1886 | /dir-glob@3.0.1: 1887 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1888 | engines: {node: '>=8'} 1889 | dependencies: 1890 | path-type: 4.0.0 1891 | dev: true 1892 | 1893 | /doctrine@3.0.0: 1894 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1895 | engines: {node: '>=6.0.0'} 1896 | dependencies: 1897 | esutils: 2.0.3 1898 | dev: true 1899 | 1900 | /dotenv-cli@7.2.1: 1901 | resolution: {integrity: sha512-ODHbGTskqRtXAzZapDPvgNuDVQApu4oKX8lZW7Y0+9hKA6le1ZJlyRS687oU9FXjOVEDU/VFV6zI125HzhM1UQ==} 1902 | hasBin: true 1903 | dependencies: 1904 | cross-spawn: 7.0.3 1905 | dotenv: 16.3.1 1906 | dotenv-expand: 10.0.0 1907 | minimist: 1.2.8 1908 | dev: true 1909 | 1910 | /dotenv-expand@10.0.0: 1911 | resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} 1912 | engines: {node: '>=12'} 1913 | dev: true 1914 | 1915 | /dotenv@16.3.1: 1916 | resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} 1917 | engines: {node: '>=12'} 1918 | dev: true 1919 | 1920 | /ecdsa-sig-formatter@1.0.11: 1921 | resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} 1922 | dependencies: 1923 | safe-buffer: 5.2.1 1924 | dev: false 1925 | 1926 | /ee-first@1.1.1: 1927 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 1928 | dev: false 1929 | 1930 | /electron-to-chromium@1.4.468: 1931 | resolution: {integrity: sha512-6M1qyhaJOt7rQtNti1lBA0GwclPH+oKCmsra/hkcWs5INLxfXXD/dtdnaKUYQu/pjOBP/8Osoe4mAcNvvzoFag==} 1932 | dev: true 1933 | 1934 | /emittery@0.13.1: 1935 | resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} 1936 | engines: {node: '>=12'} 1937 | dev: true 1938 | 1939 | /emoji-regex@8.0.0: 1940 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1941 | 1942 | /enabled@2.0.0: 1943 | resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} 1944 | dev: false 1945 | 1946 | /encodeurl@1.0.2: 1947 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 1948 | engines: {node: '>= 0.8'} 1949 | dev: false 1950 | 1951 | /error-ex@1.3.2: 1952 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1953 | dependencies: 1954 | is-arrayish: 0.2.1 1955 | dev: true 1956 | 1957 | /escalade@3.1.1: 1958 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1959 | engines: {node: '>=6'} 1960 | dev: true 1961 | 1962 | /escape-html@1.0.3: 1963 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 1964 | dev: false 1965 | 1966 | /escape-string-regexp@1.0.5: 1967 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1968 | engines: {node: '>=0.8.0'} 1969 | dev: true 1970 | 1971 | /escape-string-regexp@2.0.0: 1972 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1973 | engines: {node: '>=8'} 1974 | dev: true 1975 | 1976 | /escape-string-regexp@4.0.0: 1977 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1978 | engines: {node: '>=10'} 1979 | dev: true 1980 | 1981 | /eslint-scope@7.2.1: 1982 | resolution: {integrity: sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==} 1983 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1984 | dependencies: 1985 | esrecurse: 4.3.0 1986 | estraverse: 5.3.0 1987 | dev: true 1988 | 1989 | /eslint-visitor-keys@3.4.1: 1990 | resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} 1991 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1992 | dev: true 1993 | 1994 | /eslint@8.45.0: 1995 | resolution: {integrity: sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==} 1996 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1997 | hasBin: true 1998 | dependencies: 1999 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) 2000 | '@eslint-community/regexpp': 4.5.1 2001 | '@eslint/eslintrc': 2.1.0 2002 | '@eslint/js': 8.44.0 2003 | '@humanwhocodes/config-array': 0.11.10 2004 | '@humanwhocodes/module-importer': 1.0.1 2005 | '@nodelib/fs.walk': 1.2.8 2006 | ajv: 6.12.6 2007 | chalk: 4.1.2 2008 | cross-spawn: 7.0.3 2009 | debug: 4.3.4 2010 | doctrine: 3.0.0 2011 | escape-string-regexp: 4.0.0 2012 | eslint-scope: 7.2.1 2013 | eslint-visitor-keys: 3.4.1 2014 | espree: 9.6.1 2015 | esquery: 1.5.0 2016 | esutils: 2.0.3 2017 | fast-deep-equal: 3.1.3 2018 | file-entry-cache: 6.0.1 2019 | find-up: 5.0.0 2020 | glob-parent: 6.0.2 2021 | globals: 13.20.0 2022 | graphemer: 1.4.0 2023 | ignore: 5.2.4 2024 | imurmurhash: 0.1.4 2025 | is-glob: 4.0.3 2026 | is-path-inside: 3.0.3 2027 | js-yaml: 4.1.0 2028 | json-stable-stringify-without-jsonify: 1.0.1 2029 | levn: 0.4.1 2030 | lodash.merge: 4.6.2 2031 | minimatch: 3.1.2 2032 | natural-compare: 1.4.0 2033 | optionator: 0.9.3 2034 | strip-ansi: 6.0.1 2035 | text-table: 0.2.0 2036 | transitivePeerDependencies: 2037 | - supports-color 2038 | dev: true 2039 | 2040 | /espree@9.6.1: 2041 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 2042 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2043 | dependencies: 2044 | acorn: 8.10.0 2045 | acorn-jsx: 5.3.2(acorn@8.10.0) 2046 | eslint-visitor-keys: 3.4.1 2047 | dev: true 2048 | 2049 | /esprima@4.0.1: 2050 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 2051 | engines: {node: '>=4'} 2052 | hasBin: true 2053 | dev: true 2054 | 2055 | /esquery@1.5.0: 2056 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 2057 | engines: {node: '>=0.10'} 2058 | dependencies: 2059 | estraverse: 5.3.0 2060 | dev: true 2061 | 2062 | /esrecurse@4.3.0: 2063 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 2064 | engines: {node: '>=4.0'} 2065 | dependencies: 2066 | estraverse: 5.3.0 2067 | dev: true 2068 | 2069 | /estraverse@5.3.0: 2070 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 2071 | engines: {node: '>=4.0'} 2072 | dev: true 2073 | 2074 | /esutils@2.0.3: 2075 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 2076 | engines: {node: '>=0.10.0'} 2077 | dev: true 2078 | 2079 | /etag@1.8.1: 2080 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 2081 | engines: {node: '>= 0.6'} 2082 | dev: false 2083 | 2084 | /execa@5.1.1: 2085 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 2086 | engines: {node: '>=10'} 2087 | dependencies: 2088 | cross-spawn: 7.0.3 2089 | get-stream: 6.0.1 2090 | human-signals: 2.1.0 2091 | is-stream: 2.0.1 2092 | merge-stream: 2.0.0 2093 | npm-run-path: 4.0.1 2094 | onetime: 5.1.2 2095 | signal-exit: 3.0.7 2096 | strip-final-newline: 2.0.0 2097 | dev: true 2098 | 2099 | /exit@0.1.2: 2100 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} 2101 | engines: {node: '>= 0.8.0'} 2102 | dev: true 2103 | 2104 | /expect@29.6.1: 2105 | resolution: {integrity: sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==} 2106 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2107 | dependencies: 2108 | '@jest/expect-utils': 29.6.1 2109 | '@types/node': 20.4.2 2110 | jest-get-type: 29.4.3 2111 | jest-matcher-utils: 29.6.1 2112 | jest-message-util: 29.6.1 2113 | jest-util: 29.6.1 2114 | dev: true 2115 | 2116 | /express@4.18.2: 2117 | resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} 2118 | engines: {node: '>= 0.10.0'} 2119 | dependencies: 2120 | accepts: 1.3.8 2121 | array-flatten: 1.1.1 2122 | body-parser: 1.20.1 2123 | content-disposition: 0.5.4 2124 | content-type: 1.0.5 2125 | cookie: 0.5.0 2126 | cookie-signature: 1.0.6 2127 | debug: 2.6.9 2128 | depd: 2.0.0 2129 | encodeurl: 1.0.2 2130 | escape-html: 1.0.3 2131 | etag: 1.8.1 2132 | finalhandler: 1.2.0 2133 | fresh: 0.5.2 2134 | http-errors: 2.0.0 2135 | merge-descriptors: 1.0.1 2136 | methods: 1.1.2 2137 | on-finished: 2.4.1 2138 | parseurl: 1.3.3 2139 | path-to-regexp: 0.1.7 2140 | proxy-addr: 2.0.7 2141 | qs: 6.11.0 2142 | range-parser: 1.2.1 2143 | safe-buffer: 5.2.1 2144 | send: 0.18.0 2145 | serve-static: 1.15.0 2146 | setprototypeof: 1.2.0 2147 | statuses: 2.0.1 2148 | type-is: 1.6.18 2149 | utils-merge: 1.0.1 2150 | vary: 1.1.2 2151 | transitivePeerDependencies: 2152 | - supports-color 2153 | dev: false 2154 | 2155 | /fast-deep-equal@3.1.3: 2156 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 2157 | dev: true 2158 | 2159 | /fast-glob@3.3.0: 2160 | resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==} 2161 | engines: {node: '>=8.6.0'} 2162 | dependencies: 2163 | '@nodelib/fs.stat': 2.0.5 2164 | '@nodelib/fs.walk': 1.2.8 2165 | glob-parent: 5.1.2 2166 | merge2: 1.4.1 2167 | micromatch: 4.0.5 2168 | dev: true 2169 | 2170 | /fast-json-stable-stringify@2.1.0: 2171 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 2172 | dev: true 2173 | 2174 | /fast-levenshtein@2.0.6: 2175 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 2176 | dev: true 2177 | 2178 | /fast-safe-stringify@2.1.1: 2179 | resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} 2180 | dev: true 2181 | 2182 | /fastq@1.15.0: 2183 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 2184 | dependencies: 2185 | reusify: 1.0.4 2186 | dev: true 2187 | 2188 | /fb-watchman@2.0.2: 2189 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 2190 | dependencies: 2191 | bser: 2.1.1 2192 | dev: true 2193 | 2194 | /fecha@4.2.3: 2195 | resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} 2196 | dev: false 2197 | 2198 | /file-entry-cache@6.0.1: 2199 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 2200 | engines: {node: ^10.12.0 || >=12.0.0} 2201 | dependencies: 2202 | flat-cache: 3.0.4 2203 | dev: true 2204 | 2205 | /fill-range@7.0.1: 2206 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 2207 | engines: {node: '>=8'} 2208 | dependencies: 2209 | to-regex-range: 5.0.1 2210 | dev: true 2211 | 2212 | /finalhandler@1.2.0: 2213 | resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} 2214 | engines: {node: '>= 0.8'} 2215 | dependencies: 2216 | debug: 2.6.9 2217 | encodeurl: 1.0.2 2218 | escape-html: 1.0.3 2219 | on-finished: 2.4.1 2220 | parseurl: 1.3.3 2221 | statuses: 2.0.1 2222 | unpipe: 1.0.0 2223 | transitivePeerDependencies: 2224 | - supports-color 2225 | dev: false 2226 | 2227 | /find-up@4.1.0: 2228 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 2229 | engines: {node: '>=8'} 2230 | dependencies: 2231 | locate-path: 5.0.0 2232 | path-exists: 4.0.0 2233 | dev: true 2234 | 2235 | /find-up@5.0.0: 2236 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 2237 | engines: {node: '>=10'} 2238 | dependencies: 2239 | locate-path: 6.0.0 2240 | path-exists: 4.0.0 2241 | dev: true 2242 | 2243 | /flat-cache@3.0.4: 2244 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 2245 | engines: {node: ^10.12.0 || >=12.0.0} 2246 | dependencies: 2247 | flatted: 3.2.7 2248 | rimraf: 3.0.2 2249 | dev: true 2250 | 2251 | /flatted@3.2.7: 2252 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 2253 | dev: true 2254 | 2255 | /fn.name@1.1.0: 2256 | resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} 2257 | dev: false 2258 | 2259 | /form-data@4.0.0: 2260 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 2261 | engines: {node: '>= 6'} 2262 | dependencies: 2263 | asynckit: 0.4.0 2264 | combined-stream: 1.0.8 2265 | mime-types: 2.1.35 2266 | dev: true 2267 | 2268 | /formidable@2.1.2: 2269 | resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} 2270 | dependencies: 2271 | dezalgo: 1.0.4 2272 | hexoid: 1.0.0 2273 | once: 1.4.0 2274 | qs: 6.11.0 2275 | dev: true 2276 | 2277 | /forwarded@0.2.0: 2278 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 2279 | engines: {node: '>= 0.6'} 2280 | dev: false 2281 | 2282 | /fresh@0.5.2: 2283 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 2284 | engines: {node: '>= 0.6'} 2285 | dev: false 2286 | 2287 | /fs-minipass@2.1.0: 2288 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} 2289 | engines: {node: '>= 8'} 2290 | dependencies: 2291 | minipass: 3.3.6 2292 | dev: false 2293 | 2294 | /fs.realpath@1.0.0: 2295 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 2296 | 2297 | /fsevents@2.3.2: 2298 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 2299 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2300 | os: [darwin] 2301 | requiresBuild: true 2302 | dev: true 2303 | optional: true 2304 | 2305 | /function-bind@1.1.1: 2306 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 2307 | 2308 | /gauge@3.0.2: 2309 | resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} 2310 | engines: {node: '>=10'} 2311 | dependencies: 2312 | aproba: 2.0.0 2313 | color-support: 1.1.3 2314 | console-control-strings: 1.1.0 2315 | has-unicode: 2.0.1 2316 | object-assign: 4.1.1 2317 | signal-exit: 3.0.7 2318 | string-width: 4.2.3 2319 | strip-ansi: 6.0.1 2320 | wide-align: 1.1.5 2321 | dev: false 2322 | 2323 | /gensync@1.0.0-beta.2: 2324 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 2325 | engines: {node: '>=6.9.0'} 2326 | dev: true 2327 | 2328 | /get-caller-file@2.0.5: 2329 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 2330 | engines: {node: 6.* || 8.* || >= 10.*} 2331 | dev: true 2332 | 2333 | /get-intrinsic@1.2.1: 2334 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 2335 | dependencies: 2336 | function-bind: 1.1.1 2337 | has: 1.0.3 2338 | has-proto: 1.0.1 2339 | has-symbols: 1.0.3 2340 | 2341 | /get-package-type@0.1.0: 2342 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 2343 | engines: {node: '>=8.0.0'} 2344 | dev: true 2345 | 2346 | /get-stream@6.0.1: 2347 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 2348 | engines: {node: '>=10'} 2349 | dev: true 2350 | 2351 | /glob-parent@5.1.2: 2352 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 2353 | engines: {node: '>= 6'} 2354 | dependencies: 2355 | is-glob: 4.0.3 2356 | dev: true 2357 | 2358 | /glob-parent@6.0.2: 2359 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 2360 | engines: {node: '>=10.13.0'} 2361 | dependencies: 2362 | is-glob: 4.0.3 2363 | dev: true 2364 | 2365 | /glob@7.2.3: 2366 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 2367 | dependencies: 2368 | fs.realpath: 1.0.0 2369 | inflight: 1.0.6 2370 | inherits: 2.0.4 2371 | minimatch: 3.1.2 2372 | once: 1.4.0 2373 | path-is-absolute: 1.0.1 2374 | 2375 | /globals@11.12.0: 2376 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 2377 | engines: {node: '>=4'} 2378 | dev: true 2379 | 2380 | /globals@13.20.0: 2381 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 2382 | engines: {node: '>=8'} 2383 | dependencies: 2384 | type-fest: 0.20.2 2385 | dev: true 2386 | 2387 | /globby@11.1.0: 2388 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 2389 | engines: {node: '>=10'} 2390 | dependencies: 2391 | array-union: 2.1.0 2392 | dir-glob: 3.0.1 2393 | fast-glob: 3.3.0 2394 | ignore: 5.2.4 2395 | merge2: 1.4.1 2396 | slash: 3.0.0 2397 | dev: true 2398 | 2399 | /graceful-fs@4.2.11: 2400 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 2401 | dev: true 2402 | 2403 | /graphemer@1.4.0: 2404 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 2405 | dev: true 2406 | 2407 | /has-flag@3.0.0: 2408 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 2409 | engines: {node: '>=4'} 2410 | dev: true 2411 | 2412 | /has-flag@4.0.0: 2413 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 2414 | engines: {node: '>=8'} 2415 | dev: true 2416 | 2417 | /has-proto@1.0.1: 2418 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 2419 | engines: {node: '>= 0.4'} 2420 | 2421 | /has-symbols@1.0.3: 2422 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 2423 | engines: {node: '>= 0.4'} 2424 | 2425 | /has-unicode@2.0.1: 2426 | resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} 2427 | dev: false 2428 | 2429 | /has@1.0.3: 2430 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 2431 | engines: {node: '>= 0.4.0'} 2432 | dependencies: 2433 | function-bind: 1.1.1 2434 | 2435 | /hexoid@1.0.0: 2436 | resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} 2437 | engines: {node: '>=8'} 2438 | dev: true 2439 | 2440 | /html-escaper@2.0.2: 2441 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 2442 | dev: true 2443 | 2444 | /http-errors@2.0.0: 2445 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 2446 | engines: {node: '>= 0.8'} 2447 | dependencies: 2448 | depd: 2.0.0 2449 | inherits: 2.0.4 2450 | setprototypeof: 1.2.0 2451 | statuses: 2.0.1 2452 | toidentifier: 1.0.1 2453 | dev: false 2454 | 2455 | /http-status-codes@2.2.0: 2456 | resolution: {integrity: sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng==} 2457 | dev: false 2458 | 2459 | /https-proxy-agent@5.0.1: 2460 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 2461 | engines: {node: '>= 6'} 2462 | dependencies: 2463 | agent-base: 6.0.2 2464 | debug: 4.3.4 2465 | transitivePeerDependencies: 2466 | - supports-color 2467 | dev: false 2468 | 2469 | /human-signals@2.1.0: 2470 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 2471 | engines: {node: '>=10.17.0'} 2472 | dev: true 2473 | 2474 | /iconv-lite@0.4.24: 2475 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 2476 | engines: {node: '>=0.10.0'} 2477 | dependencies: 2478 | safer-buffer: 2.1.2 2479 | dev: false 2480 | 2481 | /ignore-by-default@1.0.1: 2482 | resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} 2483 | dev: true 2484 | 2485 | /ignore@5.2.4: 2486 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 2487 | engines: {node: '>= 4'} 2488 | dev: true 2489 | 2490 | /import-fresh@3.3.0: 2491 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 2492 | engines: {node: '>=6'} 2493 | dependencies: 2494 | parent-module: 1.0.1 2495 | resolve-from: 4.0.0 2496 | dev: true 2497 | 2498 | /import-local@3.1.0: 2499 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 2500 | engines: {node: '>=8'} 2501 | hasBin: true 2502 | dependencies: 2503 | pkg-dir: 4.2.0 2504 | resolve-cwd: 3.0.0 2505 | dev: true 2506 | 2507 | /imurmurhash@0.1.4: 2508 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 2509 | engines: {node: '>=0.8.19'} 2510 | dev: true 2511 | 2512 | /inflight@1.0.6: 2513 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 2514 | dependencies: 2515 | once: 1.4.0 2516 | wrappy: 1.0.2 2517 | 2518 | /inherits@2.0.4: 2519 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2520 | 2521 | /inversify-express-utils@6.4.3: 2522 | resolution: {integrity: sha512-7YvEXeZ912N9hAQ9x0+q9zGV670I1imaIQJzzaBXdPQQiodPEGCO6sq53ODczgyP6M6x4kkQNsu9MlzQbVCtAQ==} 2523 | dependencies: 2524 | express: 4.18.2 2525 | http-status-codes: 2.2.0 2526 | inversify: 6.0.1 2527 | transitivePeerDependencies: 2528 | - supports-color 2529 | dev: false 2530 | 2531 | /inversify@6.0.1: 2532 | resolution: {integrity: sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==} 2533 | dev: false 2534 | 2535 | /ip@2.0.0: 2536 | resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} 2537 | dev: false 2538 | 2539 | /ipaddr.js@1.9.1: 2540 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 2541 | engines: {node: '>= 0.10'} 2542 | dev: false 2543 | 2544 | /is-arrayish@0.2.1: 2545 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 2546 | dev: true 2547 | 2548 | /is-arrayish@0.3.2: 2549 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 2550 | dev: false 2551 | 2552 | /is-binary-path@2.1.0: 2553 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 2554 | engines: {node: '>=8'} 2555 | dependencies: 2556 | binary-extensions: 2.2.0 2557 | dev: true 2558 | 2559 | /is-core-module@2.12.1: 2560 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} 2561 | dependencies: 2562 | has: 1.0.3 2563 | dev: true 2564 | 2565 | /is-extglob@2.1.1: 2566 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2567 | engines: {node: '>=0.10.0'} 2568 | dev: true 2569 | 2570 | /is-fullwidth-code-point@3.0.0: 2571 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 2572 | engines: {node: '>=8'} 2573 | 2574 | /is-generator-fn@2.1.0: 2575 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 2576 | engines: {node: '>=6'} 2577 | dev: true 2578 | 2579 | /is-glob@4.0.3: 2580 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2581 | engines: {node: '>=0.10.0'} 2582 | dependencies: 2583 | is-extglob: 2.1.1 2584 | dev: true 2585 | 2586 | /is-number@7.0.0: 2587 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2588 | engines: {node: '>=0.12.0'} 2589 | dev: true 2590 | 2591 | /is-path-inside@3.0.3: 2592 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 2593 | engines: {node: '>=8'} 2594 | dev: true 2595 | 2596 | /is-stream@2.0.1: 2597 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 2598 | engines: {node: '>=8'} 2599 | 2600 | /isexe@2.0.0: 2601 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2602 | dev: true 2603 | 2604 | /istanbul-lib-coverage@3.2.0: 2605 | resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} 2606 | engines: {node: '>=8'} 2607 | dev: true 2608 | 2609 | /istanbul-lib-instrument@5.2.1: 2610 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} 2611 | engines: {node: '>=8'} 2612 | dependencies: 2613 | '@babel/core': 7.22.9 2614 | '@babel/parser': 7.22.7 2615 | '@istanbuljs/schema': 0.1.3 2616 | istanbul-lib-coverage: 3.2.0 2617 | semver: 6.3.1 2618 | transitivePeerDependencies: 2619 | - supports-color 2620 | dev: true 2621 | 2622 | /istanbul-lib-report@3.0.0: 2623 | resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} 2624 | engines: {node: '>=8'} 2625 | dependencies: 2626 | istanbul-lib-coverage: 3.2.0 2627 | make-dir: 3.1.0 2628 | supports-color: 7.2.0 2629 | dev: true 2630 | 2631 | /istanbul-lib-source-maps@4.0.1: 2632 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 2633 | engines: {node: '>=10'} 2634 | dependencies: 2635 | debug: 4.3.4 2636 | istanbul-lib-coverage: 3.2.0 2637 | source-map: 0.6.1 2638 | transitivePeerDependencies: 2639 | - supports-color 2640 | dev: true 2641 | 2642 | /istanbul-reports@3.1.5: 2643 | resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} 2644 | engines: {node: '>=8'} 2645 | dependencies: 2646 | html-escaper: 2.0.2 2647 | istanbul-lib-report: 3.0.0 2648 | dev: true 2649 | 2650 | /jest-changed-files@29.5.0: 2651 | resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} 2652 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2653 | dependencies: 2654 | execa: 5.1.1 2655 | p-limit: 3.1.0 2656 | dev: true 2657 | 2658 | /jest-circus@29.6.1: 2659 | resolution: {integrity: sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==} 2660 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2661 | dependencies: 2662 | '@jest/environment': 29.6.1 2663 | '@jest/expect': 29.6.1 2664 | '@jest/test-result': 29.6.1 2665 | '@jest/types': 29.6.1 2666 | '@types/node': 20.4.2 2667 | chalk: 4.1.2 2668 | co: 4.6.0 2669 | dedent: 0.7.0 2670 | is-generator-fn: 2.1.0 2671 | jest-each: 29.6.1 2672 | jest-matcher-utils: 29.6.1 2673 | jest-message-util: 29.6.1 2674 | jest-runtime: 29.6.1 2675 | jest-snapshot: 29.6.1 2676 | jest-util: 29.6.1 2677 | p-limit: 3.1.0 2678 | pretty-format: 29.6.1 2679 | pure-rand: 6.0.2 2680 | slash: 3.0.0 2681 | stack-utils: 2.0.6 2682 | transitivePeerDependencies: 2683 | - supports-color 2684 | dev: true 2685 | 2686 | /jest-cli@29.6.1(@types/node@20.4.2)(ts-node@10.9.1): 2687 | resolution: {integrity: sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==} 2688 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2689 | hasBin: true 2690 | peerDependencies: 2691 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 2692 | peerDependenciesMeta: 2693 | node-notifier: 2694 | optional: true 2695 | dependencies: 2696 | '@jest/core': 29.6.1(ts-node@10.9.1) 2697 | '@jest/test-result': 29.6.1 2698 | '@jest/types': 29.6.1 2699 | chalk: 4.1.2 2700 | exit: 0.1.2 2701 | graceful-fs: 4.2.11 2702 | import-local: 3.1.0 2703 | jest-config: 29.6.1(@types/node@20.4.2)(ts-node@10.9.1) 2704 | jest-util: 29.6.1 2705 | jest-validate: 29.6.1 2706 | prompts: 2.4.2 2707 | yargs: 17.7.2 2708 | transitivePeerDependencies: 2709 | - '@types/node' 2710 | - supports-color 2711 | - ts-node 2712 | dev: true 2713 | 2714 | /jest-config@29.6.1(@types/node@20.4.2)(ts-node@10.9.1): 2715 | resolution: {integrity: sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==} 2716 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2717 | peerDependencies: 2718 | '@types/node': '*' 2719 | ts-node: '>=9.0.0' 2720 | peerDependenciesMeta: 2721 | '@types/node': 2722 | optional: true 2723 | ts-node: 2724 | optional: true 2725 | dependencies: 2726 | '@babel/core': 7.22.9 2727 | '@jest/test-sequencer': 29.6.1 2728 | '@jest/types': 29.6.1 2729 | '@types/node': 20.4.2 2730 | babel-jest: 29.6.1(@babel/core@7.22.9) 2731 | chalk: 4.1.2 2732 | ci-info: 3.8.0 2733 | deepmerge: 4.3.1 2734 | glob: 7.2.3 2735 | graceful-fs: 4.2.11 2736 | jest-circus: 29.6.1 2737 | jest-environment-node: 29.6.1 2738 | jest-get-type: 29.4.3 2739 | jest-regex-util: 29.4.3 2740 | jest-resolve: 29.6.1 2741 | jest-runner: 29.6.1 2742 | jest-util: 29.6.1 2743 | jest-validate: 29.6.1 2744 | micromatch: 4.0.5 2745 | parse-json: 5.2.0 2746 | pretty-format: 29.6.1 2747 | slash: 3.0.0 2748 | strip-json-comments: 3.1.1 2749 | ts-node: 10.9.1(@types/node@20.4.2)(typescript@5.1.6) 2750 | transitivePeerDependencies: 2751 | - supports-color 2752 | dev: true 2753 | 2754 | /jest-diff@29.6.1: 2755 | resolution: {integrity: sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==} 2756 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2757 | dependencies: 2758 | chalk: 4.1.2 2759 | diff-sequences: 29.4.3 2760 | jest-get-type: 29.4.3 2761 | pretty-format: 29.6.1 2762 | dev: true 2763 | 2764 | /jest-docblock@29.4.3: 2765 | resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} 2766 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2767 | dependencies: 2768 | detect-newline: 3.1.0 2769 | dev: true 2770 | 2771 | /jest-each@29.6.1: 2772 | resolution: {integrity: sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==} 2773 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2774 | dependencies: 2775 | '@jest/types': 29.6.1 2776 | chalk: 4.1.2 2777 | jest-get-type: 29.4.3 2778 | jest-util: 29.6.1 2779 | pretty-format: 29.6.1 2780 | dev: true 2781 | 2782 | /jest-environment-node@29.6.1: 2783 | resolution: {integrity: sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==} 2784 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2785 | dependencies: 2786 | '@jest/environment': 29.6.1 2787 | '@jest/fake-timers': 29.6.1 2788 | '@jest/types': 29.6.1 2789 | '@types/node': 20.4.2 2790 | jest-mock: 29.6.1 2791 | jest-util: 29.6.1 2792 | dev: true 2793 | 2794 | /jest-get-type@29.4.3: 2795 | resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} 2796 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2797 | dev: true 2798 | 2799 | /jest-haste-map@29.6.1: 2800 | resolution: {integrity: sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==} 2801 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2802 | dependencies: 2803 | '@jest/types': 29.6.1 2804 | '@types/graceful-fs': 4.1.6 2805 | '@types/node': 20.4.2 2806 | anymatch: 3.1.3 2807 | fb-watchman: 2.0.2 2808 | graceful-fs: 4.2.11 2809 | jest-regex-util: 29.4.3 2810 | jest-util: 29.6.1 2811 | jest-worker: 29.6.1 2812 | micromatch: 4.0.5 2813 | walker: 1.0.8 2814 | optionalDependencies: 2815 | fsevents: 2.3.2 2816 | dev: true 2817 | 2818 | /jest-leak-detector@29.6.1: 2819 | resolution: {integrity: sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==} 2820 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2821 | dependencies: 2822 | jest-get-type: 29.4.3 2823 | pretty-format: 29.6.1 2824 | dev: true 2825 | 2826 | /jest-matcher-utils@29.6.1: 2827 | resolution: {integrity: sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==} 2828 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2829 | dependencies: 2830 | chalk: 4.1.2 2831 | jest-diff: 29.6.1 2832 | jest-get-type: 29.4.3 2833 | pretty-format: 29.6.1 2834 | dev: true 2835 | 2836 | /jest-message-util@29.6.1: 2837 | resolution: {integrity: sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==} 2838 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2839 | dependencies: 2840 | '@babel/code-frame': 7.22.5 2841 | '@jest/types': 29.6.1 2842 | '@types/stack-utils': 2.0.1 2843 | chalk: 4.1.2 2844 | graceful-fs: 4.2.11 2845 | micromatch: 4.0.5 2846 | pretty-format: 29.6.1 2847 | slash: 3.0.0 2848 | stack-utils: 2.0.6 2849 | dev: true 2850 | 2851 | /jest-mock@29.6.1: 2852 | resolution: {integrity: sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==} 2853 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2854 | dependencies: 2855 | '@jest/types': 29.6.1 2856 | '@types/node': 20.4.2 2857 | jest-util: 29.6.1 2858 | dev: true 2859 | 2860 | /jest-pnp-resolver@1.2.3(jest-resolve@29.6.1): 2861 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 2862 | engines: {node: '>=6'} 2863 | peerDependencies: 2864 | jest-resolve: '*' 2865 | peerDependenciesMeta: 2866 | jest-resolve: 2867 | optional: true 2868 | dependencies: 2869 | jest-resolve: 29.6.1 2870 | dev: true 2871 | 2872 | /jest-regex-util@29.4.3: 2873 | resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} 2874 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2875 | dev: true 2876 | 2877 | /jest-resolve-dependencies@29.6.1: 2878 | resolution: {integrity: sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==} 2879 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2880 | dependencies: 2881 | jest-regex-util: 29.4.3 2882 | jest-snapshot: 29.6.1 2883 | transitivePeerDependencies: 2884 | - supports-color 2885 | dev: true 2886 | 2887 | /jest-resolve@29.6.1: 2888 | resolution: {integrity: sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==} 2889 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2890 | dependencies: 2891 | chalk: 4.1.2 2892 | graceful-fs: 4.2.11 2893 | jest-haste-map: 29.6.1 2894 | jest-pnp-resolver: 1.2.3(jest-resolve@29.6.1) 2895 | jest-util: 29.6.1 2896 | jest-validate: 29.6.1 2897 | resolve: 1.22.2 2898 | resolve.exports: 2.0.2 2899 | slash: 3.0.0 2900 | dev: true 2901 | 2902 | /jest-runner@29.6.1: 2903 | resolution: {integrity: sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==} 2904 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2905 | dependencies: 2906 | '@jest/console': 29.6.1 2907 | '@jest/environment': 29.6.1 2908 | '@jest/test-result': 29.6.1 2909 | '@jest/transform': 29.6.1 2910 | '@jest/types': 29.6.1 2911 | '@types/node': 20.4.2 2912 | chalk: 4.1.2 2913 | emittery: 0.13.1 2914 | graceful-fs: 4.2.11 2915 | jest-docblock: 29.4.3 2916 | jest-environment-node: 29.6.1 2917 | jest-haste-map: 29.6.1 2918 | jest-leak-detector: 29.6.1 2919 | jest-message-util: 29.6.1 2920 | jest-resolve: 29.6.1 2921 | jest-runtime: 29.6.1 2922 | jest-util: 29.6.1 2923 | jest-watcher: 29.6.1 2924 | jest-worker: 29.6.1 2925 | p-limit: 3.1.0 2926 | source-map-support: 0.5.13 2927 | transitivePeerDependencies: 2928 | - supports-color 2929 | dev: true 2930 | 2931 | /jest-runtime@29.6.1: 2932 | resolution: {integrity: sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==} 2933 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2934 | dependencies: 2935 | '@jest/environment': 29.6.1 2936 | '@jest/fake-timers': 29.6.1 2937 | '@jest/globals': 29.6.1 2938 | '@jest/source-map': 29.6.0 2939 | '@jest/test-result': 29.6.1 2940 | '@jest/transform': 29.6.1 2941 | '@jest/types': 29.6.1 2942 | '@types/node': 20.4.2 2943 | chalk: 4.1.2 2944 | cjs-module-lexer: 1.2.3 2945 | collect-v8-coverage: 1.0.2 2946 | glob: 7.2.3 2947 | graceful-fs: 4.2.11 2948 | jest-haste-map: 29.6.1 2949 | jest-message-util: 29.6.1 2950 | jest-mock: 29.6.1 2951 | jest-regex-util: 29.4.3 2952 | jest-resolve: 29.6.1 2953 | jest-snapshot: 29.6.1 2954 | jest-util: 29.6.1 2955 | slash: 3.0.0 2956 | strip-bom: 4.0.0 2957 | transitivePeerDependencies: 2958 | - supports-color 2959 | dev: true 2960 | 2961 | /jest-snapshot@29.6.1: 2962 | resolution: {integrity: sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==} 2963 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2964 | dependencies: 2965 | '@babel/core': 7.22.9 2966 | '@babel/generator': 7.22.9 2967 | '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) 2968 | '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.9) 2969 | '@babel/types': 7.22.5 2970 | '@jest/expect-utils': 29.6.1 2971 | '@jest/transform': 29.6.1 2972 | '@jest/types': 29.6.1 2973 | '@types/prettier': 2.7.3 2974 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.9) 2975 | chalk: 4.1.2 2976 | expect: 29.6.1 2977 | graceful-fs: 4.2.11 2978 | jest-diff: 29.6.1 2979 | jest-get-type: 29.4.3 2980 | jest-matcher-utils: 29.6.1 2981 | jest-message-util: 29.6.1 2982 | jest-util: 29.6.1 2983 | natural-compare: 1.4.0 2984 | pretty-format: 29.6.1 2985 | semver: 7.5.4 2986 | transitivePeerDependencies: 2987 | - supports-color 2988 | dev: true 2989 | 2990 | /jest-util@29.6.1: 2991 | resolution: {integrity: sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==} 2992 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2993 | dependencies: 2994 | '@jest/types': 29.6.1 2995 | '@types/node': 20.4.2 2996 | chalk: 4.1.2 2997 | ci-info: 3.8.0 2998 | graceful-fs: 4.2.11 2999 | picomatch: 2.3.1 3000 | dev: true 3001 | 3002 | /jest-validate@29.6.1: 3003 | resolution: {integrity: sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==} 3004 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 3005 | dependencies: 3006 | '@jest/types': 29.6.1 3007 | camelcase: 6.3.0 3008 | chalk: 4.1.2 3009 | jest-get-type: 29.4.3 3010 | leven: 3.1.0 3011 | pretty-format: 29.6.1 3012 | dev: true 3013 | 3014 | /jest-watcher@29.6.1: 3015 | resolution: {integrity: sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==} 3016 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 3017 | dependencies: 3018 | '@jest/test-result': 29.6.1 3019 | '@jest/types': 29.6.1 3020 | '@types/node': 20.4.2 3021 | ansi-escapes: 4.3.2 3022 | chalk: 4.1.2 3023 | emittery: 0.13.1 3024 | jest-util: 29.6.1 3025 | string-length: 4.0.2 3026 | dev: true 3027 | 3028 | /jest-worker@29.6.1: 3029 | resolution: {integrity: sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==} 3030 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 3031 | dependencies: 3032 | '@types/node': 20.4.2 3033 | jest-util: 29.6.1 3034 | merge-stream: 2.0.0 3035 | supports-color: 8.1.1 3036 | dev: true 3037 | 3038 | /jest@29.6.1(@types/node@20.4.2)(ts-node@10.9.1): 3039 | resolution: {integrity: sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==} 3040 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 3041 | hasBin: true 3042 | peerDependencies: 3043 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 3044 | peerDependenciesMeta: 3045 | node-notifier: 3046 | optional: true 3047 | dependencies: 3048 | '@jest/core': 29.6.1(ts-node@10.9.1) 3049 | '@jest/types': 29.6.1 3050 | import-local: 3.1.0 3051 | jest-cli: 29.6.1(@types/node@20.4.2)(ts-node@10.9.1) 3052 | transitivePeerDependencies: 3053 | - '@types/node' 3054 | - supports-color 3055 | - ts-node 3056 | dev: true 3057 | 3058 | /js-tokens@4.0.0: 3059 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 3060 | dev: true 3061 | 3062 | /js-yaml@3.14.1: 3063 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 3064 | hasBin: true 3065 | dependencies: 3066 | argparse: 1.0.10 3067 | esprima: 4.0.1 3068 | dev: true 3069 | 3070 | /js-yaml@4.1.0: 3071 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 3072 | hasBin: true 3073 | dependencies: 3074 | argparse: 2.0.1 3075 | dev: true 3076 | 3077 | /jsesc@2.5.2: 3078 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 3079 | engines: {node: '>=4'} 3080 | hasBin: true 3081 | dev: true 3082 | 3083 | /json-parse-even-better-errors@2.3.1: 3084 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 3085 | dev: true 3086 | 3087 | /json-schema-traverse@0.4.1: 3088 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 3089 | dev: true 3090 | 3091 | /json-stable-stringify-without-jsonify@1.0.1: 3092 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 3093 | dev: true 3094 | 3095 | /json5@2.2.3: 3096 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 3097 | engines: {node: '>=6'} 3098 | hasBin: true 3099 | dev: true 3100 | 3101 | /jsonwebtoken@9.0.1: 3102 | resolution: {integrity: sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==} 3103 | engines: {node: '>=12', npm: '>=6'} 3104 | dependencies: 3105 | jws: 3.2.2 3106 | lodash: 4.17.21 3107 | ms: 2.1.3 3108 | semver: 7.5.4 3109 | dev: false 3110 | 3111 | /jwa@1.4.1: 3112 | resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} 3113 | dependencies: 3114 | buffer-equal-constant-time: 1.0.1 3115 | ecdsa-sig-formatter: 1.0.11 3116 | safe-buffer: 5.2.1 3117 | dev: false 3118 | 3119 | /jws@3.2.2: 3120 | resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} 3121 | dependencies: 3122 | jwa: 1.4.1 3123 | safe-buffer: 5.2.1 3124 | dev: false 3125 | 3126 | /kareem@2.5.1: 3127 | resolution: {integrity: sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==} 3128 | engines: {node: '>=12.0.0'} 3129 | dev: false 3130 | 3131 | /kleur@3.0.3: 3132 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 3133 | engines: {node: '>=6'} 3134 | dev: true 3135 | 3136 | /kuler@2.0.0: 3137 | resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} 3138 | dev: false 3139 | 3140 | /leven@3.1.0: 3141 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 3142 | engines: {node: '>=6'} 3143 | dev: true 3144 | 3145 | /levn@0.4.1: 3146 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 3147 | engines: {node: '>= 0.8.0'} 3148 | dependencies: 3149 | prelude-ls: 1.2.1 3150 | type-check: 0.4.0 3151 | dev: true 3152 | 3153 | /libphonenumber-js@1.10.37: 3154 | resolution: {integrity: sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==} 3155 | dev: false 3156 | 3157 | /lines-and-columns@1.2.4: 3158 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 3159 | dev: true 3160 | 3161 | /locate-path@5.0.0: 3162 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 3163 | engines: {node: '>=8'} 3164 | dependencies: 3165 | p-locate: 4.1.0 3166 | dev: true 3167 | 3168 | /locate-path@6.0.0: 3169 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 3170 | engines: {node: '>=10'} 3171 | dependencies: 3172 | p-locate: 5.0.0 3173 | dev: true 3174 | 3175 | /lodash.memoize@4.1.2: 3176 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 3177 | dev: true 3178 | 3179 | /lodash.merge@4.6.2: 3180 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 3181 | dev: true 3182 | 3183 | /lodash@4.17.21: 3184 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 3185 | dev: false 3186 | 3187 | /logform@2.5.1: 3188 | resolution: {integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==} 3189 | dependencies: 3190 | '@colors/colors': 1.5.0 3191 | '@types/triple-beam': 1.3.2 3192 | fecha: 4.2.3 3193 | ms: 2.1.3 3194 | safe-stable-stringify: 2.4.3 3195 | triple-beam: 1.4.1 3196 | dev: false 3197 | 3198 | /loglevel@1.8.1: 3199 | resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} 3200 | engines: {node: '>= 0.6.0'} 3201 | dev: false 3202 | 3203 | /lru-cache@5.1.1: 3204 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 3205 | dependencies: 3206 | yallist: 3.1.1 3207 | dev: true 3208 | 3209 | /lru-cache@6.0.0: 3210 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 3211 | engines: {node: '>=10'} 3212 | dependencies: 3213 | yallist: 4.0.0 3214 | 3215 | /make-dir@3.1.0: 3216 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 3217 | engines: {node: '>=8'} 3218 | dependencies: 3219 | semver: 6.3.1 3220 | 3221 | /make-error@1.3.6: 3222 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 3223 | dev: true 3224 | 3225 | /makeerror@1.0.12: 3226 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 3227 | dependencies: 3228 | tmpl: 1.0.5 3229 | dev: true 3230 | 3231 | /media-typer@0.3.0: 3232 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 3233 | engines: {node: '>= 0.6'} 3234 | dev: false 3235 | 3236 | /memory-pager@1.5.0: 3237 | resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} 3238 | dev: false 3239 | optional: true 3240 | 3241 | /merge-descriptors@1.0.1: 3242 | resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} 3243 | dev: false 3244 | 3245 | /merge-stream@2.0.0: 3246 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 3247 | dev: true 3248 | 3249 | /merge2@1.4.1: 3250 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 3251 | engines: {node: '>= 8'} 3252 | dev: true 3253 | 3254 | /methods@1.1.2: 3255 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 3256 | engines: {node: '>= 0.6'} 3257 | 3258 | /micromatch@4.0.5: 3259 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 3260 | engines: {node: '>=8.6'} 3261 | dependencies: 3262 | braces: 3.0.2 3263 | picomatch: 2.3.1 3264 | dev: true 3265 | 3266 | /mime-db@1.52.0: 3267 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 3268 | engines: {node: '>= 0.6'} 3269 | 3270 | /mime-types@2.1.35: 3271 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 3272 | engines: {node: '>= 0.6'} 3273 | dependencies: 3274 | mime-db: 1.52.0 3275 | 3276 | /mime@1.6.0: 3277 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 3278 | engines: {node: '>=4'} 3279 | hasBin: true 3280 | dev: false 3281 | 3282 | /mime@2.6.0: 3283 | resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} 3284 | engines: {node: '>=4.0.0'} 3285 | hasBin: true 3286 | dev: true 3287 | 3288 | /mimic-fn@2.1.0: 3289 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 3290 | engines: {node: '>=6'} 3291 | dev: true 3292 | 3293 | /minimatch@3.1.2: 3294 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 3295 | dependencies: 3296 | brace-expansion: 1.1.11 3297 | 3298 | /minimist@1.2.8: 3299 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 3300 | dev: true 3301 | 3302 | /minipass@3.3.6: 3303 | resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} 3304 | engines: {node: '>=8'} 3305 | dependencies: 3306 | yallist: 4.0.0 3307 | dev: false 3308 | 3309 | /minipass@5.0.0: 3310 | resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} 3311 | engines: {node: '>=8'} 3312 | dev: false 3313 | 3314 | /minizlib@2.1.2: 3315 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} 3316 | engines: {node: '>= 8'} 3317 | dependencies: 3318 | minipass: 3.3.6 3319 | yallist: 4.0.0 3320 | dev: false 3321 | 3322 | /mkdirp@1.0.4: 3323 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 3324 | engines: {node: '>=10'} 3325 | hasBin: true 3326 | dev: false 3327 | 3328 | /mongodb-connection-string-url@2.6.0: 3329 | resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==} 3330 | dependencies: 3331 | '@types/whatwg-url': 8.2.2 3332 | whatwg-url: 11.0.0 3333 | dev: false 3334 | 3335 | /mongodb@5.7.0: 3336 | resolution: {integrity: sha512-zm82Bq33QbqtxDf58fLWBwTjARK3NSvKYjyz997KSy6hpat0prjeX/kxjbPVyZY60XYPDNETaHkHJI2UCzSLuw==} 3337 | engines: {node: '>=14.20.1'} 3338 | peerDependencies: 3339 | '@aws-sdk/credential-providers': ^3.201.0 3340 | '@mongodb-js/zstd': ^1.1.0 3341 | kerberos: ^2.0.1 3342 | mongodb-client-encryption: '>=2.3.0 <3' 3343 | snappy: ^7.2.2 3344 | peerDependenciesMeta: 3345 | '@aws-sdk/credential-providers': 3346 | optional: true 3347 | '@mongodb-js/zstd': 3348 | optional: true 3349 | kerberos: 3350 | optional: true 3351 | mongodb-client-encryption: 3352 | optional: true 3353 | snappy: 3354 | optional: true 3355 | dependencies: 3356 | bson: 5.4.0 3357 | mongodb-connection-string-url: 2.6.0 3358 | socks: 2.7.1 3359 | optionalDependencies: 3360 | saslprep: 1.0.3 3361 | dev: false 3362 | 3363 | /mongoose@7.4.0: 3364 | resolution: {integrity: sha512-oHE1eqodfKzugXRlQxpo+msIea7jPcRoayDuEMr50+bYwM/juA5f+1stjkWlXcg6vo1PdJFVA6DGaKOPLuG5mA==} 3365 | engines: {node: '>=14.20.1'} 3366 | dependencies: 3367 | bson: 5.4.0 3368 | kareem: 2.5.1 3369 | mongodb: 5.7.0 3370 | mpath: 0.9.0 3371 | mquery: 5.0.0 3372 | ms: 2.1.3 3373 | sift: 16.0.1 3374 | transitivePeerDependencies: 3375 | - '@aws-sdk/credential-providers' 3376 | - '@mongodb-js/zstd' 3377 | - kerberos 3378 | - mongodb-client-encryption 3379 | - snappy 3380 | - supports-color 3381 | dev: false 3382 | 3383 | /mpath@0.9.0: 3384 | resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} 3385 | engines: {node: '>=4.0.0'} 3386 | dev: false 3387 | 3388 | /mquery@5.0.0: 3389 | resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} 3390 | engines: {node: '>=14.0.0'} 3391 | dependencies: 3392 | debug: 4.3.4 3393 | transitivePeerDependencies: 3394 | - supports-color 3395 | dev: false 3396 | 3397 | /ms@2.0.0: 3398 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 3399 | dev: false 3400 | 3401 | /ms@2.1.2: 3402 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 3403 | 3404 | /ms@2.1.3: 3405 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 3406 | 3407 | /natural-compare-lite@1.4.0: 3408 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 3409 | dev: true 3410 | 3411 | /natural-compare@1.4.0: 3412 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 3413 | dev: true 3414 | 3415 | /negotiator@0.6.3: 3416 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 3417 | engines: {node: '>= 0.6'} 3418 | dev: false 3419 | 3420 | /node-addon-api@5.1.0: 3421 | resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} 3422 | dev: false 3423 | 3424 | /node-fetch@2.6.12: 3425 | resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} 3426 | engines: {node: 4.x || >=6.0.0} 3427 | peerDependencies: 3428 | encoding: ^0.1.0 3429 | peerDependenciesMeta: 3430 | encoding: 3431 | optional: true 3432 | dependencies: 3433 | whatwg-url: 5.0.0 3434 | dev: false 3435 | 3436 | /node-int64@0.4.0: 3437 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 3438 | dev: true 3439 | 3440 | /node-releases@2.0.13: 3441 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 3442 | dev: true 3443 | 3444 | /nodemon@3.0.1: 3445 | resolution: {integrity: sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==} 3446 | engines: {node: '>=10'} 3447 | hasBin: true 3448 | dependencies: 3449 | chokidar: 3.5.3 3450 | debug: 3.2.7(supports-color@5.5.0) 3451 | ignore-by-default: 1.0.1 3452 | minimatch: 3.1.2 3453 | pstree.remy: 1.1.8 3454 | semver: 7.5.4 3455 | simple-update-notifier: 2.0.0 3456 | supports-color: 5.5.0 3457 | touch: 3.1.0 3458 | undefsafe: 2.0.5 3459 | dev: true 3460 | 3461 | /nopt@1.0.10: 3462 | resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} 3463 | hasBin: true 3464 | dependencies: 3465 | abbrev: 1.1.1 3466 | dev: true 3467 | 3468 | /nopt@5.0.0: 3469 | resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} 3470 | engines: {node: '>=6'} 3471 | hasBin: true 3472 | dependencies: 3473 | abbrev: 1.1.1 3474 | dev: false 3475 | 3476 | /normalize-path@3.0.0: 3477 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 3478 | engines: {node: '>=0.10.0'} 3479 | dev: true 3480 | 3481 | /npm-run-path@4.0.1: 3482 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 3483 | engines: {node: '>=8'} 3484 | dependencies: 3485 | path-key: 3.1.1 3486 | dev: true 3487 | 3488 | /npmlog@5.0.1: 3489 | resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} 3490 | dependencies: 3491 | are-we-there-yet: 2.0.0 3492 | console-control-strings: 1.1.0 3493 | gauge: 3.0.2 3494 | set-blocking: 2.0.0 3495 | dev: false 3496 | 3497 | /object-assign@4.1.1: 3498 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 3499 | engines: {node: '>=0.10.0'} 3500 | dev: false 3501 | 3502 | /object-inspect@1.12.3: 3503 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 3504 | 3505 | /on-finished@2.4.1: 3506 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 3507 | engines: {node: '>= 0.8'} 3508 | dependencies: 3509 | ee-first: 1.1.1 3510 | dev: false 3511 | 3512 | /once@1.4.0: 3513 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 3514 | dependencies: 3515 | wrappy: 1.0.2 3516 | 3517 | /one-time@1.0.0: 3518 | resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} 3519 | dependencies: 3520 | fn.name: 1.1.0 3521 | dev: false 3522 | 3523 | /onetime@5.1.2: 3524 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 3525 | engines: {node: '>=6'} 3526 | dependencies: 3527 | mimic-fn: 2.1.0 3528 | dev: true 3529 | 3530 | /optionator@0.9.3: 3531 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 3532 | engines: {node: '>= 0.8.0'} 3533 | dependencies: 3534 | '@aashutoshrathi/word-wrap': 1.2.6 3535 | deep-is: 0.1.4 3536 | fast-levenshtein: 2.0.6 3537 | levn: 0.4.1 3538 | prelude-ls: 1.2.1 3539 | type-check: 0.4.0 3540 | dev: true 3541 | 3542 | /p-limit@2.3.0: 3543 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 3544 | engines: {node: '>=6'} 3545 | dependencies: 3546 | p-try: 2.2.0 3547 | dev: true 3548 | 3549 | /p-limit@3.1.0: 3550 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 3551 | engines: {node: '>=10'} 3552 | dependencies: 3553 | yocto-queue: 0.1.0 3554 | dev: true 3555 | 3556 | /p-locate@4.1.0: 3557 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 3558 | engines: {node: '>=8'} 3559 | dependencies: 3560 | p-limit: 2.3.0 3561 | dev: true 3562 | 3563 | /p-locate@5.0.0: 3564 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 3565 | engines: {node: '>=10'} 3566 | dependencies: 3567 | p-limit: 3.1.0 3568 | dev: true 3569 | 3570 | /p-try@2.2.0: 3571 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 3572 | engines: {node: '>=6'} 3573 | dev: true 3574 | 3575 | /parent-module@1.0.1: 3576 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 3577 | engines: {node: '>=6'} 3578 | dependencies: 3579 | callsites: 3.1.0 3580 | dev: true 3581 | 3582 | /parse-json@5.2.0: 3583 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 3584 | engines: {node: '>=8'} 3585 | dependencies: 3586 | '@babel/code-frame': 7.22.5 3587 | error-ex: 1.3.2 3588 | json-parse-even-better-errors: 2.3.1 3589 | lines-and-columns: 1.2.4 3590 | dev: true 3591 | 3592 | /parseurl@1.3.3: 3593 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 3594 | engines: {node: '>= 0.8'} 3595 | dev: false 3596 | 3597 | /passport-jwt@4.0.1: 3598 | resolution: {integrity: sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==} 3599 | dependencies: 3600 | jsonwebtoken: 9.0.1 3601 | passport-strategy: 1.0.0 3602 | dev: false 3603 | 3604 | /passport-strategy@1.0.0: 3605 | resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==} 3606 | engines: {node: '>= 0.4.0'} 3607 | dev: false 3608 | 3609 | /passport@0.6.0: 3610 | resolution: {integrity: sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==} 3611 | engines: {node: '>= 0.4.0'} 3612 | dependencies: 3613 | passport-strategy: 1.0.0 3614 | pause: 0.0.1 3615 | utils-merge: 1.0.1 3616 | dev: false 3617 | 3618 | /path-exists@4.0.0: 3619 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 3620 | engines: {node: '>=8'} 3621 | dev: true 3622 | 3623 | /path-is-absolute@1.0.1: 3624 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 3625 | engines: {node: '>=0.10.0'} 3626 | 3627 | /path-key@3.1.1: 3628 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 3629 | engines: {node: '>=8'} 3630 | dev: true 3631 | 3632 | /path-parse@1.0.7: 3633 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 3634 | dev: true 3635 | 3636 | /path-to-regexp@0.1.7: 3637 | resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} 3638 | dev: false 3639 | 3640 | /path-type@4.0.0: 3641 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 3642 | engines: {node: '>=8'} 3643 | dev: true 3644 | 3645 | /pause@0.0.1: 3646 | resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} 3647 | dev: false 3648 | 3649 | /picocolors@1.0.0: 3650 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 3651 | dev: true 3652 | 3653 | /picomatch@2.3.1: 3654 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 3655 | engines: {node: '>=8.6'} 3656 | dev: true 3657 | 3658 | /pirates@4.0.6: 3659 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 3660 | engines: {node: '>= 6'} 3661 | dev: true 3662 | 3663 | /pkg-dir@4.2.0: 3664 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 3665 | engines: {node: '>=8'} 3666 | dependencies: 3667 | find-up: 4.1.0 3668 | dev: true 3669 | 3670 | /prelude-ls@1.2.1: 3671 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 3672 | engines: {node: '>= 0.8.0'} 3673 | dev: true 3674 | 3675 | /pretty-format@29.6.1: 3676 | resolution: {integrity: sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==} 3677 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 3678 | dependencies: 3679 | '@jest/schemas': 29.6.0 3680 | ansi-styles: 5.2.0 3681 | react-is: 18.2.0 3682 | dev: true 3683 | 3684 | /prompts@2.4.2: 3685 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 3686 | engines: {node: '>= 6'} 3687 | dependencies: 3688 | kleur: 3.0.3 3689 | sisteransi: 1.0.5 3690 | dev: true 3691 | 3692 | /proxy-addr@2.0.7: 3693 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 3694 | engines: {node: '>= 0.10'} 3695 | dependencies: 3696 | forwarded: 0.2.0 3697 | ipaddr.js: 1.9.1 3698 | dev: false 3699 | 3700 | /pstree.remy@1.1.8: 3701 | resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} 3702 | dev: true 3703 | 3704 | /punycode@2.3.0: 3705 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 3706 | engines: {node: '>=6'} 3707 | 3708 | /pure-rand@6.0.2: 3709 | resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} 3710 | dev: true 3711 | 3712 | /qs@6.11.0: 3713 | resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} 3714 | engines: {node: '>=0.6'} 3715 | dependencies: 3716 | side-channel: 1.0.4 3717 | 3718 | /queue-microtask@1.2.3: 3719 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 3720 | dev: true 3721 | 3722 | /range-parser@1.2.1: 3723 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 3724 | engines: {node: '>= 0.6'} 3725 | dev: false 3726 | 3727 | /raw-body@2.5.1: 3728 | resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} 3729 | engines: {node: '>= 0.8'} 3730 | dependencies: 3731 | bytes: 3.1.2 3732 | http-errors: 2.0.0 3733 | iconv-lite: 0.4.24 3734 | unpipe: 1.0.0 3735 | dev: false 3736 | 3737 | /raw-body@2.5.2: 3738 | resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} 3739 | engines: {node: '>= 0.8'} 3740 | dependencies: 3741 | bytes: 3.1.2 3742 | http-errors: 2.0.0 3743 | iconv-lite: 0.4.24 3744 | unpipe: 1.0.0 3745 | dev: false 3746 | 3747 | /react-is@18.2.0: 3748 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 3749 | dev: true 3750 | 3751 | /readable-stream@3.6.2: 3752 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 3753 | engines: {node: '>= 6'} 3754 | dependencies: 3755 | inherits: 2.0.4 3756 | string_decoder: 1.3.0 3757 | util-deprecate: 1.0.2 3758 | dev: false 3759 | 3760 | /readdirp@3.6.0: 3761 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 3762 | engines: {node: '>=8.10.0'} 3763 | dependencies: 3764 | picomatch: 2.3.1 3765 | dev: true 3766 | 3767 | /reflect-metadata@0.1.13: 3768 | resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} 3769 | dev: false 3770 | 3771 | /require-directory@2.1.1: 3772 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 3773 | engines: {node: '>=0.10.0'} 3774 | dev: true 3775 | 3776 | /resolve-cwd@3.0.0: 3777 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 3778 | engines: {node: '>=8'} 3779 | dependencies: 3780 | resolve-from: 5.0.0 3781 | dev: true 3782 | 3783 | /resolve-from@4.0.0: 3784 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 3785 | engines: {node: '>=4'} 3786 | dev: true 3787 | 3788 | /resolve-from@5.0.0: 3789 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 3790 | engines: {node: '>=8'} 3791 | dev: true 3792 | 3793 | /resolve.exports@2.0.2: 3794 | resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} 3795 | engines: {node: '>=10'} 3796 | dev: true 3797 | 3798 | /resolve@1.22.2: 3799 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 3800 | hasBin: true 3801 | dependencies: 3802 | is-core-module: 2.12.1 3803 | path-parse: 1.0.7 3804 | supports-preserve-symlinks-flag: 1.0.0 3805 | dev: true 3806 | 3807 | /reusify@1.0.4: 3808 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 3809 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 3810 | dev: true 3811 | 3812 | /rimraf@3.0.2: 3813 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 3814 | hasBin: true 3815 | dependencies: 3816 | glob: 7.2.3 3817 | 3818 | /run-parallel@1.2.0: 3819 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 3820 | dependencies: 3821 | queue-microtask: 1.2.3 3822 | dev: true 3823 | 3824 | /safe-buffer@5.2.1: 3825 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 3826 | dev: false 3827 | 3828 | /safe-stable-stringify@2.4.3: 3829 | resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} 3830 | engines: {node: '>=10'} 3831 | dev: false 3832 | 3833 | /safer-buffer@2.1.2: 3834 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 3835 | dev: false 3836 | 3837 | /saslprep@1.0.3: 3838 | resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==} 3839 | engines: {node: '>=6'} 3840 | requiresBuild: true 3841 | dependencies: 3842 | sparse-bitfield: 3.0.3 3843 | dev: false 3844 | optional: true 3845 | 3846 | /semver@6.3.1: 3847 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 3848 | hasBin: true 3849 | 3850 | /semver@7.5.4: 3851 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 3852 | engines: {node: '>=10'} 3853 | hasBin: true 3854 | dependencies: 3855 | lru-cache: 6.0.0 3856 | 3857 | /send@0.18.0: 3858 | resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} 3859 | engines: {node: '>= 0.8.0'} 3860 | dependencies: 3861 | debug: 2.6.9 3862 | depd: 2.0.0 3863 | destroy: 1.2.0 3864 | encodeurl: 1.0.2 3865 | escape-html: 1.0.3 3866 | etag: 1.8.1 3867 | fresh: 0.5.2 3868 | http-errors: 2.0.0 3869 | mime: 1.6.0 3870 | ms: 2.1.3 3871 | on-finished: 2.4.1 3872 | range-parser: 1.2.1 3873 | statuses: 2.0.1 3874 | transitivePeerDependencies: 3875 | - supports-color 3876 | dev: false 3877 | 3878 | /serve-static@1.15.0: 3879 | resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} 3880 | engines: {node: '>= 0.8.0'} 3881 | dependencies: 3882 | encodeurl: 1.0.2 3883 | escape-html: 1.0.3 3884 | parseurl: 1.3.3 3885 | send: 0.18.0 3886 | transitivePeerDependencies: 3887 | - supports-color 3888 | dev: false 3889 | 3890 | /set-blocking@2.0.0: 3891 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 3892 | dev: false 3893 | 3894 | /setprototypeof@1.2.0: 3895 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 3896 | dev: false 3897 | 3898 | /shebang-command@2.0.0: 3899 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 3900 | engines: {node: '>=8'} 3901 | dependencies: 3902 | shebang-regex: 3.0.0 3903 | dev: true 3904 | 3905 | /shebang-regex@3.0.0: 3906 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 3907 | engines: {node: '>=8'} 3908 | dev: true 3909 | 3910 | /side-channel@1.0.4: 3911 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 3912 | dependencies: 3913 | call-bind: 1.0.2 3914 | get-intrinsic: 1.2.1 3915 | object-inspect: 1.12.3 3916 | 3917 | /sift@16.0.1: 3918 | resolution: {integrity: sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==} 3919 | dev: false 3920 | 3921 | /signal-exit@3.0.7: 3922 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 3923 | 3924 | /simple-swizzle@0.2.2: 3925 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 3926 | dependencies: 3927 | is-arrayish: 0.3.2 3928 | dev: false 3929 | 3930 | /simple-update-notifier@2.0.0: 3931 | resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} 3932 | engines: {node: '>=10'} 3933 | dependencies: 3934 | semver: 7.5.4 3935 | dev: true 3936 | 3937 | /sisteransi@1.0.5: 3938 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 3939 | dev: true 3940 | 3941 | /slash@3.0.0: 3942 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 3943 | engines: {node: '>=8'} 3944 | dev: true 3945 | 3946 | /smart-buffer@4.2.0: 3947 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} 3948 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} 3949 | dev: false 3950 | 3951 | /socks@2.7.1: 3952 | resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} 3953 | engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} 3954 | dependencies: 3955 | ip: 2.0.0 3956 | smart-buffer: 4.2.0 3957 | dev: false 3958 | 3959 | /source-map-support@0.5.13: 3960 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} 3961 | dependencies: 3962 | buffer-from: 1.1.2 3963 | source-map: 0.6.1 3964 | dev: true 3965 | 3966 | /source-map@0.6.1: 3967 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 3968 | engines: {node: '>=0.10.0'} 3969 | dev: true 3970 | 3971 | /sparse-bitfield@3.0.3: 3972 | resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} 3973 | dependencies: 3974 | memory-pager: 1.5.0 3975 | dev: false 3976 | optional: true 3977 | 3978 | /sprintf-js@1.0.3: 3979 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 3980 | dev: true 3981 | 3982 | /stack-trace@0.0.10: 3983 | resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} 3984 | dev: false 3985 | 3986 | /stack-utils@2.0.6: 3987 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 3988 | engines: {node: '>=10'} 3989 | dependencies: 3990 | escape-string-regexp: 2.0.0 3991 | dev: true 3992 | 3993 | /statuses@2.0.1: 3994 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 3995 | engines: {node: '>= 0.8'} 3996 | dev: false 3997 | 3998 | /string-length@4.0.2: 3999 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 4000 | engines: {node: '>=10'} 4001 | dependencies: 4002 | char-regex: 1.0.2 4003 | strip-ansi: 6.0.1 4004 | dev: true 4005 | 4006 | /string-width@4.2.3: 4007 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 4008 | engines: {node: '>=8'} 4009 | dependencies: 4010 | emoji-regex: 8.0.0 4011 | is-fullwidth-code-point: 3.0.0 4012 | strip-ansi: 6.0.1 4013 | 4014 | /string_decoder@1.3.0: 4015 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 4016 | dependencies: 4017 | safe-buffer: 5.2.1 4018 | dev: false 4019 | 4020 | /strip-ansi@6.0.1: 4021 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 4022 | engines: {node: '>=8'} 4023 | dependencies: 4024 | ansi-regex: 5.0.1 4025 | 4026 | /strip-bom@4.0.0: 4027 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 4028 | engines: {node: '>=8'} 4029 | dev: true 4030 | 4031 | /strip-final-newline@2.0.0: 4032 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 4033 | engines: {node: '>=6'} 4034 | dev: true 4035 | 4036 | /strip-json-comments@3.1.1: 4037 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 4038 | engines: {node: '>=8'} 4039 | dev: true 4040 | 4041 | /superagent@8.0.9: 4042 | resolution: {integrity: sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==} 4043 | engines: {node: '>=6.4.0 <13 || >=14'} 4044 | dependencies: 4045 | component-emitter: 1.3.0 4046 | cookiejar: 2.1.4 4047 | debug: 4.3.4 4048 | fast-safe-stringify: 2.1.1 4049 | form-data: 4.0.0 4050 | formidable: 2.1.2 4051 | methods: 1.1.2 4052 | mime: 2.6.0 4053 | qs: 6.11.0 4054 | semver: 7.5.4 4055 | transitivePeerDependencies: 4056 | - supports-color 4057 | dev: true 4058 | 4059 | /supertest@6.3.3: 4060 | resolution: {integrity: sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==} 4061 | engines: {node: '>=6.4.0'} 4062 | dependencies: 4063 | methods: 1.1.2 4064 | superagent: 8.0.9 4065 | transitivePeerDependencies: 4066 | - supports-color 4067 | dev: true 4068 | 4069 | /supports-color@5.5.0: 4070 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 4071 | engines: {node: '>=4'} 4072 | dependencies: 4073 | has-flag: 3.0.0 4074 | dev: true 4075 | 4076 | /supports-color@7.2.0: 4077 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 4078 | engines: {node: '>=8'} 4079 | dependencies: 4080 | has-flag: 4.0.0 4081 | dev: true 4082 | 4083 | /supports-color@8.1.1: 4084 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 4085 | engines: {node: '>=10'} 4086 | dependencies: 4087 | has-flag: 4.0.0 4088 | dev: true 4089 | 4090 | /supports-preserve-symlinks-flag@1.0.0: 4091 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 4092 | engines: {node: '>= 0.4'} 4093 | dev: true 4094 | 4095 | /tar@6.1.15: 4096 | resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} 4097 | engines: {node: '>=10'} 4098 | dependencies: 4099 | chownr: 2.0.0 4100 | fs-minipass: 2.1.0 4101 | minipass: 5.0.0 4102 | minizlib: 2.1.2 4103 | mkdirp: 1.0.4 4104 | yallist: 4.0.0 4105 | dev: false 4106 | 4107 | /test-exclude@6.0.0: 4108 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 4109 | engines: {node: '>=8'} 4110 | dependencies: 4111 | '@istanbuljs/schema': 0.1.3 4112 | glob: 7.2.3 4113 | minimatch: 3.1.2 4114 | dev: true 4115 | 4116 | /text-hex@1.0.0: 4117 | resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} 4118 | dev: false 4119 | 4120 | /text-table@0.2.0: 4121 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 4122 | dev: true 4123 | 4124 | /tmpl@1.0.5: 4125 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 4126 | dev: true 4127 | 4128 | /to-fast-properties@2.0.0: 4129 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 4130 | engines: {node: '>=4'} 4131 | dev: true 4132 | 4133 | /to-regex-range@5.0.1: 4134 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 4135 | engines: {node: '>=8.0'} 4136 | dependencies: 4137 | is-number: 7.0.0 4138 | dev: true 4139 | 4140 | /toidentifier@1.0.1: 4141 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 4142 | engines: {node: '>=0.6'} 4143 | dev: false 4144 | 4145 | /touch@3.1.0: 4146 | resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} 4147 | hasBin: true 4148 | dependencies: 4149 | nopt: 1.0.10 4150 | dev: true 4151 | 4152 | /tr46@0.0.3: 4153 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 4154 | dev: false 4155 | 4156 | /tr46@3.0.0: 4157 | resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} 4158 | engines: {node: '>=12'} 4159 | dependencies: 4160 | punycode: 2.3.0 4161 | dev: false 4162 | 4163 | /triple-beam@1.4.1: 4164 | resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} 4165 | engines: {node: '>= 14.0.0'} 4166 | dev: false 4167 | 4168 | /ts-api-utils@1.0.1(typescript@5.1.6): 4169 | resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} 4170 | engines: {node: '>=16.13.0'} 4171 | peerDependencies: 4172 | typescript: '>=4.2.0' 4173 | dependencies: 4174 | typescript: 5.1.6 4175 | dev: true 4176 | 4177 | /ts-jest@29.1.1(@babel/core@7.22.9)(jest@29.6.1)(typescript@5.1.6): 4178 | resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} 4179 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 4180 | hasBin: true 4181 | peerDependencies: 4182 | '@babel/core': '>=7.0.0-beta.0 <8' 4183 | '@jest/types': ^29.0.0 4184 | babel-jest: ^29.0.0 4185 | esbuild: '*' 4186 | jest: ^29.0.0 4187 | typescript: '>=4.3 <6' 4188 | peerDependenciesMeta: 4189 | '@babel/core': 4190 | optional: true 4191 | '@jest/types': 4192 | optional: true 4193 | babel-jest: 4194 | optional: true 4195 | esbuild: 4196 | optional: true 4197 | dependencies: 4198 | '@babel/core': 7.22.9 4199 | bs-logger: 0.2.6 4200 | fast-json-stable-stringify: 2.1.0 4201 | jest: 29.6.1(@types/node@20.4.2)(ts-node@10.9.1) 4202 | jest-util: 29.6.1 4203 | json5: 2.2.3 4204 | lodash.memoize: 4.1.2 4205 | make-error: 1.3.6 4206 | semver: 7.5.4 4207 | typescript: 5.1.6 4208 | yargs-parser: 21.1.1 4209 | dev: true 4210 | 4211 | /ts-node@10.9.1(@types/node@20.4.2)(typescript@5.1.6): 4212 | resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} 4213 | hasBin: true 4214 | peerDependencies: 4215 | '@swc/core': '>=1.2.50' 4216 | '@swc/wasm': '>=1.2.50' 4217 | '@types/node': '*' 4218 | typescript: '>=2.7' 4219 | peerDependenciesMeta: 4220 | '@swc/core': 4221 | optional: true 4222 | '@swc/wasm': 4223 | optional: true 4224 | dependencies: 4225 | '@cspotcode/source-map-support': 0.8.1 4226 | '@tsconfig/node10': 1.0.9 4227 | '@tsconfig/node12': 1.0.11 4228 | '@tsconfig/node14': 1.0.3 4229 | '@tsconfig/node16': 1.0.4 4230 | '@types/node': 20.4.2 4231 | acorn: 8.10.0 4232 | acorn-walk: 8.2.0 4233 | arg: 4.1.3 4234 | create-require: 1.1.1 4235 | diff: 4.0.2 4236 | make-error: 1.3.6 4237 | typescript: 5.1.6 4238 | v8-compile-cache-lib: 3.0.1 4239 | yn: 3.1.1 4240 | dev: true 4241 | 4242 | /tslib@2.6.0: 4243 | resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} 4244 | dev: false 4245 | 4246 | /type-check@0.4.0: 4247 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 4248 | engines: {node: '>= 0.8.0'} 4249 | dependencies: 4250 | prelude-ls: 1.2.1 4251 | dev: true 4252 | 4253 | /type-detect@4.0.8: 4254 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 4255 | engines: {node: '>=4'} 4256 | dev: true 4257 | 4258 | /type-fest@0.20.2: 4259 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 4260 | engines: {node: '>=10'} 4261 | dev: true 4262 | 4263 | /type-fest@0.21.3: 4264 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 4265 | engines: {node: '>=10'} 4266 | dev: true 4267 | 4268 | /type-is@1.6.18: 4269 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 4270 | engines: {node: '>= 0.6'} 4271 | dependencies: 4272 | media-typer: 0.3.0 4273 | mime-types: 2.1.35 4274 | dev: false 4275 | 4276 | /typescript@5.1.6: 4277 | resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} 4278 | engines: {node: '>=14.17'} 4279 | hasBin: true 4280 | dev: true 4281 | 4282 | /undefsafe@2.0.5: 4283 | resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} 4284 | dev: true 4285 | 4286 | /unpipe@1.0.0: 4287 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 4288 | engines: {node: '>= 0.8'} 4289 | dev: false 4290 | 4291 | /update-browserslist-db@1.0.11(browserslist@4.21.9): 4292 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 4293 | hasBin: true 4294 | peerDependencies: 4295 | browserslist: '>= 4.21.0' 4296 | dependencies: 4297 | browserslist: 4.21.9 4298 | escalade: 3.1.1 4299 | picocolors: 1.0.0 4300 | dev: true 4301 | 4302 | /uri-js@4.4.1: 4303 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 4304 | dependencies: 4305 | punycode: 2.3.0 4306 | dev: true 4307 | 4308 | /util-deprecate@1.0.2: 4309 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 4310 | dev: false 4311 | 4312 | /utils-merge@1.0.1: 4313 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 4314 | engines: {node: '>= 0.4.0'} 4315 | dev: false 4316 | 4317 | /v8-compile-cache-lib@3.0.1: 4318 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 4319 | dev: true 4320 | 4321 | /v8-to-istanbul@9.1.0: 4322 | resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} 4323 | engines: {node: '>=10.12.0'} 4324 | dependencies: 4325 | '@jridgewell/trace-mapping': 0.3.18 4326 | '@types/istanbul-lib-coverage': 2.0.4 4327 | convert-source-map: 1.9.0 4328 | dev: true 4329 | 4330 | /validator@13.9.0: 4331 | resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} 4332 | engines: {node: '>= 0.10'} 4333 | dev: false 4334 | 4335 | /vary@1.1.2: 4336 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 4337 | engines: {node: '>= 0.8'} 4338 | dev: false 4339 | 4340 | /walker@1.0.8: 4341 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 4342 | dependencies: 4343 | makeerror: 1.0.12 4344 | dev: true 4345 | 4346 | /webidl-conversions@3.0.1: 4347 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 4348 | dev: false 4349 | 4350 | /webidl-conversions@7.0.0: 4351 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 4352 | engines: {node: '>=12'} 4353 | dev: false 4354 | 4355 | /whatwg-url@11.0.0: 4356 | resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} 4357 | engines: {node: '>=12'} 4358 | dependencies: 4359 | tr46: 3.0.0 4360 | webidl-conversions: 7.0.0 4361 | dev: false 4362 | 4363 | /whatwg-url@5.0.0: 4364 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 4365 | dependencies: 4366 | tr46: 0.0.3 4367 | webidl-conversions: 3.0.1 4368 | dev: false 4369 | 4370 | /which@2.0.2: 4371 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 4372 | engines: {node: '>= 8'} 4373 | hasBin: true 4374 | dependencies: 4375 | isexe: 2.0.0 4376 | dev: true 4377 | 4378 | /wide-align@1.1.5: 4379 | resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} 4380 | dependencies: 4381 | string-width: 4.2.3 4382 | dev: false 4383 | 4384 | /winston-transport@4.5.0: 4385 | resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} 4386 | engines: {node: '>= 6.4.0'} 4387 | dependencies: 4388 | logform: 2.5.1 4389 | readable-stream: 3.6.2 4390 | triple-beam: 1.4.1 4391 | dev: false 4392 | 4393 | /winston@3.10.0: 4394 | resolution: {integrity: sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==} 4395 | engines: {node: '>= 12.0.0'} 4396 | dependencies: 4397 | '@colors/colors': 1.5.0 4398 | '@dabh/diagnostics': 2.0.3 4399 | async: 3.2.4 4400 | is-stream: 2.0.1 4401 | logform: 2.5.1 4402 | one-time: 1.0.0 4403 | readable-stream: 3.6.2 4404 | safe-stable-stringify: 2.4.3 4405 | stack-trace: 0.0.10 4406 | triple-beam: 1.4.1 4407 | winston-transport: 4.5.0 4408 | dev: false 4409 | 4410 | /wrap-ansi@7.0.0: 4411 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 4412 | engines: {node: '>=10'} 4413 | dependencies: 4414 | ansi-styles: 4.3.0 4415 | string-width: 4.2.3 4416 | strip-ansi: 6.0.1 4417 | dev: true 4418 | 4419 | /wrappy@1.0.2: 4420 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 4421 | 4422 | /write-file-atomic@4.0.2: 4423 | resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} 4424 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 4425 | dependencies: 4426 | imurmurhash: 0.1.4 4427 | signal-exit: 3.0.7 4428 | dev: true 4429 | 4430 | /y18n@5.0.8: 4431 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 4432 | engines: {node: '>=10'} 4433 | dev: true 4434 | 4435 | /yallist@3.1.1: 4436 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 4437 | dev: true 4438 | 4439 | /yallist@4.0.0: 4440 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 4441 | 4442 | /yargs-parser@21.1.1: 4443 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 4444 | engines: {node: '>=12'} 4445 | dev: true 4446 | 4447 | /yargs@17.7.2: 4448 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 4449 | engines: {node: '>=12'} 4450 | dependencies: 4451 | cliui: 8.0.1 4452 | escalade: 3.1.1 4453 | get-caller-file: 2.0.5 4454 | require-directory: 2.1.1 4455 | string-width: 4.2.3 4456 | y18n: 5.0.8 4457 | yargs-parser: 21.1.1 4458 | dev: true 4459 | 4460 | /yn@3.1.1: 4461 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 4462 | engines: {node: '>=6'} 4463 | dev: true 4464 | 4465 | /yocto-queue@0.1.0: 4466 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 4467 | engines: {node: '>=10'} 4468 | dev: true 4469 | --------------------------------------------------------------------------------