import { AxiosInstance } from 'axios';
import { AxiosRequestConfig } from 'axios';
import { AxiosResponse } from 'axios';
import { ComputedRef } from '@vue/runtime-core';
import { PromiseResultFactory } from 'vue-composable';
import { Ref } from '@vue/runtime-core';

declare interface AxiosReturn<TData> extends MakeAxiosReturn<TData> {
}

export declare function makeAxios<T>(client: AxiosInstance, throwException?: boolean): MakeAxiosReturn<T>;

declare interface MakeAxiosReturn<TData> extends PromiseResultFactory<Promise<AxiosResponse<TData>>, [
AxiosRequestConfig | string
]> {
    readonly client: AxiosInstance;
    readonly data: ComputedRef<TData | null>;
    readonly status: Ref<number | null>;
    readonly statusText: Ref<string | null>;
    cancel: (message?: string) => void;
    readonly isCancelled: Ref<boolean>;
    readonly cancelledMessage: Ref<string | null | undefined>;
}

export declare function useAxios<TData = any>(throwException?: boolean): AxiosReturn<TData>;

export declare function useAxios<TData = any>(url: string, config?: AxiosRequestConfig, throwException?: boolean): AxiosReturn<TData>;

export declare function useAxios<TData = any>(url: string, throwException?: boolean): AxiosReturn<TData>;

export declare function useAxios<TData = any>(config?: AxiosRequestConfig, throwException?: boolean): AxiosReturn<TData>;

export { }
