├── .eslintignore ├── nodemon.json ├── src ├── multipart │ ├── handlers │ │ ├── index.ts │ │ ├── any-files.ts │ │ ├── single-file.ts │ │ ├── multiple-files.ts │ │ └── file-fields.ts │ ├── index.ts │ ├── file.ts │ ├── exceptions.ts │ ├── options.ts │ ├── filter.ts │ └── request.ts ├── decorators │ ├── index.ts │ ├── uploaded-file-decorator.ts │ └── uploaded-files-decorator.ts ├── storage │ ├── index.ts │ ├── storage.ts │ ├── memory-storage.ts │ └── disk-storage.ts ├── index.ts ├── stream │ └── index.ts ├── crypto │ └── index.ts ├── interceptors │ ├── index.ts │ ├── any-files-interceptor.ts │ ├── file-interceptor.ts │ ├── files-interceptor.ts │ └── file-fields-interceptor.ts └── fs │ └── index.ts ├── .gitignore ├── .prettierrc ├── examples ├── index.ts ├── upload │ ├── upload-module.ts │ └── upload-controller.ts ├── app-module.ts └── app.ts ├── tsconfig.lib.json ├── tsconfig.examples.json ├── tsconfig.json ├── .eslintrc ├── .github └── workflows │ ├── build.yaml │ └── publish.yaml ├── package.json ├── README.md └── yarn.lock /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | -------------------------------------------------------------------------------- /nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["build"], 3 | "ext": "js" 4 | } 5 | -------------------------------------------------------------------------------- /src/multipart/handlers/index.ts: -------------------------------------------------------------------------------- 1 | export { UploadField } from "./file-fields"; 2 | -------------------------------------------------------------------------------- /src/decorators/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./uploaded-files-decorator"; 2 | export * from "./uploaded-file-decorator"; 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | yarn-error.log 4 | logs 5 | .eslintcache 6 | build 7 | .uploads 8 | .uploads_2 9 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": false, 4 | "trailingComma": "all", 5 | "tabWidth": 2 6 | } 7 | -------------------------------------------------------------------------------- /src/storage/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./disk-storage"; 2 | export * from "./memory-storage"; 3 | export * from "./storage"; 4 | -------------------------------------------------------------------------------- /examples/index.ts: -------------------------------------------------------------------------------- 1 | import { runApp } from "./app"; 2 | 3 | const main = async () => { 4 | await runApp(); 5 | }; 6 | 7 | main(); 8 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./interceptors"; 2 | export * from "./decorators"; 3 | export * from "./storage"; 4 | export * from "./multipart"; 5 | -------------------------------------------------------------------------------- /src/stream/index.ts: -------------------------------------------------------------------------------- 1 | import { promisify } from "util"; 2 | import { pipeline } from "stream"; 3 | 4 | export const pump = promisify(pipeline); 5 | -------------------------------------------------------------------------------- /src/multipart/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./options"; 2 | export * from "./filter"; 3 | export { UploadFilterFile, UploadFilterHandler } from "./filter"; 4 | -------------------------------------------------------------------------------- /src/crypto/index.ts: -------------------------------------------------------------------------------- 1 | import { promisify } from "util"; 2 | import { randomBytes as cryptoRandomBytes } from "crypto"; 3 | 4 | export const randomBytes = promisify(cryptoRandomBytes); 5 | -------------------------------------------------------------------------------- /src/interceptors/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./file-fields-interceptor"; 2 | export * from "./file-interceptor"; 3 | export * from "./any-files-interceptor"; 4 | export * from "./files-interceptor"; 5 | -------------------------------------------------------------------------------- /tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "build" 5 | }, 6 | "include": ["src/**/*.ts"], 7 | "exclude": ["build", "node_modules"] 8 | } 9 | -------------------------------------------------------------------------------- /examples/upload/upload-module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from "@nestjs/common"; 2 | 3 | import { UploadController } from "./upload-controller"; 4 | 5 | @Module({ 6 | controllers: [UploadController], 7 | }) 8 | export class UploadModule {} 9 | -------------------------------------------------------------------------------- /examples/app-module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from "@nestjs/common"; 2 | 3 | import { UploadModule } from "./upload/upload-module"; 4 | 5 | @Module({ 6 | imports: [UploadModule], 7 | controllers: [], 8 | providers: [], 9 | }) 10 | export class AppModule {} 11 | -------------------------------------------------------------------------------- /tsconfig.examples.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "build" 5 | }, 6 | "include": ["examples/**/*.ts"], 7 | "references": [{ "path": "./tsconfig.lib.json" }], 8 | "exclude": ["build", "node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /src/decorators/uploaded-file-decorator.ts: -------------------------------------------------------------------------------- 1 | import { createParamDecorator, ExecutionContext } from "@nestjs/common"; 2 | 3 | import { getMultipartRequest } from "../multipart/request"; 4 | import { StorageFile } from "../storage/storage"; 5 | 6 | export const UploadedFile = createParamDecorator( 7 | async ( 8 | data: any, 9 | ctx: ExecutionContext, 10 | ): Promise => { 11 | const req = getMultipartRequest(ctx.switchToHttp()); 12 | 13 | return req?.storageFile; 14 | }, 15 | ); 16 | -------------------------------------------------------------------------------- /src/fs/index.ts: -------------------------------------------------------------------------------- 1 | import { promises as fs } from "fs"; 2 | import { extname } from "path"; 3 | 4 | import { randomBytes } from "../crypto"; 5 | 6 | export const pathExists = async (path: string) => { 7 | try { 8 | await fs.stat(path); 9 | } catch (err) { 10 | return false; 11 | } 12 | 13 | return true; 14 | }; 15 | 16 | export const getUniqueFilename = async (filename: string) => { 17 | const buffer = await randomBytes(16); 18 | 19 | const ext = extname(filename); 20 | 21 | return buffer.toString("hex") + ext; 22 | }; 23 | -------------------------------------------------------------------------------- /src/storage/storage.ts: -------------------------------------------------------------------------------- 1 | import { FastifyRequest } from "fastify"; 2 | import { MultipartFile } from "fastify-multipart"; 3 | 4 | export interface StorageFile { 5 | size: number; 6 | fieldname: string; 7 | encoding: string; 8 | mimetype: string; 9 | originalFilename: string; 10 | } 11 | 12 | export interface Storage { 13 | handleFile: (file: MultipartFile, req: FastifyRequest) => Promise; 14 | removeFile: (file: T, force?: boolean) => Promise | void; 15 | options?: K; 16 | } 17 | -------------------------------------------------------------------------------- /src/decorators/uploaded-files-decorator.ts: -------------------------------------------------------------------------------- 1 | import { createParamDecorator, ExecutionContext } from "@nestjs/common"; 2 | 3 | import { getMultipartRequest } from "../multipart/request"; 4 | import { StorageFile } from "../storage/storage"; 5 | 6 | export const UploadedFiles = createParamDecorator( 7 | async ( 8 | data: any, 9 | ctx: ExecutionContext, 10 | ): Promise | StorageFile[] | undefined> => { 11 | const req = getMultipartRequest(ctx.switchToHttp()); 12 | 13 | return req?.storageFiles; 14 | }, 15 | ); 16 | -------------------------------------------------------------------------------- /src/multipart/file.ts: -------------------------------------------------------------------------------- 1 | import { MultipartFile as _MultipartFile } from "fastify-multipart"; 2 | import { Readable } from "stream"; 3 | 4 | import { Storage, StorageFile } from "../storage"; 5 | 6 | export type MultipartFile = Omit<_MultipartFile, "file"> & { 7 | value?: any; 8 | file: Readable & { truncated?: boolean }; 9 | }; 10 | 11 | export const removeStorageFiles = async ( 12 | storage: Storage, 13 | files?: (StorageFile | undefined)[], 14 | force?: boolean, 15 | ) => { 16 | if (files == null) return; 17 | await Promise.all( 18 | files.map((file) => file && storage.removeFile(file, force)), 19 | ); 20 | }; 21 | -------------------------------------------------------------------------------- /src/multipart/exceptions.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BadRequestException, 3 | HttpException, 4 | PayloadTooLargeException, 5 | } from "@nestjs/common"; 6 | 7 | export const transformException = (err: Error | undefined) => { 8 | if (!err || err instanceof HttpException) { 9 | return err; 10 | } 11 | 12 | const code: string = (err as any).code; 13 | 14 | switch (code) { 15 | case "FST_REQ_FILE_TOO_LARGE": 16 | return new PayloadTooLargeException(); 17 | case "FST_PARTS_LIMIT": 18 | case "FST_FILES_LIMIT": 19 | case "FST_PROTO_VIOLATION": 20 | case "FST_INVALID_MULTIPART_CONTENT_TYPE": 21 | return new BadRequestException(err.message); 22 | } 23 | 24 | return err; 25 | }; 26 | -------------------------------------------------------------------------------- /examples/app.ts: -------------------------------------------------------------------------------- 1 | import "reflect-metadata"; 2 | import { NestFactory } from "@nestjs/core"; 3 | import { 4 | FastifyAdapter, 5 | NestFastifyApplication, 6 | } from "@nestjs/platform-fastify"; 7 | import multipart from "fastify-multipart"; 8 | 9 | import { AppModule } from "./app-module"; 10 | 11 | export const runApp = async () => { 12 | const adapter = new FastifyAdapter(); 13 | 14 | const app = await NestFactory.create( 15 | AppModule, 16 | adapter, 17 | ); 18 | 19 | app.register(multipart as any); 20 | 21 | await app.listen(3000, (err, address) => { 22 | if (err) return console.error(err); 23 | console.log(`Listening on ${address}!`); 24 | }); 25 | 26 | return app; 27 | }; 28 | -------------------------------------------------------------------------------- /src/multipart/options.ts: -------------------------------------------------------------------------------- 1 | import { DiskStorage, MemoryStorage, Storage } from "../storage"; 2 | import { UploadFilterHandler } from "./filter"; 3 | 4 | export type UploadOptions = busboy.BusboyConfig & { 5 | dest?: string; 6 | storage?: Storage; 7 | filter?: UploadFilterHandler; 8 | }; 9 | 10 | export const DEFAULT_UPLOAD_OPTIONS: Partial = { 11 | storage: new MemoryStorage(), 12 | }; 13 | 14 | export const transformUploadOptions = (opts?: UploadOptions) => { 15 | if (opts == null) return DEFAULT_UPLOAD_OPTIONS; 16 | 17 | if (opts.dest != null) { 18 | return { 19 | ...opts, 20 | storage: new DiskStorage({ 21 | dest: opts.dest, 22 | ...opts.storage?.options, 23 | }), 24 | }; 25 | } 26 | 27 | return { ...DEFAULT_UPLOAD_OPTIONS, ...opts }; 28 | }; 29 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noImplicitAny": true, 4 | "noImplicitReturns": true, 5 | "noImplicitThis": true, 6 | "strictNullChecks": true, 7 | "alwaysStrict": true, 8 | "allowSyntheticDefaultImports": true, 9 | "esModuleInterop": true, 10 | "experimentalDecorators": true, 11 | "sourceMap": true, 12 | "skipLibCheck": true, 13 | "preserveWatchOutput": true, 14 | "allowJs": false, 15 | "emitDecoratorMetadata": true, 16 | "forceConsistentCasingInFileNames": true, 17 | 18 | "composite": true, 19 | "incremental": true, 20 | "declaration": true, 21 | 22 | "module": "commonjs", 23 | "target": "es2020", 24 | "lib": ["esnext"], 25 | "moduleResolution": "node", 26 | 27 | "rootDir": "." 28 | }, 29 | "exclude": ["build", "node_modules"] 30 | } 31 | -------------------------------------------------------------------------------- /src/storage/memory-storage.ts: -------------------------------------------------------------------------------- 1 | import { FastifyRequest } from "fastify"; 2 | import { MultipartFile } from "fastify-multipart"; 3 | import { RouteGenericInterface } from "fastify/types/route"; 4 | import { Server, IncomingMessage } from "http"; 5 | 6 | import { StorageFile, Storage } from "./storage"; 7 | 8 | export interface MemoryStorageFile extends StorageFile { 9 | buffer: Buffer; 10 | } 11 | 12 | export class MemoryStorage implements Storage { 13 | public async handleFile( 14 | file: MultipartFile, 15 | req: FastifyRequest, 16 | ) { 17 | const buffer = await file.toBuffer(); 18 | 19 | const { encoding, mimetype, fieldname } = file; 20 | 21 | return { 22 | buffer, 23 | size: buffer.length, 24 | encoding, 25 | mimetype, 26 | fieldname, 27 | originalFilename: file.filename, 28 | }; 29 | } 30 | 31 | public async removeFile(file: MemoryStorageFile) { 32 | delete (file as any).buffer; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "@typescript-eslint/parser", 3 | "extends": [ 4 | "plugin:@typescript-eslint/recommended", 5 | "plugin:prettier/recommended" 6 | ], 7 | "plugins": ["@typescript-eslint", "prettier"], 8 | "parserOptions": { 9 | "ecmaVersion": 2020, 10 | "sourceType": "module" 11 | }, 12 | "rules": { 13 | "@typescript-eslint/explicit-function-return-type": "off", 14 | "@typescript-eslint/interface-name-prefix": "off", 15 | "@typescript-eslint/no-explicit-any": "off", 16 | "@typescript-eslint/no-unused-vars": "off", 17 | "@typescript-eslint/no-use-before-define": "off", 18 | "@typescript-eslint/no-var-requires": "off", 19 | "@typescript-eslint/no-empty-interface": "off", 20 | "@typescript-eslint/no-empty-function": "off", 21 | "@typescript-eslint/explicit-module-boundary-types": "off", 22 | "@typescript-eslint/no-non-null-assertion": "off", 23 | "prettier/prettier": [ 24 | "error", 25 | { 26 | "endOfLine": "auto" 27 | } 28 | ] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/multipart/filter.ts: -------------------------------------------------------------------------------- 1 | import { BadRequestException } from "@nestjs/common"; 2 | import { FastifyRequest } from "fastify"; 3 | import { UploadOptions } from "."; 4 | 5 | import { DiskStorageFile, MemoryStorageFile, StorageFile } from "../storage"; 6 | 7 | export type UploadFilterFile = 8 | | DiskStorageFile 9 | | MemoryStorageFile 10 | | StorageFile; 11 | 12 | export type UploadFilterHandler = ( 13 | req: FastifyRequest, 14 | file: UploadFilterFile, 15 | ) => Promise | boolean | string; 16 | 17 | export const filterUpload = async ( 18 | uploadOptions: UploadOptions, 19 | req: FastifyRequest, 20 | file: UploadFilterFile, 21 | ): Promise => { 22 | if (uploadOptions.filter == null) { 23 | return true; 24 | } 25 | 26 | try { 27 | const res = await uploadOptions.filter(req, file); 28 | 29 | if (typeof res === "string") { 30 | throw new BadRequestException(res); 31 | } 32 | 33 | return res; 34 | } catch (error) { 35 | await uploadOptions.storage!.removeFile(file, true); 36 | throw error; 37 | } 38 | }; 39 | -------------------------------------------------------------------------------- /src/multipart/request.ts: -------------------------------------------------------------------------------- 1 | import { BadRequestException } from "@nestjs/common"; 2 | import { HttpArgumentsHost } from "@nestjs/common/interfaces"; 3 | import { FastifyRequest } from "fastify"; 4 | import { RouteGenericInterface } from "fastify/types/route"; 5 | import { IncomingMessage, Server } from "http"; 6 | 7 | import { UploadOptions } from "../multipart/options"; 8 | import { StorageFile } from "../storage"; 9 | import { MultipartFile } from "./file"; 10 | 11 | export type FastifyMultipartRequest = FastifyRequest< 12 | RouteGenericInterface, 13 | Server, 14 | IncomingMessage 15 | > & { 16 | storageFile?: StorageFile; 17 | storageFiles?: StorageFile[] | Record; 18 | }; 19 | 20 | export const getMultipartRequest = (ctx: HttpArgumentsHost) => { 21 | const req = ctx.getRequest(); 22 | 23 | if (!req.isMultipart()) { 24 | throw new BadRequestException("Not a multipart request"); 25 | } 26 | 27 | return req; 28 | }; 29 | 30 | export const getParts = (req: FastifyRequest, options: UploadOptions) => { 31 | return req.parts(options) as MultipartsIterator; 32 | }; 33 | 34 | export type MultipartsIterator = AsyncIterableIterator; 35 | -------------------------------------------------------------------------------- /src/multipart/handlers/any-files.ts: -------------------------------------------------------------------------------- 1 | import { FastifyRequest } from "fastify"; 2 | 3 | import { UploadOptions } from "../options"; 4 | import { StorageFile } from "../../storage"; 5 | import { getParts } from "../request"; 6 | import { removeStorageFiles } from "../file"; 7 | import { filterUpload } from "../filter"; 8 | 9 | export const handleMultipartAnyFiles = async ( 10 | req: FastifyRequest, 11 | options: UploadOptions, 12 | ) => { 13 | const parts = getParts(req, options); 14 | const body: Record = {}; 15 | 16 | const files: StorageFile[] = []; 17 | 18 | const removeFiles = async (error?: boolean) => { 19 | return await removeStorageFiles(options.storage!, files, error); 20 | }; 21 | 22 | try { 23 | for await (const part of parts) { 24 | if (part.file) { 25 | const file = await options.storage!.handleFile(part, req); 26 | 27 | if (await filterUpload(options, req, file)) { 28 | files.push(file); 29 | } 30 | } else { 31 | body[part.fieldname] = part.value; 32 | } 33 | } 34 | } catch (error) { 35 | await removeFiles(true); 36 | throw error; 37 | } 38 | 39 | return { body, files, remove: () => removeFiles() }; 40 | }; 41 | -------------------------------------------------------------------------------- /.github/workflows/build.yaml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | release: 7 | runs-on: ${{ matrix.os }} 8 | 9 | strategy: 10 | matrix: 11 | os: [windows-latest, ubuntu-latest] 12 | 13 | steps: 14 | - name: Cancel Previous Runs 15 | uses: styfle/cancel-workflow-action@0.9.1 16 | with: 17 | access_token: ${{ github.token }} 18 | 19 | - name: Check out Git repository 20 | uses: actions/checkout@v2 21 | 22 | - name: Install Node.js 23 | uses: actions/setup-node@v1 24 | with: 25 | node-version: 14 26 | 27 | - uses: actions/cache@v2.1.6 28 | id: yarn-cache 29 | with: 30 | path: | 31 | node_modules 32 | ${{ steps.yarn-cache-dir-path.outputs.dir }} 33 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 34 | restore-keys: | 35 | ${{ runner.os }}-yarn- 36 | 37 | - name: Install dependencies 38 | run: yarn install --prefer-offline --frozen-lockfile 39 | env: 40 | ADBLOCK: true 41 | 42 | - name: Lint 43 | run: yarn lint 44 | 45 | - name: Build the library 46 | run: yarn build:ci 47 | -------------------------------------------------------------------------------- /.github/workflows/publish.yaml: -------------------------------------------------------------------------------- 1 | name: NPM Publish 2 | 3 | on: 4 | release: 5 | types: 6 | - created 7 | 8 | jobs: 9 | publish: 10 | runs-on: ubuntu-latest 11 | env: 12 | NPM_REGISTRY: registry.npmjs.org/ 13 | NPM_SCOPE: blazity 14 | 15 | steps: 16 | - uses: actions/checkout@v2 17 | - uses: actions/setup-node@v2 18 | with: 19 | node-version: 16 20 | 21 | - name: Authenticate npm 22 | run: | 23 | npm config set @${{ env.NPM_SCOPE }}:registry https://${{ env.NPM_REGISTRY }} 24 | npm config set -- '//${{ env.NPM_REGISTRY }}:_authToken' "${{ secrets.NPM_PUBLISH_TOKEN }}" 25 | 26 | - uses: actions/cache@v2.1.6 27 | id: yarn-cache 28 | with: 29 | path: | 30 | node_modules 31 | ${{ steps.yarn-cache-dir-path.outputs.dir }} 32 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 33 | restore-keys: | 34 | ${{ runner.os }}-yarn- 35 | 36 | - name: Install dependencies 37 | run: yarn install --prefer-offline --frozen-lockfile 38 | env: 39 | ADBLOCK: true 40 | 41 | - name: Build 42 | run: yarn build 43 | 44 | - name: Publish 45 | run: npm publish 46 | -------------------------------------------------------------------------------- /src/interceptors/any-files-interceptor.ts: -------------------------------------------------------------------------------- 1 | import { Observable, tap } from "rxjs"; 2 | import { 3 | CallHandler, 4 | ExecutionContext, 5 | mixin, 6 | NestInterceptor, 7 | Type, 8 | } from "@nestjs/common"; 9 | 10 | import { getMultipartRequest } from "../multipart/request"; 11 | import { transformUploadOptions, UploadOptions } from "../multipart/options"; 12 | import { handleMultipartAnyFiles } from "../multipart/handlers/any-files"; 13 | 14 | export function AnyFilesInterceptor( 15 | options?: UploadOptions, 16 | ): Type { 17 | class MixinInterceptor implements NestInterceptor { 18 | private readonly options: UploadOptions; 19 | 20 | constructor() { 21 | this.options = transformUploadOptions(options); 22 | } 23 | 24 | async intercept( 25 | context: ExecutionContext, 26 | next: CallHandler, 27 | ): Promise> { 28 | const ctx = context.switchToHttp(); 29 | const req = getMultipartRequest(ctx); 30 | 31 | const { body, files, remove } = await handleMultipartAnyFiles( 32 | req, 33 | this.options, 34 | ); 35 | 36 | req.body = body; 37 | req.storageFiles = files; 38 | 39 | return next.handle().pipe(tap(remove)); 40 | } 41 | } 42 | 43 | const Interceptor = mixin(MixinInterceptor); 44 | 45 | return Interceptor; 46 | } 47 | -------------------------------------------------------------------------------- /src/interceptors/file-interceptor.ts: -------------------------------------------------------------------------------- 1 | import { Observable, tap } from "rxjs"; 2 | import { 3 | CallHandler, 4 | ExecutionContext, 5 | mixin, 6 | NestInterceptor, 7 | Type, 8 | } from "@nestjs/common"; 9 | 10 | import { getMultipartRequest } from "../multipart/request"; 11 | import { transformUploadOptions, UploadOptions } from "../multipart/options"; 12 | import { handleMultipartSingleFile } from "../multipart/handlers/single-file"; 13 | 14 | export function FileInterceptor( 15 | fieldname: string, 16 | options?: UploadOptions, 17 | ): Type { 18 | class MixinInterceptor implements NestInterceptor { 19 | private readonly options: UploadOptions; 20 | 21 | constructor() { 22 | this.options = transformUploadOptions(options); 23 | } 24 | 25 | async intercept( 26 | context: ExecutionContext, 27 | next: CallHandler, 28 | ): Promise> { 29 | const ctx = context.switchToHttp(); 30 | const req = getMultipartRequest(ctx); 31 | 32 | const { file, body, remove } = await handleMultipartSingleFile( 33 | req, 34 | fieldname, 35 | this.options, 36 | ); 37 | 38 | req.body = body; 39 | req.storageFile = file; 40 | 41 | return next.handle().pipe(tap(remove)); 42 | } 43 | } 44 | 45 | const Interceptor = mixin(MixinInterceptor); 46 | 47 | return Interceptor; 48 | } 49 | -------------------------------------------------------------------------------- /src/interceptors/files-interceptor.ts: -------------------------------------------------------------------------------- 1 | import { Observable, tap } from "rxjs"; 2 | import { 3 | CallHandler, 4 | ExecutionContext, 5 | mixin, 6 | NestInterceptor, 7 | Type, 8 | } from "@nestjs/common"; 9 | 10 | import { getMultipartRequest } from "../multipart/request"; 11 | import { transformUploadOptions, UploadOptions } from "../multipart/options"; 12 | import { handleMultipartMultipleFiles } from "../multipart/handlers/multiple-files"; 13 | 14 | export function FilesInterceptor( 15 | fieldname: string, 16 | maxCount = 1, 17 | options?: UploadOptions, 18 | ): Type { 19 | class MixinInterceptor implements NestInterceptor { 20 | private readonly options: UploadOptions; 21 | 22 | constructor() { 23 | this.options = transformUploadOptions(options); 24 | } 25 | 26 | async intercept( 27 | context: ExecutionContext, 28 | next: CallHandler, 29 | ): Promise> { 30 | const ctx = context.switchToHttp(); 31 | const req = getMultipartRequest(ctx); 32 | 33 | const { body, files, remove } = await handleMultipartMultipleFiles( 34 | req, 35 | fieldname, 36 | maxCount, 37 | this.options, 38 | ); 39 | 40 | req.body = body; 41 | req.storageFiles = files; 42 | 43 | return next.handle().pipe(tap(remove)); 44 | } 45 | } 46 | 47 | const Interceptor = mixin(MixinInterceptor); 48 | 49 | return Interceptor; 50 | } 51 | -------------------------------------------------------------------------------- /src/interceptors/file-fields-interceptor.ts: -------------------------------------------------------------------------------- 1 | import { Observable, tap } from "rxjs"; 2 | import { 3 | CallHandler, 4 | ExecutionContext, 5 | mixin, 6 | NestInterceptor, 7 | Type, 8 | } from "@nestjs/common"; 9 | 10 | import { getMultipartRequest } from "../multipart/request"; 11 | import { transformUploadOptions, UploadOptions } from "../multipart/options"; 12 | import { 13 | handleMultipartFileFields, 14 | UploadField, 15 | UploadFieldMapEntry, 16 | uploadFieldsToMap, 17 | } from "../multipart/handlers/file-fields"; 18 | 19 | export function FileFieldsInterceptor( 20 | uploadFields: UploadField[], 21 | options?: UploadOptions, 22 | ): Type { 23 | class MixinInterceptor implements NestInterceptor { 24 | private readonly options: UploadOptions; 25 | 26 | private readonly fieldsMap: Map; 27 | 28 | constructor() { 29 | this.options = transformUploadOptions(options); 30 | this.fieldsMap = uploadFieldsToMap(uploadFields); 31 | } 32 | 33 | async intercept( 34 | context: ExecutionContext, 35 | next: CallHandler, 36 | ): Promise> { 37 | const ctx = context.switchToHttp(); 38 | const req = getMultipartRequest(ctx); 39 | 40 | const { body, files, remove } = await handleMultipartFileFields( 41 | req, 42 | this.fieldsMap, 43 | this.options, 44 | ); 45 | 46 | req.body = body; 47 | req.storageFiles = files; 48 | 49 | return next.handle().pipe(tap(remove)); 50 | } 51 | } 52 | 53 | const Interceptor = mixin(MixinInterceptor); 54 | 55 | return Interceptor; 56 | } 57 | -------------------------------------------------------------------------------- /src/multipart/handlers/single-file.ts: -------------------------------------------------------------------------------- 1 | import { BadRequestException } from "@nestjs/common"; 2 | import { FastifyRequest } from "fastify"; 3 | 4 | import { UploadOptions } from "../options"; 5 | import { StorageFile } from "../../storage"; 6 | import { getParts } from "../request"; 7 | import { filterUpload } from "../filter"; 8 | 9 | export const handleMultipartSingleFile = async ( 10 | req: FastifyRequest, 11 | fieldname: string, 12 | options: UploadOptions, 13 | ) => { 14 | const parts = getParts(req, options); 15 | const body: Record = {}; 16 | 17 | let file: StorageFile | undefined = undefined; 18 | 19 | const removeFiles = async (error?: boolean) => { 20 | if (file == null) return; 21 | await options.storage!.removeFile(file, error); 22 | }; 23 | 24 | try { 25 | for await (const part of parts) { 26 | if (part.file) { 27 | if (part.fieldname !== fieldname) { 28 | throw new BadRequestException( 29 | `Field ${part.fieldname} doesn't accept file`, 30 | ); 31 | } else if (file != null) { 32 | throw new BadRequestException( 33 | `Field ${fieldname} accepts only one file`, 34 | ); 35 | } 36 | 37 | const _file = await options.storage!.handleFile(part, req); 38 | 39 | if (await filterUpload(options, req, _file)) { 40 | file = _file; 41 | } 42 | } else { 43 | body[part.fieldname] = part.value; 44 | } 45 | } 46 | } catch (error) { 47 | await removeFiles(true); 48 | throw error; 49 | } 50 | 51 | return { 52 | body, 53 | file, 54 | remove: () => removeFiles(), 55 | }; 56 | }; 57 | -------------------------------------------------------------------------------- /src/multipart/handlers/multiple-files.ts: -------------------------------------------------------------------------------- 1 | import { BadRequestException } from "@nestjs/common"; 2 | import { FastifyRequest } from "fastify"; 3 | 4 | import { UploadOptions } from "../options"; 5 | import { StorageFile } from "../../storage"; 6 | import { removeStorageFiles } from "../file"; 7 | import { getParts } from "../request"; 8 | import { filterUpload } from "../filter"; 9 | 10 | export const handleMultipartMultipleFiles = async ( 11 | req: FastifyRequest, 12 | fieldname: string, 13 | maxCount: number, 14 | options: UploadOptions, 15 | ) => { 16 | const parts = getParts(req, options); 17 | const body: Record = {}; 18 | 19 | const files: StorageFile[] = []; 20 | 21 | const removeFiles = async (error?: boolean) => { 22 | return await removeStorageFiles(options.storage!, files, error); 23 | }; 24 | 25 | try { 26 | for await (const part of parts) { 27 | if (part.file) { 28 | if (part.fieldname !== fieldname) { 29 | throw new BadRequestException( 30 | `Field ${part.fieldname} doesn't accept files`, 31 | ); 32 | } 33 | 34 | if (files.length + 1 > maxCount) { 35 | throw new BadRequestException( 36 | `Field ${part.fieldname} accepts max ${maxCount} files`, 37 | ); 38 | } 39 | 40 | const file = await options.storage!.handleFile(part, req); 41 | 42 | if (await filterUpload(options, req, file)) { 43 | files.push(file); 44 | } 45 | } else { 46 | body[part.fieldname] = part.value; 47 | } 48 | } 49 | } catch (error) { 50 | await removeFiles(error); 51 | throw error; 52 | } 53 | 54 | return { body, files, remove: () => removeFiles() }; 55 | }; 56 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@blazity/nest-file-fastify", 3 | "version": "1.0.0", 4 | "description": "fastify-multipart decorators for Nest.js", 5 | "license": "MIT", 6 | "main": "build/src/index.js", 7 | "types": "build/src/index.d.ts", 8 | "homepage": "https://blazity.com/", 9 | "files": [ 10 | "build/src" 11 | ], 12 | "keywords": [ 13 | "nest", 14 | "nestjs", 15 | "fastify", 16 | "multipart", 17 | "fastify-multipart", 18 | "upload", 19 | "file", 20 | "blazity" 21 | ], 22 | "publishConfig": { 23 | "access": "public" 24 | }, 25 | "scripts": { 26 | "dev": "concurrently \"tsc --watch --p tsconfig.lib.json\" \"tsc --watch --p tsconfig.examples.json\"", 27 | "watch": "nodemon ./build/examples/index.js", 28 | "build:ci": "tsc --p tsconfig.lib.json && tsc --p tsconfig.examples.json", 29 | "build": "tsc --p tsconfig.lib.json", 30 | "lint": "eslint \"src/**\" --ext \".js,.jsx,.ts,.tsx\"", 31 | "lint:fix": "npm run lint -- --fix", 32 | "clean": "rimraf build", 33 | "prepublishOnly": "yarn clean && npm run build" 34 | }, 35 | "devDependencies": { 36 | "@nestjs/common": "^8.0.6", 37 | "@nestjs/config": "^1.0.1", 38 | "@nestjs/core": "^8.0.6", 39 | "@nestjs/platform-fastify": "^8.0.6", 40 | "@types/busboy": "^0.2.4", 41 | "@types/node": "^14.14.10", 42 | "@typescript-eslint/eslint-plugin": "^4.21.0", 43 | "@typescript-eslint/parser": "^4.21.0", 44 | "concurrently": "^6.2.1", 45 | "cross-env": "^7.0.3", 46 | "eslint": "^7.32.0", 47 | "eslint-config-prettier": "^7.0.0", 48 | "eslint-plugin-prettier": "^3.2.0", 49 | "fastify": "^3.21.3", 50 | "fastify-multipart": "^5.0.0", 51 | "nodemon": "^2.0.12", 52 | "prettier": "^2.2.1", 53 | "reflect-metadata": "^0.1.13", 54 | "rimraf": "^3.0.2", 55 | "rxjs": "^7.3.0", 56 | "typescript": "^4.1.2" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /examples/upload/upload-controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Post, UseInterceptors } from "@nestjs/common"; 2 | import { resolve } from "path"; 3 | 4 | import { 5 | AnyFilesInterceptor, 6 | DiskStorage, 7 | DiskStorageFile, 8 | FileFieldsInterceptor, 9 | FileInterceptor, 10 | FilesInterceptor, 11 | MemoryStorageFile, 12 | UploadedFile, 13 | UploadedFiles, 14 | } from "../../src"; 15 | 16 | const PATH_UPLOADS = resolve(".uploads"); 17 | 18 | @Controller("upload") 19 | export class UploadController { 20 | @Post("single") 21 | @UseInterceptors(FileInterceptor("file")) 22 | public async uploadSingle(@UploadedFile() file: MemoryStorageFile) { 23 | console.log(file.buffer); 24 | } 25 | 26 | @Post("single-disk") 27 | @UseInterceptors(FileInterceptor("file", { dest: PATH_UPLOADS })) 28 | public async uploadSingleToDisk(@UploadedFile() file: DiskStorageFile) { 29 | console.log(file.path); 30 | } 31 | 32 | @Post("array") 33 | @UseInterceptors(FilesInterceptor("files", 2, { dest: PATH_UPLOADS })) 34 | public async uploadArray(@UploadedFiles() files: DiskStorageFile[]) { 35 | files.forEach((file) => console.log(file.path)); 36 | } 37 | 38 | @Post("multi") 39 | @UseInterceptors( 40 | FileFieldsInterceptor( 41 | [ 42 | { name: "background", maxCount: 1 }, 43 | { name: "images", maxCount: 2 }, 44 | ], 45 | { dest: PATH_UPLOADS }, 46 | ), 47 | ) 48 | public async uploadMultipleFields( 49 | @UploadedFiles() 50 | files: { 51 | background: DiskStorageFile[]; 52 | images: DiskStorageFile[]; 53 | }, 54 | ) { 55 | console.log(files); 56 | } 57 | 58 | @Post("any") 59 | @UseInterceptors(AnyFilesInterceptor()) 60 | public async uploadAnyFiles( 61 | @UploadedFiles() 62 | files: MemoryStorageFile[], 63 | ) { 64 | console.log(files); 65 | } 66 | 67 | @Post("temp") 68 | @UseInterceptors( 69 | FileInterceptor("file", { 70 | storage: new DiskStorage({ 71 | dest: PATH_UPLOADS, 72 | removeAfter: true, 73 | }), 74 | }), 75 | ) 76 | public async uploadAndRemove(@UploadedFile() file: DiskStorageFile) { 77 | console.log(file.size); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/multipart/handlers/file-fields.ts: -------------------------------------------------------------------------------- 1 | import { BadRequestException } from "@nestjs/common"; 2 | import { FastifyRequest } from "fastify"; 3 | 4 | import { UploadOptions } from "../options"; 5 | import { StorageFile } from "../../storage/storage"; 6 | import { getParts } from "../request"; 7 | import { removeStorageFiles } from "../file"; 8 | import { filterUpload } from "../filter"; 9 | 10 | export interface UploadField { 11 | /** 12 | * Field name 13 | */ 14 | name: string; 15 | /** 16 | * Max number of files in this field 17 | */ 18 | maxCount?: number; 19 | } 20 | 21 | export type UploadFieldMapEntry = Required>; 22 | 23 | export const uploadFieldsToMap = (uploadFields: UploadField[]) => { 24 | const map = new Map(); 25 | 26 | uploadFields.forEach(({ name, ...opts }) => { 27 | map.set(name, { maxCount: 1, ...opts }); 28 | }); 29 | 30 | return map; 31 | }; 32 | 33 | export const handleMultipartFileFields = async ( 34 | req: FastifyRequest, 35 | fieldsMap: Map, 36 | options: UploadOptions, 37 | ) => { 38 | const parts = getParts(req, options); 39 | const body: Record = {}; 40 | 41 | const files: Record = {}; 42 | 43 | const removeFiles = async (error?: boolean) => { 44 | const allFiles = ([] as StorageFile[]).concat(...Object.values(files)); 45 | return await removeStorageFiles(options.storage!, allFiles, error); 46 | }; 47 | 48 | try { 49 | for await (const part of parts) { 50 | if (part.file) { 51 | const fieldOptions = fieldsMap.get(part.fieldname); 52 | 53 | if (fieldOptions == null) { 54 | throw new BadRequestException( 55 | `Field ${part.fieldname} doesn't accept files`, 56 | ); 57 | } 58 | 59 | if (files[part.fieldname] == null) { 60 | files[part.fieldname] = []; 61 | } 62 | 63 | if (files[part.fieldname].length + 1 > fieldOptions.maxCount) { 64 | throw new BadRequestException( 65 | `Field ${part.fieldname} accepts max ${fieldOptions.maxCount} files`, 66 | ); 67 | } 68 | 69 | const file = await options.storage!.handleFile(part, req); 70 | 71 | if (await filterUpload(options, req, file)) { 72 | files[part.fieldname].push(file); 73 | } 74 | } else { 75 | body[part.fieldname] = part.value; 76 | } 77 | } 78 | } catch (error) { 79 | await removeFiles(true); 80 | throw error; 81 | } 82 | 83 | return { 84 | body, 85 | files, 86 | remove: () => removeFiles(), 87 | }; 88 | }; 89 | -------------------------------------------------------------------------------- /src/storage/disk-storage.ts: -------------------------------------------------------------------------------- 1 | import { MultipartFile } from "fastify-multipart"; 2 | import { FastifyRequest } from "fastify"; 3 | import { tmpdir } from "os"; 4 | import { createWriteStream } from "fs"; 5 | import { mkdir, unlink } from "fs/promises"; 6 | import { Server, IncomingMessage } from "http"; 7 | import { join } from "path"; 8 | import { RouteGenericInterface } from "fastify/types/route"; 9 | 10 | import { StorageFile, Storage } from "./storage"; 11 | import { getUniqueFilename, pathExists } from "../fs"; 12 | import { pump } from "../stream"; 13 | 14 | export interface DiskStorageFile extends StorageFile { 15 | dest: string; 16 | filename: string; 17 | path: string; 18 | } 19 | 20 | type DiskStorageOptionHandler = 21 | | ((file: MultipartFile, req: FastifyRequest) => Promise | string) 22 | | string; 23 | 24 | export interface DiskStorageOptions { 25 | dest?: DiskStorageOptionHandler; 26 | filename?: DiskStorageOptionHandler; 27 | removeAfter?: boolean; 28 | } 29 | 30 | const excecuteStorageHandler = ( 31 | file: MultipartFile, 32 | req: FastifyRequest, 33 | obj?: DiskStorageOptionHandler, 34 | ) => { 35 | if (typeof obj === "function") { 36 | return obj(file, req); 37 | } 38 | 39 | if (obj != null) return obj; 40 | 41 | return null; 42 | }; 43 | 44 | const ENV_TESTS_STORAGE_TMP_PATH = process.env.__TESTS_TMP_PATH__; 45 | export class DiskStorage 46 | implements Storage 47 | { 48 | public readonly options?: DiskStorageOptions; 49 | 50 | constructor(options?: DiskStorageOptions) { 51 | this.options = options; 52 | 53 | if (ENV_TESTS_STORAGE_TMP_PATH != null) { 54 | this.options = { ...this.options, dest: ENV_TESTS_STORAGE_TMP_PATH }; 55 | } 56 | } 57 | 58 | public async handleFile( 59 | file: MultipartFile, 60 | req: FastifyRequest, 61 | ) { 62 | const filename = await this.getFilename(file, req, this.options?.filename); 63 | const dest = await this.getFileDestination(file, req, this.options?.dest); 64 | 65 | if (!(await pathExists(dest))) { 66 | await mkdir(dest, { recursive: true }); 67 | } 68 | 69 | const path = join(dest, filename); 70 | const stream = createWriteStream(path); 71 | 72 | await pump(file.file, stream); 73 | 74 | const { encoding, fieldname, mimetype } = file; 75 | 76 | return { 77 | size: stream.bytesWritten, 78 | dest, 79 | filename, 80 | originalFilename: file.filename, 81 | path, 82 | mimetype, 83 | encoding, 84 | fieldname, 85 | }; 86 | } 87 | 88 | public async removeFile(file: DiskStorageFile, force?: boolean) { 89 | if (!this.options?.removeAfter && !force) return; 90 | 91 | await unlink(file.path); 92 | } 93 | 94 | protected async getFilename( 95 | file: MultipartFile, 96 | req: FastifyRequest, 97 | obj?: DiskStorageOptionHandler, 98 | ): Promise { 99 | return ( 100 | excecuteStorageHandler(file, req, obj) ?? getUniqueFilename(file.filename) 101 | ); 102 | } 103 | 104 | protected async getFileDestination( 105 | file: MultipartFile, 106 | req: FastifyRequest, 107 | obj?: DiskStorageOptionHandler, 108 | ): Promise { 109 | return excecuteStorageHandler(file, req, obj) ?? tmpdir(); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |

fastify-multipart for Nest.js

3 | 4 | [![Github Actions](https://img.shields.io/github/workflow/status/blazity/nest-file-fastify/Build?style=flat-square)](https://github.com/Blazity/nest-file-fastify) 5 | [![NPM](https://img.shields.io/npm/v/@blazity/nest-file-fastify.svg?style=flat-square)](https://www.npmjs.com/package/@blazity/nest-file-fastify) 6 | [![NPM](https://img.shields.io/npm/dm/@blazity/nest-file-fastify?style=flat-square)](https://www.npmjs.com/package/@blazity/nest-file-fastify) 7 | 8 |
9 | 10 | This library adds decorators for [Nest.js](https://github.com/nestjs/nest) to support [@fastify/multipart](https://github.com/fastify/fastify-multipart). The API is very similar to the official Nest.js Express file decorators. 11 | 12 | ## Installation 13 | 14 | NPM 15 | 16 | ```bash 17 | $ npm install @blazity/nest-file-fastify @fastify/multipart 18 | ``` 19 | 20 | Yarn 21 | 22 | ```bash 23 | $ yarn add @blazity/nest-file-fastify @fastify/multipart 24 | ``` 25 | 26 | and register multpart plugin in your Nest.js application 27 | 28 | ```typescript 29 | import fastyfyMultipart from '@fastify/multipart'; 30 | 31 | ... 32 | 33 | app.register(fastyfyMultipart); 34 | ``` 35 | 36 | ## Docs 37 | 38 | ### Single file 39 | 40 | ```ts 41 | import { FileInterceptor, UploadedFile, MemoryStorageFile } from '@blazity/nest-file-fastify'; 42 | 43 | @Post('upload') 44 | @UseInterceptors(FileInterceptor('file')) 45 | uploadFile(@UploadedFile() file: MemoryStorageFile) { 46 | console.log(file); 47 | } 48 | ``` 49 | 50 | `FileInterceptor` arguments: 51 | 52 | - `fieldname`: string - name of the field that holds a file 53 | 54 | - `options`: optional object of type [`UploadOptions`](src/multipart/options.ts#L4) 55 | 56 | ### Array of files 57 | 58 | ```ts 59 | import { FilesInterceptor, UploadedFiles, MemoryStorageFile } from '@blazity/nest-file-fastify'; 60 | 61 | @Post('upload') 62 | @UseInterceptors(FilesInterceptor('files')) 63 | uploadFile(@UploadedFiles() files: MemoryStorageFile[]) { 64 | console.log(files); 65 | } 66 | ``` 67 | 68 | `FilesInterceptor` arguments: 69 | 70 | - `fieldname`: string - name of the field that holds files 71 | 72 | - `maxCount`: optional number - maximum number of files to accept 73 | 74 | - `options`: optional object of type [`UploadOptions`](src/multipart/options.ts#L4) 75 | 76 | ### Multiple files 77 | 78 | ```ts 79 | import { FileFieldsInterceptor, UploadedFiles, MemoryStorageFile } from '@blazity/nest-file-fastify'; 80 | 81 | @Post('upload') 82 | @UseInterceptors(FileFieldsInterceptor([ 83 | { name: 'avatar', maxCount: 1 }, 84 | { name: 'background', maxCount: 1 }, 85 | ])) 86 | uploadFile(@UploadedFiles() files: { avatar?: MemoryStorageFile[], background?: MemoryStorageFile[] }) { 87 | console.log(files); 88 | } 89 | ``` 90 | 91 | `FileFieldsInterceptor` arguments: 92 | 93 | - `uploadFields`: object of type [`UploadField`](src/multipart/handlers/file-fields.ts#L10) 94 | 95 | - `options`: optional object of type [`UploadOptions`](src/multipart/options.ts#L4) 96 | 97 | ### Any files 98 | 99 | ```ts 100 | import { AnyFilesInterceptor, UploadedFiles, MemoryStorageFile } from '@blazity/nest-file-fastify'; 101 | 102 | @Post('upload') 103 | @UseInterceptors(AnyFilesInterceptor() 104 | uploadFile(@UploadedFiles() files: MemoryStorageFile[]) { 105 | console.log(files); 106 | } 107 | ``` 108 | 109 | `AnyFilesInterceptor` arguments: 110 | 111 | - `options`: optional object of type [`UploadOptions`](src/multipart/options.ts#L4) 112 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.14.5": 13 | version "7.15.7" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" 15 | integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.14.5" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 20 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.14.5" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint/eslintrc@^0.4.3": 27 | version "0.4.3" 28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" 29 | integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.1.1" 33 | espree "^7.3.0" 34 | globals "^13.9.0" 35 | ignore "^4.0.6" 36 | import-fresh "^3.2.1" 37 | js-yaml "^3.13.1" 38 | minimatch "^3.0.4" 39 | strip-json-comments "^3.1.1" 40 | 41 | "@fastify/ajv-compiler@^1.0.0": 42 | version "1.1.0" 43 | resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz#5ce80b1fc8bebffc8c5ba428d5e392d0f9ed10a1" 44 | integrity sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg== 45 | dependencies: 46 | ajv "^6.12.6" 47 | 48 | "@humanwhocodes/config-array@^0.5.0": 49 | version "0.5.0" 50 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" 51 | integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== 52 | dependencies: 53 | "@humanwhocodes/object-schema" "^1.2.0" 54 | debug "^4.1.1" 55 | minimatch "^3.0.4" 56 | 57 | "@humanwhocodes/object-schema@^1.2.0": 58 | version "1.2.0" 59 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" 60 | integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== 61 | 62 | "@nestjs/common@^8.0.6": 63 | version "8.0.9" 64 | resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-8.0.9.tgz#1db4f1d3970ffdce62a9234bfe5ab9aa8a75bc44" 65 | integrity sha512-Y3DQxOD57suyvMURpgqX0IBFliMZZNvp1bhvjzjU376Igh33NIz18xhxV9EKe+F0EHHawyM3cv1ZEGYi0yGrtQ== 66 | dependencies: 67 | axios "0.21.4" 68 | iterare "1.2.1" 69 | tslib "2.3.1" 70 | uuid "8.3.2" 71 | 72 | "@nestjs/config@^1.0.1": 73 | version "1.0.1" 74 | resolved "https://registry.yarnpkg.com/@nestjs/config/-/config-1.0.1.tgz#3d794a8af7fb2cc2b1605a8a293eeae14b2d290d" 75 | integrity sha512-azMl4uYlFIhYsywFxPJT81RxF3Pnn0TZW3EEmr0Wa0Wex8R2xpvBNrCcrOgW3TB1xGMP7eqBrlfsVh5ZP82szg== 76 | dependencies: 77 | dotenv "10.0.0" 78 | dotenv-expand "5.1.0" 79 | lodash.get "4.4.2" 80 | lodash.has "4.5.2" 81 | lodash.set "4.3.2" 82 | uuid "8.3.2" 83 | 84 | "@nestjs/core@^8.0.6": 85 | version "8.0.9" 86 | resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-8.0.9.tgz#49e27b726ec6cd12474d18cd8cafd9e44761468d" 87 | integrity sha512-Q8bge+yuFzcuW9iY5fiMz3gydyB3D25dO9/YFGEtHexw2ipQA1QCt94XfIxGqFe1C07k5IDSK/C/l+R33CHrGg== 88 | dependencies: 89 | "@nuxtjs/opencollective" "0.3.2" 90 | fast-safe-stringify "2.1.1" 91 | iterare "1.2.1" 92 | object-hash "2.2.0" 93 | path-to-regexp "3.2.0" 94 | tslib "2.3.1" 95 | uuid "8.3.2" 96 | 97 | "@nestjs/platform-fastify@^8.0.6": 98 | version "8.0.9" 99 | resolved "https://registry.yarnpkg.com/@nestjs/platform-fastify/-/platform-fastify-8.0.9.tgz#dd28a1389364b219a8a8c8a4a1720b12c2a23bdf" 100 | integrity sha512-tv3BZvl8MekKYUWQQfT1TPztoJ5B8B3COboHWXRYtLns/6ntEL+rcJV4i0VLNGqDh1zBN1Qof5lIc47yQXN0zw== 101 | dependencies: 102 | fastify "3.21.6" 103 | fastify-cors "6.0.2" 104 | fastify-formbody "5.1.0" 105 | light-my-request "4.4.4" 106 | middie "5.3.0" 107 | path-to-regexp "3.2.0" 108 | tslib "2.3.1" 109 | 110 | "@nodelib/fs.scandir@2.1.5": 111 | version "2.1.5" 112 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 113 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 114 | dependencies: 115 | "@nodelib/fs.stat" "2.0.5" 116 | run-parallel "^1.1.9" 117 | 118 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 119 | version "2.0.5" 120 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 121 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 122 | 123 | "@nodelib/fs.walk@^1.2.3": 124 | version "1.2.8" 125 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 126 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 127 | dependencies: 128 | "@nodelib/fs.scandir" "2.1.5" 129 | fastq "^1.6.0" 130 | 131 | "@nuxtjs/opencollective@0.3.2": 132 | version "0.3.2" 133 | resolved "https://registry.yarnpkg.com/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz#620ce1044f7ac77185e825e1936115bb38e2681c" 134 | integrity sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA== 135 | dependencies: 136 | chalk "^4.1.0" 137 | consola "^2.15.0" 138 | node-fetch "^2.6.1" 139 | 140 | "@sindresorhus/is@^0.14.0": 141 | version "0.14.0" 142 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" 143 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 144 | 145 | "@szmarczak/http-timer@^1.1.2": 146 | version "1.1.2" 147 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" 148 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== 149 | dependencies: 150 | defer-to-connect "^1.0.1" 151 | 152 | "@types/busboy@^0.2.4": 153 | version "0.2.4" 154 | resolved "https://registry.yarnpkg.com/@types/busboy/-/busboy-0.2.4.tgz#19922f8c7076ad6d47b2565da8c0a94c88776315" 155 | integrity sha512-f+ZCVjlcN8JW/zf3iR0GqO4gjOUlltMTtZjn+YR1mlK+MVu6esTiIecO0/GQlmYQPQLdBnc7+5vG3Xb+SkvFLw== 156 | dependencies: 157 | "@types/node" "*" 158 | 159 | "@types/json-schema@^7.0.7": 160 | version "7.0.9" 161 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" 162 | integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== 163 | 164 | "@types/node@*": 165 | version "16.10.2" 166 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.2.tgz#5764ca9aa94470adb4e1185fe2e9f19458992b2e" 167 | integrity sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ== 168 | 169 | "@types/node@^14.14.10": 170 | version "14.17.20" 171 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.20.tgz#74cc80438fd0467dc4377ee5bbad89a886df3c10" 172 | integrity sha512-gI5Sl30tmhXsqkNvopFydP7ASc4c2cLfGNQrVKN3X90ADFWFsPEsotm/8JHSUJQKTHbwowAHtcJPeyVhtKv0TQ== 173 | 174 | "@typescript-eslint/eslint-plugin@^4.21.0": 175 | version "4.32.0" 176 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz#46d2370ae9311092f2a6f7246d28357daf2d4e89" 177 | integrity sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA== 178 | dependencies: 179 | "@typescript-eslint/experimental-utils" "4.32.0" 180 | "@typescript-eslint/scope-manager" "4.32.0" 181 | debug "^4.3.1" 182 | functional-red-black-tree "^1.0.1" 183 | ignore "^5.1.8" 184 | regexpp "^3.1.0" 185 | semver "^7.3.5" 186 | tsutils "^3.21.0" 187 | 188 | "@typescript-eslint/experimental-utils@4.32.0": 189 | version "4.32.0" 190 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz#53a8267d16ca5a79134739129871966c56a59dc4" 191 | integrity sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A== 192 | dependencies: 193 | "@types/json-schema" "^7.0.7" 194 | "@typescript-eslint/scope-manager" "4.32.0" 195 | "@typescript-eslint/types" "4.32.0" 196 | "@typescript-eslint/typescript-estree" "4.32.0" 197 | eslint-scope "^5.1.1" 198 | eslint-utils "^3.0.0" 199 | 200 | "@typescript-eslint/parser@^4.21.0": 201 | version "4.32.0" 202 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.32.0.tgz#751ecca0e2fecd3d44484a9b3049ffc1871616e5" 203 | integrity sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w== 204 | dependencies: 205 | "@typescript-eslint/scope-manager" "4.32.0" 206 | "@typescript-eslint/types" "4.32.0" 207 | "@typescript-eslint/typescript-estree" "4.32.0" 208 | debug "^4.3.1" 209 | 210 | "@typescript-eslint/scope-manager@4.32.0": 211 | version "4.32.0" 212 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz#e03c8668f8b954072b3f944d5b799c0c9225a7d5" 213 | integrity sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w== 214 | dependencies: 215 | "@typescript-eslint/types" "4.32.0" 216 | "@typescript-eslint/visitor-keys" "4.32.0" 217 | 218 | "@typescript-eslint/types@4.32.0": 219 | version "4.32.0" 220 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.32.0.tgz#52c633c18da47aee09449144bf59565ab36df00d" 221 | integrity sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w== 222 | 223 | "@typescript-eslint/typescript-estree@4.32.0": 224 | version "4.32.0" 225 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz#db00ccc41ccedc8d7367ea3f50c6994b8efa9f3b" 226 | integrity sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw== 227 | dependencies: 228 | "@typescript-eslint/types" "4.32.0" 229 | "@typescript-eslint/visitor-keys" "4.32.0" 230 | debug "^4.3.1" 231 | globby "^11.0.3" 232 | is-glob "^4.0.1" 233 | semver "^7.3.5" 234 | tsutils "^3.21.0" 235 | 236 | "@typescript-eslint/visitor-keys@4.32.0": 237 | version "4.32.0" 238 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz#455ba8b51242f2722a497ffae29313f33b14cb7f" 239 | integrity sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw== 240 | dependencies: 241 | "@typescript-eslint/types" "4.32.0" 242 | eslint-visitor-keys "^2.0.0" 243 | 244 | abbrev@1: 245 | version "1.1.1" 246 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 247 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 248 | 249 | abstract-logging@^2.0.0: 250 | version "2.0.1" 251 | resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" 252 | integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== 253 | 254 | acorn-jsx@^5.3.1: 255 | version "5.3.2" 256 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 257 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 258 | 259 | acorn@^7.4.0: 260 | version "7.4.1" 261 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 262 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 263 | 264 | ajv@^6.10.0, ajv@^6.11.0, ajv@^6.12.4, ajv@^6.12.6: 265 | version "6.12.6" 266 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 267 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 268 | dependencies: 269 | fast-deep-equal "^3.1.1" 270 | fast-json-stable-stringify "^2.0.0" 271 | json-schema-traverse "^0.4.1" 272 | uri-js "^4.2.2" 273 | 274 | ajv@^8.0.1, ajv@^8.1.0: 275 | version "8.6.3" 276 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764" 277 | integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw== 278 | dependencies: 279 | fast-deep-equal "^3.1.1" 280 | json-schema-traverse "^1.0.0" 281 | require-from-string "^2.0.2" 282 | uri-js "^4.2.2" 283 | 284 | ansi-align@^3.0.0: 285 | version "3.0.1" 286 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" 287 | integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== 288 | dependencies: 289 | string-width "^4.1.0" 290 | 291 | ansi-colors@^4.1.1: 292 | version "4.1.1" 293 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 294 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 295 | 296 | ansi-regex@^5.0.1: 297 | version "5.0.1" 298 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 299 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 300 | 301 | ansi-styles@^3.2.1: 302 | version "3.2.1" 303 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 304 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 305 | dependencies: 306 | color-convert "^1.9.0" 307 | 308 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 309 | version "4.3.0" 310 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 311 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 312 | dependencies: 313 | color-convert "^2.0.1" 314 | 315 | anymatch@~3.1.2: 316 | version "3.1.2" 317 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 318 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 319 | dependencies: 320 | normalize-path "^3.0.0" 321 | picomatch "^2.0.4" 322 | 323 | archy@^1.0.0: 324 | version "1.0.0" 325 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 326 | integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= 327 | 328 | argparse@^1.0.7: 329 | version "1.0.10" 330 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 331 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 332 | dependencies: 333 | sprintf-js "~1.0.2" 334 | 335 | array-union@^2.1.0: 336 | version "2.1.0" 337 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 338 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 339 | 340 | astral-regex@^2.0.0: 341 | version "2.0.0" 342 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 343 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 344 | 345 | atomic-sleep@^1.0.0: 346 | version "1.0.0" 347 | resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" 348 | integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== 349 | 350 | avvio@^7.1.2: 351 | version "7.2.2" 352 | resolved "https://registry.yarnpkg.com/avvio/-/avvio-7.2.2.tgz#58e00e7968870026cd7b7d4f689d596db629e251" 353 | integrity sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw== 354 | dependencies: 355 | archy "^1.0.0" 356 | debug "^4.0.0" 357 | fastq "^1.6.1" 358 | queue-microtask "^1.1.2" 359 | 360 | axios@0.21.4: 361 | version "0.21.4" 362 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" 363 | integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== 364 | dependencies: 365 | follow-redirects "^1.14.0" 366 | 367 | balanced-match@^1.0.0: 368 | version "1.0.2" 369 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 370 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 371 | 372 | binary-extensions@^2.0.0: 373 | version "2.2.0" 374 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 375 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 376 | 377 | boxen@^5.0.0: 378 | version "5.1.2" 379 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" 380 | integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== 381 | dependencies: 382 | ansi-align "^3.0.0" 383 | camelcase "^6.2.0" 384 | chalk "^4.1.0" 385 | cli-boxes "^2.2.1" 386 | string-width "^4.2.2" 387 | type-fest "^0.20.2" 388 | widest-line "^3.1.0" 389 | wrap-ansi "^7.0.0" 390 | 391 | brace-expansion@^1.1.7: 392 | version "1.1.11" 393 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 394 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 395 | dependencies: 396 | balanced-match "^1.0.0" 397 | concat-map "0.0.1" 398 | 399 | braces@^3.0.1, braces@~3.0.2: 400 | version "3.0.2" 401 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 402 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 403 | dependencies: 404 | fill-range "^7.0.1" 405 | 406 | busboy@^0.3.1: 407 | version "0.3.1" 408 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" 409 | integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== 410 | dependencies: 411 | dicer "0.3.0" 412 | 413 | cacheable-request@^6.0.0: 414 | version "6.1.0" 415 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" 416 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== 417 | dependencies: 418 | clone-response "^1.0.2" 419 | get-stream "^5.1.0" 420 | http-cache-semantics "^4.0.0" 421 | keyv "^3.0.0" 422 | lowercase-keys "^2.0.0" 423 | normalize-url "^4.1.0" 424 | responselike "^1.0.2" 425 | 426 | callsites@^3.0.0: 427 | version "3.1.0" 428 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 429 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 430 | 431 | camelcase@^6.2.0: 432 | version "6.2.0" 433 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 434 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 435 | 436 | chalk@^2.0.0: 437 | version "2.4.2" 438 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 439 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 440 | dependencies: 441 | ansi-styles "^3.2.1" 442 | escape-string-regexp "^1.0.5" 443 | supports-color "^5.3.0" 444 | 445 | chalk@^4.0.0, chalk@^4.1.0: 446 | version "4.1.2" 447 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 448 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 449 | dependencies: 450 | ansi-styles "^4.1.0" 451 | supports-color "^7.1.0" 452 | 453 | chokidar@^3.2.2: 454 | version "3.5.2" 455 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" 456 | integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== 457 | dependencies: 458 | anymatch "~3.1.2" 459 | braces "~3.0.2" 460 | glob-parent "~5.1.2" 461 | is-binary-path "~2.1.0" 462 | is-glob "~4.0.1" 463 | normalize-path "~3.0.0" 464 | readdirp "~3.6.0" 465 | optionalDependencies: 466 | fsevents "~2.3.2" 467 | 468 | ci-info@^2.0.0: 469 | version "2.0.0" 470 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 471 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 472 | 473 | cli-boxes@^2.2.1: 474 | version "2.2.1" 475 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" 476 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== 477 | 478 | cliui@^7.0.2: 479 | version "7.0.4" 480 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 481 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 482 | dependencies: 483 | string-width "^4.2.0" 484 | strip-ansi "^6.0.0" 485 | wrap-ansi "^7.0.0" 486 | 487 | clone-response@^1.0.2: 488 | version "1.0.2" 489 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 490 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= 491 | dependencies: 492 | mimic-response "^1.0.0" 493 | 494 | color-convert@^1.9.0: 495 | version "1.9.3" 496 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 497 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 498 | dependencies: 499 | color-name "1.1.3" 500 | 501 | color-convert@^2.0.1: 502 | version "2.0.1" 503 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 504 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 505 | dependencies: 506 | color-name "~1.1.4" 507 | 508 | color-name@1.1.3: 509 | version "1.1.3" 510 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 511 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 512 | 513 | color-name@~1.1.4: 514 | version "1.1.4" 515 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 516 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 517 | 518 | concat-map@0.0.1: 519 | version "0.0.1" 520 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 521 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 522 | 523 | concurrently@^6.2.1: 524 | version "6.2.2" 525 | resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-6.2.2.tgz#81c11b85d9a7de56ad4388ff6aab4a94ddea51f2" 526 | integrity sha512-7a45BjVakAl3pprLOeqaOoZfIWZRmdC68NkjyzPbKu0/pE6CRmqS3l8RG7Q2cX9LnRHkB0oPM6af8PS7NEQvYQ== 527 | dependencies: 528 | chalk "^4.1.0" 529 | date-fns "^2.16.1" 530 | lodash "^4.17.21" 531 | rxjs "^6.6.3" 532 | spawn-command "^0.0.2-1" 533 | supports-color "^8.1.0" 534 | tree-kill "^1.2.2" 535 | yargs "^16.2.0" 536 | 537 | configstore@^5.0.1: 538 | version "5.0.1" 539 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" 540 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== 541 | dependencies: 542 | dot-prop "^5.2.0" 543 | graceful-fs "^4.1.2" 544 | make-dir "^3.0.0" 545 | unique-string "^2.0.0" 546 | write-file-atomic "^3.0.0" 547 | xdg-basedir "^4.0.0" 548 | 549 | consola@^2.15.0: 550 | version "2.15.3" 551 | resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" 552 | integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== 553 | 554 | cookie@^0.4.0: 555 | version "0.4.1" 556 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" 557 | integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== 558 | 559 | cross-env@^7.0.3: 560 | version "7.0.3" 561 | resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" 562 | integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== 563 | dependencies: 564 | cross-spawn "^7.0.1" 565 | 566 | cross-spawn@^7.0.1, cross-spawn@^7.0.2: 567 | version "7.0.3" 568 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 569 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 570 | dependencies: 571 | path-key "^3.1.0" 572 | shebang-command "^2.0.0" 573 | which "^2.0.1" 574 | 575 | crypto-random-string@^2.0.0: 576 | version "2.0.0" 577 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" 578 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== 579 | 580 | date-fns@^2.16.1: 581 | version "2.24.0" 582 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.24.0.tgz#7d86dc0d93c87b76b63d213b4413337cfd1c105d" 583 | integrity sha512-6ujwvwgPID6zbI0o7UbURi2vlLDR9uP26+tW6Lg+Ji3w7dd0i3DOcjcClLjLPranT60SSEFBwdSyYwn/ZkPIuw== 584 | 585 | debug@^2.2.0: 586 | version "2.6.9" 587 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 588 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 589 | dependencies: 590 | ms "2.0.0" 591 | 592 | debug@^3.2.6: 593 | version "3.2.7" 594 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 595 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 596 | dependencies: 597 | ms "^2.1.1" 598 | 599 | debug@^4.0.0, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: 600 | version "4.3.2" 601 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 602 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 603 | dependencies: 604 | ms "2.1.2" 605 | 606 | decompress-response@^3.3.0: 607 | version "3.3.0" 608 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 609 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 610 | dependencies: 611 | mimic-response "^1.0.0" 612 | 613 | deep-extend@^0.6.0: 614 | version "0.6.0" 615 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 616 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 617 | 618 | deep-is@^0.1.3: 619 | version "0.1.4" 620 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 621 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 622 | 623 | deepmerge@^4.2.2: 624 | version "4.2.2" 625 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 626 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 627 | 628 | defer-to-connect@^1.0.1: 629 | version "1.1.3" 630 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 631 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 632 | 633 | dicer@0.3.0: 634 | version "0.3.0" 635 | resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" 636 | integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== 637 | dependencies: 638 | streamsearch "0.1.2" 639 | 640 | dir-glob@^3.0.1: 641 | version "3.0.1" 642 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 643 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 644 | dependencies: 645 | path-type "^4.0.0" 646 | 647 | doctrine@^3.0.0: 648 | version "3.0.0" 649 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 650 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 651 | dependencies: 652 | esutils "^2.0.2" 653 | 654 | dot-prop@^5.2.0: 655 | version "5.3.0" 656 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" 657 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== 658 | dependencies: 659 | is-obj "^2.0.0" 660 | 661 | dotenv-expand@5.1.0: 662 | version "5.1.0" 663 | resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" 664 | integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== 665 | 666 | dotenv@10.0.0: 667 | version "10.0.0" 668 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" 669 | integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== 670 | 671 | duplexer3@^0.1.4: 672 | version "0.1.4" 673 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 674 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 675 | 676 | emoji-regex@^8.0.0: 677 | version "8.0.0" 678 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 679 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 680 | 681 | end-of-stream@^1.1.0, end-of-stream@^1.4.4: 682 | version "1.4.4" 683 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 684 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 685 | dependencies: 686 | once "^1.4.0" 687 | 688 | enquirer@^2.3.5: 689 | version "2.3.6" 690 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 691 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 692 | dependencies: 693 | ansi-colors "^4.1.1" 694 | 695 | escalade@^3.1.1: 696 | version "3.1.1" 697 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 698 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 699 | 700 | escape-goat@^2.0.0: 701 | version "2.1.1" 702 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" 703 | integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== 704 | 705 | escape-string-regexp@^1.0.5: 706 | version "1.0.5" 707 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 708 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 709 | 710 | escape-string-regexp@^4.0.0: 711 | version "4.0.0" 712 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 713 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 714 | 715 | eslint-config-prettier@^7.0.0: 716 | version "7.2.0" 717 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" 718 | integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== 719 | 720 | eslint-plugin-prettier@^3.2.0: 721 | version "3.4.1" 722 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" 723 | integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== 724 | dependencies: 725 | prettier-linter-helpers "^1.0.0" 726 | 727 | eslint-scope@^5.1.1: 728 | version "5.1.1" 729 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 730 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 731 | dependencies: 732 | esrecurse "^4.3.0" 733 | estraverse "^4.1.1" 734 | 735 | eslint-utils@^2.1.0: 736 | version "2.1.0" 737 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 738 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 739 | dependencies: 740 | eslint-visitor-keys "^1.1.0" 741 | 742 | eslint-utils@^3.0.0: 743 | version "3.0.0" 744 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 745 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 746 | dependencies: 747 | eslint-visitor-keys "^2.0.0" 748 | 749 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 750 | version "1.3.0" 751 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 752 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 753 | 754 | eslint-visitor-keys@^2.0.0: 755 | version "2.1.0" 756 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 757 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 758 | 759 | eslint@^7.32.0: 760 | version "7.32.0" 761 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" 762 | integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== 763 | dependencies: 764 | "@babel/code-frame" "7.12.11" 765 | "@eslint/eslintrc" "^0.4.3" 766 | "@humanwhocodes/config-array" "^0.5.0" 767 | ajv "^6.10.0" 768 | chalk "^4.0.0" 769 | cross-spawn "^7.0.2" 770 | debug "^4.0.1" 771 | doctrine "^3.0.0" 772 | enquirer "^2.3.5" 773 | escape-string-regexp "^4.0.0" 774 | eslint-scope "^5.1.1" 775 | eslint-utils "^2.1.0" 776 | eslint-visitor-keys "^2.0.0" 777 | espree "^7.3.1" 778 | esquery "^1.4.0" 779 | esutils "^2.0.2" 780 | fast-deep-equal "^3.1.3" 781 | file-entry-cache "^6.0.1" 782 | functional-red-black-tree "^1.0.1" 783 | glob-parent "^5.1.2" 784 | globals "^13.6.0" 785 | ignore "^4.0.6" 786 | import-fresh "^3.0.0" 787 | imurmurhash "^0.1.4" 788 | is-glob "^4.0.0" 789 | js-yaml "^3.13.1" 790 | json-stable-stringify-without-jsonify "^1.0.1" 791 | levn "^0.4.1" 792 | lodash.merge "^4.6.2" 793 | minimatch "^3.0.4" 794 | natural-compare "^1.4.0" 795 | optionator "^0.9.1" 796 | progress "^2.0.0" 797 | regexpp "^3.1.0" 798 | semver "^7.2.1" 799 | strip-ansi "^6.0.0" 800 | strip-json-comments "^3.1.0" 801 | table "^6.0.9" 802 | text-table "^0.2.0" 803 | v8-compile-cache "^2.0.3" 804 | 805 | espree@^7.3.0, espree@^7.3.1: 806 | version "7.3.1" 807 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 808 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 809 | dependencies: 810 | acorn "^7.4.0" 811 | acorn-jsx "^5.3.1" 812 | eslint-visitor-keys "^1.3.0" 813 | 814 | esprima@^4.0.0: 815 | version "4.0.1" 816 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 817 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 818 | 819 | esquery@^1.4.0: 820 | version "1.4.0" 821 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 822 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 823 | dependencies: 824 | estraverse "^5.1.0" 825 | 826 | esrecurse@^4.3.0: 827 | version "4.3.0" 828 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 829 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 830 | dependencies: 831 | estraverse "^5.2.0" 832 | 833 | estraverse@^4.1.1: 834 | version "4.3.0" 835 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 836 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 837 | 838 | estraverse@^5.1.0, estraverse@^5.2.0: 839 | version "5.2.0" 840 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 841 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 842 | 843 | esutils@^2.0.2: 844 | version "2.0.3" 845 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 846 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 847 | 848 | fast-decode-uri-component@^1.0.1: 849 | version "1.0.1" 850 | resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" 851 | integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== 852 | 853 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 854 | version "3.1.3" 855 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 856 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 857 | 858 | fast-diff@^1.1.2: 859 | version "1.2.0" 860 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 861 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 862 | 863 | fast-glob@^3.1.1: 864 | version "3.2.7" 865 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" 866 | integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== 867 | dependencies: 868 | "@nodelib/fs.stat" "^2.0.2" 869 | "@nodelib/fs.walk" "^1.2.3" 870 | glob-parent "^5.1.2" 871 | merge2 "^1.3.0" 872 | micromatch "^4.0.4" 873 | 874 | fast-json-stable-stringify@^2.0.0: 875 | version "2.1.0" 876 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 877 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 878 | 879 | fast-json-stringify@^2.5.2: 880 | version "2.7.10" 881 | resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-2.7.10.tgz#7afcdf2e8bfeee9d361b38781deadae8e154e8b0" 882 | integrity sha512-MPuVXMMueV8e3TRVLOpxxicJnSdu5mwbHrsO9IZU15zqfay6k19OqIv7N2DCeNPDOCNOmZwjvMUTwvblZsUmFw== 883 | dependencies: 884 | ajv "^6.11.0" 885 | deepmerge "^4.2.2" 886 | rfdc "^1.2.0" 887 | string-similarity "^4.0.1" 888 | 889 | fast-levenshtein@^2.0.6: 890 | version "2.0.6" 891 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 892 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 893 | 894 | fast-redact@^3.0.0: 895 | version "3.0.2" 896 | resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.0.2.tgz#c940ba7162dde3aeeefc522926ae8c5231412904" 897 | integrity sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg== 898 | 899 | fast-safe-stringify@2.1.1, fast-safe-stringify@^2.0.8: 900 | version "2.1.1" 901 | resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" 902 | integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== 903 | 904 | fastify-cors@6.0.2: 905 | version "6.0.2" 906 | resolved "https://registry.yarnpkg.com/fastify-cors/-/fastify-cors-6.0.2.tgz#4fd5102549659e9b34d252fd7ee607b63d021390" 907 | integrity sha512-sE0AOyzmj5hLLRRVgenjA6G2iOGX35/1S3QGYB9rr9TXelMZB3lFrXy4CzwYVOMiujJeMiLgO4J7eRm8sQSv8Q== 908 | dependencies: 909 | fastify-plugin "^3.0.0" 910 | vary "^1.1.2" 911 | 912 | fastify-error@^0.3.0: 913 | version "0.3.1" 914 | resolved "https://registry.yarnpkg.com/fastify-error/-/fastify-error-0.3.1.tgz#8eb993e15e3cf57f0357fc452af9290f1c1278d2" 915 | integrity sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ== 916 | 917 | fastify-formbody@5.1.0: 918 | version "5.1.0" 919 | resolved "https://registry.yarnpkg.com/fastify-formbody/-/fastify-formbody-5.1.0.tgz#65cccf9792aac1a638927f7150cd1ea30908d8dc" 920 | integrity sha512-dLFQ8gMQeLuV45J72svDbrp6CZ3hxsaiK2dd3vzoiCs9wEmCSbbJV+/afQl1cfvf19+NfCIzYVQIg1r4yO4Epw== 921 | dependencies: 922 | fastify-plugin "^3.0.0" 923 | 924 | fastify-multipart@^5.0.0: 925 | version "5.0.1" 926 | resolved "https://registry.yarnpkg.com/fastify-multipart/-/fastify-multipart-5.0.1.tgz#a2ff26a58d306bdd38cada6185bde99f7fce799a" 927 | integrity sha512-lBetyftankDsub3Cp59AxRMB6WX7ZHufEknfXNieLDzwB7a+cuS67x+PIYxcZJoU62epkaPK63tUJAoc7uLg9Q== 928 | dependencies: 929 | busboy "^0.3.1" 930 | deepmerge "^4.2.2" 931 | end-of-stream "^1.4.4" 932 | fastify-error "^0.3.0" 933 | fastify-plugin "^3.0.0" 934 | hexoid "^1.0.0" 935 | stream-wormhole "^1.1.0" 936 | 937 | fastify-plugin@^3.0.0: 938 | version "3.0.0" 939 | resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-3.0.0.tgz#cf1b8c8098e3b5a7c8c30e6aeb06903370c054ca" 940 | integrity sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w== 941 | 942 | fastify-warning@^0.2.0: 943 | version "0.2.0" 944 | resolved "https://registry.yarnpkg.com/fastify-warning/-/fastify-warning-0.2.0.tgz#e717776026a4493dc9a2befa44db6d17f618008f" 945 | integrity sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw== 946 | 947 | fastify@3.21.6: 948 | version "3.21.6" 949 | resolved "https://registry.yarnpkg.com/fastify/-/fastify-3.21.6.tgz#a8235518147ea469a98ec3e5d4599f56eac3ff09" 950 | integrity sha512-PextZFavEZaqn2ZYbVGBPAI0AiElnVdfqo9sN1wlOi0mhGtYuec4KT82MHe5npCf3Lz++6i7jLl7YKyYidPrMg== 951 | dependencies: 952 | "@fastify/ajv-compiler" "^1.0.0" 953 | abstract-logging "^2.0.0" 954 | avvio "^7.1.2" 955 | fast-json-stringify "^2.5.2" 956 | fastify-error "^0.3.0" 957 | fastify-warning "^0.2.0" 958 | find-my-way "^4.1.0" 959 | flatstr "^1.0.12" 960 | light-my-request "^4.2.0" 961 | pino "^6.13.0" 962 | proxy-addr "^2.0.7" 963 | readable-stream "^3.4.0" 964 | rfdc "^1.1.4" 965 | secure-json-parse "^2.0.0" 966 | semver "^7.3.2" 967 | tiny-lru "^7.0.0" 968 | 969 | fastify@^3.21.3: 970 | version "3.22.0" 971 | resolved "https://registry.yarnpkg.com/fastify/-/fastify-3.22.0.tgz#c8d265f0117762c0139fb0b567e815165e02a5e1" 972 | integrity sha512-JWNf/S90SOiOp6SwhMFdTT43+jT/gB2Yi2tPHQ/e7Kaua9PzFLm7Qmwhe2jBA3X6HPDKNugrRd7oPYeIb1Q3Zg== 973 | dependencies: 974 | "@fastify/ajv-compiler" "^1.0.0" 975 | abstract-logging "^2.0.0" 976 | avvio "^7.1.2" 977 | fast-json-stringify "^2.5.2" 978 | fastify-error "^0.3.0" 979 | fastify-warning "^0.2.0" 980 | find-my-way "^4.1.0" 981 | flatstr "^1.0.12" 982 | light-my-request "^4.2.0" 983 | pino "^6.13.0" 984 | proxy-addr "^2.0.7" 985 | readable-stream "^3.4.0" 986 | rfdc "^1.1.4" 987 | secure-json-parse "^2.0.0" 988 | semver "^7.3.2" 989 | tiny-lru "^7.0.0" 990 | 991 | fastq@^1.6.0, fastq@^1.6.1: 992 | version "1.13.0" 993 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" 994 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 995 | dependencies: 996 | reusify "^1.0.4" 997 | 998 | file-entry-cache@^6.0.1: 999 | version "6.0.1" 1000 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 1001 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1002 | dependencies: 1003 | flat-cache "^3.0.4" 1004 | 1005 | fill-range@^7.0.1: 1006 | version "7.0.1" 1007 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1008 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1009 | dependencies: 1010 | to-regex-range "^5.0.1" 1011 | 1012 | find-my-way@^4.1.0: 1013 | version "4.3.3" 1014 | resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-4.3.3.tgz#2ab3880a03bcaa8594548d66b0cd1c5a6e98dd44" 1015 | integrity sha512-5E4bRdaATB1MewjOCBjx4xvD205a4t2ripCnXB+YFhYEJ0NABtrcC7XLXLq0TPoFe/WYGUFqys3Qk3HCOGeNcw== 1016 | dependencies: 1017 | fast-decode-uri-component "^1.0.1" 1018 | fast-deep-equal "^3.1.3" 1019 | safe-regex2 "^2.0.0" 1020 | semver-store "^0.3.0" 1021 | 1022 | flat-cache@^3.0.4: 1023 | version "3.0.4" 1024 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 1025 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1026 | dependencies: 1027 | flatted "^3.1.0" 1028 | rimraf "^3.0.2" 1029 | 1030 | flatstr@^1.0.12: 1031 | version "1.0.12" 1032 | resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" 1033 | integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== 1034 | 1035 | flatted@^3.1.0: 1036 | version "3.2.2" 1037 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" 1038 | integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== 1039 | 1040 | follow-redirects@^1.14.0: 1041 | version "1.14.4" 1042 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" 1043 | integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== 1044 | 1045 | forwarded@0.2.0: 1046 | version "0.2.0" 1047 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 1048 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 1049 | 1050 | fs.realpath@^1.0.0: 1051 | version "1.0.0" 1052 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1053 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1054 | 1055 | fsevents@~2.3.2: 1056 | version "2.3.2" 1057 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1058 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1059 | 1060 | functional-red-black-tree@^1.0.1: 1061 | version "1.0.1" 1062 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1063 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 1064 | 1065 | get-caller-file@^2.0.5: 1066 | version "2.0.5" 1067 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1068 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1069 | 1070 | get-stream@^4.1.0: 1071 | version "4.1.0" 1072 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 1073 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 1074 | dependencies: 1075 | pump "^3.0.0" 1076 | 1077 | get-stream@^5.1.0: 1078 | version "5.2.0" 1079 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 1080 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 1081 | dependencies: 1082 | pump "^3.0.0" 1083 | 1084 | glob-parent@^5.1.2, glob-parent@~5.1.2: 1085 | version "5.1.2" 1086 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1087 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1088 | dependencies: 1089 | is-glob "^4.0.1" 1090 | 1091 | glob@^7.1.3: 1092 | version "7.2.0" 1093 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 1094 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 1095 | dependencies: 1096 | fs.realpath "^1.0.0" 1097 | inflight "^1.0.4" 1098 | inherits "2" 1099 | minimatch "^3.0.4" 1100 | once "^1.3.0" 1101 | path-is-absolute "^1.0.0" 1102 | 1103 | global-dirs@^3.0.0: 1104 | version "3.0.0" 1105 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" 1106 | integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== 1107 | dependencies: 1108 | ini "2.0.0" 1109 | 1110 | globals@^13.6.0, globals@^13.9.0: 1111 | version "13.11.0" 1112 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" 1113 | integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== 1114 | dependencies: 1115 | type-fest "^0.20.2" 1116 | 1117 | globby@^11.0.3: 1118 | version "11.0.4" 1119 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" 1120 | integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== 1121 | dependencies: 1122 | array-union "^2.1.0" 1123 | dir-glob "^3.0.1" 1124 | fast-glob "^3.1.1" 1125 | ignore "^5.1.4" 1126 | merge2 "^1.3.0" 1127 | slash "^3.0.0" 1128 | 1129 | got@^9.6.0: 1130 | version "9.6.0" 1131 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" 1132 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== 1133 | dependencies: 1134 | "@sindresorhus/is" "^0.14.0" 1135 | "@szmarczak/http-timer" "^1.1.2" 1136 | cacheable-request "^6.0.0" 1137 | decompress-response "^3.3.0" 1138 | duplexer3 "^0.1.4" 1139 | get-stream "^4.1.0" 1140 | lowercase-keys "^1.0.1" 1141 | mimic-response "^1.0.1" 1142 | p-cancelable "^1.0.0" 1143 | to-readable-stream "^1.0.0" 1144 | url-parse-lax "^3.0.0" 1145 | 1146 | graceful-fs@^4.1.2: 1147 | version "4.2.8" 1148 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" 1149 | integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== 1150 | 1151 | has-flag@^3.0.0: 1152 | version "3.0.0" 1153 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1154 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1155 | 1156 | has-flag@^4.0.0: 1157 | version "4.0.0" 1158 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1159 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1160 | 1161 | has-yarn@^2.1.0: 1162 | version "2.1.0" 1163 | resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" 1164 | integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== 1165 | 1166 | hexoid@^1.0.0: 1167 | version "1.0.0" 1168 | resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" 1169 | integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== 1170 | 1171 | http-cache-semantics@^4.0.0: 1172 | version "4.1.0" 1173 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 1174 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 1175 | 1176 | ignore-by-default@^1.0.1: 1177 | version "1.0.1" 1178 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 1179 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 1180 | 1181 | ignore@^4.0.6: 1182 | version "4.0.6" 1183 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 1184 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1185 | 1186 | ignore@^5.1.4, ignore@^5.1.8: 1187 | version "5.1.8" 1188 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 1189 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 1190 | 1191 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1192 | version "3.3.0" 1193 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1194 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1195 | dependencies: 1196 | parent-module "^1.0.0" 1197 | resolve-from "^4.0.0" 1198 | 1199 | import-lazy@^2.1.0: 1200 | version "2.1.0" 1201 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 1202 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 1203 | 1204 | imurmurhash@^0.1.4: 1205 | version "0.1.4" 1206 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1207 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1208 | 1209 | inflight@^1.0.4: 1210 | version "1.0.6" 1211 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1212 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1213 | dependencies: 1214 | once "^1.3.0" 1215 | wrappy "1" 1216 | 1217 | inherits@2, inherits@^2.0.3: 1218 | version "2.0.4" 1219 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1220 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1221 | 1222 | ini@2.0.0: 1223 | version "2.0.0" 1224 | resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" 1225 | integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== 1226 | 1227 | ini@~1.3.0: 1228 | version "1.3.8" 1229 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 1230 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 1231 | 1232 | ipaddr.js@1.9.1: 1233 | version "1.9.1" 1234 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 1235 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 1236 | 1237 | is-binary-path@~2.1.0: 1238 | version "2.1.0" 1239 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1240 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1241 | dependencies: 1242 | binary-extensions "^2.0.0" 1243 | 1244 | is-ci@^2.0.0: 1245 | version "2.0.0" 1246 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 1247 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 1248 | dependencies: 1249 | ci-info "^2.0.0" 1250 | 1251 | is-extglob@^2.1.1: 1252 | version "2.1.1" 1253 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1254 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1255 | 1256 | is-fullwidth-code-point@^3.0.0: 1257 | version "3.0.0" 1258 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1259 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1260 | 1261 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: 1262 | version "4.0.3" 1263 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1264 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1265 | dependencies: 1266 | is-extglob "^2.1.1" 1267 | 1268 | is-installed-globally@^0.4.0: 1269 | version "0.4.0" 1270 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" 1271 | integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== 1272 | dependencies: 1273 | global-dirs "^3.0.0" 1274 | is-path-inside "^3.0.2" 1275 | 1276 | is-npm@^5.0.0: 1277 | version "5.0.0" 1278 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" 1279 | integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== 1280 | 1281 | is-number@^7.0.0: 1282 | version "7.0.0" 1283 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1284 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1285 | 1286 | is-obj@^2.0.0: 1287 | version "2.0.0" 1288 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" 1289 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== 1290 | 1291 | is-path-inside@^3.0.2: 1292 | version "3.0.3" 1293 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1294 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1295 | 1296 | is-typedarray@^1.0.0: 1297 | version "1.0.0" 1298 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1299 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1300 | 1301 | is-yarn-global@^0.3.0: 1302 | version "0.3.0" 1303 | resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" 1304 | integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== 1305 | 1306 | isexe@^2.0.0: 1307 | version "2.0.0" 1308 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1309 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1310 | 1311 | iterare@1.2.1: 1312 | version "1.2.1" 1313 | resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.1.tgz#139c400ff7363690e33abffa33cbba8920f00042" 1314 | integrity sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q== 1315 | 1316 | js-tokens@^4.0.0: 1317 | version "4.0.0" 1318 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1319 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1320 | 1321 | js-yaml@^3.13.1: 1322 | version "3.14.1" 1323 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1324 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1325 | dependencies: 1326 | argparse "^1.0.7" 1327 | esprima "^4.0.0" 1328 | 1329 | json-buffer@3.0.0: 1330 | version "3.0.0" 1331 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" 1332 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= 1333 | 1334 | json-schema-traverse@^0.4.1: 1335 | version "0.4.1" 1336 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1337 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1338 | 1339 | json-schema-traverse@^1.0.0: 1340 | version "1.0.0" 1341 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 1342 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 1343 | 1344 | json-stable-stringify-without-jsonify@^1.0.1: 1345 | version "1.0.1" 1346 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1347 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1348 | 1349 | keyv@^3.0.0: 1350 | version "3.1.0" 1351 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" 1352 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== 1353 | dependencies: 1354 | json-buffer "3.0.0" 1355 | 1356 | latest-version@^5.1.0: 1357 | version "5.1.0" 1358 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" 1359 | integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== 1360 | dependencies: 1361 | package-json "^6.3.0" 1362 | 1363 | levn@^0.4.1: 1364 | version "0.4.1" 1365 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1366 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1367 | dependencies: 1368 | prelude-ls "^1.2.1" 1369 | type-check "~0.4.0" 1370 | 1371 | light-my-request@4.4.4, light-my-request@^4.2.0: 1372 | version "4.4.4" 1373 | resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-4.4.4.tgz#051e0d440a7bdaea31bcbe6b480a67a8df77c203" 1374 | integrity sha512-nxYLB+Lke3wGQ55HQIo/CjSS18xGyHRF0y/u7YxEwp1YsqQTxObteBXYHZY3ELSvYmqy0pRLTWbI5//zRYTXlg== 1375 | dependencies: 1376 | ajv "^8.1.0" 1377 | cookie "^0.4.0" 1378 | fastify-warning "^0.2.0" 1379 | readable-stream "^3.6.0" 1380 | set-cookie-parser "^2.4.1" 1381 | 1382 | lodash.clonedeep@^4.5.0: 1383 | version "4.5.0" 1384 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" 1385 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= 1386 | 1387 | lodash.get@4.4.2: 1388 | version "4.4.2" 1389 | resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" 1390 | integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= 1391 | 1392 | lodash.has@4.5.2: 1393 | version "4.5.2" 1394 | resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" 1395 | integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= 1396 | 1397 | lodash.merge@^4.6.2: 1398 | version "4.6.2" 1399 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1400 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1401 | 1402 | lodash.set@4.3.2: 1403 | version "4.3.2" 1404 | resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" 1405 | integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= 1406 | 1407 | lodash.truncate@^4.4.2: 1408 | version "4.4.2" 1409 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" 1410 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= 1411 | 1412 | lodash@^4.17.21: 1413 | version "4.17.21" 1414 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1415 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1416 | 1417 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: 1418 | version "1.0.1" 1419 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 1420 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 1421 | 1422 | lowercase-keys@^2.0.0: 1423 | version "2.0.0" 1424 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 1425 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 1426 | 1427 | lru-cache@^6.0.0: 1428 | version "6.0.0" 1429 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1430 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1431 | dependencies: 1432 | yallist "^4.0.0" 1433 | 1434 | make-dir@^3.0.0: 1435 | version "3.1.0" 1436 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1437 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1438 | dependencies: 1439 | semver "^6.0.0" 1440 | 1441 | merge2@^1.3.0: 1442 | version "1.4.1" 1443 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1444 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1445 | 1446 | micromatch@^4.0.4: 1447 | version "4.0.4" 1448 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 1449 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 1450 | dependencies: 1451 | braces "^3.0.1" 1452 | picomatch "^2.2.3" 1453 | 1454 | middie@5.3.0: 1455 | version "5.3.0" 1456 | resolved "https://registry.yarnpkg.com/middie/-/middie-5.3.0.tgz#6c871b3efecdb65f86c67a7787336d39b03d626d" 1457 | integrity sha512-uq6Ob4dmmHeT6rJpBDWVwSxBzxzKlBvnrZdLSRJeuhHzljvZ6ccgLP/HaShgfiYrQvekRH0KUe/G1WTu/IrXsQ== 1458 | dependencies: 1459 | fastify-plugin "^3.0.0" 1460 | path-to-regexp "^6.1.0" 1461 | reusify "^1.0.4" 1462 | 1463 | mimic-response@^1.0.0, mimic-response@^1.0.1: 1464 | version "1.0.1" 1465 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 1466 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 1467 | 1468 | minimatch@^3.0.4: 1469 | version "3.0.4" 1470 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1471 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1472 | dependencies: 1473 | brace-expansion "^1.1.7" 1474 | 1475 | minimist@^1.2.0: 1476 | version "1.2.5" 1477 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1478 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1479 | 1480 | ms@2.0.0: 1481 | version "2.0.0" 1482 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1483 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1484 | 1485 | ms@2.1.2: 1486 | version "2.1.2" 1487 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1488 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1489 | 1490 | ms@^2.1.1: 1491 | version "2.1.3" 1492 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1493 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1494 | 1495 | natural-compare@^1.4.0: 1496 | version "1.4.0" 1497 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1498 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1499 | 1500 | node-fetch@^2.6.1: 1501 | version "2.6.5" 1502 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd" 1503 | integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ== 1504 | dependencies: 1505 | whatwg-url "^5.0.0" 1506 | 1507 | nodemon@^2.0.12: 1508 | version "2.0.13" 1509 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.13.tgz#67d40d3a4d5bd840aa785c56587269cfcf5d24aa" 1510 | integrity sha512-UMXMpsZsv1UXUttCn6gv8eQPhn6DR4BW+txnL3IN5IHqrCwcrT/yWHfL35UsClGXknTH79r5xbu+6J1zNHuSyA== 1511 | dependencies: 1512 | chokidar "^3.2.2" 1513 | debug "^3.2.6" 1514 | ignore-by-default "^1.0.1" 1515 | minimatch "^3.0.4" 1516 | pstree.remy "^1.1.7" 1517 | semver "^5.7.1" 1518 | supports-color "^5.5.0" 1519 | touch "^3.1.0" 1520 | undefsafe "^2.0.3" 1521 | update-notifier "^5.1.0" 1522 | 1523 | nopt@~1.0.10: 1524 | version "1.0.10" 1525 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 1526 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 1527 | dependencies: 1528 | abbrev "1" 1529 | 1530 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1531 | version "3.0.0" 1532 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1533 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1534 | 1535 | normalize-url@^4.1.0: 1536 | version "4.5.1" 1537 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" 1538 | integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== 1539 | 1540 | object-hash@2.2.0: 1541 | version "2.2.0" 1542 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" 1543 | integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== 1544 | 1545 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1546 | version "1.4.0" 1547 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1548 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1549 | dependencies: 1550 | wrappy "1" 1551 | 1552 | optionator@^0.9.1: 1553 | version "0.9.1" 1554 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1555 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1556 | dependencies: 1557 | deep-is "^0.1.3" 1558 | fast-levenshtein "^2.0.6" 1559 | levn "^0.4.1" 1560 | prelude-ls "^1.2.1" 1561 | type-check "^0.4.0" 1562 | word-wrap "^1.2.3" 1563 | 1564 | p-cancelable@^1.0.0: 1565 | version "1.1.0" 1566 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" 1567 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== 1568 | 1569 | package-json@^6.3.0: 1570 | version "6.5.0" 1571 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" 1572 | integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== 1573 | dependencies: 1574 | got "^9.6.0" 1575 | registry-auth-token "^4.0.0" 1576 | registry-url "^5.0.0" 1577 | semver "^6.2.0" 1578 | 1579 | parent-module@^1.0.0: 1580 | version "1.0.1" 1581 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1582 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1583 | dependencies: 1584 | callsites "^3.0.0" 1585 | 1586 | path-is-absolute@^1.0.0: 1587 | version "1.0.1" 1588 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1589 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1590 | 1591 | path-key@^3.1.0: 1592 | version "3.1.1" 1593 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1594 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1595 | 1596 | path-to-regexp@3.2.0: 1597 | version "3.2.0" 1598 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.2.0.tgz#fa7877ecbc495c601907562222453c43cc204a5f" 1599 | integrity sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA== 1600 | 1601 | path-to-regexp@^6.1.0: 1602 | version "6.2.0" 1603 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" 1604 | integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== 1605 | 1606 | path-type@^4.0.0: 1607 | version "4.0.0" 1608 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1609 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1610 | 1611 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: 1612 | version "2.3.0" 1613 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 1614 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 1615 | 1616 | pino-std-serializers@^3.1.0: 1617 | version "3.2.0" 1618 | resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz#b56487c402d882eb96cd67c257868016b61ad671" 1619 | integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg== 1620 | 1621 | pino@^6.13.0: 1622 | version "6.13.3" 1623 | resolved "https://registry.yarnpkg.com/pino/-/pino-6.13.3.tgz#60b93bcda1541f92fb37b3f2be0a25cf1d05b6fe" 1624 | integrity sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg== 1625 | dependencies: 1626 | fast-redact "^3.0.0" 1627 | fast-safe-stringify "^2.0.8" 1628 | fastify-warning "^0.2.0" 1629 | flatstr "^1.0.12" 1630 | pino-std-serializers "^3.1.0" 1631 | quick-format-unescaped "^4.0.3" 1632 | sonic-boom "^1.0.2" 1633 | 1634 | prelude-ls@^1.2.1: 1635 | version "1.2.1" 1636 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1637 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1638 | 1639 | prepend-http@^2.0.0: 1640 | version "2.0.0" 1641 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 1642 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 1643 | 1644 | prettier-linter-helpers@^1.0.0: 1645 | version "1.0.0" 1646 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 1647 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 1648 | dependencies: 1649 | fast-diff "^1.1.2" 1650 | 1651 | prettier@^2.2.1: 1652 | version "2.4.1" 1653 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" 1654 | integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== 1655 | 1656 | progress@^2.0.0: 1657 | version "2.0.3" 1658 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1659 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1660 | 1661 | proxy-addr@^2.0.7: 1662 | version "2.0.7" 1663 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 1664 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 1665 | dependencies: 1666 | forwarded "0.2.0" 1667 | ipaddr.js "1.9.1" 1668 | 1669 | pstree.remy@^1.1.7: 1670 | version "1.1.8" 1671 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 1672 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 1673 | 1674 | pump@^3.0.0: 1675 | version "3.0.0" 1676 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1677 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1678 | dependencies: 1679 | end-of-stream "^1.1.0" 1680 | once "^1.3.1" 1681 | 1682 | punycode@^2.1.0: 1683 | version "2.1.1" 1684 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1685 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1686 | 1687 | pupa@^2.1.1: 1688 | version "2.1.1" 1689 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" 1690 | integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== 1691 | dependencies: 1692 | escape-goat "^2.0.0" 1693 | 1694 | queue-microtask@^1.1.2, queue-microtask@^1.2.2: 1695 | version "1.2.3" 1696 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1697 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1698 | 1699 | quick-format-unescaped@^4.0.3: 1700 | version "4.0.4" 1701 | resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" 1702 | integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== 1703 | 1704 | rc@^1.2.8: 1705 | version "1.2.8" 1706 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1707 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1708 | dependencies: 1709 | deep-extend "^0.6.0" 1710 | ini "~1.3.0" 1711 | minimist "^1.2.0" 1712 | strip-json-comments "~2.0.1" 1713 | 1714 | readable-stream@^3.4.0, readable-stream@^3.6.0: 1715 | version "3.6.0" 1716 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 1717 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 1718 | dependencies: 1719 | inherits "^2.0.3" 1720 | string_decoder "^1.1.1" 1721 | util-deprecate "^1.0.1" 1722 | 1723 | readdirp@~3.6.0: 1724 | version "3.6.0" 1725 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1726 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1727 | dependencies: 1728 | picomatch "^2.2.1" 1729 | 1730 | reflect-metadata@^0.1.13: 1731 | version "0.1.13" 1732 | resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" 1733 | integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== 1734 | 1735 | regexpp@^3.1.0: 1736 | version "3.2.0" 1737 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 1738 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1739 | 1740 | registry-auth-token@^4.0.0: 1741 | version "4.2.1" 1742 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" 1743 | integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== 1744 | dependencies: 1745 | rc "^1.2.8" 1746 | 1747 | registry-url@^5.0.0: 1748 | version "5.1.0" 1749 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" 1750 | integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== 1751 | dependencies: 1752 | rc "^1.2.8" 1753 | 1754 | require-directory@^2.1.1: 1755 | version "2.1.1" 1756 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1757 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1758 | 1759 | require-from-string@^2.0.2: 1760 | version "2.0.2" 1761 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 1762 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 1763 | 1764 | resolve-from@^4.0.0: 1765 | version "4.0.0" 1766 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1767 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1768 | 1769 | responselike@^1.0.2: 1770 | version "1.0.2" 1771 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" 1772 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= 1773 | dependencies: 1774 | lowercase-keys "^1.0.0" 1775 | 1776 | ret@~0.2.0: 1777 | version "0.2.2" 1778 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.2.2.tgz#b6861782a1f4762dce43402a71eb7a283f44573c" 1779 | integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== 1780 | 1781 | reusify@^1.0.4: 1782 | version "1.0.4" 1783 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1784 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1785 | 1786 | rfdc@^1.1.4, rfdc@^1.2.0: 1787 | version "1.3.0" 1788 | resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" 1789 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== 1790 | 1791 | rimraf@^3.0.2: 1792 | version "3.0.2" 1793 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1794 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1795 | dependencies: 1796 | glob "^7.1.3" 1797 | 1798 | run-parallel@^1.1.9: 1799 | version "1.2.0" 1800 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1801 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1802 | dependencies: 1803 | queue-microtask "^1.2.2" 1804 | 1805 | rxjs@^6.6.3: 1806 | version "6.6.7" 1807 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" 1808 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== 1809 | dependencies: 1810 | tslib "^1.9.0" 1811 | 1812 | rxjs@^7.3.0: 1813 | version "7.3.0" 1814 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6" 1815 | integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw== 1816 | dependencies: 1817 | tslib "~2.1.0" 1818 | 1819 | safe-buffer@~5.2.0: 1820 | version "5.2.1" 1821 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1822 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1823 | 1824 | safe-regex2@^2.0.0: 1825 | version "2.0.0" 1826 | resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-2.0.0.tgz#b287524c397c7a2994470367e0185e1916b1f5b9" 1827 | integrity sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== 1828 | dependencies: 1829 | ret "~0.2.0" 1830 | 1831 | secure-json-parse@^2.0.0: 1832 | version "2.4.0" 1833 | resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.4.0.tgz#5aaeaaef85c7a417f76271a4f5b0cc3315ddca85" 1834 | integrity sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg== 1835 | 1836 | semver-diff@^3.1.1: 1837 | version "3.1.1" 1838 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" 1839 | integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== 1840 | dependencies: 1841 | semver "^6.3.0" 1842 | 1843 | semver-store@^0.3.0: 1844 | version "0.3.0" 1845 | resolved "https://registry.yarnpkg.com/semver-store/-/semver-store-0.3.0.tgz#ce602ff07df37080ec9f4fb40b29576547befbe9" 1846 | integrity sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg== 1847 | 1848 | semver@^5.7.1: 1849 | version "5.7.1" 1850 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1851 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1852 | 1853 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: 1854 | version "6.3.0" 1855 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1856 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1857 | 1858 | semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: 1859 | version "7.3.5" 1860 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 1861 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 1862 | dependencies: 1863 | lru-cache "^6.0.0" 1864 | 1865 | set-cookie-parser@^2.4.1: 1866 | version "2.4.8" 1867 | resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz#d0da0ed388bc8f24e706a391f9c9e252a13c58b2" 1868 | integrity sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg== 1869 | 1870 | shebang-command@^2.0.0: 1871 | version "2.0.0" 1872 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1873 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1874 | dependencies: 1875 | shebang-regex "^3.0.0" 1876 | 1877 | shebang-regex@^3.0.0: 1878 | version "3.0.0" 1879 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1880 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1881 | 1882 | signal-exit@^3.0.2: 1883 | version "3.0.5" 1884 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" 1885 | integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== 1886 | 1887 | slash@^3.0.0: 1888 | version "3.0.0" 1889 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1890 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1891 | 1892 | slice-ansi@^4.0.0: 1893 | version "4.0.0" 1894 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 1895 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 1896 | dependencies: 1897 | ansi-styles "^4.0.0" 1898 | astral-regex "^2.0.0" 1899 | is-fullwidth-code-point "^3.0.0" 1900 | 1901 | sonic-boom@^1.0.2: 1902 | version "1.4.1" 1903 | resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.4.1.tgz#d35d6a74076624f12e6f917ade7b9d75e918f53e" 1904 | integrity sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg== 1905 | dependencies: 1906 | atomic-sleep "^1.0.0" 1907 | flatstr "^1.0.12" 1908 | 1909 | spawn-command@^0.0.2-1: 1910 | version "0.0.2-1" 1911 | resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" 1912 | integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= 1913 | 1914 | sprintf-js@~1.0.2: 1915 | version "1.0.3" 1916 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1917 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1918 | 1919 | stream-wormhole@^1.1.0: 1920 | version "1.1.0" 1921 | resolved "https://registry.yarnpkg.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz#300aff46ced553cfec642a05251885417693c33d" 1922 | integrity sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew== 1923 | 1924 | streamsearch@0.1.2: 1925 | version "0.1.2" 1926 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" 1927 | integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= 1928 | 1929 | string-similarity@^4.0.1: 1930 | version "4.0.4" 1931 | resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b" 1932 | integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== 1933 | 1934 | string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: 1935 | version "4.2.3" 1936 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1937 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1938 | dependencies: 1939 | emoji-regex "^8.0.0" 1940 | is-fullwidth-code-point "^3.0.0" 1941 | strip-ansi "^6.0.1" 1942 | 1943 | string_decoder@^1.1.1: 1944 | version "1.3.0" 1945 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1946 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1947 | dependencies: 1948 | safe-buffer "~5.2.0" 1949 | 1950 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1951 | version "6.0.1" 1952 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1953 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1954 | dependencies: 1955 | ansi-regex "^5.0.1" 1956 | 1957 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1958 | version "3.1.1" 1959 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1960 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1961 | 1962 | strip-json-comments@~2.0.1: 1963 | version "2.0.1" 1964 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1965 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1966 | 1967 | supports-color@^5.3.0, supports-color@^5.5.0: 1968 | version "5.5.0" 1969 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1970 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1971 | dependencies: 1972 | has-flag "^3.0.0" 1973 | 1974 | supports-color@^7.1.0: 1975 | version "7.2.0" 1976 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1977 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1978 | dependencies: 1979 | has-flag "^4.0.0" 1980 | 1981 | supports-color@^8.1.0: 1982 | version "8.1.1" 1983 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1984 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1985 | dependencies: 1986 | has-flag "^4.0.0" 1987 | 1988 | table@^6.0.9: 1989 | version "6.7.2" 1990 | resolved "https://registry.yarnpkg.com/table/-/table-6.7.2.tgz#a8d39b9f5966693ca8b0feba270a78722cbaf3b0" 1991 | integrity sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g== 1992 | dependencies: 1993 | ajv "^8.0.1" 1994 | lodash.clonedeep "^4.5.0" 1995 | lodash.truncate "^4.4.2" 1996 | slice-ansi "^4.0.0" 1997 | string-width "^4.2.3" 1998 | strip-ansi "^6.0.1" 1999 | 2000 | text-table@^0.2.0: 2001 | version "0.2.0" 2002 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2003 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2004 | 2005 | tiny-lru@^7.0.0: 2006 | version "7.0.6" 2007 | resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-7.0.6.tgz#b0c3cdede1e5882aa2d1ae21cb2ceccf2a331f24" 2008 | integrity sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow== 2009 | 2010 | to-readable-stream@^1.0.0: 2011 | version "1.0.0" 2012 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" 2013 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== 2014 | 2015 | to-regex-range@^5.0.1: 2016 | version "5.0.1" 2017 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2018 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2019 | dependencies: 2020 | is-number "^7.0.0" 2021 | 2022 | touch@^3.1.0: 2023 | version "3.1.0" 2024 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 2025 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 2026 | dependencies: 2027 | nopt "~1.0.10" 2028 | 2029 | tr46@~0.0.3: 2030 | version "0.0.3" 2031 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 2032 | integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= 2033 | 2034 | tree-kill@^1.2.2: 2035 | version "1.2.2" 2036 | resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" 2037 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== 2038 | 2039 | tslib@2.3.1: 2040 | version "2.3.1" 2041 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" 2042 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== 2043 | 2044 | tslib@^1.8.1, tslib@^1.9.0: 2045 | version "1.14.1" 2046 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 2047 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 2048 | 2049 | tslib@~2.1.0: 2050 | version "2.1.0" 2051 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" 2052 | integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== 2053 | 2054 | tsutils@^3.21.0: 2055 | version "3.21.0" 2056 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 2057 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 2058 | dependencies: 2059 | tslib "^1.8.1" 2060 | 2061 | type-check@^0.4.0, type-check@~0.4.0: 2062 | version "0.4.0" 2063 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2064 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2065 | dependencies: 2066 | prelude-ls "^1.2.1" 2067 | 2068 | type-fest@^0.20.2: 2069 | version "0.20.2" 2070 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2071 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2072 | 2073 | typedarray-to-buffer@^3.1.5: 2074 | version "3.1.5" 2075 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 2076 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 2077 | dependencies: 2078 | is-typedarray "^1.0.0" 2079 | 2080 | typescript@^4.1.2: 2081 | version "4.4.3" 2082 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" 2083 | integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA== 2084 | 2085 | undefsafe@^2.0.3: 2086 | version "2.0.3" 2087 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" 2088 | integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== 2089 | dependencies: 2090 | debug "^2.2.0" 2091 | 2092 | unique-string@^2.0.0: 2093 | version "2.0.0" 2094 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 2095 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== 2096 | dependencies: 2097 | crypto-random-string "^2.0.0" 2098 | 2099 | update-notifier@^5.1.0: 2100 | version "5.1.0" 2101 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" 2102 | integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== 2103 | dependencies: 2104 | boxen "^5.0.0" 2105 | chalk "^4.1.0" 2106 | configstore "^5.0.1" 2107 | has-yarn "^2.1.0" 2108 | import-lazy "^2.1.0" 2109 | is-ci "^2.0.0" 2110 | is-installed-globally "^0.4.0" 2111 | is-npm "^5.0.0" 2112 | is-yarn-global "^0.3.0" 2113 | latest-version "^5.1.0" 2114 | pupa "^2.1.1" 2115 | semver "^7.3.4" 2116 | semver-diff "^3.1.1" 2117 | xdg-basedir "^4.0.0" 2118 | 2119 | uri-js@^4.2.2: 2120 | version "4.4.1" 2121 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2122 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2123 | dependencies: 2124 | punycode "^2.1.0" 2125 | 2126 | url-parse-lax@^3.0.0: 2127 | version "3.0.0" 2128 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" 2129 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= 2130 | dependencies: 2131 | prepend-http "^2.0.0" 2132 | 2133 | util-deprecate@^1.0.1: 2134 | version "1.0.2" 2135 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2136 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2137 | 2138 | uuid@8.3.2: 2139 | version "8.3.2" 2140 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 2141 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 2142 | 2143 | v8-compile-cache@^2.0.3: 2144 | version "2.3.0" 2145 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 2146 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 2147 | 2148 | vary@^1.1.2: 2149 | version "1.1.2" 2150 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2151 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2152 | 2153 | webidl-conversions@^3.0.0: 2154 | version "3.0.1" 2155 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 2156 | integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= 2157 | 2158 | whatwg-url@^5.0.0: 2159 | version "5.0.0" 2160 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 2161 | integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= 2162 | dependencies: 2163 | tr46 "~0.0.3" 2164 | webidl-conversions "^3.0.0" 2165 | 2166 | which@^2.0.1: 2167 | version "2.0.2" 2168 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2169 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2170 | dependencies: 2171 | isexe "^2.0.0" 2172 | 2173 | widest-line@^3.1.0: 2174 | version "3.1.0" 2175 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 2176 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 2177 | dependencies: 2178 | string-width "^4.0.0" 2179 | 2180 | word-wrap@^1.2.3: 2181 | version "1.2.3" 2182 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2183 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2184 | 2185 | wrap-ansi@^7.0.0: 2186 | version "7.0.0" 2187 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2188 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2189 | dependencies: 2190 | ansi-styles "^4.0.0" 2191 | string-width "^4.1.0" 2192 | strip-ansi "^6.0.0" 2193 | 2194 | wrappy@1: 2195 | version "1.0.2" 2196 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2197 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2198 | 2199 | write-file-atomic@^3.0.0: 2200 | version "3.0.3" 2201 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 2202 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 2203 | dependencies: 2204 | imurmurhash "^0.1.4" 2205 | is-typedarray "^1.0.0" 2206 | signal-exit "^3.0.2" 2207 | typedarray-to-buffer "^3.1.5" 2208 | 2209 | xdg-basedir@^4.0.0: 2210 | version "4.0.0" 2211 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" 2212 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== 2213 | 2214 | y18n@^5.0.5: 2215 | version "5.0.8" 2216 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2217 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2218 | 2219 | yallist@^4.0.0: 2220 | version "4.0.0" 2221 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2222 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2223 | 2224 | yargs-parser@^20.2.2: 2225 | version "20.2.9" 2226 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 2227 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 2228 | 2229 | yargs@^16.2.0: 2230 | version "16.2.0" 2231 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 2232 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 2233 | dependencies: 2234 | cliui "^7.0.2" 2235 | escalade "^3.1.1" 2236 | get-caller-file "^2.0.5" 2237 | require-directory "^2.1.1" 2238 | string-width "^4.2.0" 2239 | y18n "^5.0.5" 2240 | yargs-parser "^20.2.2" 2241 | --------------------------------------------------------------------------------