@allahjs/utils 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +244 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/browser/cookieUtils/index.cjs +100 -0
  5. package/dist/browser/cookieUtils/index.cjs.map +1 -0
  6. package/dist/browser/cookieUtils/index.d.ts +55 -0
  7. package/dist/browser/domUtils/index.cjs +237 -0
  8. package/dist/browser/domUtils/index.cjs.map +1 -0
  9. package/dist/browser/domUtils/index.d.ts +116 -0
  10. package/dist/browser/index.cjs +12 -0
  11. package/dist/browser/index.cjs.map +1 -0
  12. package/dist/browser/index.d.ts +3 -0
  13. package/dist/browser/urlUtils/index.cjs +262 -0
  14. package/dist/browser/urlUtils/index.cjs.map +1 -0
  15. package/dist/browser/urlUtils/index.d.ts +72 -0
  16. package/dist/core/arrayUtils/index.cjs +109 -0
  17. package/dist/core/arrayUtils/index.cjs.map +1 -0
  18. package/dist/core/arrayUtils/index.d.ts +67 -0
  19. package/dist/core/asyncUtils/index.cjs +180 -0
  20. package/dist/core/asyncUtils/index.cjs.map +1 -0
  21. package/dist/core/asyncUtils/index.d.ts +80 -0
  22. package/dist/core/colorUtils/index.cjs +38 -0
  23. package/dist/core/colorUtils/index.cjs.map +1 -0
  24. package/dist/core/colorUtils/index.d.ts +10 -0
  25. package/dist/core/cryptoUtils/index.cjs +428 -0
  26. package/dist/core/cryptoUtils/index.cjs.map +1 -0
  27. package/dist/core/cryptoUtils/index.d.ts +132 -0
  28. package/dist/core/dateUtils/index.cjs +245 -0
  29. package/dist/core/dateUtils/index.cjs.map +1 -0
  30. package/dist/core/dateUtils/index.d.ts +117 -0
  31. package/dist/core/index.cjs +34 -0
  32. package/dist/core/index.cjs.map +1 -0
  33. package/dist/core/index.d.ts +118 -0
  34. package/dist/core/numberUtils/index.cjs +126 -0
  35. package/dist/core/numberUtils/index.cjs.map +1 -0
  36. package/dist/core/numberUtils/index.d.ts +91 -0
  37. package/dist/core/objectUtils/index.cjs +249 -0
  38. package/dist/core/objectUtils/index.cjs.map +1 -0
  39. package/dist/core/objectUtils/index.d.ts +91 -0
  40. package/dist/core/pageUtils/index.cjs +74 -0
  41. package/dist/core/pageUtils/index.cjs.map +1 -0
  42. package/dist/core/pageUtils/index.d.ts +52 -0
  43. package/dist/core/stringUtils/index.cjs +163 -0
  44. package/dist/core/stringUtils/index.cjs.map +1 -0
  45. package/dist/core/stringUtils/index.d.ts +69 -0
  46. package/dist/core/validationUtils/index.cjs +154 -0
  47. package/dist/core/validationUtils/index.cjs.map +1 -0
  48. package/dist/core/validationUtils/index.d.ts +87 -0
  49. package/dist/esm/browser/cookieUtils/index.d.ts +55 -0
  50. package/dist/esm/browser/cookieUtils/index.js +96 -0
  51. package/dist/esm/browser/cookieUtils/index.js.map +1 -0
  52. package/dist/esm/browser/domUtils/index.d.ts +116 -0
  53. package/dist/esm/browser/domUtils/index.js +233 -0
  54. package/dist/esm/browser/domUtils/index.js.map +1 -0
  55. package/dist/esm/browser/index.d.ts +3 -0
  56. package/dist/esm/browser/index.js +4 -0
  57. package/dist/esm/browser/index.js.map +1 -0
  58. package/dist/esm/browser/urlUtils/index.d.ts +72 -0
  59. package/dist/esm/browser/urlUtils/index.js +248 -0
  60. package/dist/esm/browser/urlUtils/index.js.map +1 -0
  61. package/dist/esm/core/arrayUtils/index.d.ts +67 -0
  62. package/dist/esm/core/arrayUtils/index.js +105 -0
  63. package/dist/esm/core/arrayUtils/index.js.map +1 -0
  64. package/dist/esm/core/asyncUtils/index.d.ts +80 -0
  65. package/dist/esm/core/asyncUtils/index.js +175 -0
  66. package/dist/esm/core/asyncUtils/index.js.map +1 -0
  67. package/dist/esm/core/colorUtils/index.d.ts +10 -0
  68. package/dist/esm/core/colorUtils/index.js +34 -0
  69. package/dist/esm/core/colorUtils/index.js.map +1 -0
  70. package/dist/esm/core/cryptoUtils/index.d.ts +132 -0
  71. package/dist/esm/core/cryptoUtils/index.js +424 -0
  72. package/dist/esm/core/cryptoUtils/index.js.map +1 -0
  73. package/dist/esm/core/dateUtils/index.d.ts +117 -0
  74. package/dist/esm/core/dateUtils/index.js +241 -0
  75. package/dist/esm/core/dateUtils/index.js.map +1 -0
  76. package/dist/esm/core/index.d.ts +118 -0
  77. package/dist/esm/core/index.js +30 -0
  78. package/dist/esm/core/index.js.map +1 -0
  79. package/dist/esm/core/numberUtils/index.d.ts +91 -0
  80. package/dist/esm/core/numberUtils/index.js +122 -0
  81. package/dist/esm/core/numberUtils/index.js.map +1 -0
  82. package/dist/esm/core/objectUtils/index.d.ts +91 -0
  83. package/dist/esm/core/objectUtils/index.js +245 -0
  84. package/dist/esm/core/objectUtils/index.js.map +1 -0
  85. package/dist/esm/core/pageUtils/index.d.ts +52 -0
  86. package/dist/esm/core/pageUtils/index.js +66 -0
  87. package/dist/esm/core/pageUtils/index.js.map +1 -0
  88. package/dist/esm/core/stringUtils/index.d.ts +69 -0
  89. package/dist/esm/core/stringUtils/index.js +159 -0
  90. package/dist/esm/core/stringUtils/index.js.map +1 -0
  91. package/dist/esm/core/validationUtils/index.d.ts +87 -0
  92. package/dist/esm/core/validationUtils/index.js +150 -0
  93. package/dist/esm/core/validationUtils/index.js.map +1 -0
  94. package/dist/esm/index.d.ts +22 -0
  95. package/dist/esm/index.js +26 -0
  96. package/dist/esm/index.js.map +1 -0
  97. package/dist/esm/request/ReqQueue/index.js +59 -0
  98. package/dist/esm/request/ReqQueue/index.js.map +1 -0
  99. package/dist/esm/request/httpCode/index.js +49 -0
  100. package/dist/esm/request/httpCode/index.js.map +1 -0
  101. package/dist/esm/request/httpUtils/index.js +359 -0
  102. package/dist/esm/request/httpUtils/index.js.map +1 -0
  103. package/dist/esm/request/index.d.ts +15 -0
  104. package/dist/esm/request/index.js +166 -0
  105. package/dist/esm/request/index.js.map +1 -0
  106. package/dist/esm/request/typings/index.d.ts +184 -0
  107. package/dist/esm/request/uniRequest/index.js +62 -0
  108. package/dist/esm/request/uniRequest/index.js.map +1 -0
  109. package/dist/esm/types/data/index.d.ts +188 -0
  110. package/dist/esm/types/data/index.js +13 -0
  111. package/dist/esm/types/data/index.js.map +1 -0
  112. package/dist/esm/types/index.d.ts +1 -0
  113. package/dist/esm/types/index.js +2 -0
  114. package/dist/esm/types/index.js.map +1 -0
  115. package/dist/esm/uniapp/Tips/index.d.ts +295 -0
  116. package/dist/esm/uniapp/Tips/index.js +498 -0
  117. package/dist/esm/uniapp/Tips/index.js.map +1 -0
  118. package/dist/esm/uniapp/cloudUtils/index.d.ts +56 -0
  119. package/dist/esm/uniapp/cloudUtils/index.js +90 -0
  120. package/dist/esm/uniapp/cloudUtils/index.js.map +1 -0
  121. package/dist/esm/uniapp/index.d.ts +3 -0
  122. package/dist/esm/uniapp/index.js +4 -0
  123. package/dist/esm/uniapp/index.js.map +1 -0
  124. package/dist/esm/uniapp/uniUtils/index.d.ts +113 -0
  125. package/dist/esm/uniapp/uniUtils/index.js +199 -0
  126. package/dist/esm/uniapp/uniUtils/index.js.map +1 -0
  127. package/dist/index.cjs +88 -0
  128. package/dist/index.cjs.map +1 -0
  129. package/dist/index.d.ts +22 -0
  130. package/dist/request/ReqQueue/index.cjs +63 -0
  131. package/dist/request/ReqQueue/index.cjs.map +1 -0
  132. package/dist/request/httpCode/index.cjs +52 -0
  133. package/dist/request/httpCode/index.cjs.map +1 -0
  134. package/dist/request/httpUtils/index.cjs +365 -0
  135. package/dist/request/httpUtils/index.cjs.map +1 -0
  136. package/dist/request/index.cjs +170 -0
  137. package/dist/request/index.cjs.map +1 -0
  138. package/dist/request/index.d.ts +15 -0
  139. package/dist/request/typings/index.d.ts +184 -0
  140. package/dist/request/uniRequest/index.cjs +66 -0
  141. package/dist/request/uniRequest/index.cjs.map +1 -0
  142. package/dist/types/data/index.cjs +15 -0
  143. package/dist/types/data/index.cjs.map +1 -0
  144. package/dist/types/data/index.d.ts +188 -0
  145. package/dist/types/index.cjs +8 -0
  146. package/dist/types/index.cjs.map +1 -0
  147. package/dist/types/index.d.ts +1 -0
  148. package/dist/uniapp/Tips/index.cjs +521 -0
  149. package/dist/uniapp/Tips/index.cjs.map +1 -0
  150. package/dist/uniapp/Tips/index.d.ts +295 -0
  151. package/dist/uniapp/cloudUtils/index.cjs +92 -0
  152. package/dist/uniapp/cloudUtils/index.cjs.map +1 -0
  153. package/dist/uniapp/cloudUtils/index.d.ts +56 -0
  154. package/dist/uniapp/index.cjs +53 -0
  155. package/dist/uniapp/index.cjs.map +1 -0
  156. package/dist/uniapp/index.d.ts +3 -0
  157. package/dist/uniapp/uniUtils/index.cjs +213 -0
  158. package/dist/uniapp/uniUtils/index.cjs.map +1 -0
  159. package/dist/uniapp/uniUtils/index.d.ts +113 -0
  160. package/package.json +129 -0
@@ -0,0 +1,241 @@
1
+ import dayjs from 'dayjs';
2
+
3
+ /**
4
+ * 日期工具函数
5
+ */
6
+ /**
7
+ * 日期工具对象
8
+ */
9
+ const dateUtils = {
10
+ /**
11
+ * 格式化日期
12
+ * @param date 日期对象或时间戳
13
+ * @param format 格式字符串,如 'YYYY-MM-DD HH:mm:ss'
14
+ * @returns 格式化后的日期字符串
15
+ */
16
+ formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
17
+ if (!date)
18
+ return '未知';
19
+ return dayjs(date).format(format);
20
+ },
21
+ /**
22
+ * 获取相对时间描述
23
+ * @param date 日期对象或时间戳
24
+ * @returns 相对时间描述,如 '2小时前'
25
+ */
26
+ timeAgo(date) {
27
+ const now = dayjs();
28
+ const target = dayjs(date);
29
+ const diff = now.diff(target);
30
+ const minute = 60 * 1000;
31
+ const hour = minute * 60;
32
+ const day = hour * 24;
33
+ const month = day * 30;
34
+ const year = day * 365;
35
+ if (diff < minute) {
36
+ return '刚刚';
37
+ }
38
+ else if (diff < hour) {
39
+ return `${Math.floor(diff / minute)}分钟前`;
40
+ }
41
+ else if (diff < day) {
42
+ return `${Math.floor(diff / hour)}小时前`;
43
+ }
44
+ else if (diff < month) {
45
+ return `${Math.floor(diff / day)}天前`;
46
+ }
47
+ else if (diff < year) {
48
+ return `${Math.floor(diff / month)}个月前`;
49
+ }
50
+ return `${Math.floor(diff / year)}年前`;
51
+ },
52
+ /**
53
+ * 添加时间
54
+ * @param date 日期对象或时间戳
55
+ * @param amount 数量
56
+ * @param unit 单位:'years' | 'months' | 'days' | 'hours' | 'minutes' | 'seconds'
57
+ * @returns 新的日期对象
58
+ */
59
+ addTime(date, amount, unit) {
60
+ const unitMap = {
61
+ years: 'year',
62
+ months: 'month',
63
+ days: 'day',
64
+ hours: 'hour',
65
+ minutes: 'minute',
66
+ seconds: 'second'
67
+ };
68
+ return dayjs(date).add(amount, unitMap[unit]).toDate();
69
+ },
70
+ /**
71
+ * 获取日期范围的开始和结束
72
+ * @param date 日期对象或时间戳
73
+ * @param unit 单位:'day' | 'week' | 'month' | 'year'
74
+ * @returns 包含开始和结束日期的对象
75
+ */
76
+ getDateRange(date, unit) {
77
+ const d = dayjs(date);
78
+ const start = d.startOf(unit).toDate();
79
+ const end = d.endOf(unit).add(1, 'millisecond').toDate();
80
+ return { start, end };
81
+ },
82
+ /**
83
+ * 判断是否为同一天
84
+ * @param date1 日期1
85
+ * @param date2 日期2
86
+ * @returns 是否为同一天
87
+ */
88
+ isSameDay(date1, date2) {
89
+ return dayjs(date1).isSame(dayjs(date2), 'day');
90
+ },
91
+ /**
92
+ * 判断是否为闰年
93
+ * @param year 年份
94
+ * @returns 是否为闰年
95
+ */
96
+ isLeapYear(year) {
97
+ return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
98
+ },
99
+ /**
100
+ * 获取月份天数
101
+ * @param year 年份
102
+ * @param month 月份(0-11)
103
+ * @returns 天数
104
+ */
105
+ getDaysInMonth(year, month) {
106
+ return dayjs().year(year).month(month).daysInMonth();
107
+ },
108
+ /**
109
+ * 获取最近几年的年份选项
110
+ * @param num 几年?默认三年(向上取)
111
+ * @returns 年份选项数组
112
+ */
113
+ getYearOptions(num = 3) {
114
+ const yearList = [];
115
+ const currentYear = dayjs().year();
116
+ for (let i = 0; i < num; i += 1) {
117
+ const year = currentYear + i;
118
+ yearList.push({
119
+ id: year,
120
+ text: year
121
+ });
122
+ }
123
+ return yearList;
124
+ },
125
+ /**
126
+ * 获取最近几年的年份选项(向下取)
127
+ * @param num 几年?默认三年(向下取)
128
+ * @returns 年份选项数组
129
+ */
130
+ getPastYearOptions(num = 3) {
131
+ const yearList = [];
132
+ const currentYear = dayjs().year();
133
+ for (let i = 0; i < num; i += 1) {
134
+ const year = currentYear - i;
135
+ yearList.push({
136
+ id: year,
137
+ text: year
138
+ });
139
+ }
140
+ return yearList;
141
+ },
142
+ /**
143
+ * 格式化时间显示
144
+ * @param timestamp 时间戳(字符串或数字)
145
+ * @returns 格式化后的时间显示字符串
146
+ */
147
+ formatTime(timestamp) {
148
+ const date = dayjs(timestamp);
149
+ const now = dayjs();
150
+ const diff = now.diff(date);
151
+ // 小于1分钟
152
+ if (diff < 60 * 1000) {
153
+ return '刚刚';
154
+ }
155
+ // 小于1小时
156
+ if (diff < 60 * 60 * 1000) {
157
+ return `${Math.floor(diff / (60 * 1000))}分钟前`;
158
+ }
159
+ // 小于1天
160
+ if (diff < 24 * 60 * 60 * 1000) {
161
+ return `${Math.floor(diff / (60 * 60 * 1000))}小时前`;
162
+ }
163
+ // 小于7天
164
+ if (diff < 7 * 24 * 60 * 60 * 1000) {
165
+ return `${Math.floor(diff / (24 * 60 * 60 * 1000))}天前`;
166
+ }
167
+ // 超过7天显示具体日期
168
+ return date.format('M月D日 HH:mm');
169
+ },
170
+ /**
171
+ * 根据当前的时间,来生成是凌晨、早上、中午、下午、晚上,返回对应的字符串
172
+ */
173
+ getDayTimeStr: (date = dayjs()) => {
174
+ const hour = date.hour();
175
+ if (hour >= 0 && hour < 6) {
176
+ return '凌晨';
177
+ }
178
+ else if (hour >= 6 && hour < 12) {
179
+ return '上午';
180
+ }
181
+ else if (hour >= 12 && hour < 14) {
182
+ return '中午';
183
+ }
184
+ else if (hour >= 14 && hour < 18) {
185
+ return '下午';
186
+ }
187
+ else if (hour >= 18 && hour < 24) {
188
+ return '晚上';
189
+ }
190
+ return '';
191
+ },
192
+ /**
193
+ * 安全格式化日期
194
+ *
195
+ * @param date - 要格式化的日期,可以是字符串、数字、Date 对象或 dayjs 对象
196
+ * @param format - 输出的日期格式,默认为 "YYYY-MM-DD"
197
+ * @returns 格式化后的日期字符串;如果输入无效,则返回 "-"
198
+ *
199
+ * @example
200
+ * safeFormat("2025-09-20") // "2025-09-20"
201
+ * safeFormat("2025-13-40") // "-"
202
+ * safeFormat(new Date(), "YYYY/MM/DD HH:mm") // "2025/09/20 16:30"
203
+ */
204
+ safeFormat: (date, format = 'YYYY-MM-DD') => {
205
+ if (date === null || date === undefined || date === '') {
206
+ return '-';
207
+ }
208
+ const d = dayjs(date);
209
+ return d.isValid() ? d.format(format) : '-';
210
+ },
211
+ /**
212
+ * 安全格式化时间
213
+ */
214
+ safeFormatTime: (date, format = 'YYYY-MM-DD HH:mm:ss') => {
215
+ return dateUtils.safeFormat(date, format);
216
+ },
217
+ /**
218
+ * 格式化日期范围显示
219
+ * 将开始时间和结束时间格式化为范围显示
220
+ * @param startTime 开始时间
221
+ * @param endTime 结束时间
222
+ * @returns 格式化后的日期范围字符串
223
+ */
224
+ formatDateRange: (startTime, endTime) => {
225
+ const start = dateUtils.safeFormat(startTime);
226
+ const end = dateUtils.safeFormat(endTime);
227
+ if (start === '-' && end === '-') {
228
+ return '-';
229
+ }
230
+ else if (start === '-') {
231
+ return `至 ${end}`;
232
+ }
233
+ else if (end === '-') {
234
+ return `${start} 至 -`;
235
+ }
236
+ return `${start} - ${end}`;
237
+ }
238
+ };
239
+
240
+ export { dateUtils as default };
241
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/core/dateUtils/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import * as dayjs from 'dayjs';
2
+ import { IOptions2 } from '../types/data/index.js';
3
+ import { AsyncQueue } from './asyncUtils/index.js';
4
+
5
+ /**
6
+ * 默认导出所有工具对象的集合
7
+ */
8
+ declare const _default: {
9
+ arrayUtils: {
10
+ unique<T>(arr: T[]): T[];
11
+ chunk<T>(arr: T[], size: number): T[][];
12
+ flatten<T>(arr: any[], depth?: number): T[];
13
+ shuffle<T>(arr: T[]): T[];
14
+ intersection<T>(arr1: T[], arr2: T[]): T[];
15
+ difference<T>(arr1: T[], arr2: T[]): T[];
16
+ groupBy<T, K extends string | number | symbol>(arr: T[], keyFn: (item: T) => K): Record<K, T[]>;
17
+ getListId(s: string, optList: IOptions2[], key: string): any;
18
+ };
19
+ stringUtils: {
20
+ capitalize(str: string): string;
21
+ toCamelCase(str: string): string;
22
+ toKebabCase(str: string): string;
23
+ toSnakeCase(str: string): string;
24
+ truncate(str: string, length: number, suffix?: string): string;
25
+ trim(str: string): string;
26
+ randomString(length: number, chars?: string): string;
27
+ buildMoneyStr(str: number | string): string;
28
+ replaceEmpty: (data: any, replaceStr?: string) => any;
29
+ replaceFieldsEmpty: (data: any, fields: string[], replaceStr?: string) => any;
30
+ };
31
+ objectUtils: {
32
+ deepClone<T>(obj: T): T;
33
+ merge<T extends Record<string, any>>(target: T, ...sources: Partial<T>[]): T;
34
+ get<T = any>(obj: Record<string, any>, path: string, defaultValue?: T): T;
35
+ set(obj: Record<string, any>, path: string, value: any): void;
36
+ unset(obj: Record<string, any>, path: string): boolean;
37
+ paths(obj: Record<string, any>, prefix?: string): string[];
38
+ buildNullStr<T = any>(obj: any, str?: string): T;
39
+ objToNum(obj: any): any;
40
+ refreshState(state: any, payload: any): void;
41
+ deleteTime(obj: any, keys?: string[]): any;
42
+ enumToOptions(enumObj: any): any[];
43
+ isSameObj(obj1: any, obj2: any): boolean;
44
+ };
45
+ numberUtils: {
46
+ formatNumber(num: number, separator?: string): string;
47
+ toFixed(num: number, digits: number): number;
48
+ random(min: number, max: number, integer?: boolean): number;
49
+ clamp(num: number, min: number, max: number): number;
50
+ mapRange(value: number, fromMin: number, fromMax: number, toMin: number, toMax: number): number;
51
+ isEven(num: number): boolean;
52
+ isOdd(num: number): boolean;
53
+ percentage(value: number, total: number, digits?: number): number;
54
+ formatBytes(bytes: number, digits?: number): string;
55
+ gcd(a: number, b: number): number;
56
+ lcm(a: number, b: number): number;
57
+ };
58
+ dateUtils: {
59
+ formatDate(date: Date | number | string, format?: string): string;
60
+ timeAgo(date: Date | number | string): string;
61
+ addTime(date: Date | number | string, amount: number, unit: "years" | "months" | "days" | "hours" | "minutes" | "seconds"): Date;
62
+ getDateRange(date: Date | number | string, unit: "day" | "week" | "month" | "year"): {
63
+ start: Date;
64
+ end: Date;
65
+ };
66
+ isSameDay(date1: Date | number | string, date2: Date | number | string): boolean;
67
+ isLeapYear(year: number): boolean;
68
+ getDaysInMonth(year: number, month: number): number;
69
+ getYearOptions(num?: number): Array<{
70
+ id: number;
71
+ text: number;
72
+ }>;
73
+ getPastYearOptions(num?: number): Array<{
74
+ id: number;
75
+ text: number;
76
+ }>;
77
+ formatTime(timestamp: string | number): string;
78
+ getDayTimeStr: (date?: dayjs.Dayjs) => "" | "凌晨" | "上午" | "中午" | "下午" | "晚上";
79
+ safeFormat: (date: any, format?: string) => string;
80
+ safeFormatTime: (date: any, format?: string) => string;
81
+ formatDateRange: (startTime?: string, endTime?: string) => string;
82
+ };
83
+ asyncUtils: {
84
+ delay(ms: number): Promise<void>;
85
+ withTimeout<T>(promise: Promise<T>, timeout: number, timeoutMessage?: string): Promise<T>;
86
+ retry<T>(fn: () => Promise<T>, maxRetries?: number, delayMs?: number): Promise<T>;
87
+ concurrent<T>(tasks: (() => Promise<T>)[], concurrency?: number): Promise<T[]>;
88
+ debounce<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void;
89
+ throttle<T extends (...args: any[]) => any>(fn: T, interval: number): (...args: Parameters<T>) => void;
90
+ createQueue(): AsyncQueue;
91
+ memoizeAsync<T extends (...args: any[]) => Promise<any>>(fn: T, keyFn?: (...args: Parameters<T>) => string, ttl?: number): T;
92
+ };
93
+ colorUtils: {
94
+ getColor(index: number): string;
95
+ };
96
+ validationUtils: {
97
+ isEmail(email: string): boolean;
98
+ isPhone(phone: string): boolean;
99
+ isIdCard(idCard: string): boolean;
100
+ isUrl(url: string): boolean;
101
+ isIp(ip: string): boolean;
102
+ passwordStrength(password: string, options?: {
103
+ minLength?: number;
104
+ requireUppercase?: boolean;
105
+ requireLowercase?: boolean;
106
+ requireNumbers?: boolean;
107
+ requireSpecialChars?: boolean;
108
+ }): number;
109
+ isBankCard(cardNumber: string): boolean;
110
+ hasChinese(text: string): boolean;
111
+ isChineseOnly(text: string): boolean;
112
+ isInRange(value: number, min: number, max: number): boolean;
113
+ isLengthInRange(str: string, min: number, max: number): boolean;
114
+ };
115
+ AsyncQueue: typeof AsyncQueue;
116
+ };
117
+
118
+ export { _default as default };
@@ -0,0 +1,30 @@
1
+ import arrayUtils from './arrayUtils/index.js';
2
+ import stringUtils from './stringUtils/index.js';
3
+ import objectUtils from './objectUtils/index.js';
4
+ import numberUtils from './numberUtils/index.js';
5
+ import colorUtils from './colorUtils/index.js';
6
+ import dateUtils from './dateUtils/index.js';
7
+ import asyncUtils, { AsyncQueue } from './asyncUtils/index.js';
8
+ import validationUtils from './validationUtils/index.js';
9
+
10
+ /**
11
+ * 核心工具函数库
12
+ * 统一导出所有工具对象
13
+ */
14
+ /**
15
+ * 默认导出所有工具对象的集合
16
+ */
17
+ var index = {
18
+ arrayUtils,
19
+ stringUtils,
20
+ objectUtils,
21
+ numberUtils,
22
+ dateUtils,
23
+ asyncUtils,
24
+ colorUtils,
25
+ validationUtils,
26
+ AsyncQueue
27
+ };
28
+
29
+ export { index as default };
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/core/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAAA;;;AAGG;AAWH;;AAEG;AACH,YAAe;IACb,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;IACV,eAAe;IACf;CACD;;;;"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * 数字工具函数
3
+ */
4
+ /**
5
+ * 数字工具对象
6
+ */
7
+ declare const numberUtils: {
8
+ /**
9
+ * 格式化数字(添加千分位分隔符)
10
+ * @param num 数字
11
+ * @param separator 分隔符,默认为 ','
12
+ * @returns 格式化后的字符串
13
+ */
14
+ formatNumber(num: number, separator?: string): string;
15
+ /**
16
+ * 保留指定小数位数
17
+ * @param num 数字
18
+ * @param digits 小数位数
19
+ * @returns 处理后的数字
20
+ */
21
+ toFixed(num: number, digits: number): number;
22
+ /**
23
+ * 生成指定范围内的随机数
24
+ * @param min 最小值
25
+ * @param max 最大值
26
+ * @param integer 是否为整数,默认为 false
27
+ * @returns 随机数
28
+ */
29
+ random(min: number, max: number, integer?: boolean): number;
30
+ /**
31
+ * 限制数字在指定范围内
32
+ * @param num 数字
33
+ * @param min 最小值
34
+ * @param max 最大值
35
+ * @returns 限制后的数字
36
+ */
37
+ clamp(num: number, min: number, max: number): number;
38
+ /**
39
+ * 数字映射到新范围
40
+ * @param value 原值
41
+ * @param fromMin 原范围最小值
42
+ * @param fromMax 原范围最大值
43
+ * @param toMin 新范围最小值
44
+ * @param toMax 新范围最大值
45
+ * @returns 映射后的值
46
+ */
47
+ mapRange(value: number, fromMin: number, fromMax: number, toMin: number, toMax: number): number;
48
+ /**
49
+ * 判断是否为偶数
50
+ * @param num 数字
51
+ * @returns 是否为偶数
52
+ */
53
+ isEven(num: number): boolean;
54
+ /**
55
+ * 判断是否为奇数
56
+ * @param num 数字
57
+ * @returns 是否为奇数
58
+ */
59
+ isOdd(num: number): boolean;
60
+ /**
61
+ * 计算百分比
62
+ * @param value 值
63
+ * @param total 总数
64
+ * @param digits 小数位数,默认为 2
65
+ * @returns 百分比
66
+ */
67
+ percentage(value: number, total: number, digits?: number): number;
68
+ /**
69
+ * 数字转换为文件大小格式
70
+ * @param bytes 字节数
71
+ * @param digits 小数位数,默认为 2
72
+ * @returns 文件大小字符串
73
+ */
74
+ formatBytes(bytes: number, digits?: number): string;
75
+ /**
76
+ * 求最大公约数
77
+ * @param a 数字a
78
+ * @param b 数字b
79
+ * @returns 最大公约数
80
+ */
81
+ gcd(a: number, b: number): number;
82
+ /**
83
+ * 求最小公倍数
84
+ * @param a 数字a
85
+ * @param b 数字b
86
+ * @returns 最小公倍数
87
+ */
88
+ lcm(a: number, b: number): number;
89
+ };
90
+
91
+ export { numberUtils as default };
@@ -0,0 +1,122 @@
1
+ /**
2
+ * 数字工具函数
3
+ */
4
+ /**
5
+ * 数字工具对象
6
+ */
7
+ const numberUtils = {
8
+ /**
9
+ * 格式化数字(添加千分位分隔符)
10
+ * @param num 数字
11
+ * @param separator 分隔符,默认为 ','
12
+ * @returns 格式化后的字符串
13
+ */
14
+ formatNumber(num, separator = ',') {
15
+ return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, separator);
16
+ },
17
+ /**
18
+ * 保留指定小数位数
19
+ * @param num 数字
20
+ * @param digits 小数位数
21
+ * @returns 处理后的数字
22
+ */
23
+ toFixed(num, digits) {
24
+ return Number(num.toFixed(digits));
25
+ },
26
+ /**
27
+ * 生成指定范围内的随机数
28
+ * @param min 最小值
29
+ * @param max 最大值
30
+ * @param integer 是否为整数,默认为 false
31
+ * @returns 随机数
32
+ */
33
+ random(min, max, integer = false) {
34
+ const result = Math.random() * (max - min) + min;
35
+ return integer ? Math.floor(result) : result;
36
+ },
37
+ /**
38
+ * 限制数字在指定范围内
39
+ * @param num 数字
40
+ * @param min 最小值
41
+ * @param max 最大值
42
+ * @returns 限制后的数字
43
+ */
44
+ clamp(num, min, max) {
45
+ return Math.min(Math.max(num, min), max);
46
+ },
47
+ /**
48
+ * 数字映射到新范围
49
+ * @param value 原值
50
+ * @param fromMin 原范围最小值
51
+ * @param fromMax 原范围最大值
52
+ * @param toMin 新范围最小值
53
+ * @param toMax 新范围最大值
54
+ * @returns 映射后的值
55
+ */
56
+ mapRange(value, fromMin, fromMax, toMin, toMax) {
57
+ return ((value - fromMin) * (toMax - toMin)) / (fromMax - fromMin) + toMin;
58
+ },
59
+ /**
60
+ * 判断是否为偶数
61
+ * @param num 数字
62
+ * @returns 是否为偶数
63
+ */
64
+ isEven(num) {
65
+ return num % 2 === 0;
66
+ },
67
+ /**
68
+ * 判断是否为奇数
69
+ * @param num 数字
70
+ * @returns 是否为奇数
71
+ */
72
+ isOdd(num) {
73
+ return num % 2 !== 0;
74
+ },
75
+ /**
76
+ * 计算百分比
77
+ * @param value 值
78
+ * @param total 总数
79
+ * @param digits 小数位数,默认为 2
80
+ * @returns 百分比
81
+ */
82
+ percentage(value, total, digits = 2) {
83
+ if (total === 0)
84
+ return 0;
85
+ return numberUtils.toFixed((value / total) * 100, digits);
86
+ },
87
+ /**
88
+ * 数字转换为文件大小格式
89
+ * @param bytes 字节数
90
+ * @param digits 小数位数,默认为 2
91
+ * @returns 文件大小字符串
92
+ */
93
+ formatBytes(bytes, digits = 2) {
94
+ if (bytes === 0)
95
+ return '0 Bytes';
96
+ const k = 1024;
97
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
98
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
99
+ return `${numberUtils.toFixed(bytes / Math.pow(k, i), digits)} ${sizes[i]}`;
100
+ },
101
+ /**
102
+ * 求最大公约数
103
+ * @param a 数字a
104
+ * @param b 数字b
105
+ * @returns 最大公约数
106
+ */
107
+ gcd(a, b) {
108
+ return b === 0 ? a : numberUtils.gcd(b, a % b);
109
+ },
110
+ /**
111
+ * 求最小公倍数
112
+ * @param a 数字a
113
+ * @param b 数字b
114
+ * @returns 最小公倍数
115
+ */
116
+ lcm(a, b) {
117
+ return Math.abs(a * b) / numberUtils.gcd(a, b);
118
+ }
119
+ };
120
+
121
+ export { numberUtils as default };
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/core/numberUtils/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}