@cloudcome/utils-vue 1.13.2 → 1.13.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/README.md +1 -1
- package/dist/async.cjs +65 -65
- package/dist/async.cjs.map +1 -1
- package/dist/async.mjs +66 -67
- package/dist/async.mjs.map +1 -1
- package/dist/component/self.d.ts +4 -4
- package/dist/component.cjs +110 -13
- package/dist/component.cjs.map +1 -1
- package/dist/component.d.ts +1 -1
- package/dist/component.mjs +108 -17
- package/dist/component.mjs.map +1 -1
- package/dist/event.cjs +39 -32
- package/dist/event.cjs.map +1 -1
- package/dist/event.mjs +39 -33
- package/dist/event.mjs.map +1 -1
- package/dist/index.cjs +8 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +9 -5
- package/dist/index.mjs.map +1 -1
- package/dist/request.cjs +72 -74
- package/dist/request.cjs.map +1 -1
- package/dist/request.d.ts +1 -1
- package/dist/request.mjs +71 -74
- package/dist/request.mjs.map +1 -1
- package/dist/shared.cjs +87 -26
- package/dist/shared.cjs.map +1 -1
- package/dist/shared.d.ts +1 -1
- package/dist/shared.mjs +87 -28
- package/dist/shared.mjs.map +1 -1
- package/dist/state.cjs +26 -25
- package/dist/state.cjs.map +1 -1
- package/dist/state.mjs +27 -27
- package/dist/state.mjs.map +1 -1
- package/dist/time.cjs +45 -35
- package/dist/time.cjs.map +1 -1
- package/dist/time.mjs +45 -37
- package/dist/time.mjs.map +1 -1
- package/dist/types.cjs +0 -2
- package/dist/types.mjs +0 -2
- package/package.json +42 -43
- package/dist/life.cjs +0 -16
- package/dist/life.cjs.map +0 -1
- package/dist/life.mjs +0 -17
- package/dist/life.mjs.map +0 -1
- package/dist/types.cjs.map +0 -1
- package/dist/types.mjs.map +0 -1
package/README.md
CHANGED
package/dist/async.cjs
CHANGED
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
require("
|
|
4
|
-
|
|
2
|
+
let vue = require("vue");
|
|
3
|
+
//#region src/async.ts
|
|
5
4
|
function useAsync(fn, options) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
};
|
|
5
|
+
const times = (0, vue.ref)(0);
|
|
6
|
+
const loading = (0, vue.ref)(false);
|
|
7
|
+
const placeholder = options?.placeholder;
|
|
8
|
+
const data = (0, vue.ref)(placeholder ? placeholder() : null);
|
|
9
|
+
const error = (0, vue.ref)(null);
|
|
10
|
+
const state = (0, vue.computed)(() => ({
|
|
11
|
+
times: times.value,
|
|
12
|
+
loading: loading.value,
|
|
13
|
+
data: data.value,
|
|
14
|
+
error: error.value
|
|
15
|
+
}));
|
|
16
|
+
const runAsync = async (...inputs) => {
|
|
17
|
+
loading.value = true;
|
|
18
|
+
error.value = null;
|
|
19
|
+
try {
|
|
20
|
+
await options?.onBefore?.(...inputs);
|
|
21
|
+
times.value++;
|
|
22
|
+
data.value = await fn(...inputs);
|
|
23
|
+
await options?.onSuccess?.(data.value, ...inputs);
|
|
24
|
+
return data.value;
|
|
25
|
+
} catch (err) {
|
|
26
|
+
error.value = err;
|
|
27
|
+
try {
|
|
28
|
+
options?.onError?.(err, ...inputs);
|
|
29
|
+
} catch (_err) {}
|
|
30
|
+
throw err;
|
|
31
|
+
} finally {
|
|
32
|
+
loading.value = false;
|
|
33
|
+
await options?.onAfter?.(...inputs);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const run = (...inputs) => {
|
|
37
|
+
runAsync(...inputs).then();
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
state,
|
|
41
|
+
/**
|
|
42
|
+
* 是否正在加载。
|
|
43
|
+
*/
|
|
44
|
+
loading,
|
|
45
|
+
/**
|
|
46
|
+
* 异步操作返回的数据。
|
|
47
|
+
*/
|
|
48
|
+
data,
|
|
49
|
+
/**
|
|
50
|
+
* 异步操作抛出的错误。
|
|
51
|
+
*/
|
|
52
|
+
error,
|
|
53
|
+
/**
|
|
54
|
+
* 执行异步操作并返回 Promise。
|
|
55
|
+
* @param inputs 异步函数的参数。
|
|
56
|
+
* @returns 异步操作的结果。
|
|
57
|
+
*/
|
|
58
|
+
runAsync,
|
|
59
|
+
/**
|
|
60
|
+
* 执行异步操作但不返回 Promise。
|
|
61
|
+
* @param inputs 异步函数的参数。
|
|
62
|
+
*/
|
|
63
|
+
run
|
|
64
|
+
};
|
|
67
65
|
}
|
|
66
|
+
//#endregion
|
|
68
67
|
exports.useAsync = useAsync;
|
|
69
|
-
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=async.cjs.map
|
package/dist/async.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.cjs","sources":["../src/async.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"async.cjs","names":[],"sources":["../src/async.ts"],"sourcesContent":["import type { AnyArray } from '@cloudcome/utils-core/types';\nimport { type ComputedRef, computed, type Ref, ref } from 'vue';\n\n/**\n * 异步操作的配置选项\n * @template T 异步操作返回的数据类型\n * @template P 异步操作的参数类型\n */\nexport type UseAsyncOptions<I extends AnyArray, O> = {\n placeholder?: () => O;\n\n /**\n * 异步操作开始前的回调函数,可用于执行初始化逻辑或显示加载状态,抛出错误则中断操作\n */\n onBefore?: (...inputs: I) => unknown;\n\n /**\n * 异步操作成功后的回调函数,可用于处理成功后的数据更新或通知。\n * @param data 异步操作返回的数据。\n */\n onSuccess?: (data: O, ...inputs: I) => unknown;\n\n /**\n * 异步操作失败后的回调函数,可用于记录错误日志或显示错误提示。\n * @param err 异步操作抛出的错误。\n */\n onError?: (err: unknown, ...inputs: I) => unknown;\n\n /**\n * 异步操作结束后的回调函数(无论成功或失败),可用于清理操作或触发后续逻辑。\n */\n onAfter?: (...inputs: I) => unknown;\n};\n\nexport type UseAsyncState<O> = {\n times: number;\n loading: boolean;\n error: unknown;\n data: O | null;\n};\n\nexport type UseAsyncStateFilled<O> = {\n times: number;\n loading: boolean;\n error: unknown;\n data: O;\n};\n\nexport type UseAsyncOutput<I extends AnyArray, O> = {\n state: ComputedRef<UseAsyncState<O>>;\n loading: Ref<boolean>;\n data: Ref<O | null>;\n error: Ref<unknown>;\n run: (...inputs: I) => void;\n runAsync: (...inputs: I) => Promise<O>;\n};\n\nexport type UseAsyncOutputFilled<I extends AnyArray, O> = {\n state: ComputedRef<UseAsyncStateFilled<O>>;\n loading: Ref<boolean>;\n data: Ref<O>;\n error: Ref<unknown>;\n run: (...inputs: I) => void;\n runAsync: (...inputs: I) => Promise<O>;\n};\n\n/**\n * 用于处理异步操作的组合式函数。\n * 提供加载状态、数据、错误信息以及执行方法。\n * @template O 异步函数返回的数据类型\n * @template I 异步函数的入参类型\n * @param fn 异步函数,接收参数并返回 Promise。\n * @param options 异步操作的配置选项。\n * @returns 包含状态和操作方法的对象:\n * - loading: 是否正在加载。\n * - data: 异步操作返回的数据。\n * - error: 异步操作抛出的错误。\n * - runAsync: 执行异步操作并返回 Promise。\n * - run: 执行异步操作但不返回 Promise。\n * @example\n * const { loading, data, error, runAsync, run } = useAsync(async (id: number) => {\n * const response = await fetch(`/api/user/${id}`);\n * return response.json();\n * }, {\n * onBefore: () => console.log('Fetching user data...'),\n * onSuccess: (data) => console.log('User data fetched:', data),\n * onError: (err) => console.error('Failed to fetch user data:', err),\n * onFinally: () => console.log('Fetch operation completed.'),\n * });\n */\nexport function useAsync<I extends AnyArray, O>(\n fn: (...inputs: I) => Promise<O>,\n options: Omit<UseAsyncOptions<I, O>, 'placeholder'> & {\n placeholder: () => O;\n },\n): UseAsyncOutputFilled<I, O>;\nexport function useAsync<I extends AnyArray, O>(\n fn: (...inputs: I) => Promise<O>,\n options?: UseAsyncOptions<I, O>,\n): UseAsyncOutput<I, O>;\nexport function useAsync<I extends AnyArray, O>(\n fn: (...inputs: I) => Promise<O>,\n options?: UseAsyncOptions<I, O>,\n): UseAsyncOutput<I, O> {\n const times = ref(0);\n const loading = ref(false);\n const placeholder = options?.placeholder;\n const data = ref(placeholder ? placeholder() : null) as Ref<O | null>;\n const error = ref<unknown>(null);\n const state = computed(() => ({\n times: times.value,\n loading: loading.value,\n data: data.value,\n error: error.value,\n }));\n\n const runAsync = async (...inputs: I): Promise<O> => {\n loading.value = true;\n error.value = null;\n\n try {\n await options?.onBefore?.(...inputs);\n times.value++;\n data.value = await fn(...inputs);\n await options?.onSuccess?.(data.value, ...inputs);\n return data.value;\n } catch (err) {\n error.value = err;\n try {\n options?.onError?.(err, ...inputs);\n } catch (_err) {\n //\n }\n throw err;\n } finally {\n loading.value = false;\n await options?.onAfter?.(...inputs);\n }\n };\n\n const run = (...inputs: I) => {\n runAsync(...inputs).then();\n };\n\n return {\n state,\n /**\n * 是否正在加载。\n */\n loading,\n\n /**\n * 异步操作返回的数据。\n */\n data,\n\n /**\n * 异步操作抛出的错误。\n */\n error,\n\n /**\n * 执行异步操作并返回 Promise。\n * @param inputs 异步函数的参数。\n * @returns 异步操作的结果。\n */\n runAsync,\n\n /**\n * 执行异步操作但不返回 Promise。\n * @param inputs 异步函数的参数。\n */\n run,\n };\n}\n\n// const { run: run1 } = useAsync(() => Promise.resolve(1));\n// run1();\n\n// const { run: run2 } = useAsync((a: number) => Promise.resolve(1));\n// run2(2);\n\n// const { run: run3 } = useAsync((a: number, b: string) => Promise.resolve(1));\n// run3(2, '2');\n"],"mappings":";;;AAoGA,SAAgB,SACd,IACA,SACsB;CACtB,MAAM,SAAA,GAAA,IAAA,KAAY,EAAE;CACpB,MAAM,WAAA,GAAA,IAAA,KAAc,MAAM;CAC1B,MAAM,cAAc,SAAS;CAC7B,MAAM,QAAA,GAAA,IAAA,KAAW,cAAc,aAAa,GAAG,KAAK;CACpD,MAAM,SAAA,GAAA,IAAA,KAAqB,KAAK;CAChC,MAAM,SAAA,GAAA,IAAA,iBAAwB;EAC5B,OAAO,MAAM;EACb,SAAS,QAAQ;EACjB,MAAM,KAAK;EACX,OAAO,MAAM;EACd,EAAE;CAEH,MAAM,WAAW,OAAO,GAAG,WAA0B;EACnD,QAAQ,QAAQ;EAChB,MAAM,QAAQ;EAEd,IAAI;GACF,MAAM,SAAS,WAAW,GAAG,OAAO;GACpC,MAAM;GACN,KAAK,QAAQ,MAAM,GAAG,GAAG,OAAO;GAChC,MAAM,SAAS,YAAY,KAAK,OAAO,GAAG,OAAO;GACjD,OAAO,KAAK;WACL,KAAK;GACZ,MAAM,QAAQ;GACd,IAAI;IACF,SAAS,UAAU,KAAK,GAAG,OAAO;YAC3B,MAAM;GAGf,MAAM;YACE;GACR,QAAQ,QAAQ;GAChB,MAAM,SAAS,UAAU,GAAG,OAAO;;;CAIvC,MAAM,OAAO,GAAG,WAAc;EAC5B,SAAS,GAAG,OAAO,CAAC,MAAM;;CAG5B,OAAO;EACL;;;;EAIA;;;;EAKA;;;;EAKA;;;;;;EAOA;;;;;EAMA;EACD"}
|
package/dist/async.mjs
CHANGED
|
@@ -1,69 +1,68 @@
|
|
|
1
|
-
import "
|
|
2
|
-
|
|
1
|
+
import { computed, ref } from "vue";
|
|
2
|
+
//#region src/async.ts
|
|
3
3
|
function useAsync(fn, options) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
};
|
|
4
|
+
const times = ref(0);
|
|
5
|
+
const loading = ref(false);
|
|
6
|
+
const placeholder = options?.placeholder;
|
|
7
|
+
const data = ref(placeholder ? placeholder() : null);
|
|
8
|
+
const error = ref(null);
|
|
9
|
+
const state = computed(() => ({
|
|
10
|
+
times: times.value,
|
|
11
|
+
loading: loading.value,
|
|
12
|
+
data: data.value,
|
|
13
|
+
error: error.value
|
|
14
|
+
}));
|
|
15
|
+
const runAsync = async (...inputs) => {
|
|
16
|
+
loading.value = true;
|
|
17
|
+
error.value = null;
|
|
18
|
+
try {
|
|
19
|
+
await options?.onBefore?.(...inputs);
|
|
20
|
+
times.value++;
|
|
21
|
+
data.value = await fn(...inputs);
|
|
22
|
+
await options?.onSuccess?.(data.value, ...inputs);
|
|
23
|
+
return data.value;
|
|
24
|
+
} catch (err) {
|
|
25
|
+
error.value = err;
|
|
26
|
+
try {
|
|
27
|
+
options?.onError?.(err, ...inputs);
|
|
28
|
+
} catch (_err) {}
|
|
29
|
+
throw err;
|
|
30
|
+
} finally {
|
|
31
|
+
loading.value = false;
|
|
32
|
+
await options?.onAfter?.(...inputs);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const run = (...inputs) => {
|
|
36
|
+
runAsync(...inputs).then();
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
state,
|
|
40
|
+
/**
|
|
41
|
+
* 是否正在加载。
|
|
42
|
+
*/
|
|
43
|
+
loading,
|
|
44
|
+
/**
|
|
45
|
+
* 异步操作返回的数据。
|
|
46
|
+
*/
|
|
47
|
+
data,
|
|
48
|
+
/**
|
|
49
|
+
* 异步操作抛出的错误。
|
|
50
|
+
*/
|
|
51
|
+
error,
|
|
52
|
+
/**
|
|
53
|
+
* 执行异步操作并返回 Promise。
|
|
54
|
+
* @param inputs 异步函数的参数。
|
|
55
|
+
* @returns 异步操作的结果。
|
|
56
|
+
*/
|
|
57
|
+
runAsync,
|
|
58
|
+
/**
|
|
59
|
+
* 执行异步操作但不返回 Promise。
|
|
60
|
+
* @param inputs 异步函数的参数。
|
|
61
|
+
*/
|
|
62
|
+
run
|
|
63
|
+
};
|
|
65
64
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
//# sourceMappingURL=async.mjs.map
|
|
65
|
+
//#endregion
|
|
66
|
+
export { useAsync };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=async.mjs.map
|
package/dist/async.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.mjs","sources":["../src/async.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"async.mjs","names":[],"sources":["../src/async.ts"],"sourcesContent":["import type { AnyArray } from '@cloudcome/utils-core/types';\nimport { type ComputedRef, computed, type Ref, ref } from 'vue';\n\n/**\n * 异步操作的配置选项\n * @template T 异步操作返回的数据类型\n * @template P 异步操作的参数类型\n */\nexport type UseAsyncOptions<I extends AnyArray, O> = {\n placeholder?: () => O;\n\n /**\n * 异步操作开始前的回调函数,可用于执行初始化逻辑或显示加载状态,抛出错误则中断操作\n */\n onBefore?: (...inputs: I) => unknown;\n\n /**\n * 异步操作成功后的回调函数,可用于处理成功后的数据更新或通知。\n * @param data 异步操作返回的数据。\n */\n onSuccess?: (data: O, ...inputs: I) => unknown;\n\n /**\n * 异步操作失败后的回调函数,可用于记录错误日志或显示错误提示。\n * @param err 异步操作抛出的错误。\n */\n onError?: (err: unknown, ...inputs: I) => unknown;\n\n /**\n * 异步操作结束后的回调函数(无论成功或失败),可用于清理操作或触发后续逻辑。\n */\n onAfter?: (...inputs: I) => unknown;\n};\n\nexport type UseAsyncState<O> = {\n times: number;\n loading: boolean;\n error: unknown;\n data: O | null;\n};\n\nexport type UseAsyncStateFilled<O> = {\n times: number;\n loading: boolean;\n error: unknown;\n data: O;\n};\n\nexport type UseAsyncOutput<I extends AnyArray, O> = {\n state: ComputedRef<UseAsyncState<O>>;\n loading: Ref<boolean>;\n data: Ref<O | null>;\n error: Ref<unknown>;\n run: (...inputs: I) => void;\n runAsync: (...inputs: I) => Promise<O>;\n};\n\nexport type UseAsyncOutputFilled<I extends AnyArray, O> = {\n state: ComputedRef<UseAsyncStateFilled<O>>;\n loading: Ref<boolean>;\n data: Ref<O>;\n error: Ref<unknown>;\n run: (...inputs: I) => void;\n runAsync: (...inputs: I) => Promise<O>;\n};\n\n/**\n * 用于处理异步操作的组合式函数。\n * 提供加载状态、数据、错误信息以及执行方法。\n * @template O 异步函数返回的数据类型\n * @template I 异步函数的入参类型\n * @param fn 异步函数,接收参数并返回 Promise。\n * @param options 异步操作的配置选项。\n * @returns 包含状态和操作方法的对象:\n * - loading: 是否正在加载。\n * - data: 异步操作返回的数据。\n * - error: 异步操作抛出的错误。\n * - runAsync: 执行异步操作并返回 Promise。\n * - run: 执行异步操作但不返回 Promise。\n * @example\n * const { loading, data, error, runAsync, run } = useAsync(async (id: number) => {\n * const response = await fetch(`/api/user/${id}`);\n * return response.json();\n * }, {\n * onBefore: () => console.log('Fetching user data...'),\n * onSuccess: (data) => console.log('User data fetched:', data),\n * onError: (err) => console.error('Failed to fetch user data:', err),\n * onFinally: () => console.log('Fetch operation completed.'),\n * });\n */\nexport function useAsync<I extends AnyArray, O>(\n fn: (...inputs: I) => Promise<O>,\n options: Omit<UseAsyncOptions<I, O>, 'placeholder'> & {\n placeholder: () => O;\n },\n): UseAsyncOutputFilled<I, O>;\nexport function useAsync<I extends AnyArray, O>(\n fn: (...inputs: I) => Promise<O>,\n options?: UseAsyncOptions<I, O>,\n): UseAsyncOutput<I, O>;\nexport function useAsync<I extends AnyArray, O>(\n fn: (...inputs: I) => Promise<O>,\n options?: UseAsyncOptions<I, O>,\n): UseAsyncOutput<I, O> {\n const times = ref(0);\n const loading = ref(false);\n const placeholder = options?.placeholder;\n const data = ref(placeholder ? placeholder() : null) as Ref<O | null>;\n const error = ref<unknown>(null);\n const state = computed(() => ({\n times: times.value,\n loading: loading.value,\n data: data.value,\n error: error.value,\n }));\n\n const runAsync = async (...inputs: I): Promise<O> => {\n loading.value = true;\n error.value = null;\n\n try {\n await options?.onBefore?.(...inputs);\n times.value++;\n data.value = await fn(...inputs);\n await options?.onSuccess?.(data.value, ...inputs);\n return data.value;\n } catch (err) {\n error.value = err;\n try {\n options?.onError?.(err, ...inputs);\n } catch (_err) {\n //\n }\n throw err;\n } finally {\n loading.value = false;\n await options?.onAfter?.(...inputs);\n }\n };\n\n const run = (...inputs: I) => {\n runAsync(...inputs).then();\n };\n\n return {\n state,\n /**\n * 是否正在加载。\n */\n loading,\n\n /**\n * 异步操作返回的数据。\n */\n data,\n\n /**\n * 异步操作抛出的错误。\n */\n error,\n\n /**\n * 执行异步操作并返回 Promise。\n * @param inputs 异步函数的参数。\n * @returns 异步操作的结果。\n */\n runAsync,\n\n /**\n * 执行异步操作但不返回 Promise。\n * @param inputs 异步函数的参数。\n */\n run,\n };\n}\n\n// const { run: run1 } = useAsync(() => Promise.resolve(1));\n// run1();\n\n// const { run: run2 } = useAsync((a: number) => Promise.resolve(1));\n// run2(2);\n\n// const { run: run3 } = useAsync((a: number, b: string) => Promise.resolve(1));\n// run3(2, '2');\n"],"mappings":";;AAoGA,SAAgB,SACd,IACA,SACsB;CACtB,MAAM,QAAQ,IAAI,EAAE;CACpB,MAAM,UAAU,IAAI,MAAM;CAC1B,MAAM,cAAc,SAAS;CAC7B,MAAM,OAAO,IAAI,cAAc,aAAa,GAAG,KAAK;CACpD,MAAM,QAAQ,IAAa,KAAK;CAChC,MAAM,QAAQ,gBAAgB;EAC5B,OAAO,MAAM;EACb,SAAS,QAAQ;EACjB,MAAM,KAAK;EACX,OAAO,MAAM;EACd,EAAE;CAEH,MAAM,WAAW,OAAO,GAAG,WAA0B;EACnD,QAAQ,QAAQ;EAChB,MAAM,QAAQ;EAEd,IAAI;GACF,MAAM,SAAS,WAAW,GAAG,OAAO;GACpC,MAAM;GACN,KAAK,QAAQ,MAAM,GAAG,GAAG,OAAO;GAChC,MAAM,SAAS,YAAY,KAAK,OAAO,GAAG,OAAO;GACjD,OAAO,KAAK;WACL,KAAK;GACZ,MAAM,QAAQ;GACd,IAAI;IACF,SAAS,UAAU,KAAK,GAAG,OAAO;YAC3B,MAAM;GAGf,MAAM;YACE;GACR,QAAQ,QAAQ;GAChB,MAAM,SAAS,UAAU,GAAG,OAAO;;;CAIvC,MAAM,OAAO,GAAG,WAAc;EAC5B,SAAS,GAAG,OAAO,CAAC,MAAM;;CAG5B,OAAO;EACL;;;;EAIA;;;;EAKA;;;;EAKA;;;;;;EAOA;;;;;EAMA;EACD"}
|
package/dist/component/self.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { ComponentExposed, ComponentProps } from 'vue-component-type-helpers';
|
|
|
8
8
|
* @example
|
|
9
9
|
* const compRef = useExpose(MyComponent)
|
|
10
10
|
*/
|
|
11
|
-
export declare function useExpose<T>(
|
|
11
|
+
export declare function useExpose<T>(_Comp: T): Ref<ComponentExposed<T> | null>;
|
|
12
12
|
/**
|
|
13
13
|
* 将字符串的首字母转换为小写
|
|
14
14
|
* @template S 字符串类型
|
|
@@ -39,9 +39,9 @@ type PickEmits<T> = {
|
|
|
39
39
|
* console.log('click event', payload)
|
|
40
40
|
* })
|
|
41
41
|
*/
|
|
42
|
-
export declare function useEmit<T, E extends PickEmits<Required<ComponentProps<T>>>, K extends keyof E>(
|
|
42
|
+
export declare function useEmit<T, E extends PickEmits<Required<ComponentProps<T>>>, K extends keyof E>(_Comp: T, _event: K, listener: E[K]): E[K];
|
|
43
43
|
type PickMethods<T> = {
|
|
44
|
-
[K in keyof T]: T[K] extends (...args:
|
|
44
|
+
[K in keyof T]: T[K] extends (...args: unknown[]) => any ? T[K] : never;
|
|
45
45
|
};
|
|
46
46
|
/**
|
|
47
47
|
* 从组件props中提取方法并返回指定方法
|
|
@@ -57,5 +57,5 @@ type PickMethods<T> = {
|
|
|
57
57
|
* console.log('update value', value)
|
|
58
58
|
* })
|
|
59
59
|
*/
|
|
60
|
-
export declare function useMethod<T, M extends PickMethods<Required<ComponentProps<T>>>, K extends keyof M>(
|
|
60
|
+
export declare function useMethod<T, M extends PickMethods<Required<ComponentProps<T>>>, K extends keyof M>(_Comp: T, _name: K, method: M[K]): M[K];
|
|
61
61
|
export {};
|
package/dist/component.cjs
CHANGED
|
@@ -1,20 +1,117 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
const require_shared = require("./shared.cjs");
|
|
3
|
+
let vue = require("vue");
|
|
4
|
+
//#region src/component/life.ts
|
|
5
|
+
/**
|
|
6
|
+
* 页面挂载前生命周期钩子
|
|
7
|
+
*
|
|
8
|
+
* @param beforeMount - 在组件挂载前执行的回调函数,可以返回一个清理函数
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* useMount(() => {
|
|
13
|
+
* console.log('组件即将挂载');
|
|
14
|
+
* // 可以返回一个清理函数,在组件卸载前执行
|
|
15
|
+
* return () => {
|
|
16
|
+
* console.log('组件即将卸载');
|
|
17
|
+
* };
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
function useMount(beforeMount) {
|
|
22
|
+
require_shared._runLifeHook(vue.onBeforeMount, vue.onBeforeUnmount, beforeMount);
|
|
7
23
|
}
|
|
8
|
-
|
|
9
|
-
|
|
24
|
+
/**
|
|
25
|
+
* 页面挂载后生命周期钩子
|
|
26
|
+
*
|
|
27
|
+
* @param mounted - 在组件挂载后执行的回调函数,可以返回一个清理函数
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* useMounted(() => {
|
|
32
|
+
* console.log('组件已挂载');
|
|
33
|
+
* // 可以返回一个清理函数,在组件卸载前执行
|
|
34
|
+
* return () => {
|
|
35
|
+
* console.log('组件即将卸载');
|
|
36
|
+
* };
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
function useMounted(mounted) {
|
|
41
|
+
require_shared._runLifeHook(vue.onMounted, vue.onUnmounted, mounted);
|
|
10
42
|
}
|
|
11
|
-
|
|
12
|
-
|
|
43
|
+
/**
|
|
44
|
+
* 页面激活时生命周期钩子
|
|
45
|
+
*
|
|
46
|
+
* @param activated - 在组件被激活时执行的回调函数,可以返回一个清理函数
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* useActivated(() => {
|
|
51
|
+
* console.log('组件已激活');
|
|
52
|
+
* // 可以返回一个清理函数,在组件失活前执行
|
|
53
|
+
* return () => {
|
|
54
|
+
* console.log('组件即将失活');
|
|
55
|
+
* };
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
function useActivated(activated) {
|
|
60
|
+
require_shared._runLifeHook(vue.onActivated, vue.onDeactivated, activated);
|
|
13
61
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region src/component/self.ts
|
|
64
|
+
/**
|
|
65
|
+
* 创建一个响应式引用,用于暴露组件实例
|
|
66
|
+
* @template T 组件类型
|
|
67
|
+
* @param {T} Comp 组件定义
|
|
68
|
+
* @returns 返回一个可响应式访问的组件实例引用
|
|
69
|
+
* @example
|
|
70
|
+
* const compRef = useExpose(MyComponent)
|
|
71
|
+
*/
|
|
72
|
+
function useExpose(_Comp) {
|
|
73
|
+
return (0, vue.ref)(null);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 创建一个组件emit事件监听器
|
|
77
|
+
* @template T 组件类型
|
|
78
|
+
* @template E 从组件props中提取的事件类型
|
|
79
|
+
* @template K 事件名
|
|
80
|
+
* @param {T} Comp 组件定义
|
|
81
|
+
* @param {K} event 事件名称
|
|
82
|
+
* @param {E[K]} listener 事件监听函数
|
|
83
|
+
* @returns {E[K]} 返回传入的事件监听函数
|
|
84
|
+
* @example
|
|
85
|
+
* const handleClick = useEmit(MyComponent, 'click', (payload) => {
|
|
86
|
+
* console.log('click event', payload)
|
|
87
|
+
* })
|
|
88
|
+
*/
|
|
89
|
+
function useEmit(_Comp, _event, listener) {
|
|
90
|
+
return listener;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 从组件props中提取方法并返回指定方法
|
|
94
|
+
* @template T 组件类型
|
|
95
|
+
* @template M 从组件props中提取的方法类型
|
|
96
|
+
* @template K 方法名类型
|
|
97
|
+
* @param {T} Comp 组件定义
|
|
98
|
+
* @param {K} name 方法名称
|
|
99
|
+
* @param {M[K]} method 要返回的方法
|
|
100
|
+
* @returns {M[K]} 返回传入的方法
|
|
101
|
+
* @example
|
|
102
|
+
* const handleUpdate = useMethod(MyComponent, 'update', (value) => {
|
|
103
|
+
* console.log('update value', value)
|
|
104
|
+
* })
|
|
105
|
+
*/
|
|
106
|
+
function useMethod(_Comp, _name, method) {
|
|
107
|
+
return method;
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
exports.useActivated = useActivated;
|
|
17
111
|
exports.useEmit = useEmit;
|
|
18
112
|
exports.useExpose = useExpose;
|
|
19
113
|
exports.useMethod = useMethod;
|
|
20
|
-
|
|
114
|
+
exports.useMount = useMount;
|
|
115
|
+
exports.useMounted = useMounted;
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=component.cjs.map
|
package/dist/component.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.cjs","sources":["../src/component/self.ts"],"sourcesContent":["import { type Ref, ref } from 'vue';\nimport type {
|
|
1
|
+
{"version":3,"file":"component.cjs","names":[],"sources":["../src/component/life.ts","../src/component/self.ts"],"sourcesContent":["import type { MaybePromise } from '@cloudcome/utils-core/types';\nimport {\n onActivated,\n onBeforeMount,\n onBeforeUnmount,\n onDeactivated,\n onMounted,\n onUnmounted,\n} from 'vue';\nimport { _runLifeHook } from '@/shared';\n\nexport type HookListener = () => MaybePromise<unknown>;\nexport type HookListenerWithDispose = () => MaybePromise<\n undefined | HookListener\n>;\n\n/**\n * 页面挂载前生命周期钩子\n *\n * @param beforeMount - 在组件挂载前执行的回调函数,可以返回一个清理函数\n *\n * @example\n * ```ts\n * useMount(() => {\n * console.log('组件即将挂载');\n * // 可以返回一个清理函数,在组件卸载前执行\n * return () => {\n * console.log('组件即将卸载');\n * };\n * });\n * ```\n */\nexport function useMount(beforeMount: HookListenerWithDispose) {\n _runLifeHook(onBeforeMount, onBeforeUnmount, beforeMount);\n}\n\n/**\n * 页面挂载后生命周期钩子\n *\n * @param mounted - 在组件挂载后执行的回调函数,可以返回一个清理函数\n *\n * @example\n * ```ts\n * useMounted(() => {\n * console.log('组件已挂载');\n * // 可以返回一个清理函数,在组件卸载前执行\n * return () => {\n * console.log('组件即将卸载');\n * };\n * });\n * ```\n */\nexport function useMounted(mounted: HookListenerWithDispose) {\n _runLifeHook(onMounted, onUnmounted, mounted);\n}\n\n/**\n * 页面激活时生命周期钩子\n *\n * @param activated - 在组件被激活时执行的回调函数,可以返回一个清理函数\n *\n * @example\n * ```ts\n * useActivated(() => {\n * console.log('组件已激活');\n * // 可以返回一个清理函数,在组件失活前执行\n * return () => {\n * console.log('组件即将失活');\n * };\n * });\n * ```\n */\nexport function useActivated(activated: HookListenerWithDispose) {\n _runLifeHook(onActivated, onDeactivated, activated);\n}\n","import { type Ref, ref } from 'vue';\nimport type {\n ComponentExposed,\n ComponentProps,\n} from 'vue-component-type-helpers';\n\n/**\n * 创建一个响应式引用,用于暴露组件实例\n * @template T 组件类型\n * @param {T} Comp 组件定义\n * @returns 返回一个可响应式访问的组件实例引用\n * @example\n * const compRef = useExpose(MyComponent)\n */\nexport function useExpose<T>(_Comp: T) {\n // 这里必须类型断言,否则构建会失败\n return ref<ComponentExposed<T> | null>(\n null,\n ) as Ref<ComponentExposed<T> | null>;\n}\n\n/**\n * 将字符串的首字母转换为小写\n * @template S 字符串类型\n * @typedef {S extends `${infer First}${infer Rest}` ? `${Lowercase<First>}${Rest}` : S} LowercaseFirst\n */\ntype LowercaseFirst<S extends string> = S extends `${infer First}${infer Rest}`\n ? `${Lowercase<First>}${Rest}`\n : S;\n\n/**\n * 从组件props中提取事件类型\n * @template T 组件props类型\n * @typedef {Object} PickEmits\n * @property {Object} [K in keyof T as K extends `on${infer Rest}`...] 转换后的emit事件名\n * - @property {Function} [...args: P] 事件回调函数\n */\ntype PickEmits<T> = {\n [K in keyof T as K extends `on${infer Rest}`\n ? // biome-ignore lint/suspicious/noExplicitAny: 必须使用 any\n T[K] extends (...args: any[]) => any\n ? LowercaseFirst<Rest>\n : never\n : // biome-ignore lint/suspicious/noExplicitAny: 必须使用 any\n never]: T[K] extends (...args: infer P) => any\n ? (...args: P) => unknown\n : never;\n};\n\n/**\n * 创建一个组件emit事件监听器\n * @template T 组件类型\n * @template E 从组件props中提取的事件类型\n * @template K 事件名\n * @param {T} Comp 组件定义\n * @param {K} event 事件名称\n * @param {E[K]} listener 事件监听函数\n * @returns {E[K]} 返回传入的事件监听函数\n * @example\n * const handleClick = useEmit(MyComponent, 'click', (payload) => {\n * console.log('click event', payload)\n * })\n */\nexport function useEmit<\n T,\n E extends PickEmits<Required<ComponentProps<T>>>,\n K extends keyof E,\n>(_Comp: T, _event: K, listener: E[K]) {\n return listener;\n}\n\ntype PickMethods<T> = {\n // biome-ignore lint/suspicious/noExplicitAny: 必须使用 any\n [K in keyof T]: T[K] extends (...args: unknown[]) => any ? T[K] : never;\n};\n\n/**\n * 从组件props中提取方法并返回指定方法\n * @template T 组件类型\n * @template M 从组件props中提取的方法类型\n * @template K 方法名类型\n * @param {T} Comp 组件定义\n * @param {K} name 方法名称\n * @param {M[K]} method 要返回的方法\n * @returns {M[K]} 返回传入的方法\n * @example\n * const handleUpdate = useMethod(MyComponent, 'update', (value) => {\n * console.log('update value', value)\n * })\n */\nexport function useMethod<\n T,\n M extends PickMethods<Required<ComponentProps<T>>>,\n K extends keyof M,\n>(_Comp: T, _name: K, method: M[K]) {\n return method;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgCA,SAAgB,SAAS,aAAsC;CAC7D,eAAA,aAAa,IAAA,eAAe,IAAA,iBAAiB,YAAY;;;;;;;;;;;;;;;;;;AAmB3D,SAAgB,WAAW,SAAkC;CAC3D,eAAA,aAAa,IAAA,WAAW,IAAA,aAAa,QAAQ;;;;;;;;;;;;;;;;;;AAmB/C,SAAgB,aAAa,WAAoC;CAC/D,eAAA,aAAa,IAAA,aAAa,IAAA,eAAe,UAAU;;;;;;;;;;;;AC3DrD,SAAgB,UAAa,OAAU;CAErC,QAAA,GAAA,IAAA,KACE,KACD;;;;;;;;;;;;;;;;AA6CH,SAAgB,QAId,OAAU,QAAW,UAAgB;CACrC,OAAO;;;;;;;;;;;;;;;;AAsBT,SAAgB,UAId,OAAU,OAAU,QAAc;CAClC,OAAO"}
|
package/dist/component.d.ts
CHANGED