export declare class Context { private commands; constructor(); isEquals: (x: any, y: any) => boolean; extend(directive: string, fn: (param: any, old: T) => T): void; update = never>(object: T, $spec: Spec): T; } export declare const isEquals: any; export declare const extend: (directive: string, fn: (param: any, old: T) => T) => void; declare const _default: = never>(object: T, $spec: Spec) => T; export default _default; export declare type CustomCommands = T & { __noInferenceCustomCommandsBrand: any; }; export declare type Spec = never> = (T extends (Array | ReadonlyArray) ? ArraySpec : T extends (Map | ReadonlyMap) ? MapSpec : T extends (Set | ReadonlySet) ? SetSpec : T extends object ? ObjectSpec : never) | { $set: T; } | { $apply: (v: T) => T; } | ((v: T) => T) | (C extends CustomCommands ? O : never); declare type ArraySpec> = { $push: T[]; } | { $unshift: T[]; } | { $splice: Array<[number, number?] | [number, number, ...T[]]>; } | { [index: string]: Spec; }; declare type MapSpec = { $add: Array<[K, V]>; } | { $remove: K[]; }; declare type SetSpec = { $add: T[]; } | { $remove: T[]; }; declare type ObjectSpec> = { $toggle: Array; } | { $unset: Array; } | { $merge: Partial; } | { [K in keyof T]?: Spec; };