axios-miniprogram/src/axios.ts

60 lines
1.7 KiB
TypeScript
Raw Normal View History

2021-05-21 14:26:22 +08:00
import { AxiosAdapter, createAdapter, AxiosPlatform } from './core/adapter';
import Axios, {
AxiosConstructor,
AxiosRequestConfig,
AxiosResponse,
} from './core/Axios';
import { CancelToken, CancelTokenConstructor, isCancel } from './core/cancel';
import { mergeConfig } from './core/mergeConfig';
2021-05-25 23:17:29 +08:00
import { isString } from './helpers/is';
2021-05-11 10:22:44 +08:00
import defaults from './defaults';
2021-05-21 14:26:22 +08:00
export interface AxiosInstance extends Axios {
<TData = any>(config: AxiosRequestConfig): Promise<AxiosResponse<TData>>;
<TData = any>(url: string, config?: AxiosRequestConfig): Promise<
AxiosResponse<TData>
>;
}
export interface AxiosStatic extends AxiosInstance {
Axios: AxiosConstructor;
CancelToken: CancelTokenConstructor;
create(defaults?: AxiosRequestConfig): AxiosInstance;
createAdapter(platform: AxiosPlatform): AxiosAdapter | undefined;
isCancel(value: any): boolean;
}
2021-05-11 10:22:44 +08:00
function createInstance(defaults: AxiosRequestConfig): AxiosInstance {
const instance = new Axios(defaults);
2021-05-21 14:26:22 +08:00
function axios<TData = any>(
2021-05-11 10:22:44 +08:00
url: AxiosRequestConfig | string,
2021-05-21 14:26:22 +08:00
config?: AxiosRequestConfig,
): Promise<AxiosResponse<TData>> {
if (isString(url)) {
config = Object.assign({}, config, { url });
} else {
2021-05-11 10:22:44 +08:00
config = url;
}
return instance.request(config);
}
Object.assign(axios, instance);
Object.setPrototypeOf(axios, Object.getPrototypeOf(instance));
return axios as AxiosInstance;
}
2021-05-21 14:26:22 +08:00
const axios = createInstance(defaults) as AxiosStatic;
2021-05-11 10:22:44 +08:00
axios.Axios = Axios;
axios.CancelToken = CancelToken;
2021-05-21 14:26:22 +08:00
axios.create = function create(defaults: AxiosRequestConfig): AxiosInstance {
return createInstance(mergeConfig(axios.defaults, defaults));
};
axios.createAdapter = createAdapter;
2021-05-11 10:22:44 +08:00
axios.isCancel = isCancel;
export default axios;