import { Action } from './Action';
import { getBest } from '../Colors';
import { Spinner } from './Spinner';
import { LoggerOptions, RendererContract } from '../Contracts';
/**
 * Logger exposes the API to log messages with consistent styles
 * and colors
 */
export declare class Logger {
    private testing;
    /**
     * Logger configuration options
     */
    options: LoggerOptions;
    /**
     * The colors reference
     */
    colors: ReturnType<typeof getBest>;
    /**
     * The label colors reference
     */
    private labelColors;
    /**
     * The renderer to use to output logs
     */
    private renderer?;
    constructor(options?: Partial<LoggerOptions>, testing?: boolean);
    /**
     * Colors the logger label
     */
    private colorizeLabel;
    /**
     * Returns the label for a given logging type
     */
    private getLabel;
    /**
     * Appends the suffix to the message
     */
    private addSuffix;
    /**
     * Prepends the prefix to the message. We do not DIM the prefix, since
     * gray doesn't have much brightness already
     */
    private addPrefix;
    /**
     * Prepends the prefix to the message
     */
    private prefixLabel;
    /**
     * Decorate message string
     */
    private decorateMessage;
    /**
     * Decorate message string
     */
    private formatStack;
    /**
     * Returns the renderer for rendering the messages
     */
    private getRenderer;
    /**
     * Define a custom renderer. Logs to "stdout" and "stderr"
     * by default
     */
    useRenderer(renderer: RendererContract): this;
    /**
     * Log message using the renderer. It is similar to `console.log`
     * but uses the underlying renderer instead
     */
    log(message: string): void;
    /**
     * Log message by overwriting the existing one
     */
    logUpdate(message: string): void;
    /**
     * Persist the message logged using [[this.logUpdate]]
     */
    logUpdatePersist(): void;
    /**
     * Log error message using the renderer. It is similar to `console.error`
     * but uses the underlying renderer instead
     */
    logError(message: string): void;
    /**
     * Log success message
     */
    success(message: string, prefix?: string, suffix?: string): void;
    /**
     * Log error message
     */
    error(message: string | {
        message: string;
    }, prefix?: string, suffix?: string): void;
    /**
     * Log fatal message
     */
    fatal(message: string | {
        message: string;
        stack?: string;
    }, prefix?: string, suffix?: string): void;
    /**
     * Log warning message
     */
    warning(message: string, prefix?: string, suffix?: string): void;
    /**
     * Log info message
     */
    info(message: string, prefix?: string, suffix?: string): void;
    /**
     * Log debug message
     */
    debug(message: string, prefix?: string, suffix?: string): void;
    /**
     * Log a message with a spinner
     */
    await(message: string, prefix?: string, suffix?: string): Spinner;
    /**
     * Initiates a new action
     */
    action(title: string): Action;
}
