xn-fe-tools 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 (50) hide show
  1. package/README.md +112 -0
  2. package/dist/hooks/toAwaitFetch/toAwaitFetch.api.d.ts +469 -0
  3. package/dist/hooks/toAwaitFetch/toAwaitFetch.api.d.ts.map +1 -0
  4. package/dist/hooks/toAwaitFetch/toAwaitFetch.d.ts +95 -0
  5. package/dist/hooks/toAwaitFetch/toAwaitFetch.d.ts.map +1 -0
  6. package/dist/hooks/useCounter.d.ts +21 -0
  7. package/dist/hooks/useCounter.d.ts.map +1 -0
  8. package/dist/hooks/useFetch/axiosFetch.d.ts +111 -0
  9. package/dist/hooks/useFetch/axiosFetch.d.ts.map +1 -0
  10. package/dist/hooks/useFetch/cacheManager.d.ts +75 -0
  11. package/dist/hooks/useFetch/cacheManager.d.ts.map +1 -0
  12. package/dist/hooks/useFetch/fetch.d.ts +99 -0
  13. package/dist/hooks/useFetch/fetch.d.ts.map +1 -0
  14. package/dist/hooks/useFetch/fetch.types.d.ts +510 -0
  15. package/dist/hooks/useFetch/fetch.types.d.ts.map +1 -0
  16. package/dist/hooks/useFetch/fetchUtils.d.ts +171 -0
  17. package/dist/hooks/useFetch/fetchUtils.d.ts.map +1 -0
  18. package/dist/hooks/useFetch/index.d.ts +7 -0
  19. package/dist/hooks/useFetch/index.d.ts.map +1 -0
  20. package/dist/hooks/useFetch/requestQueue.d.ts +45 -0
  21. package/dist/hooks/useFetch/requestQueue.d.ts.map +1 -0
  22. package/dist/hooks/useLocalStorage.d.ts +18 -0
  23. package/dist/hooks/useLocalStorage.d.ts.map +1 -0
  24. package/dist/hooks/useTable/defaultConfig.d.ts +47 -0
  25. package/dist/hooks/useTable/defaultConfig.d.ts.map +1 -0
  26. package/dist/hooks/useTable/index.d.ts +13 -0
  27. package/dist/hooks/useTable/index.d.ts.map +1 -0
  28. package/dist/hooks/useTable/types.d.ts +217 -0
  29. package/dist/hooks/useTable/types.d.ts.map +1 -0
  30. package/dist/hooks/useTable/useTableRequest.d.ts +26 -0
  31. package/dist/hooks/useTable/useTableRequest.d.ts.map +1 -0
  32. package/dist/hooks/useTable/useTableStatic.d.ts +19 -0
  33. package/dist/hooks/useTable/useTableStatic.d.ts.map +1 -0
  34. package/dist/hooks/useTable/utils.d.ts +8 -0
  35. package/dist/hooks/useTable/utils.d.ts.map +1 -0
  36. package/dist/hooks/useToggle.d.ts +21 -0
  37. package/dist/hooks/useToggle.d.ts.map +1 -0
  38. package/dist/hooks/utils/utils.d.ts +20 -0
  39. package/dist/hooks/utils/utils.d.ts.map +1 -0
  40. package/dist/index.cjs.js +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.es.js +1 -0
  44. package/dist/toAwaitFetch/toAwaitFetch.cjs.js +1 -0
  45. package/dist/toAwaitFetch/toAwaitFetch.es.js +1 -0
  46. package/dist/version.cjs.js +1 -0
  47. package/dist/version.d.ts +11 -0
  48. package/dist/version.d.ts.map +1 -0
  49. package/dist/version.es.js +1 -0
  50. package/package.json +81 -0
package/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # My Hooks
2
+
3
+ 一个 Vue 3 Composition API 工具库集合,灵感来自 VueUse。
4
+
5
+ ## ✨ 特性
6
+
7
+ - 🎯 **Tree Shakeable** - 支持按需导入,减少打包体积
8
+ - 📦 **TypeScript** - 完整的 TypeScript 支持
9
+ - 🚀 **轻量级** - 零依赖(除了 Vue)
10
+ - 🔧 **易用** - 简单直观的 API
11
+ - 📚 **文档完善** - 详细的文档和示例
12
+
13
+ ## 📦 安装
14
+
15
+ ```bash
16
+ npm install my-vue-hooks
17
+ # 或
18
+ pnpm add my-vue-hooks
19
+ # 或
20
+ yarn add my-vue-hooks
21
+ ```
22
+
23
+ ## 🚀 快速开始
24
+
25
+ ```vue
26
+ <script setup lang="ts">
27
+ import { useCounter } from 'my-vue-hooks'
28
+
29
+ const { count, inc, dec, reset } = useCounter(0)
30
+ </script>
31
+
32
+ <template>
33
+ <div>
34
+ <p>Count: {{ count }}</p>
35
+ <button @click="inc()">+</button>
36
+ <button @click="dec()">-</button>
37
+ <button @click="reset()">Reset</button>
38
+ </div>
39
+ </template>
40
+ ```
41
+
42
+ ## 📖 文档
43
+
44
+ 查看 [完整文档](https://your-docs-site.com) 了解更多。
45
+
46
+ ## 🛠️ 开发
47
+
48
+ ```bash
49
+ # 安装依赖
50
+ pnpm install
51
+
52
+ # 开发模式
53
+ pnpm dev
54
+
55
+ # 构建
56
+ pnpm build
57
+
58
+ # 运行测试
59
+ pnpm test
60
+
61
+ # 开发文档
62
+ pnpm dev:docs
63
+
64
+ # 构建文档
65
+ pnpm build:docs
66
+ ```
67
+
68
+ ## 📝 添加新 Hook
69
+
70
+ 查看 [贡献指南](./docs/guide/contributing.md) 了解如何添加新的 hook。
71
+
72
+ ## 🚀 发布 SDK
73
+
74
+ ### 快速发布
75
+
76
+ ```bash
77
+ # 发布补丁版本 (1.0.0 -> 1.0.1)
78
+ pnpm release:patch
79
+
80
+ # 发布次版本 (1.0.0 -> 1.1.0)
81
+ pnpm release:minor
82
+
83
+ # 发布主版本 (1.0.0 -> 2.0.0)
84
+ pnpm release:major
85
+ ```
86
+
87
+ ### 手动发布
88
+
89
+ 1. 更新版本号: `pnpm version:patch|minor|major`
90
+ 2. 更新 CHANGELOG.md
91
+ 3. 构建: `pnpm build`
92
+ 4. 测试: `pnpm test:run`
93
+ 5. 提交: `git commit -m "chore: release v1.0.1" && git tag v1.0.1`
94
+ 6. 发布: `npm publish`
95
+
96
+ 详细说明请查看 [发布指南](./RELEASE.md)。
97
+
98
+ ## 📦 版本信息
99
+
100
+ SDK 内置了版本信息,可以在代码中使用:
101
+
102
+ ```ts
103
+ import { VERSION, getVersion } from 'my-vue-hooks'
104
+
105
+ console.log(VERSION) // "1.0.0"
106
+ console.log(getVersion()) // "1.0.0"
107
+ ```
108
+
109
+ ## 📄 License
110
+
111
+ MIT
112
+
@@ -0,0 +1,469 @@
1
+ /**
2
+ * toAwaitFetch API 类型定义
3
+ * 一个解决请求问题的工具类
4
+ */
5
+ /**
6
+ * HTTP 请求方法
7
+ */
8
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
9
+ /**
10
+ * 请求模式
11
+ */
12
+ export type RequestMode = 'cors' | 'no-cors' | 'same-origin' | 'navigate' | 'websocket';
13
+ /**
14
+ * 凭证模式
15
+ */
16
+ export type CredentialsMode = 'include' | 'same-origin' | 'omit';
17
+ /**
18
+ * 请求数据类型
19
+ */
20
+ export type RequestType = 'json' | 'form' | 'text' | 'blob' | 'arraybuffer';
21
+ /**
22
+ * 响应数据类型
23
+ */
24
+ export type ResponseType = 'json' | 'text' | 'blob' | 'arraybuffer' | 'formData';
25
+ /**
26
+ * 请求头配置类型
27
+ * 可以是 HeadersInit、Record<string, string> 或返回这些类型的函数
28
+ */
29
+ export type HeadersConfig = HeadersInit | Record<string, string> | ((config: {
30
+ url: string;
31
+ method?: HttpMethod;
32
+ }) => HeadersInit | Record<string, string>);
33
+ /**
34
+ * 验证状态码函数
35
+ * @param status HTTP 状态码
36
+ * @returns 是否通过验证
37
+ */
38
+ export type ValidateStatusFn = (status: number) => boolean;
39
+ /**
40
+ * 验证响应内容函数
41
+ * @param response 响应数据
42
+ * @returns 是否通过验证
43
+ */
44
+ export type ValidateResponseFn<T = any> = (response: T) => boolean;
45
+ /**
46
+ * 响应数据转换函数
47
+ * 用于将原始响应数据转换为业务中使用的数据格式
48
+ * @param data 原始响应数据(response 中的 data)
49
+ * @returns 转换后的数据
50
+ * @example
51
+ * // 例如:提取嵌套数据
52
+ * transformResponse: (data) => data.result.list
53
+ *
54
+ * // 例如:格式化数据
55
+ * transformResponse: (data) => ({
56
+ * items: data.list,
57
+ * total: data.pagination.total
58
+ * })
59
+ */
60
+ export type TransformResponseFn<TRaw = any, TTransformed = any> = (data: TRaw) => TTransformed;
61
+ /**
62
+ * HTTP 错误处理函数
63
+ * @param error 错误信息
64
+ * @param status HTTP 状态码
65
+ * @param response 响应数据
66
+ * @param suppressError 取消抛错的方法,调用此方法后,即使错误未被用户主动处理,也不会抛出未处理的错误
67
+ */
68
+ export type HttpErrorHandler<T = any> = (error: Error, status: number, response: T, suppressError: () => void) => void | Promise<void>;
69
+ /**
70
+ * 业务错误处理函数
71
+ * @param error 错误信息
72
+ * @param response 响应数据
73
+ * @param suppressError 取消抛错的方法,调用此方法后,即使错误未被用户主动处理,也不会抛出未处理的错误
74
+ */
75
+ export type BusinessErrorHandler<T = any> = (error: Error, response: T, suppressError: () => void) => void | Promise<void>;
76
+ /**
77
+ * 网络错误处理函数
78
+ * @param error 网络错误(已统一转换为 Error 类型)
79
+ * @param suppressError 取消抛错的方法,调用此方法后,即使错误未被用户主动处理,也不会抛出未处理的错误
80
+ */
81
+ export type NetworkErrorHandler = (error: Error, suppressError: () => void) => void | Promise<void>;
82
+ /**
83
+ * 重试判断函数
84
+ * @param attempt 当前重试次数(从 1 开始)
85
+ * @param error 错误信息
86
+ * @returns 是否应该继续重试
87
+ */
88
+ export type ShouldRetry = (attempt: number, error: FetchError) => boolean | Promise<boolean>;
89
+ /**
90
+ * 重试配置
91
+ */
92
+ export interface RetryConfig {
93
+ /**
94
+ * 是否开启重试
95
+ * @default false
96
+ */
97
+ enabled?: boolean;
98
+ /**
99
+ * 最大重试次数
100
+ * @default 3
101
+ */
102
+ maxRetryCount?: number;
103
+ /**
104
+ * 重试延迟时间(毫秒)
105
+ * @default 1000
106
+ */
107
+ delay?: number;
108
+ /**
109
+ * 自定义重试判断函数,返回 true 表示继续重试,false 表示停止重试
110
+ * 如果未提供,将使用默认的重试逻辑
111
+ */
112
+ shouldRetry?: ShouldRetry;
113
+ }
114
+ /**
115
+ * 请求配置(单次请求)
116
+ */
117
+ export interface RequestConfig<TRequest = any, TResponse = any> {
118
+ /**
119
+ * 请求 URL(必需)
120
+ */
121
+ url: string;
122
+ /**
123
+ * HTTP 方法
124
+ * @default 'GET'
125
+ */
126
+ method?: HttpMethod;
127
+ /**
128
+ * 请求数据
129
+ * - GET 请求时,data 会转换为 URL 查询参数
130
+ * - POST/PUT/PATCH 等请求时,data 作为请求体数据
131
+ * - POST 请求的查询参数应该放在 URL 中(如 '/api/users?page=1')
132
+ */
133
+ data?: TRequest;
134
+ /**
135
+ * 验证请求状态码是否符合要求的函数,返回布尔类型
136
+ */
137
+ validateStatus?: ValidateStatusFn;
138
+ /**
139
+ * 验证请求内容是否符合业务要求,返回布尔类型
140
+ */
141
+ validateResponse?: ValidateResponseFn<TResponse>;
142
+ /**
143
+ * 响应数据转换函数
144
+ * 用于将原始响应数据转换为业务中使用的数据格式
145
+ * 在 validateResponse 验证通过后执行
146
+ * @example
147
+ * transformResponse: (data) => data.result.list
148
+ */
149
+ transformResponse?: TransformResponseFn<TResponse, TResponse>;
150
+ /**
151
+ * 用来捕获 validateStatus 为 false 时进行错误处理的函数
152
+ */
153
+ onHttpError?: HttpErrorHandler<TResponse>;
154
+ /**
155
+ * 用来捕获 validateResponse 为 false 时进行错误处理的函数
156
+ * 主要用来处理业务场景的错误
157
+ */
158
+ onBusinessError?: BusinessErrorHandler<TResponse>;
159
+ /**
160
+ * 用来捕获网络异常的错误处理函数
161
+ * 主要用来处理无网络、跨域等报错问题
162
+ */
163
+ onNetworkError?: NetworkErrorHandler;
164
+ /**
165
+ * 重试配置
166
+ */
167
+ retry?: RetryConfig;
168
+ /**
169
+ * 请求超时时间(毫秒)
170
+ */
171
+ timeout?: number;
172
+ /**
173
+ * 请求头配置
174
+ * 可以是 HeadersInit、Record<string, string> 或返回这些类型的函数
175
+ * 函数接收 { url, method } 作为参数,可用于动态生成请求头
176
+ */
177
+ headers?: HeadersConfig;
178
+ /**
179
+ * 取消请求的信号(可与返回的 cancel 一起使用)
180
+ */
181
+ signal?: AbortSignal;
182
+ /**
183
+ * 请求模式
184
+ * @default 'cors'
185
+ */
186
+ mode?: RequestMode;
187
+ /**
188
+ * 凭证模式
189
+ * @default 'include'
190
+ */
191
+ credentials?: CredentialsMode;
192
+ /**
193
+ * 请求数据类型
194
+ * @default 'json'
195
+ */
196
+ requestType?: RequestType;
197
+ /**
198
+ * 响应数据类型
199
+ * @default 'json'
200
+ */
201
+ responseType?: ResponseType;
202
+ }
203
+ /**
204
+ * 全局配置(不包含 url、method、data)
205
+ */
206
+ export interface GlobalConfig<TResponse = any> {
207
+ /**
208
+ * 基础 URL,会与请求的 url 拼接
209
+ */
210
+ baseURL?: string;
211
+ /**
212
+ * 验证请求状态码是否符合要求的函数,返回布尔类型
213
+ */
214
+ validateStatus?: ValidateStatusFn;
215
+ /**
216
+ * 验证请求内容是否符合业务要求,返回布尔类型
217
+ */
218
+ validateResponse?: ValidateResponseFn<TResponse>;
219
+ /**
220
+ * 响应数据转换函数
221
+ * 用于将原始响应数据转换为业务中使用的数据格式
222
+ * 在 validateResponse 验证通过后执行
223
+ * @example
224
+ * // 全局配置:提取通用的 data 字段
225
+ * transformResponse: (response) => response.data
226
+ */
227
+ transformResponse?: TransformResponseFn<TResponse, TResponse>;
228
+ /**
229
+ * 用来捕获 validateStatus 为 false 时进行错误处理的函数
230
+ */
231
+ onHttpError?: HttpErrorHandler<TResponse>;
232
+ /**
233
+ * 用来捕获 validateResponse 为 false 时进行错误处理的函数
234
+ * 主要用来处理业务场景的错误
235
+ */
236
+ onBusinessError?: BusinessErrorHandler<TResponse>;
237
+ /**
238
+ * 用来捕获网络异常的错误处理函数
239
+ * 主要用来处理无网络、跨域等报错问题
240
+ */
241
+ onNetworkError?: NetworkErrorHandler;
242
+ /**
243
+ * 重试配置
244
+ */
245
+ retry?: RetryConfig;
246
+ /**
247
+ * 请求超时时间(毫秒)
248
+ */
249
+ timeout?: number;
250
+ /**
251
+ * 请求头配置
252
+ * 可以是 HeadersInit、Record<string, string> 或返回这些类型的函数
253
+ * 函数接收 { url, method } 作为参数,可用于动态生成请求头
254
+ */
255
+ headers?: HeadersConfig;
256
+ /**
257
+ * 请求模式
258
+ * @default 'cors'
259
+ */
260
+ mode?: RequestMode;
261
+ /**
262
+ * 凭证模式
263
+ * @default 'include'
264
+ */
265
+ credentials?: CredentialsMode;
266
+ /**
267
+ * 请求数据类型
268
+ * @default 'json'
269
+ */
270
+ requestType?: RequestType;
271
+ /**
272
+ * 响应数据类型
273
+ * @default 'json'
274
+ */
275
+ responseType?: ResponseType;
276
+ }
277
+ /**
278
+ * 响应结果
279
+ */
280
+ export interface FetchResponse<T = any> {
281
+ /**
282
+ * 响应数据
283
+ */
284
+ data: T;
285
+ /**
286
+ * HTTP 状态码
287
+ */
288
+ status: number;
289
+ /**
290
+ * 状态文本
291
+ */
292
+ statusText: string;
293
+ /**
294
+ * 响应头
295
+ */
296
+ headers: Headers;
297
+ /**
298
+ * 原始 Response 对象
299
+ */
300
+ response: Response;
301
+ }
302
+ /**
303
+ * 错误结果
304
+ */
305
+ export interface FetchError<T = any> {
306
+ /**
307
+ * 错误信息
308
+ */
309
+ message: string;
310
+ /**
311
+ * 错误类型
312
+ */
313
+ type: 'http' | 'business' | 'network' | 'timeout';
314
+ /**
315
+ * HTTP 状态码(如果是 HTTP 错误)
316
+ */
317
+ status?: number;
318
+ /**
319
+ * 响应数据(如果有)
320
+ */
321
+ response?: T;
322
+ /**
323
+ * 原始错误对象
324
+ */
325
+ error?: Error | TypeError | DOMException;
326
+ }
327
+ /**
328
+ * 请求结果(支持链式调用和解构)
329
+ * 数组格式:[data, error, success]
330
+ * - data: 响应数据(成功时)
331
+ * - error: 错误信息(失败时)
332
+ * - success: 请求是否成功
333
+ */
334
+ export type FetchResult<T = any> = [T | undefined, FetchError | undefined, boolean];
335
+ /**
336
+ * 扩展 Promise,同时支持解构和链式调用
337
+ */
338
+ export interface FetchResultPromise<T = any> extends Promise<FetchResult<T>> {
339
+ /**
340
+ * 成功回调(重载 Promise 的 then 方法)
341
+ * @param callback 成功时的回调函数
342
+ * @returns 返回自身,支持链式调用
343
+ */
344
+ then(callback: (data: T) => void): this;
345
+ /**
346
+ * 取消当前请求(触发 AbortController)
347
+ */
348
+ cancel(): void;
349
+ /**
350
+ * Promise 的 then 方法(保持兼容性)
351
+ */
352
+ then<TResult1 = FetchResult<T>, TResult2 = never>(onfulfilled?: ((value: FetchResult<T>) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined): Promise<TResult1 | TResult2>;
353
+ /**
354
+ * HTTP 验证错误回调
355
+ * @param callback HTTP 验证错误时的回调函数(validateStatus 返回 false)
356
+ * @returns 返回自身,支持链式调用
357
+ */
358
+ catchHttp(callback: (error: FetchError) => void): this;
359
+ /**
360
+ * 业务验证错误回调
361
+ * @param callback 业务验证错误时的回调函数(validateResponse 返回 false)
362
+ * @returns 返回自身,支持链式调用
363
+ */
364
+ catchBusiness(callback: (error: FetchError) => void): this;
365
+ /**
366
+ * 网络错误回调(网络错误、超时等)
367
+ * @param callback 网络错误时的回调函数
368
+ * @returns 返回自身,支持链式调用
369
+ */
370
+ catchNetwork(callback: (error: FetchError) => void): this;
371
+ /**
372
+ * Promise 的 catch 方法(保持兼容性)
373
+ */
374
+ catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined): Promise<FetchResult<T> | TResult>;
375
+ }
376
+ /**
377
+ * 主类接口
378
+ */
379
+ export interface FetchInstance {
380
+ /**
381
+ * 发送请求
382
+ * @param config 请求配置
383
+ * @returns FetchResultPromise<TResponse> 支持链式调用和解构
384
+ */
385
+ request<TRequest = any, TResponse = any>(config: RequestConfig<TRequest, TResponse>): FetchResultPromise<TResponse>;
386
+ /**
387
+ * 设置全局配置
388
+ * @param config 全局配置
389
+ */
390
+ setGlobalConfig(config: GlobalConfig): void;
391
+ /**
392
+ * 获取当前全局配置
393
+ */
394
+ getGlobalConfig(): GlobalConfig;
395
+ /**
396
+ * 合并全局配置
397
+ * @param config 部分全局配置
398
+ */
399
+ mergeGlobalConfig(config: Partial<GlobalConfig>): void;
400
+ /**
401
+ * GET 请求(支持链式调用)
402
+ * @param url 请求 URL
403
+ * @param params 请求参数(会转换为 URL 查询参数)
404
+ * @param config 请求配置(不包含 url、method 和 data)
405
+ * @returns FetchResultPromise<TResponse> 支持链式调用和解构
406
+ */
407
+ sendGet<TRequest = any, TResponse = any>(url: string, params?: TRequest, config?: Omit<RequestConfig<TRequest, TResponse>, 'url' | 'method' | 'data'>): FetchResultPromise<TResponse>;
408
+ /**
409
+ * POST 请求(支持链式调用)
410
+ * 默认使用 JSON 格式发送数据
411
+ * @param url 请求 URL
412
+ * @param data 请求数据
413
+ * @param config 请求配置(不包含 url、method 和 data)
414
+ * @returns FetchResultPromise<TResponse> 支持链式调用和解构
415
+ */
416
+ sendPost<TRequest = any, TResponse = any>(url: string, data?: TRequest, config?: Omit<RequestConfig<TRequest, TResponse>, 'url' | 'method' | 'data'>): FetchResultPromise<TResponse>;
417
+ /**
418
+ * POST 请求,使用 FormData 格式发送数据(支持文件上传)
419
+ * @param url 请求 URL
420
+ * @param data 请求数据(对象会自动转换为 FormData)
421
+ * @param config 请求配置(不包含 url、method 和 data)
422
+ * @returns FetchResultPromise<TResponse> 支持链式调用和解构
423
+ */
424
+ sendPostForm<TRequest = any, TResponse = any>(url: string, data?: TRequest, config?: Omit<RequestConfig<TRequest, TResponse>, 'url' | 'method' | 'data'>): FetchResultPromise<TResponse>;
425
+ /**
426
+ * POST 请求,发送 Blob 数据
427
+ * @param url 请求 URL
428
+ * @param data 请求体(JSON/可序列化对象)
429
+ * @param config 请求配置(不包含 url、method 和 data)
430
+ * @returns FetchResultPromise<Blob> 支持链式调用和解构
431
+ */
432
+ sendPostBlob<TRequest = any>(url: string, data?: TRequest, config?: Omit<RequestConfig<TRequest, Blob>, 'url' | 'method' | 'data'>): FetchResultPromise<Blob>;
433
+ /**
434
+ * GET 请求,响应返回 Blob 数据(用于下载文件)
435
+ * @param url 请求 URL
436
+ * @param params 请求参数(会转换为 URL 查询参数)
437
+ * @param config 请求配置(不包含 url、method 和 data)
438
+ * @returns FetchResultPromise<Blob> 支持链式调用和解构
439
+ */
440
+ sendGetBlob<TRequest = any>(url: string, params?: TRequest, config?: Omit<RequestConfig<TRequest, Blob>, 'url' | 'method' | 'data'>): FetchResultPromise<Blob>;
441
+ }
442
+ /**
443
+ * 创建实例的函数类型
444
+ * @param globalConfig 全局配置(可选)
445
+ * @returns FetchInstance
446
+ */
447
+ export type CreateFetch = (globalConfig?: GlobalConfig) => FetchInstance;
448
+ /**
449
+ * toAwaitFetch 类型
450
+ * 既是工厂函数,也是默认实例(类似 axios)
451
+ */
452
+ export type ToAwaitFetch = CreateFetch & Pick<FetchInstance, 'sendGet' | 'sendPost' | 'sendPostForm' | 'sendPostBlob' | 'sendGetBlob' | 'setGlobalConfig' | 'getGlobalConfig' | 'mergeGlobalConfig'> & {
453
+ (config: RequestConfig<any, any>): FetchResultPromise<any>;
454
+ (config?: GlobalConfig): FetchInstance;
455
+ /**
456
+ * 创建新实例的便捷方法(默认实例上的别名)
457
+ */
458
+ create: CreateFetch;
459
+ /**
460
+ * 取消请求的便捷方法
461
+ * 传入 FetchResultPromise 即可
462
+ */
463
+ cancel<T = any>(promise: FetchResultPromise<T>): void;
464
+ };
465
+ /**
466
+ * 默认导出:既是工厂函数,也是默认实例
467
+ */
468
+ export default ToAwaitFetch;
469
+ //# sourceMappingURL=toAwaitFetch.api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toAwaitFetch.api.d.ts","sourceRoot":"","sources":["../../../src/hooks/toAwaitFetch/toAwaitFetch.api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * toAwaitFetch 实现
3
+ * Class 实现,参考 API 类型定义和生命周期图
4
+ */
5
+ import type { FetchInstance, FetchResultPromise, RequestConfig, GlobalConfig, RequestType, ResponseType, TransformResponseFn, CreateFetch, ToAwaitFetch } from './toAwaitFetch.api';
6
+ /**
7
+ * 内部请求配置(包含 requestType 和 responseType)
8
+ * 仅供内部使用,不对外暴露
9
+ */
10
+ interface InternalRequestConfig<TRequest = any, TResponse = any> extends RequestConfig<TRequest, TResponse> {
11
+ /**
12
+ * 请求数据类型(内部使用)
13
+ * @default 'json'
14
+ */
15
+ requestType?: RequestType;
16
+ /**
17
+ * 响应数据类型(内部使用)
18
+ * @default 'json'
19
+ */
20
+ responseType?: ResponseType;
21
+ /**
22
+ * 响应数据转换函数
23
+ */
24
+ transformResponse?: TransformResponseFn<TResponse, TResponse>;
25
+ }
26
+ /**
27
+ * FetchInstance 实现类
28
+ */
29
+ declare class FetchInstanceImpl implements FetchInstance {
30
+ private globalConfig;
31
+ constructor(globalConfig?: GlobalConfig);
32
+ /**
33
+ * 执行请求(核心逻辑)
34
+ */
35
+ private executeRequest;
36
+ /**
37
+ * 发送请求(内部可接收 requestType 和 responseType)
38
+ */
39
+ request<TRequest = any, TResponse = any>(config: RequestConfig<TRequest, TResponse> | InternalRequestConfig<TRequest, TResponse>): FetchResultPromise<TResponse>;
40
+ /**
41
+ * 设置全局配置
42
+ */
43
+ setGlobalConfig(config: GlobalConfig): void;
44
+ /**
45
+ * 获取全局配置
46
+ */
47
+ getGlobalConfig(): GlobalConfig;
48
+ /**
49
+ * 合并全局配置
50
+ */
51
+ mergeGlobalConfig(config: Partial<GlobalConfig>): void;
52
+ /**
53
+ * GET 请求
54
+ */
55
+ sendGet<TRequest = any, TResponse = any>(url: string, params?: TRequest, config?: Omit<RequestConfig<TRequest, TResponse>, 'url' | 'method' | 'data'>): FetchResultPromise<TResponse>;
56
+ /**
57
+ * POST 请求(默认 JSON 格式)
58
+ */
59
+ sendPost<TRequest = any, TResponse = any>(url: string, data?: TRequest, config?: Omit<RequestConfig<TRequest, TResponse>, 'url' | 'method' | 'data'>): FetchResultPromise<TResponse>;
60
+ /**
61
+ * POST 请求(FormData 格式,用于文件上传)
62
+ */
63
+ sendPostForm<TRequest = any, TResponse = any>(url: string, data?: TRequest, config?: Omit<RequestConfig<TRequest, TResponse>, 'url' | 'method' | 'data'>): FetchResultPromise<TResponse>;
64
+ /**
65
+ * POST 请求(Blob 数据)
66
+ */
67
+ sendPostBlob<TRequest = any>(url: string, data?: TRequest, config?: Omit<RequestConfig<TRequest, Blob>, 'url' | 'method' | 'data'>): FetchResultPromise<Blob>;
68
+ /**
69
+ * GET 请求(Blob 响应,用于下载文件)
70
+ */
71
+ sendGetBlob<TRequest = any>(url: string, params?: TRequest, config?: Omit<RequestConfig<TRequest, Blob>, 'url' | 'method' | 'data'>): FetchResultPromise<Blob>;
72
+ }
73
+ /**
74
+ * 创建 toAwaitFetch 实例的工厂函数
75
+ */
76
+ declare const createInstance: CreateFetch;
77
+ /**
78
+ * 导出常用方法,方便直接使用:import { sendGet, sendPost } from '...'
79
+ * 使用箭头函数直接调用实例方法,确保 this 正确绑定
80
+ */
81
+ export declare const sendGet: <TRequest = any, TResponse = any>(url: string, params?: TRequest, config?: Omit<RequestConfig<TRequest, TResponse>, "url" | "method" | "data">) => FetchResultPromise<TResponse>;
82
+ export declare const sendPost: <TRequest = any, TResponse = any>(url: string, data?: TRequest, config?: Omit<RequestConfig<TRequest, TResponse>, "url" | "method" | "data">) => FetchResultPromise<TResponse>;
83
+ export declare const sendPostForm: <TRequest = any, TResponse = any>(url: string, data?: TRequest, config?: Omit<RequestConfig<TRequest, TResponse>, "url" | "method" | "data">) => FetchResultPromise<TResponse>;
84
+ export declare const sendPostBlob: <TRequest = any>(url: string, data?: TRequest, config?: Omit<RequestConfig<TRequest, Blob>, "url" | "method" | "data">) => FetchResultPromise<Blob>;
85
+ export declare const sendGetBlob: <TRequest = any>(url: string, params?: TRequest, config?: Omit<RequestConfig<TRequest, Blob>, "url" | "method" | "data">) => FetchResultPromise<Blob>;
86
+ export declare const setGlobalConfig: (config: GlobalConfig) => void;
87
+ export declare const cancel: <T = any>(promise: FetchResultPromise<T>) => void;
88
+ /**
89
+ * 默认实例(既是工厂函数也是实例)
90
+ * 支持 axios 风格调用:toAwaitFetch(config) 直接发起请求
91
+ */
92
+ declare const toAwaitFetch: ToAwaitFetch;
93
+ export { createInstance, FetchInstanceImpl };
94
+ export default toAwaitFetch;
95
+ //# sourceMappingURL=toAwaitFetch.d.ts.map