import { Auto, Change, ObserverTarget } from './shared/ed456245';

interface DebugState {
    name: string;
    actions?: any[];
    renders?: number;
}
/** Get the `Auto` object for the current `withAuto` component being rendered. */
declare function getCurrentAuto(): Auto | null;
/**
 * Get the `DebugState` object of the `target` object.
 *
 * Returns `undefined` if target was never passed to `setDebug`.
 */
declare function getDebug(target: object): DebugState;
/**
 * Set the `DebugState` object of the `target` object.
 */
declare function setDebug<T>(target: T, debug: DebugState): T;
/** Safely add an action to a `DebugState` object */
declare function addDebugAction(target: any, action: any): void;

declare function logChange(change: Change, targetId?: string): void;
declare global {
    interface Console {
        groupCollapsed(name: string): void;
        groupEnd(): void;
    }
}

declare type ChangeLogConfig = {
    name?: string;
    onChange?: (change: Change) => void;
};
declare function logChanges(target: ObserverTarget, { name, onChange }?: ChangeLogConfig): {
    onChange: (change: Change) => void;
    dispose: () => void;
};

/**
 * Log any shallow changes to the given observable object.
 */
declare function useChangeLog(target: object, { name, onChange }?: ChangeLogConfig): void;

declare function useObserverLog(name?: string): void;

declare function useRenderLog(): void;

export { ChangeLogConfig, addDebugAction, getCurrentAuto, getDebug, logChange, logChanges, setDebug, useChangeLog, useObserverLog, useRenderLog };
