vue-asyncx 1.11.2 → 1.11.3
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.
- package/dist/vue-asyncx.d.cts +769 -0
- package/package.json +20 -9
|
@@ -0,0 +1,769 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
import { Ref } from 'vue';
|
|
3
|
+
import { ShallowRef } from 'vue';
|
|
4
|
+
import { WatchCallback } from 'vue';
|
|
5
|
+
import { WatchOptions } from 'vue';
|
|
6
|
+
import { WatchSource } from 'vue';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 插件(Addon)定义类型。
|
|
10
|
+
*
|
|
11
|
+
* @description
|
|
12
|
+
* 插件允许在核心流程执行的不同阶段注入逻辑和状态。它支持两种形式:
|
|
13
|
+
* 1. **基础插件**:返回对象,仅参与 setup 前的 fn 监听过程
|
|
14
|
+
* 2. **高级插件**:返回函数,参与 setup **前&后**流程,获取 setup 后的 method
|
|
15
|
+
*
|
|
16
|
+
* @template Method - 管道包装的核心函数类型。
|
|
17
|
+
* @template AddonResult - 插件的结果(对象/函数)。
|
|
18
|
+
*
|
|
19
|
+
* @param params - 注入的上下文对象。
|
|
20
|
+
* @param params.monitor - 监控与追踪工具,用于观测函数执行。
|
|
21
|
+
* @param params._types - 辅助类型占位符,用于在插件内部保留 Method 的类型上下文。
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* // 1. 基础插件:仅参与 setup 前的监听
|
|
25
|
+
* function withAddonLoading(): (params: {
|
|
26
|
+
* monitor: FunctionMonitor
|
|
27
|
+
* }) => { loading: Ref<boolean> } {
|
|
28
|
+
* return
|
|
29
|
+
* }
|
|
30
|
+
* // 2. 高级插件:需要访问最终生成的方法
|
|
31
|
+
* function withAddonData<Config extends {
|
|
32
|
+
* type?: 'function' | 'data'
|
|
33
|
+
* shallow?: boolean,
|
|
34
|
+
* initialData?: any
|
|
35
|
+
* }>(config?: Config):
|
|
36
|
+
* <T extends AddonTypes>(p: { _types: T }) => () => Config['type'] extends 'function'
|
|
37
|
+
* ? {
|
|
38
|
+
* __name__Data: Config['shallow'] extends true
|
|
39
|
+
* ? ShallowRef<Awaited<ReturnType<T['Method']>>>
|
|
40
|
+
* : Ref<Awaited<ReturnType<T['Method']>>>
|
|
41
|
+
* __name__DataExpired: Ref<boolean>
|
|
42
|
+
* }
|
|
43
|
+
* : {
|
|
44
|
+
* __name__: Config['shallow'] extends true
|
|
45
|
+
* ? ShallowRef<Awaited<ReturnType<T['Method']>>>
|
|
46
|
+
* : Ref<Awaited<ReturnType<T['Method']>>>
|
|
47
|
+
* __name__Expired: Ref<boolean>
|
|
48
|
+
* } {
|
|
49
|
+
* return
|
|
50
|
+
* }
|
|
51
|
+
*/
|
|
52
|
+
declare type Addon<Method extends BaseFunction = any, AddonResult = any> = (params: {
|
|
53
|
+
monitor: FunctionMonitor;
|
|
54
|
+
_types: AddonTypes<Method>;
|
|
55
|
+
}) => (AddonResult | ((params: {
|
|
56
|
+
method: Method;
|
|
57
|
+
}) => AddonResult));
|
|
58
|
+
|
|
59
|
+
declare type Addons<Fn extends BaseFunction, AddonResults extends any[]> = {
|
|
60
|
+
[K in keyof AddonResults]: Addon<Fn, AddonResults[K]>;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
declare interface AddonTypes<M extends BaseFunction = any> {
|
|
64
|
+
Method: M;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @fileoverview 类型工具系统
|
|
69
|
+
*
|
|
70
|
+
* 该模块提供 TypeScript 类型工具,用于支持 Vue-AsyncX 的类型推导。
|
|
71
|
+
*
|
|
72
|
+
* 主要功能:
|
|
73
|
+
* - 基础类型定义(BaseFunction、Not 等)
|
|
74
|
+
* - 字符串处理工具(CamelReplace、NonEmptyString 等)
|
|
75
|
+
* - 对象处理工具(Merge、ObjectShape 等)
|
|
76
|
+
* - 类型判断工具(IsUnion 等)
|
|
77
|
+
*
|
|
78
|
+
* 这些工具主要用于:
|
|
79
|
+
* - 插件返回类型的合并和转换
|
|
80
|
+
* - 命名约定的类型推导
|
|
81
|
+
* - 类型安全的保障
|
|
82
|
+
*
|
|
83
|
+
* @module utils/types
|
|
84
|
+
*/
|
|
85
|
+
/**
|
|
86
|
+
* 基础函数类型
|
|
87
|
+
*
|
|
88
|
+
* @description 匹配任何具有任意参数和返回值的函数。
|
|
89
|
+
* 用于约束函数类型,确保类型安全。
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* const fn: BaseFunction = () => {}
|
|
94
|
+
* const fn2: BaseFunction = (a: number) => a
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
declare type BaseFunction = (...args: any) => any;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* 驼峰替换工具:将字符串中的 Pattern 替换为 Replacement,并自动处理驼峰命名。
|
|
101
|
+
* @param Input - 原始字符串 (e.g., "get__name__")
|
|
102
|
+
* @param Pattern - 待匹配的占位符模式 (e.g., "__name__")
|
|
103
|
+
* @param Replacement - 替换后的目标内容 (e.g., "user")
|
|
104
|
+
* @param OnNoPattern - 【配置项】若 Input 中完全不含 Pattern 时的返回结果。
|
|
105
|
+
* 默认为 Input (保留原样);业务中可传入 never (丢弃)。
|
|
106
|
+
* @param IsSuffix - 【内部状态】标记当前是否已处于匹配项之后的后缀部分。
|
|
107
|
+
*/
|
|
108
|
+
declare type CamelReplace<Input extends string, Pattern extends string, Replacement extends string, OnNoPattern = Input, IsSuffix extends boolean = false> = Input extends `${infer Prefix}${Pattern}${infer Suffix}` ? Prefix extends "" ? `${ToCamel<Replacement, Not<IsSuffix>>}${CamelReplace<Suffix, Pattern, Replacement, OnNoPattern, true>}` : `${Prefix}${Capitalize<Replacement>}${CamelReplace<Suffix, Pattern, Replacement, OnNoPattern, true>}` : (IsSuffix extends true ? Input : OnNoPattern);
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* 对象属性名驼峰替换工具:将属性名中的 Pattern 替换为 Replacement
|
|
112
|
+
*
|
|
113
|
+
* @param T - 目标对象
|
|
114
|
+
* @param Replacement - 替换后的名称
|
|
115
|
+
* @param Pattern - 占位符模式,默认 '__name__'
|
|
116
|
+
* @param KeepNoPattern - 是否保留不含 Pattern 的属性,默认 false (移除)
|
|
117
|
+
*/
|
|
118
|
+
declare type CamelReplaceKeys<T, Replacement extends string, Pattern extends string = '__name__', KeepNoPattern extends boolean = false> = Simplify<{
|
|
119
|
+
[K in keyof T as K extends string ? CamelReplace<K, Pattern, Replacement, KeepNoPattern extends true ? K : never> : (KeepNoPattern extends true ? K : never)]: T[K];
|
|
120
|
+
}>;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @fileoverview 异步数据上下文管理
|
|
124
|
+
*
|
|
125
|
+
* 该模块提供异步数据上下文的全局管理机制。
|
|
126
|
+
* 上下文只在函数执行的同步部分可用,用于在函数执行过程中访问和更新数据。
|
|
127
|
+
*
|
|
128
|
+
* ## 工作原理
|
|
129
|
+
*
|
|
130
|
+
* 1. 在函数调用前(before 事件),通过 `prepareAsyncDataContext` 设置上下文
|
|
131
|
+
* 2. 在函数执行期间(同步部分),可以通过 `getAsyncDataContext` 获取上下文
|
|
132
|
+
* 3. 在函数执行后(after 事件),通过恢复函数移除上下文
|
|
133
|
+
*
|
|
134
|
+
* ## 限制
|
|
135
|
+
*
|
|
136
|
+
* - 上下文只在函数执行的同步部分可用
|
|
137
|
+
* - 在异步回调中无法获取上下文(会返回 null)
|
|
138
|
+
* - 嵌套调用必须按顺序恢复上下文
|
|
139
|
+
*
|
|
140
|
+
* @module addons/data/context
|
|
141
|
+
*/
|
|
142
|
+
/**
|
|
143
|
+
* 上下文获取器类型
|
|
144
|
+
*
|
|
145
|
+
* @description 用于获取上下文对象的函数类型。
|
|
146
|
+
*
|
|
147
|
+
* @template D - 数据类型
|
|
148
|
+
*/
|
|
149
|
+
declare type ContextGetter<D = any> = () => {
|
|
150
|
+
getData: () => D;
|
|
151
|
+
updateData: (v: D) => void;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* 事件处理函数类型
|
|
156
|
+
*
|
|
157
|
+
* @template T - 事件类型
|
|
158
|
+
*/
|
|
159
|
+
declare type EventHandler<T extends keyof FunctionMonitorEventMap> = (event: FunctionMonitorEventMap[T]) => void;
|
|
160
|
+
|
|
161
|
+
declare type FirstArgumentEnhanced<T = any, D = any> = {
|
|
162
|
+
[FLAG_FIRST_ARGUMENT_ENHANCED]: true;
|
|
163
|
+
firstArgument?: T;
|
|
164
|
+
getData: () => D;
|
|
165
|
+
updateData: (v: D) => void;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
declare const FLAG_FIRST_ARGUMENT_ENHANCED = "__va_fae";
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* 函数监控器接口
|
|
172
|
+
*
|
|
173
|
+
* @description 提供函数执行生命周期的事件监控能力。
|
|
174
|
+
*/
|
|
175
|
+
declare type FunctionMonitor = Pick<InternalFunctionMonitor, 'on' | 'off'>;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* 函数监控器事件映射
|
|
179
|
+
*
|
|
180
|
+
* @description 定义了所有可监听的事件类型及其数据结构。
|
|
181
|
+
*/
|
|
182
|
+
declare type FunctionMonitorEventMap = {
|
|
183
|
+
/** 函数调用初始化事件,用于准备上下文 */
|
|
184
|
+
'init': {
|
|
185
|
+
args: any[];
|
|
186
|
+
track: Track;
|
|
187
|
+
};
|
|
188
|
+
/** 函数执行前事件,用于观察逻辑。注:enhance-arguments 发生在 before 后 */
|
|
189
|
+
'before': {
|
|
190
|
+
args: any[];
|
|
191
|
+
track: Track;
|
|
192
|
+
};
|
|
193
|
+
/** 函数执行后事件(同步部分完成) */
|
|
194
|
+
'after': {
|
|
195
|
+
track: Track;
|
|
196
|
+
};
|
|
197
|
+
/** 函数成功完成事件 */
|
|
198
|
+
'fulfill': {
|
|
199
|
+
track: Track;
|
|
200
|
+
value: any;
|
|
201
|
+
};
|
|
202
|
+
/** 函数执行失败事件 */
|
|
203
|
+
'reject': {
|
|
204
|
+
track: Track;
|
|
205
|
+
error: any;
|
|
206
|
+
};
|
|
207
|
+
/** track 数据变化事件,当 track 的 setData 触发更新时转发 */
|
|
208
|
+
'track:updated': {
|
|
209
|
+
track: Track;
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
declare type GetAddonAdvanceResults<T extends readonly any[]> = T extends readonly [infer First, ...infer Rest] ? IsUnion<First> extends true ? [Exclude<First, BaseFunction>, ...GetAddonAdvanceResults<Rest>] : GetAddonAdvanceResults<Rest> : [];
|
|
214
|
+
|
|
215
|
+
declare type GetAddonBasicResults<T extends readonly any[]> = T extends readonly [infer First, ...infer Rest] ? IsUnion<First> extends false ? [First, ...GetAddonBasicResults<Rest>] : GetAddonBasicResults<Rest> : [];
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* 获取当前 `useAsyncData` 函数的上下文对象。
|
|
219
|
+
*
|
|
220
|
+
* 该函数返回当前执行上下文中的异步数据上下文。只有在 `useAsyncData` 函数执行期间(同步部分)才会返回有效的上下文对象,
|
|
221
|
+
* 在其他情况下(如外部调用、异步回调中)会返回 `null`。
|
|
222
|
+
*
|
|
223
|
+
* 上下文对象包含 `getData` 和 `updateData` 方法,用于在异步函数执行中访问和更新数据(竞态安全)。
|
|
224
|
+
*
|
|
225
|
+
* @returns 包含 `getData` 和 `updateData` 方法的上下文对象,如果当前不在 `useAsyncData` 执行上下文中则返回 `null`
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* // 正确用法:在 useAsyncData 内部同步调用
|
|
229
|
+
* const { queryData } = useAsyncData((id = 1) => {
|
|
230
|
+
* const { getData, updateData } = getAsyncDataContext()
|
|
231
|
+
* // 使用 getData 获取当前数据
|
|
232
|
+
* const currentData = getData()
|
|
233
|
+
* // 执行异步操作
|
|
234
|
+
* const newData = await fetch(`/api/data/${id}`)
|
|
235
|
+
* // 使用 updateData 更新数据
|
|
236
|
+
* updateData(newData)
|
|
237
|
+
* return newData
|
|
238
|
+
* })
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* // 在 useAsyncData 外部调用会返回 null
|
|
242
|
+
* const context = getAsyncDataContext() // context === null
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* // 在异步回调中调用也会返回 null
|
|
246
|
+
* const { queryData } = useAsyncData((id) => {
|
|
247
|
+
* setTimeout(() => {
|
|
248
|
+
* const context = getAsyncDataContext() // context === null
|
|
249
|
+
* }, 1000)
|
|
250
|
+
* return fetch(`/api/data/${id}`)
|
|
251
|
+
* })
|
|
252
|
+
*/
|
|
253
|
+
export declare function getAsyncDataContext(): ReturnType<ContextGetter> | null;
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Group 类型(基于 Method 类型)
|
|
257
|
+
*/
|
|
258
|
+
declare type GroupType<M extends BaseFunction> = {
|
|
259
|
+
loading: boolean;
|
|
260
|
+
error: any;
|
|
261
|
+
arguments: Parameters<M> | undefined;
|
|
262
|
+
argumentFirst: Parameters<M>['0'] | undefined;
|
|
263
|
+
data: Awaited<ReturnType<M>> | undefined;
|
|
264
|
+
dataExpired: boolean;
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* 基础函数监控器接口
|
|
269
|
+
*
|
|
270
|
+
* @description 提供函数执行生命周期的事件发布订阅机制。
|
|
271
|
+
* 支持监听 init、before、after、fulfill、reject 等事件。
|
|
272
|
+
*/
|
|
273
|
+
declare interface InternalFunctionMonitor {
|
|
274
|
+
/* Excluded from this release type: use */
|
|
275
|
+
/* Excluded from this release type: get */
|
|
276
|
+
/**
|
|
277
|
+
* 注册事件监听器
|
|
278
|
+
*
|
|
279
|
+
* @template T - 事件类型
|
|
280
|
+
*
|
|
281
|
+
* @param event - 事件类型
|
|
282
|
+
* @param handler - 事件处理函数
|
|
283
|
+
*/
|
|
284
|
+
on<T extends keyof FunctionMonitorEventMap>(event: T, handler: EventHandler<T>): void;
|
|
285
|
+
/**
|
|
286
|
+
* 移除事件监听器
|
|
287
|
+
*
|
|
288
|
+
* @template T - 事件类型
|
|
289
|
+
*
|
|
290
|
+
* @param event - 事件类型
|
|
291
|
+
* @param handler - 要移除的事件处理函数
|
|
292
|
+
*/
|
|
293
|
+
off<T extends keyof FunctionMonitorEventMap>(event: T, handler: EventHandler<T>): void;
|
|
294
|
+
/**
|
|
295
|
+
* 触发事件
|
|
296
|
+
*
|
|
297
|
+
* @param event - 事件类型
|
|
298
|
+
* @param data - 事件数据
|
|
299
|
+
*/
|
|
300
|
+
emit(event: 'init', data: FunctionMonitorEventMap['init']): void;
|
|
301
|
+
emit(event: 'before', data: FunctionMonitorEventMap['before']): void;
|
|
302
|
+
emit(event: 'fulfill', data: FunctionMonitorEventMap['fulfill']): void;
|
|
303
|
+
emit(event: 'reject', data: FunctionMonitorEventMap['reject']): void;
|
|
304
|
+
emit(event: 'after', data: FunctionMonitorEventMap['after']): void;
|
|
305
|
+
emit(event: 'track:updated', data: FunctionMonitorEventMap['track:updated']): void;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* 调用追踪对象
|
|
310
|
+
*
|
|
311
|
+
* @description 表示单次函数调用的追踪信息,包含调用序号、状态和关联数据。
|
|
312
|
+
* 用于处理竞态条件,确保只有最新调用的状态才会更新到最终结果。
|
|
313
|
+
*/
|
|
314
|
+
declare type InternalTrack = {
|
|
315
|
+
/** 调用序号,唯一标识每次调用 */
|
|
316
|
+
readonly sn: number;
|
|
317
|
+
/** 检查当前是否处于指定状态 */
|
|
318
|
+
is: (state?: TrackQueryState) => boolean;
|
|
319
|
+
/** 标记为成功 */
|
|
320
|
+
fulfill: () => void;
|
|
321
|
+
/** 标记为失败 */
|
|
322
|
+
reject: () => void;
|
|
323
|
+
/** 存储关联数据(使用 Symbol 作为键) */
|
|
324
|
+
setData: (key: symbol, value?: any) => void;
|
|
325
|
+
/** 获取关联数据 */
|
|
326
|
+
getData: <V = any>(key: symbol) => V | undefined;
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* 判断一个类型是否为联合类型 (Union Type)。
|
|
331
|
+
*
|
|
332
|
+
* @template T - 待检查的类型。
|
|
333
|
+
* @example
|
|
334
|
+
* IsUnion<string | number> // true
|
|
335
|
+
* IsUnion<string> // false
|
|
336
|
+
*/
|
|
337
|
+
declare type IsUnion<T, U = T> = T extends U ? [U] extends [T] ? false : true : never;
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* 两个类型的智能合并。
|
|
341
|
+
* 从 A 中剔除 B 已有的键,然后合并 B。若有同名键,B 的类型将覆盖 A。
|
|
342
|
+
* 支持联合类型分发:如果 A 是联合类型,合并操作将分别应用于每个成员。
|
|
343
|
+
* @template A - 基础类型。
|
|
344
|
+
* @template B - 覆盖类型(高优先级)。
|
|
345
|
+
* @example
|
|
346
|
+
* type Res = Merge<{ a: string, b: number }, { b: string }>; // { a: string, b: string }
|
|
347
|
+
*/
|
|
348
|
+
declare type Merge<A, B> = A extends any ? Simplify<Omit<A, keyof B> & B> : never;
|
|
349
|
+
|
|
350
|
+
declare type MergeAddonResults<AddonResults extends any[]> = MergeTypes<ObjectShapeList<[
|
|
351
|
+
...GetAddonBasicResults<AddonResults>,
|
|
352
|
+
...GetAddonAdvanceResults<AddonResults>
|
|
353
|
+
]>>;
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* 递归合并元组/数组中的所有类型。
|
|
357
|
+
* 将数组中的每一项依次从左到右执行 Merge 操作。
|
|
358
|
+
* @template Items - 包含待合并项的只读数组/元组。
|
|
359
|
+
* @template Acc - 累加器,记录当前合并的结果,默认为空对象。
|
|
360
|
+
* @example
|
|
361
|
+
* type Merged = MergeTypes<[{a: 1}, {b: 2}, {a: 3}]>; // { a: 3, b: 2 }
|
|
362
|
+
*/
|
|
363
|
+
declare type MergeTypes<Items extends readonly any[], Acc = {}> = Items extends readonly [infer Item, ...infer Rest] ? MergeTypes<Rest, Merge<Acc, Item>> : Acc;
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* 确保字符串非空。
|
|
367
|
+
* 如果输入字符串 `S` 为空字符串,则返回默认类型 `D`,否则返回 `S`。
|
|
368
|
+
* @template S - 输入的字符串字面量类型。
|
|
369
|
+
* @template D - 如果 S 为空时的回退默认值。
|
|
370
|
+
*/
|
|
371
|
+
declare type NonEmptyString<S extends string, D extends string> = S extends '' ? D : S;
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* 基础逻辑工具:取反
|
|
375
|
+
*/
|
|
376
|
+
declare type Not<T extends boolean> = T extends true ? false : true;
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* 提取类型的“对象形状”。
|
|
380
|
+
* 该工具旨在过滤掉非纯对象类型:
|
|
381
|
+
* 1. 识别并排除 `any`(转为 `{}`)。
|
|
382
|
+
* 2. 排除函数、数组、null、undefined 等(均转为 `{}`)。
|
|
383
|
+
* 3. 仅保留纯粹的对象结构。
|
|
384
|
+
* @template T - 待检查的类型。
|
|
385
|
+
*/
|
|
386
|
+
declare type ObjectShape<T> = 0 extends (1 & T) ? {} : T extends BaseFunction ? {} : T extends readonly any[] ? {} : T extends object ? T : {};
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* 批量提取对象形状。
|
|
390
|
+
* 将数组或元组中的每一项转换为对应的 `ObjectShape`。
|
|
391
|
+
* @template List - 待转换的类型列表。
|
|
392
|
+
*/
|
|
393
|
+
declare type ObjectShapeList<List extends readonly any[]> = {
|
|
394
|
+
[K in keyof List]: ObjectShape<List[K]>;
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* 展平复杂的交叉类型,提升 IDE 的悬浮提示体验。
|
|
399
|
+
* 将 `A & B` 形式的交叉类型映射为单一的扁平对象结构,从而显著提升 IDE 悬浮提示的可读性。
|
|
400
|
+
*
|
|
401
|
+
* @template T - 待简化的对象类型。
|
|
402
|
+
*/
|
|
403
|
+
declare type Simplify<T> = {
|
|
404
|
+
[K in keyof T]: T[K];
|
|
405
|
+
} & {};
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* 驼峰化工具:根据位置决定应用小驼峰还是大驼峰
|
|
409
|
+
* @param S - 待转换的字符串
|
|
410
|
+
* @param IsFirst - 是否作为结果字符串的起始词(起始词小写,后续词大写)
|
|
411
|
+
*/
|
|
412
|
+
declare type ToCamel<S extends string, IsFirst extends boolean> = IsFirst extends true ? Uncapitalize<S> : Capitalize<S>;
|
|
413
|
+
|
|
414
|
+
declare type Track = Simplify<Pick<InternalTrack, 'sn' | 'is' | 'getData' | 'setData'> & {
|
|
415
|
+
takeData: <V = any>(key: symbol) => V | undefined;
|
|
416
|
+
}>;
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Track 查询状态类型
|
|
420
|
+
*
|
|
421
|
+
* @description 用于查询 Track 状态,包括 'finished'(已完成,无论是成功还是失败)
|
|
422
|
+
*/
|
|
423
|
+
declare type TrackQueryState = TrackState | 'finished';
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Track 状态类型
|
|
427
|
+
*
|
|
428
|
+
* @description 表示调用追踪对象的状态:pending(等待中)、fulfilled(成功)、rejected(失败)
|
|
429
|
+
*/
|
|
430
|
+
declare type TrackState = 'pending' | 'fulfilled' | 'rejected';
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* @deprecated 已废弃,请使用 getAsyncDataContext 替代
|
|
434
|
+
*
|
|
435
|
+
* 将增强的第一个参数解构为原始参数和上下文对象。
|
|
436
|
+
* 当 `options.enhanceFirstArgument = true` 时,传递给异步函数的第一个参数会被增强为包含原始参数和上下文方法的对象。
|
|
437
|
+
*
|
|
438
|
+
* @param arg 增强后的第一个参数
|
|
439
|
+
* @param defaultValue 当原始参数为 undefined 时的默认值
|
|
440
|
+
* @returns 包含原始参数和上下文方法的对象
|
|
441
|
+
*
|
|
442
|
+
* @example
|
|
443
|
+
* // 使用 unFirstArgumentEnhanced(已废弃)
|
|
444
|
+
* const { queryData } = useAsyncData((id) => {
|
|
445
|
+
* const { firstArgument, getData, updateData } = unFirstArgumentEnhanced(id, 1)
|
|
446
|
+
* // 使用 firstArgument, getData, updateData
|
|
447
|
+
* return fetch(`/api/data/${firstArgument}`)
|
|
448
|
+
* }, { enhanceFirstArgument: true })
|
|
449
|
+
*
|
|
450
|
+
* @example
|
|
451
|
+
* // 迁移到 getAsyncDataContext
|
|
452
|
+
* const { queryData } = useAsyncData((id = 1) => {
|
|
453
|
+
* const { getData, updateData } = getAsyncDataContext()
|
|
454
|
+
* // 使用 id, getData, updateData
|
|
455
|
+
* return fetch(`/api/data/${id}`)
|
|
456
|
+
* })
|
|
457
|
+
*/
|
|
458
|
+
export declare function unFirstArgumentEnhanced<Arg = any, Data = any>(arg: Arg, defaultValue?: Arg): Arg extends undefined ? FirstArgumentEnhanced<Arg, Data> : Required<FirstArgumentEnhanced<Arg, Data>>;
|
|
459
|
+
|
|
460
|
+
/** useAsync 函数类型 */
|
|
461
|
+
declare interface UseAsync {
|
|
462
|
+
/**
|
|
463
|
+
* 封装异步函数,提供 loading、error、arguments 等响应式状态。不指定名称时使用默认 'method'。
|
|
464
|
+
*
|
|
465
|
+
* @description
|
|
466
|
+
* 将异步函数包装为可调用的方法,并自动管理其执行状态。返回的函数保持原有签名,
|
|
467
|
+
* 可原样接收参数和返回 Promise。适用于提交、删除、确认等不关心返回数据的场景。
|
|
468
|
+
*
|
|
469
|
+
* @param fn - 要封装的异步函数
|
|
470
|
+
* @param options - 配置选项,支持 immediate、watch、setup 等
|
|
471
|
+
* @returns 默认 name='method',映射为 method、methodLoading、methodArguments、methodArgumentFirst、methodError
|
|
472
|
+
*
|
|
473
|
+
* @example
|
|
474
|
+
* const { method, methodLoading } = useAsync(() => api.confirm())
|
|
475
|
+
* method()
|
|
476
|
+
*
|
|
477
|
+
* @see {@link useAsyncData} - 需要展示异步返回数据时使用
|
|
478
|
+
* @see {@link UseAsyncOptions} - 完整配置选项
|
|
479
|
+
* @see {@link UseAsyncResult} - 返回值类型定义
|
|
480
|
+
*/
|
|
481
|
+
<Fn extends BaseFunction, AddonResults extends any[] = any[]>(fn: Fn, options?: UseAsyncOptions<Fn, AddonResults>): UseAsyncResult<Fn, UseAsyncNameDefault, AddonResults>;
|
|
482
|
+
/**
|
|
483
|
+
* 封装异步函数,提供 loading、error、arguments 等响应式状态。指定名称以自定义函数及关联状态的命名。
|
|
484
|
+
*
|
|
485
|
+
* @remarks 推荐用法。自定义名称可提升代码可读性。
|
|
486
|
+
*
|
|
487
|
+
* @description
|
|
488
|
+
* 将异步函数包装为可调用的方法,并自动管理其执行状态。返回的函数保持原有签名,
|
|
489
|
+
* 可原样接收参数和返回 Promise。适用于提交、删除、确认等不关心返回数据的场景。
|
|
490
|
+
*
|
|
491
|
+
* @param name - 函数及关联状态的名称。命名映射:`{name}`→函数,`{name}Loading`→加载状态,`{name}Arguments`→参数列表,`{name}ArgumentFirst`→首个参数,`{name}Error`→异常
|
|
492
|
+
* @param fn - 要封装的异步函数
|
|
493
|
+
* @param options - 配置选项,支持 immediate、watch、setup 等
|
|
494
|
+
* @returns 根据 name 映射:{name}、{name}Loading、{name}Arguments、{name}ArgumentFirst、{name}Error
|
|
495
|
+
*
|
|
496
|
+
* @example
|
|
497
|
+
* const { confirm, confirmLoading, confirmError } = useAsync('confirm', () => api.confirm())
|
|
498
|
+
* confirm()
|
|
499
|
+
*
|
|
500
|
+
* @example
|
|
501
|
+
* const { submit } = useAsync('submit', (id: string, payload: any) => api.submit(id, payload))
|
|
502
|
+
* submit('item1', { force: true }).then(result => console.log(result))
|
|
503
|
+
*
|
|
504
|
+
* @example
|
|
505
|
+
* const { init, initLoading } = useAsync('init', () => api.init(), { immediate: true })
|
|
506
|
+
*
|
|
507
|
+
* @example
|
|
508
|
+
* const { init } = useAsync('init', () => api.init(props.id), {
|
|
509
|
+
* watch: () => props.id,
|
|
510
|
+
* immediate: true
|
|
511
|
+
* })
|
|
512
|
+
*
|
|
513
|
+
* @example
|
|
514
|
+
* const { init } = useAsync('init', () => api.init(), {
|
|
515
|
+
* setup: (fn) => debounce(fn, 500)
|
|
516
|
+
* })
|
|
517
|
+
*
|
|
518
|
+
* @see {@link useAsyncData} - 需要展示异步返回数据时使用
|
|
519
|
+
* @see {@link UseAsyncOptions} - 完整配置选项
|
|
520
|
+
* @see {@link UseAsyncResult} - 返回值类型定义
|
|
521
|
+
*/
|
|
522
|
+
<Fn extends BaseFunction, Name extends string = string, AddonResults extends any[] = any[]>(name: Name, fn: Fn, options?: UseAsyncOptions<Fn, AddonResults>): UseAsyncResult<Fn, Name, AddonResults>;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* 封装异步函数,提供 loading、error、arguments 等响应式状态。
|
|
527
|
+
*
|
|
528
|
+
* @remarks
|
|
529
|
+
* 调用方式(详见 {@link UseAsync}):
|
|
530
|
+
* - `useAsync(fn, options?)` - 默认名称 'method',返回 method、methodLoading 等
|
|
531
|
+
* - `useAsync(name, fn, options?)` - 自定义名称,如 'confirm' 返回 confirm、confirmLoading 等
|
|
532
|
+
*
|
|
533
|
+
* @see UseAsync - 完整 API 文档、示例、配置选项
|
|
534
|
+
*/
|
|
535
|
+
declare const useAsync: UseAsync;
|
|
536
|
+
export { useAsync }
|
|
537
|
+
export { useAsync as useAsyncFunction }
|
|
538
|
+
|
|
539
|
+
/** useAsyncData 函数类型 */
|
|
540
|
+
declare interface UseAsyncData {
|
|
541
|
+
/**
|
|
542
|
+
* 管理异步数据,提供响应式数据、查询函数及关联状态。不指定名称时使用默认 'data'。
|
|
543
|
+
*
|
|
544
|
+
* @description
|
|
545
|
+
* 将异步函数包装为查询方法,自动管理返回数据的响应式更新。返回 data、queryData、queryDataLoading、dataExpired 等。
|
|
546
|
+
*
|
|
547
|
+
* @param fn - 返回数据的异步函数
|
|
548
|
+
* @param options - 配置选项,支持 initialData、shallow、immediate、watch、setup 等
|
|
549
|
+
* @returns 默认 name='data',映射为 data、queryData、queryDataLoading、queryDataArguments、queryDataError、dataExpired
|
|
550
|
+
*
|
|
551
|
+
* @example
|
|
552
|
+
* const { data, queryData, queryDataLoading } = useAsyncData(() => api.getUser())
|
|
553
|
+
* queryData()
|
|
554
|
+
*
|
|
555
|
+
* @see {@link useAsync} - 不需要展示数据时使用
|
|
556
|
+
* @see {@link getAsyncDataContext} - 在异步执行过程中更新数据
|
|
557
|
+
* @see {@link UseAsyncDataOptions} - 完整配置选项
|
|
558
|
+
* @see {@link UseAsyncDataResult} - 返回值类型定义
|
|
559
|
+
*/
|
|
560
|
+
<Data = any, Fn extends (...args: any) => Data | Promise<Data> | PromiseLike<Data> = (...args: any) => Data | Promise<Data> | PromiseLike<Data>, Shallow extends boolean = false, AddonResults extends any[] = any[]>(fn: Fn, options?: UseAsyncDataOptions<Fn, Shallow, AddonResults>): UseAsyncDataResult<Fn, UseAsyncDataNameDefault, Shallow, AddonResults>;
|
|
561
|
+
/**
|
|
562
|
+
* 管理异步数据,提供响应式数据、查询函数及关联状态。指定名称以自定义数据及关联状态的命名。
|
|
563
|
+
*
|
|
564
|
+
* @remarks 推荐用法。自定义名称可提升代码可读性。
|
|
565
|
+
*
|
|
566
|
+
* @description
|
|
567
|
+
* 将异步函数包装为查询方法,自动管理返回数据的响应式更新。name='user' 时返回 user、queryUser、queryUserLoading、queryUserArguments、queryUserError、userExpired 等。
|
|
568
|
+
*
|
|
569
|
+
* @param name - 数据及关联状态的名称。命名映射:`{name}`→数据,`query{Name}`→查询函数,`query{Name}Loading`→加载状态,`query{Name}Arguments`→参数列表,`query{Name}Error`→异常,`{name}Expired`→数据过期
|
|
570
|
+
* @param fn - 返回数据的异步函数
|
|
571
|
+
* @param options - 配置选项,支持 initialData、shallow、immediate、watch、setup 等
|
|
572
|
+
* @returns 根据 name 映射:{name}、query{Name}、query{Name}Loading、query{Name}Arguments、query{Name}Error、{name}Expired
|
|
573
|
+
*
|
|
574
|
+
* @example
|
|
575
|
+
* const { user, queryUser, queryUserLoading } = useAsyncData('user', () => api.getUser())
|
|
576
|
+
* queryUser()
|
|
577
|
+
*
|
|
578
|
+
* @example
|
|
579
|
+
* const { user, queryUser } = useAsyncData('user', (id: string) => api.getUser(id))
|
|
580
|
+
* queryUser('user1') // user.value 自动更新为结果
|
|
581
|
+
*
|
|
582
|
+
* @see {@link useAsync} - 不需要展示数据时使用
|
|
583
|
+
* @see {@link getAsyncDataContext} - 在异步执行过程中更新数据
|
|
584
|
+
* @see {@link UseAsyncDataOptions} - 完整配置选项
|
|
585
|
+
* @see {@link UseAsyncDataResult} - 返回值类型定义
|
|
586
|
+
*/
|
|
587
|
+
<Data = any, Fn extends (...args: any) => Data | Promise<Data> | PromiseLike<Data> = (...args: any) => Data | Promise<Data> | PromiseLike<Data>, DataName extends string = string, Shallow extends boolean = false, AddonResults extends any[] = any[]>(name: DataName, fn: Fn, options?: UseAsyncDataOptions<Fn, Shallow, AddonResults>): UseAsyncDataResult<Fn, DataName, Shallow, AddonResults>;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* 管理异步数据,提供响应式数据、查询函数及关联状态。
|
|
592
|
+
*
|
|
593
|
+
* @remarks
|
|
594
|
+
* 调用方式(详见 {@link UseAsyncData}):
|
|
595
|
+
* - `useAsyncData(fn, options?)` - 默认名称 'data',返回 data、queryData、dataExpired 等
|
|
596
|
+
* - `useAsyncData(name, fn, options?)` - 自定义名称,如 'user' 返回 user、queryUser、userExpired 等
|
|
597
|
+
*
|
|
598
|
+
* @see UseAsyncData - 完整 API 文档、示例、配置选项
|
|
599
|
+
*/
|
|
600
|
+
export declare const useAsyncData: UseAsyncData;
|
|
601
|
+
|
|
602
|
+
declare type UseAsyncDataNameDefault = 'data';
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* useAsyncData 配置选项
|
|
606
|
+
*
|
|
607
|
+
* @extends UseAsyncOptions - 继承 useAsync 的全部配置(immediate、watch、setup 等)
|
|
608
|
+
*
|
|
609
|
+
* @template Fn - 异步函数类型
|
|
610
|
+
* @template Shallow - 是否使用 shallowRef
|
|
611
|
+
* @template AddonResults - 插件扩展的返回值
|
|
612
|
+
*/
|
|
613
|
+
declare interface UseAsyncDataOptions<Fn extends BaseFunction, Shallow extends boolean, AddonResults extends any[] = any[]> extends UseAsyncOptions<Fn, AddonResults> {
|
|
614
|
+
/** 数据的初始值,在首次查询完成前使用 */
|
|
615
|
+
initialData?: Awaited<ReturnType<Fn>>;
|
|
616
|
+
/** 为 true 时使用 shallowRef 包裹数据,适用于大对象优化 */
|
|
617
|
+
shallow?: Shallow;
|
|
618
|
+
/** @deprecated 已废弃,请使用 getAsyncDataContext */
|
|
619
|
+
enhanceFirstArgument?: boolean;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* useAsyncData 返回值类型
|
|
624
|
+
*
|
|
625
|
+
* @description
|
|
626
|
+
* 根据传入的 name 动态生成属性名。
|
|
627
|
+
*
|
|
628
|
+
* 命名映射规则(name 采用小驼峰,如 'user';Name 为首字母大写,如 'User'):
|
|
629
|
+
* - `{name}` → 异步返回的数据
|
|
630
|
+
* - `query{Name}` → 触发数据更新的查询函数
|
|
631
|
+
* - `query{Name}Loading` → 加载状态
|
|
632
|
+
* - `query{Name}Arguments` → 最近一次调用的参数列表
|
|
633
|
+
* - `query{Name}ArgumentFirst` → 参数列表的首个值
|
|
634
|
+
* - `query{Name}Error` → 查询时的异常
|
|
635
|
+
* - `{name}Expired` → 数据是否过期
|
|
636
|
+
*
|
|
637
|
+
* @template Fn - 异步函数类型
|
|
638
|
+
* @template Name - 数据名称,默认 'data'
|
|
639
|
+
* @template Shallow - 是否使用 shallowRef
|
|
640
|
+
* @template AddonResults - 插件扩展的返回值
|
|
641
|
+
*/
|
|
642
|
+
declare type UseAsyncDataResult<Fn extends BaseFunction, Name extends string, Shallow extends boolean = false, AddonResults extends any[] = any[]> = Simplify<UseAsyncResult<Fn, `query${Capitalize<(NonEmptyString<Name, UseAsyncDataNameDefault>)>}`, []> & {
|
|
643
|
+
[K in (NonEmptyString<Name, UseAsyncDataNameDefault>)]: Shallow extends true ? ShallowRef<Awaited<ReturnType<Fn>>> : Ref<Awaited<ReturnType<Fn>>>;
|
|
644
|
+
} & {
|
|
645
|
+
[K in `${NonEmptyString<Name, UseAsyncDataNameDefault>}Expired`]: Ref<boolean>;
|
|
646
|
+
} & CamelReplaceKeys<MergeAddonResults<AddonResults>, Name>>;
|
|
647
|
+
|
|
648
|
+
declare type UseAsyncNameDefault = 'method';
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* useAsync 配置选项
|
|
652
|
+
*
|
|
653
|
+
* @template Fn - 异步函数类型
|
|
654
|
+
* @template AddonResults - 插件扩展的返回值
|
|
655
|
+
*/
|
|
656
|
+
declare type UseAsyncOptions<Fn extends BaseFunction, AddonResults extends any[] = any[]> = {
|
|
657
|
+
/** 监听的数据源,变化时执行异步函数。支持 Vue WatchSource 的全部形式 */
|
|
658
|
+
watch?: WatchSource | WatchSource[];
|
|
659
|
+
/** watch 的配置项,如 immediate、deep、handlerCreator 等 */
|
|
660
|
+
watchOptions?: UseAsyncWatchOptions<Fn>;
|
|
661
|
+
/** 是否在创建时立即执行一次 */
|
|
662
|
+
immediate?: boolean;
|
|
663
|
+
/** 转换最终函数或注册外部监听(如 debounce、事件监听、轮询) */
|
|
664
|
+
setup?: (fn: Fn) => BaseFunction | void;
|
|
665
|
+
/** 自定义插件,扩展返回值 */
|
|
666
|
+
addons?: Addons<Fn, AddonResults>;
|
|
667
|
+
};
|
|
668
|
+
|
|
669
|
+
/**
|
|
670
|
+
* useAsync 返回值类型
|
|
671
|
+
*
|
|
672
|
+
* @description
|
|
673
|
+
* 根据传入的 name 动态生成属性名。
|
|
674
|
+
*
|
|
675
|
+
* 命名映射规则(name 采用小驼峰,如 'confirm'):
|
|
676
|
+
* - `{name}` → 包装后的异步函数
|
|
677
|
+
* - `{name}Loading` → 加载状态
|
|
678
|
+
* - `{name}Arguments` → 最近一次调用的参数列表
|
|
679
|
+
* - `{name}ArgumentFirst` → 参数列表的首个值
|
|
680
|
+
* - `{name}Error` → 执行时的异常
|
|
681
|
+
*
|
|
682
|
+
* @template Fn - 异步函数类型
|
|
683
|
+
* @template Name - 名称,默认 'method'
|
|
684
|
+
* @template AddonResults - 插件扩展的返回值
|
|
685
|
+
*/
|
|
686
|
+
declare type UseAsyncResult<Fn extends BaseFunction, Name extends string, AddonResults extends any[] = any[]> = Simplify<{
|
|
687
|
+
[K in NonEmptyString<Name, UseAsyncNameDefault>]: Fn;
|
|
688
|
+
} & {
|
|
689
|
+
[K in `${NonEmptyString<Name, UseAsyncNameDefault>}Loading`]: Ref<boolean>;
|
|
690
|
+
} & {
|
|
691
|
+
[K in `${NonEmptyString<Name, UseAsyncNameDefault>}Arguments`]: ComputedRef<Parameters<Fn>>;
|
|
692
|
+
} & {
|
|
693
|
+
[K in `${NonEmptyString<Name, UseAsyncNameDefault>}ArgumentFirst`]: ComputedRef<Parameters<Fn>['0']>;
|
|
694
|
+
} & {
|
|
695
|
+
[K in `${NonEmptyString<Name, UseAsyncNameDefault>}Error`]: Ref<any>;
|
|
696
|
+
} & CamelReplaceKeys<MergeAddonResults<AddonResults>, Name>>;
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* watch 配置选项
|
|
700
|
+
*
|
|
701
|
+
* @extends WatchOptions - 继承 Vue watch 的全部配置(immediate、deep、flush、once 等)
|
|
702
|
+
*/
|
|
703
|
+
declare interface UseAsyncWatchOptions<Fn extends BaseFunction> extends WatchOptions {
|
|
704
|
+
/** 自定义 watch handler,用于过滤或转换监听源 */
|
|
705
|
+
handlerCreator?: (fn: Fn) => WatchCallback;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
/**
|
|
709
|
+
* withAddonGroup addon
|
|
710
|
+
*
|
|
711
|
+
* @description 用于支持"并行、同源、同语义操作"场景,通过 key 分组管理状态。
|
|
712
|
+
*
|
|
713
|
+
* 核心特性:
|
|
714
|
+
* - 固定属性:`group[key]` 在被创建后始终包含 `loading`、`error`、`arguments`、`data`
|
|
715
|
+
* - 直接值:`group[key]?.loading` 是 `boolean`,不是 `Ref<boolean>`。注:group 本身是 ref,其属性在访问时会自动解包为直接值
|
|
716
|
+
* - 需要使用可选链:`group[key]` 可能为 `undefined`(当该 key 还没有被调用过时)
|
|
717
|
+
* - 自动同步:所有 addon 的 setData 操作自动同步到 group
|
|
718
|
+
* - 竞态处理:只有最新调用的状态才会更新到 group
|
|
719
|
+
*
|
|
720
|
+
* @param config - 配置对象
|
|
721
|
+
* @param config.key - 根据函数参数生成 group key 的函数
|
|
722
|
+
* @param config.scope - 根据函数参数获取请求的 scope(可选)
|
|
723
|
+
*
|
|
724
|
+
* @returns addon 函数
|
|
725
|
+
*
|
|
726
|
+
* @example
|
|
727
|
+
* ```ts
|
|
728
|
+
* const { confirm, confirmGroup } = useAsync('confirm', confirmApi, {
|
|
729
|
+
* addons: [withAddonGroup({ key: (args) => args[0] })]
|
|
730
|
+
* })
|
|
731
|
+
*
|
|
732
|
+
* // 模板中使用
|
|
733
|
+
* <button
|
|
734
|
+
* :loading="confirmGroup[item.id]?.loading"
|
|
735
|
+
* @click="confirm(item.id)"
|
|
736
|
+
* >
|
|
737
|
+
* 确认
|
|
738
|
+
* </button>
|
|
739
|
+
* ```
|
|
740
|
+
*/
|
|
741
|
+
export declare function withAddonGroup(config: WithAddonGroupConfig): <T extends AddonTypes>(params: {
|
|
742
|
+
monitor: FunctionMonitor;
|
|
743
|
+
_types: T;
|
|
744
|
+
}) => {
|
|
745
|
+
__name__Group: ComputedRef<Record<string | number, GroupType<T['Method']>>>;
|
|
746
|
+
clear__name__Group: (key?: string | number) => void;
|
|
747
|
+
};
|
|
748
|
+
|
|
749
|
+
/**
|
|
750
|
+
* withAddonGroup 配置
|
|
751
|
+
*/
|
|
752
|
+
declare interface WithAddonGroupConfig {
|
|
753
|
+
/**
|
|
754
|
+
* 根据函数参数生成 group key
|
|
755
|
+
*
|
|
756
|
+
* @param args - 函数调用参数
|
|
757
|
+
* @returns group key(string 或 number)
|
|
758
|
+
*/
|
|
759
|
+
key: (args: any[]) => string | number;
|
|
760
|
+
/**
|
|
761
|
+
* 根据函数参数获取请求的 scope
|
|
762
|
+
*
|
|
763
|
+
* @param args - 函数调用参数
|
|
764
|
+
* @returns scope(string 或 number)
|
|
765
|
+
*/
|
|
766
|
+
scope?: (args: any[]) => string | number;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
export { }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue-asyncx",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.3",
|
|
4
4
|
"description": "让异步像写诗的 Vue 3 组合式工具库",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
"types": "./dist/vue-asyncx.d.ts",
|
|
13
13
|
"exports": {
|
|
14
14
|
".": {
|
|
15
|
-
"types":
|
|
15
|
+
"types": {
|
|
16
|
+
"import": "./dist/vue-asyncx.d.ts",
|
|
17
|
+
"require": "./dist/vue-asyncx.d.cts"
|
|
18
|
+
},
|
|
16
19
|
"import": "./dist/vue-asyncx.js",
|
|
17
20
|
"require": "./dist/vue-asyncx.umd.cjs"
|
|
18
21
|
}
|
|
@@ -55,7 +58,12 @@
|
|
|
55
58
|
"docs:preview": "vitepress preview docs",
|
|
56
59
|
"pack": "rm -rf ./dist-pack && pnpm pack --pack-destination ./dist-pack && mv ./dist-pack/*.tgz ./dist-pack/vue-asyncx.tgz",
|
|
57
60
|
"build": "vite build && node scripts/post-build-dts.js",
|
|
58
|
-
"run:build-pack": "run-s build pack"
|
|
61
|
+
"run:build-pack": "run-s build pack",
|
|
62
|
+
"check:exports": "publint ./dist-pack/vue-asyncx.tgz",
|
|
63
|
+
"check:types": "attw ./dist-pack/vue-asyncx.tgz",
|
|
64
|
+
"check:all": "run-s run:build-pack check:exports check:types",
|
|
65
|
+
"prepublishOnly": "run-s check:all",
|
|
66
|
+
"release": "node scripts/release.js"
|
|
59
67
|
},
|
|
60
68
|
"keywords": [
|
|
61
69
|
"vue",
|
|
@@ -77,22 +85,25 @@
|
|
|
77
85
|
"provenance": true
|
|
78
86
|
},
|
|
79
87
|
"devDependencies": {
|
|
88
|
+
"@arethetypeswrong/cli": "^0.18.2",
|
|
89
|
+
"@inquirer/prompts": "^8.3.2",
|
|
80
90
|
"@types/node": "^22.19.1",
|
|
81
|
-
"@vitest/browser-playwright": "^4.0
|
|
82
|
-
"@vitest/coverage-v8": "^4.0
|
|
83
|
-
"@vitest/ui": "4.0
|
|
91
|
+
"@vitest/browser-playwright": "^4.1.0",
|
|
92
|
+
"@vitest/coverage-v8": "^4.1.0",
|
|
93
|
+
"@vitest/ui": "^4.1.0",
|
|
84
94
|
"@vueuse/core": "^14.0.0",
|
|
85
95
|
"es-toolkit": "^1.42.0",
|
|
86
96
|
"jsdom": "^24.1.1",
|
|
87
97
|
"npm-run-all2": "^8.0.4",
|
|
88
98
|
"oxlint": "^1.0.0",
|
|
89
99
|
"playwright": "^1.58.2",
|
|
100
|
+
"publint": "^0.3.18",
|
|
90
101
|
"rolldown-plugin-dts": "^0.21.8",
|
|
91
102
|
"typescript": "5.9.3",
|
|
92
|
-
"vite": "8.0.0
|
|
103
|
+
"vite": "^8.0.0",
|
|
93
104
|
"vite-plugin-dts": "^4.5.4",
|
|
94
105
|
"vitepress": "^1.6.3",
|
|
95
|
-
"vitest": "^4.0
|
|
106
|
+
"vitest": "^4.1.0",
|
|
96
107
|
"vitest-coverage-merge": "^0.2.0",
|
|
97
108
|
"vue": "^3.0.0",
|
|
98
109
|
"vue-demi": "^0.14.10",
|
|
@@ -101,4 +112,4 @@
|
|
|
101
112
|
"peerDependencies": {
|
|
102
113
|
"vue": "^2.7.0 || >=3.0.0"
|
|
103
114
|
}
|
|
104
|
-
}
|
|
115
|
+
}
|