export declare function invariant(condition: boolean, message: () => string): void; export declare class Context { private commands; constructor(); get isEquals(): (x: any, y: any) => boolean; set isEquals(value: (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: ReadonlyArray; } | { $unshift: ReadonlyArray; } | { $splice: ReadonlyArray<[number, number?] | [number, number, ...T[]]>; } | { [index: string]: Spec; }; declare type MapSpec> = { $add: ReadonlyArray<[K, V]>; } | { $remove: ReadonlyArray; } | { [key: string]: Spec; }; declare type SetSpec = { $add: ReadonlyArray; } | { $remove: ReadonlyArray; }; declare type ObjectSpec> = { $toggle: ReadonlyArray; } | { $unset: ReadonlyArray; } | { $merge: Partial; } | { [K in keyof T]?: Spec; };