chore: lazy load request helpers

This commit is contained in:
2026-06-12 18:07:53 +08:00
parent e6cf7efc59
commit 180167687f
@@ -6,10 +6,11 @@ import { bindMethods, isString, merge } from '@vben/utils';
import axios from 'axios';
import { FileDownloader } from './modules/downloader';
import { InterceptorManager } from './modules/interceptor';
import { SSE } from './modules/sse';
import { FileUploader } from './modules/uploader';
import type { FileDownloader } from './modules/downloader';
import type { SSE } from './modules/sse';
import type { FileUploader } from './modules/uploader';
function stringifyQuery(
params: Record<string, any>,
@@ -74,18 +75,13 @@ class RequestClient {
public addRequestInterceptor: InterceptorManager['addRequestInterceptor'];
public addResponseInterceptor: InterceptorManager['addResponseInterceptor'];
public download: FileDownloader['download'];
public readonly instance: AxiosInstance;
// 是否正在刷新token
public isRefreshing = false;
public postSSE: SSE['postSSE'];
// 刷新token队列
public refreshTokenQueue: ((token: string) => void)[] = [];
// SSE 401 时用于刷新 token 的回调
public refreshToken?: () => Promise<string>;
public requestSSE: SSE['requestSSE'];
public upload: FileUploader['upload'];
/**
* 构造函数,用于创建Axios实例
@@ -117,16 +113,6 @@ class RequestClient {
this.addResponseInterceptor =
interceptorManager.addResponseInterceptor.bind(interceptorManager);
// 实例化文件上传器
const fileUploader = new FileUploader(this);
this.upload = fileUploader.upload.bind(fileUploader);
// 实例化文件下载器
const fileDownloader = new FileDownloader(this);
this.download = fileDownloader.download.bind(fileDownloader);
// 实例化SSE模块
const sse = new SSE(this);
this.postSSE = sse.postSSE.bind(sse);
this.requestSSE = sse.requestSSE.bind(sse);
}
/**
@@ -153,6 +139,14 @@ class RequestClient {
return this.instance.defaults.baseURL;
}
public async download<T = Blob>(
url: string,
config?: Parameters<FileDownloader['download']>[1],
): Promise<T> {
const { FileDownloader } = await import('./modules/downloader');
return new FileDownloader(this).download<T>(url, config);
}
/**
* POST请求方法
*/
@@ -186,6 +180,15 @@ class RequestClient {
return this.request<T>(url, { ...config, data, method: 'PATCH' });
}
public async postSSE(
url: string,
data?: any,
requestOptions?: Parameters<SSE['postSSE']>[2],
) {
const { SSE } = await import('./modules/sse');
return new SSE(this).postSSE(url, data, requestOptions);
}
/**
* 通用的请求方法
*/
@@ -206,6 +209,24 @@ class RequestClient {
throw error.response ? error.response.data : error;
}
}
public async requestSSE(
url: string,
data?: any,
requestOptions?: Parameters<SSE['requestSSE']>[2],
) {
const { SSE } = await import('./modules/sse');
return new SSE(this).requestSSE(url, data, requestOptions);
}
public async upload<T = any>(
url: string,
data: Parameters<FileUploader['upload']>[1],
config?: RequestClientConfig,
): Promise<T> {
const { FileUploader } = await import('./modules/uploader');
return new FileUploader(this).upload<T>(url, data, config);
}
}
export { RequestClient };