Skip to content

Commit

Permalink
feature(framework): include ScopedLogger in FrameworkModule
Browse files Browse the repository at this point in the history
  • Loading branch information
timvandam committed Sep 21, 2023
1 parent 8c8b9a9 commit dd4d2f8
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 4 deletions.
3 changes: 3 additions & 0 deletions packages/framework/src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import { ApiConsoleModule } from '@deepkit/api-console-module';
import { AppModule, ControllerConfig, createModule } from '@deepkit/app';
import { RpcControllers, RpcInjectorContext, RpcKernelWithStopwatch } from './rpc.js';
import { normalizeDirectory } from './utils.js';
import { ScopedLogger } from "@deepkit/logger";

export class FrameworkModule extends createModule({
config: FrameworkConfig,
Expand All @@ -50,6 +51,7 @@ export class FrameworkModule extends createModule({
RpcServer,
ConsoleTransport,
Logger,
ScopedLogger,
MigrationProvider,
DebugController,
{ provide: DatabaseRegistry, useFactory: (ic: InjectorContext) => new DatabaseRegistry(ic) },
Expand Down Expand Up @@ -105,6 +107,7 @@ export class FrameworkModule extends createModule({
MigrationCreateController,
],
exports: [
ScopedLogger.provide,
ProcessLocker,
ApplicationServer,
WebWorkerFactory,
Expand Down
6 changes: 3 additions & 3 deletions packages/logger/src/logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import style from 'ansi-styles';
import format from 'format-util';
import { arrayRemoveItem, ClassType } from '@deepkit/core';
import { Inject, Provider, TransientInjectionTarget } from '@deepkit/injector';
import { FactoryProvider, Inject, TransientInjectionTarget } from '@deepkit/injector';

export enum LoggerLevel {
none,
Expand Down Expand Up @@ -312,9 +312,9 @@ export class Logger implements LoggerInterface {
}

export type ScopedLogger = Inject<Logger, 'scoped-logger'>;
export const ScopedLogger: Provider<Logger> = {
export const ScopedLogger = {
provide: 'scoped-logger',
transient: true,
useFactory: (target: TransientInjectionTarget, logger: Logger = new Logger()) =>
logger.scoped(target.token?.name ?? String(target.token)),
};
} as const;
55 changes: 54 additions & 1 deletion packages/logger/tests/logger.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { expect, test } from '@jest/globals';
import { JSONTransport, Logger, LoggerLevel, ScopedLogger, ScopeFormatter } from '../src/logger.js';
import { MemoryLoggerTransport } from '../src/memory-logger.js';
import { Injector, ServiceNotFoundError } from '@deepkit/injector';
import { Injector, ServiceNotFoundError, TransientInjectionTarget } from '@deepkit/injector';

test('log level', () => {
const logger = new Logger();
Expand Down Expand Up @@ -109,4 +109,57 @@ test('scoped logger', () => {
const provider = injector.get(MyProvider);
expect(provider.logger).toBeInstanceOf(Logger);
}

{
class A {
constructor (public b: B) {
}
}

class B {
constructor (public c: C, public target: TransientInjectionTarget) {
}
}

class C {
constructor (public target: TransientInjectionTarget) {
}
}

const injector = Injector.from([
A,
{ provide: B, transient: true },
{ provide: C, transient: true },
]);
const a = injector.get(A);
expect(a.b.c.target.token).toBe(B);
expect(a.b.target.token).toBe(A);
}

{
class A {
constructor (public b: C) {
}
}

class B {
constructor (public target: TransientInjectionTarget) {
}
}

class C {
constructor (public target: TransientInjectionTarget) {
}
}

const injector = Injector.from([
A,
{ provide: B, transient: true },
{ provide: C, transient: true, useExisting: B },
]);

const a = injector.get(A);
expect(a.b).toBeInstanceOf(B);
expect(a.b.target.token).toBe(A);
}
});

0 comments on commit dd4d2f8

Please sign in to comment.