export declare let callOriginal: symbol; export interface PatchOptions { singleShot?: boolean; } export type GenericPatchHandler = (args: any[], ret?: any) => any; export interface Patch = Record, Property extends keyof Object = keyof Object, Target extends Object[Property] = Object[Property]> { object: Object; property: Property; original: Target; patchedFunction: Target; hasUnpatched: boolean; handler: ((args: Parameters, ret: ReturnType) => any) | ((args: Parameters) => any); unpatch(): void; } export declare function beforePatch, Property extends keyof Object, Target extends Object[Property]>(object: Object, property: Property, handler: (args: Parameters) => void, options?: PatchOptions): Patch; export declare function afterPatch, Property extends keyof Object, Target extends Object[Property]>(object: Object, property: Property, handler: (args: Parameters, ret: ReturnType) => ReturnType, options?: PatchOptions): Patch; export declare function replacePatch, Property extends keyof Object, Target extends Object[Property]>(object: Object, property: Property, handler: (args: Parameters) => ReturnType, options?: PatchOptions): Patch;