export type DomainResult = { ok: true; value: T } | { ok: false; issues: DomainIssue[] }; export interface DomainIssue { path: string; message: string; } export function ok(value: T): DomainResult { return { ok: true, value }; } export function err(path: string, message: string): DomainResult { return { ok: false, issues: [{ path, message }] }; } export function issuesToMessage(issues: readonly DomainIssue[]): string { return issues.map((issue) => `${issue.path}: ${issue.message}`).join("; "); }