@minson1994/ms-utils 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +696 -0
  3. package/dist/api/ApiConfig.d.ts +206 -0
  4. package/dist/api/ApiConfig.d.ts.map +1 -0
  5. package/dist/api/ApiError.d.ts +30 -0
  6. package/dist/api/ApiError.d.ts.map +1 -0
  7. package/dist/api/ApiRequest.d.ts +87 -0
  8. package/dist/api/ApiRequest.d.ts.map +1 -0
  9. package/dist/api/ApiResponse.d.ts +15 -0
  10. package/dist/api/ApiResponse.d.ts.map +1 -0
  11. package/dist/api/adapter/AjaxHttpAdapter.d.ts +22 -0
  12. package/dist/api/adapter/AjaxHttpAdapter.d.ts.map +1 -0
  13. package/dist/api/adapter/ApiAdapter.d.ts +56 -0
  14. package/dist/api/adapter/ApiAdapter.d.ts.map +1 -0
  15. package/dist/api/adapter/AxiosHttpAdapter.d.ts +43 -0
  16. package/dist/api/adapter/AxiosHttpAdapter.d.ts.map +1 -0
  17. package/dist/api/adapter/FetchHttpAdapter.d.ts +50 -0
  18. package/dist/api/adapter/FetchHttpAdapter.d.ts.map +1 -0
  19. package/dist/api/adapter/WxHttpAdapter.d.ts +33 -0
  20. package/dist/api/adapter/WxHttpAdapter.d.ts.map +1 -0
  21. package/dist/api/adapter/XhrHttpAdapter.d.ts +46 -0
  22. package/dist/api/adapter/XhrHttpAdapter.d.ts.map +1 -0
  23. package/dist/api/index.d.ts +22 -0
  24. package/dist/api/index.d.ts.map +1 -0
  25. package/dist/api/interceptor/ApiCacheInterceptor.d.ts +29 -0
  26. package/dist/api/interceptor/ApiCacheInterceptor.d.ts.map +1 -0
  27. package/dist/api/interceptor/ApiInterceptor.d.ts +18 -0
  28. package/dist/api/interceptor/ApiInterceptor.d.ts.map +1 -0
  29. package/dist/api/interceptor/ApiStatusInterceptor.d.ts +49 -0
  30. package/dist/api/interceptor/ApiStatusInterceptor.d.ts.map +1 -0
  31. package/dist/api/interceptor/ApiUIInterceptor.d.ts +37 -0
  32. package/dist/api/interceptor/ApiUIInterceptor.d.ts.map +1 -0
  33. package/dist/axios.cjs +151 -0
  34. package/dist/axios.d.ts +6 -0
  35. package/dist/axios.d.ts.map +1 -0
  36. package/dist/axios.js +58 -0
  37. package/dist/browser.cjs +102 -0
  38. package/dist/browser.d.ts +5 -0
  39. package/dist/browser.d.ts.map +1 -0
  40. package/dist/browser.js +75 -0
  41. package/dist/chunk-PV2X54HI.js +75 -0
  42. package/dist/index.cjs +1880 -0
  43. package/dist/index.d.ts +11 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +1753 -0
  46. package/dist/utils/AlgorithmUtils.d.ts +98 -0
  47. package/dist/utils/AlgorithmUtils.d.ts.map +1 -0
  48. package/dist/utils/Concurrency.d.ts +28 -0
  49. package/dist/utils/Concurrency.d.ts.map +1 -0
  50. package/dist/utils/CookieUtils.d.ts +38 -0
  51. package/dist/utils/CookieUtils.d.ts.map +1 -0
  52. package/dist/utils/Hook.d.ts +50 -0
  53. package/dist/utils/Hook.d.ts.map +1 -0
  54. package/dist/utils/TaskQueue.d.ts +159 -0
  55. package/dist/utils/TaskQueue.d.ts.map +1 -0
  56. package/dist/utils/TimeUtils.d.ts +82 -0
  57. package/dist/utils/TimeUtils.d.ts.map +1 -0
  58. package/dist/utils/ValidateUtils.d.ts +139 -0
  59. package/dist/utils/ValidateUtils.d.ts.map +1 -0
  60. package/dist/wx.cjs +169 -0
  61. package/dist/wx.d.ts +6 -0
  62. package/dist/wx.d.ts.map +1 -0
  63. package/dist/wx.js +76 -0
  64. package/package.json +76 -0
@@ -0,0 +1,206 @@
1
+ /**
2
+ * HTTP 请求方法。
3
+ */
4
+ export type ApiMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS" | (string & {});
5
+ /**
6
+ * HTTP 请求头。
7
+ */
8
+ export type ApiHeaders = Record<string, string>;
9
+ /**
10
+ * 取消请求函数。
11
+ */
12
+ export type ApiCancel = (message?: string) => void;
13
+ /**
14
+ * 取消请求注册回调。
15
+ */
16
+ export type ApiCancelHandler = (cancel: ApiCancel) => void;
17
+ /**
18
+ * HTTP 进度信息。
19
+ */
20
+ export interface ApiProgress {
21
+ /** 已传输字节数。 */
22
+ loaded: number;
23
+ /** 总字节数。运行时无法获取时为 undefined。 */
24
+ total?: number;
25
+ /** 是否能计算总量。 */
26
+ lengthComputable: boolean;
27
+ /** 百分比,0 - 100;无法计算总量时为 undefined。 */
28
+ percent?: number;
29
+ /** 原始运行时事件或补充信息。 */
30
+ event?: unknown;
31
+ }
32
+ /**
33
+ * HTTP 进度回调。
34
+ */
35
+ export type ApiProgressHandler = (progress: ApiProgress) => void;
36
+ /**
37
+ * 全局 HTTP 配置项。
38
+ */
39
+ export interface ApiGlobalConfigOptions {
40
+ /** 超时时间,单位秒。 */
41
+ timeout?: number;
42
+ /** 默认请求头。 */
43
+ headers?: ApiHeaders;
44
+ /** 是否携带 Cookie。 */
45
+ withCredentials?: boolean;
46
+ }
47
+ /**
48
+ * 单次 HTTP 请求配置项。
49
+ */
50
+ export interface ApiConfigOptions<TData = unknown> extends ApiGlobalConfigOptions {
51
+ /** 基础地址,通常由 ApiRequest 自动注入。 */
52
+ baseUrl?: string;
53
+ /** 请求路径。 */
54
+ url?: string;
55
+ /** 请求方法。 */
56
+ method?: ApiMethod;
57
+ /** 请求数据。 */
58
+ data?: TData;
59
+ /** 取消请求注册回调。 */
60
+ onCancel?: ApiCancelHandler;
61
+ /** 兼容旧字段:取消请求注册回调。 */
62
+ cancelCallback?: ApiCancelHandler;
63
+ /** 上传进度回调。 */
64
+ onUploadProgress?: ApiProgressHandler;
65
+ /** 下载进度回调。 */
66
+ onDownloadProgress?: ApiProgressHandler;
67
+ /** 是否需要认证。 */
68
+ auth?: boolean;
69
+ /** 是否为上传请求。 */
70
+ isUpload?: boolean;
71
+ /** 是否以 JSON body 发送。 */
72
+ isJsonBody?: boolean;
73
+ /** 是否需要签名。 */
74
+ isSign?: boolean;
75
+ /** 是否显示 loading。 */
76
+ loading?: boolean;
77
+ /** 是否显示错误消息。 */
78
+ showErrorMessage?: boolean;
79
+ /** 是否检查 HTTP 状态码。 */
80
+ checkHttpStatus?: boolean;
81
+ /** 业务失败时是否返回原结果。 */
82
+ backFailResult?: boolean;
83
+ /** 成功时是否只返回业务 data 字段。 */
84
+ backOnlyData?: boolean;
85
+ /** 是否启用缓存。 */
86
+ cache?: boolean;
87
+ }
88
+ /**
89
+ * 可执行 ApiConfig 的请求对象。
90
+ */
91
+ export interface ApiExecutable<TResult = unknown> {
92
+ /**
93
+ * 执行请求配置。
94
+ */
95
+ exec(config: ApiConfig): Promise<TResult>;
96
+ }
97
+ /**
98
+ * 全局 HTTP 配置。
99
+ */
100
+ export declare class ApiGlobalConfig {
101
+ /** 超时时间,单位秒。 */
102
+ timeout: number;
103
+ /** 默认请求头。 */
104
+ headers: ApiHeaders;
105
+ /** 是否携带 Cookie。 */
106
+ withCredentials: boolean;
107
+ constructor(options?: ApiGlobalConfigOptions);
108
+ }
109
+ /**
110
+ * 单次 HTTP 请求配置。
111
+ */
112
+ export declare class ApiConfig<TData = unknown> extends ApiGlobalConfig {
113
+ /** 原始配置项,用于判断调用方是否显式覆盖了默认值。 */
114
+ readonly options: ApiConfigOptions<TData>;
115
+ /** 绑定的 API 请求对象,用于 `request.use(...).emit()` 调用方式。 */
116
+ apiRequest?: ApiExecutable;
117
+ /** 基础地址,由 ApiRequest 根据当前可用 base url 写入。 */
118
+ baseUrl: string;
119
+ /** 请求路径。 */
120
+ url: string;
121
+ /** 请求方法。 */
122
+ method: ApiMethod;
123
+ /** 请求数据。 */
124
+ data: TData | Record<string, never>;
125
+ /** 取消请求注册回调。 */
126
+ onCancel?: ApiCancelHandler;
127
+ /** 兼容旧字段:取消请求注册回调。 */
128
+ cancelCallback?: ApiCancelHandler;
129
+ /** 上传进度回调。 */
130
+ onUploadProgress?: ApiProgressHandler;
131
+ /** 下载进度回调。 */
132
+ onDownloadProgress?: ApiProgressHandler;
133
+ /** 是否需要认证。 */
134
+ auth: boolean;
135
+ /** 是否为上传请求。 */
136
+ isUpload: boolean;
137
+ /** 是否以 JSON body 发送。 */
138
+ isJsonBody: boolean;
139
+ /** 是否需要签名。 */
140
+ isSign: boolean;
141
+ /** 是否显示 loading。 */
142
+ loading: boolean;
143
+ /** 是否显示错误消息。 */
144
+ showErrorMessage: boolean;
145
+ /** 是否检查 HTTP 状态码。 */
146
+ checkHttpStatus: boolean;
147
+ /** 业务失败时是否返回原结果。 */
148
+ backFailResult: boolean;
149
+ /** 成功时是否只返回业务 data 字段。 */
150
+ backOnlyData: boolean;
151
+ /** 是否启用缓存。 */
152
+ cache: boolean;
153
+ constructor(options?: ApiConfigOptions<TData>);
154
+ /** 设置是否需要认证。 */
155
+ useAuth(auth?: boolean): this;
156
+ /** 设置超时时间,单位秒。 */
157
+ useTimeout(timeout: number): this;
158
+ /** 设置请求头。 */
159
+ useHeaders(headers: ApiHeaders): this;
160
+ /** 设置是否携带 Cookie。 */
161
+ useWithCredentials(withCredentials?: boolean): this;
162
+ /** 设置取消请求注册回调。 */
163
+ useCancel(onCancel: ApiCancelHandler): this;
164
+ /** 设置上传进度回调。 */
165
+ useUploadProgress(onUploadProgress: ApiProgressHandler): this;
166
+ /** 设置下载进度回调。 */
167
+ useDownloadProgress(onDownloadProgress: ApiProgressHandler): this;
168
+ /** 同时设置上传和下载进度回调。 */
169
+ useProgress(onProgress: ApiProgressHandler): this;
170
+ /** 设置是否为上传请求。 */
171
+ useUpload(isUpload?: boolean): this;
172
+ /** 设置是否以 JSON body 发送。 */
173
+ useJsonBody(isJsonBody?: boolean): this;
174
+ /** 设置是否需要签名。 */
175
+ useSign(isSign?: boolean): this;
176
+ /** 设置是否显示 loading。 */
177
+ useLoading(loading?: boolean): this;
178
+ /** 设置是否显示错误消息。 */
179
+ useShowErrorMessage(showErrorMessage?: boolean): this;
180
+ /** 设置是否检查 HTTP 状态码。 */
181
+ useCheckHttpStatus(checkHttpStatus?: boolean): this;
182
+ /** 设置业务失败时是否返回原结果。 */
183
+ useBackFailResult(backFailResult?: boolean): this;
184
+ /** 设置成功时是否只返回业务 data 字段。 */
185
+ useBackOnlyData(backOnlyData?: boolean): this;
186
+ /** 设置是否启用缓存。 */
187
+ useCache(cache?: boolean): this;
188
+ /**
189
+ * 使用指定请求对象执行当前配置。
190
+ */
191
+ request<TResult = unknown>(request: ApiExecutable<TResult>): Promise<TResult>;
192
+ /**
193
+ * 使用绑定的请求对象执行当前配置。
194
+ */
195
+ emit<TResult = unknown>(): Promise<TResult>;
196
+ /**
197
+ * exec 是 emit 的语义化别名。
198
+ */
199
+ exec<TResult = unknown>(): Promise<TResult>;
200
+ /**
201
+ * 创建 ApiConfig。
202
+ */
203
+ static use<TData = unknown>(options?: ApiConfigOptions<TData>): ApiConfig<TData>;
204
+ }
205
+ export declare const useApiConfig: typeof ApiConfig.use;
206
+ //# sourceMappingURL=ApiConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiConfig.d.ts","sourceRoot":"","sources":["../../src/api/ApiConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * API 错误类型。
3
+ */
4
+ export declare class ApiError extends Error {
5
+ readonly cause?: unknown | undefined;
6
+ constructor(message: string, cause?: unknown | undefined);
7
+ }
8
+ /**
9
+ * 用户主动取消请求。
10
+ */
11
+ export declare class ApiCancelError extends ApiError {
12
+ constructor(message?: string, cause?: unknown);
13
+ }
14
+ /**
15
+ * 请求超时。
16
+ */
17
+ export declare class ApiTimeoutError extends ApiError {
18
+ constructor(message?: string, cause?: unknown);
19
+ }
20
+ /**
21
+ * 网络或底层适配器请求失败。
22
+ */
23
+ export declare class ApiNetworkError extends ApiError {
24
+ constructor(message?: string, cause?: unknown);
25
+ }
26
+ /**
27
+ * 判断错误是否为取消请求。
28
+ */
29
+ export declare function isApiCancelError(error: unknown): boolean;
30
+ //# sourceMappingURL=ApiError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiError.d.ts","sourceRoot":"","sources":["../../src/api/ApiError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAG3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;gBADxB,OAAO,EAAE,MAAM,EACN,KAAK,CAAC,EAAE,OAAO,YAAA;CAK/B;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,OAAO,SAAU,EAAE,KAAK,CAAC,EAAE,OAAO;CAGjD;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC7B,OAAO,SAAS,EAAE,KAAK,CAAC,EAAE,OAAO;CAGhD;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC7B,OAAO,SAAW,EAAE,KAAK,CAAC,EAAE,OAAO;CAGlD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAaxD"}
@@ -0,0 +1,87 @@
1
+ import { ApiConfig, ApiConfigOptions, ApiGlobalConfig } from "./ApiConfig";
2
+ import type ApiResponse from "./ApiResponse";
3
+ import ApiAdapter from "./adapter/ApiAdapter";
4
+ import ApiInterceptor from "./interceptor/ApiInterceptor";
5
+ import ApiUIInterceptor from "./interceptor/ApiUIInterceptor";
6
+ /**
7
+ * ApiRequest 构造参数。
8
+ */
9
+ export interface ApiRequestOptions {
10
+ /** 单个或多个 base url。 */
11
+ url: string | string[];
12
+ /** 底层请求适配器。不传时浏览器默认 XhrHttpAdapter,其他环境默认 FetchHttpAdapter。 */
13
+ adapter?: ApiAdapter;
14
+ /** 默认全局配置。 */
15
+ config?: ApiGlobalConfig;
16
+ /** 兼容旧字段:默认全局配置。 */
17
+ appConfig?: ApiGlobalConfig;
18
+ /** 响应状态拦截器。 */
19
+ statusInterceptor?: ApiInterceptor;
20
+ /** 缓存拦截器。 */
21
+ cacheInterceptor?: ApiInterceptor;
22
+ /** 自定义业务拦截器。 */
23
+ interceptor?: ApiInterceptor[];
24
+ /** 多 base url 失败重试间隔,单位毫秒。 */
25
+ retryDelay?: number;
26
+ }
27
+ /**
28
+ * HTTP 请求编排器。
29
+ *
30
+ * 负责串联 UI 拦截器、业务拦截器、缓存拦截器、状态拦截器和底层 adapter。
31
+ */
32
+ export default class ApiRequest {
33
+ /** 全局 UI 拦截器,所有 ApiRequest 实例共享。 */
34
+ static apiUIInterceptor: ApiUIInterceptor;
35
+ /** 可用 base url 列表,用于失败后轮询重试。 */
36
+ readonly urls: string[];
37
+ /** 底层请求适配器。 */
38
+ adapter: ApiAdapter;
39
+ /** 默认全局配置。 */
40
+ config: ApiGlobalConfig | undefined;
41
+ /** 自定义业务拦截器。 */
42
+ interceptor: ApiInterceptor[];
43
+ /** 当前使用的 base url 下标。 */
44
+ currentUrlIndex: number;
45
+ /** 响应状态拦截器。 */
46
+ statusInterceptor: ApiInterceptor;
47
+ /** 缓存拦截器。 */
48
+ cacheInterceptor: ApiInterceptor;
49
+ /** 多 base url 失败重试间隔,单位毫秒。 */
50
+ retryDelay: number;
51
+ constructor(options: ApiRequestOptions);
52
+ /**
53
+ * 创建默认适配器。
54
+ *
55
+ * 浏览器环境优先使用 XHR,以支持上传/下载进度;没有 XMLHttpRequest 时使用 fetch。
56
+ */
57
+ static createDefaultAdapter(): ApiAdapter;
58
+ /** 当前 base url。 */
59
+ get uri(): string;
60
+ /** 添加自定义拦截器。 */
61
+ pushInterceptor(interceptor: ApiInterceptor): this;
62
+ /** 执行请求并返回业务结果。 */
63
+ exec<TResult = unknown>(config: ApiConfig): Promise<TResult>;
64
+ /**
65
+ * 执行前置拦截器。
66
+ *
67
+ * 任意拦截器返回非 undefined 数据时,作为请求结果直接返回。
68
+ */
69
+ before(config: ApiConfig): Promise<unknown | void>;
70
+ /** 执行后置拦截器。 */
71
+ after(config: ApiConfig, response: ApiResponse): Promise<void>;
72
+ /**
73
+ * 调用底层 adapter 发起请求。
74
+ *
75
+ * 多 base url 场景下,请求失败会切换到下一个 base url 重试。
76
+ */
77
+ request(config: ApiConfig): Promise<ApiResponse>;
78
+ /** 延迟指定毫秒。 */
79
+ delay(time?: number): Promise<void>;
80
+ /**
81
+ * 创建 ApiConfig。
82
+ */
83
+ use<TData = unknown>(options?: ApiConfigOptions<TData>): ApiConfig<TData>;
84
+ /** 将全局配置合并到单次请求配置。 */
85
+ private applyGlobalConfig;
86
+ }
87
+ //# sourceMappingURL=ApiRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiRequest.d.ts","sourceRoot":"","sources":["../../src/api/ApiRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAC1D,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAO9D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sBAAsB;IACtB,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,cAAc;IACd,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,oBAAoB;IACpB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,eAAe;IACf,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC,aAAa;IACb,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAClC,gBAAgB;IAChB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,oCAAoC;IACpC,MAAM,CAAC,gBAAgB,mBAA0B;IAEjD,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe;IACf,OAAO,EAAE,UAAU,CAAC;IACpB,cAAc;IACd,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,gBAAgB;IAChB,WAAW,EAAE,cAAc,EAAE,CAAM;IACnC,yBAAyB;IACzB,eAAe,SAAK;IACpB,eAAe;IACf,iBAAiB,EAAE,cAAc,CAA8B;IAC/D,aAAa;IACb,gBAAgB,EAAE,cAAc,CAA6B;IAC7D,8BAA8B;IAC9B,UAAU,SAAQ;gBAEN,OAAO,EAAE,iBAAiB;IAYtC;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,IAAI,UAAU;IAKzC,mBAAmB;IACnB,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,gBAAgB;IAChB,eAAe,CAAC,WAAW,EAAE,cAAc,GAAG,IAAI;IAKlD,mBAAmB;IACb,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBlE;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAQxD,eAAe;IACT,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpE;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBtD,cAAc;IACd,KAAK,CAAC,IAAI,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACH,GAAG,CAAC,KAAK,GAAG,OAAO,EACjB,OAAO,GAAE,gBAAgB,CAAC,KAAK,CAAM,GACpC,SAAS,CAAC,KAAK,CAAC;IAMnB,sBAAsB;IACtB,OAAO,CAAC,iBAAiB;CAQ1B"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * HTTP 适配器统一响应结构。
3
+ */
4
+ export default class ApiResponse<TData = unknown> {
5
+ /** HTTP 状态码。 */
6
+ status: number;
7
+ /** 响应数据。 */
8
+ data: TData;
9
+ constructor(
10
+ /** HTTP 状态码。 */
11
+ status: number,
12
+ /** 响应数据。 */
13
+ data: TData);
14
+ }
15
+ //# sourceMappingURL=ApiResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiResponse.d.ts","sourceRoot":"","sources":["../../src/api/ApiResponse.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW,CAAC,KAAK,GAAG,OAAO;IAExC,gBAAgB;IACT,MAAM,EAAE,MAAM;IACrB,YAAY;IACL,IAAI,EAAE,KAAK;;IAHlB,gBAAgB;IACT,MAAM,EAAE,MAAM;IACrB,YAAY;IACL,IAAI,EAAE,KAAK;CAEzB"}
@@ -0,0 +1,22 @@
1
+ import ApiAdapter from "./ApiAdapter";
2
+ import type { ApiConfig } from "../ApiConfig";
3
+ import ApiResponse from "../ApiResponse";
4
+ /**
5
+ * jQuery.ajax 兼容函数类型。
6
+ */
7
+ export interface AjaxAbortLike {
8
+ abort: () => void;
9
+ }
10
+ export type AjaxLike = (config: Record<string, unknown>) => AjaxAbortLike | void;
11
+ /**
12
+ * jQuery.ajax 请求适配器。
13
+ */
14
+ export default class AjaxHttpAdapter extends ApiAdapter {
15
+ private readonly ajax;
16
+ constructor(ajax: AjaxLike);
17
+ /**
18
+ * 将 ApiConfig 转换为 ajax 配置并发起请求。
19
+ */
20
+ request(config: ApiConfig): Promise<ApiResponse>;
21
+ }
22
+ //# sourceMappingURL=AjaxHttpAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AjaxHttpAdapter.d.ts","sourceRoot":"","sources":["../../../src/api/adapter/AjaxHttpAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAAG,CACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,aAAa,GAAG,IAAI,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,QAAQ;IAI3C;;OAEG;IACM,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;CA0C1D"}
@@ -0,0 +1,56 @@
1
+ import type { ApiConfig, ApiProgressHandler } from "../ApiConfig";
2
+ import type ApiResponse from "../ApiResponse";
3
+ /**
4
+ * 上传数据约定。
5
+ */
6
+ export interface UploadLike {
7
+ /** 文件对象或文件内容。 */
8
+ file?: unknown;
9
+ /** 上传字段名,默认 file。 */
10
+ fileName?: string;
11
+ /** 其它表单字段。 */
12
+ [key: string]: unknown;
13
+ }
14
+ /**
15
+ * HTTP 适配器配置。
16
+ */
17
+ export interface ApiAdapterOptions {
18
+ /** 自定义 FormData 创建器,用于非浏览器环境。 */
19
+ formDataFactory?: () => FormData;
20
+ }
21
+ /**
22
+ * HTTP 适配器基类。
23
+ *
24
+ * 不直接绑定 axios、ajax、wx 等具体实现,由子类负责把 ApiConfig 转换为目标平台请求格式。
25
+ */
26
+ export default abstract class ApiAdapter {
27
+ protected readonly options: ApiAdapterOptions;
28
+ constructor(options?: ApiAdapterOptions);
29
+ /**
30
+ * 发起请求。
31
+ *
32
+ * 子类必须实现该方法。
33
+ */
34
+ abstract request(config: ApiConfig): Promise<ApiResponse>;
35
+ /**
36
+ * 触发标准化进度回调。
37
+ */
38
+ protected emitProgress(handler: ApiProgressHandler | undefined, loaded: number, total?: number, event?: unknown): void;
39
+ /**
40
+ * 将 fetch / axios / xhr 等运行时进度事件转换为标准进度对象。
41
+ */
42
+ protected emitProgressEvent(handler: ApiProgressHandler | undefined, event: unknown): void;
43
+ /**
44
+ * 将上传请求数据转换为 FormData。
45
+ */
46
+ protected formData(config: ApiConfig<UploadLike>, target: {
47
+ data?: unknown;
48
+ headers?: Record<string, string>;
49
+ method?: string;
50
+ }): void;
51
+ /**
52
+ * 使用全局 FormData 构造器。
53
+ */
54
+ private createGlobalFormData;
55
+ }
56
+ //# sourceMappingURL=ApiAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiAdapter.d.ts","sourceRoot":"","sources":["../../../src/api/adapter/ApiAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,kBAAkB,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iBAAiB;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,QAAQ,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,UAAU;IAC1B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB;gBAA1B,OAAO,GAAE,iBAAsB;IAE9D;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAEzD;;OAEG;IACH,SAAS,CAAC,YAAY,CACpB,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,OAAO,GACd,IAAI;IAmBP;;OAEG;IACH,SAAS,CAAC,iBAAiB,CACzB,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,KAAK,EAAE,OAAO,GACb,IAAI;IAWP;;OAEG;IACH,SAAS,CAAC,QAAQ,CAChB,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,EAC7B,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GACA,IAAI;IAoBP;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAS7B"}
@@ -0,0 +1,43 @@
1
+ import ApiAdapter from "./ApiAdapter";
2
+ import type { ApiConfig } from "../ApiConfig";
3
+ import ApiResponse from "../ApiResponse";
4
+ /**
5
+ * axios CancelToken source 兼容类型。
6
+ */
7
+ interface AxiosCancelSource {
8
+ cancel: (message?: string) => void;
9
+ }
10
+ /**
11
+ * 最小 axios 能力接口。
12
+ *
13
+ * 只声明适配器实际用到的能力,避免强依赖 axios 类型包。
14
+ */
15
+ export interface AxiosLike {
16
+ CancelToken?: {
17
+ source: () => AxiosCancelSource;
18
+ };
19
+ request: (config: Record<string, unknown>) => Promise<{
20
+ status: number;
21
+ data: unknown;
22
+ }>;
23
+ }
24
+ /**
25
+ * qs 兼容接口。
26
+ */
27
+ export interface QsLike {
28
+ stringify: (value: unknown, options?: Record<string, unknown>) => string;
29
+ }
30
+ /**
31
+ * axios 请求适配器。
32
+ */
33
+ export default class AxiosHttpAdapter extends ApiAdapter {
34
+ private readonly axios;
35
+ private readonly qs?;
36
+ constructor(axios: AxiosLike, qs?: QsLike | undefined);
37
+ /**
38
+ * 将 ApiConfig 转换为 axios 配置并发起请求。
39
+ */
40
+ request(config: ApiConfig): Promise<ApiResponse>;
41
+ }
42
+ export {};
43
+ //# sourceMappingURL=AxiosHttpAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxiosHttpAdapter.d.ts","sourceRoot":"","sources":["../../../src/api/adapter/AxiosHttpAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAEzC;;GAEG;AACH,UAAU,iBAAiB;IACzB,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,iBAAiB,CAAC;KACjC,CAAC;IACF,OAAO,EAAE,CACP,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAC1E;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU;IAEpD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBADH,KAAK,EAAE,SAAS,EAChB,EAAE,CAAC,EAAE,MAAM,YAAA;IAK9B;;OAEG;IACY,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;CAmDhE"}
@@ -0,0 +1,50 @@
1
+ import ApiAdapter from "./ApiAdapter";
2
+ import type { ApiConfig } from "../ApiConfig";
3
+ import ApiResponse from "../ApiResponse";
4
+ /**
5
+ * fetch 兼容函数类型。
6
+ */
7
+ export type FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
8
+ /**
9
+ * fetch 请求适配器配置。
10
+ */
11
+ export interface FetchHttpAdapterOptions {
12
+ /** 自定义 fetch 实现,默认使用 globalThis.fetch。 */
13
+ fetch?: FetchLike;
14
+ /** 自定义 FormData 创建器,用于非浏览器环境。 */
15
+ formDataFactory?: () => FormData;
16
+ }
17
+ /**
18
+ * fetch 请求适配器。
19
+ *
20
+ * 作为默认 HTTP 适配器使用,不额外依赖 axios、qs、jQuery 或小程序对象。
21
+ */
22
+ export default class FetchHttpAdapter extends ApiAdapter {
23
+ private readonly fetchImpl;
24
+ constructor(options?: FetchHttpAdapterOptions);
25
+ /**
26
+ * 将 ApiConfig 转换为 fetch 配置并发起请求。
27
+ */
28
+ request(config: ApiConfig<Record<string, unknown>>): Promise<ApiResponse>;
29
+ /**
30
+ * 拼接 baseUrl 和 url。
31
+ */
32
+ private resolveUrl;
33
+ /**
34
+ * 给 URL 追加查询参数。
35
+ */
36
+ private appendQuery;
37
+ /**
38
+ * 转换为 URLSearchParams。
39
+ */
40
+ private toSearchParams;
41
+ /**
42
+ * 按响应 Content-Type 解析响应体。
43
+ */
44
+ private parseResponse;
45
+ /**
46
+ * 读取响应文本并触发下载进度。
47
+ */
48
+ private readTextWithProgress;
49
+ }
50
+ //# sourceMappingURL=FetchHttpAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FetchHttpAdapter.d.ts","sourceRoot":"","sources":["../../../src/api/adapter/FetchHttpAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAGzC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,QAAQ,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,OAAO,GAAE,uBAA4B;IAYjD;;OAEG;IACY,OAAO,CACpB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,OAAO,CAAC,WAAW,CAAC;IAyEvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;YACW,aAAa;IAgB3B;;OAEG;YACW,oBAAoB;CAkCnC"}
@@ -0,0 +1,33 @@
1
+ import ApiAdapter from "./ApiAdapter";
2
+ import type { ApiConfig } from "../ApiConfig";
3
+ import ApiResponse from "../ApiResponse";
4
+ /**
5
+ * 微信小程序 wx / uniapp uni API 最小兼容接口。
6
+ */
7
+ export interface WxLike {
8
+ request: (config: Record<string, unknown>) => WxRequestTaskLike | void;
9
+ uploadFile: (config: Record<string, unknown>) => WxRequestTaskLike | void;
10
+ }
11
+ /**
12
+ * 微信小程序 / uniapp 请求任务最小兼容接口。
13
+ */
14
+ export interface WxRequestTaskLike {
15
+ abort?: () => void;
16
+ onProgressUpdate?: (handler: (event: {
17
+ progress?: number;
18
+ totalBytesSent?: number;
19
+ totalBytesExpectedToSend?: number;
20
+ }) => void) => void;
21
+ }
22
+ /**
23
+ * 微信小程序 / uniapp 请求适配器。
24
+ */
25
+ export default class WxHttpAdapter extends ApiAdapter {
26
+ private readonly wx;
27
+ constructor(wx: WxLike);
28
+ /**
29
+ * 将 ApiConfig 转换为 wx.request / wx.uploadFile 或 uni.request / uni.uploadFile 配置并发起请求。
30
+ */
31
+ request(config: ApiConfig<Record<string, unknown>>): Promise<ApiResponse>;
32
+ }
33
+ //# sourceMappingURL=WxHttpAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WxHttpAdapter.d.ts","sourceRoot":"","sources":["../../../src/api/adapter/WxHttpAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,iBAAiB,GAAG,IAAI,CAAC;IACvE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,iBAAiB,GAAG,IAAI,CAAC;CAC3E;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,gBAAgB,CAAC,EAAE,CACjB,OAAO,EAAE,CAAC,KAAK,EAAE;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,wBAAwB,CAAC,EAAE,MAAM,CAAC;KACnC,KAAK,IAAI,KACP,IAAI,CAAC;CACX;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM;IAIvC;;OAEG;IACM,OAAO,CACd,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,OAAO,CAAC,WAAW,CAAC;CAkExB"}
@@ -0,0 +1,46 @@
1
+ import ApiAdapter from "./ApiAdapter";
2
+ import type { ApiConfig } from "../ApiConfig";
3
+ import ApiResponse from "../ApiResponse";
4
+ /**
5
+ * XMLHttpRequest 构造器类型。
6
+ */
7
+ export type XMLHttpRequestFactory = () => XMLHttpRequest;
8
+ /**
9
+ * XHR 请求适配器配置。
10
+ */
11
+ export interface XhrHttpAdapterOptions {
12
+ /** 自定义 XMLHttpRequest 创建器,默认使用 globalThis.XMLHttpRequest。 */
13
+ xhrFactory?: XMLHttpRequestFactory;
14
+ /** 自定义 FormData 创建器,用于非浏览器环境。 */
15
+ formDataFactory?: () => FormData;
16
+ }
17
+ /**
18
+ * 原生 XMLHttpRequest 请求适配器。
19
+ *
20
+ * 支持取消、上传进度、下载进度,适合浏览器环境。
21
+ */
22
+ export default class XhrHttpAdapter extends ApiAdapter {
23
+ private readonly xhrFactory;
24
+ constructor(options?: XhrHttpAdapterOptions);
25
+ /**
26
+ * 将 ApiConfig 转换为 XMLHttpRequest 并发起请求。
27
+ */
28
+ request(config: ApiConfig<Record<string, unknown>>): Promise<ApiResponse>;
29
+ /**
30
+ * 拼接 baseUrl 和 url。
31
+ */
32
+ private resolveUrl;
33
+ /**
34
+ * 给 URL 追加查询参数。
35
+ */
36
+ private appendQuery;
37
+ /**
38
+ * 转换为 URLSearchParams。
39
+ */
40
+ private toSearchParams;
41
+ /**
42
+ * 按响应 Content-Type 解析响应体。
43
+ */
44
+ private parseResponse;
45
+ }
46
+ //# sourceMappingURL=XhrHttpAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XhrHttpAdapter.d.ts","sourceRoot":"","sources":["../../../src/api/adapter/XhrHttpAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAGzC;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,cAAc,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,QAAQ,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;gBAEvC,OAAO,GAAE,qBAA0B;IAkB/C;;OAEG;IACM,OAAO,CACd,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,OAAO,CAAC,WAAW,CAAC;IA+DvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,aAAa;CAQtB"}