export type IDisposer = () => void export interface IJsonPatch { op: "replace" | "add" | "remove" path: string value?: any } export interface IReversibleJsonPatch extends IJsonPatch { oldValue?: any } export interface IEncodedJsonPatch extends IReversibleJsonPatch { encoded?: Buffer } export type PatchListener = (patch: IJsonPatch, obj?: any, root?: T) => void export interface IStateTracker { onPatch(listner: PatchListener, params?: any): IDisposer snapshot(params?: any): { [key: string]: any } dispose(): void }