From 9b99e8eba8f9f069428eabf8b51443e0609133e4 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Wed, 8 Oct 2025 17:01:11 -0400 Subject: [PATCH] add new Console global DI to abstract the node.js console --- packages/backend/src/GlobalModule.ts | 7 +++++-- packages/backend/src/core/LoggerService.ts | 16 ++++++++-------- packages/backend/src/di-symbols.ts | 1 + packages/backend/src/logger.ts | 19 ++++++++++--------- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/packages/backend/src/GlobalModule.ts b/packages/backend/src/GlobalModule.ts index 0c6e251ee3..bb76662ff3 100644 --- a/packages/backend/src/GlobalModule.ts +++ b/packages/backend/src/GlobalModule.ts @@ -14,6 +14,7 @@ import { TimeService, NativeTimeService } from '@/global/TimeService.js'; import { EnvService } from '@/global/EnvService.js'; import { CacheManagementService } from '@/global/CacheManagementService.js'; import { InternalEventService } from '@/global/InternalEventService.js'; +import { DependencyService } from '@/global/DependencyService.js'; import { LoggerService } from '@/core/LoggerService.js'; import { DI } from './di-symbols.js'; import { Config, loadConfig } from './config.js'; @@ -179,12 +180,14 @@ const $TimeService: Provider[] = [ ]; const $EnvService: Provider[] = [EnvService, { provide: 'EnvService', useExisting: EnvService }]; const $LoggerService: Provider[] = [LoggerService, { provide: 'LoggerService', useExisting: LoggerService }]; +const $Console: Provider[] = [{ provide: DI.console, useValue: global.console }]; +const $DependencyService: Provider[] = [DependencyService, { provide: 'DependencyService', useExisting: DependencyService }]; @Global() @Module({ imports: [RepositoryModule], - providers: [$config, $db, $meta, $meilisearch, $redis, $redisForPub, $redisForSub, $redisForTimelines, $redisForReactions, $redisForRateLimit, $CacheManagementService, $InternalEventService, $TimeService, $EnvService, $LoggerService].flat(), - exports: [$config, $db, $meta, $meilisearch, $redis, $redisForPub, $redisForSub, $redisForTimelines, $redisForReactions, $redisForRateLimit, $CacheManagementService, $InternalEventService, $TimeService, $EnvService, $LoggerService, RepositoryModule].flat(), + providers: [$config, $db, $meta, $meilisearch, $redis, $redisForPub, $redisForSub, $redisForTimelines, $redisForReactions, $redisForRateLimit, $CacheManagementService, $InternalEventService, $TimeService, $EnvService, $LoggerService, $Console, $DependencyService].flat(), + exports: [$config, $db, $meta, $meilisearch, $redis, $redisForPub, $redisForSub, $redisForTimelines, $redisForReactions, $redisForRateLimit, $CacheManagementService, $InternalEventService, $TimeService, $EnvService, $LoggerService, RepositoryModule, $Console, $DependencyService].flat(), }) export class GlobalModule implements OnApplicationShutdown { private readonly logger = new Logger('global'); diff --git a/packages/backend/src/core/LoggerService.ts b/packages/backend/src/core/LoggerService.ts index 2fd8d76853..40a80ab445 100644 --- a/packages/backend/src/core/LoggerService.ts +++ b/packages/backend/src/core/LoggerService.ts @@ -6,24 +6,24 @@ import { Inject, Injectable } from '@nestjs/common'; import Logger from '@/logger.js'; import { TimeService } from '@/global/TimeService.js'; +import { EnvService } from '@/global/EnvService.js'; import { bindThis } from '@/decorators.js'; -import type { KEYWORD } from 'color-convert/conversions.js'; -import { envOption } from '@/env.js'; // TODO move to envService import { DI } from '@/di-symbols.js'; -import type { Config } from '@/config.js'; +import type { KEYWORD } from 'color-convert/conversions.js'; @Injectable() export class LoggerService { constructor( - @Inject(DI.config) - private config: Config, - private readonly timeService: TimeService, + @Inject(DI.console) + protected readonly console: Console, + + protected readonly timeService: TimeService, + protected readonly envService: EnvService, ) { } @bindThis public getLogger(domain: string, color?: KEYWORD | undefined) { - const verbose = this.config.logging?.verbose || envOption.verbose; - return new Logger(domain, color, verbose, undefined, this.timeService); + return new Logger(domain, color, this.envService, this.timeService, this.console); } } diff --git a/packages/backend/src/di-symbols.ts b/packages/backend/src/di-symbols.ts index 099d48c81a..e2c73562c8 100644 --- a/packages/backend/src/di-symbols.ts +++ b/packages/backend/src/di-symbols.ts @@ -14,6 +14,7 @@ export const DI = { redisForTimelines: Symbol('redisForTimelines'), redisForReactions: Symbol('redisForReactions'), redisForRateLimit: Symbol('redisForRateLimit'), + console: Symbol('console'), //#region Repositories usersRepository: Symbol('usersRepository'), diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index b98780237f..9b5eea2efa 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -9,7 +9,7 @@ import { default as convertColor } from 'color-convert'; import { format as dateFormat } from 'date-fns'; import { bindThis } from '@/decorators.js'; import { TimeService, NativeTimeService } from '@/global/TimeService.js'; -import { envOption } from './env.js'; +import { EnvService } from '@/global/EnvService.js'; import type { KEYWORD } from 'color-convert/conversions.js'; type Context = { @@ -28,6 +28,7 @@ export type Console = Pick