diff --git a/packages/navigation/src/di/bind-dev-seed.test.ts b/packages/navigation/src/di/bind-dev-seed.test.ts index cf395c9..88ffae3 100644 --- a/packages/navigation/src/di/bind-dev-seed.test.ts +++ b/packages/navigation/src/di/bind-dev-seed.test.ts @@ -33,7 +33,7 @@ describe("bindDevSeedNavigation", () => { }); it("populates the header repository with the dev header", async () => { - await bindDevSeedNavigation(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue(), new RecordingRealtimeBroadcaster(), new RealtimeHandlerRegistry()); + await bindDevSeedNavigation({ ...noop, bus: new RecordingEventBus(), queue: new RecordingJobQueue(), realtime: new RecordingRealtimeBroadcaster(), realtimeRegistry: new RealtimeHandlerRegistry() }); const repo = navigationContainer.get( NAVIGATION_SYMBOLS.IHeaderRepository, @@ -44,7 +44,7 @@ describe("bindDevSeedNavigation", () => { }); it("seeds a header with a non-empty items array", async () => { - await bindDevSeedNavigation(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue(), new RecordingRealtimeBroadcaster(), new RealtimeHandlerRegistry()); + await bindDevSeedNavigation({ ...noop, bus: new RecordingEventBus(), queue: new RecordingJobQueue(), realtime: new RecordingRealtimeBroadcaster(), realtimeRegistry: new RealtimeHandlerRegistry() }); const repo = navigationContainer.get( NAVIGATION_SYMBOLS.IHeaderRepository, @@ -58,13 +58,13 @@ describe("bindDevSeedNavigation", () => { }); it("is idempotent — calling twice rebuilds a fresh populated repo", async () => { - await bindDevSeedNavigation(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue(), new RecordingRealtimeBroadcaster(), new RealtimeHandlerRegistry()); + await bindDevSeedNavigation({ ...noop, bus: new RecordingEventBus(), queue: new RecordingJobQueue(), realtime: new RecordingRealtimeBroadcaster(), realtimeRegistry: new RealtimeHandlerRegistry() }); const before = navigationContainer.get( NAVIGATION_SYMBOLS.IHeaderRepository, ); const beforeHeader = await before.getHeader(); - await bindDevSeedNavigation(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue(), new RecordingRealtimeBroadcaster(), new RealtimeHandlerRegistry()); + await bindDevSeedNavigation({ ...noop, bus: new RecordingEventBus(), queue: new RecordingJobQueue(), realtime: new RecordingRealtimeBroadcaster(), realtimeRegistry: new RealtimeHandlerRegistry() }); const after = navigationContainer.get( NAVIGATION_SYMBOLS.IHeaderRepository, ); diff --git a/packages/navigation/src/di/bind-dev-seed.ts b/packages/navigation/src/di/bind-dev-seed.ts index 711054d..39ecb5d 100644 --- a/packages/navigation/src/di/bind-dev-seed.ts +++ b/packages/navigation/src/di/bind-dev-seed.ts @@ -5,9 +5,7 @@ import { type ITracer, type ILogger, } from "@repo/core-shared/instrumentation"; -import type { IEventBus } from "@repo/core-events"; -import type { IRealtimeBroadcaster, IRealtimeHandlerRegistry } from "@repo/core-realtime"; -import type { IJobQueue } from "@repo/core-shared/jobs"; +import type { BindContext } from "@repo/core-shared/di"; import { navigationContainer } from "./container.js"; import { NAVIGATION_SYMBOLS } from "./symbols.js"; import { MockHeaderRepository } from "../infrastructure/repositories/header.repository.mock.js"; @@ -27,14 +25,9 @@ import type { IHeaderRepository } from "../application/repositories/header.repos * Idempotent: safe to call multiple times; each call rebuilds a fresh * populated repo and rebinds the symbol. */ -export async function bindDevSeedNavigation( - tracer: ITracer, - logger: ILogger, - bus: IEventBus, - queue: IJobQueue, - realtime: IRealtimeBroadcaster, - realtimeRegistry: IRealtimeHandlerRegistry, -): Promise { +export async function bindDevSeedNavigation(ctx: BindContext): Promise { + const { tracer, logger, bus, queue, realtime, realtimeRegistry } = ctx; + // Bind shared instrumentation into feature container if (navigationContainer.isBound(INSTRUMENTATION_SYMBOLS.TRACER)) { navigationContainer.unbind(INSTRUMENTATION_SYMBOLS.TRACER); diff --git a/packages/navigation/src/di/bind-production.ts b/packages/navigation/src/di/bind-production.ts index b3d2bf4..f535180 100644 --- a/packages/navigation/src/di/bind-production.ts +++ b/packages/navigation/src/di/bind-production.ts @@ -1,4 +1,3 @@ -import type { SanitizedConfig } from "payload"; import { withSpan, withCapture, @@ -6,24 +5,16 @@ import { type ITracer, type ILogger, } from "@repo/core-shared/instrumentation"; -import type { IEventBus } from "@repo/core-events"; -import type { IRealtimeBroadcaster, IRealtimeHandlerRegistry } from "@repo/core-realtime"; -import type { IJobQueue } from "@repo/core-shared/jobs"; +import type { BindProductionContext } from "@repo/core-shared/di"; import { navigationContainer } from "./container"; import { NAVIGATION_SYMBOLS } from "./symbols"; import { HeaderRepository } from "../infrastructure/repositories/header.repository"; import { getHeaderUseCase } from "../application/use-cases/get-header.use-case"; import { getHeaderController } from "../interface-adapters/controllers/get-header.controller"; -export function bindProductionNavigation( - config: SanitizedConfig, - tracer: ITracer, - logger: ILogger, - bus: IEventBus, - queue: IJobQueue, - realtime: IRealtimeBroadcaster, - realtimeRegistry: IRealtimeHandlerRegistry, -): void { +export function bindProductionNavigation(ctx: BindProductionContext): void { + const { config, tracer, logger, bus, queue, realtime, realtimeRegistry } = ctx; + // Bind shared instrumentation into feature container if (navigationContainer.isBound(INSTRUMENTATION_SYMBOLS.TRACER)) { navigationContainer.unbind(INSTRUMENTATION_SYMBOLS.TRACER);