axios-ex
Version:
A integration solution of axios for large enterprise projects
132 lines (118 loc) • 3.84 kB
TypeScript
import type { AxiosError } from 'axios';
import type { AxiosInstance } from 'axios';
import type { AxiosRequestConfig } from 'axios';
import type { AxiosResponse } from 'axios';
import type { CancelToken } from 'axios';
import type { CancelTokenSource } from 'axios';
/**
* AxiosExtend class
*
* @return Promise
*/
declare class AxiosExtend {
axiosInstance: AxiosInstance;
waiting: WaitingList;
retries: number;
unique: AxiosExtendConfig['unique'];
orderly: AxiosExtendConfig['orderly'];
onCancel: AxiosExtendConfig['onCancel'] | null;
constructor({ orderly, unique, retries, onCancel, ...defaultOptions }: AxiosExtendConfig);
/**
* Initialization
*/
init(defaultOptions: AxiosExtendConfig): void;
/**
* Create request
*/
create<T = any, R = AxiosResponse<T>, D = any>(config: AxiosExtendRequestOptions<D>): Promise<R>;
/**
* Drop all un-need requests
*
* @param key - the key of waiting line, usually to be the request url
*/
clear(key?: string): void;
/**
* Waiting to resolve the item before this request
*
* @param key - the key of waiting line, usually to be the request url
* @param promiseKey - the unique promise key
* @returns - Promise<void>
*/
private wait;
/**
* set item to waiting list
*
* @param key - the key of waiting line, usually to be the request url
* @param item - waiting object
*/
private add;
}
export { AxiosExtend }
export default AxiosExtend;
export declare interface AxiosExtendConfig<D = any> extends AxiosRequestConfig<D> {
unique?: boolean;
retries?: number;
orderly?: boolean;
shouldResetTimeout?: boolean;
retryCondition?(): boolean;
retryDelay?(retryNumber: number, error: any): number;
setHeaders?(instance: AxiosInstance): void;
onRequest?(config: AxiosRequestConfig, requestOptions: AxiosExtendRequestOptions): AxiosRequestConfig | Promise<AxiosRequestConfig>;
onRequestError?(error: any): void;
onResponse?(res: AxiosResponse<any>, requestOptions: AxiosExtendRequestOptions): AxiosResponse<any> | Promise<AxiosResponse<any>>;
onResponseError?(error: any): void;
onError?(error: any): void;
onCancel?(error: any): void;
}
export declare interface AxiosExtendCurrentStateType {
lastRequestTime: number;
retryCount: number;
}
export declare interface AxiosExtendRequestOptions<D = any> extends AxiosRequestConfig<D> {
['axios-extend']?: any;
unique?: boolean;
orderly?: boolean;
requestOptions?: AxiosExtendRequestOptions;
cancelToken?: CancelToken;
type?: string;
error?: boolean;
}
/**
* @param retryNumber - default: 0
* @return delay milliseconds
*/
export declare function exponentialDelay(retryNumber?: number): number;
/**
* @param error - Error
* @return boolean
*/
export declare function isIdempotentRequestError(error: any): boolean;
/**
* @param error - Error
* @return boolean
*/
export declare function isNetworkError(error: AxiosError): boolean;
/**
* @param error - Error
* @return boolean
*/
export declare function isNetworkOrIdempotentRequestError(error: AxiosError): boolean;
/**
* @param error - Error
* @return boolean
*/
export declare function isRetryableError(error: AxiosError): boolean;
/**
* @param error - Error
* @return boolean
*/
export declare function isSafeRequestError(error: any): boolean;
export declare interface WaitingItem {
promiseKey: symbol;
url: string;
promise: Promise<any>;
source: CancelTokenSource;
abortController?: AbortController;
}
export declare type WaitingList = Record<string, WaitingItem[]>;
export { }