import * as table from 'table';
import { TableUserConfig, StreamUserConfig } from 'table';
import { transport, Logger as Logger$1 } from 'winston';
import { Color } from 'colorette';
import progress from 'progress';

interface LoggerOptions<T extends string[]> {
    levels?: T;
    colors?: Record<T[number], Color>;
    transports?: transport[];
    log?: Record<T[number], boolean | (() => boolean)>;
    handlers?: Record<T[number], (logger: Logger$1, message: any, ...args: any[]) => void>;
    disableColors?: boolean;
}
type TypedLogger<T extends string[]> = Logger<T> & {
    [K in T[number]]: (message: any, ...args: any[]) => TypedLogger<T>;
};

declare const colorMap: {
    b: Color;
    bb: Color;
    bbr: Color;
    bbbr: Color;
    r: Color;
    br: Color;
    rbr: Color;
    brbr: Color;
    g: Color;
    bg: Color;
    gbr: Color;
    bgbr: Color;
    y: Color;
    by: Color;
    ybr: Color;
    bybr: Color;
    bl: Color;
    bbl: Color;
    blbr: Color;
    bblbr: Color;
    m: Color;
    bm: Color;
    mbr: Color;
    bmbr: Color;
    c: Color;
    bc: Color;
    cbr: Color;
    bcbr: Color;
    w: Color;
    bw: Color;
    wbr: Color;
    bwbr: Color;
    gr: Color;
    black: Color;
    bgBlack: Color;
    blackBright: Color;
    bgBlackBright: Color;
    red: Color;
    bgRed: Color;
    redBright: Color;
    bgRedBright: Color;
    green: Color;
    bgGreen: Color;
    greenBright: Color;
    bgGreenBright: Color;
    yellow: Color;
    bgYellow: Color;
    yellowBright: Color;
    bgYellowBright: Color;
    blue: Color;
    bgBlue: Color;
    blueBright: Color;
    bgBlueBright: Color;
    magenta: Color;
    bgMagenta: Color;
    magentaBright: Color;
    bgMagentaBright: Color;
    cyan: Color;
    bgCyan: Color;
    cyanBright: Color;
    bgCyanBright: Color;
    white: Color;
    bgWhite: Color;
    whiteBright: Color;
    bgWhiteBright: Color;
    gray: Color;
};
declare const modifiersMap: {
    d: Color;
    h: Color;
    i: Color;
    u: Color;
    s: Color;
    b: Color;
    r: Color;
    dim: Color;
    hidden: Color;
    italic: Color;
    underline: Color;
    strikethrough: Color;
    bold: Color;
    reset: Color;
};
declare const argumentRegex: RegExp;
declare function createLogger<T extends string[] = ["error", "warn", "debug", "log", "info"]>(options?: LoggerOptions<T>): TypedLogger<T>;
declare class Logger<T extends string[] = ["error", "warn", "debug", "log", "info"]> {
    private colorEnabled;
    private options;
    logger: Logger$1;
    get isColorEnabled(): boolean;
    constructor(options?: LoggerOptions<T>);
    private DEFAULT_LEVELS;
    private DEFAULT_COLORS;
    private DEFAULT_FORMAT;
    private DEFAULT_FILEFORMAT;
    private DEFAULT_TRANSPORTS;
    /**
     * Documentation available [here](https://www.npmjs.com/package/table).
     */
    table(data: unknown[][], config?: TableUserConfig): void;
    /**
     * Documentation available [here](https://www.npmjs.com/package/table).
     */
    createTableStream(config: StreamUserConfig): table.WritableStream;
    /**
     * Documentation available [here](https://www.npmjs.com/package/progress).
     */
    progress(format: string, total: number): progress;
    color(color: Color, text: string): string;
    resolveLevel(level: string): string;
    stringifyArg(arg: any): any;
    formatArgs(message: string, args: any[]): string;
}

export { Logger, type LoggerOptions, type TypedLogger, argumentRegex, colorMap, createLogger as default, modifiersMap };
