@invisiblecities/sidequest-cqo
Version:
Configuration-agnostic TypeScript and ESLint orchestrator with real-time watch mode, SQLite persistence, and intelligent terminal detection
105 lines • 4.14 kB
TypeScript
/**
* Shared TypeScript types for Code Quality Orchestrator
* Provides type safety for color schemes, configurations, and interfaces
*/
export interface ColorScheme {
readonly reset: string;
readonly bold: string;
readonly dim: string;
readonly primary: string;
readonly secondary: string;
readonly success: string;
readonly warning: string;
readonly error: string;
readonly info: string;
readonly muted: string;
readonly accent: string;
readonly header: string;
}
export type TerminalMode = "light" | "dark";
export interface WatchState {
isInitialized: boolean;
sessionStart: number;
lastUpdate: number;
baseline: ViolationSummary | undefined;
current: ViolationSummary;
viewMode: "dashboard" | "tidy" | "burndown";
currentViolations: import("../utils/violation-types.js").Violation[];
}
export interface ViolationSummary {
readonly total: number;
readonly bySource: Readonly<Record<string, number>>;
readonly byCategory: Readonly<Record<string, number>>;
readonly bySeverity?: Readonly<Record<string, Record<string, number>>>;
readonly byCategoryBySource?: Readonly<Record<string, Record<string, number>>>;
}
export interface TodayProgressData {
readonly total: number;
readonly filesAffected: number;
readonly avgPerFile: number;
}
export interface ConsoleBackup {
readonly log: typeof console.log;
readonly error: typeof console.error;
readonly warn: typeof console.warn;
readonly stderrWrite: typeof process.stderr.write;
}
export interface TerminalCapabilities {
readonly supportsOSC: boolean;
readonly supportsTrueColor: boolean;
readonly supports256Color: boolean;
readonly supportsBasicColor: boolean;
}
export interface ColorDetectionResult {
readonly mode: TerminalMode;
readonly confidence: "high" | "medium" | "low";
readonly method: "osc" | "heuristic" | "fallback";
readonly backgroundColor?: string;
readonly luminance?: number;
}
export interface DisplayConfiguration {
readonly maxCategories: number;
readonly updateDebounceMs: number;
readonly showTodayProgress: boolean;
readonly colorMode: TerminalMode | "auto";
}
export interface ValidationConfiguration {
readonly strictMode: boolean;
readonly maxMessageLength: number;
readonly allowedFileExtensions: readonly string[];
readonly requiredFields: readonly string[];
}
export declare class DisplayError extends Error {
readonly code: string;
readonly context?: Record<string, unknown> | undefined;
constructor(message: string, code: string, // eslint-disable-line no-unused-vars
context?: Record<string, unknown> | undefined);
}
export declare class TerminalDetectionError extends Error {
readonly method: string;
readonly originalError?: Error | undefined;
constructor(message: string, method: string, // eslint-disable-line no-unused-vars
originalError?: Error | undefined);
}
export interface WatchDisplayEvents {
initialized: [];
updated: [violations: number, checksCount: number];
baselineSet: [baseline: ViolationSummary];
error: [error: DisplayError];
shutdown: [];
}
export type EventListener<T extends readonly unknown[]> = (..._arguments: T) => void;
export interface TypedEventEmitter<TEvents extends Record<string, readonly unknown[]>> {
on<K extends keyof TEvents>(_event: K, _listener: EventListener<TEvents[K]>): void;
off<K extends keyof TEvents>(_event: K, _listener: EventListener<TEvents[K]>): void;
emit<K extends keyof TEvents>(_event: K, ..._arguments: TEvents[K]): void;
}
export type DeepReadonly<T> = {
readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P];
};
export type NonEmptyArray<T> = [T, ...T[]];
export type RequireField<T, K extends keyof T> = T & Required<Pick<T, K>>;
export declare function isColorScheme(object: unknown): object is ColorScheme;
export declare function isTerminalMode(value: string): value is TerminalMode;
export declare function isViolationSummary(object: unknown): object is ViolationSummary;
//# sourceMappingURL=types.d.ts.map