import { IOnAborted } from '../for-promise/wrap-promise-with-abort-signal';
import { IGenericFunction } from '../../types/generic-function.type';
export declare type IWrapFunctionWithAbortSignalReturnedFunctionReturn<GFunction extends IGenericFunction, GOnAborted extends IOnAborted> = ReturnType<GFunction> | ReturnType<GOnAborted>;
export interface IWrapFunctionWithAbortSignalReturnedFunction<GFunction extends IGenericFunction, GOnAborted extends IOnAborted> {
    (...args: Parameters<GFunction>): IWrapFunctionWithAbortSignalReturnedFunctionReturn<GFunction, GOnAborted>;
}
/**
 * Wraps a function with an AbortSignal:
 * - returns a function with the same arguments and the same return type (+ OnAborted type)
 * - when called, if the signal is aborted, calls and returns 'onAborted', else, calls and returns 'callback'
 */
export declare function wrapFunctionWithAbortSignal<// generics
GFunction extends IGenericFunction, GOnAborted extends IOnAborted>(callback: GFunction, signal: AbortSignal, onAborted: GOnAborted): IWrapFunctionWithAbortSignalReturnedFunction<GFunction, GOnAborted>;
/**
 * Wraps a function with an AbortSignal:
 * - when called, throws if the signal is aborted
 */
export declare function wrapFunctionWithAbortSignalAndThrow<GFunction extends IGenericFunction>(callback: GFunction, signal: AbortSignal): GFunction;
export declare function wrapFunctionWithOptionalAbortSignalAndThrow<GFunction extends IGenericFunction>(callback: GFunction, signal: AbortSignal | null | undefined): GFunction;
