import { List, Map } from 'immutable'; export interface Object { [key: string]: unknown; } export declare type ImmutableWrapper = T extends any[] ? List> : T extends () => {} ? () => ImmutableWrapper> : Immutable; interface Immutable extends Map> { } export declare const freezeCollection: (collection: T[]) => List; export declare const freezeObject: (source: T) => Immutable; export declare const freeze: (source: any) => any; export declare function change(source: Immutable, path: P | [P], value: V): Immutable; export declare function update(source: Immutable, path: P | [P], fn: (value: V) => V): Immutable; export interface ChangeTracking { [key: string]: unknown; } export declare class Model { private _changes; private _changeStack; constructor(original: T); readonly current: Immutable; readonly modified: boolean; readonly pristine: boolean; change

(path: P | [P], value: V): Immutable; decrement

(path: P | [P]): Immutable; increment

(path: P | [P]): Immutable; } export {};