import { type DomainError, type DomainEvent, type Encounter, isDomainError, } from "@initiative/domain"; import type { EncounterStore } from "./ports.js"; interface EncounterActionResult { readonly encounter: Encounter; readonly events: DomainEvent[]; } export function runEncounterAction( store: EncounterStore, action: (encounter: Encounter) => EncounterActionResult | DomainError, ): DomainEvent[] | DomainError { const encounter = store.get(); const result = action(encounter); if (isDomainError(result)) { return result; } store.save(result.encounter); return result.events; }