import { AllArguments } from "./Arguments"; declare type FunctionSubstituteWithOverloads = TFunc extends { (...args: infer A1): infer R1; (...args: infer A2): infer R2; (...args: infer A3): infer R3; (...args: infer A4): infer R4; (...args: infer A5): infer R5; } ? FunctionHandler & FunctionHandler & FunctionHandler & FunctionHandler & FunctionHandler : TFunc extends { (...args: infer A1): infer R1; (...args: infer A2): infer R2; (...args: infer A3): infer R3; (...args: infer A4): infer R4; } ? FunctionHandler & FunctionHandler & FunctionHandler & FunctionHandler : TFunc extends { (...args: infer A1): infer R1; (...args: infer A2): infer R2; (...args: infer A3): infer R3; } ? FunctionHandler & FunctionHandler & FunctionHandler : TFunc extends { (...args: infer A1): infer R1; (...args: infer A2): infer R2; } ? FunctionHandler & FunctionHandler : TFunc extends { (...args: infer A1): infer R1; } ? FunctionHandler : never; declare type Equals = (() => T extends A ? 1 : 2) extends (() => T extends B ? 1 : 2) ? true : false; declare type FunctionHandler = Equals extends true ? {} : Terminating extends true ? TerminatingFunction : FunctionSubstitute; export declare type FunctionSubstitute = ((...args: TArguments) => (TReturnType & MockObjectMixin)) & ((allArguments: AllArguments) => (TReturnType & MockObjectMixin)); export declare type NoArgumentFunctionSubstitute = (() => (TReturnType & NoArgumentMockObjectMixin)); export declare type PropertySubstitute = (TReturnType & Partial>); declare type OneArgumentRequiredFunction = (requiredInput: TArgs, ...restInputs: TArgs[]) => TReturnType; declare type MockObjectPromise = TReturnType extends Promise ? { resolves: OneArgumentRequiredFunction; rejects: OneArgumentRequiredFunction; } : {}; declare type BaseMockObjectMixin = MockObjectPromise & { returns: OneArgumentRequiredFunction; throws: OneArgumentRequiredFunction; }; declare type NoArgumentMockObjectMixin = BaseMockObjectMixin & { mimicks: OneArgumentRequiredFunction<() => TReturnType, void>; }; declare type MockObjectMixin = BaseMockObjectMixin & { mimicks: OneArgumentRequiredFunction<(...args: TArguments) => TReturnType, void>; }; export declare type ObjectSubstitute = ObjectSubstituteTransformation & { received(amount?: number): TerminatingObject; didNotReceive(): TerminatingObject; mimick(instance: T): void; }; declare type TerminatingFunction = ((...args: TArguments) => void) & ((arg: AllArguments) => void); declare type TerminatingObject = { [P in keyof T]: T[P] extends (...args: infer F) => any ? F extends [] ? () => void : FunctionSubstituteWithOverloads : T[P]; }; declare type ObjectSubstituteTransformation = { [P in keyof T]: T[P] extends (...args: infer F) => infer R ? F extends [] ? NoArgumentFunctionSubstitute : FunctionSubstituteWithOverloads : PropertySubstitute; }; declare type Omit = Pick>; export declare type OmitProxyMethods = Omit; export declare type DisabledSubstituteObject = T extends ObjectSubstitute, infer K> ? K : never; export {};