diff --git a/apps/api/src/api.module.ts b/apps/api/src/api.module.ts index 80964a0..850e018 100644 --- a/apps/api/src/api.module.ts +++ b/apps/api/src/api.module.ts @@ -1,5 +1,7 @@ import { MiddlewareConsumer, Module, NestModule } from "@nestjs/common"; +import { LoggerModule } from "@zkchainhub/shared"; + import { RequestLoggerMiddleware } from "./common/middleware/request.middleware"; import { MetricsController } from "./metrics/metrics.controller"; @@ -8,7 +10,7 @@ import { MetricsController } from "./metrics/metrics.controller"; * Here we import all required modules and register the controllers for the ZKchainHub API. */ @Module({ - imports: [], + imports: [LoggerModule], controllers: [MetricsController], providers: [], }) diff --git a/apps/api/src/main.ts b/apps/api/src/main.ts index 7f2a979..0919570 100644 --- a/apps/api/src/main.ts +++ b/apps/api/src/main.ts @@ -1,10 +1,12 @@ import { NestFactory } from "@nestjs/core"; import { setupOpenApiConfiguration } from "apps/api/src/docs"; +import { WINSTON_MODULE_NEST_PROVIDER } from "nest-winston"; import { ApiModule } from "./api.module"; async function bootstrap() { const app = await NestFactory.create(ApiModule); + app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER)); setupOpenApiConfiguration(app); diff --git a/apps/api/src/metrics/metrics.controller.spec.ts b/apps/api/src/metrics/metrics.controller.spec.ts index 2343618..77232e0 100644 --- a/apps/api/src/metrics/metrics.controller.spec.ts +++ b/apps/api/src/metrics/metrics.controller.spec.ts @@ -1,13 +1,28 @@ import { Test, TestingModule } from "@nestjs/testing"; +import { WINSTON_MODULE_PROVIDER } from "nest-winston"; +import { Logger } from "winston"; import { MetricsController } from "./metrics.controller"; import { getEcosystemInfo, getZKChainInfo } from "./mocks/metrics.mock"; +export const mockLogger: Partial = { + log: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + debug: jest.fn(), +}; + describe("MetricsController", () => { let controller: MetricsController; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ + providers: [ + { + provide: WINSTON_MODULE_PROVIDER, + useValue: mockLogger, + }, + ], controllers: [MetricsController], }).compile(); diff --git a/apps/api/src/metrics/metrics.controller.ts b/apps/api/src/metrics/metrics.controller.ts index 75ddfd8..2eddae1 100644 --- a/apps/api/src/metrics/metrics.controller.ts +++ b/apps/api/src/metrics/metrics.controller.ts @@ -1,5 +1,7 @@ -import { Controller, Get, Param } from "@nestjs/common"; +import { Controller, Get, Inject, Param } from "@nestjs/common"; import { ApiResponse, ApiTags } from "@nestjs/swagger"; +import { WINSTON_MODULE_PROVIDER } from "nest-winston"; +import { Logger } from "winston"; import { ParsePositiveIntPipe } from "../common/pipes/parsePositiveInt.pipe"; import { ZKChainInfo } from "./dto/response"; @@ -11,6 +13,7 @@ import { getEcosystemInfo, getZKChainInfo } from "./mocks/metrics.mock"; * Controller for handling metrics related endpoints. */ export class MetricsController { + constructor(@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger) {} /** * Retrieves the ecosystem information. * @returns {Promise} The ecosystem information. diff --git a/libs/providers/src/providers.module.ts b/libs/providers/src/providers.module.ts index c44d47e..4eb820f 100644 --- a/libs/providers/src/providers.module.ts +++ b/libs/providers/src/providers.module.ts @@ -1,5 +1,7 @@ import { Module } from "@nestjs/common"; +import { LoggerModule } from "@zkchainhub/shared"; + import { EvmProviderService } from "./providers"; import { ZKChainProviderService } from "./providers/zkChainProvider.service"; @@ -8,6 +10,7 @@ import { ZKChainProviderService } from "./providers/zkChainProvider.service"; * This module exports Services for interacting with EVM-based blockchains. */ @Module({ + imports: [LoggerModule], providers: [EvmProviderService, ZKChainProviderService], exports: [EvmProviderService, ZKChainProviderService], }) diff --git a/libs/providers/src/providers/evmProvider.service.spec.ts b/libs/providers/src/providers/evmProvider.service.spec.ts index ae08dc1..ca6f2f6 100644 --- a/libs/providers/src/providers/evmProvider.service.spec.ts +++ b/libs/providers/src/providers/evmProvider.service.spec.ts @@ -1,8 +1,10 @@ import { createMock } from "@golevelup/ts-jest"; import { Test, TestingModule } from "@nestjs/testing"; import { parseAbi } from "abitype"; +import { WINSTON_MODULE_PROVIDER } from "nest-winston"; import * as viem from "viem"; import { localhost } from "viem/chains"; +import { Logger } from "winston"; import { DataDecodeException } from "@zkchainhub/providers/exceptions"; import { @@ -20,6 +22,13 @@ jest.mock("viem", () => ({ http: jest.fn(), })); +export const mockLogger: Partial = { + log: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + debug: jest.fn(), +}; + describe("EvmProviderService", () => { let viemProvider: EvmProviderService; const testAbi = parseAbi([ @@ -31,12 +40,16 @@ describe("EvmProviderService", () => { beforeEach(async () => { const app: TestingModule = await Test.createTestingModule({ providers: [ + { + provide: WINSTON_MODULE_PROVIDER, + useValue: mockLogger, + }, { provide: EvmProviderService, useFactory: () => { const rpcUrl = "http://localhost:8545"; const chain = localhost; - return new EvmProviderService(rpcUrl, chain); + return new EvmProviderService(rpcUrl, chain, mockLogger as Logger); }, }, ], diff --git a/libs/providers/src/providers/evmProvider.service.ts b/libs/providers/src/providers/evmProvider.service.ts index 06d5163..e698c63 100644 --- a/libs/providers/src/providers/evmProvider.service.ts +++ b/libs/providers/src/providers/evmProvider.service.ts @@ -1,5 +1,6 @@ -import { Injectable } from "@nestjs/common"; +import { Inject, Injectable, LoggerService } from "@nestjs/common"; import { AbiParameter } from "abitype"; +import { WINSTON_MODULE_NEST_PROVIDER } from "nest-winston"; import { Abi, Address, @@ -32,6 +33,7 @@ export class EvmProviderService { constructor( rpcUrl: string, readonly chain: Chain, + @Inject(WINSTON_MODULE_NEST_PROVIDER) private readonly logger: LoggerService, ) { this.client = createPublicClient({ chain, diff --git a/libs/providers/src/providers/zkChainProvider.service.spec.ts b/libs/providers/src/providers/zkChainProvider.service.spec.ts index 59790b6..f19c559 100644 --- a/libs/providers/src/providers/zkChainProvider.service.spec.ts +++ b/libs/providers/src/providers/zkChainProvider.service.spec.ts @@ -1,24 +1,37 @@ import { Test, TestingModule } from "@nestjs/testing"; +import { WINSTON_MODULE_PROVIDER } from "nest-winston"; import { GetBlockReturnType } from "viem"; import { localhost } from "viem/chains"; import { GetL1BatchDetailsReturnType } from "viem/zksync"; +import { Logger } from "winston"; import { InvalidArgumentException } from "@zkchainhub/providers/exceptions"; import { ZKChainProviderService } from "./zkChainProvider.service"; +export const mockLogger: Partial = { + log: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + debug: jest.fn(), +}; + describe("ZKChainProviderService", () => { let zkProvider: ZKChainProviderService; beforeEach(async () => { const app: TestingModule = await Test.createTestingModule({ providers: [ + { + provide: WINSTON_MODULE_PROVIDER, + useValue: mockLogger, + }, { provide: ZKChainProviderService, useFactory: () => { const rpcUrl = "http://localhost:8545"; const chain = localhost; - return new ZKChainProviderService(rpcUrl, chain); + return new ZKChainProviderService(rpcUrl, chain, mockLogger as Logger); }, }, ], diff --git a/libs/providers/src/providers/zkChainProvider.service.ts b/libs/providers/src/providers/zkChainProvider.service.ts index 1d22b41..1fedede 100644 --- a/libs/providers/src/providers/zkChainProvider.service.ts +++ b/libs/providers/src/providers/zkChainProvider.service.ts @@ -1,4 +1,5 @@ -import { Injectable } from "@nestjs/common"; +import { Inject, Injectable, LoggerService } from "@nestjs/common"; +import { WINSTON_MODULE_NEST_PROVIDER } from "nest-winston"; import { Chain, Client, createClient, http, HttpTransport } from "viem"; import { GetL1BatchDetailsReturnType, PublicActionsL2, publicActionsL2 } from "viem/zksync"; @@ -12,8 +13,12 @@ import { EvmProviderService } from "@zkchainhub/providers/providers/evmProvider. export class ZKChainProviderService extends EvmProviderService { private zkClient: Client; - constructor(rpcUrl: string, chain: Chain) { - super(rpcUrl, chain); + constructor( + rpcUrl: string, + chain: Chain, + @Inject(WINSTON_MODULE_NEST_PROVIDER) logger: LoggerService, + ) { + super(rpcUrl, chain, logger); this.zkClient = createClient({ chain, transport: http(rpcUrl) }).extend(publicActionsL2()); } diff --git a/libs/shared/src/constants.ts b/libs/shared/src/constants.ts new file mode 100644 index 0000000..e69de29 diff --git a/libs/shared/src/index.ts b/libs/shared/src/index.ts index eea524d..85434c1 100644 --- a/libs/shared/src/index.ts +++ b/libs/shared/src/index.ts @@ -1 +1,3 @@ export * from "./types"; +export * from "./logger"; +export * from "./constants"; diff --git a/libs/shared/src/logger/index.ts b/libs/shared/src/logger/index.ts new file mode 100644 index 0000000..2bd3469 --- /dev/null +++ b/libs/shared/src/logger/index.ts @@ -0,0 +1 @@ +export * from "./logger.module"; diff --git a/libs/shared/src/logger/logger.module.ts b/libs/shared/src/logger/logger.module.ts new file mode 100644 index 0000000..bdbea32 --- /dev/null +++ b/libs/shared/src/logger/logger.module.ts @@ -0,0 +1,28 @@ +import { Module } from "@nestjs/common"; +import { WinstonModule } from "nest-winston"; +import * as winston from "winston"; + +@Module({ + imports: [ + WinstonModule.forRoot({ + transports: [ + new winston.transports.Console({ + format: winston.format.combine( + winston.format.timestamp({ + format: "YYYY-MM-DD HH:mm:ss", + }), + winston.format.errors({ stack: true }), + winston.format.colorize(), + winston.format.printf( + ({ timestamp, level, message, stack }: Record) => { + return `${timestamp} ${level}: ${stack ?? message ?? ""}`; + }, + ), + ), + }), + ], + }), + ], + exports: [WinstonModule], +}) +export class LoggerModule {} diff --git a/package.json b/package.json index 7d70ce9..cfc175e 100644 --- a/package.json +++ b/package.json @@ -28,9 +28,11 @@ "@nestjs/platform-express": "10.0.0", "@nestjs/swagger": "7.4.0", "abitype": "1.0.5", + "nest-winston": "1.9.7", "reflect-metadata": "0.1.13", "rxjs": "7.8.1", - "viem": "2.17.5" + "viem": "2.17.5", + "winston": "3.13.1" }, "devDependencies": { "@commitlint/config-conventional": "19.2.2", @@ -44,10 +46,10 @@ "@types/jest": "29.5.2", "@types/node": "20.3.1", "@types/supertest": "6.0.0", - "@typescript-eslint/eslint-plugin": "7.0.0", - "@typescript-eslint/parser": "7.0.0", + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", "commitlint": "19.3.0", - "eslint": "8.42.0", + "eslint": "8.56.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-prettier": "5.0.0", "husky": "9.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d92be1..cd9ed68 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: abitype: specifier: 1.0.5 version: 1.0.5(typescript@5.1.3)(zod@3.23.8) + nest-winston: + specifier: 1.9.7 + version: 1.9.7(@nestjs/common@10.0.0(reflect-metadata@0.1.13)(rxjs@7.8.1))(winston@3.13.1) reflect-metadata: specifier: 0.1.13 version: 0.1.13 @@ -32,6 +35,9 @@ importers: viem: specifier: 2.17.5 version: 2.17.5(typescript@5.1.3)(zod@3.23.8) + winston: + specifier: 3.13.1 + version: 3.13.1 devDependencies: '@commitlint/config-conventional': specifier: 19.2.2 @@ -67,23 +73,23 @@ importers: specifier: 6.0.0 version: 6.0.0 '@typescript-eslint/eslint-plugin': - specifier: 7.0.0 - version: 7.0.0(@typescript-eslint/parser@7.0.0(eslint@8.42.0)(typescript@5.1.3))(eslint@8.42.0)(typescript@5.1.3) + specifier: 7.18.0 + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.56.0)(typescript@5.1.3))(eslint@8.56.0)(typescript@5.1.3) '@typescript-eslint/parser': - specifier: 7.0.0 - version: 7.0.0(eslint@8.42.0)(typescript@5.1.3) + specifier: 7.18.0 + version: 7.18.0(eslint@8.56.0)(typescript@5.1.3) commitlint: specifier: 19.3.0 version: 19.3.0(@types/node@20.3.1)(typescript@5.1.3) eslint: - specifier: 8.42.0 - version: 8.42.0 + specifier: 8.56.0 + version: 8.56.0 eslint-config-prettier: specifier: 9.0.0 - version: 9.0.0(eslint@8.42.0) + version: 9.0.0(eslint@8.56.0) eslint-plugin-prettier: specifier: 5.0.0 - version: 5.0.0(@types/eslint@8.56.10)(eslint-config-prettier@9.0.0(eslint@8.42.0))(eslint@8.42.0)(prettier@3.0.0) + version: 5.0.0(@types/eslint@8.56.10)(eslint-config-prettier@9.0.0(eslint@8.56.0))(eslint@8.56.0)(prettier@3.0.0) husky: specifier: 9.0.11 version: 9.0.11 @@ -316,6 +322,10 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + '@commitlint/cli@19.3.0': resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} engines: {node: '>=v18'} @@ -389,6 +399,9 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -403,8 +416,8 @@ packages: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.42.0': - resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} + '@eslint/js@8.56.0': + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@golevelup/ts-jest@0.5.0': @@ -848,9 +861,6 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -866,26 +876,29 @@ packages: '@types/supertest@6.0.0': resolution: {integrity: sha512-j3/Z2avY+H3yn+xp/ef//QyqqE+dg3rWh14Ewi/QZs6uVK+oOs7lFRXtjp2YHAqHJZ4OFGNmCxZO5vd7AuG/Dg==} + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} '@types/yargs@17.0.32': resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - '@typescript-eslint/eslint-plugin@7.0.0': - resolution: {integrity: sha512-M72SJ0DkcQVmmsbqlzc6EJgb/3Oz2Wdm6AyESB4YkGgCxP8u5jt5jn4/OBMPK3HLOxcttZq5xbBBU7e2By4SZQ==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + '@typescript-eslint/parser': ^7.0.0 eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@7.0.0': - resolution: {integrity: sha512-V2eqnC998a04L5TniVt8qEhw/rp1dRU/9GJfx4128AFeh2WPMpmj5oeF5G9EqTi6z1JdKfLEACRMot5wUxD3pA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 typescript: '*' @@ -893,13 +906,13 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.0.0': - resolution: {integrity: sha512-IxTStwhNDPO07CCrYuAqjuJ3Xf5MrMaNgbAZPxFXAUpAtwqFxiuItxUaVtP/SJQeCdJjwDGh9/lMOluAndkKeg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.0.0': - resolution: {integrity: sha512-FIM8HPxj1P2G7qfrpiXvbHeHypgo2mFpFGoh5I73ZlqmJOsloSa1x0ZyXCer43++P1doxCgNqIOLqmZR6SOT8g==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 typescript: '*' @@ -907,28 +920,31 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.0.0': - resolution: {integrity: sha512-9ZIJDqagK1TTs4W9IyeB2sH/s1fFhN9958ycW8NRTg1vXGzzH5PQNzq6KbsbVGMT+oyyfa17DfchHDidcmf5cg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@7.0.0': - resolution: {integrity: sha512-JzsOzhJJm74aQ3c9um/aDryHgSHfaX8SHFIu9x4Gpik/+qxLvxUylhTsO9abcNu39JIdhY2LgYrFxTii3IajLA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/utils@7.0.0': - resolution: {integrity: sha512-kuPZcPAdGcDBAyqDn/JVeJVhySvpkxzfXjJq1X1BFSTYo1TTuo4iyb937u457q4K0In84p6u2VHQGaFnv7VYqg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.0.0': - resolution: {integrity: sha512-JZP0uw59PRHp7sHQl3aF/lFgwOW2rgNVnXUksj1d932PMita9wFBd3621vHQRDvHwPsSY9FMAAHVc8gTvLYY4w==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -1106,6 +1122,9 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -1300,9 +1319,18 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -1515,6 +1543,9 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -1595,8 +1626,8 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.42.0: - resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} + eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true @@ -1693,6 +1724,9 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -1728,6 +1762,9 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + fork-ts-checker-webpack-plugin@8.0.0: resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} @@ -1961,6 +1998,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -2254,6 +2294,9 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -2335,6 +2378,10 @@ packages: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} + logform@2.6.1: + resolution: {integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==} + engines: {node: '>= 12.0.0'} + lru-cache@10.4.0: resolution: {integrity: sha512-bfJaPTuEiTYBu+ulDaeQ0F+uLmlfFkMgXj4cbwfuMSjgObGMzb55FMMbDvbRU0fAHZ4sLGkz2mKwcMg8Dvm8Ww==} engines: {node: '>=18'} @@ -2423,8 +2470,8 @@ packages: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -2468,6 +2515,12 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + nest-winston@1.9.7: + resolution: {integrity: sha512-pTTgImRgv7urojsDvaTlenAjyJNLj7ywamfjzrhWKhLhp80AKLYNwf103dVHeqZWe+nzp/vd9DGRs/UN/YadOQ==} + peerDependencies: + '@nestjs/common': ^5.0.0 || ^6.6.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 + winston: ^3.0.0 + node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} @@ -2516,6 +2569,9 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -2799,6 +2855,10 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -2857,6 +2917,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -2893,6 +2956,9 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -3023,6 +3089,9 @@ packages: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -3055,6 +3124,10 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} @@ -3239,6 +3312,14 @@ packages: resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} engines: {node: '>=10'} + winston-transport@4.7.1: + resolution: {integrity: sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==} + engines: {node: '>= 12.0.0'} + + winston@3.13.1: + resolution: {integrity: sha512-SvZit7VFNvXRzbqGHsv5KSmgbEYR5EiQfDAL9gxYkRqa934Hnk++zze0wANKtMHcy/gI4W/3xmSDwlhf865WGw==} + engines: {node: '>= 12.0.0'} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -3563,6 +3644,8 @@ snapshots: '@colors/colors@1.5.0': optional: true + '@colors/colors@1.6.0': {} + '@commitlint/cli@19.3.0(@types/node@20.3.1)(typescript@5.1.3)': dependencies: '@commitlint/format': 19.3.0 @@ -3678,9 +3761,15 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@eslint-community/eslint-utils@4.4.0(eslint@8.42.0)': + '@dabh/diagnostics@2.0.3': dependencies: - eslint: 8.42.0 + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': + dependencies: + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.0': {} @@ -3699,7 +3788,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.42.0': {} + '@eslint/js@8.56.0': {} '@golevelup/ts-jest@0.5.0': {} @@ -4246,8 +4335,6 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/semver@7.5.8': {} - '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 @@ -4273,72 +4360,72 @@ snapshots: '@types/methods': 1.1.4 '@types/superagent': 8.1.7 + '@types/triple-beam@1.3.5': {} + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.32': dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.0.0(@typescript-eslint/parser@7.0.0(eslint@8.42.0)(typescript@5.1.3))(eslint@8.42.0)(typescript@5.1.3)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.56.0)(typescript@5.1.3))(eslint@8.56.0)(typescript@5.1.3)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.0.0(eslint@8.42.0)(typescript@5.1.3) - '@typescript-eslint/scope-manager': 7.0.0 - '@typescript-eslint/type-utils': 7.0.0(eslint@8.42.0)(typescript@5.1.3) - '@typescript-eslint/utils': 7.0.0(eslint@8.42.0)(typescript@5.1.3) - '@typescript-eslint/visitor-keys': 7.0.0 - debug: 4.3.5 - eslint: 8.42.0 + '@typescript-eslint/parser': 7.18.0(eslint@8.56.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.56.0)(typescript@5.1.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.56.0)(typescript@5.1.3) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.1.3) optionalDependencies: typescript: 5.1.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.0.0(eslint@8.42.0)(typescript@5.1.3)': + '@typescript-eslint/parser@7.18.0(eslint@8.56.0)(typescript@5.1.3)': dependencies: - '@typescript-eslint/scope-manager': 7.0.0 - '@typescript-eslint/types': 7.0.0 - '@typescript-eslint/typescript-estree': 7.0.0(typescript@5.1.3) - '@typescript-eslint/visitor-keys': 7.0.0 + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.1.3) + '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.5 - eslint: 8.42.0 + eslint: 8.56.0 optionalDependencies: typescript: 5.1.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.0.0': + '@typescript-eslint/scope-manager@7.18.0': dependencies: - '@typescript-eslint/types': 7.0.0 - '@typescript-eslint/visitor-keys': 7.0.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.0.0(eslint@8.42.0)(typescript@5.1.3)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.56.0)(typescript@5.1.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.0.0(typescript@5.1.3) - '@typescript-eslint/utils': 7.0.0(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.1.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.56.0)(typescript@5.1.3) debug: 4.3.5 - eslint: 8.42.0 + eslint: 8.56.0 ts-api-utils: 1.3.0(typescript@5.1.3) optionalDependencies: typescript: 5.1.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.0.0': {} + '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@7.0.0(typescript@5.1.3)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.1.3)': dependencies: - '@typescript-eslint/types': 7.0.0 - '@typescript-eslint/visitor-keys': 7.0.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.3 + minimatch: 9.0.5 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.1.3) optionalDependencies: @@ -4346,25 +4433,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.0.0(eslint@8.42.0)(typescript@5.1.3)': + '@typescript-eslint/utils@7.18.0(eslint@8.56.0)(typescript@5.1.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.0.0 - '@typescript-eslint/types': 7.0.0 - '@typescript-eslint/typescript-estree': 7.0.0(typescript@5.1.3) - eslint: 8.42.0 - semver: 7.6.2 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.1.3) + eslint: 8.56.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.0.0': + '@typescript-eslint/visitor-keys@7.18.0': dependencies: - '@typescript-eslint/types': 7.0.0 + '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 + '@ungap/structured-clone@1.2.0': {} + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 @@ -4545,6 +4631,8 @@ snapshots: asap@2.0.6: {} + async@3.2.5: {} + asynckit@0.4.0: {} babel-jest@29.7.0(@babel/core@7.24.7): @@ -4796,8 +4884,23 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + colorette@2.0.20: {} + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -4990,6 +5093,8 @@ snapshots: emoji-regex@8.0.0: {} + enabled@2.0.0: {} + encodeurl@1.0.2: {} end-of-stream@1.4.4: @@ -5025,19 +5130,19 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.0.0(eslint@8.42.0): + eslint-config-prettier@9.0.0(eslint@8.56.0): dependencies: - eslint: 8.42.0 + eslint: 8.56.0 - eslint-plugin-prettier@5.0.0(@types/eslint@8.56.10)(eslint-config-prettier@9.0.0(eslint@8.42.0))(eslint@8.42.0)(prettier@3.0.0): + eslint-plugin-prettier@5.0.0(@types/eslint@8.56.10)(eslint-config-prettier@9.0.0(eslint@8.56.0))(eslint@8.56.0)(prettier@3.0.0): dependencies: - eslint: 8.42.0 + eslint: 8.56.0 prettier: 3.0.0 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 optionalDependencies: '@types/eslint': 8.56.10 - eslint-config-prettier: 9.0.0(eslint@8.42.0) + eslint-config-prettier: 9.0.0(eslint@8.56.0) eslint-scope@5.1.1: dependencies: @@ -5051,15 +5156,16 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@8.42.0: + eslint@8.56.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.42.0 + '@eslint/js': 8.56.0 '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -5078,7 +5184,6 @@ snapshots: globals: 13.24.0 graphemer: 1.4.0 ignore: 5.3.1 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -5090,7 +5195,6 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color @@ -5237,6 +5341,8 @@ snapshots: dependencies: bser: 2.1.1 + fecha@4.2.3: {} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -5285,6 +5391,8 @@ snapshots: flatted@3.3.1: {} + fn.name@1.1.0: {} + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.1.3)(webpack@5.87.0(@swc/core@1.6.13)): dependencies: '@babel/code-frame': 7.24.7 @@ -5527,6 +5635,8 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.2: {} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -5978,6 +6088,8 @@ snapshots: kleur@3.0.3: {} + kuler@2.0.0: {} + leven@3.1.0: {} levn@0.4.1: @@ -6062,6 +6174,15 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 9.0.0 + logform@2.6.1: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.4.3 + triple-beam: 1.4.1 + lru-cache@10.4.0: {} lru-cache@5.1.1: @@ -6127,7 +6248,7 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -6165,6 +6286,12 @@ snapshots: neo-async@2.6.2: {} + nest-winston@1.9.7(@nestjs/common@10.0.0(reflect-metadata@0.1.13)(rxjs@7.8.1))(winston@3.13.1): + dependencies: + '@nestjs/common': 10.0.0(reflect-metadata@0.1.13)(rxjs@7.8.1) + fast-safe-stringify: 2.1.1 + winston: 3.13.1 + node-abort-controller@3.1.1: {} node-emoji@1.11.0: @@ -6201,6 +6328,10 @@ snapshots: dependencies: wrappy: 1.0.2 + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -6464,6 +6595,8 @@ snapshots: safe-buffer@5.2.1: {} + safe-stable-stringify@2.4.3: {} + safer-buffer@2.1.2: {} schema-utils@3.3.0: @@ -6541,6 +6674,10 @@ snapshots: signal-exit@4.1.0: {} + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -6573,6 +6710,8 @@ snapshots: sprintf-js@1.0.3: {} + stack-trace@0.0.10: {} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -6698,6 +6837,8 @@ snapshots: text-extensions@2.4.0: {} + text-hex@1.0.0: {} + text-table@0.2.0: {} through@2.3.8: {} @@ -6720,6 +6861,8 @@ snapshots: tree-kill@1.2.2: {} + triple-beam@1.4.1: {} + ts-api-utils@1.3.0(typescript@5.1.3): dependencies: typescript: 5.1.3 @@ -6919,6 +7062,26 @@ snapshots: dependencies: execa: 4.1.0 + winston-transport@4.7.1: + dependencies: + logform: 2.6.1 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.13.1: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.5 + is-stream: 2.0.1 + logform: 2.6.1 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.4.3 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.7.1 + word-wrap@1.2.5: {} wrap-ansi@7.0.0: