type Decoy<T extends object> = T;
/**
 * Create a new Decoy
 *
 * @export
 * @template T
 * @param {T} target
 * @param {boolean} [onlyLastKeyMutation]
 * @return {*}  {Decoy<T>}
 */
declare function create<T extends object = object>(target: T, onlyLastKeyMutation?: boolean): Decoy<T>;
/**
 * Calculate the checksum of given Decoy
 *
 * @export
 * @param {Decoy<object>} proxy
 * @return {*}  {string}
 */
declare function checksum(proxy: Decoy<object>): string;
declare function isDecoy<T extends object = object>(input: any): input is Decoy<T>;
/**
 * Purge a Decoy and its linked Decoys
 *
 * @export
 * @template T
 * @param {Decoy<T>} decoy
 * @return {*}  {Promise<T>}
 */
declare function purge<T extends object = object>(decoy: Decoy<T>): Promise<T>;
/**
 * Commit the mutations to the decoyed object
 *
 * @export
 * @template T
 * @param {Decoy<T>} decoy
 * @param {...Array<keyof T>} keys
 * @return {*}  {Promise<T>}
 */
declare function commit<T extends object = object>(decoy: Decoy<T>, ...keys: Array<keyof T>): Promise<T>;
/**
 * Roll back the mutations on the Decoy
 *
 * @export
 * @template T
 * @param {Decoy<T>} decoy
 * @param {...Array<keyof T>} keys
 * @return {*}  {Promise<T>}
 */
declare function rollback<T extends object = object>(decoy: Decoy<T>, ...keys: Array<keyof T>): Promise<T>;
/**
 * Check whether the Decoy has mutations
 *
 * @export
 * @template T
 * @param {Decoy<T>} decoy
 * @param {...Array<keyof T>} keys
 * @return {*}  {boolean}
 */
declare function hasMutations<T extends object = object>(decoy: Decoy<T>, ...keys: Array<keyof T>): boolean;

export { type Decoy, checksum, commit, create, hasMutations, isDecoy, purge, rollback };
