interface Log {
    args: Array<any>;
    time: number;
}
export interface Report {
    name: string;
    duration: number;
    logs: Array<Log | Report>;
}
export declare namespace Report {
    function toConsole(report: Report, prefix?: string): void;
    function toServerTiming(report: Report, index?: number): string;
}
export interface LoggerResult<T> {
    result: T;
    logger: Logger;
}
export declare class Logger {
    name: string;
    logs: Array<Log | Report>;
    started: number;
    operations: Array<Logger>;
    startProgress: number | undefined;
    constructor(name: string);
    time(name: string, justTime?: boolean): () => void;
    log(...args: Array<any>): void;
    progress(message: string): void;
    summary(message: string): void;
    result<T>(result: Promise<T>): Promise<LoggerResult<T>>;
    report(): {
        name: string;
        duration: number;
        logs: (Log | Report)[];
    };
}
export {};
