Files
initiative/packages/application/src/run-encounter-action.ts
Lukas f4fb69dbc7
All checks were successful
CI / check (push) Successful in 1m13s
CI / build-image (push) Has been skipped
Add jsinspect-plus structural duplication gate, extract shared helpers
Add jsinspect-plus (AST-based structural duplication detector) to pnpm
check with threshold 50 / min 3 instances. Fix all findings:

- Extract condition icon/color maps to shared condition-styles.ts
- Extract useClickOutside hook (5 components)
- Extract dispatchAction + resolveAndRename in use-encounter
- Extract runEncounterAction in application layer (13 use cases)
- Extract findCombatant helper in domain (9 functions)
- Extract TraitSection in stat-block (4 trait rendering blocks)
- Extract DialogHeader in dialog.tsx (4 dialogs)

Net result: -263 lines across 40 files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:16:54 +01:00

28 lines
602 B
TypeScript

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;
}