@minson1994/ms-utils 1.0.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.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +696 -0
  3. package/dist/api/ApiConfig.d.ts +206 -0
  4. package/dist/api/ApiConfig.d.ts.map +1 -0
  5. package/dist/api/ApiError.d.ts +30 -0
  6. package/dist/api/ApiError.d.ts.map +1 -0
  7. package/dist/api/ApiRequest.d.ts +87 -0
  8. package/dist/api/ApiRequest.d.ts.map +1 -0
  9. package/dist/api/ApiResponse.d.ts +15 -0
  10. package/dist/api/ApiResponse.d.ts.map +1 -0
  11. package/dist/api/adapter/AjaxHttpAdapter.d.ts +22 -0
  12. package/dist/api/adapter/AjaxHttpAdapter.d.ts.map +1 -0
  13. package/dist/api/adapter/ApiAdapter.d.ts +56 -0
  14. package/dist/api/adapter/ApiAdapter.d.ts.map +1 -0
  15. package/dist/api/adapter/AxiosHttpAdapter.d.ts +43 -0
  16. package/dist/api/adapter/AxiosHttpAdapter.d.ts.map +1 -0
  17. package/dist/api/adapter/FetchHttpAdapter.d.ts +50 -0
  18. package/dist/api/adapter/FetchHttpAdapter.d.ts.map +1 -0
  19. package/dist/api/adapter/WxHttpAdapter.d.ts +33 -0
  20. package/dist/api/adapter/WxHttpAdapter.d.ts.map +1 -0
  21. package/dist/api/adapter/XhrHttpAdapter.d.ts +46 -0
  22. package/dist/api/adapter/XhrHttpAdapter.d.ts.map +1 -0
  23. package/dist/api/index.d.ts +22 -0
  24. package/dist/api/index.d.ts.map +1 -0
  25. package/dist/api/interceptor/ApiCacheInterceptor.d.ts +29 -0
  26. package/dist/api/interceptor/ApiCacheInterceptor.d.ts.map +1 -0
  27. package/dist/api/interceptor/ApiInterceptor.d.ts +18 -0
  28. package/dist/api/interceptor/ApiInterceptor.d.ts.map +1 -0
  29. package/dist/api/interceptor/ApiStatusInterceptor.d.ts +49 -0
  30. package/dist/api/interceptor/ApiStatusInterceptor.d.ts.map +1 -0
  31. package/dist/api/interceptor/ApiUIInterceptor.d.ts +37 -0
  32. package/dist/api/interceptor/ApiUIInterceptor.d.ts.map +1 -0
  33. package/dist/axios.cjs +151 -0
  34. package/dist/axios.d.ts +6 -0
  35. package/dist/axios.d.ts.map +1 -0
  36. package/dist/axios.js +58 -0
  37. package/dist/browser.cjs +102 -0
  38. package/dist/browser.d.ts +5 -0
  39. package/dist/browser.d.ts.map +1 -0
  40. package/dist/browser.js +75 -0
  41. package/dist/chunk-PV2X54HI.js +75 -0
  42. package/dist/index.cjs +1880 -0
  43. package/dist/index.d.ts +11 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +1753 -0
  46. package/dist/utils/AlgorithmUtils.d.ts +98 -0
  47. package/dist/utils/AlgorithmUtils.d.ts.map +1 -0
  48. package/dist/utils/Concurrency.d.ts +28 -0
  49. package/dist/utils/Concurrency.d.ts.map +1 -0
  50. package/dist/utils/CookieUtils.d.ts +38 -0
  51. package/dist/utils/CookieUtils.d.ts.map +1 -0
  52. package/dist/utils/Hook.d.ts +50 -0
  53. package/dist/utils/Hook.d.ts.map +1 -0
  54. package/dist/utils/TaskQueue.d.ts +159 -0
  55. package/dist/utils/TaskQueue.d.ts.map +1 -0
  56. package/dist/utils/TimeUtils.d.ts +82 -0
  57. package/dist/utils/TimeUtils.d.ts.map +1 -0
  58. package/dist/utils/ValidateUtils.d.ts +139 -0
  59. package/dist/utils/ValidateUtils.d.ts.map +1 -0
  60. package/dist/wx.cjs +169 -0
  61. package/dist/wx.d.ts +6 -0
  62. package/dist/wx.d.ts.map +1 -0
  63. package/dist/wx.js +76 -0
  64. package/package.json +76 -0
@@ -0,0 +1,98 @@
1
+ /** MD5 ????? */
2
+ export type Md5Length = 16 | 32;
3
+ /** AES ????? */
4
+ export interface AesOptions {
5
+ /** AES key??? iv ?? UTF-8 WordArray ????? iv ?? crypto-js passphrase ??? */
6
+ key: string;
7
+ /** AES iv?????? CBC + PKCS7? */
8
+ iv?: string;
9
+ }
10
+ /** HMAC ??? */
11
+ export type HmacAlgorithm = "SHA256" | "SHA1" | "MD5";
12
+ /** RSA ???? */
13
+ export interface RsaKeyPair {
14
+ publicKey: CryptoKey;
15
+ privateKey: CryptoKey;
16
+ }
17
+ /** RSA PEM ???? */
18
+ export interface RsaPemKeyPair {
19
+ publicKey: string;
20
+ privateKey: string;
21
+ }
22
+ /**
23
+ * ??????
24
+ *
25
+ * ???????????????????HMAC?UUID ???????
26
+ * Base64?MD5?AES?SHA256?HMAC?UUID?????? crypto-js/???????
27
+ * RSA ???? WebCrypto SubtleCrypto??? crypto-js ??? RSA?
28
+ */
29
+ export default class AlgorithmUtils {
30
+ /** Base64 ?? UTF-8 ??? */
31
+ static base64Encode(text: string): string;
32
+ /** Base64 ??? UTF-8 ??? */
33
+ static base64Decode(base64: string): string;
34
+ /**
35
+ * ?? MD5?
36
+ *
37
+ * @param length 16 ??? 32 ? MD5 ??? 16 ??
38
+ * @param upper ??????
39
+ */
40
+ static md5(text: string, length?: Md5Length, upper?: boolean): string;
41
+ /** ?? 16 ? MD5? */
42
+ static md5_16(text: string, upper?: boolean): string;
43
+ /** ?? 32 ? MD5? */
44
+ static md5_32(text: string, upper?: boolean): string;
45
+ /** AES ????? iv ??? crypto-js passphrase ???? iv ??? CBC + PKCS7? */
46
+ static aesEncrypt(text: string, options: AesOptions | string): string;
47
+ /** AES ??? */
48
+ static aesDecrypt(ciphertext: string, options: AesOptions | string): string;
49
+ /** ?? SHA256? */
50
+ static sha256(text: string, upper?: boolean): string;
51
+ /** ?? HMAC? */
52
+ static hmac(text: string, key: string, algorithm?: HmacAlgorithm, upper?: boolean): string;
53
+ /** ?? HMAC-SHA256? */
54
+ static hmacSha256(text: string, key: string, upper?: boolean): string;
55
+ /** ?? UUID v4? */
56
+ static uuid(): string;
57
+ /** ??????????????? min ? max? */
58
+ static randomInt(min: number, max: number): number;
59
+ /** ?? 0 <= n < 1 ?????? */
60
+ static randomFloat(): number;
61
+ /** ???????? */
62
+ static randomString(length?: number, chars?: string): string;
63
+ /** ?? RSA-OAEP ???? */
64
+ static rsaGenerateKeyPair(modulusLength?: number): Promise<RsaKeyPair>;
65
+ /** ?? RSA-OAEP PEM ???? */
66
+ static rsaGeneratePemKeyPair(modulusLength?: number): Promise<RsaPemKeyPair>;
67
+ /** RSA-OAEP ??????? Base64 ??? */
68
+ static rsaEncrypt(text: string, publicKey: CryptoKey | string): Promise<string>;
69
+ /** RSA-OAEP ???? Base64 ??? */
70
+ static rsaDecrypt(ciphertext: string, privateKey: CryptoKey | string): Promise<string>;
71
+ /** ?? RSA ??? PEM? */
72
+ static rsaExportPublicKey(publicKey: CryptoKey): Promise<string>;
73
+ /** ?? RSA ??? PEM? */
74
+ static rsaExportPrivateKey(privateKey: CryptoKey): Promise<string>;
75
+ /** ? PEM ?? RSA ??? */
76
+ static rsaImportPublicKey(pem: string): Promise<CryptoKey>;
77
+ /** ? PEM ?? RSA ??? */
78
+ static rsaImportPrivateKey(pem: string): Promise<CryptoKey>;
79
+ /** ??? AES ??? */
80
+ private static normalizeAesOptions;
81
+ /** ??????? */
82
+ private static randomBytes;
83
+ /** ?? SubtleCrypto? */
84
+ private static subtle;
85
+ /** ArrayBuffer ? Base64? */
86
+ private static arrayBufferToBase64;
87
+ /** Base64 ? ArrayBuffer? */
88
+ private static base64ToArrayBuffer;
89
+ /** ArrayBuffer ? PEM? */
90
+ private static arrayBufferToPem;
91
+ /** PEM ? ArrayBuffer? */
92
+ private static pemToArrayBuffer;
93
+ /** ??????? Base64? */
94
+ private static binaryToBase64;
95
+ /** Base64 ???????? */
96
+ private static base64ToBinary;
97
+ }
98
+ //# sourceMappingURL=AlgorithmUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlgorithmUtils.d.ts","sourceRoot":"","sources":["../../src/utils/AlgorithmUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 根据函数参数生成并发去重 key。
3
+ */
4
+ export type ConcurrentKeyFactory<TArgs extends unknown[]> = (...args: TArgs) => string;
5
+ /**
6
+ * 并发调用控制器。
7
+ *
8
+ * 用于将同名同参的并发异步调用合并为一次真实执行,后续调用复用首个 Promise。
9
+ */
10
+ export default class Concurrency {
11
+ /**
12
+ * 正在执行中的请求映射。
13
+ */
14
+ static pendingRequests: Map<string, Promise<unknown>>;
15
+ /**
16
+ * 创建一个带并发去重能力的异步函数。
17
+ *
18
+ * @param fn 原始异步函数
19
+ * @param name 调用名称,用于隔离不同业务
20
+ * @param getKey 参数转 key 方法,默认会对对象 key 排序后序列化
21
+ */
22
+ static createConcurrentCall<TArgs extends unknown[], TResult>(fn: (...args: TArgs) => Promise<TResult>, name: string, getKey?: ConcurrentKeyFactory<TArgs>): (...args: TArgs) => Promise<TResult>;
23
+ /**
24
+ * 默认 key 生成逻辑。
25
+ */
26
+ private static defaultKey;
27
+ }
28
+ //# sourceMappingURL=Concurrency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Concurrency.d.ts","sourceRoot":"","sources":["../../src/utils/Concurrency.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAAC,KAAK,SAAS,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC;AAEvF;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B;;OAEG;IACH,MAAM,CAAC,eAAe,gCAAuC;IAE7D;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACxD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,EACxC,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,oBAAoB,CAAC,KAAK,CAAgD,GACnF,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC;IAqBvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;CAW5B"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Cookie 工具类。
3
+ *
4
+ * 依赖浏览器 document.cookie,只应从 `@minson/ms-utils/browser` 子路径使用。
5
+ */
6
+ export default class CookieUtils {
7
+ /**
8
+ * 读取指定 Cookie。
9
+ */
10
+ static read(name: string): string | null;
11
+ /**
12
+ * 写入 Cookie。
13
+ *
14
+ * @param expires number 表示多少秒后过期;Date/string 表示绝对过期时间
15
+ */
16
+ static write(name: string, value: string, expires?: Date | number | string, path?: string, domain?: string, secure?: boolean): void;
17
+ /**
18
+ * 删除指定 Cookie。
19
+ */
20
+ static delete(name: string, path?: string, domain?: string, secure?: boolean): void;
21
+ /**
22
+ * 将对象序列化为 JSON 后写入 Cookie。
23
+ */
24
+ static writeJSON(name: string, value: unknown, expires?: Date | number | string, path?: string, domain?: string, secure?: boolean): void;
25
+ /**
26
+ * 读取 Cookie 并按 JSON 反序列化。
27
+ */
28
+ static readJSON<TValue = unknown>(name: string): TValue | null;
29
+ /**
30
+ * 读取所有 Cookie。
31
+ */
32
+ static readAll(): Record<string, string>;
33
+ /**
34
+ * 判断指定 Cookie 是否存在。
35
+ */
36
+ static has(name: string): boolean;
37
+ }
38
+ //# sourceMappingURL=CookieUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieUtils.d.ts","sourceRoot":"","sources":["../../src/utils/CookieUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASxC;;;;OAIG;IACH,MAAM,CAAC,KAAK,CACR,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,IAAI,GAAG,MAAM,GAAG,MAAc,EACvC,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,GACjB,IAAI;IAiBP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAInF;;OAEG;IACH,MAAM,CAAC,SAAS,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,IAAI,GAAG,MAAM,GAAG,MAAc,EACvC,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,GACjB,IAAI;IAIP;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAU9D;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAWxC;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGpC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Promise Hook 工具。
3
+ *
4
+ * 适合“先发起动作,后由外部回调按编号唤醒”的场景,例如 postMessage、扫码、第三方 SDK 回调。
5
+ */
6
+ export default class Hook<TResult = unknown> {
7
+ /**
8
+ * Hook 编号。
9
+ */
10
+ no: string | number;
11
+ /**
12
+ * 超时时间,单位秒。
13
+ */
14
+ timeout: number;
15
+ /**
16
+ * 超时定时器。
17
+ */
18
+ timer?: ReturnType<typeof setTimeout>;
19
+ private resolve?;
20
+ private reject?;
21
+ /**
22
+ * @param no Hook 编号,默认随机生成
23
+ * @param timeout 超时时间,单位秒
24
+ */
25
+ constructor(no?: string | number, timeout?: number);
26
+ /**
27
+ * 回调
28
+ * @param data
29
+ */
30
+ call(data: TResult | Error): void;
31
+ /**
32
+ * 注册一个 Hook,并返回等待外部唤醒的 Promise。
33
+ */
34
+ static on<TResult = unknown>(hook: Hook<TResult> | string | number): Promise<TResult>;
35
+ /**
36
+ * 唤醒指定 Hook。
37
+ *
38
+ * data 为 Error 时 reject,否则 resolve。
39
+ */
40
+ static call<TResult = unknown>(hook: Hook<TResult> | string | number, data: TResult | Error): void;
41
+ /**
42
+ * 清理指定 Hook。
43
+ */
44
+ static clear(hook: Hook<any> | string | number): void;
45
+ /**
46
+ * 自动生成 Hook 编号并执行回调,随后等待外部通过编号 call。
47
+ */
48
+ static no<TResult = unknown>(fn: (no: string | number) => void | Promise<void>, timeout?: number): Promise<TResult>;
49
+ }
50
+ //# sourceMappingURL=Hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hook.d.ts","sourceRoot":"","sources":["../../src/utils/Hook.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,IAAI,CAAC,OAAO,GAAG,OAAO;IACvC;;OAEG;IACH,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,SAAM;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IACtC,OAAO,CAAC,OAAO,CAAC,CAA2B;IAC3C,OAAO,CAAC,MAAM,CAAC,CAA6B;IAE5C;;;OAGG;gBACS,EAAE,GAAE,MAAM,GAAG,MAA2B,EAAE,OAAO,CAAC,EAAE,MAAM;IAKtE;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI;IAIjC;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBrF;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI;IASlG;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAOrD;;OAEG;WACU,EAAE,CAAC,OAAO,GAAG,OAAO,EAC7B,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACjD,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;CAKtB"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * 任务函数。
3
+ */
4
+ export type Task<TResult = unknown> = () => TResult | Promise<TResult>;
5
+ /**
6
+ * TaskQueue 配置。
7
+ */
8
+ export interface TaskQueueOptions {
9
+ /**
10
+ * 最大并发数。0 表示不限制并发,默认 1。
11
+ */
12
+ concurrency?: number;
13
+ /**
14
+ * 单个任务默认超时时间,单位毫秒。0 表示不限制,默认 30000。
15
+ */
16
+ timeout?: number;
17
+ /**
18
+ * 每个任务结束后,启动下一轮任务前的等待时间,单位毫秒。
19
+ */
20
+ taskDelayMs?: number;
21
+ }
22
+ /**
23
+ * 任务队列。
24
+ *
25
+ * 用于控制异步任务并发数,支持超时、任务间延迟、暂停、恢复、停止和等待空闲。
26
+ */
27
+ export default class TaskQueue {
28
+ /**
29
+ * 最大并发数。0 表示不限制。
30
+ */
31
+ concurrency: number;
32
+ /**
33
+ * 单个任务默认超时时间,单位毫秒。0 表示不限制。
34
+ */
35
+ timeout: number;
36
+ /**
37
+ * 每个任务结束后的间隔时间,单位毫秒。
38
+ */
39
+ taskDelayMs: number;
40
+ /**
41
+ * 当前运行中的任务数。
42
+ */
43
+ running: number;
44
+ /**
45
+ * 等待执行的任务队列。
46
+ */
47
+ private queue;
48
+ /**
49
+ * 是否暂停。
50
+ */
51
+ private paused;
52
+ /**
53
+ * 是否停止。
54
+ */
55
+ private stopped;
56
+ /**
57
+ * waitForIdle 等待回调。
58
+ */
59
+ private idleResolvers;
60
+ constructor(options?: TaskQueueOptions);
61
+ /**
62
+ * 延迟指定毫秒后返回 value。
63
+ */
64
+ static delay<TResult = void>(ms: number, value?: TResult): Promise<TResult>;
65
+ /**
66
+ * 设置最大并发数。
67
+ */
68
+ setConcurrency(concurrency: number): void;
69
+ /**
70
+ * 设置默认任务超时时间,单位毫秒。
71
+ */
72
+ setTimeout(timeout: number): void;
73
+ /**
74
+ * 设置任务间隔时间,单位毫秒。
75
+ */
76
+ setTaskDelay(delayMs: number): void;
77
+ /**
78
+ * 添加单个任务。
79
+ *
80
+ * @param task 要执行的任务函数
81
+ * @param timeout 当前任务的超时时间,单位毫秒。不传则使用默认超时时间
82
+ */
83
+ add<TResult>(task: Task<TResult>, timeout?: number): Promise<TResult>;
84
+ /**
85
+ * 批量添加任务。
86
+ */
87
+ addMany<TResult>(tasks?: Array<Task<TResult>>): Promise<TResult[]>;
88
+ /**
89
+ * 暂停队列。
90
+ *
91
+ * 已经运行的任务不会被取消,但不会启动新任务。
92
+ */
93
+ pause(): void;
94
+ /**
95
+ * 恢复队列。
96
+ */
97
+ resume(): void;
98
+ /**
99
+ * 清空等待队列。
100
+ *
101
+ * 运行中的任务不受影响。
102
+ */
103
+ clear(reason?: Error): void;
104
+ /**
105
+ * 停止队列。
106
+ *
107
+ * 会拒绝所有等待中的任务,并禁止继续添加新任务。
108
+ */
109
+ stop(reason?: Error): void;
110
+ /**
111
+ * 重置队列状态。
112
+ *
113
+ * 会清空等待队列和运行计数,不会取消已经运行的异步函数本身。
114
+ */
115
+ reset(): void;
116
+ /**
117
+ * 等待队列空闲。
118
+ *
119
+ * 当没有等待任务且没有运行中任务时 resolve。
120
+ */
121
+ waitForIdle(): Promise<void>;
122
+ /**
123
+ * 等待中的任务数。
124
+ */
125
+ get size(): number;
126
+ /**
127
+ * 当前运行中的任务数。
128
+ */
129
+ get activeCount(): number;
130
+ /**
131
+ * 尝试启动队列中的任务。
132
+ */
133
+ private next;
134
+ /**
135
+ * 判断是否还能启动更多任务。
136
+ */
137
+ private canRunMore;
138
+ /**
139
+ * 执行单个任务。
140
+ */
141
+ private runTask;
142
+ /**
143
+ * resolve 指定任务,避免重复 settle。
144
+ */
145
+ private resolveEntry;
146
+ /**
147
+ * reject 指定任务,避免重复 settle。
148
+ */
149
+ private rejectEntry;
150
+ /**
151
+ * reject 所有等待中的任务。
152
+ */
153
+ private rejectQueued;
154
+ /**
155
+ * 如果队列空闲,唤醒所有 waitForIdle。
156
+ */
157
+ private resolveIdleIfNeeded;
158
+ }
159
+ //# sourceMappingURL=TaskQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskQueue.d.ts","sourceRoot":"","sources":["../../src/utils/TaskQueue.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAUD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,SAAK;IACZ;;OAEG;IACH,OAAO,CAAC,KAAK,CAA6B;IAC1C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAS;IACvB;;OAEG;IACH,OAAO,CAAC,OAAO,CAAS;IACxB;;OAEG;IACH,OAAO,CAAC,aAAa,CAAyB;gBAElC,OAAO,GAAE,gBAAqB;IAO1C;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3E;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBrE;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,KAAK,GAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAItE;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,IAAI,IAAI;IAMd;;;;OAIG;IACH,KAAK,CAAC,MAAM,QAAiC,GAAG,IAAI;IAMpD;;;;OAIG;IACH,IAAI,CAAC,MAAM,QAAiC,GAAG,IAAI;IAMnD;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAQb;;;;OAIG;IACH,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,OAAO,CAAC,IAAI;IAWZ;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;YACW,OAAO;IA2BrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAM9B"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * 可被 TimeUtils 接收的时间输入。
3
+ */
4
+ export type DateInput = Date | number | string;
5
+ /**
6
+ * 时间加减与差值计算单位。
7
+ */
8
+ export type DateUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';
9
+ /**
10
+ * 时间工具类。
11
+ *
12
+ * 只依赖 JavaScript 原生 Date,适合浏览器、Node、小程序等运行环境。
13
+ */
14
+ export default class TimeUtils {
15
+ /**
16
+ * 获取当前时间。
17
+ */
18
+ static now(): Date;
19
+ /**
20
+ * 获取时间戳。
21
+ *
22
+ * @param date 时间输入,默认当前时间
23
+ * @param unit 返回毫秒或秒
24
+ */
25
+ static timestamp(date?: DateInput, unit?: 'millisecond' | 'second'): number;
26
+ /**
27
+ * 将 Date、时间戳、时间字符串转换为新的 Date 实例。
28
+ *
29
+ * 字符串中的 `-` 会替换成 `/`,兼容部分浏览器对 `yyyy-MM-dd` 的解析差异。
30
+ */
31
+ static toDate(value: DateInput): Date;
32
+ /**
33
+ * 判断输入是否可转换为有效时间。
34
+ */
35
+ static isValid(value: unknown): value is DateInput;
36
+ /**
37
+ * 格式化时间。
38
+ *
39
+ * 支持 token:yyyy、MM、dd、HH、mm、ss、SSS。
40
+ */
41
+ static format(date?: DateInput, pattern?: string): string;
42
+ /**
43
+ * 给时间增加指定单位的数量。
44
+ */
45
+ static add(date: DateInput, amount: number, unit: DateUnit): Date;
46
+ /**
47
+ * 给时间减少指定单位的数量。
48
+ */
49
+ static subtract(date: DateInput, amount: number, unit: DateUnit): Date;
50
+ /**
51
+ * 计算两个时间的差值。
52
+ *
53
+ * month/year 当前按 30/365 天近似计算,适合轻量工具场景。
54
+ */
55
+ static diff(start: DateInput, end: DateInput, unit?: DateUnit): number;
56
+ /**
57
+ * 格式化为相对当前时间的描述。
58
+ *
59
+ * 默认返回中文短语,例如:刚刚、3 分钟前、2 小时后。
60
+ *
61
+ * @param date 目标时间
62
+ * @param base 基准时间,默认当前时间
63
+ */
64
+ static fromNow(date: DateInput, base?: DateInput): string;
65
+ /**
66
+ * 获取当天开始时间:00:00:00.000。
67
+ */
68
+ static startOfDay(date?: DateInput): Date;
69
+ /**
70
+ * 获取当天结束时间:23:59:59.999。
71
+ */
72
+ static endOfDay(date?: DateInput): Date;
73
+ /**
74
+ * 延迟指定毫秒数。
75
+ */
76
+ static wait(time: number): Promise<void>;
77
+ /**
78
+ * 数字左侧补零。
79
+ */
80
+ private static pad;
81
+ }
82
+ //# sourceMappingURL=TimeUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/TimeUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAExG;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B;;OAEG;IACH,MAAM,CAAC,GAAG,IAAI,IAAI;IAIlB;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,GAAE,SAAsB,EAAE,IAAI,GAAE,aAAa,GAAG,QAAwB,GAAG,MAAM;IAKtG;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS;IAKlD;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,GAAE,SAAsB,EAAE,OAAO,SAAwB,GAAG,MAAM;IAepF;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IA+BjE;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAItE;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,GAAE,QAAwB,GAAG,MAAM;IAerF;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,GAAE,SAAsB,GAAG,MAAM;IAwBrE;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,GAAE,SAAsB,GAAG,IAAI;IAMrD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAE,SAAsB,GAAG,IAAI;IAMnD;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,GAAG;CAGrB"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * 密码强度等级。
3
+ */
4
+ export type PasswordStrength = 'weak' | 'medium' | 'strong';
5
+ /**
6
+ * 中国身份证校验结果。
7
+ */
8
+ export interface IdCardValidateResult {
9
+ /**
10
+ * 是否合法。
11
+ */
12
+ valid: boolean;
13
+ /**
14
+ * 出生日期,格式 yyyy-MM-dd。
15
+ */
16
+ birthday?: string;
17
+ /**
18
+ * 性别。
19
+ */
20
+ gender?: 'male' | 'female';
21
+ /**
22
+ * 错误原因。
23
+ */
24
+ reason?: string;
25
+ }
26
+ /**
27
+ * 数据验证工具类。
28
+ */
29
+ export default class ValidateUtils {
30
+ /**
31
+ * 判断是否为 null 或 undefined。
32
+ */
33
+ static isNil(value: unknown): value is null | undefined;
34
+ /**
35
+ * 判断是否为空。
36
+ *
37
+ * 空字符串、空数组、空对象、null、undefined 都视为空。
38
+ */
39
+ static isEmpty(value: unknown): boolean;
40
+ /**
41
+ * 判断是否非空。
42
+ */
43
+ static isNotEmpty(value: unknown): boolean;
44
+ /**
45
+ * 判断是否为字符串。
46
+ */
47
+ static isString(value: unknown): value is string;
48
+ /**
49
+ * 判断是否为数字且非 NaN。
50
+ */
51
+ static isNumber(value: unknown): value is number;
52
+ /**
53
+ * 判断是否为整数。
54
+ */
55
+ static isInteger(value: unknown): value is number;
56
+ /**
57
+ * 判断是否为布尔值。
58
+ */
59
+ static isBoolean(value: unknown): value is boolean;
60
+ /**
61
+ * 判断是否为数组。
62
+ */
63
+ static isArray(value: unknown): value is unknown[];
64
+ /**
65
+ * 判断是否为普通对象。
66
+ */
67
+ static isPlainObject(value: unknown): value is Record<string, unknown>;
68
+ /**
69
+ * 判断字符串长度是否在指定范围内。
70
+ */
71
+ static lengthBetween(value: string, min: number, max: number): boolean;
72
+ /**
73
+ * 判断数字是否在指定范围内。
74
+ */
75
+ static numberBetween(value: number, min: number, max: number): boolean;
76
+ /**
77
+ * 正则校验。
78
+ */
79
+ static match(value: string, pattern: RegExp): boolean;
80
+ /**
81
+ * 校验邮箱。
82
+ */
83
+ static isEmail(value: string): boolean;
84
+ /**
85
+ * 校验中国大陆手机号。
86
+ */
87
+ static isMobileCN(value: string): boolean;
88
+ /**
89
+ * 校验 URL。
90
+ */
91
+ static isUrl(value: string): boolean;
92
+ /**
93
+ * 校验 IPv4。
94
+ */
95
+ static isIPv4(value: string): boolean;
96
+ /**
97
+ * 校验 IPv6。
98
+ */
99
+ static isIPv6(value: string): boolean;
100
+ /**
101
+ * 校验是否为合法 JSON 字符串。
102
+ */
103
+ static isJSON(value: string): boolean;
104
+ /**
105
+ * 校验中国邮政编码。
106
+ */
107
+ static isPostalCodeCN(value: string): boolean;
108
+ /**
109
+ * 校验中国车牌号,覆盖普通车牌与新能源车牌。
110
+ */
111
+ static isPlateNumberCN(value: string): boolean;
112
+ /**
113
+ * 校验银行卡号。
114
+ *
115
+ * 使用 Luhn 算法。
116
+ */
117
+ static isBankCard(value: string): boolean;
118
+ /**
119
+ * 校验中国居民身份证号。
120
+ */
121
+ static isIdCardCN(value: string): boolean;
122
+ /**
123
+ * 校验中国居民身份证号,并返回生日、性别等信息。
124
+ */
125
+ static validateIdCardCN(value: string): IdCardValidateResult;
126
+ /**
127
+ * 判断密码强度。
128
+ *
129
+ * weak:长度不足或类型单一;
130
+ * medium:长度 >= 8 且至少两类字符;
131
+ * strong:长度 >= 10 且至少三类字符。
132
+ */
133
+ static passwordStrength(value: string): PasswordStrength;
134
+ /**
135
+ * 判断是否为强密码。
136
+ */
137
+ static isStrongPassword(value: string): boolean;
138
+ }
139
+ //# sourceMappingURL=ValidateUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ValidateUtils.ts"],"names":[],"mappings":"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"}