@jhqn/utils-core 0.1.0 → 0.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/index.d.ts +114 -94
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +6 -10
- package/dist/index.cjs +0 -611
- package/dist/index.d.cts +0 -886
- package/dist/index.d.mts +0 -886
- package/dist/index.mjs +0 -484
package/dist/index.d.ts
CHANGED
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
/// <reference types="dayjs/plugin/relativeTime" />
|
|
4
4
|
/// <reference types="dayjs/plugin/customParseFormat" />
|
|
5
5
|
/// <reference types="dayjs/plugin/objectSupport" />
|
|
6
|
-
import { ConfigType } from 'dayjs';
|
|
7
|
-
export { Dayjs, default as dayjs } from 'dayjs';
|
|
8
|
-
export { detect } from 'detect-browser';
|
|
9
6
|
|
|
7
|
+
import dayjs, { ConfigType, Dayjs } from "dayjs";
|
|
8
|
+
import { detect } from "detect-browser";
|
|
9
|
+
|
|
10
|
+
//#region types/index.d.ts
|
|
10
11
|
/**
|
|
11
12
|
* 数字或字符串
|
|
12
13
|
*/
|
|
@@ -59,38 +60,40 @@ type Dict<T = string> = Record<string, T>;
|
|
|
59
60
|
* 使某键可选
|
|
60
61
|
*/
|
|
61
62
|
type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
62
|
-
|
|
63
|
+
//#endregion
|
|
64
|
+
//#region types/dom.d.ts
|
|
63
65
|
interface HostEnv {
|
|
64
66
|
/**
|
|
65
67
|
* 是否是浙里办
|
|
66
68
|
*/
|
|
67
|
-
readonly zlb: boolean
|
|
69
|
+
readonly zlb: boolean;
|
|
68
70
|
/**
|
|
69
71
|
* 是否是专有钉
|
|
70
72
|
*/
|
|
71
|
-
readonly zyd: boolean
|
|
73
|
+
readonly zyd: boolean;
|
|
72
74
|
/**
|
|
73
75
|
* 是否是浙政钉
|
|
74
76
|
*/
|
|
75
|
-
readonly zzd: boolean
|
|
77
|
+
readonly zzd: boolean;
|
|
76
78
|
/**
|
|
77
79
|
* 是否是钉钉/专有钉/浙政钉
|
|
78
80
|
*/
|
|
79
|
-
readonly dd: boolean
|
|
81
|
+
readonly dd: boolean;
|
|
80
82
|
/**
|
|
81
83
|
* 是否是微信
|
|
82
84
|
*/
|
|
83
|
-
readonly wx: boolean
|
|
85
|
+
readonly wx: boolean;
|
|
84
86
|
/**
|
|
85
87
|
* 是否是支付宝
|
|
86
88
|
*/
|
|
87
|
-
readonly zfb: boolean
|
|
89
|
+
readonly zfb: boolean;
|
|
88
90
|
/**
|
|
89
91
|
* 是否是小程序
|
|
90
92
|
*/
|
|
91
|
-
readonly mini: boolean
|
|
93
|
+
readonly mini: boolean;
|
|
92
94
|
}
|
|
93
|
-
|
|
95
|
+
//#endregion
|
|
96
|
+
//#region src/case.d.ts
|
|
94
97
|
/**
|
|
95
98
|
* snake2Kebab
|
|
96
99
|
* @param {string} str 字符串
|
|
@@ -231,7 +234,8 @@ declare const title2Pascal: (str: string) => string;
|
|
|
231
234
|
* @example title2Camel('Hello World') // Hello World => helloWorld
|
|
232
235
|
*/
|
|
233
236
|
declare const title2Camel: (str: string) => string;
|
|
234
|
-
|
|
237
|
+
//#endregion
|
|
238
|
+
//#region src/console/log-common.d.ts
|
|
235
239
|
/**
|
|
236
240
|
* jade console.log
|
|
237
241
|
* only for development
|
|
@@ -268,8 +272,8 @@ declare const jGroupC: (...args: any[]) => void;
|
|
|
268
272
|
* jade console.groupEnd
|
|
269
273
|
*/
|
|
270
274
|
declare const jGroupE: {
|
|
271
|
-
|
|
272
|
-
|
|
275
|
+
(): void;
|
|
276
|
+
(): void;
|
|
273
277
|
};
|
|
274
278
|
/**
|
|
275
279
|
* jade console.time
|
|
@@ -285,22 +289,25 @@ declare const jTimeEnd: (str: string) => void;
|
|
|
285
289
|
* jade console.clear
|
|
286
290
|
*/
|
|
287
291
|
declare const jClear: {
|
|
288
|
-
|
|
289
|
-
|
|
292
|
+
(): void;
|
|
293
|
+
(): void;
|
|
290
294
|
};
|
|
291
|
-
|
|
295
|
+
//#endregion
|
|
296
|
+
//#region src/console/log-dedupe.d.ts
|
|
292
297
|
/**
|
|
293
298
|
* 不连续打印相同的值
|
|
294
299
|
* @param args
|
|
295
300
|
*/
|
|
296
301
|
declare const jLogDedupe: (...args: any[]) => void;
|
|
297
|
-
|
|
302
|
+
//#endregion
|
|
303
|
+
//#region src/console/log-once.d.ts
|
|
298
304
|
/**
|
|
299
305
|
* 只打印一次
|
|
300
306
|
* @param args
|
|
301
307
|
*/
|
|
302
308
|
declare const jLogOnce: (...args: any[]) => void;
|
|
303
|
-
|
|
309
|
+
//#endregion
|
|
310
|
+
//#region src/desensitize.d.ts
|
|
304
311
|
/**
|
|
305
312
|
* 隐藏中间部分
|
|
306
313
|
* @param {string} str 需要隐藏的字符串
|
|
@@ -423,7 +430,8 @@ declare const hideEmail: (email: UnDef<string>) => string;
|
|
|
423
430
|
* ```
|
|
424
431
|
*/
|
|
425
432
|
declare const hideBankCard: (bankCard: UnDef<string>) => string;
|
|
426
|
-
|
|
433
|
+
//#endregion
|
|
434
|
+
//#region src/dom.d.ts
|
|
427
435
|
/**
|
|
428
436
|
* 判断是否是浏览器环境
|
|
429
437
|
*/
|
|
@@ -457,6 +465,9 @@ declare const userAgent: string;
|
|
|
457
465
|
* hostEnv.mini // 小程序
|
|
458
466
|
*/
|
|
459
467
|
declare const getHostEnv: () => HostEnv;
|
|
468
|
+
/**
|
|
469
|
+
* 检测浏览器环境
|
|
470
|
+
*/
|
|
460
471
|
|
|
461
472
|
/**
|
|
462
473
|
* 获取当小时的时间戳的异或值的绝对值, 当小时内获取的值是唯一的
|
|
@@ -470,7 +481,8 @@ declare const getCodeOfDate: () => number;
|
|
|
470
481
|
* 获取当月的时间戳的异或值的绝对值, 当月内获取的值是唯一的
|
|
471
482
|
*/
|
|
472
483
|
declare const getCodeOfMonth: () => number;
|
|
473
|
-
|
|
484
|
+
//#endregion
|
|
485
|
+
//#region src/format/baseAttachUrl.d.ts
|
|
474
486
|
/**
|
|
475
487
|
* 设置文件基本路径
|
|
476
488
|
* @param baseUrl
|
|
@@ -480,7 +492,8 @@ declare function setBaseAttachUrl(baseUrl: string): void;
|
|
|
480
492
|
* 获取文件基本路径
|
|
481
493
|
*/
|
|
482
494
|
declare function getBaseAttachUrl(): string;
|
|
483
|
-
|
|
495
|
+
//#endregion
|
|
496
|
+
//#region src/format/core.d.ts
|
|
484
497
|
/**
|
|
485
498
|
* JSON 字符串转对象
|
|
486
499
|
* @template T - 解析数据类型
|
|
@@ -525,21 +538,23 @@ declare function reviver(_key: any, value: any): any;
|
|
|
525
538
|
* @param {boolean} reverse 为true时过滤取反
|
|
526
539
|
*/
|
|
527
540
|
declare const filterObj: (obj: Record<string, any>, keys: string[], reverse?: boolean) => {
|
|
528
|
-
|
|
541
|
+
[k: string]: any;
|
|
529
542
|
};
|
|
530
|
-
|
|
543
|
+
//#endregion
|
|
544
|
+
//#region src/format/currency.d.ts
|
|
531
545
|
/**
|
|
532
546
|
* 千位分隔符
|
|
533
547
|
* @param num
|
|
534
548
|
*/
|
|
535
|
-
declare const toThousands: (num: number) => string
|
|
549
|
+
declare const toThousands: (num: number) => string;
|
|
536
550
|
/**
|
|
537
551
|
* 货币格式化
|
|
538
552
|
* @param {number | string | bigint} currency - 金额
|
|
539
553
|
* @param {number} [maximumFractionDigits] - 小数位数
|
|
540
554
|
*/
|
|
541
555
|
declare const currencyFmt: (currency: UnDef<Numeric | bigint>, maximumFractionDigits?: number) => string;
|
|
542
|
-
|
|
556
|
+
//#endregion
|
|
557
|
+
//#region src/format/dayjs.d.ts
|
|
543
558
|
/**
|
|
544
559
|
* 格式化时间
|
|
545
560
|
* @param {import('dayjs').ConfigType} date 时间
|
|
@@ -553,37 +568,38 @@ declare const dateFmt: (date: ConfigType, format?: string | "date" | "datetime")
|
|
|
553
568
|
* @param {import('dayjs').ConfigType} end 结束时间
|
|
554
569
|
*/
|
|
555
570
|
declare const dateDuration: (start: ConfigType, end: ConfigType) => string;
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
type
|
|
559
|
-
type
|
|
560
|
-
|
|
571
|
+
//#endregion
|
|
572
|
+
//#region types/upload.d.ts
|
|
573
|
+
type VantUploadFileStatus = '' | 'uploading' | 'done' | 'failed';
|
|
574
|
+
type AntdUploadFileStatus = 'removed' | 'uploading' | 'done' | 'error';
|
|
575
|
+
type ElementPlusUploadFileStatus = 'ready' | 'uploading' | 'success' | 'fail';
|
|
561
576
|
interface Resource {
|
|
562
577
|
/** origin */
|
|
563
|
-
group: string
|
|
564
|
-
id: string
|
|
565
|
-
name: string
|
|
566
|
-
uri: string
|
|
578
|
+
group: string;
|
|
579
|
+
id: string;
|
|
580
|
+
name: string;
|
|
581
|
+
uri: string;
|
|
567
582
|
/** extend */
|
|
568
|
-
url?: string
|
|
569
|
-
size?: number
|
|
570
|
-
uid?: string
|
|
571
|
-
status?: VantUploadFileStatus | AntdUploadFileStatus | ElementPlusUploadFileStatus
|
|
583
|
+
url?: string;
|
|
584
|
+
size?: number;
|
|
585
|
+
uid?: string;
|
|
586
|
+
status?: VantUploadFileStatus | AntdUploadFileStatus | ElementPlusUploadFileStatus;
|
|
572
587
|
/** vant */
|
|
573
|
-
objectUrl?: string
|
|
574
|
-
content?: string
|
|
575
|
-
isImage?: boolean
|
|
576
|
-
message?: string
|
|
577
|
-
deletable?: boolean
|
|
578
|
-
reupload?: boolean
|
|
588
|
+
objectUrl?: string;
|
|
589
|
+
content?: string;
|
|
590
|
+
isImage?: boolean;
|
|
591
|
+
message?: string;
|
|
592
|
+
deletable?: boolean;
|
|
593
|
+
reupload?: boolean;
|
|
579
594
|
/** antd */
|
|
580
|
-
fileName?: string
|
|
581
|
-
percent?: number
|
|
582
|
-
thumbUrl?: string
|
|
595
|
+
fileName?: string;
|
|
596
|
+
percent?: number;
|
|
597
|
+
thumbUrl?: string;
|
|
583
598
|
/** element-plus */
|
|
584
|
-
percentage?: number
|
|
599
|
+
percentage?: number;
|
|
585
600
|
}
|
|
586
|
-
|
|
601
|
+
//#endregion
|
|
602
|
+
//#region src/format/resource.d.ts
|
|
587
603
|
/**
|
|
588
604
|
* 获取文件完整地址
|
|
589
605
|
* @param url
|
|
@@ -594,50 +610,51 @@ declare const resUrl: (url: Undefinable<string>) => string | undefined;
|
|
|
594
610
|
* @param resource
|
|
595
611
|
*/
|
|
596
612
|
declare const recoverFile: (resource: Resource) => {
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
613
|
+
url: string | undefined;
|
|
614
|
+
content: string | undefined;
|
|
615
|
+
uri: string;
|
|
616
|
+
status: string;
|
|
617
|
+
percent: number;
|
|
618
|
+
group: string;
|
|
619
|
+
id: string;
|
|
620
|
+
name: string;
|
|
621
|
+
size?: number;
|
|
622
|
+
uid?: string;
|
|
623
|
+
objectUrl?: string;
|
|
624
|
+
isImage?: boolean;
|
|
625
|
+
message?: string;
|
|
626
|
+
deletable?: boolean;
|
|
627
|
+
reupload?: boolean;
|
|
628
|
+
fileName?: string;
|
|
629
|
+
thumbUrl?: string;
|
|
630
|
+
percentage?: number;
|
|
615
631
|
};
|
|
616
632
|
/**
|
|
617
633
|
* 附件格式
|
|
618
634
|
* @param data
|
|
619
635
|
*/
|
|
620
636
|
declare const attachFmt: (data: UnDef<MaybeArray<Resource>> | string) => {
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
637
|
+
url: string | undefined;
|
|
638
|
+
content: string | undefined;
|
|
639
|
+
uri: string;
|
|
640
|
+
status: string;
|
|
641
|
+
percent: number;
|
|
642
|
+
group: string;
|
|
643
|
+
id: string;
|
|
644
|
+
name: string;
|
|
645
|
+
size?: number;
|
|
646
|
+
uid?: string;
|
|
647
|
+
objectUrl?: string;
|
|
648
|
+
isImage?: boolean;
|
|
649
|
+
message?: string;
|
|
650
|
+
deletable?: boolean;
|
|
651
|
+
reupload?: boolean;
|
|
652
|
+
fileName?: string;
|
|
653
|
+
thumbUrl?: string;
|
|
654
|
+
percentage?: number;
|
|
639
655
|
}[];
|
|
640
|
-
|
|
656
|
+
//#endregion
|
|
657
|
+
//#region src/format/sort.d.ts
|
|
641
658
|
/**
|
|
642
659
|
* 自然排序
|
|
643
660
|
* @param {UnDef<string>[] | UnDef<number>[]} arr - 数字或字符串数组
|
|
@@ -651,7 +668,8 @@ declare const naturalSort: (arr: UnDef<string>[] | UnDef<number>[]) => UnDef<str
|
|
|
651
668
|
* @returns {any[]} - 排序后的数组
|
|
652
669
|
*/
|
|
653
670
|
declare const naturalSortBy: <T extends Record<string, UnDef<Numeric>>>(arr: T[], key: keyof T) => T[];
|
|
654
|
-
|
|
671
|
+
//#endregion
|
|
672
|
+
//#region src/validate/core.d.ts
|
|
655
673
|
/**
|
|
656
674
|
* 检测变量类型
|
|
657
675
|
* @param {any} val 检测的目标
|
|
@@ -795,7 +813,8 @@ declare const isValidKey: (key: string | number | symbol, object: object) => key
|
|
|
795
813
|
* @param val
|
|
796
814
|
*/
|
|
797
815
|
declare const isEmpty: (val: UnDef<Numeric | boolean | Record<any, any> | Array<any> | Set<any> | Map<any, any>>) => boolean;
|
|
798
|
-
|
|
816
|
+
//#endregion
|
|
817
|
+
//#region src/validate/form.d.ts
|
|
799
818
|
declare const cnPhoneRE: RegExp;
|
|
800
819
|
declare const cnTelRE: RegExp;
|
|
801
820
|
declare const cnTelRE2: RegExp;
|
|
@@ -856,7 +875,8 @@ declare const nonASCII: (text: string) => boolean;
|
|
|
856
875
|
* @param {string} type 文件类型, 与input.accept一致
|
|
857
876
|
*/
|
|
858
877
|
declare const isValidFileType: (file: File, type: string) => boolean;
|
|
859
|
-
|
|
878
|
+
//#endregion
|
|
879
|
+
//#region src/validate/request.d.ts
|
|
860
880
|
/**
|
|
861
881
|
* 校验接口返回code
|
|
862
882
|
* @param res
|
|
@@ -881,6 +901,6 @@ declare const isValidArrRes: (res: Res<any[]>, code?: number) => boolean;
|
|
|
881
901
|
* @param code
|
|
882
902
|
*/
|
|
883
903
|
declare const isValidPageRes: (res: PageRes, code?: number) => boolean;
|
|
884
|
-
|
|
885
|
-
export { attachFmt, camel2Kebab, camel2Pascal, camel2Snake, camel2Title, checkImg, cnIdCard15Re, cnIdCard18Re, cnPhoneRE, cnTelRE, cnTelRE2, cnUSCIRE, currencyFmt, dateDuration, dateFmt, emailRE, filterObj, fixiOSInputAutoZoomIn, getBaseAttachUrl, getCodeOfDate, getCodeOfHour, getCodeOfMonth, getHostEnv, getVariableType, hideBankCard, hideCardNo, hideEmail, hideFirstName, hideHead, hideMiddle, hidePhone, hideSurname, hideTail, hideThird, inBrowser, isArrStr, isArray, isBigInt, isBlob, isBoolean, isDate, isDef, isEmail, isEmpty, isError, isFile, isFunction, isIdCard, isJSONStr, isMap, isNull, isNumber, isNumeric, isObject, isPhone, isPromise, isRegExp, isSet, isString, isSymbol, isTel, isURL, isUSCI, isUndefined, isValidArrRes, isValidFileType, isValidKey, isValidPageRes, isValidRes, isValidResCode, isWeakMap, isWeakSet, jClear, jDebug, jError, jGroup, jGroupC, jGroupE, jInfo, jLog, jLogDedupe, jLogOnce, jTime, jTimeEnd, jWarn, kebab2Camel, kebab2Pascal, kebab2Snake, kebab2Title, naturalSort, naturalSortBy, nonASCII, parseJSON, parseToJSON, pascal2Camel, pascal2Kebab, pascal2Snake, pascal2Title, recoverFile, replacer, resUrl, reviver, setBaseAttachUrl, snake2Camel, snake2Kebab, snake2Pascal, snake2Title, stringifyJSON, title2Camel, title2Kebab, title2Pascal, title2Snake, toThousands, userAgent, waitTime };
|
|
886
|
-
|
|
904
|
+
//#endregion
|
|
905
|
+
export { type Dayjs, type Dict, type HostEnv, type MaybeArray, type NullOrUndefinable, type Nullable, type Numeric, type PageReq, type PageRes, type PageResData, type PartialBy, type Res, type UnDef, type Undefinable, type VK, attachFmt, camel2Kebab, camel2Pascal, camel2Snake, camel2Title, checkImg, cnIdCard15Re, cnIdCard18Re, cnPhoneRE, cnTelRE, cnTelRE2, cnUSCIRE, currencyFmt, dateDuration, dateFmt, dayjs, detect, emailRE, filterObj, fixiOSInputAutoZoomIn, getBaseAttachUrl, getCodeOfDate, getCodeOfHour, getCodeOfMonth, getHostEnv, getVariableType, hideBankCard, hideCardNo, hideEmail, hideFirstName, hideHead, hideMiddle, hidePhone, hideSurname, hideTail, hideThird, inBrowser, isArrStr, isArray, isBigInt, isBlob, isBoolean, isDate, isDef, isEmail, isEmpty, isError, isFile, isFunction, isIdCard, isJSONStr, isMap, isNull, isNumber, isNumeric, isObject, isPhone, isPromise, isRegExp, isSet, isString, isSymbol, isTel, isURL, isUSCI, isUndefined, isValidArrRes, isValidFileType, isValidKey, isValidPageRes, isValidRes, isValidResCode, isWeakMap, isWeakSet, jClear, jDebug, jError, jGroup, jGroupC, jGroupE, jInfo, jLog, jLogDedupe, jLogOnce, jTime, jTimeEnd, jWarn, kebab2Camel, kebab2Pascal, kebab2Snake, kebab2Title, naturalSort, naturalSortBy, nonASCII, parseJSON, parseToJSON, pascal2Camel, pascal2Kebab, pascal2Snake, pascal2Title, recoverFile, replacer, resUrl, reviver, setBaseAttachUrl, snake2Camel, snake2Kebab, snake2Pascal, snake2Title, stringifyJSON, title2Camel, title2Kebab, title2Pascal, title2Snake, toThousands, userAgent, waitTime };
|
|
906
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["HostEnv","VantUploadFileStatus","AntdUploadFileStatus","ElementPlusUploadFileStatus","Resource"],"sources":["../types/index.ts","../types/dom.d.ts","../src/case.ts","../src/console/log-common.ts","../src/console/log-dedupe.ts","../src/console/log-once.ts","../src/desensitize.ts","../src/dom.ts","../src/format/baseAttachUrl.ts","../src/format/core.ts","../src/format/currency.ts","../src/format/dayjs.ts","../types/upload.d.ts","../src/format/resource.ts","../src/format/sort.ts","../src/validate/core.ts","../src/validate/form.ts","../src/validate/request.ts"],"sourcesContent":["export interface HostEnv {\n /**\n * 是否是浙里办\n */\n readonly zlb: boolean\n /**\n * 是否是专有钉\n */\n readonly zyd: boolean\n /**\n * 是否是浙政钉\n */\n readonly zzd: boolean\n /**\n * 是否是钉钉/专有钉/浙政钉\n */\n readonly dd: boolean\n /**\n * 是否是微信\n */\n readonly wx: boolean\n /**\n * 是否是支付宝\n */\n readonly zfb: boolean\n /**\n * 是否是小程序\n */\n readonly mini: boolean\n}\n","type VantUploadFileStatus = '' | 'uploading' | 'done' | 'failed'\ntype AntdUploadFileStatus = 'removed' | 'uploading' | 'done' | 'error'\ntype ElementPlusUploadFileStatus = 'ready' | 'uploading' | 'success' | 'fail'\n\nexport interface Resource {\n /** origin */\n group: string\n id: string\n name: string\n uri: string\n /** extend */\n url?: string\n size?: number\n uid?: string\n status?: VantUploadFileStatus | AntdUploadFileStatus | ElementPlusUploadFileStatus\n /** vant */\n objectUrl?: string\n content?: string\n isImage?: boolean\n message?: string\n deletable?: boolean\n reupload?: boolean\n /** antd */\n fileName?: string\n percent?: number\n thumbUrl?: string\n /** element-plus */\n percentage?: number\n}\n"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"dayjs";import t from"dayjs/locale/zh-cn";import n from"dayjs/plugin/customParseFormat";import r from"dayjs/plugin/duration";import i from"dayjs/plugin/localeData";import a from"dayjs/plugin/objectSupport";import o from"dayjs/plugin/relativeTime";import{detect as s}from"detect-browser";const c=e=>e.replace(/_([a-z])/g,(e,t)=>`-${t.toLowerCase()}`),l=e=>e.replace(/_([a-z])/g,(e,t)=>t.toUpperCase()).replace(/^[a-z]/,e=>e.toUpperCase()),ee=e=>e.replace(/(_([a-z]))/g,e=>e[1].toUpperCase()),te=e=>e.replace(/_([a-z])/g,(e,t)=>` ${t.toUpperCase()}`).replace(/^[a-z]/,e=>e.toUpperCase()),ne=e=>e.replace(/-([a-z])/g,(e,t)=>`_${t.toLowerCase()}`),re=e=>e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()).replace(/^[a-z]/,e=>e.toUpperCase()),ie=e=>{let[t,...n]=e.split(`-`);return[t,...n.map(e=>e.replace(/^[a-z]/,e[0].toUpperCase()))].join(``)},ae=e=>e.replace(/-([a-z])/g,(e,t)=>` ${t.toUpperCase()}`).replace(/^[a-z]/,e=>e.toUpperCase()),oe=e=>e.replace(/([A-Z])/g,(e,t)=>`_${t.toLowerCase()}`).replace(/^_/,``),se=e=>e.replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`).replace(/^-/,``),ce=e=>e.replace(/^[A-Z]/,e=>e.toLowerCase()),le=e=>e.replace(/([A-Z])/g,(e,t)=>` ${t}`).replace(/^ /,``),ue=e=>e.replace(/([A-Z])/g,(e,t)=>`_${t.toLowerCase()}`),de=e=>e.replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`),fe=e=>e.replace(/(^[a-z])|(\s+[a-z])/g,e=>e.toUpperCase()),pe=e=>e.replace(/([A-Z])/g,(e,t)=>` ${t}`).replace(/^[a-z]/,e=>e.toUpperCase()),me=e=>e.replace(/([A-Z])/g,e=>e.toLowerCase()).replace(/ /g,`_`),he=e=>e.replace(/([A-Z])/g,e=>e.toLowerCase()).replace(/ /g,`-`),ge=e=>e.replace(/ /g,``),_e=e=>e.replace(/ /g,``).replace(/^[A-Z]/,e=>e.toLowerCase()),u=`color: white; padding: 1px 2px;`,d=(...e)=>__DEV__?console.log.bind(console,`%c[${e.length===1?`LOG`:`%s`}]`,`${u} background: seagreen;`)(...e):()=>{},ve=(...e)=>console.log.bind(console,`%c[${e.length===1?`DEBUG`:`%s`}]`,`${u} background: linear-gradient(LightSalmon, Tomato); border-radius: 2px; font-weight: bold; border-top: 2px solid Crimson; border-bottom: 2px solid Crimson;`)(...e),f=(...e)=>console.warn.bind(console,`%c[${e.length===1?`WARN`:`%s`}]`,`${u} background: tomato;`)(...e),ye=(...e)=>console.error.bind(console,`%c[${e.length===1?`ERROR`:`%s`}]`,`${u} background: crimson;`)(...e),p=(...e)=>console.info.bind(console,`%c[${e.length===1?`INFO`:`%s`}]`,`${u} background: dodgerblue;`)(...e),m=console.group.bind(console,`%c[%s]`,`${u} background: slateblue;`),be=console.groupCollapsed.bind(console,`%c[%s]`,`${u} background: slateblue;`),xe=console.groupEnd.bind(console),Se=e=>console.time(`[${e}]`),Ce=e=>console.timeEnd(`[${e}]`),we=console.clear.bind(console);let h;const Te=(...e)=>{e.length!==0&&(e.length>0&&h&&JSON.stringify(e)===JSON.stringify(h)||(d(...e),h=e))},Ee=(...e)=>{d(...e)},g=e=>{let t=Object.prototype.toString.call(e),n=t.match(/\[object (\S*)\]/)?.[1];return n?.toLocaleLowerCase()},De=e=>g(e)===`number`,Oe=e=>g(e)===`bigint`,ke=e=>g(e)===`string`,Ae=e=>g(e)===`boolean`,_=e=>g(e)===`null`,v=e=>g(e)===`undefined`,je=e=>g(e)===`symbol`,y=e=>g(e)===`object`,b=e=>g(e)===`array`,x=e=>g(e)===`function`,S=e=>g(e)===`date`,Me=e=>g(e)===`regexp`,Ne=e=>g(e)===`promise`,C=e=>g(e)===`set`,w=e=>g(e)===`map`,Pe=e=>g(e)===`weakset`,Fe=e=>g(e)===`weakmap`,Ie=e=>g(e)===`file`,Le=e=>g(e)===`blob`,Re=e=>g(e)===`url`,ze=e=>g(e)===`error`,T=e=>!_(e)&&!v(e),E=e=>{if(T(e))try{return JSON.parse(e),!0}catch(e){return f(`Failed to parse invalid string`,e),!1}return!1},D=e=>{if(T(e))try{return Array.isArray(JSON.parse(e))}catch(e){return f(`Failed to parse invalid string`,e),!1}return!1},Be=(e,t)=>e in t,Ve=e=>!T(e)||e===``||b(e)&&e.length===0||y(e)&&Object.keys(e).length===0||w(e)&&e.size===0||C(e)&&e.size===0,O=/^1[3-9]\d{9}$/,k=/^0\d{2,3}-?\d{7,8}$/,A=/^\(0\d{2,3}\)\d{7,8}$/,j=/^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/,M=/^[1-9]\d{7}(?:0[1-9]|10|11|12)(?:[0-2][1-9]|10|20|30|31)\d{2}[\dX]$/i,N=/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:[0-2][1-9]|10|20|30|31)\d{3}[\dX]$/i,P=/^[a-z\d](?:\w|-)+@[a-z\d]+\.[a-z]{2,5}$/i,He=e=>T(e)?j.test(e):!1,F=e=>T(e)?O.test(e.toString()):!1,Ue=e=>{if(!T(e))return!1;let t=e.toString().replaceAll(` `,``);return k.test(t)||A.test(t)},We=e=>T(e)?P.test(e):!1,I=(e,t=!0)=>T(e)?N.test(e)||(t?M.test(e):!1):!1,Ge=e=>T(e)?typeof e==`number`||/^\d+(?:\.\d+)?$/.test(e):!1,L=e=>/\.(?:jpg|jpeg|png|gif)$/.test((e||``).toLowerCase()),Ke=e=>/[^\x20-\x7E]/.test(e),qe=(e,t)=>{if(t===`*`)return!0;let n=e.type,r=e.name;function i(e){return e.startsWith(`.`)?r.endsWith(e):e.endsWith(`/*`)?n.startsWith(e.replace(`/*`,``)):e.includes(`/`)?n===e:!1}let a=t.split(`,`).map(e=>e.trim());return a.length>1?a.some(i):i(t)},R=(e,t=200)=>e.code===t,Je=(e,t)=>R(e,t)&&T(e.data),Ye=(e,t)=>R(e,t)&&Array.isArray(e.data),Xe=(e,t)=>R(e,t)&&T(e.data)&&Array.isArray(e.data.list||e.data.records),z=e=>{if(!T(e))return``;let t=e.length;return t<=2?`*`.repeat(t):e[0]+`*`.repeat(t-2)+e[t-1]},Ze=e=>{if(!T(e))return``;let t=e.length;if(t<=2)return`*`.repeat(t);let n=Math.round(t/3);return e.slice(0,n)+`*`.repeat(t-2*n)+e.slice(t-n)},B=(e,t)=>{if(!T(e))return``;let n=e.length;if(n<=1)return`*`.repeat(n);let r=t===void 0?n-1:Math.max(Math.min(n,t),0);return`*`.repeat(r)+e.substring(r)},V=(e,t)=>{if(!T(e))return``;let n=e.length;if(n<=1)return`*`.repeat(n);let r=t===void 0?n-1:Math.max(Math.min(n,t),0);return e.substring(0,n-r)+`*`.repeat(r)},Qe=e=>{if(e){let t=e.replaceAll(` `,``);return F(t)?t.replace(/^(\d{3})\d{4}(\d{4})$/,`$1****$2`):k.test(t)?t.replace(/^(0\d{2,3})-?\d{3,4}(\d{4})$/,`$1****$2`):A.test(t)?t.replace(/^\((0\d{2,3})\)\d{3,4}(\d{4})$/,`$1****$2`):e}return``},$e=(e,t=!0)=>e?I(e,!1)?t?z(e):e.replace(/^(.)\d{3}(.{8})\d{5}(.)$/,`$1***$2*****$3`):e:``,et=e=>B(e,1),tt=e=>V(e),nt=e=>{if(e){if(!e.includes(`@`))return e;let t=e.split(`@`),n=t[0],r=t[1];if(!n||!r)return e;let i=n.length,a;return a=i<=3?`${n}***`:V(n,3),`${a}@${r}`}return``},rt=e=>{if(e){let t=e.length;return t<=10?e:e.substring(0,6)+`*`.repeat(t-10)+e.substring(t-4,t)}return``};let H;function it(e){H=e}function U(){return H}function at(e,t){return E(e)?JSON.parse(e,t):null}function W(e,t=K){return E(e)?JSON.parse(e,t):null}function ot(e,t=G){return JSON.stringify(e,t)}function G(e,t){return w(t)?{dataType:`Map`,value:[...t]}:C(t)?{dataType:`Set`,value:[...t]}:S(t)?{dataType:`Date`,value:t.toISOString()}:t}function K(e,t){if(typeof t==`object`&&t){if(t.dataType===`Map`)return new Map(t.value);if(t.dataType===`Set`)return new Set(t.value);if(t.dataType===`Date`)return new Date(t.value)}return t}const st=(e,t,n=!1)=>Object.fromEntries(Object.entries(e).filter(([e])=>n?!t.includes(e):t.includes(e))),ct=e=>{let t=e.toString().split(`.`),n=t[0]?.replace(/(\d)(?=(?:\d{3})+$)/g,`$1,`);return t.length>1?`${n}.${t[1]}`:n},lt=(e,t=2)=>{if(!T(e))return``;let n=Number(e);return Number.isNaN(n)?``:new Intl.NumberFormat(`zh-CN`,{style:`currency`,currency:`CNY`,maximumFractionDigits:t}).format(n)};e.extend(i).locale(`zh-cn`,t),e.extend(r),e.extend(o),e.extend(n),e.extend(a);const q=(t,n=`YYYY-MM-DD HH:mm:ss`)=>{let r=e(t),i=n;return!T(t)||!r.isValid()?``:(n===`date`&&(i=`YYYY-MM-DD`),n===`datetime`&&(i=`YYYY-MM-DD HH:mm:ss`),r.format(i))},ut=(t,n)=>{let r=e(t),i=e(n);if(!T(t)||!r.isValid()||!T(n)||!i.isValid())return``;let a=e.duration(i.diff(r)),o=a.years(),s=a.months(),c=a.days(),l=[o===0?``:`Y年`,s===0?``:`M个月`,c===0?``:`${c<10&&(o!==0||s!==0)?`零`:``}D天`].join(``);return a.format(l)},J=e=>{if(!T(e))return;if(/^https?:\/\//.test(e)||e.startsWith(`blob:`)||e.startsWith(`data:`))return e;let t=U();if(!T(t))throw Error(`请先使用 setBaseAttachUrl 设置文件基本路径`);return`${t}/${e}`.replace(/([^:]\/)\/+/g,`$1`)},Y=e=>{let{uri:t,url:n,...r}=e,i=t||n;return{...r,url:J(i),content:J(i),uri:i||``,status:`done`,percent:100}},dt=e=>{let t=[],n=Object.prototype.toString.call(e);if(!e)t=[];else if(Array.isArray(e))t=e.filter(Boolean);else if(typeof e==`string`)if(D(e))t=(W(e)||[]).filter(Boolean);else{let n=W(e),r=Object.prototype.toString.call(n);t=r===`[object Object]`?[n].filter(Boolean):[{id:e,name:`name`,uri:e,group:`default`}]}else n===`[object Object]`&&(t=[e]);return t.map(Y)},ft=e=>e.every(e=>typeof e==`number`),pt=e=>e.every(e=>typeof e==`string`),X=e=>{if(ft(e))return[...e].sort((e,t)=>e-t);if(pt(e))return[...e].sort((e,t)=>e.localeCompare(t,`zh-CN`)).sort((e,t)=>e.length-t.length);let t=[...e].sort(),n=t.filter(e=>T(e)),r=t.filter(e=>!T(e));return X(n).concat(r)},mt=(e,t)=>[...e].sort((e,n)=>X([e[t],n[t]])[0]===e[t]?-1:1),Z=typeof window<`u`,ht=(e=100)=>new Promise(t=>{setTimeout(()=>{t(!0)},e)}),gt=()=>{if(CSS.supports(`(font:-apple-system-body) and (-webkit-touch-callout:none) and (-webkit-tap-highlight-color:hotpink)`)){let e=document.querySelector(`meta[name="viewport"]`);e!==null&&(e.content=`${e.content}, user-scalable=no`)}},Q=Z?window.navigator.userAgent:``,_t=()=>{let e=Q.toLowerCase(),t=e.includes(`@zlb`),n=e.includes(`saas`),r=e.includes(`zhejiang`)||e.includes(`tauruszjd`)||e.includes(`dingtalk-win`),i=e.includes(`taurusapp`),a=e.includes(`micromessenger`),o=e.includes(`alipay`),s=e.includes(`miniprogram`),c={zlb:t,zyd:n,zzd:r,dd:i,wx:a,zfb:o,mini:s};return c},$=e=>Math.abs(new Date(e).getTime()^1111),vt=()=>$(`${q(new Date,`YYYY-MM-DD HH`)}:00:00`),yt=()=>$(q(new Date,`date`)),bt=()=>$(q(e().endOf(`month`),`date`));export{dt as attachFmt,de as camel2Kebab,fe as camel2Pascal,ue as camel2Snake,pe as camel2Title,L as checkImg,M as cnIdCard15Re,N as cnIdCard18Re,O as cnPhoneRE,k as cnTelRE,A as cnTelRE2,j as cnUSCIRE,lt as currencyFmt,ut as dateDuration,q as dateFmt,e as dayjs,s as detect,P as emailRE,st as filterObj,gt as fixiOSInputAutoZoomIn,U as getBaseAttachUrl,yt as getCodeOfDate,vt as getCodeOfHour,bt as getCodeOfMonth,_t as getHostEnv,g as getVariableType,rt as hideBankCard,$e as hideCardNo,nt as hideEmail,tt as hideFirstName,B as hideHead,z as hideMiddle,Qe as hidePhone,et as hideSurname,V as hideTail,Ze as hideThird,Z as inBrowser,D as isArrStr,b as isArray,Oe as isBigInt,Le as isBlob,Ae as isBoolean,S as isDate,T as isDef,We as isEmail,Ve as isEmpty,ze as isError,Ie as isFile,x as isFunction,I as isIdCard,E as isJSONStr,w as isMap,_ as isNull,De as isNumber,Ge as isNumeric,y as isObject,F as isPhone,Ne as isPromise,Me as isRegExp,C as isSet,ke as isString,je as isSymbol,Ue as isTel,Re as isURL,He as isUSCI,v as isUndefined,Ye as isValidArrRes,qe as isValidFileType,Be as isValidKey,Xe as isValidPageRes,Je as isValidRes,R as isValidResCode,Fe as isWeakMap,Pe as isWeakSet,we as jClear,ve as jDebug,ye as jError,m as jGroup,be as jGroupC,xe as jGroupE,p as jInfo,d as jLog,Te as jLogDedupe,Ee as jLogOnce,Se as jTime,Ce as jTimeEnd,f as jWarn,ie as kebab2Camel,re as kebab2Pascal,ne as kebab2Snake,ae as kebab2Title,X as naturalSort,mt as naturalSortBy,Ke as nonASCII,W as parseJSON,at as parseToJSON,ce as pascal2Camel,se as pascal2Kebab,oe as pascal2Snake,le as pascal2Title,Y as recoverFile,G as replacer,J as resUrl,K as reviver,it as setBaseAttachUrl,ee as snake2Camel,c as snake2Kebab,l as snake2Pascal,te as snake2Title,ot as stringifyJSON,_e as title2Camel,he as title2Kebab,ge as title2Pascal,me as title2Snake,ct as toThousands,Q as userAgent,ht as waitTime};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["prevValue: any","newName: string","__BASE_ATTACH_URL__: string","attachList: Resource[]","viewport: Nullable<HTMLMetaElement>","info: HostEnv"],"sources":["../src/case.ts","../src/console/log-common.ts","../src/console/log-dedupe.ts","../src/console/log-once.ts","../src/validate/core.ts","../src/validate/form.ts","../src/validate/request.ts","../src/desensitize.ts","../src/format/baseAttachUrl.ts","../src/format/core.ts","../src/format/currency.ts","../src/format/dayjs.ts","../src/format/resource.ts","../src/format/sort.ts","../src/dom.ts"],"sourcesContent":["/**\n * snake2Kebab\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example snake2Kebab('hello_world') // hello_world => hello-world\n */\nexport const snake2Kebab = (str: string) => str.replace(/_([a-z])/g, (_, letter) => `-${letter.toLowerCase()}`)\n\n/**\n * snake2Pascal\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example snake2Pascal('hello_world') // hello_world => HelloWorld\n */\nexport const snake2Pascal = (str: string) =>\n str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()).replace(/^[a-z]/, letter => letter.toUpperCase())\n\n/**\n * snake2Camel\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example snake2Camel('hello_world') // hello_world => helloWorld\n */\nexport const snake2Camel = (str: string) => str.replace(/(_([a-z]))/g, match => match[1]!.toUpperCase())\n\n/**\n * snake2Title\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example snake2Title('hello_world') // hello_world => Hello World\n */\nexport const snake2Title = (str: string) =>\n str.replace(/_([a-z])/g, (_, letter) => ` ${letter.toUpperCase()}`).replace(/^[a-z]/, letter => letter.toUpperCase())\n\n/**\n * kebab2Snake\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example kebab2Snake('hello-world') // hello-world => hello_world\n */\nexport const kebab2Snake = (str: string) => str.replace(/-([a-z])/g, (_, letter) => `_${letter.toLowerCase()}`)\n\n/**\n * kebab2Pascal\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example kebab2Pascal('hello-world') // hello-world => HelloWorld\n */\nexport const kebab2Pascal = (str: string) =>\n str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()).replace(/^[a-z]/, letter => letter.toUpperCase())\n\n/**\n * kebab2Camel\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example kebab2Camel('hello-world') // hello-world => helloWorld\n */\nexport const kebab2Camel = (str: string) => {\n const [first, ...rest] = str.split('-')\n return [first, ...rest.map(s => s.replace(/^[a-z]/, s[0]!.toUpperCase()))].join('')\n}\n\n/**\n * kebab2Title\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example kebab2Title('hello-world') // hello-world => Hello World\n */\nexport const kebab2Title = (str: string) =>\n str.replace(/-([a-z])/g, (_, letter) => ` ${letter.toUpperCase()}`).replace(/^[a-z]/, letter => letter.toUpperCase())\n\n/**\n * pascal2Snake\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example pascal2Snake('HelloWorld') // HelloWorld => hello_world\n */\nexport const pascal2Snake = (str: string) =>\n str.replace(/([A-Z])/g, (_, letter) => `_${letter.toLowerCase()}`).replace(/^_/, '')\n\n/**\n * pascal2Kebab\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example pascal2Kebab('HelloWorld') // HelloWorld => hello-world\n */\nexport const pascal2Kebab = (str: string) =>\n str.replace(/([A-Z])/g, (_, letter) => `-${letter.toLowerCase()}`).replace(/^-/, '')\n\n/**\n * pascal2Camel\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example pascal2Camel('HelloWorld') // HelloWorld => helloWorld\n */\nexport const pascal2Camel = (str: string) => str.replace(/^[A-Z]/, letter => letter.toLowerCase())\n\n/**\n * pascal2Title\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example pascal2Title('HelloWorld') // HelloWorld => Hello World\n */\nexport const pascal2Title = (str: string) => str.replace(/([A-Z])/g, (_, letter) => ` ${letter}`).replace(/^ /, '')\n\n/**\n * camel2Snake\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example camel2Snake('helloWorld') // helloWorld => hello_world\n */\nexport const camel2Snake = (str: string) => str.replace(/([A-Z])/g, (_, letter) => `_${letter.toLowerCase()}`)\n\n/**\n * camel2Kebab\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example camel2Kebab('helloWorld') // helloWorld => hello-world\n */\nexport const camel2Kebab = (str: string) => str.replace(/([A-Z])/g, (_, letter) => `-${letter.toLowerCase()}`)\n\n/**\n * camel2Pascal\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example camel2Pascal('helloWorld') // helloWorld => HelloWorld\n */\nexport const camel2Pascal = (str: string) => str.replace(/(^[a-z])|(\\s+[a-z])/g, match => match.toUpperCase())\n\n/**\n * camel2Title\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example camel2Title('helloWorld') // helloWorld => Hello World\n */\nexport const camel2Title = (str: string) =>\n str.replace(/([A-Z])/g, (_, letter) => ` ${letter}`).replace(/^[a-z]/, match => match.toUpperCase())\n\n/**\n * title2Snake\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example title2Snake('Hello World') // Hello World => hello_world\n */\nexport const title2Snake = (str: string) => str.replace(/([A-Z])/g, match => match.toLowerCase()).replace(/ /g, '_')\n\n/**\n * title2Kebab\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example title2Kebab('Hello World') // Hello World => hello-world\n */\nexport const title2Kebab = (str: string) => str.replace(/([A-Z])/g, match => match.toLowerCase()).replace(/ /g, '-')\n\n/**\n * title2Pascal\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example title2Pascal('Hello World') // Hello World => HelloWorld\n */\nexport const title2Pascal = (str: string) => str.replace(/ /g, '')\n\n/**\n * title2Camel\n * @param {string} str 字符串\n * @returns {string} 转换后的字符串\n * @example title2Camel('Hello World') // Hello World => helloWorld\n */\nexport const title2Camel = (str: string) => str.replace(/ /g, '').replace(/^[A-Z]/, match => match.toLowerCase())\n","/* eslint-disable no-console */\nconst sharedStyle = 'color: white; padding: 1px 2px;'\n\n/**\n * jade console.log\n * only for development\n * @param {...any} args\n */\nexport const jLog = (...args: any[]) =>\n __DEV__\n ? console.log.bind(\n console,\n `%c[${args.length === 1 ? 'LOG' : '%s'}]`,\n `${sharedStyle} background: seagreen;`\n )(...args)\n : () => {}\n\n/**\n * jade console.debug\n * @param {...any} args\n */\nexport const jDebug = (...args: any[]) =>\n console.log.bind(\n console,\n `%c[${args.length === 1 ? 'DEBUG' : '%s'}]`,\n `${sharedStyle} background: linear-gradient(LightSalmon, Tomato); border-radius: 2px; font-weight: bold; border-top: 2px solid Crimson; border-bottom: 2px solid Crimson;`\n )(...args)\n\n/**\n * jade console.warn\n */\nexport const jWarn = (...args: any[]) =>\n console.warn.bind(console, `%c[${args.length === 1 ? 'WARN' : '%s'}]`, `${sharedStyle} background: tomato;`)(...args)\n\n/**\n * jade console.error\n */\nexport const jError = (...args: any[]) =>\n console.error.bind(\n console,\n `%c[${args.length === 1 ? 'ERROR' : '%s'}]`,\n `${sharedStyle} background: crimson;`\n )(...args)\n\n/**\n * jade console.info\n * @param {...any} args\n */\nexport const jInfo = (...args: any[]) =>\n console.info.bind(\n console,\n `%c[${args.length === 1 ? 'INFO' : '%s'}]`,\n `${sharedStyle} background: dodgerblue;`\n )(...args)\n\n/**\n * jade console.group\n */\nexport const jGroup = console.group.bind(console, '%c[%s]', `${sharedStyle} background: slateblue;`)\n\n/**\n * jade console.groupCollapsed\n */\nexport const jGroupC = console.groupCollapsed.bind(console, '%c[%s]', `${sharedStyle} background: slateblue;`)\n\n/**\n * jade console.groupEnd\n */\nexport const jGroupE = console.groupEnd.bind(console)\n\n/**\n * jade console.time\n * @param str\n */\nexport const jTime = (str: string) => console.time(`[${str}]`)\n\n/**\n * jade console.timeEnd\n * @param str\n */\nexport const jTimeEnd = (str: string) => console.timeEnd(`[${str}]`)\n\n/**\n * jade console.clear\n */\nexport const jClear = console.clear.bind(console)\n","import { jLog } from './log-common'\n\nlet prevValue: any\n\n/**\n * 不连续打印相同的值\n * @param args\n */\nexport const jLogDedupe = (...args: any[]) => {\n if (args.length === 0) return\n if (args.length > 0 && prevValue && JSON.stringify(args) === JSON.stringify(prevValue)) return\n jLog(...args)\n prevValue = args\n}\n","import { jLog } from './log-common'\n\nlet logged = false\n\n/**\n * 只打印一次\n * @param args\n */\nexport const jLogOnce = (...args: any[]) => {\n if (logged) return\n jLog(...args)\n logged = true\n}\n","import type { Numeric, UnDef } from '../../types'\nimport { jWarn } from '../console'\n\n/**\n * 检测变量类型\n * @param {any} val 检测的目标\n */\nexport const getVariableType = (val: any) => {\n const value = Object.prototype.toString.call(val)\n const result = value.match(/\\[object (\\S*)\\]/)?.[1]\n return result?.toLocaleLowerCase()\n}\n\n/**\n * 是否是数字\n * @param {any} val 检测的目标\n */\nexport const isNumber = (val: any): val is number => getVariableType(val) === 'number'\n\n/**\n * 是否是任意精度整数\n * @param {any} val 检测的目标\n */\nexport const isBigInt = (val: any): val is bigint => getVariableType(val) === 'bigint'\n\n/**\n * 是否是字符串\n * @param {any} val 检测的目标\n */\nexport const isString = (val: any): val is string => getVariableType(val) === 'string'\n\n/**\n * 是否是布尔值\n * @param {any} val 检测的目标\n */\nexport const isBoolean = (val: any): val is boolean => getVariableType(val) === 'boolean'\n\n/**\n * 是否是null\n * @param {any} val 检测的目标\n */\nexport const isNull = (val: any): val is null => getVariableType(val) === 'null'\n\n/**\n * 是否是undefined\n * @param {any} val 检测的目标\n */\nexport const isUndefined = (val: any): val is undefined => getVariableType(val) === 'undefined'\n\n/**\n * 是否是symbol\n * @param {any} val 检测的目标\n */\nexport const isSymbol = (val: any): val is symbol => getVariableType(val) === 'symbol'\n\n/**\n * 是否是对象\n * @param {any} val 检测的目标\n */\nexport const isObject = (val: any): val is Record<any, any> => getVariableType(val) === 'object'\n\n/**\n * 是否是数组\n * @param {any} val 检测的目标\n */\nexport const isArray = (val: any): val is Array<any> => getVariableType(val) === 'array'\n\n/**\n * 是否是函数,但也有可能是Class\n * @param {any} val 检测的目标\n */\n// eslint-disable-next-line ts/no-unsafe-function-type\nexport const isFunction = (val: any): val is Function => getVariableType(val) === 'function'\n\n/**\n * 是否是日期\n * @param {any} val 检测的目标\n */\nexport const isDate = (val: any): val is Date => getVariableType(val) === 'date'\n\n/**\n * 是否是正则\n * @param {any} val 检测的目标\n */\nexport const isRegExp = (val: any): val is RegExp => getVariableType(val) === 'regexp'\n\n/**\n * 是否是期望(Promise)\n * @param {any} val 检测的目标\n */\nexport const isPromise = (val: any): val is Promise<any> => getVariableType(val) === 'promise'\n\n/**\n * 是否是集合(Set)\n * @param {any} val 检测的目标\n */\nexport const isSet = (val: any): val is Set<any> => getVariableType(val) === 'set'\n\n/**\n * 是否是映射(Map)\n * @param {any} val 检测的目标\n */\nexport const isMap = (val: any): val is Map<any, any> => getVariableType(val) === 'map'\n\n/**\n * 是否是弱集合(WeakSet)\n * @param {any} val 检测的目标\n */\nexport const isWeakSet = (val: any): val is WeakSet<any> => getVariableType(val) === 'weakset'\n\n/**\n * 是否是弱映射(WeakMap)\n * @param {any} val 检测的目标\n */\nexport const isWeakMap = (val: any): val is WeakMap<any, any> => getVariableType(val) === 'weakmap'\n\n/**\n * 是否是File\n * @param {any} val 检测的目标\n */\nexport const isFile = (val: any): val is File => getVariableType(val) === 'file'\n\n/**\n * 是否是Blob\n * @param {any} val 检测的目标\n */\nexport const isBlob = (val: any): val is Blob => getVariableType(val) === 'blob'\n\n/**\n * 是否是URL\n * @param {any} val 检测的目标\n */\nexport const isURL = (val: any): val is URL => getVariableType(val) === 'url'\n\n/**\n * 是否是错误(Error)\n * @param {any} val 检测的目标\n */\nexport const isError = (val: any): val is Error => getVariableType(val) === 'error'\n\n/**\n * 是否既不是 null 也不是 undefined\n * @param {any} val 检测的目标\n */\nexport const isDef = <T>(val: T): val is NonNullable<T> => !isNull(val) && !isUndefined(val)\n\n/**\n * 判断是否合法JSON字符串\n * @param str\n */\nexport const isJSONStr = (str: UnDef<string>) => {\n if (isDef(str)) {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n jWarn('Failed to parse invalid string', e)\n return false\n }\n }\n return false\n}\n\n/**\n * 判断是否合法JSON数组字符串\n * @param str\n */\nexport const isArrStr = (str: UnDef<string>) => {\n if (isDef(str)) {\n try {\n return Array.isArray(JSON.parse(str))\n } catch (e) {\n jWarn('Failed to parse invalid string', e)\n return false\n }\n }\n return false\n}\n\n/**\n * 判断是否有效的key\n * @param {string | number | symbol} key 键名\n * @param {object} object 对象\n * @example\n *\n * ```ts\n * const obj = { a: 1, b: 2 }\n * isValidKey('a', obj) // true\n * ```\n * @returns {boolean} boolean\n */\nexport const isValidKey = (key: string | number | symbol, object: object): key is keyof typeof object => key in object\n\n/**\n * 是否是空值/空数组/空对象 null undefined '' [] {} Set Map\n * @param val\n */\nexport const isEmpty = (val: UnDef<Numeric | boolean | Record<any, any> | Array<any> | Set<any> | Map<any, any>>) => {\n return (\n !isDef(val) ||\n val === '' ||\n (isArray(val) && val.length === 0) ||\n (isObject(val) && Object.keys(val).length === 0) ||\n (isMap(val) && val.size === 0) ||\n (isSet(val) && val.size === 0)\n )\n}\n","import type { Numeric, UnDef } from '../../types'\nimport { isDef } from './core'\n\nexport const cnPhoneRE = /^1[3-9]\\d{9}$/\nexport const cnTelRE = /^0\\d{2,3}-?\\d{7,8}$/\nexport const cnTelRE2 = /^\\(0\\d{2,3}\\)\\d{7,8}$/\nexport const cnUSCIRE = /^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/\nexport const cnIdCard15Re = /^[1-9]\\d{7}(?:0[1-9]|10|11|12)(?:[0-2][1-9]|10|20|30|31)\\d{2}[\\dX]$/i\nexport const cnIdCard18Re = /^[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0[1-9]|1[0-2])(?:[0-2][1-9]|10|20|30|31)\\d{3}[\\dX]$/i\nexport const emailRE = /^[a-z\\d](?:\\w|-)+@[a-z\\d]+\\.[a-z]{2,5}$/i\n\n/**\n * 是否是[统一社会信用代码](https://zh.wikipedia.org/zh-cn/%E7%BB%9F%E4%B8%80%E7%A4%BE%E4%BC%9A%E4%BF%A1%E7%94%A8%E4%BB%A3%E7%A0%81)\n * @example\n * ```ts\n * isUSCI('91350100M000100Y43') // true\n * ```\n * @param {UnDef<string>} val - 待校验的值\n * @returns {boolean} 是否是统一社会信用代码\n */\nexport const isUSCI = (val: UnDef<string>): boolean => {\n if (!isDef(val)) return false\n return cnUSCIRE.test(val)\n}\n\n/**\n * 是否是中国手机号\n * @param val\n */\nexport const isPhone = (val: UnDef<Numeric>) => {\n if (!isDef(val)) return false\n return cnPhoneRE.test(val.toString())\n}\n\n/**\n * 是否是中国座机号\n * @param val\n */\nexport const isTel = (val: UnDef<Numeric>) => {\n if (!isDef(val)) return false\n const valStr = val.toString().replaceAll(' ', '')\n return cnTelRE.test(valStr) || cnTelRE2.test(valStr)\n}\n\n/**\n * 是否是邮箱\n * @param val\n */\nexport const isEmail = (val: UnDef<string>) => {\n if (!isDef(val)) return false\n return emailRE.test(val)\n}\n\n/**\n * 是否是身份证\n * @param {string|null|undefined} val 身份证号\n * @param {boolean} compatible 兼容15位\n */\nexport const isIdCard = (val: UnDef<string>, compatible = true) => {\n if (!isDef(val)) return false\n return cnIdCard18Re.test(val) || (compatible ? cnIdCard15Re.test(val) : false)\n}\n\n/**\n * 是否是数字或字符\n * @param val\n */\nexport const isNumeric = (val: UnDef<Numeric>): val is string => {\n if (isDef(val)) return typeof val === 'number' || /^\\d+(?:\\.\\d+)?$/.test(val)\n return false\n}\n\n/**\n * 是否是需要的图片格式\n * @param ext\n */\nexport const checkImg = (ext?: string) => {\n return /\\.(?:jpg|jpeg|png|gif)$/.test((ext || '').toLowerCase())\n}\n\n/**\n * 包含非ASCII字符\n * @param text\n */\nexport const nonASCII = (text: string) => /[^\\x20-\\x7E]/.test(text)\n\n/**\n * 校验文件类型\n * 1. XXX/YYY 2. .xxx 3. XXX/* 4.*\n * @param {File} file 需要校验的文件\n * @param {string} type 文件类型, 与input.accept一致\n */\nexport const isValidFileType = (file: File, type: string) => {\n if (type === '*') return true\n\n const fileType = file.type\n const fileName = file.name\n\n /**\n * 校验\n * @param item\n */\n function validate(item: string) {\n if (item.startsWith('.')) {\n return fileName.endsWith(item)\n }\n if (item.endsWith('/*')) {\n return fileType.startsWith(item.replace('/*', ''))\n }\n if (item.includes('/')) {\n return fileType === item\n }\n return false\n }\n\n const typeArrStr = type.split(',').map(item => item.trim())\n if (typeArrStr.length > 1) {\n return typeArrStr.some(validate)\n }\n return validate(type)\n}\n","import type { PageRes, Res } from '../../types'\nimport { isDef } from './core'\n\n/**\n * 校验接口返回code\n * @param res\n * @param code\n */\nexport const isValidResCode = (res: Res, code = 200) => res.code === code\n\n/**\n * 校验接口返回内容\n * @param res\n * @param code\n */\nexport const isValidRes = (res: Res, code?: number) => isValidResCode(res, code) && isDef(res.data)\n\n/**\n * 校验接口数组返回内容\n * @param res\n * @param code\n */\nexport const isValidArrRes = (res: Res<any[]>, code?: number) => isValidResCode(res, code) && Array.isArray(res.data)\n\n/**\n * 校验接口分页返回内容\n * @param res\n * @param code\n */\nexport const isValidPageRes = (res: PageRes, code?: number) =>\n isValidResCode(res, code) && isDef(res.data) && Array.isArray(res.data.list || res.data.records)\n","import type { UnDef } from '../types'\nimport { cnTelRE, cnTelRE2, isDef, isIdCard, isPhone } from './validate'\n\n/**\n * 隐藏中间部分\n * @param {string} str 需要隐藏的字符串\n * @returns {string} 隐藏后的字符串\n * @example\n * ```ts\n * hideMiddle('A') // '*'\n * hideMiddle('AB') // '**'\n * hideMiddle('ABC') // 'A*C'\n * hideMiddle('ABCD') // 'A**D'\n * hideMiddle('ABCDE') // 'A***E'\n * ```\n */\nexport const hideMiddle = (str: UnDef<string>): string => {\n if (!isDef(str)) return ''\n const len = str.length\n if (len <= 2) return '*'.repeat(len)\n return str[0] + '*'.repeat(len - 2) + str[len - 1]\n}\n\n/**\n * 隐藏首尾仅保留中间3分之1\n * @param {string} str 需要隐藏的字符串\n * @returns {string} 隐藏后的字符串\n * @example\n * ```ts\n * hideThird('A') // '*'\n * hideThird('AB') // '**'\n * hideThird('ABC') // 'A*C'\n * hideThird('ABCD') // 'A**D'\n * hideThird('ABCDE') // 'AB*DE'\n * ```\n */\nexport const hideThird = (str: UnDef<string>): string => {\n if (!isDef(str)) return ''\n const len = str.length\n if (len <= 2) return '*'.repeat(len)\n const partLen = Math.round(len / 3)\n return str.slice(0, partLen) + '*'.repeat(len - 2 * partLen) + str.slice(len - partLen)\n}\n\n/**\n * 隐藏首部\n * @param {string} str 需要隐藏的字符串\n * @param {number} count 隐藏的字符数\n * @returns {string} 隐藏后的字符串\n * @example\n * ```ts\n * hideHead('A') // '*'\n * hideHead('AB') // '*B'\n * hideHead('ABC') // '**C'\n * hideHead('ABC', 1) // '*BC'\n * ```\n */\nexport const hideHead = (str: UnDef<string>, count?: number): string => {\n if (!isDef(str)) return ''\n const len = str.length\n if (len <= 1) return '*'.repeat(len)\n const cnt = count !== undefined ? Math.max(Math.min(len, count), 0) : len - 1\n return '*'.repeat(cnt) + str.substring(cnt)\n}\n\n/**\n * 隐藏尾部\n * @param {string} str 需要隐藏的字符串\n * @param {number} count 隐藏的字符数\n * @returns {string} 隐藏后的字符串\n * @example\n * ```ts\n * hideTail('A') // '*'\n * hideTail('AB') // 'A*'\n * hideTail('ABC') // 'A**'\n * hideTail('ABC', 1) // 'AB*'\n * ```\n */\nexport const hideTail = (str: UnDef<string>, count?: number): string => {\n if (!isDef(str)) return ''\n const len = str.length\n if (len <= 1) return '*'.repeat(len)\n const cnt = count !== undefined ? Math.max(Math.min(len, count), 0) : len - 1\n return str.substring(0, len - cnt) + '*'.repeat(cnt)\n}\n\n/**\n * 隐藏手机号/座机号\n * @param {string} phone 手机号/座机号\n * @returns {string} 隐藏后的手机号/座机号\n * @example\n * ```ts\n * hidePhone('13800138000') // '138****8000'\n * hidePhone('010-12345678') // '010****5678'\n * hidePhone('(010)12345678') // '(010)****5678'\n * ```\n */\nexport const hidePhone = (phone: UnDef<string>): string => {\n if (phone) {\n const phoneStr = phone.replaceAll(' ', '') // remove all blanks\n if (isPhone(phoneStr)) {\n return phoneStr.replace(/^(\\d{3})\\d{4}(\\d{4})$/, '$1****$2')\n }\n if (cnTelRE.test(phoneStr)) {\n // eslint-disable-next-line regexp/no-misleading-capturing-group\n return phoneStr.replace(/^(0\\d{2,3})-?\\d{3,4}(\\d{4})$/, '$1****$2')\n }\n if (cnTelRE2.test(phoneStr)) {\n return phoneStr.replace(/^\\((0\\d{2,3})\\)\\d{3,4}(\\d{4})$/, '$1****$2')\n }\n return phone\n }\n return ''\n}\n\n/**\n * 隐藏身份证号\n * @param {string} cardNo 身份证号\n * @param {boolean} strong 是否强化隐藏\n * @returns {string} 隐藏后的身份证号\n * @example\n * ```ts\n * hideCardNo('33072319641008384x') // '3****************x'\n * hideCardNo('33072319641008384x', false) // '3***23196410*****x'\n * ```\n */\nexport const hideCardNo = (cardNo: UnDef<string>, strong: boolean = true): string => {\n if (cardNo) {\n if (isIdCard(cardNo, false)) {\n return strong ? hideMiddle(cardNo) : cardNo.replace(/^(.)\\d{3}(.{8})\\d{5}(.)$/, '$1***$2*****$3')\n }\n return cardNo\n }\n return ''\n}\n\n/**\n * 隐藏姓氏\n * @param {string} name 姓名\n * @returns {string} 隐藏后的姓名\n * @example\n * ```ts\n * hideSurname('张三') // '*三'\n * hideSurname('司马懿') // '*马懿'\n * ```\n */\nexport const hideSurname = (name: UnDef<string>): string => {\n return hideHead(name, 1)\n}\n\n/**\n * 隐藏名字\n * @param {string} name 姓名\n * @returns {string} 隐藏后的姓名\n * @example\n * ```ts\n * hideFirstName('张三') // '张*'\n * hideFirstName('司马懿') // '司马*'\n * ```\n */\nexport const hideFirstName = (name: UnDef<string>): string => {\n return hideTail(name)\n}\n\n/**\n * 隐藏邮箱\n * @param {string} email 邮箱\n * @returns {string} 隐藏后的邮箱\n * @example\n * ```ts\n * hideEmail('example@hotmail.com') // 'exam***@hotmail.com'\n * ```\n */\nexport const hideEmail = (email: UnDef<string>): string => {\n if (email) {\n if (!email.includes('@')) return email\n\n const arr = email.split('@')\n const name = arr[0]\n const domain = arr[1]\n\n if (!name || !domain) return email\n\n const len = name.length\n\n let newName: string\n if (len <= 3) {\n newName = `${name}***`\n } else {\n newName = hideTail(name, 3)\n }\n\n return `${newName}@${domain}`\n }\n return ''\n}\n\n/**\n * 隐藏银行卡号\n * @param {string} bankCard 银行卡号\n * @returns {string} 隐藏后的银行卡号\n * @example\n * ```ts\n * hideBankCard('6222021001123456789') // '622202********6789'\n * ```\n */\nexport const hideBankCard = (bankCard: UnDef<string>): string => {\n if (bankCard) {\n const len = bankCard.length\n if (len <= 10) return bankCard\n return bankCard.substring(0, 6) + '*'.repeat(len - 10) + bankCard.substring(len - 4, len)\n }\n return ''\n}\n","/**\n * 文件基本路径\n */\nlet __BASE_ATTACH_URL__: string\n\n/**\n * 设置文件基本路径\n * @param baseUrl\n */\nexport function setBaseAttachUrl(baseUrl: string) {\n __BASE_ATTACH_URL__ = baseUrl\n}\n\n/**\n * 获取文件基本路径\n */\nexport function getBaseAttachUrl() {\n return __BASE_ATTACH_URL__\n}\n","import type { Nullable } from '../../types'\nimport { isDate, isJSONStr, isMap, isSet } from '../validate'\n\n/**\n * JSON 字符串转对象\n * @template T - 解析数据类型\n * @param {string} str - JSON字符串\n * @param {(this: any, key: string, value: any) => any} reviverFn - 解析函数\n * @returns {Nullable<T>} 解析后的对象\n * @deprecated 请使用 `parseJSON`\n */\nexport function parseToJSON<T = any>(\n str: string,\n reviverFn?: (this: any, key: string, value: any) => any\n): Nullable<T> {\n return isJSONStr(str) ? JSON.parse(str, reviverFn) : null\n}\n\n/**\n * JSON 字符串转对象\n * @alias parseToJSON\n * @template T - 解析数据类型\n * @param {string} str - JSON字符串\n * @param {(this: any, key: string, value: any) => any} reviverFn - 解析函数\n * @returns {Nullable<T>} 解析后的对象\n */\nexport function parseJSON<T = any>(\n str: string,\n reviverFn: (this: any, key: string, value: any) => any = reviver\n): Nullable<T> {\n return isJSONStr(str) ? JSON.parse(str, reviverFn) : null\n}\n\n/**\n * 对象转 JSON 字符串\n * @param {any} value - 对象\n * @param {(this: any, key: string, value: any) => any} replacerFn - 替换函数\n * @returns {string} JSON 字符串\n */\nexport function stringifyJSON(value: any, replacerFn: (this: any, key: string, value: any) => any = replacer): string {\n return JSON.stringify(value, replacerFn)\n}\n\n/**\n * JSON.stringify() second param\n * @param _key\n * @param value\n */\nexport function replacer(_key: any, value: any) {\n if (isMap(value)) {\n return {\n dataType: 'Map',\n value: [...value],\n }\n }\n if (isSet(value)) {\n return {\n dataType: 'Set',\n value: [...value],\n }\n }\n if (isDate(value)) {\n return {\n dataType: 'Date',\n value: value.toISOString(),\n }\n }\n return value\n}\n\n/**\n * JSON.parse() second param\n * @param _key\n * @param value\n */\nexport function reviver(_key: any, value: any) {\n if (typeof value === 'object' && value !== null) {\n if (value.dataType === 'Map') {\n return new Map(value.value)\n }\n if (value.dataType === 'Set') {\n return new Set(value.value)\n }\n if (value.dataType === 'Date') {\n return new Date(value.value)\n }\n }\n return value\n}\n\n/**\n * 过滤obj中仅包括keys的部分\n * @param {Record<string,any>} obj 对象\n * @param {string[]} keys 属性\n * @param {boolean} reverse 为true时过滤取反\n */\nexport const filterObj = (obj: Record<string, any>, keys: string[], reverse: boolean = false) =>\n Object.fromEntries(Object.entries(obj).filter(([key]) => (reverse ? !keys.includes(key) : keys.includes(key))))\n","import type { Numeric, UnDef } from '../../types'\nimport { isDef } from '../validate'\n\n/**\n * 千位分隔符\n * @param num\n */\nexport const toThousands = (num: number) => {\n const arr = num.toString().split('.')\n const integer = arr[0]?.replace(/(\\d)(?=(?:\\d{3})+$)/g, '$1,')\n if (arr.length > 1) return `${integer}.${arr[1]}`\n return integer\n}\n\n/**\n * 货币格式化\n * @param {number | string | bigint} currency - 金额\n * @param {number} [maximumFractionDigits] - 小数位数\n */\nexport const currencyFmt = (currency: UnDef<Numeric | bigint>, maximumFractionDigits: number = 2) => {\n if (!isDef(currency)) return ''\n const num = Number(currency)\n if (Number.isNaN(num)) return ''\n return new Intl.NumberFormat('zh-CN', { style: 'currency', currency: 'CNY', maximumFractionDigits }).format(num)\n}\n","import type { ConfigType, Dayjs } from 'dayjs'\nimport dayjs from 'dayjs'\nimport zhCN from 'dayjs/locale/zh-cn'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport duration from 'dayjs/plugin/duration'\nimport localeData from 'dayjs/plugin/localeData'\nimport objectSupport from 'dayjs/plugin/objectSupport'\nimport relativeTime from 'dayjs/plugin/relativeTime'\nimport { isDef } from '../validate'\n\ndayjs.extend(localeData).locale('zh-cn', zhCN)\ndayjs.extend(duration)\ndayjs.extend(relativeTime)\ndayjs.extend(customParseFormat)\ndayjs.extend(objectSupport)\n\nexport { dayjs }\nexport type { Dayjs }\n\n/**\n * 格式化时间\n * @param {import('dayjs').ConfigType} date 时间\n * @param {string} format 格式\n * @returns {string} 格式化后的时间\n */\nexport const dateFmt = (date: ConfigType, format: string | 'date' | 'datetime' = 'YYYY-MM-DD HH:mm:ss'): string => {\n const dd = dayjs(date)\n let fmt = format\n if (!isDef(date) || !dd.isValid()) return ''\n if (format === 'date') fmt = 'YYYY-MM-DD'\n if (format === 'datetime') fmt = 'YYYY-MM-DD HH:mm:ss'\n\n return dd.format(fmt)\n}\n\n/**\n * 格式化时间间隔\n * @param {import('dayjs').ConfigType} start 开始时间\n * @param {import('dayjs').ConfigType} end 结束时间\n */\nexport const dateDuration = (start: ConfigType, end: ConfigType) => {\n const startDay = dayjs(start)\n const endDay = dayjs(end)\n if (!isDef(start) || !startDay.isValid() || !isDef(end) || !endDay.isValid()) return ''\n\n const dd = dayjs.duration(endDay.diff(startDay))\n\n const year = dd.years()\n const month = dd.months()\n const day = dd.days()\n const format = [\n year === 0 ? '' : 'Y年',\n month === 0 ? '' : 'M个月',\n day === 0 ? '' : `${day < 10 && (year !== 0 || month !== 0) ? '零' : ''}D天`,\n ].join('')\n\n return dd.format(format)\n}\n","import type { MaybeArray, UnDef, Undefinable } from '../../types'\nimport type { Resource } from '../../types/upload'\nimport { isArrStr, isDef } from '../validate'\nimport { getBaseAttachUrl } from './baseAttachUrl'\nimport { parseJSON } from './core'\n\n/**\n * 获取文件完整地址\n * @param url\n */\nexport const resUrl = (url: Undefinable<string>) => {\n if (!isDef(url)) return undefined\n if (/^https?:\\/\\//.test(url) || url.startsWith('blob:') || url.startsWith('data:')) {\n return url\n }\n const baseUrl = getBaseAttachUrl()\n if (!isDef(baseUrl)) {\n throw new Error('请先使用 setBaseAttachUrl 设置文件基本路径')\n }\n return `${baseUrl}/${url}`.replace(/([^:]\\/)\\/+/g, '$1')\n}\n\n/**\n * 统一文件字段内容\n * @param resource\n */\nexport const recoverFile = (resource: Resource) => {\n const { uri, url, ...item } = resource\n const validUrl = uri || url\n return {\n ...item,\n url: resUrl(validUrl),\n content: resUrl(validUrl),\n uri: validUrl || '',\n status: 'done',\n percent: 100,\n }\n}\n\n/**\n * 附件格式\n * @param data\n */\nexport const attachFmt = (data: UnDef<MaybeArray<Resource>> | string) => {\n let attachList: Resource[] = []\n const prototype = Object.prototype.toString.call(data)\n // null 或 undefined\n if (!data) {\n attachList = []\n // Upload.Resource[]\n } else if (Array.isArray(data)) {\n attachList = data.filter(Boolean)\n // 字符串\n } else if (typeof data === 'string') {\n // Upload.Resource[] string\n if (isArrStr(data)) {\n attachList = (parseJSON<Resource[]>(data) || []).filter(Boolean)\n } else {\n const jsonData = parseJSON<Resource | string>(data)\n const prototypeJson = Object.prototype.toString.call(jsonData)\n // Upload.Resource string\n if (prototypeJson === '[object Object]') attachList = [jsonData as Resource].filter(Boolean)\n // 单个uri string\n else attachList = [{ id: data, name: 'name', uri: data, group: 'default' }]\n }\n // Upload.Resource\n } else if (prototype === '[object Object]') {\n attachList = [data]\n }\n return attachList.map(recoverFile)\n}\n","import type { Numeric, UnDef } from '../../types'\nimport { isDef } from '../validate'\n\n/**\n * 判断是否为数字数组\n * @param {UnDef<string>[] | UnDef<number>[]} arr - 数字或字符串数组\n * @returns {boolean} - 是否为数字数组\n */\nconst isNumberArray = (arr: UnDef<string>[] | UnDef<number>[]): arr is number[] =>\n arr.every(item => typeof item === 'number')\n\n/**\n * 判断是否为字符串数组\n * @param {UnDef<string>[] | UnDef<number>[]} arr - 数字或字符串数组\n * @returns {boolean} - 是否为字符串数组\n */\nconst isStringArray = (arr: UnDef<string>[] | UnDef<number>[]): arr is string[] =>\n arr.every(item => typeof item === 'string')\n\n/**\n * 自然排序\n * @param {UnDef<string>[] | UnDef<number>[]} arr - 数字或字符串数组\n * @returns {UnDef<string>[] | UnDef<number>[]} - 排序后的数组\n */\nexport const naturalSort = (arr: UnDef<string>[] | UnDef<number>[]): UnDef<string>[] | UnDef<number>[] => {\n if (isNumberArray(arr)) return [...arr].sort((a, b) => a - b)\n if (isStringArray(arr)) {\n return [...arr].sort((a, b) => a.localeCompare(b, 'zh-CN')).sort((a, b) => a.length - b.length)\n }\n const newArr = [...arr].sort()\n const validArr = newArr.filter(a => isDef(a)) as string[] | number[]\n const invalidArr = newArr.filter(a => !isDef(a)) as (null | undefined)[]\n // @ts-expect-error ...\n return naturalSort(validArr as UnDef<string>[] | UnDef<number>[]).concat(invalidArr)\n}\n\n/**\n * 根据 key 自然排序\n * @param arr - 数组\n * @param {string} key - 键名\n * @returns {any[]} - 排序后的数组\n */\nexport const naturalSortBy = <T extends Record<string, UnDef<Numeric>>>(arr: T[], key: keyof T): T[] => {\n // @ts-expect-error ...\n return [...arr].sort((a, b) => (naturalSort([a[key], b[key]])[0] === a[key] ? -1 : 1))\n}\n","import type { Nullable } from '../types'\nimport type { HostEnv } from '../types/dom'\nimport { dateFmt, dayjs } from './format'\n\n/**\n * 判断是否是浏览器环境\n */\nexport const inBrowser = typeof window !== 'undefined'\n\n/**\n * 等待一段时间\n * @param time\n */\nexport const waitTime = (time = 100) => {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(true)\n }, time)\n })\n}\n\n/**\n * 防止 iOS 因输入框字体小于16px 而在 focus 时页面缩放变大需要手动回正的情况。\n * iOS 10+ 允许 pinch-zoom, 即使 viewport 是不可伸缩的。\n * 只对这些浏览器添加额外规则\n */\nexport const fixiOSInputAutoZoomIn = () => {\n if (\n CSS.supports('(font:-apple-system-body) and (-webkit-touch-callout:none) and (-webkit-tap-highlight-color:hotpink)')\n ) {\n const viewport: Nullable<HTMLMetaElement> = document.querySelector('meta[name=\"viewport\"]')\n if (viewport !== null) {\n viewport.content = `${viewport.content}, user-scalable=no`\n }\n }\n}\n\n/**\n * 用户代理\n */\nexport const userAgent = inBrowser ? window.navigator.userAgent : ''\n\n/**\n * 获取宿主环境信息\n * @returns {HostEnv} 宿主环境信息\n * @example\n * const hostEnv = getHostEnv()\n * hostEnv.zlb // 浙里办\n * hostEnv.zyd // 专有钉\n * hostEnv.zzd // 浙政钉\n * hostEnv.dd // 钉钉/专有钉/浙政钉\n * hostEnv.wx // 微信\n * hostEnv.zfb // 支付宝\n * hostEnv.mini // 小程序\n */\nexport const getHostEnv = () => {\n const ua = userAgent.toLowerCase()\n\n const zlb = ua.includes('@zlb') // 浙里办\n const zyd = ua.includes('saas') // 专有钉\n const zzd = ua.includes('zhejiang') || ua.includes('tauruszjd') || ua.includes('dingtalk-win') // 浙政钉\n const dd = ua.includes('taurusapp') // 钉钉/专有钉/浙政钉\n const wx = ua.includes('micromessenger') // 微信\n const zfb = ua.includes('alipay') // 支付宝\n const mini = ua.includes('miniprogram') // 小程序\n\n const info: HostEnv = {\n zlb,\n zyd,\n zzd,\n dd,\n wx,\n zfb,\n mini,\n }\n\n return info\n}\n\n/**\n * 检测浏览器环境\n */\nexport { detect } from 'detect-browser'\n\n/**\n * 异或值\n */\nconst XOR_VAL = 1111\n\n/**\n * 获取某个时间戳的异或值的绝对值,在某个时间段内获取的值是唯一的\n * @param time\n */\nconst getCodeOfTime = (time: string) => Math.abs(new Date(time).getTime() ^ XOR_VAL)\n\n/**\n * 获取当小时的时间戳的异或值的绝对值, 当小时内获取的值是唯一的\n */\nexport const getCodeOfHour = () => getCodeOfTime(`${dateFmt(new Date(), 'YYYY-MM-DD HH')}:00:00`)\n\n/**\n * 获取当天的时间戳的异或值的绝对值, 当天内获取的值是唯一的\n */\nexport const getCodeOfDate = () => getCodeOfTime(dateFmt(new Date(), 'date'))\n\n/**\n * 获取当月的时间戳的异或值的绝对值, 当月内获取的值是唯一的\n */\nexport const getCodeOfMonth = () => getCodeOfTime(dateFmt(dayjs().endOf('month'), 'date'))\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jhqn/utils-core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.0",
|
|
5
5
|
"author": "jade-gjz <jiangang.zhang@jaderd.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/jaderd-jh/utils/tree/main/packages/core#readme",
|
|
@@ -21,17 +21,13 @@
|
|
|
21
21
|
"exports": {
|
|
22
22
|
".": {
|
|
23
23
|
"import": {
|
|
24
|
-
"types": "./dist/index.d.
|
|
25
|
-
"default": "./dist/index.
|
|
26
|
-
},
|
|
27
|
-
"require": {
|
|
28
|
-
"types": "./dist/index.d.cts",
|
|
29
|
-
"default": "./dist/index.cjs"
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"default": "./dist/index.js"
|
|
30
26
|
}
|
|
31
27
|
}
|
|
32
28
|
},
|
|
33
|
-
"main": "dist/index.
|
|
34
|
-
"module": "dist/index.
|
|
29
|
+
"main": "dist/index.js",
|
|
30
|
+
"module": "dist/index.js",
|
|
35
31
|
"types": "dist/index.d.ts",
|
|
36
32
|
"files": [
|
|
37
33
|
"dist"
|
|
@@ -42,7 +38,7 @@
|
|
|
42
38
|
},
|
|
43
39
|
"scripts": {
|
|
44
40
|
"test": "vitest",
|
|
45
|
-
"build": "
|
|
41
|
+
"build": "tsdown",
|
|
46
42
|
"publint": "publint"
|
|
47
43
|
}
|
|
48
44
|
}
|