| 295 | } |
| 296 | |
| 297 | function parseHookOutput(stdout: string): { json?: HookJsonOutput; plainText?: string } { |
| 298 | const trimmed = stdout.trim() |
| 299 | if (!trimmed.startsWith("{")) return { plainText: stdout } |
| 300 | try { |
| 301 | const parsed = JSON.parse(trimmed) |
| 302 | if (parsed && typeof parsed === "object") return { json: parsed as HookJsonOutput } |
| 303 | return { plainText: stdout } |
| 304 | } catch { |
| 305 | return { plainText: stdout } |
| 306 | } |
| 307 | } |
| 308 | |
| 309 | function aggregate(results: PerHookResult[]): AggregatedHookResult { |
| 310 | const out: AggregatedHookResult = { blocked: false, stopAll: false } |