import type { Rule } from "eslint"; import { createSpinner, type Spinner } from "nanospinner"; import type { OutputStream, SpinnerStyle } from "../types.js"; import { type NormalizedProgressSettings } from "./progress-options.js"; /** * Stateful coordinator for live progress output and final summaries. */ export interface ProgressController { getState: () => Readonly; handleExit: (exitCode: number) => void; handleLintFile: (input: { readonly context: Readonly; readonly liveMode: ProgressLiveMode; }) => void; reset: () => void; } /** * Internal live-rendering mode used by the progress controller. */ export type ProgressLiveMode = "file" | "generic" | "summary-only"; type ProcessLike = Pick; interface ProgressControllerDependencies { readonly now?: () => number; readonly process?: ProcessLike; readonly spinnerFactory?: SpinnerFactory; } interface ProgressControllerState { activeOutputStream: OutputStream; activeSpinnerStyle: SpinnerStyle; exitHandlerBound: boolean; finalStatusHandled: boolean; initialLiveReportDone: boolean; lastRenderAt: number; lastResolvedSettings: NormalizedProgressSettings; lintedFileCount: number; lintStartedAt: number; spinner: Spinner; summaryNeedsLeadingLineBreak: boolean; } type SpinnerCreateOptions = NonNullable[1]>; type SpinnerFactory = (text?: string, opts?: Readonly) => Spinner; /** * Creates a progress controller for coordinating shared CLI progress output. * * @param dependencies - Optional process, clock, and spinner overrides for * tests. * * @returns Progress controller instance. */ export declare const createProgressController: (dependencies?: Readonly) => ProgressController; export {}; //# sourceMappingURL=progress-controller.d.ts.map