@jhqn/utils-core 0.0.1-beta.22 → 0.0.1-beta.24

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.
@@ -0,0 +1,738 @@
1
+ /// <reference types="dayjs/plugin/localeData" />
2
+ /// <reference types="dayjs/plugin/duration" />
3
+ /// <reference types="dayjs/plugin/relativeTime" />
4
+ /// <reference types="dayjs/plugin/customParseFormat" />
5
+ /// <reference types="dayjs/plugin/objectSupport" />
6
+ import * as detect_browser from 'detect-browser';
7
+ import { ConfigType } from 'dayjs';
8
+ export { Dayjs, default as dayjs } from 'dayjs';
9
+
10
+ /**
11
+ * snake2Kebab
12
+ * @param {string} str 字符串
13
+ * @returns {string} 转换后的字符串
14
+ * @example snake2Kebab('hello_world') // hello_world => hello-world
15
+ */
16
+ declare const snake2Kebab: (str: string) => string;
17
+ /**
18
+ * snake2Pascal
19
+ * @param {string} str 字符串
20
+ * @returns {string} 转换后的字符串
21
+ * @example snake2Pascal('hello_world') // hello_world => HelloWorld
22
+ */
23
+ declare const snake2Pascal: (str: string) => string;
24
+ /**
25
+ * snake2Camel
26
+ * @param {string} str 字符串
27
+ * @returns {string} 转换后的字符串
28
+ * @example snake2Camel('hello_world') // hello_world => helloWorld
29
+ */
30
+ declare const snake2Camel: (str: string) => string;
31
+ /**
32
+ * snake2Title
33
+ * @param {string} str 字符串
34
+ * @returns {string} 转换后的字符串
35
+ * @example snake2Title('hello_world') // hello_world => Hello World
36
+ */
37
+ declare const snake2Title: (str: string) => string;
38
+ /**
39
+ * kebab2Snake
40
+ * @param {string} str 字符串
41
+ * @returns {string} 转换后的字符串
42
+ * @example kebab2Snake('hello-world') // hello-world => hello_world
43
+ */
44
+ declare const kebab2Snake: (str: string) => string;
45
+ /**
46
+ * kebab2Pascal
47
+ * @param {string} str 字符串
48
+ * @returns {string} 转换后的字符串
49
+ * @example kebab2Pascal('hello-world') // hello-world => HelloWorld
50
+ */
51
+ declare const kebab2Pascal: (str: string) => string;
52
+ /**
53
+ * kebab2Camel
54
+ * @param {string} str 字符串
55
+ * @returns {string} 转换后的字符串
56
+ * @example kebab2Camel('hello-world') // hello-world => helloWorld
57
+ */
58
+ declare const kebab2Camel: (str: string) => string;
59
+ /**
60
+ * kebab2Title
61
+ * @param {string} str 字符串
62
+ * @returns {string} 转换后的字符串
63
+ * @example kebab2Title('hello-world') // hello-world => Hello World
64
+ */
65
+ declare const kebab2Title: (str: string) => string;
66
+ /**
67
+ * pascal2Snake
68
+ * @param {string} str 字符串
69
+ * @returns {string} 转换后的字符串
70
+ * @example pascal2Snake('HelloWorld') // HelloWorld => hello_world
71
+ */
72
+ declare const pascal2Snake: (str: string) => string;
73
+ /**
74
+ * pascal2Kebab
75
+ * @param {string} str 字符串
76
+ * @returns {string} 转换后的字符串
77
+ * @example pascal2Kebab('HelloWorld') // HelloWorld => hello-world
78
+ */
79
+ declare const pascal2Kebab: (str: string) => string;
80
+ /**
81
+ * pascal2Camel
82
+ * @param {string} str 字符串
83
+ * @returns {string} 转换后的字符串
84
+ * @example pascal2Camel('HelloWorld') // HelloWorld => helloWorld
85
+ */
86
+ declare const pascal2Camel: (str: string) => string;
87
+ /**
88
+ * pascal2Title
89
+ * @param {string} str 字符串
90
+ * @returns {string} 转换后的字符串
91
+ * @example pascal2Title('HelloWorld') // HelloWorld => Hello World
92
+ */
93
+ declare const pascal2Title: (str: string) => string;
94
+ /**
95
+ * camel2Snake
96
+ * @param {string} str 字符串
97
+ * @returns {string} 转换后的字符串
98
+ * @example camel2Snake('helloWorld') // helloWorld => hello_world
99
+ */
100
+ declare const camel2Snake: (str: string) => string;
101
+ /**
102
+ * camel2Kebab
103
+ * @param {string} str 字符串
104
+ * @returns {string} 转换后的字符串
105
+ * @example camel2Kebab('helloWorld') // helloWorld => hello-world
106
+ */
107
+ declare const camel2Kebab: (str: string) => string;
108
+ /**
109
+ * camel2Pascal
110
+ * @param {string} str 字符串
111
+ * @returns {string} 转换后的字符串
112
+ * @example camel2Pascal('helloWorld') // helloWorld => HelloWorld
113
+ */
114
+ declare const camel2Pascal: (str: string) => string;
115
+ /**
116
+ * camel2Title
117
+ * @param {string} str 字符串
118
+ * @returns {string} 转换后的字符串
119
+ * @example camel2Title('helloWorld') // helloWorld => Hello World
120
+ */
121
+ declare const camel2Title: (str: string) => string;
122
+ /**
123
+ * title2Snake
124
+ * @param {string} str 字符串
125
+ * @returns {string} 转换后的字符串
126
+ * @example title2Snake('Hello World') // Hello World => hello_world
127
+ */
128
+ declare const title2Snake: (str: string) => string;
129
+ /**
130
+ * title2Kebab
131
+ * @param {string} str 字符串
132
+ * @returns {string} 转换后的字符串
133
+ * @example title2Kebab('Hello World') // Hello World => hello-world
134
+ */
135
+ declare const title2Kebab: (str: string) => string;
136
+ /**
137
+ * title2Pascal
138
+ * @param {string} str 字符串
139
+ * @returns {string} 转换后的字符串
140
+ * @example title2Pascal('Hello World') // Hello World => HelloWorld
141
+ */
142
+ declare const title2Pascal: (str: string) => string;
143
+ /**
144
+ * title2Camel
145
+ * @param {string} str 字符串
146
+ * @returns {string} 转换后的字符串
147
+ * @example title2Camel('Hello World') // Hello World => helloWorld
148
+ */
149
+ declare const title2Camel: (str: string) => string;
150
+
151
+ /**
152
+ * jade console.log
153
+ * only for development
154
+ * @param {...any} args
155
+ */
156
+ declare const jLog: (...args: any[]) => void | (() => void);
157
+ /**
158
+ * jade console.debug
159
+ * @param {...any} args
160
+ */
161
+ declare const jDebug: (...args: any[]) => void;
162
+ /**
163
+ * jade console.warn
164
+ */
165
+ declare const jWarn: (...args: any[]) => void;
166
+ /**
167
+ * jade console.error
168
+ */
169
+ declare const jError: (...args: any[]) => void;
170
+ /**
171
+ * jade console.info
172
+ * @param {...any} args
173
+ */
174
+ declare const jInfo: (...args: any[]) => void;
175
+ /**
176
+ * jade console.group
177
+ */
178
+ declare const jGroup: (...args: any[]) => void;
179
+ /**
180
+ * jade console.groupCollapsed
181
+ */
182
+ declare const jGroupC: (...args: any[]) => void;
183
+ /**
184
+ * jade console.groupEnd
185
+ */
186
+ declare const jGroupE: {
187
+ (): void;
188
+ (): void;
189
+ };
190
+ /**
191
+ * jade console.time
192
+ * @param str
193
+ */
194
+ declare const jTime: (str: string) => void;
195
+ /**
196
+ * jade console.timeEnd
197
+ * @param str
198
+ */
199
+ declare const jTimeEnd: (str: string) => void;
200
+ /**
201
+ * jade console.clear
202
+ */
203
+ declare const jClear: {
204
+ (): void;
205
+ (): void;
206
+ };
207
+
208
+ /**
209
+ * 数字或字符串
210
+ */
211
+ declare type Numeric = number | string;
212
+ /**
213
+ * 可 Null
214
+ */
215
+ declare type Nullable<T> = T | null;
216
+ /**
217
+ * 可 Undefined
218
+ */
219
+ declare type Undefinable<T> = T | undefined;
220
+ /**
221
+ * 可 Null 或 Undefined
222
+ */
223
+ declare type NullOrUndefinable<T> = Nullable<Undefinable<T>>;
224
+ /**
225
+ * 请求结果
226
+ */
227
+ declare type Res<T = any> = Service.Response<T>;
228
+ /**
229
+ * 分页请求结果数据
230
+ */
231
+ declare type PageResData<T = any> = Service.PageResponseData<T>;
232
+ /**
233
+ * 分页请求结果
234
+ */
235
+ declare type PageRes<T = any> = Service.PageResponse<T>;
236
+ /**
237
+ * 可能是数组
238
+ */
239
+ declare type MaybeArray<T = any> = T | Array<T>;
240
+
241
+ /**
242
+ * 隐藏中间部分
243
+ * @param {string} str 需要隐藏的字符串
244
+ */
245
+ declare const hideMiddle: (str: NullOrUndefinable<string>) => string;
246
+ /**
247
+ * 隐藏首尾仅保留中间3分之1
248
+ * @param {string} str 需要隐藏的字符串
249
+ */
250
+ declare const hideThird: (str: NullOrUndefinable<string>) => string;
251
+ /**
252
+ * 隐藏首部
253
+ * @param {string} str 需要隐藏的字符串
254
+ */
255
+ declare const hideHead: (str: NullOrUndefinable<string>) => string;
256
+ /**
257
+ * 隐藏尾部
258
+ * @param {string} str 需要隐藏的字符串
259
+ */
260
+ declare const hideTail: (str: NullOrUndefinable<string>) => string;
261
+ /**
262
+ * 隐藏手机号
263
+ * @param {string} phone 手机号
264
+ */
265
+ declare const hidePhone: (phone: NullOrUndefinable<string>) => string;
266
+ /**
267
+ * 隐藏身份证号
268
+ * @param {string} cardNo 身份证号
269
+ */
270
+ declare const hideCardNo: (cardNo: NullOrUndefinable<string>) => string;
271
+ /**
272
+ * 隐藏姓名第一个字
273
+ * @param {string} name 姓名
274
+ * @deprecated 请使用 hideSurname
275
+ */
276
+ declare const hideName: (name: NullOrUndefinable<string>) => string;
277
+ /**
278
+ * 隐藏姓氏
279
+ * @param {string} name 姓名
280
+ */
281
+ declare const hideSurname: (name: NullOrUndefinable<string>) => string;
282
+ /**
283
+ * 隐藏名字
284
+ * @param {string} name 姓名
285
+ */
286
+ declare const hideFirstName: (name: NullOrUndefinable<string>) => string;
287
+ /**
288
+ * 隐藏邮箱
289
+ * @param {string} email 邮箱
290
+ */
291
+ declare const hideEmail: (email: NullOrUndefinable<string>) => string;
292
+
293
+ /**
294
+ * 判断是否是浏览器环境
295
+ */
296
+ declare const inBrowser: boolean;
297
+ /**
298
+ * 等待一段时间
299
+ * @param time
300
+ */
301
+ declare const waitTime: (time?: number) => Promise<unknown>;
302
+ /**
303
+ * 防止 iOS 因输入框字体小于16px 而在 focus 时页面缩放变大需要手动回正的情况。
304
+ * iOS 10+ 允许 pinch-zoom, 即使 viewport 是不可伸缩的。
305
+ * 只对这些浏览器添加额外规则
306
+ */
307
+ declare const fixiOSInputAutoZoomIn: () => void;
308
+ /**
309
+ * 用户代理
310
+ */
311
+ declare const userAgent: string;
312
+ /**
313
+ * 获取宿主环境信息
314
+ */
315
+ declare const getHostEnv: () => {
316
+ /**
317
+ * 是否是浙里办
318
+ */
319
+ zlb: boolean;
320
+ /**
321
+ * 是否是专有钉
322
+ */
323
+ zyd: boolean;
324
+ /**
325
+ * 是否是浙政钉
326
+ */
327
+ zzd: boolean;
328
+ /**
329
+ * 是否是微信
330
+ */
331
+ wx: boolean;
332
+ /**
333
+ * 是否是支付宝
334
+ */
335
+ zfb: boolean;
336
+ /**
337
+ * 是否是小程序
338
+ */
339
+ mini: boolean;
340
+ } | {
341
+ /**
342
+ * 是否是浙里办
343
+ */
344
+ zlb: boolean;
345
+ /**
346
+ * 是否是专有钉
347
+ */
348
+ zyd: boolean;
349
+ /**
350
+ * 是否是浙政钉
351
+ */
352
+ zzd: boolean;
353
+ /**
354
+ * 是否是微信
355
+ */
356
+ wx: boolean;
357
+ /**
358
+ * 是否是支付宝
359
+ */
360
+ zfb: boolean;
361
+ /**
362
+ * 是否是小程序
363
+ */
364
+ mini: boolean;
365
+ name: detect_browser.Browser;
366
+ version: string;
367
+ os: detect_browser.OperatingSystem | null;
368
+ type: "browser";
369
+ } | {
370
+ /**
371
+ * 是否是浙里办
372
+ */
373
+ zlb: boolean;
374
+ /**
375
+ * 是否是专有钉
376
+ */
377
+ zyd: boolean;
378
+ /**
379
+ * 是否是浙政钉
380
+ */
381
+ zzd: boolean;
382
+ /**
383
+ * 是否是微信
384
+ */
385
+ wx: boolean;
386
+ /**
387
+ * 是否是支付宝
388
+ */
389
+ zfb: boolean;
390
+ /**
391
+ * 是否是小程序
392
+ */
393
+ mini: boolean;
394
+ name: detect_browser.Browser;
395
+ version: string;
396
+ os: detect_browser.OperatingSystem | null;
397
+ bot: string;
398
+ type: "bot-device";
399
+ } | {
400
+ /**
401
+ * 是否是浙里办
402
+ */
403
+ zlb: boolean;
404
+ /**
405
+ * 是否是专有钉
406
+ */
407
+ zyd: boolean;
408
+ /**
409
+ * 是否是浙政钉
410
+ */
411
+ zzd: boolean;
412
+ /**
413
+ * 是否是微信
414
+ */
415
+ wx: boolean;
416
+ /**
417
+ * 是否是支付宝
418
+ */
419
+ zfb: boolean;
420
+ /**
421
+ * 是否是小程序
422
+ */
423
+ mini: boolean;
424
+ type: "bot";
425
+ bot: true;
426
+ name: "bot";
427
+ version: null;
428
+ os: null;
429
+ } | {
430
+ /**
431
+ * 是否是浙里办
432
+ */
433
+ zlb: boolean;
434
+ /**
435
+ * 是否是专有钉
436
+ */
437
+ zyd: boolean;
438
+ /**
439
+ * 是否是浙政钉
440
+ */
441
+ zzd: boolean;
442
+ /**
443
+ * 是否是微信
444
+ */
445
+ wx: boolean;
446
+ /**
447
+ * 是否是支付宝
448
+ */
449
+ zfb: boolean;
450
+ /**
451
+ * 是否是小程序
452
+ */
453
+ mini: boolean;
454
+ version: string;
455
+ type: "node";
456
+ name: "node";
457
+ os: NodeJS.Platform;
458
+ } | {
459
+ /**
460
+ * 是否是浙里办
461
+ */
462
+ zlb: boolean;
463
+ /**
464
+ * 是否是专有钉
465
+ */
466
+ zyd: boolean;
467
+ /**
468
+ * 是否是浙政钉
469
+ */
470
+ zzd: boolean;
471
+ /**
472
+ * 是否是微信
473
+ */
474
+ wx: boolean;
475
+ /**
476
+ * 是否是支付宝
477
+ */
478
+ zfb: boolean;
479
+ /**
480
+ * 是否是小程序
481
+ */
482
+ mini: boolean;
483
+ type: "react-native";
484
+ name: "react-native";
485
+ version: null;
486
+ os: null;
487
+ };
488
+
489
+ /**
490
+ * Json字符串转对象
491
+ * @param str
492
+ * @param reviver
493
+ */
494
+ declare const parseToJSON: <T = any>(str: string, reviver?: ((this: any, key: string, value: any) => any) | undefined) => Nullable<T>;
495
+ /**
496
+ * JSON.stringify() second param
497
+ * @param _
498
+ * @param value
499
+ */
500
+ declare const replacer: (_: any, value: any) => any;
501
+ /**
502
+ * JSON.parse() second param
503
+ * @param _
504
+ * @param value
505
+ */
506
+ declare const reviver: (_: any, value: any) => any;
507
+ /**
508
+ * 过滤obj中仅包括keys的部分
509
+ * @param {Record<string,any>} obj 对象
510
+ * @param {string[]} keys 属性
511
+ * @param {boolean} reverse 为true时过滤取反
512
+ */
513
+ declare const filterObj: (obj: Record<string, any>, keys: string[], reverse?: boolean) => {
514
+ [k: string]: any;
515
+ };
516
+
517
+ /**
518
+ * 格式化时间
519
+ * @param {import('dayjs').ConfigType} date 时间
520
+ * @param {string} format 格式
521
+ * @returns {string} 格式化后的时间
522
+ */
523
+ declare const dateFmt: (date: ConfigType, format?: string | 'date' | 'datetime') => string;
524
+ /**
525
+ * 格式化时间间隔
526
+ * @param {import('dayjs').ConfigType} start 开始时间
527
+ * @param {import('dayjs').ConfigType} end 结束时间
528
+ */
529
+ declare const dateDuration: (start: ConfigType, end: ConfigType) => string;
530
+
531
+ /**
532
+ * 设置文件基本路径
533
+ * @param key
534
+ * @param baseUrl
535
+ */
536
+ declare function setBaseAttachUrl(baseUrl: string): void;
537
+ /**
538
+ * 获取文件基本路径
539
+ */
540
+ declare function getBaseAttachUrl(): string;
541
+
542
+ /**
543
+ * 千位分隔符
544
+ * @param num
545
+ */
546
+ declare const toThousands: (num: number) => string | undefined;
547
+ /**
548
+ * 货币格式化
549
+ * @param currency
550
+ * @param fraction
551
+ */
552
+ declare const currencyFmt: (currency: NullOrUndefinable<number | bigint>, fraction?: number) => string;
553
+
554
+ type VantUploadFileStatus = '' | 'uploading' | 'done' | 'failed'
555
+ type AntdUploadFileStatus = 'removed' | 'uploading' | 'done' | 'error'
556
+ type ElementPlusUploadFileStatus = 'ready' | 'uploading' | 'success' | 'fail'
557
+
558
+ interface Resource {
559
+ /** origin */
560
+ group: string
561
+ id: string
562
+ name: string
563
+ uri: string
564
+ /** extend */
565
+ url?: string
566
+ size?: number
567
+ uid?: string
568
+ status?: VantUploadFileStatus | AntdUploadFileStatus | ElementPlusUploadFileStatus
569
+ /** vant */
570
+ objectUrl?: string
571
+ content?: string
572
+ isImage?: boolean
573
+ message?: string
574
+ deletable?: boolean
575
+ reupload?: boolean
576
+ /** antd */
577
+ fileName?: string
578
+ percent?: number
579
+ thumbUrl?: string
580
+ /** element-plus */
581
+ percentage?: number
582
+ }
583
+
584
+ /**
585
+ * 获取文件完整地址
586
+ * @param url
587
+ */
588
+ declare const resUrl: (url: Undefinable<string>) => string | undefined;
589
+ /**
590
+ * 统一文件字段内容
591
+ * @param resource
592
+ */
593
+ declare const recoverFile: (resource: Resource) => {
594
+ url: string | undefined;
595
+ content: string | undefined;
596
+ uri: string;
597
+ status: string;
598
+ percent: number;
599
+ group: string;
600
+ id: string;
601
+ name: string;
602
+ size?: number | undefined;
603
+ uid?: string | undefined;
604
+ objectUrl?: string | undefined;
605
+ isImage?: boolean | undefined;
606
+ message?: string | undefined;
607
+ deletable?: boolean | undefined;
608
+ reupload?: boolean | undefined;
609
+ fileName?: string | undefined;
610
+ thumbUrl?: string | undefined;
611
+ percentage?: number | undefined;
612
+ };
613
+ /**
614
+ * 附件格式
615
+ * @param data
616
+ */
617
+ declare const attachFmt: (data: NullOrUndefinable<MaybeArray<Resource>> | string) => {
618
+ url: string | undefined;
619
+ content: string | undefined;
620
+ uri: string;
621
+ status: string;
622
+ percent: number;
623
+ group: string;
624
+ id: string;
625
+ name: string;
626
+ size?: number | undefined;
627
+ uid?: string | undefined;
628
+ objectUrl?: string | undefined;
629
+ isImage?: boolean | undefined;
630
+ message?: string | undefined;
631
+ deletable?: boolean | undefined;
632
+ reupload?: boolean | undefined;
633
+ fileName?: string | undefined;
634
+ thumbUrl?: string | undefined;
635
+ percentage?: number | undefined;
636
+ }[];
637
+
638
+ /**
639
+ * 是否有意义的值
640
+ * @param val
641
+ */
642
+ declare const isDef: <T>(val: T) => val is NonNullable<T>;
643
+ /**
644
+ * 是否是数字或字符
645
+ * @param val
646
+ */
647
+ declare const isNumeric: (val: Numeric) => val is string;
648
+ /**
649
+ * 是否是需要的图片格式
650
+ * @param ext
651
+ */
652
+ declare const checkImg: (ext?: string) => boolean;
653
+ /**
654
+ * 是否是空值/空数组/空对象 null undefined '' [] {} Set Map
655
+ * @param val
656
+ */
657
+ declare const isEmpty: (val: NullOrUndefinable<Numeric | boolean | Record<any, any> | Array<any> | Set<any> | Map<any, any>>) => boolean;
658
+ /**
659
+ * 判断是否合法JSON字符串
660
+ * @param str
661
+ */
662
+ declare const isJSONStr: (str: string) => boolean;
663
+ /**
664
+ * 判断是否合法JSON数组字符串
665
+ * @param str
666
+ */
667
+ declare const isArrStr: (str: string) => boolean;
668
+ /**
669
+ * 判断是否有效的key
670
+ * @param {string | number | symbol} key 键名
671
+ * @param {object} object 对象
672
+ * @example
673
+ *
674
+ * ```ts
675
+ * const obj = { a: 1, b: 2 }
676
+ * isValidKey('a', obj) // true
677
+ * ```
678
+ * @returns {boolean} boolean
679
+ */
680
+ declare const isValidKey: (key: string | number | symbol, object: object) => key is never;
681
+ /**
682
+ * 是否是中国手机号
683
+ * @param val
684
+ */
685
+ declare const isPhone: (val: NullOrUndefinable<Numeric>) => boolean;
686
+ /**
687
+ * 是否是中国座机号
688
+ * @param val
689
+ */
690
+ declare const isTel: (val: NullOrUndefinable<Numeric>) => boolean;
691
+ /**
692
+ * 是否是邮箱
693
+ * @param val
694
+ */
695
+ declare const isEmail: (val: NullOrUndefinable<string>) => boolean;
696
+ /**
697
+ * 是否是身份证
698
+ * @param val 身份证号
699
+ */
700
+ declare const isIdCard: (val: NullOrUndefinable<string>) => boolean;
701
+ /**
702
+ * 包含非ASCII字符
703
+ * @param text
704
+ */
705
+ declare const nonASCII: (text: string) => boolean;
706
+ /**
707
+ * 校验接口返回code
708
+ * @param res
709
+ * @param code
710
+ */
711
+ declare const isValidResCode: (res: Res, code?: number) => boolean;
712
+ /**
713
+ * 校验接口返回内容
714
+ * @param res
715
+ * @param code
716
+ */
717
+ declare const isValidRes: (res: Res, code?: number) => boolean;
718
+ /**
719
+ * 校验接口数组返回内容
720
+ * @param res
721
+ * @param code
722
+ */
723
+ declare const isValidArrRes: (res: Res<any[]>, code?: number) => boolean;
724
+ /**
725
+ * 校验接口分页返回内容
726
+ * @param res
727
+ * @param code
728
+ */
729
+ declare const isValidPageRes: (res: PageRes, code?: number) => boolean;
730
+ /**
731
+ * 校验文件类型
732
+ * 1. XXX/YYY 2. .xxx 3. XXX/* 4.*
733
+ * @param {File} file 需要校验的文件
734
+ * @param {string} type 文件类型, 与input.accept一致
735
+ */
736
+ declare const isValidFileType: (file: File, type: string) => boolean;
737
+
738
+ export { type NullOrUndefinable, type Nullable, type Numeric, type PageRes, type PageResData, type Res, type Undefinable, attachFmt, camel2Kebab, camel2Pascal, camel2Snake, camel2Title, checkImg, currencyFmt, dateDuration, dateFmt, filterObj, fixiOSInputAutoZoomIn, getBaseAttachUrl, getHostEnv, hideCardNo, hideEmail, hideFirstName, hideHead, hideMiddle, hideName, hidePhone, hideSurname, hideTail, hideThird, inBrowser, isArrStr, isDef, isEmail, isEmpty, isIdCard, isJSONStr, isNumeric, isPhone, isTel, isValidArrRes, isValidFileType, isValidKey, isValidPageRes, isValidRes, isValidResCode, jClear, jDebug, jError, jGroup, jGroupC, jGroupE, jInfo, jLog, jTime, jTimeEnd, jWarn, kebab2Camel, kebab2Pascal, kebab2Snake, kebab2Title, nonASCII, parseToJSON, pascal2Camel, pascal2Kebab, pascal2Snake, pascal2Title, recoverFile, replacer, resUrl, reviver, setBaseAttachUrl, snake2Camel, snake2Kebab, snake2Pascal, snake2Title, title2Camel, title2Kebab, title2Pascal, title2Snake, toThousands, userAgent, waitTime };