import type { IObservable } from "../reactive/types"; export interface ILogger { log: (entry: ILogInputEntry) => void; createCustomLog: (transform: (...args: TArgs) => ILogInputEntry) => (...args: TArgs) => void; createComponentLog: (component: string) => IComponentLogger; getAllLogs: () => ILogEntry[]; log$: IObservable; } export interface ILogEntry { /** * Сообщение. */ message: string; /** * Компонент, в котором залогировано событие. (модуль, класс или функция) */ component: string; /** * Время, в которое случилось логируемое событие */ timestamp: number; } export type IComponentLogger = (entry: IComponentLogEntry) => void; export type ILogInputEntry = Omit; export interface IComponentLogEntry extends Omit, IOptionalComponent {} interface IOptionalComponent { component?: ILogInputEntry["component"]; } export {};