/** * Formatter interfaces for parsing and normalizing tool output */ import { Issue, TestResult, Coverage, GitInfo } from './output.js'; import { ExecuteResult } from './executors.js'; import { UnknownToolOutput, UnknownJson } from './common.js'; /** * Base formatter interface */ export interface Formatter { /** Name of the formatter */ name: string; /** Parse raw output into structured data */ parse(input: TInput): TOutput; /** Validate that input can be parsed */ canParse(input: unknown): boolean; } /** * Formatter for issue-based output (linters, type checkers) */ export interface IssueFormatter extends Formatter { /** Extract issues from tool output */ extractIssues(output: string): Issue[]; /** Map tool-specific severity to standard severity */ mapSeverity(toolSeverity: string): 'error' | 'warning' | 'info' | 'hint'; /** Extract file path from issue */ extractFilePath(issue: UnknownJson): string; } /** * Formatter for test results */ export interface TestFormatter extends Formatter { /** Extract test results from output */ extractTests(output: string): TestResult[]; /** Extract coverage if available */ extractCoverage?(output: string): Coverage | undefined; } /** * Formatter for Git output */ export interface GitFormatter extends Formatter { /** Parse git status output */ parseStatus(output: string): GitInfo; /** Parse git diff output */ parseDiff?(output: string): Array<{ file: string; additions: number; deletions: number; }>; } /** * Options for formatting */ export interface FormatOptions { /** Project root for resolving relative paths */ projectRoot: string; /** Whether to include raw output in results */ includeRaw?: boolean; /** Custom field mappings */ fieldMappings?: Record; /** Filter for including/excluding files */ fileFilter?: (file: string) => boolean; } /** * Registry for formatters */ export interface FormatterRegistry { /** Register a formatter */ register(tool: string, formatter: Formatter): void; /** Get formatter for a tool */ get(tool: string): Formatter | undefined; /** Check if formatter exists */ has(tool: string): boolean; /** List all registered formatters */ list(): string[]; } //# sourceMappingURL=formatters.d.ts.map