@bestime/utils_base 1.0.1

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 ADDED
@@ -0,0 +1,15 @@
1
+ ### 不同git项目,使用不同用户名和邮箱
2
+
3
+ 修改配置文件 ~/.gitconfig
4
+
5
+ ```cmd
6
+ [core]
7
+ autocrlf = false
8
+ [includeIf "gitdir:D:/bestime/git/"]
9
+ path = D:/bestime/config/.gitconfig
10
+ [includeIf "gitdir:D:/work-qssoft/git/qs-t/"]
11
+ path = D:/bestime/config/qssoft.gitconfig
12
+ [includeIf "gitdir:D:/work-qssoft/git/rdc-cq/"]
13
+ path = D:/bestime/config/sitian.gitconfig
14
+
15
+ ```
@@ -0,0 +1,512 @@
1
+ /**
2
+ * 强制转化数据为字符串
3
+ * @param data - 处理的值
4
+ * @returns 实际值2
5
+ */
6
+ declare function _String(data: any): string;
7
+
8
+ /**
9
+ * 获取数据类型
10
+ *
11
+ * @param data - 需要判断的数据
12
+ * @return 数据类型字符串
13
+ */
14
+ declare function getType(data: any): string;
15
+
16
+ /**
17
+ * 判断数据是否为数组
18
+ * @param arg - 判断的值
19
+ * @returns 真假值
20
+ */
21
+ declare function isArray(arg: any): arg is any[];
22
+
23
+ /**
24
+ * 判断数据是否为对象
25
+ * @param data - 判断的值
26
+ * @returns 真假值
27
+ */
28
+ declare function isKvPair(data: any): boolean;
29
+
30
+ /**
31
+ * 递归将所有属性改为可选
32
+ */
33
+ type BTDeepPartial<T = any> = {
34
+ [P in keyof T]?: T[P] extends Function ? T[P] : T[P] extends object ? BTDeepPartial<T[P]> : T[P];
35
+ };
36
+ /**
37
+ * 键值对格式的数据
38
+ * */
39
+ type IKvPair = Record<string, any>;
40
+
41
+ /**
42
+ * 强制转换数据为键值对数据,如果是json字符串,会尝试解析,如果失败,则返回一个空Map
43
+ * @param data - 转换的数据
44
+ * @returns 键值对数据
45
+ *
46
+ * @example
47
+ * ```javascript
48
+ * // => {}
49
+ * const data = _KvPair('abc')
50
+ *
51
+ * // => {}
52
+ * const data2 = _KvPair([])
53
+ *
54
+ * // => {name: 'a'}
55
+ * const data3 = _KvPair({name: 'a'})
56
+ * ```
57
+ */
58
+ declare function _KvPair(data: any): IKvPair;
59
+
60
+ /**
61
+ * 判断是否为空[null, undefined, '']
62
+ * @params data - 判断的数据
63
+ * @returns 判断结果
64
+ */
65
+ declare function isEmpty(data: any): boolean;
66
+
67
+ /**
68
+ * 判断数据是否为函数
69
+ * @param data - 判断的值
70
+ * @returns 真假值
71
+ */
72
+ declare function isFunction(data: any): boolean;
73
+
74
+ /**
75
+ * 对象序列化为字符串, 用于URL查询字符串或AJAX请求
76
+ * @param data - 需要转化的数据
77
+ * @returns 转换后的字符串
78
+ */
79
+ declare function param(data: Record<string | number, any>): string;
80
+
81
+ /**
82
+ * 为url链接拼接参数
83
+ * @param url - url地址
84
+ * @param searchString - 查询参数
85
+ * @returns 拼接后的url地址
86
+ */
87
+ declare function urlToGet(url: string, searchString: string | Record<string, any>): string;
88
+
89
+ /**
90
+ * 移除空字符串
91
+ * @param data - 需要处理的数据
92
+ * @param pos - 移除位置。默认:两侧,1:左侧,-1右侧,* 所有
93
+ * @returns 字符串
94
+ */
95
+ declare function trim(data: any, pos?: 1 | -1 | '*'): string;
96
+
97
+ declare function clean<
98
+ T extends
99
+ | any[]
100
+ | {
101
+ [key: string]: any;
102
+ [key: number]: any;
103
+ }
104
+ >(data: T, removeEmptyStr?: boolean, removeEmptyObject?: boolean): T;
105
+
106
+ type TargetData = Record<string, any> | any[];
107
+ interface Options {
108
+ string?: Boolean;
109
+ array?: Boolean;
110
+ kvPair?: Boolean;
111
+ }
112
+ /**
113
+ * 移除无效数据,包括:空字符串,空对象,空数组。
114
+ * 注:数组中的值不做处理,会影响数组长度
115
+ *
116
+ * @param data - 将数据进行树摇
117
+ * @param options - 配置参数
118
+ * @returns 树摇后的数据
119
+ */
120
+ declare function shake<T extends TargetData>(data: T, options?: Options): BTDeepPartial<T>;
121
+
122
+ /**
123
+ * 强制转换数据为数组,如果是json字符串,会尝试解析,如果失败,则返回一个空[]
124
+ *
125
+ * @param data - 待转换的数据
126
+ * @returns 数组
127
+ *
128
+ * @example
129
+ * ```javascript
130
+ * // => []
131
+ * const data = _Array('abc')
132
+ *
133
+ * // => []
134
+ * const data3 = _Array({name: 'a'})
135
+ * ```
136
+ */
137
+ declare function _Array<T>(data: any): T[];
138
+
139
+ /**
140
+ * 检测一个数据是否存在
141
+ *
142
+ * @param handler - 每一次检测的回调, 返回值为Boolean,表示是否检测到数据
143
+ * @param callback - 成功回调
144
+ * @param sleepTime - 间隔时间
145
+ */
146
+ declare function variableHasValue(
147
+ handler: () => boolean | undefined,
148
+ callback: () => void,
149
+ sleepTime?: number
150
+ ): void;
151
+ declare namespace variableHasValue {
152
+ var async: (
153
+ handler: () => boolean | undefined,
154
+ sleepTime?: number | undefined
155
+ ) => Promise<unknown>;
156
+ }
157
+
158
+ /**
159
+ * 查找某个元素所在树的所有父链
160
+ * @param tree - 数据
161
+ * @param handler - 验证回调
162
+ * @param config - 字段映射配置。
163
+ * @returns 查找的结果
164
+ */
165
+ declare function deepFindTreePath(
166
+ tree: any[],
167
+ handler: (item: any) => boolean,
168
+ config: {
169
+ id: string;
170
+ children: string;
171
+ }
172
+ ): undefined | any[];
173
+
174
+ /**
175
+ * 强制转换数据为字符串
176
+ * @param data - 值
177
+ * @returns 数字
178
+ */
179
+ declare function _Number(data: any): number;
180
+
181
+ declare function isNull(data: any): boolean;
182
+
183
+ /**
184
+ * 默认值处理函数
185
+ * @param data - 需要处理的数据
186
+ * @param value - 如果data为undefined,则返回此值
187
+ * @returns 实际值
188
+ */
189
+ declare function defaultValue<T>(data: any, value: T): T;
190
+
191
+ /**
192
+ * 循环复制字符串
193
+ * @param data - 复制目标
194
+ * @param count - 复制几次
195
+ * @returns 结果
196
+ */
197
+ declare function repeatString(target: string | number, count: number): string;
198
+
199
+ /**
200
+ * 向前填充字符串
201
+ * @param data - 原始目标
202
+ * @param len - 需要填充的总长度
203
+ * @param target - 填充的字符串
204
+ * @returns 结果
205
+ */
206
+ declare function padStart(data: string | number, len: number, target: string): string;
207
+
208
+ /**
209
+ * 向后填充字符串
210
+ * @param data - 原始目标
211
+ * @param len - 需要填充的总长度
212
+ * @param target - 填充的字符串
213
+ * @returns 结果
214
+ */
215
+ declare function padEnd(data: string | number, len: number, target: string): string;
216
+
217
+ /**
218
+ * 保留几位小数并直接舍去后面的数(不进行四舍五入)
219
+ * @param data - 长得像数字的字符串或数字
220
+ * @param fractionDigits - 保留的小数位
221
+ * @param rejection - 是否删除末尾所有的 "0"
222
+ * @returns 结果
223
+ */
224
+ declare function floorFixed(
225
+ data: number | string,
226
+ fractionDigits: number,
227
+ rejection?: boolean
228
+ ): string;
229
+
230
+ /**
231
+ * 保留几位小数四舍五入
232
+ * toFixed优化版,原生toFixed对于 (3.335).toFixed(2) 结果为:3.33,理想结果为3.34
233
+ * @param data - 长得像数字的字符串或数字
234
+ * @param fractionDigits - 保留的小数位
235
+ * @param rejection - 是否删除末尾所有的 "0"
236
+ * @returns 结果
237
+ */
238
+ declare function roundFixed(
239
+ data: number | string,
240
+ fractionDigits: number,
241
+ rejection?: boolean
242
+ ): string;
243
+
244
+ /**
245
+ * 基于原生split优化版,使空字符传结果为 "[]"
246
+ * @param data - 原始目标
247
+ * @param symbol - 分割
248
+ * @returns 结果
249
+ */
250
+ declare function split(data: string, symbol: string): string[];
251
+
252
+ /**
253
+ * 查询树接口中的某一项
254
+ * @param list - 原始数组
255
+ * @param handle - 遍历的回调函数
256
+ * @param children - 子项字段
257
+ * @returns 结果
258
+ */
259
+ declare function deepFindItem<T>(
260
+ list: T[],
261
+ handle: (data: T) => void,
262
+ children?: string
263
+ ): T | undefined;
264
+
265
+ /**
266
+ * 一维数组转树结构
267
+ * @param list - 待转数组
268
+ * @param props - 生成数据的配置项
269
+ * @param props.id - ID字段
270
+ * @param props.pid - 父ID字段
271
+ * @param props.children - 子项字段
272
+ * @returns 结果
273
+ */
274
+ declare function flatArrayToTree(
275
+ list: any[],
276
+ props?: {
277
+ id?: string;
278
+ pid?: string;
279
+ children?: string;
280
+ }
281
+ ): any[];
282
+
283
+ /**
284
+ * 在给定索引范围内,增减当前索引,如果超出范围,则按当前方向重新循环取值。
285
+ * @param maxIndex - 最大索引
286
+ * @param currentIndex - 当前索引
287
+ * @param increase - 调整多少索引,可为负数
288
+ * @returns 改变后的索引
289
+ */
290
+ declare function changeIndex(maxIndex: number, currentIndex: number, increase: number): number;
291
+
292
+ /**
293
+ * 生成指定范围随机数
294
+ * @param min - 最小值
295
+ * @param max - 最大值
296
+ * @param int - 是否生成整数. 默认true
297
+ * @returns 随机数
298
+ */
299
+ declare function getRandom(min: number, max: number, isInt?: boolean): number;
300
+
301
+ /**
302
+ * 强制转换数据为boolean
303
+ *
304
+ * @param data - 转换的数据
305
+ * @returns 真假
306
+ *
307
+ * @example
308
+ * ```javascript
309
+ * // => true
310
+ * const data1 = _Boolean('true')
311
+ *
312
+ * // => true
313
+ * const data2 = _Boolean(true)
314
+ *
315
+ * // => true
316
+ * const data4 = _Boolean(1)
317
+ *
318
+ * // => true
319
+ * const data3 = _Boolean('1')
320
+ * ```
321
+ */
322
+ declare function _Boolean(data: any): boolean;
323
+
324
+ /**
325
+ * 将树形结构转为一维数组
326
+ * @param data - 树
327
+ * @param childKey - 子项字段。默认 children
328
+ * @returns 浅克隆的数组
329
+ */
330
+ declare function flatTree(data: any[], childKey?: string): any[];
331
+
332
+ /**
333
+ * 简易版深度克隆。(仅处理数组、键值对、方法的可克隆)
334
+ *
335
+ * @param data - 克隆对象
336
+ * @returns
337
+ */
338
+ declare function cloneEasy<T extends [] | Record<any, any> | Function>(data: T): T;
339
+
340
+ /**
341
+ * 树形结构map新数据
342
+ * @param data - 原始树
343
+ * @param childKeyTo - 转换的孩子键
344
+ * @param handle - 迭代方法。这里不用返回子节点
345
+ * @param childKeyFrom - 原始数据的孩子键
346
+ * @returns 转变后的新数据
347
+ */
348
+ declare function main<T extends IKvPair, K extends IKvPair, C extends keyof T>(
349
+ data: K[],
350
+ childKeyTo: C,
351
+ handle: (data: K) => Omit<T, C>,
352
+ childKeyFrom?: keyof K
353
+ ): T[];
354
+
355
+ type EventHander = (...args: any[]) => void;
356
+ /**
357
+ * 事件订阅,可获得TS类型推导支持
358
+ * @param eventName - 订阅名
359
+ * @returns 订阅实例
360
+ * @example
361
+ * ```typescript
362
+ * // 初始化
363
+ * const useUpdateDataBus = defineEventBus<(dataId: number, back: boolean) => void>('UPDATE-DATA')
364
+ *
365
+ * // 开启订阅
366
+ * function busCallback (id: number, isBack: boolean) {}
367
+ * useUpdateDataBus.on(busCallback)
368
+ *
369
+ * // 执行订阅
370
+ * useUpdateDataBus.emit(12, true)
371
+ *
372
+ * // 取消订阅
373
+ * useUpdateDataBus.off(busCallback)
374
+ *
375
+ * // 销毁所有订阅
376
+ * useUpdateDataBus.dispose()
377
+ * ```
378
+ */
379
+ declare function defineEventBus<T extends EventHander>(
380
+ eventName: string
381
+ ): {
382
+ /** 追加订阅 */
383
+ on: (hander: T) => void;
384
+ /** 执行所有订阅 */
385
+ emit: (...args: Parameters<T>) => void;
386
+ /** 取消一个订阅 */
387
+ off: (hander: T) => void;
388
+ /** 销毁所有订阅 */
389
+ dispose: () => void;
390
+ };
391
+
392
+ /**
393
+ * 树形结构迭代
394
+ * @param data - 原始树
395
+ * @param handle - 迭代方法。这里不用返回子节点
396
+ * @param childKey - 子节点字段。默认值:children
397
+ */
398
+ declare function forEachTree<T extends IKvPair>(
399
+ data: T[],
400
+ handle: (data: T) => void,
401
+ childKey?: keyof T
402
+ ): void;
403
+
404
+ declare function forEach<T>(
405
+ data: T[],
406
+ callback: (item: T, index: number, array: T[]) => void
407
+ ): void;
408
+
409
+ /**
410
+ * 获取随机颜色
411
+ */
412
+ declare function randomColor(): string;
413
+
414
+ type VoidFunc = () => void;
415
+ interface PollingOption {
416
+ interval: number;
417
+ timeout: number;
418
+ onMessage?: (remainTime: number) => void;
419
+ handler: (next: VoidFunc, done: VoidFunc) => void;
420
+ }
421
+ /**
422
+ * 轮询
423
+ *
424
+ * @example
425
+ * ```
426
+ * let count = 0
427
+ * const pol = new bestime.Polling({
428
+ * interval: 1000,
429
+ * timeout: 6 * 1000,
430
+ * handler: function (next, done) {
431
+ * count++
432
+ * if(count>=4) {
433
+ * done()
434
+ * } else {
435
+ * next()
436
+ * }
437
+ * },
438
+ * onMessage: function (remainTime) {
439
+ * console.log("剩余", remainTime)
440
+ * }
441
+ * })
442
+ *
443
+ * pol.start()
444
+ * ```
445
+ *
446
+ * */
447
+ declare class Polling {
448
+ private _timer;
449
+ private _timer_info;
450
+ private _stamp;
451
+ private _passStamp;
452
+ private _option;
453
+ constructor(setting: Partial<PollingOption>);
454
+ private _next;
455
+ private _doOnce;
456
+ /** 开始 */
457
+ start(): this;
458
+ /** 完成 */
459
+ done(): this;
460
+ /** 销毁 */
461
+ dispose(): this;
462
+ }
463
+
464
+ /**
465
+ * 解析序列化字符参数为Map格式数据
466
+ * @param str - url 查询参数。默认为window.location.href
467
+ * @returns 键值对
468
+ */
469
+ declare function parseQuery(str?: string): IKvPair;
470
+
471
+ export {
472
+ Polling,
473
+ _Array,
474
+ _Boolean,
475
+ _KvPair,
476
+ _Number,
477
+ _String,
478
+ changeIndex,
479
+ clean,
480
+ cloneEasy,
481
+ deepFindItem,
482
+ deepFindTreePath,
483
+ defaultValue,
484
+ defineEventBus,
485
+ flatTree,
486
+ floorFixed,
487
+ forEach,
488
+ forEachTree,
489
+ getRandom,
490
+ getType,
491
+ isArray,
492
+ isEmpty,
493
+ isFunction,
494
+ isKvPair,
495
+ isNull,
496
+ main as mapTree,
497
+ padEnd,
498
+ padStart,
499
+ param,
500
+ parseQuery,
501
+ randomColor,
502
+ repeatString,
503
+ roundFixed,
504
+ shake,
505
+ split,
506
+ flatArrayToTree as tree,
507
+ trim,
508
+ urlToGet,
509
+ variableHasValue
510
+ };
511
+
512
+ export default undefined;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 基础工具库 => jUtilsBase
3
+ * @QQ 1174295440
4
+ * @author IT0909
5
+ * @update 2023-11-05 11:30:06
6
+ */
7
+ function isNull(e){return null===e||e===undefined}function _String(e){return isNull(e)?"":String(e)}var $ArrayTypeNameBig="Array",$FunctionTypeNameBig="Function",$ObjectTypeNameBig="Object",$stringTypeNameBig="String",$numberTypeNameBig="Number",$undefinedValue=void 0,$zeroString="0",$falseString="false",$trueString="true",$ObjectTypeNameBigPrototypeToString=Object.prototype.toString,$encodeURI=encodeURI,$decodeURIComponent=decodeURIComponent,$regSpaceStr="\\s\\uFEFF\\xA0",$isBroswer="undefined"!=typeof document&&document.getElementById!==undefined,$browserGlobal="undefined"!=typeof window?window:$undefinedValue;function getType(e){return $ObjectTypeNameBigPrototypeToString.call(e).slice(8,-1)}function isArray(e){return getType(e)===$ArrayTypeNameBig}function isKvPair(e){return getType(e)===$ObjectTypeNameBig}function hpJsonParse(e,n){var r;try{r=JSON.parse(e)}catch(t){r=n}return r}function _KvPair(e){return e=isKvPair(e)||isKvPair(e=hpJsonParse(e))?e:{}}function isEmpty(e){return isNull(e)||""===e}function isFunction(e){return"function"==typeof e}function param(e){var r=[];function i(e,n){null!=e&&""!==e&&(n=null==(n=isFunction(n)?n():n)?"":n,r[r.length]=$encodeURI(e)+"="+$encodeURI(n))}return function a(e,n){var r,t;if(e)switch(getType(n)){case $ArrayTypeNameBig:for(r=0;r<n.length;r++)a(e+"["+("object"==typeof n[r]&&n[r]?r:"")+"]",n[r]);break;case $ObjectTypeNameBig:for(t in n)a(e+"["+t+"]",n[t]);break;default:i(e,n)}else switch(getType(n)){case $stringTypeNameBig:case $ObjectTypeNameBig:for(t in n)a(t,n[t]);break;case $ArrayTypeNameBig:for(r=0;r<n.length;r++)i(n[r].name,n[r].value)}}("",e),r.join("&")}function urlToGet(e,n){e=_String(e).replace(/&*$/g,"").replace(/\?*$/,"");var r="";return(r=isKvPair(n)||isArray(n)?param(n):_String(n).replace(/^&*/,""))&&(e+=(/\?/.test(e)?"&":"?")+r),e}$isBroswer?document.getElementsByTagName("head")[0]:undefined;var baseReg="["+$regSpaceStr+"]+";function trim(e,n){var r=getType(e),t=(r===$numberTypeNameBig&&(e=String(e),r=$stringTypeNameBig),"");if(r!==$stringTypeNameBig)return"";switch(n){case 1:t="^"+baseReg;break;case-1:t=baseReg+"$";break;case"*":t=baseReg;break;default:t="^"+baseReg+"|"+baseReg+"$"}return e.replace(new RegExp(t,"g"),"")}function isString(e){return getType(e)===$stringTypeNameBig}function hpIsEmptyMap(e){var n,r=!0;for(n in e)if(n!==undefined){r=!1;break}return r}function clean(e,n,r){if(r=!1!==r,isKvPair(e)){var t,i,a={};for(i in e)_filterData(isArray(t=e[i])||isKvPair(t)?clean(t,n):t,n,r,function(e){a[i]=e})}else if(isArray(e)){a=[];for(var o=0,s=e.length;o<s;o++)_filterData(clean(e[o],n),n,r,function(e){a.push(e)})}else a=e;return a}function _filterData(e,n,r,t){isString(e)?n&&""==trim(e,"*")||t(e):null!=e&&(r&&isKvPair(e)&&hpIsEmptyMap(e),t(e))}function cloneEasy(e){switch(getType(e)){case $ArrayTypeNameBig:for(var n=[],r=0;r<e.length;r++)n.push(cloneEasy(e[r]));break;case $ObjectTypeNameBig:for(var t in n={},e)n[t]=cloneEasy(e[t]);break;case $FunctionTypeNameBig:function i(){e.apply(this,arguments)}for(var a in e.prototype)i.prototype[a]=e.prototype[a];n=i;break;default:n=e}return n}function isNoData(e,n){var r=!1;return r=isArray(e)&&n.array&&0===e.length||isKvPair(e)&&n.kvPair&&hpIsEmptyMap(e)||isString(e)&&n.string&&""===e||isNull(e)?!0:r}function hander(e,n){if(isKvPair(e))for(var r in e){var t=e[r];(isArray(t)||isKvPair(t))&&hander(t,n),isNoData(t,n)&&delete e[r]}}function shake(e,n){n=Object.assign({string:!0,array:!0,kvPair:!0},n);return hander(e=cloneEasy(e),n),e}function _Array(e){return e=isArray(e)||isArray(e=hpJsonParse(e))?e:[]}function variableHasValue(e,n,r){var t;r=null==r?60:r,e()?n():(clearTimeout(t),setTimeout(function(){variableHasValue(e,n,r)},r))}variableHasValue["async"]=function(n,r){return new Promise(function(e){variableHasValue(n,e,r)})};var DEFAULT_CONFIG={id:"id",children:"children"};function deepFindTreePath(e,n,r){r=Object.assign(DEFAULT_CONFIG,r);for(var t=[],i=cloneEasy(e),a=new Set,o=r["children"];i.length;){var s=i[0];if(a.has(s))t.pop(),i.shift();else if(a.add(s),s[o]&&i.unshift.apply(i,s[o]),t.push(s),n(s))return t}return undefined}function _Number(e){return(e=Number(e))===Math.abs(Infinity)||isNaN(e)?0:e}function defaultValue(e,n){return isNull(e)?n:e}function repeatString(e,n){var r="";if((e=_String(e)).length*n<1<<28)for(;1==(1&n)&&(r+=e),0!=(n>>>=1);)e+=e;return r}function hpPadString(e,n,r,t){return(e=_String(e)).length>(n>>=0)?e:(n-=e.length,r.length<n&&(r+=repeatString(r,n/r.length)),-1===t?r.slice(0,n)+e:e+r.slice(0,n))}function padStart(e,n,r){return hpPadString(e,n,r,-1)}function padEnd(e,n,r){return hpPadString(e,n,r,1)}function split(e,n){return""!==e?e.split(n):[]}function floorFixed(e,n,r){var e=split(e=trim(_Number(e)),"."),t=e[1]||"";return t.length<n&&(t=padEnd(t,n,$zeroString),r&&(t=t.replace(/0+$/,""))),n<1||!t?e[0]:e[0]+"."+t.substring(0,n)}function roundFixed(e,n,r){e=_Number(e);var t,i=Math.pow(10,n),e=_String(Math.round(e*i)/i);return 0<n&&(t=(i=split(e,"."))[0],(i=i[1]||"").length<n&&(i=padEnd(i,n,$zeroString),e=(i=r?i.replace(/0+$/,""):i)?t+"."+i:t)),e}function deepFindItem(e,r,n){var t,i,a=isNull(n)?"children":n;return function o(e){if(e)for(var n=0;n<e.length;n++){if(i=r(e[n])){t=e[n];break}if(o(e[n][a]),i)break}}(e),t}function flatArrayToTree(e,n){for(var r=(n=_KvPair(n)).id||"id",t=n.pid||"pid",i=n.children||"children",a=0;a<e.length;a++){var o,s=e[a];(o=deepFindItem(e,function(e){return null!=e[r]&&e[r]!=s[r]&&e[r]===s[t]},i))&&(o[i]=_Array(o[i]),o[i].push(s),e.splice(a--,1))}return e}function changeIndex(e,n,r){if(e<0)return n;e+=1;return(n=(n+r)%e)<0&&(n+=e),-0===n?0:n}function getRandom(e,n,r){r=!1===r?0:1;return e=Math.random()*(n-e+r)+e,r?Math.floor(e):e}function _Boolean(e){return!0===e||"true"===e||"1"===e||1===e}function flatTree(e,t){var i=[];return t=defaultValue(t,"children"),function a(e){if(isArray(e))for(var n,r=0;r<e.length;r++)n=e[r],i.push(n),a(n[t])}(e),i}function main(e,t,i,a){a=a||"children";var n=[];return function o(e,n){for(var r=0;r<e.length;r++)n[r]=cloneEasy(i(e[r])),e[r][a]&&(n[r][t]=[],o(e[r][a],n[r][t]))}(e,n),n}var events={};function defineEventBus(i){if(events[i])throw'"'+i+'" Has already been registered!';return events[i]=events[i]||[],{on:function(e){events[i].push(e)},emit:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];for(var t=0;t<events[i].length;t++)events[i][t].apply($undefinedValue,n)},off:function(e){if(!e)throw"the hander of off is required!";for(var n=0;n<events[i].length;n++)events[i][n]===e&&events[i].splice(n--,1)},dispose:function(){for(var e=0;e<events[i].length;e++)events[i].splice(e--,1);delete events[i]}}}function forEachTree(e,r,t){t=t||"children",function i(e){for(var n=0;n<e.length;n++)r(e[n]),isArray(e[n][t])&&i(e[n][t])}(e)}function forEach(e,n){for(var r=0;r<e.length;r++)n(e[r],r,e)}function randomColor(){return"rgba("+getRandom(0,255,!0)+","+getRandom(0,255,!0)+","+getRandom(0,255,!0)+",1)"}function emptyFunc(e,n){}var Polling=function(){function e(e){this._timer=void 0,this._timer_info=void 0,this._stamp=0,this._passStamp=0,this._option=void 0,this._option=Object.assign({timeout:6e3,interval:1e3,handler:emptyFunc},e),this._next=this._next.bind(this),this._doOnce=this._doOnce.bind(this),this.done=this.done.bind(this)}var n=e.prototype;return n._next=function(){return clearInterval(this._timer),this._passStamp=+new Date-this._stamp,this._timer=setTimeout(this._doOnce,this._option.interval),this},n._doOnce=function(){if(this._passStamp>=this._option.timeout)return this._option.onMessage&&this._option.onMessage(0),this.done(),this;this._option.handler(this._next,this.done)},n.start=function(){var e,n=this;this._stamp=+new Date,this.done(),this._doOnce();return this._option.onMessage&&(clearInterval(this._timer_info),this._timer_info=setInterval(function(){e=+new Date-n._stamp,0===(e=Math.max(n._option.timeout-e,0))&&n.done(),n._option.onMessage(e)},100)),this},n.done=function(){return clearTimeout(this._timer),clearTimeout(this._timer_info),this},n.dispose=function(){return this.done(),this},e}();function hpTryToParseStringToBasicType(e){return null==e?undefined:$falseString!==e&&($trueString===e||hpJsonParse(e,e))}var defaultSplitArr=[$undefinedValue,$undefinedValue];function handleDeepKey(e,n,r){var n=splitSymbol(n),t=n[0];isPreLikeArray(t)?(t=_Number(t),n[1]==$undefinedValue?e.push(r):(/^\[[\D]+\]/.test(n[1])?e[t]=_KvPair(e[t]):e[t]=_Array(e[t]),handleDeepKey(e[t],n[1],r))):n[1]==$undefinedValue?e[t]=r:(/^\[[\D]+\]/.test(n[1])?e[t]=_KvPair(e[t]):e[t]=_Array(e[t]),handleDeepKey(e[t],n[1],r))}function splitSymbol(e){if(e==$undefinedValue)return defaultSplitArr;var t,i=e;return e.replace(/^\[(.*?)\](.*)?/,function(e,n,r){return i=n,t=r,""}),[i,t]}function isPreLikeArray(e){return""===e||/^\d+$/.test(e)}function parseQuery(e){var a,r,o={};return(e=e||$isBroswer&&$browserGlobal.location.href||"").replace(/([^=&?/#]*?)=([^=&?/#]*)/g,function(e,n,i){i=hpTryToParseStringToBasicType($decodeURIComponent(i)),r=$decodeURIComponent(n),a=!1,""!==r&&(r.replace(/(.*?)(\[.*)/,function(e,n,r){var t=splitSymbol(r);a=!0,isPreLikeArray(t[0])?o[n]=_Array(o[n]):o[n]=_KvPair(o[n]),handleDeepKey(o[n],r,i)}),a||(o[r]=i))}),o}export{Polling,_Array,_Boolean,_KvPair,_Number,_String,changeIndex,clean,cloneEasy,deepFindItem,deepFindTreePath,defaultValue,defineEventBus,flatTree,floorFixed,forEach,forEachTree,getRandom,getType,isArray,isEmpty,isFunction,isKvPair,isNull,main as mapTree,padEnd,padStart,param,parseQuery,randomColor,repeatString,roundFixed,shake,split,flatArrayToTree as tree,trim,urlToGet,variableHasValue};
@@ -0,0 +1,519 @@
1
+ /**
2
+ * 强制转化数据为字符串
3
+ * @param data - 处理的值
4
+ * @returns 实际值2
5
+ */
6
+ declare function _String(data: any): string;
7
+
8
+ /**
9
+ * 获取数据类型
10
+ *
11
+ * @param data - 需要判断的数据
12
+ * @return 数据类型字符串
13
+ */
14
+ declare function getType(data: any): string;
15
+
16
+ /**
17
+ * 判断数据是否为数组
18
+ * @param arg - 判断的值
19
+ * @returns 真假值
20
+ */
21
+ declare function isArray(arg: any): arg is any[];
22
+
23
+ /**
24
+ * 判断数据是否为对象
25
+ * @param data - 判断的值
26
+ * @returns 真假值
27
+ */
28
+ declare function isKvPair(data: any): boolean;
29
+
30
+ /**
31
+ * 递归将所有属性改为可选
32
+ */
33
+ type BTDeepPartial<T = any> = {
34
+ [P in keyof T]?: T[P] extends Function ? T[P] : T[P] extends object ? BTDeepPartial<T[P]> : T[P];
35
+ };
36
+ /**
37
+ * 键值对格式的数据
38
+ * */
39
+ type IKvPair = Record<string, any>;
40
+
41
+ /**
42
+ * 强制转换数据为键值对数据,如果是json字符串,会尝试解析,如果失败,则返回一个空Map
43
+ * @param data - 转换的数据
44
+ * @returns 键值对数据
45
+ *
46
+ * @example
47
+ * ```javascript
48
+ * // => {}
49
+ * const data = _KvPair('abc')
50
+ *
51
+ * // => {}
52
+ * const data2 = _KvPair([])
53
+ *
54
+ * // => {name: 'a'}
55
+ * const data3 = _KvPair({name: 'a'})
56
+ * ```
57
+ */
58
+ declare function _KvPair(data: any): IKvPair;
59
+
60
+ /**
61
+ * 判断是否为空[null, undefined, '']
62
+ * @params data - 判断的数据
63
+ * @returns 判断结果
64
+ */
65
+ declare function isEmpty(data: any): boolean;
66
+
67
+ /**
68
+ * 判断数据是否为函数
69
+ * @param data - 判断的值
70
+ * @returns 真假值
71
+ */
72
+ declare function isFunction(data: any): boolean;
73
+
74
+ /**
75
+ * 对象序列化为字符串, 用于URL查询字符串或AJAX请求
76
+ * @param data - 需要转化的数据
77
+ * @returns 转换后的字符串
78
+ */
79
+ declare function param(data: Record<string | number, any>): string;
80
+
81
+ /**
82
+ * 为url链接拼接参数
83
+ * @param url - url地址
84
+ * @param searchString - 查询参数
85
+ * @returns 拼接后的url地址
86
+ */
87
+ declare function urlToGet(url: string, searchString: string | Record<string, any>): string;
88
+
89
+ /**
90
+ * 移除空字符串
91
+ * @param data - 需要处理的数据
92
+ * @param pos - 移除位置。默认:两侧,1:左侧,-1右侧,* 所有
93
+ * @returns 字符串
94
+ */
95
+ declare function trim(data: any, pos?: 1 | -1 | '*'): string;
96
+
97
+ declare function clean<
98
+ T extends
99
+ | any[]
100
+ | {
101
+ [key: string]: any;
102
+ [key: number]: any;
103
+ }
104
+ >(data: T, removeEmptyStr?: boolean, removeEmptyObject?: boolean): T;
105
+
106
+ type TargetData = Record<string, any> | any[];
107
+ interface Options {
108
+ string?: Boolean;
109
+ array?: Boolean;
110
+ kvPair?: Boolean;
111
+ }
112
+ /**
113
+ * 移除无效数据,包括:空字符串,空对象,空数组。
114
+ * 注:数组中的值不做处理,会影响数组长度
115
+ *
116
+ * @param data - 将数据进行树摇
117
+ * @param options - 配置参数
118
+ * @returns 树摇后的数据
119
+ */
120
+ declare function shake<T extends TargetData>(data: T, options?: Options): BTDeepPartial<T>;
121
+
122
+ /**
123
+ * 强制转换数据为数组,如果是json字符串,会尝试解析,如果失败,则返回一个空[]
124
+ *
125
+ * @param data - 待转换的数据
126
+ * @returns 数组
127
+ *
128
+ * @example
129
+ * ```javascript
130
+ * // => []
131
+ * const data = _Array('abc')
132
+ *
133
+ * // => []
134
+ * const data3 = _Array({name: 'a'})
135
+ * ```
136
+ */
137
+ declare function _Array<T>(data: any): T[];
138
+
139
+ /**
140
+ * 检测一个数据是否存在
141
+ *
142
+ * @param handler - 每一次检测的回调, 返回值为Boolean,表示是否检测到数据
143
+ * @param callback - 成功回调
144
+ * @param sleepTime - 间隔时间
145
+ */
146
+ declare function variableHasValue(
147
+ handler: () => boolean | undefined,
148
+ callback: () => void,
149
+ sleepTime?: number
150
+ ): void;
151
+ declare namespace variableHasValue {
152
+ var async: (
153
+ handler: () => boolean | undefined,
154
+ sleepTime?: number | undefined
155
+ ) => Promise<unknown>;
156
+ }
157
+
158
+ /**
159
+ * 查找某个元素所在树的所有父链
160
+ * @param tree - 数据
161
+ * @param handler - 验证回调
162
+ * @param config - 字段映射配置。
163
+ * @returns 查找的结果
164
+ */
165
+ declare function deepFindTreePath(
166
+ tree: any[],
167
+ handler: (item: any) => boolean,
168
+ config: {
169
+ id: string;
170
+ children: string;
171
+ }
172
+ ): undefined | any[];
173
+
174
+ /**
175
+ * 强制转换数据为字符串
176
+ * @param data - 值
177
+ * @returns 数字
178
+ */
179
+ declare function _Number(data: any): number;
180
+
181
+ declare function isNull(data: any): boolean;
182
+
183
+ /**
184
+ * 默认值处理函数
185
+ * @param data - 需要处理的数据
186
+ * @param value - 如果data为undefined,则返回此值
187
+ * @returns 实际值
188
+ */
189
+ declare function defaultValue<T>(data: any, value: T): T;
190
+
191
+ /**
192
+ * 循环复制字符串
193
+ * @param data - 复制目标
194
+ * @param count - 复制几次
195
+ * @returns 结果
196
+ */
197
+ declare function repeatString(target: string | number, count: number): string;
198
+
199
+ /**
200
+ * 向前填充字符串
201
+ * @param data - 原始目标
202
+ * @param len - 需要填充的总长度
203
+ * @param target - 填充的字符串
204
+ * @returns 结果
205
+ */
206
+ declare function padStart(data: string | number, len: number, target: string): string;
207
+
208
+ /**
209
+ * 向后填充字符串
210
+ * @param data - 原始目标
211
+ * @param len - 需要填充的总长度
212
+ * @param target - 填充的字符串
213
+ * @returns 结果
214
+ */
215
+ declare function padEnd(data: string | number, len: number, target: string): string;
216
+
217
+ /**
218
+ * 保留几位小数并直接舍去后面的数(不进行四舍五入)
219
+ * @param data - 长得像数字的字符串或数字
220
+ * @param fractionDigits - 保留的小数位
221
+ * @param rejection - 是否删除末尾所有的 "0"
222
+ * @returns 结果
223
+ */
224
+ declare function floorFixed(
225
+ data: number | string,
226
+ fractionDigits: number,
227
+ rejection?: boolean
228
+ ): string;
229
+
230
+ /**
231
+ * 保留几位小数四舍五入
232
+ * toFixed优化版,原生toFixed对于 (3.335).toFixed(2) 结果为:3.33,理想结果为3.34
233
+ * @param data - 长得像数字的字符串或数字
234
+ * @param fractionDigits - 保留的小数位
235
+ * @param rejection - 是否删除末尾所有的 "0"
236
+ * @returns 结果
237
+ */
238
+ declare function roundFixed(
239
+ data: number | string,
240
+ fractionDigits: number,
241
+ rejection?: boolean
242
+ ): string;
243
+
244
+ /**
245
+ * 基于原生split优化版,使空字符传结果为 "[]"
246
+ * @param data - 原始目标
247
+ * @param symbol - 分割
248
+ * @returns 结果
249
+ */
250
+ declare function split(data: string, symbol: string): string[];
251
+
252
+ /**
253
+ * 查询树接口中的某一项
254
+ * @param list - 原始数组
255
+ * @param handle - 遍历的回调函数
256
+ * @param children - 子项字段
257
+ * @returns 结果
258
+ */
259
+ declare function deepFindItem<T>(
260
+ list: T[],
261
+ handle: (data: T) => void,
262
+ children?: string
263
+ ): T | undefined;
264
+
265
+ /**
266
+ * 一维数组转树结构
267
+ * @param list - 待转数组
268
+ * @param props - 生成数据的配置项
269
+ * @param props.id - ID字段
270
+ * @param props.pid - 父ID字段
271
+ * @param props.children - 子项字段
272
+ * @returns 结果
273
+ */
274
+ declare function flatArrayToTree(
275
+ list: any[],
276
+ props?: {
277
+ id?: string;
278
+ pid?: string;
279
+ children?: string;
280
+ }
281
+ ): any[];
282
+
283
+ /**
284
+ * 在给定索引范围内,增减当前索引,如果超出范围,则按当前方向重新循环取值。
285
+ * @param maxIndex - 最大索引
286
+ * @param currentIndex - 当前索引
287
+ * @param increase - 调整多少索引,可为负数
288
+ * @returns 改变后的索引
289
+ */
290
+ declare function changeIndex(maxIndex: number, currentIndex: number, increase: number): number;
291
+
292
+ /**
293
+ * 生成指定范围随机数
294
+ * @param min - 最小值
295
+ * @param max - 最大值
296
+ * @param int - 是否生成整数. 默认true
297
+ * @returns 随机数
298
+ */
299
+ declare function getRandom(min: number, max: number, isInt?: boolean): number;
300
+
301
+ /**
302
+ * 强制转换数据为boolean
303
+ *
304
+ * @param data - 转换的数据
305
+ * @returns 真假
306
+ *
307
+ * @example
308
+ * ```javascript
309
+ * // => true
310
+ * const data1 = _Boolean('true')
311
+ *
312
+ * // => true
313
+ * const data2 = _Boolean(true)
314
+ *
315
+ * // => true
316
+ * const data4 = _Boolean(1)
317
+ *
318
+ * // => true
319
+ * const data3 = _Boolean('1')
320
+ * ```
321
+ */
322
+ declare function _Boolean(data: any): boolean;
323
+
324
+ /**
325
+ * 将树形结构转为一维数组
326
+ * @param data - 树
327
+ * @param childKey - 子项字段。默认 children
328
+ * @returns 浅克隆的数组
329
+ */
330
+ declare function flatTree(data: any[], childKey?: string): any[];
331
+
332
+ /**
333
+ * 简易版深度克隆。(仅处理数组、键值对、方法的可克隆)
334
+ *
335
+ * @param data - 克隆对象
336
+ * @returns
337
+ */
338
+ declare function cloneEasy<T extends [] | Record<any, any> | Function>(data: T): T;
339
+
340
+ /**
341
+ * 树形结构map新数据
342
+ * @param data - 原始树
343
+ * @param childKeyTo - 转换的孩子键
344
+ * @param handle - 迭代方法。这里不用返回子节点
345
+ * @param childKeyFrom - 原始数据的孩子键
346
+ * @returns 转变后的新数据
347
+ */
348
+ declare function main<T extends IKvPair, K extends IKvPair, C extends keyof T>(
349
+ data: K[],
350
+ childKeyTo: C,
351
+ handle: (data: K) => Omit<T, C>,
352
+ childKeyFrom?: keyof K
353
+ ): T[];
354
+
355
+ type EventHander = (...args: any[]) => void;
356
+ /**
357
+ * 事件订阅,可获得TS类型推导支持
358
+ * @param eventName - 订阅名
359
+ * @returns 订阅实例
360
+ * @example
361
+ * ```typescript
362
+ * // 初始化
363
+ * const useUpdateDataBus = defineEventBus<(dataId: number, back: boolean) => void>('UPDATE-DATA')
364
+ *
365
+ * // 开启订阅
366
+ * function busCallback (id: number, isBack: boolean) {}
367
+ * useUpdateDataBus.on(busCallback)
368
+ *
369
+ * // 执行订阅
370
+ * useUpdateDataBus.emit(12, true)
371
+ *
372
+ * // 取消订阅
373
+ * useUpdateDataBus.off(busCallback)
374
+ *
375
+ * // 销毁所有订阅
376
+ * useUpdateDataBus.dispose()
377
+ * ```
378
+ */
379
+ declare function defineEventBus<T extends EventHander>(
380
+ eventName: string
381
+ ): {
382
+ /** 追加订阅 */
383
+ on: (hander: T) => void;
384
+ /** 执行所有订阅 */
385
+ emit: (...args: Parameters<T>) => void;
386
+ /** 取消一个订阅 */
387
+ off: (hander: T) => void;
388
+ /** 销毁所有订阅 */
389
+ dispose: () => void;
390
+ };
391
+
392
+ /**
393
+ * 树形结构迭代
394
+ * @param data - 原始树
395
+ * @param handle - 迭代方法。这里不用返回子节点
396
+ * @param childKey - 子节点字段。默认值:children
397
+ */
398
+ declare function forEachTree<T extends IKvPair>(
399
+ data: T[],
400
+ handle: (data: T) => void,
401
+ childKey?: keyof T
402
+ ): void;
403
+
404
+ declare function forEach<T>(
405
+ data: T[],
406
+ callback: (item: T, index: number, array: T[]) => void
407
+ ): void;
408
+
409
+ /**
410
+ * 获取随机颜色
411
+ */
412
+ declare function randomColor(): string;
413
+
414
+ type VoidFunc = () => void;
415
+ interface PollingOption {
416
+ interval: number;
417
+ timeout: number;
418
+ onMessage?: (remainTime: number) => void;
419
+ handler: (next: VoidFunc, done: VoidFunc) => void;
420
+ }
421
+ /**
422
+ * 轮询
423
+ *
424
+ * @example
425
+ * ```
426
+ * let count = 0
427
+ * const pol = new bestime.Polling({
428
+ * interval: 1000,
429
+ * timeout: 6 * 1000,
430
+ * handler: function (next, done) {
431
+ * count++
432
+ * if(count>=4) {
433
+ * done()
434
+ * } else {
435
+ * next()
436
+ * }
437
+ * },
438
+ * onMessage: function (remainTime) {
439
+ * console.log("剩余", remainTime)
440
+ * }
441
+ * })
442
+ *
443
+ * pol.start()
444
+ * ```
445
+ *
446
+ * */
447
+ declare class Polling {
448
+ private _timer;
449
+ private _timer_info;
450
+ private _stamp;
451
+ private _passStamp;
452
+ private _option;
453
+ constructor(setting: Partial<PollingOption>);
454
+ private _next;
455
+ private _doOnce;
456
+ /** 开始 */
457
+ start(): this;
458
+ /** 完成 */
459
+ done(): this;
460
+ /** 销毁 */
461
+ dispose(): this;
462
+ }
463
+
464
+ /**
465
+ * 解析序列化字符参数为Map格式数据
466
+ * @param str - url 查询参数。默认为window.location.href
467
+ * @returns 键值对
468
+ */
469
+ declare function parseQuery(str?: string): IKvPair;
470
+
471
+ declare global {
472
+ /**
473
+ * 该声明文件用于全局声明(不用npm安装时拷贝到项目中直接使用)
474
+ */
475
+ namespace jUtilsBase {
476
+ export {
477
+ Polling,
478
+ _Array,
479
+ _Boolean,
480
+ _KvPair,
481
+ _Number,
482
+ _String,
483
+ changeIndex,
484
+ clean,
485
+ cloneEasy,
486
+ deepFindItem,
487
+ deepFindTreePath,
488
+ defaultValue,
489
+ defineEventBus,
490
+ flatTree,
491
+ floorFixed,
492
+ forEach,
493
+ forEachTree,
494
+ getRandom,
495
+ getType,
496
+ isArray,
497
+ isEmpty,
498
+ isFunction,
499
+ isKvPair,
500
+ isNull,
501
+ main as mapTree,
502
+ padEnd,
503
+ padStart,
504
+ param,
505
+ parseQuery,
506
+ randomColor,
507
+ repeatString,
508
+ roundFixed,
509
+ shake,
510
+ split,
511
+ flatArrayToTree as tree,
512
+ trim,
513
+ urlToGet,
514
+ variableHasValue
515
+ };
516
+ }
517
+ }
518
+
519
+ export default undefined;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 基础工具库 => jUtilsBase
3
+ * @QQ 1174295440
4
+ * @author IT0909
5
+ * @update 2023-11-05 11:30:06
6
+ */
7
+ !function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).jUtilsBase={})}(this,function(n){"use strict";function a(n){return null===n||n===undefined}function o(n){return a(n)?"":String(n)}var u="Array",f="Object",s="String",B="Number",c=void 0,D="false",R="true",U=Object.prototype.toString,r=encodeURI,i=decodeURIComponent,t="undefined"!=typeof document&&document.getElementById!==undefined,C="undefined"!=typeof window?window:c;function l(n){return U.call(n).slice(8,-1)}function h(n){return l(n)===u}function d(n){return l(n)===f}function p(n,t){var e;try{e=JSON.parse(n)}catch(r){e=t}return e}function v(n){return n=d(n)||d(n=p(n))?n:{}}function g(n){return"function"==typeof n}function m(n){var e=[];function i(n,t){null!=n&&""!==n&&(t=null==(t=g(t)?t():t)?"":t,e[e.length]=r(n)+"="+r(t))}return function o(n,t){var e,r;if(n)switch(l(t)){case u:for(e=0;e<t.length;e++)o(n+"["+("object"==typeof t[e]&&t[e]?e:"")+"]",t[e]);break;case f:for(r in t)o(n+"["+r+"]",t[r]);break;default:i(n,t)}else switch(l(t)){case s:case f:for(r in t)o(r,t[r]);break;case u:for(e=0;e<t.length;e++)i(t[e].name,t[e].value)}}("",n),e.join("&")}t?document.getElementsByTagName("head")[0]:undefined;var _="[\\s\\uFEFF\\xA0]+";function b(n,t){var e=l(n),r=(e===B&&(n=String(n),e=s),"");if(e!==s)return"";switch(t){case 1:r="^"+_;break;case-1:r=_+"$";break;case"*":r=_;break;default:r="^"+_+"|"+_+"$"}return n.replace(new RegExp(r,"g"),"")}function y(n){return l(n)===s}function w(n){var t,e=!0;for(t in n)if(t!==undefined){e=!1;break}return e}function k(n,t,e,r){y(n)?t&&""==b(n,"*")||r(n):null!=n&&(e&&d(n)&&w(n),r(n))}function T(n){switch(l(n)){case u:for(var t=[],e=0;e<n.length;e++)t.push(T(n[e]));break;case f:for(var r in t={},n)t[r]=T(n[r]);break;case"Function":function i(){n.apply(this,arguments)}for(var o in n.prototype)i.prototype[o]=n.prototype[o];t=i;break;default:t=n}return t}function x(n,t){if(d(n))for(var e in n){var r=n[e];(h(r)||d(r))&&x(r,t),i=t,o=!1,(o=!!(h(r=r)&&i.array&&0===r.length||d(r)&&i.kvPair&&w(r)||y(r)&&i.string&&""===r||a(r))||o)&&delete n[e]}var i,o}function S(n){return n=h(n)||h(n=p(n))?n:[]}function O(n,t,e){var r;e=null==e?60:e,n()?t():(clearTimeout(r),setTimeout(function(){O(n,t,e)},e))}O["async"]=function(t,e){return new Promise(function(n){O(t,n,e)})};var H={id:"id",children:"children"};function E(n){return(n=Number(n))===Math.abs(Infinity)||isNaN(n)?0:n}function e(n,t){return a(n)?t:n}function M(n,t){var e="";if((n=o(n)).length*t<1<<28)for(;1==(1&t)&&(e+=n),0!=(t>>>=1);)n+=n;return e}function j(n,t,e,r){return(n=o(n)).length>(t>>=0)?n:(t-=n.length,e.length<t&&(e+=M(e,t/e.length)),-1===r?e.slice(0,t)+n:n+e.slice(0,t))}function F(n,t,e){return j(n,t,e,1)}function I(n,t){return""!==n?n.split(t):[]}function N(n,e,t){var r,i,o=a(t)?"children":t;return function u(n){if(n)for(var t=0;t<n.length;t++){if(i=e(n[t])){r=n[t];break}if(u(n[t][o]),i)break}}(n),r}function P(n,t,e){e=!1===e?0:1;return n=Math.random()*(t-n+e)+n,e?Math.floor(n):n}var $={};function K(n,t){}var V=[c,c];function q(n){if(n==c)return V;var r,i=n;return n.replace(/^\[(.*?)\](.*)?/,function(n,t,e){return i=t,r=e,""}),[i,r]}function G(n){return""===n||/^\d+$/.test(n)}n.Polling=function(){function n(n){this._timer=void 0,this._timer_info=void 0,this._stamp=0,this._passStamp=0,this._option=void 0,this._option=Object.assign({timeout:6e3,interval:1e3,handler:K},n),this._next=this._next.bind(this),this._doOnce=this._doOnce.bind(this),this.done=this.done.bind(this)}var t=n.prototype;return t._next=function(){return clearInterval(this._timer),this._passStamp=+new Date-this._stamp,this._timer=setTimeout(this._doOnce,this._option.interval),this},t._doOnce=function(){if(this._passStamp>=this._option.timeout)return this._option.onMessage&&this._option.onMessage(0),this.done(),this;this._option.handler(this._next,this.done)},t.start=function(){var n,t=this;this._stamp=+new Date,this.done(),this._doOnce();return this._option.onMessage&&(clearInterval(this._timer_info),this._timer_info=setInterval(function(){n=+new Date-t._stamp,0===(n=Math.max(t._option.timeout-n,0))&&t.done(),t._option.onMessage(n)},100)),this},t.done=function(){return clearTimeout(this._timer),clearTimeout(this._timer_info),this},t.dispose=function(){return this.done(),this},n}(),n._Array=S,n._Boolean=function(n){return!0===n||"true"===n||"1"===n||1===n},n._KvPair=v,n._Number=E,n._String=o,n.changeIndex=function(n,t,e){return n<0?t:((t=(t+e)%(n+=1))<0&&(t+=n),-0===t?0:t)},n.clean=function A(n,t,e){if(e=!1!==e,d(n)){var r,i,o={};for(i in n)k(h(r=n[i])||d(r)?A(r,t):r,t,e,function(n){o[i]=n})}else if(h(n)){o=[];for(var u=0,a=n.length;u<a;u++)k(A(n[u],t),t,e,function(n){o.push(n)})}else o=n;return o},n.cloneEasy=T,n.deepFindItem=N,n.deepFindTreePath=function(n,t,e){e=Object.assign(H,e);for(var r=[],i=T(n),o=new Set,u=e["children"];i.length;){var a=i[0];if(o.has(a))r.pop(),i.shift();else if(o.add(a),a[u]&&i.unshift.apply(i,a[u]),r.push(a),t(a))return r}return undefined},n.defaultValue=e,n.defineEventBus=function(i){if($[i])throw'"'+i+'" Has already been registered!';return $[i]=$[i]||[],{on:function(n){$[i].push(n)},emit:function(){for(var n=arguments.length,t=new Array(n),e=0;e<n;e++)t[e]=arguments[e];for(var r=0;r<$[i].length;r++)$[i][r].apply(c,t)},off:function(n){if(!n)throw"the hander of off is required!";for(var t=0;t<$[i].length;t++)$[i][t]===n&&$[i].splice(t--,1)},dispose:function(){for(var n=0;n<$[i].length;n++)$[i].splice(n--,1);delete $[i]}}},n.flatTree=function(n,r){var i=[];return r=e(r,"children"),function o(n){if(h(n))for(var t,e=0;e<n.length;e++)t=n[e],i.push(t),o(t[r])}(n),i},n.floorFixed=function(n,t,e){var r=(n=I(n=b(E(n)),"."))[1]||"";return r.length<t&&(r=F(r,t,"0"),e&&(r=r.replace(/0+$/,""))),t<1||!r?n[0]:n[0]+"."+r.substring(0,t)},n.forEach=function(n,t){for(var e=0;e<n.length;e++)t(n[e],e,n)},n.forEachTree=function(n,e,r){r=r||"children",function i(n){for(var t=0;t<n.length;t++)e(n[t]),h(n[t][r])&&i(n[t][r])}(n)},n.getRandom=P,n.getType=l,n.isArray=h,n.isEmpty=function(n){return a(n)||""===n},n.isFunction=g,n.isKvPair=d,n.isNull=a,n.mapTree=function(n,r,i,o){o=o||"children";var t=[];return function u(n,t){for(var e=0;e<n.length;e++)t[e]=T(i(n[e])),n[e][o]&&(t[e][r]=[],u(n[e][o],t[e][r]))}(n,t),t},n.padEnd=F,n.padStart=function(n,t,e){return j(n,t,e,-1)},n.param=m,n.parseQuery=function(n){var u,r,a={};return(n=n||t&&C.location.href||"").replace(/([^=&?/#]*?)=([^=&?/#]*)/g,function(n,t,o){var e;e=i(o),o=null==e?undefined:D!==e&&(R===e||p(e,e)),r=i(t),u=!1,""!==r&&(r.replace(/(.*?)(\[.*)/,function(n,t,e){var r=q(e);u=!0,G(r[0])?a[t]=S(a[t]):a[t]=v(a[t]),function i(n,t,e){var t=q(t),r=t[0];G(r)?(r=E(r),t[1]==c?n.push(e):(/^\[[\D]+\]/.test(t[1])?n[r]=v(n[r]):n[r]=S(n[r]),i(n[r],t[1],e))):t[1]==c?n[r]=e:(/^\[[\D]+\]/.test(t[1])?n[r]=v(n[r]):n[r]=S(n[r]),i(n[r],t[1],e))}(a[t],e,o)}),u||(a[r]=o))}),a},n.randomColor=function(){return"rgba("+P(0,255,!0)+","+P(0,255,!0)+","+P(0,255,!0)+",1)"},n.repeatString=M,n.roundFixed=function(n,t,e){n=E(n);var r,i=Math.pow(10,t),n=o(Math.round(n*i)/i);return 0<t&&(r=(i=I(n,"."))[0],(i=i[1]||"").length<t&&(i=F(i,t,"0"),n=(i=e?i.replace(/0+$/,""):i)?r+"."+i:r)),n},n.shake=function(n,t){return t=Object.assign({string:!0,array:!0,kvPair:!0},t),x(n=T(n),t),n},n.split=I,n.tree=function(n,t){for(var e=(t=v(t)).id||"id",r=t.pid||"pid",i=t.children||"children",o=0;o<n.length;o++){var u,a=n[o];(u=N(n,function(n){return null!=n[e]&&n[e]!=a[e]&&n[e]===a[r]},i))&&(u[i]=S(u[i]),u[i].push(a),n.splice(o--,1))}return n},n.trim=b,n.urlToGet=function(n,t){n=o(n).replace(/&*$/g,"").replace(/\?*$/,"");var e="";return(e=d(t)||h(t)?m(t):o(t).replace(/^&*/,""))&&(n+=(/\?/.test(n)?"&":"?")+e),n},n.variableHasValue=O});
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@bestime/utils_base",
3
+ "version": "1.0.1",
4
+ "main": "./dist/jUtilsBase.umd.min.cjs",
5
+ "module": "./dist/jUtilsBase.esm.min.mjs",
6
+ "types": "./dist/jUtilsBase.esm.d.ts",
7
+ "description": "个人常用工具库",
8
+ "type": "module",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "rollup --config rollup.config.prod.js",
14
+ "serve": "rollup --config rollup.config.dev.js --watch"
15
+ },
16
+ "devDependencies": {
17
+ "@babel/core": "7.18.6",
18
+ "@babel/plugin-proposal-class-properties": "^7.18.6",
19
+ "@babel/plugin-proposal-class-static-block": "^7.20.7",
20
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
21
+ "@babel/plugin-proposal-optional-chaining": "^7.20.7",
22
+ "@babel/plugin-transform-arrow-functions": "^7.18.6",
23
+ "@babel/plugin-transform-async-to-generator": "^7.18.6",
24
+ "@babel/plugin-transform-block-scoping": "7.18.6",
25
+ "@babel/plugin-transform-classes": "^7.20.2",
26
+ "@babel/plugin-transform-parameters": "^7.18.8",
27
+ "@babel/plugin-transform-shorthand-properties": "7.18.6",
28
+ "@babel/plugin-transform-spread": "^7.18.9",
29
+ "@babel/plugin-transform-template-literals": "7.18.6",
30
+ "@rollup/plugin-babel": "6.0.3",
31
+ "@rollup/plugin-commonjs": "24.0.0",
32
+ "@rollup/plugin-json": "^6.0.1",
33
+ "@rollup/plugin-node-resolve": "15.0.1",
34
+ "prettier": "^2.8.8",
35
+ "rollup": "^3.21.4",
36
+ "rollup-plugin-dts": "^5.3.0",
37
+ "rollup-plugin-livereload": "2.0.5",
38
+ "rollup-plugin-typescript2": "0.34.1",
39
+ "rollup-plugin-uglify": "6.0.4",
40
+ "typescript": "^5.0.4"
41
+ },
42
+ "author": "bestime1020@gmail.com",
43
+ "license": "ISC",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/bestime/tool.git"
47
+ },
48
+ "homepage": "https://github.com/bestime/tool",
49
+ "publishConfig": {
50
+ "access": "public"
51
+ }
52
+ }