import type { TurnId } from "@leitwerk-dev/domain"; import type { WorkerProcessAPI, WorkerTurnHandler } from "./extension-api.js"; import { cloneMap, registerUnique } from "./registry-utils.js"; /** @internal */ export interface BuiltWorkerProcessDefinition { /** @internal */ startTurnId: TurnId | null; /** @internal */ turns: ReadonlyMap>; } /** @internal */ export function createWorkerProcessBuilder(): WorkerProcessAPI< TParams, TState > & { /** @internal */ getDefinition(): BuiltWorkerProcessDefinition; } { const turns = new Map>(); let startTurnId: TurnId | null = null; return { start(turnId: TurnId): void { startTurnId = turnId; }, turn(turnId: TurnId, handler: WorkerTurnHandler): void { registerUnique(turns, turnId, handler, { duplicateMessage: `Worker turn '${turnId}' is already registered`, }); }, getDefinition(): BuiltWorkerProcessDefinition { return { startTurnId, turns: cloneMap(turns), }; }, }; }