2023-03-28 21:32:54 +08:00
|
|
|
import { isUndefined, isPlainObject } from '../helpers/isTypes';
|
|
|
|
import { deepMerge } from '../helpers/deepMerge';
|
2023-03-23 20:09:00 +08:00
|
|
|
import { AxiosRequestConfig } from './Axios';
|
|
|
|
|
|
|
|
type AxiosRequestConfigKey = keyof AxiosRequestConfig;
|
|
|
|
|
|
|
|
const onlyFromConfig2Keys: AxiosRequestConfigKey[] = [
|
|
|
|
'url',
|
|
|
|
'method',
|
|
|
|
'data',
|
|
|
|
'upload',
|
|
|
|
'download',
|
|
|
|
];
|
|
|
|
const priorityFromConfig2Keys: AxiosRequestConfigKey[] = [
|
|
|
|
'adapter',
|
|
|
|
'baseURL',
|
|
|
|
'paramsSerializer',
|
|
|
|
'transformRequest',
|
|
|
|
'transformResponse',
|
|
|
|
'errorHandler',
|
|
|
|
'cancelToken',
|
|
|
|
'dataType',
|
|
|
|
'responseType',
|
|
|
|
'timeout',
|
|
|
|
'enableHttp2',
|
|
|
|
'enableQuic',
|
|
|
|
'enableCache',
|
|
|
|
'sslVerify',
|
|
|
|
'validateStatus',
|
|
|
|
'onUploadProgress',
|
|
|
|
'onDownloadProgress',
|
|
|
|
];
|
|
|
|
const deepMergeConfigKeys: AxiosRequestConfigKey[] = ['headers', 'params'];
|
|
|
|
|
|
|
|
export function mergeConfig(
|
|
|
|
config1: AxiosRequestConfig = {},
|
|
|
|
config2: AxiosRequestConfig = {},
|
|
|
|
): AxiosRequestConfig {
|
|
|
|
const config: AxiosRequestConfig = {};
|
|
|
|
|
|
|
|
for (const key of onlyFromConfig2Keys) {
|
|
|
|
const value = config2[key];
|
|
|
|
|
|
|
|
if (!isUndefined(value)) {
|
|
|
|
config[key] = value as any;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (const key of priorityFromConfig2Keys) {
|
|
|
|
const value1 = config1[key];
|
|
|
|
const value2 = config2[key];
|
|
|
|
|
|
|
|
if (!isUndefined(value2)) {
|
|
|
|
config[key] = value2 as any;
|
|
|
|
} else if (!isUndefined(value1)) {
|
|
|
|
config[key] = value1 as any;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (const key of deepMergeConfigKeys) {
|
|
|
|
const value1 = config1[key];
|
|
|
|
const value2 = config2[key];
|
|
|
|
|
|
|
|
if (isPlainObject(value2)) {
|
|
|
|
config[key] = deepMerge(value1 ?? {}, value2) as any;
|
|
|
|
} else if (isPlainObject(value1)) {
|
|
|
|
config[key] = deepMerge(value1) as any;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return config;
|
|
|
|
}
|