|
|
|
|
@ -2,14 +2,39 @@ import type { AxiosInstance, AxiosResponse } from 'axios';
|
|
|
|
|
|
|
|
|
|
import type { RequestClientConfig, RequestClientOptions } from './types';
|
|
|
|
|
|
|
|
|
|
import { bindMethods, merge } from '@vben/utils';
|
|
|
|
|
import { bindMethods, isString, merge } from '@vben/utils';
|
|
|
|
|
|
|
|
|
|
import axios from 'axios';
|
|
|
|
|
import qs from 'qs';
|
|
|
|
|
|
|
|
|
|
import { FileDownloader } from './modules/downloader';
|
|
|
|
|
import { InterceptorManager } from './modules/interceptor';
|
|
|
|
|
import { FileUploader } from './modules/uploader';
|
|
|
|
|
|
|
|
|
|
function getParamsSerializer(
|
|
|
|
|
paramsSerializer: RequestClientOptions['paramsSerializer'],
|
|
|
|
|
) {
|
|
|
|
|
if (isString(paramsSerializer)) {
|
|
|
|
|
switch (paramsSerializer) {
|
|
|
|
|
case 'brackets': {
|
|
|
|
|
return (params: any) =>
|
|
|
|
|
qs.stringify(params, { arrayFormat: 'brackets' });
|
|
|
|
|
}
|
|
|
|
|
case 'comma': {
|
|
|
|
|
return (params: any) => qs.stringify(params, { arrayFormat: 'comma' });
|
|
|
|
|
}
|
|
|
|
|
case 'indices': {
|
|
|
|
|
return (params: any) =>
|
|
|
|
|
qs.stringify(params, { arrayFormat: 'indices' });
|
|
|
|
|
}
|
|
|
|
|
case 'repeat': {
|
|
|
|
|
return (params: any) => qs.stringify(params, { arrayFormat: 'repeat' });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return paramsSerializer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class RequestClient {
|
|
|
|
|
public addRequestInterceptor: InterceptorManager['addRequestInterceptor'];
|
|
|
|
|
|
|
|
|
|
@ -39,6 +64,9 @@ class RequestClient {
|
|
|
|
|
};
|
|
|
|
|
const { ...axiosConfig } = options;
|
|
|
|
|
const requestConfig = merge(axiosConfig, defaultConfig);
|
|
|
|
|
requestConfig.paramsSerializer = getParamsSerializer(
|
|
|
|
|
requestConfig.paramsSerializer,
|
|
|
|
|
);
|
|
|
|
|
this.instance = axios.create(requestConfig);
|
|
|
|
|
|
|
|
|
|
bindMethods(this);
|
|
|
|
|
@ -108,6 +136,9 @@ class RequestClient {
|
|
|
|
|
const response: AxiosResponse<T> = await this.instance({
|
|
|
|
|
url,
|
|
|
|
|
...config,
|
|
|
|
|
...(config.paramsSerializer
|
|
|
|
|
? { paramsSerializer: getParamsSerializer(config.paramsSerializer) }
|
|
|
|
|
: {}),
|
|
|
|
|
});
|
|
|
|
|
return response as T;
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
|