import type { CommonLogger } from '..';
/**
 * $r - result
 *
 * @returns array of tokens that will be `.filter(Boolean).join(' ')`
 */
type LogResultFn = (r: any) => any[];
export interface LogMethodOptions {
    /**
     * Log "moving average" elapsed time for up to `avg` last method calls
     */
    avg?: number;
    /**
     * Defaults to true.
     * Set to false to skip logging method arguments
     */
    logArgs?: boolean;
    /**
     * Defaults to true.
     * Set to false to skip logging result length when result is an array.
     */
    logResultLength?: boolean;
    /**
     * Also log on method start.
     * Example:
     *
     * >> syncMethodSuccess()
     */
    logStart?: boolean;
    /**
     * Log method result as is (stringified).
     * Example:
     *
     * * << syncMethodSuccess() took 124 ms result: 'SomeString as result'
     */
    logResult?: boolean;
    /**
     * Log method result via provided function that takes "result as is" as first argument and should return a String.
     * Overrides `logResult`.
     */
    logResultFn?: LogResultFn;
    /**
     * Defaults to `console`
     */
    logger?: CommonLogger;
}
/**
 * Console-logs when method had started, when it finished, time taken and if error happened.
 * Supports both sync and async methods.
 * Awaits if method returns a Promise.
 *
 * @example output:
 *
 * >> syncMethodSuccess()
 * << syncMethodSuccess() took 124 ms
 *
 * >> asyncMethod()
 * << asyncMethodThrow() took 10 ms ERROR: MyError
 */
export declare function _LogMethod(opt?: LogMethodOptions): MethodDecorator;
export {};
