import { AutorunObserver } from "../autorun.js";
import { IObservable, TransactionImpl } from "../base.js";
import type { Derived } from "../derived.js";
export declare function addLogger(logger: IObservableLogger): void;
export declare function getLogger(): IObservableLogger | undefined;
export declare function setLogObservableFn(fn: (obs: IObservable<any>) => void): void;
export declare function logObservable(obs: IObservable<any>): void;
export interface IChangeInformation {
    oldValue: unknown;
    newValue: unknown;
    change: unknown;
    didChange: boolean;
    hadValue: boolean;
}
export interface IObservableLogger {
    handleObservableCreated(observable: IObservable<any>): void;
    handleOnListenerCountChanged(observable: IObservable<any>, newCount: number): void;
    handleObservableUpdated(observable: IObservable<any>, info: IChangeInformation): void;
    handleAutorunCreated(autorun: AutorunObserver): void;
    handleAutorunDisposed(autorun: AutorunObserver): void;
    handleAutorunDependencyChanged(autorun: AutorunObserver, observable: IObservable<any>, change: unknown): void;
    handleAutorunStarted(autorun: AutorunObserver): void;
    handleAutorunFinished(autorun: AutorunObserver): void;
    handleDerivedDependencyChanged(derived: Derived<any, any, any>, observable: IObservable<any>, change: unknown): void;
    handleDerivedCleared(observable: Derived<any, any, any>): void;
    handleBeginTransaction(transaction: TransactionImpl): void;
    handleEndTransaction(transaction: TransactionImpl): void;
}
