@alibarbar/common 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.
- package/README.md +338 -0
- package/dist/algorithm.d.mts +66 -0
- package/dist/algorithm.d.ts +66 -0
- package/dist/algorithm.js +44 -0
- package/dist/algorithm.js.map +1 -0
- package/dist/algorithm.mjs +3 -0
- package/dist/algorithm.mjs.map +1 -0
- package/dist/array.d.mts +139 -0
- package/dist/array.d.ts +139 -0
- package/dist/array.js +84 -0
- package/dist/array.js.map +1 -0
- package/dist/array.mjs +3 -0
- package/dist/array.mjs.map +1 -0
- package/dist/chunk-27UDDVLZ.js +259 -0
- package/dist/chunk-27UDDVLZ.js.map +1 -0
- package/dist/chunk-2FFSQ573.mjs +138 -0
- package/dist/chunk-2FFSQ573.mjs.map +1 -0
- package/dist/chunk-4RGXV4SJ.js +106 -0
- package/dist/chunk-4RGXV4SJ.js.map +1 -0
- package/dist/chunk-56W6YECK.js +374 -0
- package/dist/chunk-56W6YECK.js.map +1 -0
- package/dist/chunk-5BGSUGTI.mjs +128 -0
- package/dist/chunk-5BGSUGTI.mjs.map +1 -0
- package/dist/chunk-7E6GELHJ.mjs +302 -0
- package/dist/chunk-7E6GELHJ.mjs.map +1 -0
- package/dist/chunk-7V5UQXIO.js +89 -0
- package/dist/chunk-7V5UQXIO.js.map +1 -0
- package/dist/chunk-A4SWQXX7.mjs +484 -0
- package/dist/chunk-A4SWQXX7.mjs.map +1 -0
- package/dist/chunk-ALDC6LRJ.mjs +85 -0
- package/dist/chunk-ALDC6LRJ.mjs.map +1 -0
- package/dist/chunk-BHCRFURU.js +491 -0
- package/dist/chunk-BHCRFURU.js.map +1 -0
- package/dist/chunk-D7CS5EKF.js +110 -0
- package/dist/chunk-D7CS5EKF.js.map +1 -0
- package/dist/chunk-DYBSRI7V.js +189 -0
- package/dist/chunk-DYBSRI7V.js.map +1 -0
- package/dist/chunk-F3LAGHPG.js +332 -0
- package/dist/chunk-F3LAGHPG.js.map +1 -0
- package/dist/chunk-HLDFI7R2.mjs +175 -0
- package/dist/chunk-HLDFI7R2.mjs.map +1 -0
- package/dist/chunk-HME2N3VY.mjs +354 -0
- package/dist/chunk-HME2N3VY.mjs.map +1 -0
- package/dist/chunk-I3L42475.js +145 -0
- package/dist/chunk-I3L42475.js.map +1 -0
- package/dist/chunk-JBLX27WD.mjs +240 -0
- package/dist/chunk-JBLX27WD.mjs.map +1 -0
- package/dist/chunk-JHZ7M2MR.mjs +133 -0
- package/dist/chunk-JHZ7M2MR.mjs.map +1 -0
- package/dist/chunk-JK2SE3I2.js +100 -0
- package/dist/chunk-JK2SE3I2.js.map +1 -0
- package/dist/chunk-JQZBPAPO.js +157 -0
- package/dist/chunk-JQZBPAPO.js.map +1 -0
- package/dist/chunk-JXYGC2C5.mjs +100 -0
- package/dist/chunk-JXYGC2C5.mjs.map +1 -0
- package/dist/chunk-KGFTD255.js +104 -0
- package/dist/chunk-KGFTD255.js.map +1 -0
- package/dist/chunk-LBHBNPNJ.mjs +148 -0
- package/dist/chunk-LBHBNPNJ.mjs.map +1 -0
- package/dist/chunk-LCXGZISK.js +158 -0
- package/dist/chunk-LCXGZISK.js.map +1 -0
- package/dist/chunk-LF4CILQS.mjs +87 -0
- package/dist/chunk-LF4CILQS.mjs.map +1 -0
- package/dist/chunk-MMR6XQNX.js +98 -0
- package/dist/chunk-MMR6XQNX.js.map +1 -0
- package/dist/chunk-NSSDYX2U.mjs +80 -0
- package/dist/chunk-NSSDYX2U.mjs.map +1 -0
- package/dist/chunk-O3O67R4I.js +143 -0
- package/dist/chunk-O3O67R4I.js.map +1 -0
- package/dist/chunk-OX5PLOWB.js +90 -0
- package/dist/chunk-OX5PLOWB.js.map +1 -0
- package/dist/chunk-PJ7UCTX4.mjs +362 -0
- package/dist/chunk-PJ7UCTX4.mjs.map +1 -0
- package/dist/chunk-QIBE7GVN.mjs +81 -0
- package/dist/chunk-QIBE7GVN.mjs.map +1 -0
- package/dist/chunk-QIOC54LQ.mjs +130 -0
- package/dist/chunk-QIOC54LQ.mjs.map +1 -0
- package/dist/chunk-QV6MIQ7H.mjs +328 -0
- package/dist/chunk-QV6MIQ7H.mjs.map +1 -0
- package/dist/chunk-TQN37HIN.js +94 -0
- package/dist/chunk-TQN37HIN.js.map +1 -0
- package/dist/chunk-XJTZDXSR.mjs +94 -0
- package/dist/chunk-XJTZDXSR.mjs.map +1 -0
- package/dist/chunk-XVUE53T3.js +361 -0
- package/dist/chunk-XVUE53T3.js.map +1 -0
- package/dist/chunk-Y364QIQH.js +139 -0
- package/dist/chunk-Y364QIQH.js.map +1 -0
- package/dist/chunk-YXM6Q4JS.mjs +94 -0
- package/dist/chunk-YXM6Q4JS.mjs.map +1 -0
- package/dist/chunk-ZDMFMUDR.js +309 -0
- package/dist/chunk-ZDMFMUDR.js.map +1 -0
- package/dist/chunk-ZVJ6NQUM.mjs +82 -0
- package/dist/chunk-ZVJ6NQUM.mjs.map +1 -0
- package/dist/color.d.mts +74 -0
- package/dist/color.d.ts +74 -0
- package/dist/color.js +40 -0
- package/dist/color.js.map +1 -0
- package/dist/color.mjs +3 -0
- package/dist/color.mjs.map +1 -0
- package/dist/crypto.d.mts +92 -0
- package/dist/crypto.d.ts +92 -0
- package/dist/crypto.js +60 -0
- package/dist/crypto.js.map +1 -0
- package/dist/crypto.mjs +3 -0
- package/dist/crypto.mjs.map +1 -0
- package/dist/data-structure.d.mts +213 -0
- package/dist/data-structure.d.ts +213 -0
- package/dist/data-structure.js +32 -0
- package/dist/data-structure.js.map +1 -0
- package/dist/data-structure.mjs +3 -0
- package/dist/data-structure.mjs.map +1 -0
- package/dist/date.d.mts +108 -0
- package/dist/date.d.ts +108 -0
- package/dist/date.js +72 -0
- package/dist/date.js.map +1 -0
- package/dist/date.mjs +3 -0
- package/dist/date.mjs.map +1 -0
- package/dist/dom.d.mts +92 -0
- package/dist/dom.d.ts +92 -0
- package/dist/dom.js +56 -0
- package/dist/dom.js.map +1 -0
- package/dist/dom.mjs +3 -0
- package/dist/dom.mjs.map +1 -0
- package/dist/file.d.mts +44 -0
- package/dist/file.d.ts +44 -0
- package/dist/file.js +32 -0
- package/dist/file.js.map +1 -0
- package/dist/file.mjs +3 -0
- package/dist/file.mjs.map +1 -0
- package/dist/i18n.d.mts +77 -0
- package/dist/i18n.d.ts +77 -0
- package/dist/i18n.js +40 -0
- package/dist/i18n.js.map +1 -0
- package/dist/i18n.mjs +3 -0
- package/dist/i18n.mjs.map +1 -0
- package/dist/index.d.mts +155 -0
- package/dist/index.d.ts +155 -0
- package/dist/index.js +839 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +22 -0
- package/dist/index.mjs.map +1 -0
- package/dist/network.d.mts +47 -0
- package/dist/network.d.ts +47 -0
- package/dist/network.js +28 -0
- package/dist/network.js.map +1 -0
- package/dist/network.mjs +3 -0
- package/dist/network.mjs.map +1 -0
- package/dist/number.d.mts +100 -0
- package/dist/number.d.ts +100 -0
- package/dist/number.js +56 -0
- package/dist/number.js.map +1 -0
- package/dist/number.mjs +3 -0
- package/dist/number.mjs.map +1 -0
- package/dist/object.d.mts +132 -0
- package/dist/object.d.ts +132 -0
- package/dist/object.js +80 -0
- package/dist/object.js.map +1 -0
- package/dist/object.mjs +3 -0
- package/dist/object.mjs.map +1 -0
- package/dist/performance.d.mts +85 -0
- package/dist/performance.d.ts +85 -0
- package/dist/performance.js +40 -0
- package/dist/performance.js.map +1 -0
- package/dist/performance.mjs +3 -0
- package/dist/performance.mjs.map +1 -0
- package/dist/storage.d.mts +176 -0
- package/dist/storage.d.ts +176 -0
- package/dist/storage.js +33 -0
- package/dist/storage.js.map +1 -0
- package/dist/storage.mjs +4 -0
- package/dist/storage.mjs.map +1 -0
- package/dist/string.d.mts +105 -0
- package/dist/string.d.ts +105 -0
- package/dist/string.js +68 -0
- package/dist/string.js.map +1 -0
- package/dist/string.mjs +3 -0
- package/dist/string.mjs.map +1 -0
- package/dist/tracking.d.mts +182 -0
- package/dist/tracking.d.ts +182 -0
- package/dist/tracking.js +52 -0
- package/dist/tracking.js.map +1 -0
- package/dist/tracking.mjs +3 -0
- package/dist/tracking.mjs.map +1 -0
- package/dist/transform.d.mts +53 -0
- package/dist/transform.d.ts +53 -0
- package/dist/transform.js +32 -0
- package/dist/transform.js.map +1 -0
- package/dist/transform.mjs +3 -0
- package/dist/transform.mjs.map +1 -0
- package/dist/upload-DzlQtUBc.d.mts +202 -0
- package/dist/upload-DzlQtUBc.d.ts +202 -0
- package/dist/upload.d.mts +1 -0
- package/dist/upload.d.ts +1 -0
- package/dist/upload.js +17 -0
- package/dist/upload.js.map +1 -0
- package/dist/upload.mjs +4 -0
- package/dist/upload.mjs.map +1 -0
- package/dist/url.d.mts +82 -0
- package/dist/url.d.ts +82 -0
- package/dist/url.js +44 -0
- package/dist/url.js.map +1 -0
- package/dist/url.mjs +3 -0
- package/dist/url.mjs.map +1 -0
- package/dist/validation.d.mts +83 -0
- package/dist/validation.d.ts +83 -0
- package/dist/validation.js +60 -0
- package/dist/validation.js.map +1 -0
- package/dist/validation.mjs +3 -0
- package/dist/validation.mjs.map +1 -0
- package/package.json +170 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/core/date.ts
|
|
4
|
+
function formatDate(date, format = "YYYY-MM-DD HH:mm:ss") {
|
|
5
|
+
const d = typeof date === "number" ? new Date(date) : date;
|
|
6
|
+
const year = d.getFullYear();
|
|
7
|
+
const month = String(d.getMonth() + 1).padStart(2, "0");
|
|
8
|
+
const day = String(d.getDate()).padStart(2, "0");
|
|
9
|
+
const hours = String(d.getHours()).padStart(2, "0");
|
|
10
|
+
const minutes = String(d.getMinutes()).padStart(2, "0");
|
|
11
|
+
const seconds = String(d.getSeconds()).padStart(2, "0");
|
|
12
|
+
return format.replace("YYYY", String(year)).replace("MM", month).replace("DD", day).replace("HH", hours).replace("mm", minutes).replace("ss", seconds);
|
|
13
|
+
}
|
|
14
|
+
function getRelativeTime(date) {
|
|
15
|
+
const now = /* @__PURE__ */ new Date();
|
|
16
|
+
const target = typeof date === "number" ? new Date(date) : date;
|
|
17
|
+
const diff = now.getTime() - target.getTime();
|
|
18
|
+
const seconds = Math.floor(diff / 1e3);
|
|
19
|
+
const minutes = Math.floor(seconds / 60);
|
|
20
|
+
const hours = Math.floor(minutes / 60);
|
|
21
|
+
const days = Math.floor(hours / 24);
|
|
22
|
+
const months = Math.floor(days / 30);
|
|
23
|
+
const years = Math.floor(days / 365);
|
|
24
|
+
if (years > 0) return `${years}\u5E74\u524D`;
|
|
25
|
+
if (months > 0) return `${months}\u4E2A\u6708\u524D`;
|
|
26
|
+
if (days > 0) return `${days}\u5929\u524D`;
|
|
27
|
+
if (hours > 0) return `${hours}\u5C0F\u65F6\u524D`;
|
|
28
|
+
if (minutes > 0) return `${minutes}\u5206\u949F\u524D`;
|
|
29
|
+
if (seconds > 0) return `${seconds}\u79D2\u524D`;
|
|
30
|
+
return "\u521A\u521A";
|
|
31
|
+
}
|
|
32
|
+
function isToday(date) {
|
|
33
|
+
const d = typeof date === "number" ? new Date(date) : date;
|
|
34
|
+
const today = /* @__PURE__ */ new Date();
|
|
35
|
+
return d.getDate() === today.getDate() && d.getMonth() === today.getMonth() && d.getFullYear() === today.getFullYear();
|
|
36
|
+
}
|
|
37
|
+
function isYesterday(date) {
|
|
38
|
+
const d = typeof date === "number" ? new Date(date) : date;
|
|
39
|
+
const yesterday = /* @__PURE__ */ new Date();
|
|
40
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
41
|
+
return d.getDate() === yesterday.getDate() && d.getMonth() === yesterday.getMonth() && d.getFullYear() === yesterday.getFullYear();
|
|
42
|
+
}
|
|
43
|
+
function getTimeFromGMT(gmt) {
|
|
44
|
+
const now = /* @__PURE__ */ new Date();
|
|
45
|
+
const localOffset = now.getTimezoneOffset();
|
|
46
|
+
const gmtOffsetMinutes = gmt * 60;
|
|
47
|
+
const targetTime = new Date(now.getTime() + localOffset * 6e4 + gmtOffsetMinutes * 6e4);
|
|
48
|
+
const format = getDateFormatByGMT(gmt);
|
|
49
|
+
return formatDate(targetTime, format);
|
|
50
|
+
}
|
|
51
|
+
function getDateFormatByGMT(gmt) {
|
|
52
|
+
switch (gmt) {
|
|
53
|
+
case 0:
|
|
54
|
+
return "YYYY-MM-DD HH:mm:ss";
|
|
55
|
+
case 1:
|
|
56
|
+
case 2:
|
|
57
|
+
case 3:
|
|
58
|
+
return "YYYY-MM-DD HH:mm:ss";
|
|
59
|
+
case 8:
|
|
60
|
+
return "YYYY-MM-DD HH:mm:ss";
|
|
61
|
+
case 9:
|
|
62
|
+
return "YYYY-MM-DD HH:mm:ss";
|
|
63
|
+
case -5:
|
|
64
|
+
case -6:
|
|
65
|
+
case -7:
|
|
66
|
+
case -8:
|
|
67
|
+
return "MM/DD/YYYY HH:mm:ss";
|
|
68
|
+
default:
|
|
69
|
+
return "YYYY-MM-DD HH:mm:ss";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function addDays(date, days) {
|
|
73
|
+
const d = typeof date === "number" ? new Date(date) : new Date(date);
|
|
74
|
+
d.setDate(d.getDate() + days);
|
|
75
|
+
return d;
|
|
76
|
+
}
|
|
77
|
+
function addMonths(date, months) {
|
|
78
|
+
const d = typeof date === "number" ? new Date(date) : new Date(date);
|
|
79
|
+
d.setMonth(d.getMonth() + months);
|
|
80
|
+
return d;
|
|
81
|
+
}
|
|
82
|
+
function addYears(date, years) {
|
|
83
|
+
const d = typeof date === "number" ? new Date(date) : new Date(date);
|
|
84
|
+
d.setFullYear(d.getFullYear() + years);
|
|
85
|
+
return d;
|
|
86
|
+
}
|
|
87
|
+
function diffDays(date1, date2) {
|
|
88
|
+
const d1 = typeof date1 === "number" ? new Date(date1) : date1;
|
|
89
|
+
const d2 = typeof date2 === "number" ? new Date(date2) : date2;
|
|
90
|
+
const diff = d1.getTime() - d2.getTime();
|
|
91
|
+
return Math.floor(diff / (1e3 * 60 * 60 * 24));
|
|
92
|
+
}
|
|
93
|
+
function startOfDay(date) {
|
|
94
|
+
const d = typeof date === "number" ? new Date(date) : new Date(date);
|
|
95
|
+
d.setHours(0, 0, 0, 0);
|
|
96
|
+
return d;
|
|
97
|
+
}
|
|
98
|
+
function endOfDay(date) {
|
|
99
|
+
const d = typeof date === "number" ? new Date(date) : new Date(date);
|
|
100
|
+
d.setHours(23, 59, 59, 999);
|
|
101
|
+
return d;
|
|
102
|
+
}
|
|
103
|
+
function isWeekend(date) {
|
|
104
|
+
const d = typeof date === "number" ? new Date(date) : date;
|
|
105
|
+
const day = d.getDay();
|
|
106
|
+
return day === 0 || day === 6;
|
|
107
|
+
}
|
|
108
|
+
function isWeekday(date) {
|
|
109
|
+
return !isWeekend(date);
|
|
110
|
+
}
|
|
111
|
+
function getWeekNumber(date) {
|
|
112
|
+
const d = typeof date === "number" ? new Date(date) : new Date(date);
|
|
113
|
+
const target = new Date(d.valueOf());
|
|
114
|
+
const dayNr = (d.getDay() + 6) % 7;
|
|
115
|
+
target.setDate(target.getDate() - dayNr + 3);
|
|
116
|
+
const firstThursday = target.valueOf();
|
|
117
|
+
target.setMonth(0, 1);
|
|
118
|
+
if (target.getDay() !== 4) {
|
|
119
|
+
target.setMonth(0, 1 + (4 - target.getDay() + 7) % 7);
|
|
120
|
+
}
|
|
121
|
+
return 1 + Math.ceil((firstThursday - target.valueOf()) / 6048e5);
|
|
122
|
+
}
|
|
123
|
+
function getQuarter(date) {
|
|
124
|
+
const d = typeof date === "number" ? new Date(date) : date;
|
|
125
|
+
return Math.floor(d.getMonth() / 3) + 1;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
exports.addDays = addDays;
|
|
129
|
+
exports.addMonths = addMonths;
|
|
130
|
+
exports.addYears = addYears;
|
|
131
|
+
exports.diffDays = diffDays;
|
|
132
|
+
exports.endOfDay = endOfDay;
|
|
133
|
+
exports.formatDate = formatDate;
|
|
134
|
+
exports.getDateFormatByGMT = getDateFormatByGMT;
|
|
135
|
+
exports.getQuarter = getQuarter;
|
|
136
|
+
exports.getRelativeTime = getRelativeTime;
|
|
137
|
+
exports.getTimeFromGMT = getTimeFromGMT;
|
|
138
|
+
exports.getWeekNumber = getWeekNumber;
|
|
139
|
+
exports.isToday = isToday;
|
|
140
|
+
exports.isWeekday = isWeekday;
|
|
141
|
+
exports.isWeekend = isWeekend;
|
|
142
|
+
exports.isYesterday = isYesterday;
|
|
143
|
+
exports.startOfDay = startOfDay;
|
|
144
|
+
//# sourceMappingURL=chunk-I3L42475.js.map
|
|
145
|
+
//# sourceMappingURL=chunk-I3L42475.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/date.ts"],"names":[],"mappings":"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","file":"chunk-I3L42475.js","sourcesContent":["/**\n * 日期工具函数\n */\n\n/**\n * 格式化日期\n * @param date - 日期对象或时间戳\n * @param format - 格式字符串,默认 'YYYY-MM-DD HH:mm:ss'\n * @returns 格式化后的日期字符串\n */\nexport function formatDate(date: Date | number, format = 'YYYY-MM-DD HH:mm:ss'): string {\n const d = typeof date === 'number' ? new Date(date) : date;\n\n const year = d.getFullYear();\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n const hours = String(d.getHours()).padStart(2, '0');\n const minutes = String(d.getMinutes()).padStart(2, '0');\n const seconds = String(d.getSeconds()).padStart(2, '0');\n\n return format\n .replace('YYYY', String(year))\n .replace('MM', month)\n .replace('DD', day)\n .replace('HH', hours)\n .replace('mm', minutes)\n .replace('ss', seconds);\n}\n\n/**\n * 获取相对时间描述\n * @param date - 日期对象或时间戳\n * @returns 相对时间字符串,如 '2分钟前', '3小时前'\n */\nexport function getRelativeTime(date: Date | number): string {\n const now = new Date();\n const target = typeof date === 'number' ? new Date(date) : date;\n const diff = now.getTime() - target.getTime();\n\n const seconds = Math.floor(diff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n if (years > 0) return `${years}年前`;\n if (months > 0) return `${months}个月前`;\n if (days > 0) return `${days}天前`;\n if (hours > 0) return `${hours}小时前`;\n if (minutes > 0) return `${minutes}分钟前`;\n if (seconds > 0) return `${seconds}秒前`;\n return '刚刚';\n}\n\n/**\n * 判断是否为今天\n * @param date - 日期对象或时间戳\n * @returns 是否为今天\n */\nexport function isToday(date: Date | number): boolean {\n const d = typeof date === 'number' ? new Date(date) : date;\n const today = new Date();\n return (\n d.getDate() === today.getDate() &&\n d.getMonth() === today.getMonth() &&\n d.getFullYear() === today.getFullYear()\n );\n}\n\n/**\n * 判断是否为昨天\n * @param date - 日期对象或时间戳\n * @returns 是否为昨天\n */\nexport function isYesterday(date: Date | number): boolean {\n const d = typeof date === 'number' ? new Date(date) : date;\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n return (\n d.getDate() === yesterday.getDate() &&\n d.getMonth() === yesterday.getMonth() &&\n d.getFullYear() === yesterday.getFullYear()\n );\n}\n\n/**\n * 根据格林威治时间与当前时区获取时间 格林威治时间:0表示当前时区,1表示东一区,-1表示西一区\n * 需要返回符合该国家的时间格式\n * @param gmt - 格林威治时间偏移量(小时),0表示GMT+0,1表示GMT+1(东一区),-1表示GMT-1(西一区)\n * @returns 格式化后的时间字符串\n */\nexport function getTimeFromGMT(gmt: number): string {\n const now = new Date();\n const localOffset = now.getTimezoneOffset(); // 本地时区偏移(分钟)\n // GMT偏移量转换为分钟,然后计算目标时区的时间\n const gmtOffsetMinutes = gmt * 60;\n const targetTime = new Date(now.getTime() + localOffset * 60000 + gmtOffsetMinutes * 60000);\n // 获取适合该时区的时间格式\n const format = getDateFormatByGMT(gmt);\n return formatDate(targetTime, format);\n}\n\n/**\n * 获取适合指定GMT时区的时间格式\n * 格林威治时间:0表示GMT+0,1表示东一区(GMT+1),-1表示西一区(GMT-1)\n * @param gmt - GMT时区偏移量(小时)\n * @returns 时间格式字符串\n */\nexport function getDateFormatByGMT(gmt: number): string {\n switch (gmt) {\n case 0:\n // GMT+0 (英国、葡萄牙等)\n return 'YYYY-MM-DD HH:mm:ss';\n case 1:\n case 2:\n case 3:\n // GMT+1~+3 (欧洲大部分地区)\n return 'YYYY-MM-DD HH:mm:ss';\n case 8:\n // GMT+8 (中国、新加坡等)\n return 'YYYY-MM-DD HH:mm:ss';\n case 9:\n // GMT+9 (日本、韩国等)\n return 'YYYY-MM-DD HH:mm:ss';\n case -5:\n case -6:\n case -7:\n case -8:\n // GMT-5~-8 (美洲地区)\n return 'MM/DD/YYYY HH:mm:ss';\n default:\n // 默认格式\n return 'YYYY-MM-DD HH:mm:ss';\n }\n}\n\n/**\n * 日期加减(天数)\n * @param date - 日期对象或时间戳\n * @param days - 要加减的天数(正数为加,负数为减)\n * @returns 新的日期对象\n */\nexport function addDays(date: Date | number, days: number): Date {\n const d = typeof date === 'number' ? new Date(date) : new Date(date);\n d.setDate(d.getDate() + days);\n return d;\n}\n\n/**\n * 日期加减(月数)\n * @param date - 日期对象或时间戳\n * @param months - 要加减的月数(正数为加,负数为减)\n * @returns 新的日期对象\n */\nexport function addMonths(date: Date | number, months: number): Date {\n const d = typeof date === 'number' ? new Date(date) : new Date(date);\n d.setMonth(d.getMonth() + months);\n return d;\n}\n\n/**\n * 日期加减(年数)\n * @param date - 日期对象或时间戳\n * @param years - 要加减的年数(正数为加,负数为减)\n * @returns 新的日期对象\n */\nexport function addYears(date: Date | number, years: number): Date {\n const d = typeof date === 'number' ? new Date(date) : new Date(date);\n d.setFullYear(d.getFullYear() + years);\n return d;\n}\n\n/**\n * 计算日期差值(天数)\n * @param date1 - 第一个日期\n * @param date2 - 第二个日期\n * @returns 相差的天数(date1 - date2)\n */\nexport function diffDays(date1: Date | number, date2: Date | number): number {\n const d1 = typeof date1 === 'number' ? new Date(date1) : date1;\n const d2 = typeof date2 === 'number' ? new Date(date2) : date2;\n const diff = d1.getTime() - d2.getTime();\n return Math.floor(diff / (1000 * 60 * 60 * 24));\n}\n\n/**\n * 获取一天的开始时间(00:00:00)\n * @param date - 日期对象或时间戳\n * @returns 一天的开始时间\n */\nexport function startOfDay(date: Date | number): Date {\n const d = typeof date === 'number' ? new Date(date) : new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n}\n\n/**\n * 获取一天的结束时间(23:59:59.999)\n * @param date - 日期对象或时间戳\n * @returns 一天的结束时间\n */\nexport function endOfDay(date: Date | number): Date {\n const d = typeof date === 'number' ? new Date(date) : new Date(date);\n d.setHours(23, 59, 59, 999);\n return d;\n}\n\n/**\n * 判断是否为周末\n * @param date - 日期对象或时间戳\n * @returns 是否为周末\n */\nexport function isWeekend(date: Date | number): boolean {\n const d = typeof date === 'number' ? new Date(date) : date;\n const day = d.getDay();\n return day === 0 || day === 6;\n}\n\n/**\n * 判断是否为工作日\n * @param date - 日期对象或时间戳\n * @returns 是否为工作日\n */\nexport function isWeekday(date: Date | number): boolean {\n return !isWeekend(date);\n}\n\n/**\n * 获取周数(ISO 8601标准)\n * @param date - 日期对象或时间戳\n * @returns 周数(1-53)\n */\nexport function getWeekNumber(date: Date | number): number {\n const d = typeof date === 'number' ? new Date(date) : new Date(date);\n const target = new Date(d.valueOf());\n const dayNr = (d.getDay() + 6) % 7;\n target.setDate(target.getDate() - dayNr + 3);\n const firstThursday = target.valueOf();\n target.setMonth(0, 1);\n if (target.getDay() !== 4) {\n target.setMonth(0, 1 + ((4 - target.getDay() + 7) % 7));\n }\n return 1 + Math.ceil((firstThursday - target.valueOf()) / 604800000);\n}\n\n/**\n * 获取季度(1-4)\n * @param date - 日期对象或时间戳\n * @returns 季度(1-4)\n */\nexport function getQuarter(date: Date | number): number {\n const d = typeof date === 'number' ? new Date(date) : date;\n return Math.floor(d.getMonth() / 3) + 1;\n}\n"]}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
// src/core/object.ts
|
|
2
|
+
function deepClone(obj) {
|
|
3
|
+
if (obj === null || typeof obj !== "object") {
|
|
4
|
+
return obj;
|
|
5
|
+
}
|
|
6
|
+
if (obj instanceof Date) {
|
|
7
|
+
return new Date(obj.getTime());
|
|
8
|
+
}
|
|
9
|
+
if (obj instanceof RegExp) {
|
|
10
|
+
return new RegExp(obj.source, obj.flags);
|
|
11
|
+
}
|
|
12
|
+
if (Array.isArray(obj)) {
|
|
13
|
+
return obj.map((item) => deepClone(item));
|
|
14
|
+
}
|
|
15
|
+
if (obj instanceof Map) {
|
|
16
|
+
const clonedMap = /* @__PURE__ */ new Map();
|
|
17
|
+
obj.forEach((value, key) => {
|
|
18
|
+
clonedMap.set(deepClone(key), deepClone(value));
|
|
19
|
+
});
|
|
20
|
+
return clonedMap;
|
|
21
|
+
}
|
|
22
|
+
if (obj instanceof Set) {
|
|
23
|
+
const clonedSet = /* @__PURE__ */ new Set();
|
|
24
|
+
obj.forEach((value) => {
|
|
25
|
+
clonedSet.add(deepClone(value));
|
|
26
|
+
});
|
|
27
|
+
return clonedSet;
|
|
28
|
+
}
|
|
29
|
+
if (typeof obj === "object") {
|
|
30
|
+
const clonedObj = {};
|
|
31
|
+
for (const key in obj) {
|
|
32
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
33
|
+
clonedObj[key] = deepClone(obj[key]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return clonedObj;
|
|
37
|
+
}
|
|
38
|
+
return obj;
|
|
39
|
+
}
|
|
40
|
+
function merge(target, ...sources) {
|
|
41
|
+
return Object.assign({}, target, ...sources);
|
|
42
|
+
}
|
|
43
|
+
function deepMerge(target, ...sources) {
|
|
44
|
+
if (!sources.length) return target;
|
|
45
|
+
const source = sources.shift();
|
|
46
|
+
if (!source) {
|
|
47
|
+
return deepMerge(target, ...sources);
|
|
48
|
+
}
|
|
49
|
+
if (isObject(target) && isObject(source)) {
|
|
50
|
+
for (const key in source) {
|
|
51
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
52
|
+
const sourceValue = source[key];
|
|
53
|
+
const targetValue = target[key];
|
|
54
|
+
if (isObject(sourceValue) && isObject(targetValue)) {
|
|
55
|
+
target[key] = deepMerge(
|
|
56
|
+
targetValue,
|
|
57
|
+
sourceValue
|
|
58
|
+
);
|
|
59
|
+
} else if (sourceValue !== void 0) {
|
|
60
|
+
target[key] = sourceValue;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return deepMerge(target, ...sources);
|
|
66
|
+
}
|
|
67
|
+
function isObject(item) {
|
|
68
|
+
return item !== null && typeof item === "object" && !Array.isArray(item) && !(item instanceof Date) && !(item instanceof RegExp) && !(item instanceof Map) && !(item instanceof Set);
|
|
69
|
+
}
|
|
70
|
+
function get(obj, path, defaultValue) {
|
|
71
|
+
if (!obj || typeof obj !== "object") {
|
|
72
|
+
return defaultValue;
|
|
73
|
+
}
|
|
74
|
+
const keys2 = Array.isArray(path) ? path : path.split(".");
|
|
75
|
+
if (keys2.length === 0) {
|
|
76
|
+
return defaultValue;
|
|
77
|
+
}
|
|
78
|
+
let result = obj;
|
|
79
|
+
for (const key of keys2) {
|
|
80
|
+
if (result == null || typeof result !== "object" || Array.isArray(result)) {
|
|
81
|
+
return defaultValue;
|
|
82
|
+
}
|
|
83
|
+
const record = result;
|
|
84
|
+
if (!(key in record)) {
|
|
85
|
+
return defaultValue;
|
|
86
|
+
}
|
|
87
|
+
result = record[key];
|
|
88
|
+
}
|
|
89
|
+
return result !== void 0 ? result : defaultValue;
|
|
90
|
+
}
|
|
91
|
+
function set(obj, path, value) {
|
|
92
|
+
const keys2 = Array.isArray(path) ? path : path.split(".");
|
|
93
|
+
if (keys2.length === 0) return obj;
|
|
94
|
+
const result = deepClone(obj);
|
|
95
|
+
let current = result;
|
|
96
|
+
for (let i = 0; i < keys2.length - 1; i++) {
|
|
97
|
+
const key = keys2[i];
|
|
98
|
+
if (!(key in current) || typeof current[key] !== "object" || current[key] === null) {
|
|
99
|
+
current[key] = {};
|
|
100
|
+
}
|
|
101
|
+
current = current[key];
|
|
102
|
+
}
|
|
103
|
+
current[keys2[keys2.length - 1]] = value;
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
function pick(obj, keys2) {
|
|
107
|
+
const result = {};
|
|
108
|
+
keys2.forEach((key) => {
|
|
109
|
+
if (key in obj) {
|
|
110
|
+
result[key] = obj[key];
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
function omit(obj, keys2) {
|
|
116
|
+
const result = { ...obj };
|
|
117
|
+
keys2.forEach((key) => {
|
|
118
|
+
delete result[key];
|
|
119
|
+
});
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
function keys(obj, deep = false) {
|
|
123
|
+
if (!deep) return Object.keys(obj);
|
|
124
|
+
const result = [];
|
|
125
|
+
const traverse = (current, prefix = "") => {
|
|
126
|
+
Object.keys(current).forEach((key) => {
|
|
127
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
128
|
+
result.push(fullKey);
|
|
129
|
+
const value = current[key];
|
|
130
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value) && !(value instanceof Date) && !(value instanceof RegExp)) {
|
|
131
|
+
traverse(value, fullKey);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
traverse(obj);
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
function values(obj, deep = false) {
|
|
139
|
+
if (!deep) return Object.values(obj);
|
|
140
|
+
const result = [];
|
|
141
|
+
const traverse = (current) => {
|
|
142
|
+
Object.values(current).forEach((value) => {
|
|
143
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value) && !(value instanceof Date) && !(value instanceof RegExp)) {
|
|
144
|
+
traverse(value);
|
|
145
|
+
} else {
|
|
146
|
+
result.push(value);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
traverse(obj);
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
function mapKeys(obj, fn) {
|
|
154
|
+
const result = {};
|
|
155
|
+
Object.keys(obj).forEach((key) => {
|
|
156
|
+
const newKey = fn(key, obj[key]);
|
|
157
|
+
result[newKey] = obj[key];
|
|
158
|
+
});
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
function mapValues(obj, fn) {
|
|
162
|
+
const result = {};
|
|
163
|
+
Object.keys(obj).forEach((key) => {
|
|
164
|
+
result[key] = fn(obj[key], key);
|
|
165
|
+
});
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
function invert(obj) {
|
|
169
|
+
const result = {};
|
|
170
|
+
Object.keys(obj).forEach((key) => {
|
|
171
|
+
result[String(obj[key])] = key;
|
|
172
|
+
});
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
function defaults(obj, ...defaults2) {
|
|
176
|
+
const result = { ...obj };
|
|
177
|
+
defaults2.reverse().forEach((defaultObj) => {
|
|
178
|
+
Object.keys(defaultObj).forEach((key) => {
|
|
179
|
+
const typedKey = key;
|
|
180
|
+
if (!(typedKey in result) || result[typedKey] === void 0) {
|
|
181
|
+
result[typedKey] = defaultObj[typedKey];
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
function isEmptyObject(obj) {
|
|
188
|
+
return Object.keys(obj).length === 0;
|
|
189
|
+
}
|
|
190
|
+
function isEqual(obj1, obj2) {
|
|
191
|
+
if (obj1 === obj2) return true;
|
|
192
|
+
if (obj1 === null || obj2 === null) return false;
|
|
193
|
+
if (typeof obj1 !== "object" || typeof obj2 !== "object") return false;
|
|
194
|
+
if (obj1 instanceof Date && obj2 instanceof Date) {
|
|
195
|
+
return obj1.getTime() === obj2.getTime();
|
|
196
|
+
}
|
|
197
|
+
if (Array.isArray(obj1) && Array.isArray(obj2)) {
|
|
198
|
+
if (obj1.length !== obj2.length) return false;
|
|
199
|
+
return obj1.every((item, index) => isEqual(item, obj2[index]));
|
|
200
|
+
}
|
|
201
|
+
if (Array.isArray(obj1) || Array.isArray(obj2)) return false;
|
|
202
|
+
const keys1 = Object.keys(obj1);
|
|
203
|
+
const keys2 = Object.keys(obj2);
|
|
204
|
+
if (keys1.length !== keys2.length) return false;
|
|
205
|
+
return keys1.every((key) => {
|
|
206
|
+
const val1 = obj1[key];
|
|
207
|
+
const val2 = obj2[key];
|
|
208
|
+
return isEqual(val1, val2);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
function transform(obj, iteratee, accumulator = {}) {
|
|
212
|
+
Object.keys(obj).forEach((key) => {
|
|
213
|
+
iteratee(accumulator, obj[key], key);
|
|
214
|
+
});
|
|
215
|
+
return accumulator;
|
|
216
|
+
}
|
|
217
|
+
function pickBy(obj, predicate) {
|
|
218
|
+
const result = {};
|
|
219
|
+
Object.keys(obj).forEach((key) => {
|
|
220
|
+
const typedKey = key;
|
|
221
|
+
if (predicate(obj[typedKey], key)) {
|
|
222
|
+
result[typedKey] = obj[typedKey];
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
function omitBy(obj, predicate) {
|
|
228
|
+
const result = {};
|
|
229
|
+
Object.keys(obj).forEach((key) => {
|
|
230
|
+
const typedKey = key;
|
|
231
|
+
if (!predicate(obj[typedKey], key)) {
|
|
232
|
+
result[typedKey] = obj[typedKey];
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
return result;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export { deepClone, deepMerge, defaults, get, invert, isEmptyObject, isEqual, keys, mapKeys, mapValues, merge, omit, omitBy, pick, pickBy, set, transform, values };
|
|
239
|
+
//# sourceMappingURL=chunk-JBLX27WD.mjs.map
|
|
240
|
+
//# sourceMappingURL=chunk-JBLX27WD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/object.ts"],"names":["keys","defaults"],"mappings":";AAUO,SAAS,UAAa,GAAA,EAAW;AAEtC,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT;AAGA,EAAA,IAAI,eAAe,IAAA,EAAM;AACvB,IAAA,OAAO,IAAI,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA;AAAA,EAC/B;AAGA,EAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,IAAA,OAAO,IAAI,MAAA,CAAO,GAAA,CAAI,MAAA,EAAQ,IAAI,KAAK,CAAA;AAAA,EACzC;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA,CAAI,GAAA,CAAI,CAAA,IAAA,KAAQ,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EACxC;AAGA,EAAA,IAAI,eAAe,GAAA,EAAK;AACtB,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAI;AAC1B,IAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC1B,MAAA,SAAA,CAAU,IAAI,SAAA,CAAU,GAAG,CAAA,EAAG,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,IAChD,CAAC,CAAA;AACD,IAAA,OAAO,SAAA;AAAA,EACT;AAGA,EAAA,IAAI,eAAe,GAAA,EAAK;AACtB,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAI;AAC1B,IAAA,GAAA,CAAI,QAAQ,CAAA,KAAA,KAAS;AACnB,MAAA,SAAA,CAAU,GAAA,CAAI,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,IAChC,CAAC,CAAA;AACD,IAAA,OAAO,SAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,YAAY,EAAC;AACnB,IAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,MAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA,EAAG;AAClD,QAAA,SAAA,CAAU,GAAG,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MACrC;AAAA,IACF;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,OAAO,GAAA;AACT;AAQO,SAAS,KAAA,CAAyC,WAAc,OAAA,EAA0B;AAC/F,EAAA,OAAO,OAAO,MAAA,CAAO,EAAC,EAAG,MAAA,EAAQ,GAAG,OAAO,CAAA;AAC7C;AAQO,SAAS,SAAA,CACd,WACG,OAAA,EACA;AACH,EAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAO,MAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,QAAQ,KAAA,EAAM;AAE7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,SAAA,CAAU,MAAA,EAAQ,GAAG,OAAO,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,QAAA,CAAS,MAAM,CAAA,IAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,MAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA,EAAG;AACrD,QAAA,MAAM,WAAA,GAAc,OAAO,GAAG,CAAA;AAC9B,QAAA,MAAM,WAAA,GAAc,OAAO,GAAG,CAAA;AAE9B,QAAA,IAAI,QAAA,CAAS,WAAW,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAElD,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,SAAA;AAAA,YACZ,WAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,MAAA,IAAW,gBAAgB,MAAA,EAAW;AAEpC,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,WAAA;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,SAAA,CAAU,MAAA,EAAQ,GAAG,OAAO,CAAA;AACrC;AAKA,SAAS,SAAS,IAAA,EAAgD;AAChE,EAAA,OACE,IAAA,KAAS,QACT,OAAO,IAAA,KAAS,YAChB,CAAC,KAAA,CAAM,QAAQ,IAAI,CAAA,IACnB,EAAE,IAAA,YAAgB,IAAA,CAAA,IAClB,EAAE,IAAA,YAAgB,MAAA,CAAA,IAClB,EAAE,IAAA,YAAgB,GAAA,CAAA,IAClB,EAAE,IAAA,YAAgB,GAAA,CAAA;AAEtB;AASO,SAAS,GAAA,CACd,GAAA,EACA,IAAA,EACA,YAAA,EACe;AACf,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AACnC,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,MAAMA,KAAAA,GAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,GAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AACxD,EAAA,IAAIA,KAAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,GAAkB,GAAA;AAEtB,EAAA,KAAA,MAAW,OAAOA,KAAAA,EAAM;AACtB,IAAA,IAAI,MAAA,IAAU,QAAQ,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzE,MAAA,OAAO,YAAA;AAAA,IACT;AAGA,IAAA,MAAM,MAAA,GAAS,MAAA;AACf,IAAA,IAAI,EAAE,OAAO,MAAA,CAAA,EAAS;AACpB,MAAA,OAAO,YAAA;AAAA,IACT;AAEA,IAAA,MAAA,GAAS,OAAO,GAAG,CAAA;AAAA,EACrB;AAEA,EAAA,OAAO,MAAA,KAAW,SAAa,MAAA,GAAe,YAAA;AAChD;AASO,SAAS,GAAA,CACd,GAAA,EACA,IAAA,EACA,KAAA,EACG;AACH,EAAA,MAAMA,KAAAA,GAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,GAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AACxD,EAAA,IAAIA,KAAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,GAAA;AAE9B,EAAA,MAAM,MAAA,GAAS,UAAU,GAAG,CAAA;AAC5B,EAAA,IAAI,OAAA,GAAmC,MAAA;AAEvC,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAIA,KAAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,GAAA,GAAMA,MAAK,CAAC,CAAA;AAClB,IAAA,IAAI,EAAE,GAAA,IAAO,OAAA,CAAA,IAAY,OAAO,OAAA,CAAQ,GAAG,CAAA,KAAM,QAAA,IAAY,OAAA,CAAQ,GAAG,CAAA,KAAM,IAAA,EAAM;AAClF,MAAA,OAAA,CAAQ,GAAG,IAAI,EAAC;AAAA,IAClB;AACA,IAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,EACvB;AAEA,EAAA,OAAA,CAAQA,KAAAA,CAAKA,KAAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA,GAAI,KAAA;AACjC,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,IAAA,CACd,KACAA,KAAAA,EACY;AACZ,EAAA,MAAM,SAAS,EAAC;AAChB,EAAAA,KAAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;AAAA,IACvB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,IAAA,CACd,KACAA,KAAAA,EACY;AACZ,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,EAAAA,KAAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,IAAA,CAAwC,GAAA,EAAQ,IAAA,GAAO,KAAA,EAAiB;AACtF,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,MAAA,CAAO,KAAK,GAAG,CAAA;AACjC,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,QAAA,GAAW,CAAC,OAAA,EAAkC,MAAA,GAAS,EAAA,KAAa;AACxE,IAAA,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAClC,MAAA,MAAM,UAAU,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AAC9C,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,MAAA,IACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,YACjB,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,KACpB,EAAE,KAAA,YAAiB,IAAA,CAAA,IACnB,EAAE,iBAAiB,MAAA,CAAA,EACnB;AACA,QAAA,QAAA,CAAS,OAAkC,OAAO,CAAA;AAAA,MACpD;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,QAAA,CAAS,GAAG,CAAA;AACZ,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,MAAA,CAA0C,GAAA,EAAQ,IAAA,GAAO,KAAA,EAAkB;AACzF,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,MAAA,CAAO,OAAO,GAAG,CAAA;AACnC,EAAA,MAAM,SAAoB,EAAC;AAC3B,EAAA,MAAM,QAAA,GAAW,CAAC,OAAA,KAA2C;AAC3D,IAAA,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAA,KAAA,KAAS;AACtC,MAAA,IACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,YACjB,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,KACpB,EAAE,KAAA,YAAiB,IAAA,CAAA,IACnB,EAAE,iBAAiB,MAAA,CAAA,EACnB;AACA,QAAA,QAAA,CAAS,KAAgC,CAAA;AAAA,MAC3C,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,MACnB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,QAAA,CAAS,GAAG,CAAA;AACZ,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,OAAA,CACd,KACA,EAAA,EACyB;AACzB,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC9B,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,GAAA,EAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAC/B,IAAA,MAAA,CAAO,MAAM,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;AAAA,EAC1B,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,SAAA,CACd,KACA,EAAA,EACmB;AACnB,EAAA,MAAM,SAA4B,EAAC;AACnC,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC9B,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,EAAA,CAAG,GAAA,CAAI,GAAG,GAAG,GAAG,CAAA;AAAA,EAChC,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,OAAkD,GAAA,EAAgC;AAChG,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC9B,IAAA,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,GAAG,CAAC,CAAC,CAAA,GAAI,GAAA;AAAA,EAC7B,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,QAAA,CACd,QACGC,SAAAA,EACA;AACH,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,EAAAA,SAAAA,CAAS,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAA,UAAA,KAAc;AACvC,IAAA,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AACrC,MAAA,MAAM,QAAA,GAAW,GAAA;AACjB,MAAA,IAAI,EAAE,QAAA,IAAY,MAAA,CAAA,IAAW,MAAA,CAAO,QAAQ,MAAM,MAAA,EAAW;AAC3D,QAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA;AAAA,MACxC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,cAAc,GAAA,EAAuC;AACnE,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA,KAAW,CAAA;AACrC;AAQO,SAAS,OAAA,CAAW,MAAS,IAAA,EAAkB;AACpD,EAAA,IAAI,IAAA,KAAS,MAAM,OAAO,IAAA;AAC1B,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,IAAA,EAAM,OAAO,KAAA;AAC3C,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AAEjE,EAAA,IAAI,IAAA,YAAgB,IAAA,IAAQ,IAAA,YAAgB,IAAA,EAAM;AAChD,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,KAAM,IAAA,CAAK,OAAA,EAAQ;AAAA,EACzC;AAEA,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,MAAA,EAAQ,OAAO,KAAA;AACxC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAC,IAAA,EAAM,KAAA,KAAU,QAAQ,IAAA,EAAM,IAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAAA,EAC/D;AAEA,EAAA,IAAI,KAAA,CAAM,QAAQ,IAAI,CAAA,IAAK,MAAM,OAAA,CAAQ,IAAI,GAAG,OAAO,KAAA;AAEvD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAA+B,CAAA;AACzD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAA+B,CAAA;AAEzD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAE1C,EAAA,OAAO,KAAA,CAAM,MAAM,CAAA,GAAA,KAAO;AACxB,IAAA,MAAM,IAAA,GAAQ,KAAiC,GAAG,CAAA;AAClD,IAAA,MAAM,IAAA,GAAQ,KAAiC,GAAG,CAAA;AAClD,IAAA,OAAO,OAAA,CAAQ,MAAM,IAAI,CAAA;AAAA,EAC3B,CAAC,CAAA;AACH;AASO,SAAS,SAAA,CACd,GAAA,EACA,QAAA,EACA,WAAA,GAAiB,EAAC,EACf;AACH,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC9B,IAAA,QAAA,CAAS,WAAA,EAAa,GAAA,CAAI,GAAG,CAAA,EAAG,GAAG,CAAA;AAAA,EACrC,CAAC,CAAA;AACD,EAAA,OAAO,WAAA;AACT;AAQO,SAAS,MAAA,CACd,KACA,SAAA,EACY;AACZ,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC9B,IAAA,MAAM,QAAA,GAAW,GAAA;AACjB,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,EAAG,GAAG,CAAA,EAAG;AACjC,MAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA;AAAA,IACjC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,MAAA,CACd,KACA,SAAA,EACY;AACZ,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC9B,IAAA,MAAM,QAAA,GAAW,GAAA;AACjB,IAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,EAAG,GAAG,CAAA,EAAG;AAClC,MAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA;AAAA,IACjC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT","file":"chunk-JBLX27WD.mjs","sourcesContent":["/**\n * 对象工具函数\n */\n\n/**\n * 深拷贝对象\n * 支持 Date、Array、RegExp、Map、Set 等特殊类型\n * @param obj - 输入对象\n * @returns 深拷贝后的对象\n */\nexport function deepClone<T>(obj: T): T {\n // 处理 null 和基本类型\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // 处理 Date\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as unknown as T;\n }\n\n // 处理 RegExp\n if (obj instanceof RegExp) {\n return new RegExp(obj.source, obj.flags) as unknown as T;\n }\n\n // 处理 Array\n if (Array.isArray(obj)) {\n return obj.map(item => deepClone(item)) as unknown as T;\n }\n\n // 处理 Map\n if (obj instanceof Map) {\n const clonedMap = new Map();\n obj.forEach((value, key) => {\n clonedMap.set(deepClone(key), deepClone(value));\n });\n return clonedMap as unknown as T;\n }\n\n // 处理 Set\n if (obj instanceof Set) {\n const clonedSet = new Set();\n obj.forEach(value => {\n clonedSet.add(deepClone(value));\n });\n return clonedSet as unknown as T;\n }\n\n // 处理普通对象\n if (typeof obj === 'object') {\n const clonedObj = {} as T;\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clonedObj[key] = deepClone(obj[key]);\n }\n }\n return clonedObj;\n }\n\n return obj;\n}\n\n/**\n * 对象合并\n * @param target - 目标对象\n * @param sources - 源对象数组\n * @returns 合并后的对象\n */\nexport function merge<T extends Record<string, unknown>>(target: T, ...sources: Partial<T>[]): T {\n return Object.assign({}, target, ...sources);\n}\n\n/**\n * 深合并对象\n * @param target - 目标对象\n * @param sources - 源对象数组\n * @returns 深合并后的对象\n */\nexport function deepMerge<T extends Record<string, unknown>>(\n target: T,\n ...sources: Partial<T>[]\n): T {\n if (!sources.length) return target;\n const source = sources.shift();\n\n if (!source) {\n return deepMerge(target, ...sources);\n }\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const sourceValue = source[key];\n const targetValue = target[key];\n\n if (isObject(sourceValue) && isObject(targetValue)) {\n // 递归合并嵌套对象\n target[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n ) as T[Extract<keyof T, string>];\n } else if (sourceValue !== undefined) {\n // 直接赋值(包括 null)\n target[key] = sourceValue as T[Extract<keyof T, string>];\n }\n }\n }\n }\n\n return deepMerge(target, ...sources);\n}\n\n/**\n * 判断是否为普通对象(非 null、非数组、非 Date 等)\n */\nfunction isObject(item: unknown): item is Record<string, unknown> {\n return (\n item !== null &&\n typeof item === 'object' &&\n !Array.isArray(item) &&\n !(item instanceof Date) &&\n !(item instanceof RegExp) &&\n !(item instanceof Map) &&\n !(item instanceof Set)\n );\n}\n\n/**\n * 获取对象嵌套属性值\n * @param obj - 对象\n * @param path - 属性路径,如 'a.b.c' 或 ['a', 'b', 'c']\n * @param defaultValue - 默认值\n * @returns 属性值\n */\nexport function get<T = unknown>(\n obj: Record<string, unknown>,\n path: string | string[],\n defaultValue?: T\n): T | undefined {\n if (!obj || typeof obj !== 'object') {\n return defaultValue;\n }\n\n const keys = Array.isArray(path) ? path : path.split('.');\n if (keys.length === 0) {\n return defaultValue;\n }\n\n let result: unknown = obj;\n\n for (const key of keys) {\n if (result == null || typeof result !== 'object' || Array.isArray(result)) {\n return defaultValue;\n }\n\n // 使用类型断言访问属性\n const record = result as Record<string, unknown>;\n if (!(key in record)) {\n return defaultValue;\n }\n\n result = record[key];\n }\n\n return result !== undefined ? (result as T) : defaultValue;\n}\n\n/**\n * 设置嵌套属性值\n * @param obj - 对象\n * @param path - 属性路径,如 'a.b.c' 或 ['a', 'b', 'c']\n * @param value - 要设置的值\n * @returns 设置后的新对象(不修改原对象)\n */\nexport function set<T extends Record<string, unknown>>(\n obj: T,\n path: string | string[],\n value: unknown\n): T {\n const keys = Array.isArray(path) ? path : path.split('.');\n if (keys.length === 0) return obj;\n\n const result = deepClone(obj);\n let current: Record<string, unknown> = result;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!(key in current) || typeof current[key] !== 'object' || current[key] === null) {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n\n current[keys[keys.length - 1]] = value;\n return result;\n}\n\n/**\n * 选择指定属性\n * @param obj - 对象\n * @param keys - 要选择的属性键数组\n * @returns 包含指定属性的新对象\n */\nexport function pick<T extends Record<string, unknown>, K extends keyof T>(\n obj: T,\n keys: K[]\n): Pick<T, K> {\n const result = {} as Pick<T, K>;\n keys.forEach(key => {\n if (key in obj) {\n result[key] = obj[key];\n }\n });\n return result;\n}\n\n/**\n * 排除指定属性\n * @param obj - 对象\n * @param keys - 要排除的属性键数组\n * @returns 排除指定属性后的新对象\n */\nexport function omit<T extends Record<string, unknown>, K extends keyof T>(\n obj: T,\n keys: K[]\n): Omit<T, K> {\n const result = { ...obj };\n keys.forEach(key => {\n delete result[key];\n });\n return result;\n}\n\n/**\n * 获取所有键(支持深度)\n * @param obj - 对象\n * @param deep - 是否深度获取,默认为 false\n * @returns 键数组\n */\nexport function keys<T extends Record<string, unknown>>(obj: T, deep = false): string[] {\n if (!deep) return Object.keys(obj);\n const result: string[] = [];\n const traverse = (current: Record<string, unknown>, prefix = ''): void => {\n Object.keys(current).forEach(key => {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n result.push(fullKey);\n const value = current[key];\n if (\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n !(value instanceof Date) &&\n !(value instanceof RegExp)\n ) {\n traverse(value as Record<string, unknown>, fullKey);\n }\n });\n };\n traverse(obj);\n return result;\n}\n\n/**\n * 获取所有值(支持深度)\n * @param obj - 对象\n * @param deep - 是否深度获取,默认为 false\n * @returns 值数组\n */\nexport function values<T extends Record<string, unknown>>(obj: T, deep = false): unknown[] {\n if (!deep) return Object.values(obj);\n const result: unknown[] = [];\n const traverse = (current: Record<string, unknown>): void => {\n Object.values(current).forEach(value => {\n if (\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n !(value instanceof Date) &&\n !(value instanceof RegExp)\n ) {\n traverse(value as Record<string, unknown>);\n } else {\n result.push(value);\n }\n });\n };\n traverse(obj);\n return result;\n}\n\n/**\n * 键映射\n * @param obj - 对象\n * @param fn - 键转换函数\n * @returns 键映射后的新对象\n */\nexport function mapKeys<T extends Record<string, unknown>>(\n obj: T,\n fn: (key: string, value: unknown) => string\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n Object.keys(obj).forEach(key => {\n const newKey = fn(key, obj[key]);\n result[newKey] = obj[key];\n });\n return result;\n}\n\n/**\n * 值映射\n * @param obj - 对象\n * @param fn - 值转换函数\n * @returns 值映射后的新对象\n */\nexport function mapValues<T extends Record<string, unknown>, R>(\n obj: T,\n fn: (value: unknown, key: string) => R\n): Record<string, R> {\n const result: Record<string, R> = {};\n Object.keys(obj).forEach(key => {\n result[key] = fn(obj[key], key);\n });\n return result;\n}\n\n/**\n * 键值反转\n * @param obj - 对象\n * @returns 键值反转后的新对象\n */\nexport function invert<T extends Record<string, string | number>>(obj: T): Record<string, string> {\n const result: Record<string, string> = {};\n Object.keys(obj).forEach(key => {\n result[String(obj[key])] = key;\n });\n return result;\n}\n\n/**\n * 设置默认值\n * @param obj - 对象\n * @param defaults - 默认值对象\n * @returns 合并默认值后的新对象\n */\nexport function defaults<T extends Record<string, unknown>>(\n obj: Partial<T>,\n ...defaults: Partial<T>[]\n): T {\n const result = { ...obj } as T;\n defaults.reverse().forEach(defaultObj => {\n Object.keys(defaultObj).forEach(key => {\n const typedKey = key as Extract<keyof T, string>;\n if (!(typedKey in result) || result[typedKey] === undefined) {\n result[typedKey] = defaultObj[typedKey] as T[Extract<keyof T, string>];\n }\n });\n });\n return result;\n}\n\n/**\n * 判断对象是否为空\n * @param obj - 对象\n * @returns 是否为空\n */\nexport function isEmptyObject(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 0;\n}\n\n/**\n * 深度比较两个对象\n * @param obj1 - 第一个对象\n * @param obj2 - 第二个对象\n * @returns 是否相等\n */\nexport function isEqual<T>(obj1: T, obj2: T): boolean {\n if (obj1 === obj2) return true;\n if (obj1 === null || obj2 === null) return false;\n if (typeof obj1 !== 'object' || typeof obj2 !== 'object') return false;\n\n if (obj1 instanceof Date && obj2 instanceof Date) {\n return obj1.getTime() === obj2.getTime();\n }\n\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n if (obj1.length !== obj2.length) return false;\n return obj1.every((item, index) => isEqual(item, obj2[index]));\n }\n\n if (Array.isArray(obj1) || Array.isArray(obj2)) return false;\n\n const keys1 = Object.keys(obj1 as Record<string, unknown>);\n const keys2 = Object.keys(obj2 as Record<string, unknown>);\n\n if (keys1.length !== keys2.length) return false;\n\n return keys1.every(key => {\n const val1 = (obj1 as Record<string, unknown>)[key];\n const val2 = (obj2 as Record<string, unknown>)[key];\n return isEqual(val1, val2);\n });\n}\n\n/**\n * 对象转换\n * @param obj - 对象\n * @param iteratee - 转换函数\n * @param accumulator - 累加器,默认为空对象\n * @returns 转换后的对象\n */\nexport function transform<T extends Record<string, unknown>, R extends Record<string, unknown>>(\n obj: T,\n iteratee: (result: R, value: unknown, key: string) => void,\n accumulator: R = {} as R\n): R {\n Object.keys(obj).forEach(key => {\n iteratee(accumulator, obj[key], key);\n });\n return accumulator;\n}\n\n/**\n * 条件选择属性\n * @param obj - 对象\n * @param predicate - 条件函数\n * @returns 满足条件的属性组成的新对象\n */\nexport function pickBy<T extends Record<string, unknown>>(\n obj: T,\n predicate: (value: unknown, key: string) => boolean\n): Partial<T> {\n const result: Partial<T> = {};\n Object.keys(obj).forEach(key => {\n const typedKey = key as keyof T;\n if (predicate(obj[typedKey], key)) {\n result[typedKey] = obj[typedKey];\n }\n });\n return result;\n}\n\n/**\n * 条件排除属性\n * @param obj - 对象\n * @param predicate - 条件函数\n * @returns 不满足条件的属性组成的新对象\n */\nexport function omitBy<T extends Record<string, unknown>>(\n obj: T,\n predicate: (value: unknown, key: string) => boolean\n): Partial<T> {\n const result: Partial<T> = {};\n Object.keys(obj).forEach(key => {\n const typedKey = key as keyof T;\n if (!predicate(obj[typedKey], key)) {\n result[typedKey] = obj[typedKey];\n }\n });\n return result;\n}\n"]}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// src/data/algorithm.ts
|
|
2
|
+
function binarySearch(array, target, compareFn) {
|
|
3
|
+
let left = 0;
|
|
4
|
+
let right = array.length - 1;
|
|
5
|
+
const compare = compareFn || ((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
6
|
+
while (left <= right) {
|
|
7
|
+
const mid = Math.floor((left + right) / 2);
|
|
8
|
+
const comparison = compare(array[mid], target);
|
|
9
|
+
if (comparison === 0) {
|
|
10
|
+
return mid;
|
|
11
|
+
} else if (comparison < 0) {
|
|
12
|
+
left = mid + 1;
|
|
13
|
+
} else {
|
|
14
|
+
right = mid - 1;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return -1;
|
|
18
|
+
}
|
|
19
|
+
function quickSort(array, compareFn) {
|
|
20
|
+
if (array.length <= 1) {
|
|
21
|
+
return [...array];
|
|
22
|
+
}
|
|
23
|
+
const compare = compareFn || ((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
24
|
+
const pivot = array[Math.floor(array.length / 2)];
|
|
25
|
+
const left = [];
|
|
26
|
+
const right = [];
|
|
27
|
+
const equal = [];
|
|
28
|
+
for (const item of array) {
|
|
29
|
+
const comparison = compare(item, pivot);
|
|
30
|
+
if (comparison < 0) {
|
|
31
|
+
left.push(item);
|
|
32
|
+
} else if (comparison > 0) {
|
|
33
|
+
right.push(item);
|
|
34
|
+
} else {
|
|
35
|
+
equal.push(item);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return [...quickSort(left, compareFn), ...equal, ...quickSort(right, compareFn)];
|
|
39
|
+
}
|
|
40
|
+
function mergeSort(array, compareFn) {
|
|
41
|
+
if (array.length <= 1) {
|
|
42
|
+
return [...array];
|
|
43
|
+
}
|
|
44
|
+
const compare = compareFn || ((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
45
|
+
const mid = Math.floor(array.length / 2);
|
|
46
|
+
const left = mergeSort(array.slice(0, mid), compareFn);
|
|
47
|
+
const right = mergeSort(array.slice(mid), compareFn);
|
|
48
|
+
return merge(left, right, compare);
|
|
49
|
+
}
|
|
50
|
+
function merge(left, right, compareFn) {
|
|
51
|
+
const result = [];
|
|
52
|
+
let i = 0;
|
|
53
|
+
let j = 0;
|
|
54
|
+
while (i < left.length && j < right.length) {
|
|
55
|
+
if (compareFn(left[i], right[j]) <= 0) {
|
|
56
|
+
result.push(left[i]);
|
|
57
|
+
i++;
|
|
58
|
+
} else {
|
|
59
|
+
result.push(right[j]);
|
|
60
|
+
j++;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return result.concat(left.slice(i)).concat(right.slice(j));
|
|
64
|
+
}
|
|
65
|
+
function bubbleSort(array, compareFn) {
|
|
66
|
+
const result = [...array];
|
|
67
|
+
const compare = compareFn || ((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
68
|
+
const n = result.length;
|
|
69
|
+
for (let i = 0; i < n - 1; i++) {
|
|
70
|
+
let swapped = false;
|
|
71
|
+
for (let j = 0; j < n - i - 1; j++) {
|
|
72
|
+
if (compare(result[j], result[j + 1]) > 0) {
|
|
73
|
+
[result[j], result[j + 1]] = [result[j + 1], result[j]];
|
|
74
|
+
swapped = true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (!swapped) {
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
function fibonacci(n) {
|
|
84
|
+
if (n < 0) {
|
|
85
|
+
throw new Error("n must be non-negative");
|
|
86
|
+
}
|
|
87
|
+
if (n === 0) return 0;
|
|
88
|
+
if (n === 1) return 1;
|
|
89
|
+
let a = 0;
|
|
90
|
+
let b = 1;
|
|
91
|
+
for (let i = 2; i <= n; i++) {
|
|
92
|
+
[a, b] = [b, a + b];
|
|
93
|
+
}
|
|
94
|
+
return b;
|
|
95
|
+
}
|
|
96
|
+
function fibonacciSequence(n) {
|
|
97
|
+
if (n <= 0) return [];
|
|
98
|
+
if (n === 1) return [0];
|
|
99
|
+
if (n === 2) return [0, 1];
|
|
100
|
+
const sequence = [0, 1];
|
|
101
|
+
for (let i = 2; i < n; i++) {
|
|
102
|
+
sequence.push(sequence[i - 1] + sequence[i - 2]);
|
|
103
|
+
}
|
|
104
|
+
return sequence;
|
|
105
|
+
}
|
|
106
|
+
function factorial(n) {
|
|
107
|
+
if (n < 0) {
|
|
108
|
+
throw new Error("n must be non-negative");
|
|
109
|
+
}
|
|
110
|
+
if (n === 0 || n === 1) {
|
|
111
|
+
return 1;
|
|
112
|
+
}
|
|
113
|
+
let result = 1;
|
|
114
|
+
for (let i = 2; i <= n; i++) {
|
|
115
|
+
result *= i;
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
function gcd(a, b) {
|
|
120
|
+
a = Math.abs(a);
|
|
121
|
+
b = Math.abs(b);
|
|
122
|
+
while (b !== 0) {
|
|
123
|
+
[a, b] = [b, a % b];
|
|
124
|
+
}
|
|
125
|
+
return a;
|
|
126
|
+
}
|
|
127
|
+
function lcm(a, b) {
|
|
128
|
+
return Math.abs(a * b) / gcd(a, b);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export { binarySearch, bubbleSort, factorial, fibonacci, fibonacciSequence, gcd, lcm, mergeSort, quickSort };
|
|
132
|
+
//# sourceMappingURL=chunk-JHZ7M2MR.mjs.map
|
|
133
|
+
//# sourceMappingURL=chunk-JHZ7M2MR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/algorithm.ts"],"names":[],"mappings":"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","file":"chunk-JHZ7M2MR.mjs","sourcesContent":["/**\n * 算法工具函数\n */\n\n/**\n * 二分查找\n * @param array - 已排序的数组\n * @param target - 目标值\n * @param compareFn - 比较函数(可选)\n * @returns 目标值的索引,如果未找到返回 -1\n */\nexport function binarySearch<T>(array: T[], target: T, compareFn?: (a: T, b: T) => number): number {\n let left = 0;\n let right = array.length - 1;\n\n const compare = compareFn || ((a: T, b: T) => (a < b ? -1 : a > b ? 1 : 0));\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const comparison = compare(array[mid], target);\n\n if (comparison === 0) {\n return mid;\n } else if (comparison < 0) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n\n return -1;\n}\n\n/**\n * 快速排序\n * @param array - 要排序的数组\n * @param compareFn - 比较函数(可选)\n * @returns 排序后的新数组\n */\nexport function quickSort<T>(array: T[], compareFn?: (a: T, b: T) => number): T[] {\n if (array.length <= 1) {\n return [...array];\n }\n\n const compare = compareFn || ((a: T, b: T) => (a < b ? -1 : a > b ? 1 : 0));\n const pivot = array[Math.floor(array.length / 2)];\n const left: T[] = [];\n const right: T[] = [];\n const equal: T[] = [];\n\n for (const item of array) {\n const comparison = compare(item, pivot);\n if (comparison < 0) {\n left.push(item);\n } else if (comparison > 0) {\n right.push(item);\n } else {\n equal.push(item);\n }\n }\n\n return [...quickSort(left, compareFn), ...equal, ...quickSort(right, compareFn)];\n}\n\n/**\n * 归并排序\n * @param array - 要排序的数组\n * @param compareFn - 比较函数(可选)\n * @returns 排序后的新数组\n */\nexport function mergeSort<T>(array: T[], compareFn?: (a: T, b: T) => number): T[] {\n if (array.length <= 1) {\n return [...array];\n }\n\n const compare = compareFn || ((a: T, b: T) => (a < b ? -1 : a > b ? 1 : 0));\n const mid = Math.floor(array.length / 2);\n const left = mergeSort(array.slice(0, mid), compareFn);\n const right = mergeSort(array.slice(mid), compareFn);\n\n return merge(left, right, compare);\n}\n\n/**\n * 合并两个已排序的数组\n */\nfunction merge<T>(left: T[], right: T[], compareFn: (a: T, b: T) => number): T[] {\n const result: T[] = [];\n let i = 0;\n let j = 0;\n\n while (i < left.length && j < right.length) {\n if (compareFn(left[i], right[j]) <= 0) {\n result.push(left[i]);\n i++;\n } else {\n result.push(right[j]);\n j++;\n }\n }\n\n return result.concat(left.slice(i)).concat(right.slice(j));\n}\n\n/**\n * 冒泡排序\n * @param array - 要排序的数组\n * @param compareFn - 比较函数(可选)\n * @returns 排序后的新数组\n */\nexport function bubbleSort<T>(array: T[], compareFn?: (a: T, b: T) => number): T[] {\n const result = [...array];\n const compare = compareFn || ((a: T, b: T) => (a < b ? -1 : a > b ? 1 : 0));\n const n = result.length;\n\n for (let i = 0; i < n - 1; i++) {\n let swapped = false;\n\n for (let j = 0; j < n - i - 1; j++) {\n if (compare(result[j], result[j + 1]) > 0) {\n [result[j], result[j + 1]] = [result[j + 1], result[j]];\n swapped = true;\n }\n }\n\n // 如果没有交换,说明已经排序完成\n if (!swapped) {\n break;\n }\n }\n\n return result;\n}\n\n/**\n * 计算斐波那契数列的第n项\n * @param n - 位置(从0开始)\n * @returns 斐波那契数\n */\nexport function fibonacci(n: number): number {\n if (n < 0) {\n throw new Error('n must be non-negative');\n }\n\n if (n === 0) return 0;\n if (n === 1) return 1;\n\n // 使用动态规划优化\n let a = 0;\n let b = 1;\n\n for (let i = 2; i <= n; i++) {\n [a, b] = [b, a + b];\n }\n\n return b;\n}\n\n/**\n * 计算斐波那契数列(返回前n项)\n * @param n - 项数\n * @returns 斐波那契数列数组\n */\nexport function fibonacciSequence(n: number): number[] {\n if (n <= 0) return [];\n if (n === 1) return [0];\n if (n === 2) return [0, 1];\n\n const sequence = [0, 1];\n for (let i = 2; i < n; i++) {\n sequence.push(sequence[i - 1] + sequence[i - 2]);\n }\n\n return sequence;\n}\n\n/**\n * 计算阶乘\n * @param n - 非负整数\n * @returns 阶乘结果\n */\nexport function factorial(n: number): number {\n if (n < 0) {\n throw new Error('n must be non-negative');\n }\n\n if (n === 0 || n === 1) {\n return 1;\n }\n\n let result = 1;\n for (let i = 2; i <= n; i++) {\n result *= i;\n }\n\n return result;\n}\n\n/**\n * 计算最大公约数(GCD)\n * @param a - 第一个数\n * @param b - 第二个数\n * @returns 最大公约数\n */\nexport function gcd(a: number, b: number): number {\n a = Math.abs(a);\n b = Math.abs(b);\n\n while (b !== 0) {\n [a, b] = [b, a % b];\n }\n\n return a;\n}\n\n/**\n * 计算最小公倍数(LCM)\n * @param a - 第一个数\n * @param b - 第二个数\n * @returns 最小公倍数\n */\nexport function lcm(a: number, b: number): number {\n return Math.abs(a * b) / gcd(a, b);\n}\n"]}
|