xn-fe-tools 1.0.5 → 1.2.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.
- package/dist/hooks/useTableRequest/index.d.ts +148 -0
- package/dist/hooks/useTableRequest/index.d.ts.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +1 -1
- package/dist/useTableRequest/index.cjs.js +1 -0
- package/dist/useTableRequest/index.es.js +1 -0
- package/dist/utils/utils.cjs.js +1 -0
- package/dist/utils/utils.d.ts +54 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.es.js +1 -0
- package/dist/version.cjs.js +1 -1
- package/dist/version.es.js +1 -1
- package/package.json +8 -7
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { type Ref, type ComputedRef } from 'vue';
|
|
2
|
+
import { type MaybeRef, type MaybeRefOrGetter } from '../../utils/utils';
|
|
3
|
+
export type { MaybeRef, MaybeRefOrGetter };
|
|
4
|
+
/** 请求函数类型 */
|
|
5
|
+
export type RequestFunction<P, R> = (params: P) => Promise<R>;
|
|
6
|
+
/** 分页配置 */
|
|
7
|
+
export interface PaginationConfig {
|
|
8
|
+
/** 默认页码,默认 1 */
|
|
9
|
+
defaultPage?: number;
|
|
10
|
+
/** 默认每页数量,默认 10 */
|
|
11
|
+
defaultPageSize?: number;
|
|
12
|
+
/** 页码字段名,默认 'page' */
|
|
13
|
+
pageKey?: string;
|
|
14
|
+
/** 每页数量字段名,默认 'pageSize' */
|
|
15
|
+
pageSizeKey?: string;
|
|
16
|
+
}
|
|
17
|
+
/** 转换结果类型 */
|
|
18
|
+
export interface TransformResultData<T> {
|
|
19
|
+
/** 列表数据 */
|
|
20
|
+
list: T[];
|
|
21
|
+
/** 总数 */
|
|
22
|
+
total: number;
|
|
23
|
+
}
|
|
24
|
+
/** Hook 配置选项 */
|
|
25
|
+
export interface UseTableRequestOptions<P, R, T> {
|
|
26
|
+
/** 请求参数(响应式) */
|
|
27
|
+
params?: MaybeRefOrGetter<P>;
|
|
28
|
+
/** 是否立即执行,默认 true */
|
|
29
|
+
immediate?: boolean;
|
|
30
|
+
/** 防抖延迟(毫秒),默认 0(不防抖) */
|
|
31
|
+
debounceDelay?: number;
|
|
32
|
+
/** 分页配置 */
|
|
33
|
+
pagination?: PaginationConfig;
|
|
34
|
+
/** 数据列表字段名,默认空(直接使用 response),支持点号分隔的嵌套路径,如 "data" 或 "data.list" */
|
|
35
|
+
dataField?: string;
|
|
36
|
+
/** 总数字段名,默认空(自动推断),支持点号分隔的嵌套路径,如 "total" 或 "data.total" */
|
|
37
|
+
totalField?: string;
|
|
38
|
+
/** 当前页码字段名,默认空(不修正),支持点号分隔的嵌套路径,如 "page" 或 "data.currentPage" */
|
|
39
|
+
currentPageField?: string;
|
|
40
|
+
/** 请求前转换参数 */
|
|
41
|
+
transformParams?: (params: P, pagination: {
|
|
42
|
+
page: number;
|
|
43
|
+
pageSize: number;
|
|
44
|
+
}) => any;
|
|
45
|
+
/** 请求后转换结果,返回 { list, total } */
|
|
46
|
+
transformResult?: (response: R) => TransformResultData<T>;
|
|
47
|
+
/** 请求成功回调 */
|
|
48
|
+
onSuccess?: (data: T[], response: R) => void;
|
|
49
|
+
/** 请求失败回调 */
|
|
50
|
+
onError?: (error: Error) => void;
|
|
51
|
+
}
|
|
52
|
+
/** 分页信息 */
|
|
53
|
+
export interface PaginationState {
|
|
54
|
+
/** 当前页码 */
|
|
55
|
+
page: number;
|
|
56
|
+
/** 每页数量 */
|
|
57
|
+
pageSize: number;
|
|
58
|
+
/** 总数 */
|
|
59
|
+
total: number;
|
|
60
|
+
}
|
|
61
|
+
/** Hook 返回值 */
|
|
62
|
+
export interface UseTableRequestReturn<T> {
|
|
63
|
+
/** 列表数据 */
|
|
64
|
+
data: Ref<T[]>;
|
|
65
|
+
/** 加载状态 */
|
|
66
|
+
loading: Ref<boolean>;
|
|
67
|
+
/** 错误信息 */
|
|
68
|
+
error: Ref<Error | null>;
|
|
69
|
+
/** 分页信息 */
|
|
70
|
+
pagination: ComputedRef<PaginationState>;
|
|
71
|
+
/** 手动触发请求 */
|
|
72
|
+
run: () => Promise<void>;
|
|
73
|
+
/** 翻页 */
|
|
74
|
+
onPageChange: (page: number) => Promise<void>;
|
|
75
|
+
/** 改变每页数量 */
|
|
76
|
+
onSizeChange: (size: number) => Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
/** useTableRequest 全局配置选项 */
|
|
79
|
+
export interface UseTableRequestGlobalConfig {
|
|
80
|
+
/** 是否立即执行,默认 true */
|
|
81
|
+
immediate?: boolean;
|
|
82
|
+
/** 防抖延迟(毫秒),默认 0(不防抖) */
|
|
83
|
+
debounceDelay?: number;
|
|
84
|
+
/** 分页配置 */
|
|
85
|
+
pagination?: PaginationConfig;
|
|
86
|
+
/** 数据列表字段名,默认空(直接使用 response),支持点号分隔的嵌套路径,如 "data" 或 "data.list" */
|
|
87
|
+
dataField?: string;
|
|
88
|
+
/** 总数字段名,默认空(自动推断),支持点号分隔的嵌套路径,如 "total" 或 "data.total" */
|
|
89
|
+
totalField?: string;
|
|
90
|
+
/** 当前页码字段名,默认空(不修正),支持点号分隔的嵌套路径,如 "page" 或 "data.currentPage" */
|
|
91
|
+
currentPageField?: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 设置 useTableRequest 全局默认配置
|
|
95
|
+
*
|
|
96
|
+
* @param config - 全局配置选项
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```ts
|
|
100
|
+
* import { setTableRequestGlobalConfig } from 'xn-fe-tools'
|
|
101
|
+
*
|
|
102
|
+
* // 在应用入口处设置全局默认配置
|
|
103
|
+
* setTableRequestGlobalConfig({
|
|
104
|
+
* immediate: true,
|
|
105
|
+
* debounceDelay: 500,
|
|
106
|
+
* pagination: {
|
|
107
|
+
* defaultPageSize: 20,
|
|
108
|
+
* pageKey: 'pageNum',
|
|
109
|
+
* pageSizeKey: 'size',
|
|
110
|
+
* },
|
|
111
|
+
* })
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare function setTableRequestGlobalConfig(config: UseTableRequestGlobalConfig): void;
|
|
115
|
+
/**
|
|
116
|
+
* 获取当前 useTableRequest 全局配置
|
|
117
|
+
*
|
|
118
|
+
* @returns 当前全局配置的副本
|
|
119
|
+
*/
|
|
120
|
+
export declare function getTableRequestGlobalConfig(): UseTableRequestGlobalConfig;
|
|
121
|
+
/**
|
|
122
|
+
* 用于表格请求的 Hook,支持分页、防抖、自动/手动请求
|
|
123
|
+
*
|
|
124
|
+
* @param requestFn - 请求函数,接收参数并返回 Promise
|
|
125
|
+
* @param options - 配置选项
|
|
126
|
+
* @returns 返回数据、状态和操作方法
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```ts
|
|
130
|
+
* const { data, loading, pagination, run, onPageChange, onSizeChange } = useTableRequest(
|
|
131
|
+
* (params) => fetchUserList(params),
|
|
132
|
+
* {
|
|
133
|
+
* params: computed(() => ({ keyword: search.value })),
|
|
134
|
+
* immediate: true,
|
|
135
|
+
* pagination: {
|
|
136
|
+
* defaultPage: 1,
|
|
137
|
+
* defaultPageSize: 10,
|
|
138
|
+
* pageKey: 'page',
|
|
139
|
+
* pageSizeKey: 'pageSize',
|
|
140
|
+
* },
|
|
141
|
+
* transformParams: (params, pagination) => ({ ...params, ...pagination }),
|
|
142
|
+
* transformResult: (res) => ({ list: res.data.records, total: res.data.total }),
|
|
143
|
+
* }
|
|
144
|
+
* )
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export declare function useTableRequest<P extends object, R, T = any>(requestFn: RequestFunction<any, R>, options?: UseTableRequestOptions<P, R, T>): UseTableRequestReturn<T>;
|
|
148
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTableRequest/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./toAwaitFetch/toAwaitFetch.cjs.js"),t=require("./version.cjs.js");exports.cancel=e.cancel,exports.createInstance=e.createInstance,exports.sendGet=e.sendGet,exports.sendGetBlob=e.sendGetBlob,exports.sendPost=e.sendPost,exports.sendPostBlob=e.sendPostBlob,exports.sendPostForm=e.sendPostForm,exports.setGlobalConfig=e.setGlobalConfig,exports.toAwaitFetch=e.default,exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./toAwaitFetch/toAwaitFetch.cjs.js"),t=require("./useTableRequest/index.cjs.js"),s=require("./version.cjs.js");exports.cancel=e.cancel,exports.createInstance=e.createInstance,exports.sendGet=e.sendGet,exports.sendGetBlob=e.sendGetBlob,exports.sendPost=e.sendPost,exports.sendPostBlob=e.sendPostBlob,exports.sendPostForm=e.sendPostForm,exports.setGlobalConfig=e.setGlobalConfig,exports.toAwaitFetch=e.default,exports.getTableRequestGlobalConfig=t.getTableRequestGlobalConfig,exports.setTableRequestGlobalConfig=t.setTableRequestGlobalConfig,exports.useTableRequest=t.useTableRequest,exports.VERSION=s.VERSION,exports.getVersion=s.getVersion;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './hooks/toAwaitFetch/toAwaitFetch.api';
|
|
2
2
|
export { default as toAwaitFetch, sendGet, sendPost, sendPostForm, sendPostBlob, sendGetBlob, setGlobalConfig, cancel, createInstance, } from './hooks/toAwaitFetch/toAwaitFetch';
|
|
3
|
+
export * from './hooks/useTableRequest';
|
|
3
4
|
export { VERSION, getVersion } from './version';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,cAAc,uCAAuC,CAAA;AACrD,OAAO,EACL,OAAO,IAAI,YAAY,EACvB,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,MAAM,EACN,cAAc,GACf,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,cAAc,uCAAuC,CAAA;AACrD,OAAO,EACL,OAAO,IAAI,YAAY,EACvB,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,MAAM,EACN,cAAc,GACf,MAAM,mCAAmC,CAAA;AAE1C,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/index.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{cancel as t,createInstance as
|
|
1
|
+
import{cancel as t,createInstance as e,sendGet as o,sendGetBlob as s,sendPost as i,sendPostBlob as r,sendPostForm as a,setGlobalConfig as m,default as f}from"./toAwaitFetch/toAwaitFetch.es.js";import{getTableRequestGlobalConfig as p,setTableRequestGlobalConfig as c,useTableRequest as h}from"./useTableRequest/index.es.js";import{VERSION as j,getVersion as u}from"./version.es.js";export{j as VERSION,t as cancel,e as createInstance,p as getTableRequestGlobalConfig,u as getVersion,o as sendGet,s as sendGetBlob,i as sendPost,r as sendPostBlob,a as sendPostForm,m as setGlobalConfig,c as setTableRequestGlobalConfig,f as toAwaitFetch,h as useTableRequest};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),a=require("../utils/utils.cjs.js"),t={};exports.getTableRequestGlobalConfig=function(){return{...t,pagination:{...t.pagination}}},exports.setTableRequestGlobalConfig=function(e){Object.assign(t,e),e.pagination&&(t.pagination={...t.pagination,...e.pagination})},exports.useTableRequest=function(l,n={}){const u={...t.pagination,...n.pagination},{params:o,immediate:r=t.immediate??!0,debounceDelay:i=t.debounceDelay??0,dataField:s=t.dataField??"",totalField:c=t.totalField??"",currentPageField:g=t.currentPageField??"",transformParams:v,transformResult:f,onSuccess:p,onError:d}=n,{defaultPage:y=1,defaultPageSize:b=10,pageKey:m="page",pageSizeKey:S="pageSize"}=u,P=e.ref([]),w=e.ref(!1),R=e.ref(null),q=e.ref(y),T=e.ref(b),h=e.ref(0);let F=0;const j=e.computed(()=>({page:q.value,pageSize:T.value,total:h.value}));async function z(){const e=++F;w.value=!0,R.value=null;try{const t=o?a.toValue(o):{},n={[m]:q.value,[S]:T.value};let u;u=v?v(t,{page:q.value,pageSize:T.value}):{...t,...n};const r=await l(u);if(e!==F)return;if(f){const e=f(r);e&&"object"==typeof e&&Array.isArray(e.list)?(P.value=e.list,h.value="number"==typeof e.total?e.total:e.list.length):(P.value=[],h.value=0,console.warn("[useTableRequest] transformResult 返回格式无法识别,请返回 { list: T[], total: number } 格式。"))}else{const e=r;Array.isArray(e)?(P.value=e,h.value=e.length):e&&"object"==typeof e?(s&&""!==s.trim()?P.value=a.getPropValue(e,s)||[]:P.value=e.list||e.data||e.records||e.items||[],c&&""!==c.trim()?h.value=a.getPropValue(e,c)??0:h.value=e.total??e.totalCount??e.count??P.value.length):(P.value=[],h.value=0)}if(g&&""!==g.trim()){const e=a.getPropValue(r,g);"number"==typeof e&&e!==q.value&&(console.warn(`[useTableRequest] 后端返回页码(${e})与客户端页码(${q.value})不一致,已自动修正`),q.value=e)}p?.(P.value,r)}catch(t){if(e!==F)return;R.value=t instanceof Error?t:new Error(String(t)),d?.(R.value)}finally{e===F&&(w.value=!1)}}const C=i>0?a.useDebounceFn(z,i):z;return o&&(a.warnIfNotReactiveSource(o,"useTableRequest"),e.watch(()=>a.toValue(o),()=>{q.value=y,C()},{deep:!0})),r&&z(),{data:P,loading:w,error:R,pagination:j,run:async function(){await z()},onPageChange:async function(e){q.value=e,await z()},onSizeChange:async function(e){T.value=e,q.value=y,await z()}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ref as e,computed as a,watch as t}from"vue";import{warnIfNotReactiveSource as n,toValue as l,useDebounceFn as u,getPropValue as i}from"../utils/utils.es.js";const o={};function r(e){Object.assign(o,e),e.pagination&&(o.pagination={...o.pagination,...e.pagination})}function s(){return{...o,pagination:{...o.pagination}}}function c(r,s={}){const c={...o.pagination,...s.pagination},{params:v,immediate:g=o.immediate??!0,debounceDelay:p=o.debounceDelay??0,dataField:f=o.dataField??"",totalField:m=o.totalField??"",currentPageField:d=o.currentPageField??"",transformParams:y,transformResult:b,onSuccess:S,onError:w}=s,{defaultPage:h=1,defaultPageSize:z=10,pageKey:F="page",pageSizeKey:P="pageSize"}=c,R=e([]),j=e(!1),A=e(null),T=e(h),q=e(z),C=e(0);let E=0;const D=a(()=>({page:T.value,pageSize:q.value,total:C.value}));async function K(){const e=++E;j.value=!0,A.value=null;try{const a=v?l(v):{},t={[F]:T.value,[P]:q.value};let n;n=y?y(a,{page:T.value,pageSize:q.value}):{...a,...t};const u=await r(n);if(e!==E)return;if(b){const e=b(u);e&&"object"==typeof e&&Array.isArray(e.list)?(R.value=e.list,C.value="number"==typeof e.total?e.total:e.list.length):(R.value=[],C.value=0,console.warn("[useTableRequest] transformResult 返回格式无法识别,请返回 { list: T[], total: number } 格式。"))}else{const e=u;Array.isArray(e)?(R.value=e,C.value=e.length):e&&"object"==typeof e?(f&&""!==f.trim()?R.value=i(e,f)||[]:R.value=e.list||e.data||e.records||e.items||[],m&&""!==m.trim()?C.value=i(e,m)??0:C.value=e.total??e.totalCount??e.count??R.value.length):(R.value=[],C.value=0)}if(d&&""!==d.trim()){const e=i(u,d);"number"==typeof e&&e!==T.value&&(console.warn(`[useTableRequest] 后端返回页码(${e})与客户端页码(${T.value})不一致,已自动修正`),T.value=e)}S?.(R.value,u)}catch(a){if(e!==E)return;A.value=a instanceof Error?a:new Error(String(a)),w?.(A.value)}finally{e===E&&(j.value=!1)}}const $=p>0?u(K,p):K;return v&&(n(v,"useTableRequest"),t(()=>l(v),()=>{T.value=h,$()},{deep:!0})),g&&K(),{data:R,loading:j,error:A,pagination:D,run:async function(){await K()},onPageChange:async function(e){T.value=e,await K()},onSizeChange:async function(e){q.value=e,T.value=h,await K()}}}export{s as getTableRequestGlobalConfig,r as setTableRequestGlobalConfig,c as useTableRequest};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue");function t(t){return"function"==typeof t||e.isRef(t)}exports.getPropValue=function(e,t){if(!e||!t)return;const o=t.replace(/\[(\d+)\]/g,".$1").split(".").filter(Boolean);let n=e;for(const r of o){if(null==n)return;n=n[r]}return n},exports.isReactiveSource=t,exports.toValue=function(t){return"function"==typeof t?t():e.unref(t)},exports.useDebounceFn=function(e,t){let o=null;return(...n)=>{o&&clearTimeout(o),o=setTimeout(()=>{e(...n),o=null},t)}},exports.warnIfNotReactiveSource=function(e,o){"undefined"!=typeof __DEV__&&__DEV__&&void 0!==e&&!t(e)&&console.warn(`[${o}] 检测到 params 是普通对象,参数变化将不会触发请求更新。\n请使用 computed() 或 getter 函数包装:`)};
|
package/dist/utils/utils.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 工具函数集合
|
|
3
3
|
*/
|
|
4
|
+
import { type Ref, type ComputedRef } from 'vue';
|
|
5
|
+
/** 可能是 Ref 或普通值 */
|
|
6
|
+
export type MaybeRef<T> = T | Ref<T>;
|
|
7
|
+
/** 可能是 Ref、ComputedRef 或普通值 */
|
|
8
|
+
export type MaybeRefOrGetter<T> = MaybeRef<T> | ComputedRef<T> | (() => T);
|
|
4
9
|
/**
|
|
5
10
|
* 从对象中根据路径字符串获取值
|
|
6
11
|
* 支持点号分隔的路径,如 'data.list' 或 'data.items[0].name'
|
|
@@ -17,4 +22,53 @@
|
|
|
17
22
|
* ```
|
|
18
23
|
*/
|
|
19
24
|
export declare function getPropValue(obj: any, path: string): any;
|
|
25
|
+
/**
|
|
26
|
+
* 解包 MaybeRefOrGetter 类型的值
|
|
27
|
+
*
|
|
28
|
+
* @param source - 可能是 Ref、ComputedRef、getter 函数或普通值
|
|
29
|
+
* @returns 解包后的值
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const refVal = ref(1)
|
|
34
|
+
* toValue(refVal) // 1
|
|
35
|
+
* toValue(() => 2) // 2
|
|
36
|
+
* toValue(3) // 3
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function toValue<T>(source: MaybeRefOrGetter<T>): T;
|
|
40
|
+
/**
|
|
41
|
+
* 检测值是否为响应式来源(Ref、ComputedRef 或 getter 函数)
|
|
42
|
+
*
|
|
43
|
+
* @param source - 要检测的值
|
|
44
|
+
* @returns 是否为响应式来源
|
|
45
|
+
*/
|
|
46
|
+
export declare function isReactiveSource<T>(source: MaybeRefOrGetter<T>): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* 在开发环境下警告用户传入了非响应式参数
|
|
49
|
+
*
|
|
50
|
+
* @param source - 要检测的参数
|
|
51
|
+
* @param hookName - Hook 名称,用于警告提示
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* warnIfNotReactiveSource(params, 'useTableRequest')
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function warnIfNotReactiveSource<T>(source: MaybeRefOrGetter<T> | undefined, hookName: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* 创建防抖函数
|
|
61
|
+
*
|
|
62
|
+
* @param fn - 需要防抖的函数
|
|
63
|
+
* @param delay - 延迟时间(毫秒)
|
|
64
|
+
* @returns 防抖后的函数
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts
|
|
68
|
+
* const debouncedFn = useDebounceFn(() => console.log('called'), 300)
|
|
69
|
+
* debouncedFn() // 300ms 后执行
|
|
70
|
+
* debouncedFn() // 重新计时
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare function useDebounceFn<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void;
|
|
20
74
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAoBxD"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAA;AAE9D,mBAAmB;AACnB,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;AAEpC,+BAA+B;AAC/B,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;AAE1E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAoBxD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAKzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAExE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EACvC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,EACvC,QAAQ,EAAE,MAAM,GACf,IAAI,CAYN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC7D,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAYlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{unref as n,isRef as t}from"vue";function e(n,t){if(!n||!t)return;const e=t.replace(/\[(\d+)\]/g,".$1").split(".").filter(Boolean);let o=n;for(const r of e){if(null==o)return;o=o[r]}return o}function o(t){return"function"==typeof t?t():n(t)}function r(n){return"function"==typeof n||t(n)}function u(n,t){"undefined"!=typeof __DEV__&&__DEV__&&void 0!==n&&!r(n)&&console.warn(`[${t}] 检测到 params 是普通对象,参数变化将不会触发请求更新。\n请使用 computed() 或 getter 函数包装:`)}function f(n,t){let e=null;return(...o)=>{e&&clearTimeout(e),e=setTimeout(()=>{n(...o),e=null},t)}}export{e as getPropValue,r as isReactiveSource,o as toValue,f as useDebounceFn,u as warnIfNotReactiveSource};
|
package/dist/version.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="1.0
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="1.2.0";exports.VERSION=e,exports.getVersion=function(){return e};
|
package/dist/version.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const n="1.0
|
|
1
|
+
const n="1.2.0";function t(){return n}export{n as VERSION,t as getVersion};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xn-fe-tools",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "A powerful fetch wrapper with chaining & tuple API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"scripts": {
|
|
27
27
|
"dev": "vite",
|
|
28
28
|
"build": "vite build && tsc --emitDeclarationOnly",
|
|
29
|
-
"build:docs": "vitepress build docs",
|
|
29
|
+
"build:docs": "vitepress build docs && node scripts/post-build-docs.js",
|
|
30
30
|
"dev:docs": "vitepress dev docs",
|
|
31
31
|
"preview:docs": "vitepress preview docs",
|
|
32
32
|
"test": "vitest",
|
|
@@ -42,10 +42,9 @@
|
|
|
42
42
|
"release:patch": "node scripts/release.js patch",
|
|
43
43
|
"release:minor": "node scripts/release.js minor",
|
|
44
44
|
"release:major": "node scripts/release.js major",
|
|
45
|
-
"addHook": "
|
|
46
|
-
"removeHook": "
|
|
47
|
-
"prepublishOnly": "node scripts/prepublish.js"
|
|
48
|
-
"prepack": "pnpm build"
|
|
45
|
+
"addHook": "node scripts/add-hook.js",
|
|
46
|
+
"removeHook": "node scripts/remove-hook.js",
|
|
47
|
+
"prepublishOnly": "node scripts/prepublish.js"
|
|
49
48
|
},
|
|
50
49
|
"keywords": [
|
|
51
50
|
"vue",
|
|
@@ -66,7 +65,9 @@
|
|
|
66
65
|
"optional": true
|
|
67
66
|
}
|
|
68
67
|
},
|
|
69
|
-
"
|
|
68
|
+
"gitHooks": {
|
|
69
|
+
"pre-commit": "npm test:run && npm type-check && npm build"
|
|
70
|
+
},
|
|
70
71
|
"devDependencies": {
|
|
71
72
|
"@vitejs/plugin-vue": "^5.2.1",
|
|
72
73
|
"@vue/test-utils": "^2.4.6",
|