type FunctionKey = (obj: any) => any; export declare const getTypeOfObj: (obj: any) => any; export declare const diff: (oldObj: any, newObj: any, embeddedObjKeys?: Dictionary) => IChange[]; export declare const applyChangeset: (obj: any, changeset: Changeset) => any; export declare const revertChangeset: (obj: any, changeset: Changeset) => any; export declare enum Operation { REMOVE = "REMOVE", ADD = "ADD", UPDATE = "UPDATE" } export interface IChange { type: Operation; key: string; embeddedKey?: string | FunctionKey; value?: any | any[]; oldValue?: any; changes?: IChange[]; } export type Changeset = IChange[]; export interface IFlatChange { type: Operation; key: string; path: string; valueType: string | null; value?: any; oldValue?: any; } export declare const flattenChangeset: (obj: Changeset | IChange, path?: string, embeddedKey?: string | FunctionKey) => IFlatChange[]; export {};