import { IConstructor } from './constructor'; import { IFakeConsole } from './fake-console'; export interface ILoggerOptions { singleLine?: boolean; indentation?: string; } export interface ILoggerParams extends ILoggerOptions { createConsole(options: ILoggerOptions): IFakeConsole; } export interface ILogger extends IConstructor { constructor: IConstructor; indent: number; new (options: ILoggerOptions): ILogger; (klass: IConstructor): void; (instance: T, key: keyof T, descriptor: PropertyDescriptor): void; class(klass: IConstructor): void; object(object: object, prefix?: string): object; function(fn: Function, prefix?: string): Function; descriptor(instance: T, key: keyof T, descriptor: PropertyDescriptor): PropertyDescriptor; method(instance: T, key: keyof T, descriptor: PropertyDescriptor): PropertyDescriptor; property(instance: T, key: keyof T, descriptor: PropertyDescriptor): PropertyDescriptor; omit(instance: T, key: keyof T, descriptor: PropertyDescriptor): PropertyDescriptor; set(options: ILoggerOptions): ILogger; cleanValue(value: any): any; } export default function Logger({createConsole, singleLine, indentation}: ILoggerParams): ILogger & { constructor: ({createConsole, singleLine, indentation}: ILoggerParams) => ILogger & any; class: (klass: IConstructor) => IConstructor; object: (object: T, name?: string) => T; function: (fn: Function, prefix?: string) => Function; descriptor: (instance: T, key: keyof T, descriptor: PropertyDescriptor) => PropertyDescriptor; method: (instance: T, key: keyof T, descriptor: PropertyDescriptor) => PropertyDescriptor; property: (instance: T, key: keyof T, descriptor: PropertyDescriptor) => PropertyDescriptor; omit: (instance: Function | T, key: keyof T, descriptor: PropertyDescriptor) => PropertyDescriptor; set: (config: ILoggerOptions) => ILogger & any; cleanValue: (value: any) => any; };