import { Observable } from 'rxjs'; import { TagNotification } from '../notifications'; import { Logger, BasicLogger, LogOn } from '../logging'; declare type Timestamp = [number, number]; interface IDetails { [key: string]: string | number | boolean; } interface IState { hit(name: string): void; memo(name: string, details?: IDetails, transformTookTime?: (metric: number) => number): number | null; } export declare function createState(deps?: { timestamp: () => [number, number]; timestampDiff: (timestamp: Timestamp) => [number, number]; }): IState; export declare function attach(params: { name: string; from: TagNotification; till: TagNotification; cb?: (value: number) => void; details?: IDetails; transformTimeTook?: (value: number) => number; state?: IState; }): (source: Observable) => Observable; export declare function registerStarts(params: { name: string; on: Observable; }, state?: IState): Observable; export declare function start(paramsRaw: { name: string; on?: TagNotification; logger?: BasicLogger; }, state?: IState): (stream: Observable) => Observable; export declare function registerStops(params: { name: string; on: Observable; details?: IDetails; cb?: (time: number) => void; transformTookTime?: (time: number) => number; }, state?: IState): Observable; export declare function stop(paramsRaw: { name: string; till: TagNotification; details?: IDetails; cb?: (time: number) => void; transformTookTime?: (time: number) => number; logger?: BasicLogger; }, state?: IState): (stream: Observable) => Observable; interface ISummary { numberOfSamples: number; average: number; mostOfTheTimesLessThan: number; min: number; max: number; } export declare function logSummaries(params: { name: string; on?: LogOn; logger?: Logger; }): Observable; export declare function timesRegistered(name?: string | RegExp): Observable<{ name: string; time: number; details?: IDetails | undefined; }>; export declare function summariesLogged(name?: string): Observable<{ name: string; summary: ISummary; }>; export {};