import { type LogMessage, type Task, type Listener, type ListenerType } from './types.js';
declare const DEFAULT_COLOR: (text: string) => string;
/**
 * Resolve color for message or task
 */
export declare function resolveColor(taskOrMessage: Task | LogMessage): typeof DEFAULT_COLOR;
/**
 * Logger for holding state of current progress
 * - Exposes different logs via `on` subscribe method
 */
declare class ProgressLogger {
    /** Messages printed as a list under tasks */
    private messages;
    /** Messages of the task runners */
    private tasks;
    /** Count of finished repositories */
    scannedRepositories: number;
    /** Total count of errors */
    private errorCount;
    /** Event listeners */
    private listeners;
    /** Indicates whether scan has reached time limit set by `config.timeLimit` */
    private hasTimedout;
    /** Handle of scan timeout. Used to interrupt scan once time limit has been reached. */
    private scanTimeoutHandle;
    /** Interval of CI status messages. Used to avoid CIs timing out due to silent stdout. */
    private ciKeepAliveIntervalHandle;
    constructor();
    /**
     * Subscribe on logger's events
     */
    on<T extends ListenerType = ListenerType>(event: T & ListenerType, listener: Listener<T>): this;
    /**
     * Unsubscribe from logger's events
     */
    off<T = ListenerType>(event: T & ListenerType, listener: Listener<T>): this;
    /**
     * Add new message to logger
     */
    addNewMessage(message: LogMessage): void;
    /**
     * Get current log messages
     */
    getMessages(): LogMessage[];
    /**
     * Check whether scan has timed out
     */
    isTimeout(): boolean;
    /**
     * Add final message and fire exit event
     */
    onAllRepositoriesScanned(): void;
    /**
     * Apply updates to given task
     */
    updateTask(repository: string, updates: Omit<Task, 'repository'>): void;
    /**
     * Apply warning to given task. Duplicate warnings are ignored.
     * Returns boolean indicating whether warning did not exist on task already
     */
    addWarningToTask(repository: string, warning: string): boolean;
    /**
     * Log start of task runner
     */
    onTaskStart(repository: string): void;
    /**
     * Log start of linting of given repository
     */
    onLintStart(repository: string, fileCount: number): void;
    /**
     * Log end of linting of given repository
     */
    onLintEnd(repository: string, resultCount: number): void;
    /**
     * Log end of a single file lint
     */
    onFileLintEnd(repository: string, currentFileIndex: number): void;
    /**
     * Log warning about slow linting
     */
    onFileLintSlow(repository: string, lintTime: number, file: string): void;
    /**
     * Log error about linter crashing
     */
    onLinterCrash(repository: string, erroneousRule: string): void;
    /**
     * Log error about worker crashing
     */
    onWorkerCrash(repository: string, errorCode?: string): void;
    /**
     * Log error about clone failure
     */
    onCloneFailure(repository: string): void;
    /**
     * Log error about pull failure
     */
    onPullFailure(repository: string): void;
    /**
     * Log error about filesystem read failure
     */
    onReadFailure(repository: string): void;
    /**
     * Log error about result writing failure
     */
    onWriteFailure(repository: string, error: Error): void;
    /**
     * Log start of cloning of given repository
     */
    onRepositoryClone(repository: string): void;
    /**
     * Log start of pulling of given repository
     */
    onRepositoryPull(repository: string): void;
    /**
     * Log start of cloning of given repository
     */
    onRepositoryRead(repository: string): void;
    /**
     * Log status of scanning to CI
     * - These are used to avoid CI timeouts
     */
    onCiStatus(): void;
    /**
     * Log status of cache. Includes count of cached repositories and location of cache.
     * Only used in CLI
     */
    onCacheStatus(status: {
        countOfRepositories: number;
        location: string;
    }): void;
    /**
     * Log notification about reaching scan time limit and notify listeners
     */
    private onScanTimeout;
    /**
     * Log debug message
     */
    onDebug(...messages: any[]): void;
}
declare const _default: ProgressLogger;
export default _default;
//# sourceMappingURL=progress-logger.d.ts.map