import type { Patch } from "./Patch";
/**
 * A function that gets called when a patch is emitted.
 */
export declare type OnPatchesListener = (patches: Patch[], inversePatches: Patch[]) => void;
/**
 * A function that gets called when a global patch is emitted.
 */
export declare type OnGlobalPatchesListener = (target: object, patches: Patch[], inversePatches: Patch[]) => void;
/**
 * Disposer function to stop listening to patches.
 */
export declare type OnPatchesDisposer = () => void;
/**
 * Adds a listener that will be called every time a patch is generated for the tree of the given target object.
 *
 * @param subtreeRoot Subtree root object of the patch listener.
 * @param listener The listener function that will be called everytime a patch is generated for the object or its children.
 * @returns A disposer to stop listening to patches.
 */
export declare function onPatches(subtreeRoot: object, listener: OnPatchesListener): OnPatchesDisposer;
/**
 * Adds a listener that will be called every time a patch is generated anywhere.
 * Usually prefer using `onPatches`.
 *
 * @param listener The listener function that will be called everytime a patch is generated anywhere.
 * @returns A disposer to stop listening to patches.
 */
export declare function onGlobalPatches(listener: OnGlobalPatchesListener): OnPatchesDisposer;
