axios-miniprogram/src/core/createInstance.ts

77 lines
1.8 KiB
TypeScript
Raw Normal View History

import { combineURL } from '../helpers/combineURL';
2023-04-27 10:54:27 +08:00
import { transformURL } from '../helpers/transformURL';
import Axios, {
AxiosRequest,
AxiosRequestConfig,
AxiosRequestHeaders,
} from './Axios';
import { mergeConfig } from './mergeConfig';
/**
* axios
*/
export interface AxiosInstanceDefaults extends AxiosRequestConfig {
/**
*
*/
headers: Required<AxiosRequestHeaders>;
}
/**
* axios
*/
export interface AxiosInstance extends AxiosRequest, Axios {
/**
*
*/
defaults: AxiosInstanceDefaults;
/**
* URI
*
2023-04-26 21:03:00 +08:00
* @param config
*/
getUri(config: AxiosRequestConfig): string;
/**
2023-04-26 21:03:00 +08:00
*
*
* @param config
*/
create(config?: AxiosRequestConfig): AxiosInstance;
/**
*
*
* @param config
*/
extend(config: AxiosRequestConfig): AxiosInstance;
/**
*
*
* @param config
*
* @deprecated 使 extend fork
*/
fork(config: AxiosRequestConfig): AxiosInstance;
}
2023-04-27 21:25:47 +08:00
export function createInstance(defaults: AxiosRequestConfig, parent?: Axios) {
const context = new Axios(defaults, parent);
const instance = context.request as AxiosInstance;
instance.getUri = function getUri(config) {
2023-04-27 21:25:47 +08:00
return transformURL(mergeConfig(defaults, config));
};
instance.create = function create(config) {
2023-04-27 21:25:47 +08:00
return createInstance(mergeConfig(defaults, config));
};
instance.extend = function extend(config) {
2023-04-27 21:25:47 +08:00
config.baseURL = combineURL(defaults.baseURL, config.baseURL);
return createInstance(mergeConfig(defaults, config), context);
};
instance.fork = instance.extend;
Object.assign(instance, context);
Object.setPrototypeOf(instance, Axios.prototype);
return instance;
}