import { ImmerScope, ImmerState, Drafted, AnyObject, ImmerBaseState, AnyArray, ProxyType, MapState, SetState } from "./internal";
interface ES5BaseState extends ImmerBaseState {
    finalizing: boolean;
    assigned: {
        [key: string]: any;
    };
    parent?: ImmerState;
    revoked: boolean;
}
export interface ES5ObjectState extends ES5BaseState {
    type: ProxyType.ES5Object;
    draft: Drafted<AnyObject, ES5ObjectState>;
    base: AnyObject;
    copy: AnyObject | null;
}
export interface ES5ArrayState extends ES5BaseState {
    type: ProxyType.ES5Array;
    draft: Drafted<AnyObject, ES5ArrayState>;
    base: AnyArray;
    copy: AnyArray | null;
}
declare type ES5State = ES5ArrayState | ES5ObjectState;
export declare function willFinalizeES5(scope: ImmerScope, result: any, isReplaced: boolean): void;
export declare function createES5Proxy<T>(base: T, parent?: ImmerState): Drafted<T, ES5ObjectState | ES5ArrayState>;
export declare function markChangedES5(state: ImmerState): void;
export declare function assertUnrevoked(state: ES5State | MapState | SetState): void;
export {};
//# sourceMappingURL=es5.d.ts.map