import { Path } from '../parent/pathTypes'; /** * Disposer function to stop listening to deep changes. */ export type OnDeepChangeDisposer = () => void; export declare enum DeepChangeType { ArraySplice = "arraySplice", ArrayUpdate = "arrayUpdate", ObjectAdd = "objectAdd", ObjectUpdate = "objectUpdate", ObjectRemove = "objectRemove" } export interface DeepChangeBase { readonly type: DeepChangeType; readonly path: Path; /** * Whether this change occurred during initialization (e.g., setting default values, onInit modifications). * This is `true` when the change is part of snapshot initialization, `false` for runtime changes. */ readonly isInit: boolean; } /** * A splice change in an array. */ export interface ArraySpliceChange extends DeepChangeBase { readonly type: DeepChangeType.ArraySplice; readonly target: unknown[]; readonly index: number; readonly addedValues: unknown[]; readonly removedValues: unknown[]; } /** * An update change in an array (single element replaced). */ export interface ArrayUpdateChange extends DeepChangeBase { readonly type: DeepChangeType.ArrayUpdate; readonly target: unknown[]; readonly index: number; readonly newValue: unknown; readonly oldValue: unknown; } /** * A property added to an object. */ export interface ObjectAddChange extends DeepChangeBase { readonly type: DeepChangeType.ObjectAdd; readonly target: object; readonly key: string; readonly newValue: unknown; } /** * A property updated in an object. */ export interface ObjectUpdateChange extends DeepChangeBase { readonly type: DeepChangeType.ObjectUpdate; readonly target: object; readonly key: string; readonly newValue: unknown; readonly oldValue: unknown; } /** * A property removed from an object. */ export interface ObjectRemoveChange extends DeepChangeBase { readonly type: DeepChangeType.ObjectRemove; readonly target: object; readonly key: string; readonly oldValue: unknown; } /** * A deep change event. */ export type DeepChange = ArraySpliceChange | ArrayUpdateChange | ObjectAddChange | ObjectUpdateChange | ObjectRemoveChange; /** * A function that gets called when a deep change is emitted. */ export type OnDeepChangeListener = (change: DeepChange) => void; /** * Adds a listener that will be called every time a deep change is generated for the tree of the given target object. * Unlike `onPatches`, this provides raw MobX change information including proper splice detection for arrays. * * @param subtreeRoot Subtree root object of the deep change listener. * @param listener The listener function that will be called every time a change is generated for the object or its children. * @returns A disposer to stop listening to deep changes. */ export declare function onDeepChange(subtreeRoot: object, listener: OnDeepChangeListener): OnDeepChangeDisposer; /** * Adds a listener that will be called every time a deep change is generated anywhere. * Usually prefer using `onDeepChange`. * * @param listener The listener function that will be called every time a change is generated anywhere. * @returns A disposer to stop listening to deep changes. */ export declare function onGlobalDeepChange(listener: (target: object, change: DeepChange) => void): OnDeepChangeDisposer;