From 2b4e576b0ddd5e199770d5b95d2cabb5e9539510 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Fri, 8 May 2026 16:07:05 +0200 Subject: [PATCH] feat(navigation): bind binders accept (bus, queue) params --- packages/navigation/package.json | 1 + packages/navigation/src/di/bind-dev-seed.test.ts | 9 +++++---- packages/navigation/src/di/bind-dev-seed.ts | 13 ++++++++++++- packages/navigation/src/di/bind-production.ts | 8 ++++++++ pnpm-lock.yaml | 3 +++ 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/packages/navigation/package.json b/packages/navigation/package.json index bb53384..3a24e74 100644 --- a/packages/navigation/package.json +++ b/packages/navigation/package.json @@ -18,6 +18,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@repo/core-events": "workspace:*", "@repo/core-shared": "workspace:*", "@trpc/server": "^11.0.0", "inversify": "^6.2.0", diff --git a/packages/navigation/src/di/bind-dev-seed.test.ts b/packages/navigation/src/di/bind-dev-seed.test.ts index c1b7655..90f1b87 100644 --- a/packages/navigation/src/di/bind-dev-seed.test.ts +++ b/packages/navigation/src/di/bind-dev-seed.test.ts @@ -1,6 +1,7 @@ import "reflect-metadata"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { NoopTracer, NoopLogger } from "@repo/core-shared/instrumentation"; +import { RecordingEventBus, RecordingJobQueue } from "@repo/core-testing/instrumentation"; import { bindDevSeedNavigation } from "@/di/bind-dev-seed"; import { navigationContainer } from "@/di/container"; import { NAVIGATION_SYMBOLS } from "@/di/symbols"; @@ -31,7 +32,7 @@ describe("bindDevSeedNavigation", () => { }); it("populates the header repository with the dev header", async () => { - await bindDevSeedNavigation(noop.tracer, noop.logger); + await bindDevSeedNavigation(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue()); const repo = navigationContainer.get( NAVIGATION_SYMBOLS.IHeaderRepository, @@ -42,7 +43,7 @@ describe("bindDevSeedNavigation", () => { }); it("seeds a header with a non-empty items array", async () => { - await bindDevSeedNavigation(noop.tracer, noop.logger); + await bindDevSeedNavigation(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue()); const repo = navigationContainer.get( NAVIGATION_SYMBOLS.IHeaderRepository, @@ -56,13 +57,13 @@ describe("bindDevSeedNavigation", () => { }); it("is idempotent — calling twice rebuilds a fresh populated repo", async () => { - await bindDevSeedNavigation(noop.tracer, noop.logger); + await bindDevSeedNavigation(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue()); const before = navigationContainer.get( NAVIGATION_SYMBOLS.IHeaderRepository, ); const beforeHeader = await before.getHeader(); - await bindDevSeedNavigation(noop.tracer, noop.logger); + await bindDevSeedNavigation(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue()); 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 d3cdcd4..e9bb6ad 100644 --- a/packages/navigation/src/di/bind-dev-seed.ts +++ b/packages/navigation/src/di/bind-dev-seed.ts @@ -5,6 +5,8 @@ import { type ITracer, type ILogger, } from "@repo/core-shared/instrumentation"; +import type { IEventBus } from "@repo/core-events"; +import type { IJobQueue } from "@repo/core-shared/jobs"; import { navigationContainer } from "./container.js"; import { NAVIGATION_SYMBOLS } from "./symbols.js"; import { MockHeaderRepository } from "../infrastructure/repositories/header.repository.mock.js"; @@ -24,7 +26,12 @@ 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): Promise { +export async function bindDevSeedNavigation( + tracer: ITracer, + logger: ILogger, + bus: IEventBus, + queue: IJobQueue, +): Promise { // Bind shared instrumentation into feature container if (navigationContainer.isBound(INSTRUMENTATION_SYMBOLS.TRACER)) { navigationContainer.unbind(INSTRUMENTATION_SYMBOLS.TRACER); @@ -77,6 +84,10 @@ export async function bindDevSeedNavigation(tracer: ITracer, logger: ILogger): P ), ), ); + // bus + queue are accept-and-forward in Phase 6; consumed by Phase 7 generator + // output at the / anchors below. + void bus; + void queue; // // } diff --git a/packages/navigation/src/di/bind-production.ts b/packages/navigation/src/di/bind-production.ts index f14dc49..ada2f86 100644 --- a/packages/navigation/src/di/bind-production.ts +++ b/packages/navigation/src/di/bind-production.ts @@ -6,6 +6,8 @@ import { type ITracer, type ILogger, } from "@repo/core-shared/instrumentation"; +import type { IEventBus } from "@repo/core-events"; +import type { IJobQueue } from "@repo/core-shared/jobs"; import { navigationContainer } from "./container"; import { NAVIGATION_SYMBOLS } from "./symbols"; import { HeaderRepository } from "../infrastructure/repositories/header.repository"; @@ -16,6 +18,8 @@ export function bindProductionNavigation( config: SanitizedConfig, tracer: ITracer, logger: ILogger, + bus: IEventBus, + queue: IJobQueue, ): void { // Bind shared instrumentation into feature container if (navigationContainer.isBound(INSTRUMENTATION_SYMBOLS.TRACER)) { @@ -71,6 +75,10 @@ export function bindProductionNavigation( ), ), ); + // bus + queue are accept-and-forward in Phase 6; consumed by Phase 7 generator + // output at the / anchors below. + void bus; + void queue; // // } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d340d9..e17dc33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -855,6 +855,9 @@ importers: packages/navigation: dependencies: + '@repo/core-events': + specifier: workspace:* + version: link:../core-events '@repo/core-shared': specifier: workspace:* version: link:../core-shared