import { ImmerState, Patch, ImmerScope, Drafted, AnyObject, ImmerBaseState, AnyMap, AnySet, ProxyType } from "../internal"; /** Plugin utilities */ declare const plugins: { Patches?: { generatePatches_(state: ImmerState, basePath: PatchPath, patches: Patch[], inversePatches: Patch[]): void; generateReplacementPatches_(rootState: ImmerState, replacement: any, patches: Patch[], inversePatches: Patch[]): void; applyPatches_(draft: T, patches: Patch[]): T; }; ES5?: { willFinalizeES5_(scope: ImmerScope, result: any, isReplaced: boolean): void; createES5Proxy_(base: T, parent?: ImmerState): Drafted; hasChanges_(state: ES5ArrayState | ES5ObjectState): boolean; }; MapSet?: { proxyMap_(target: T, parent?: ImmerState): T; proxySet_(target: T, parent?: ImmerState): T; }; }; declare type Plugins = typeof plugins; export declare function getPlugin(pluginKey: K): Exclude; export declare function loadPlugin(pluginKey: K, implementation: Plugins[K]): void; /** ES5 Plugin */ interface ES5BaseState extends ImmerBaseState { assigned_: { [key: string]: any; }; parent_?: ImmerState; revoked_: boolean; } export interface ES5ObjectState extends ES5BaseState { type_: ProxyType.ES5Object; draft_: Drafted; base_: AnyObject; copy_: AnyObject | null; } export interface ES5ArrayState extends ES5BaseState { type_: ProxyType.ES5Array; draft_: Drafted; base_: any; copy_: any; } /** Map / Set plugin */ export interface MapState extends ImmerBaseState { type_: ProxyType.Map; copy_: AnyMap | undefined; assigned_: Map | undefined; base_: AnyMap; revoked_: boolean; draft_: Drafted; } export interface SetState extends ImmerBaseState { type_: ProxyType.Set; copy_: AnySet | undefined; base_: AnySet; drafts_: Map; revoked_: boolean; draft_: Drafted; } /** Patches plugin */ export declare type PatchPath = (string | number)[]; export {}; //# sourceMappingURL=plugins.d.ts.map