@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.
Files changed (210) hide show
  1. package/README.md +338 -0
  2. package/dist/algorithm.d.mts +66 -0
  3. package/dist/algorithm.d.ts +66 -0
  4. package/dist/algorithm.js +44 -0
  5. package/dist/algorithm.js.map +1 -0
  6. package/dist/algorithm.mjs +3 -0
  7. package/dist/algorithm.mjs.map +1 -0
  8. package/dist/array.d.mts +139 -0
  9. package/dist/array.d.ts +139 -0
  10. package/dist/array.js +84 -0
  11. package/dist/array.js.map +1 -0
  12. package/dist/array.mjs +3 -0
  13. package/dist/array.mjs.map +1 -0
  14. package/dist/chunk-27UDDVLZ.js +259 -0
  15. package/dist/chunk-27UDDVLZ.js.map +1 -0
  16. package/dist/chunk-2FFSQ573.mjs +138 -0
  17. package/dist/chunk-2FFSQ573.mjs.map +1 -0
  18. package/dist/chunk-4RGXV4SJ.js +106 -0
  19. package/dist/chunk-4RGXV4SJ.js.map +1 -0
  20. package/dist/chunk-56W6YECK.js +374 -0
  21. package/dist/chunk-56W6YECK.js.map +1 -0
  22. package/dist/chunk-5BGSUGTI.mjs +128 -0
  23. package/dist/chunk-5BGSUGTI.mjs.map +1 -0
  24. package/dist/chunk-7E6GELHJ.mjs +302 -0
  25. package/dist/chunk-7E6GELHJ.mjs.map +1 -0
  26. package/dist/chunk-7V5UQXIO.js +89 -0
  27. package/dist/chunk-7V5UQXIO.js.map +1 -0
  28. package/dist/chunk-A4SWQXX7.mjs +484 -0
  29. package/dist/chunk-A4SWQXX7.mjs.map +1 -0
  30. package/dist/chunk-ALDC6LRJ.mjs +85 -0
  31. package/dist/chunk-ALDC6LRJ.mjs.map +1 -0
  32. package/dist/chunk-BHCRFURU.js +491 -0
  33. package/dist/chunk-BHCRFURU.js.map +1 -0
  34. package/dist/chunk-D7CS5EKF.js +110 -0
  35. package/dist/chunk-D7CS5EKF.js.map +1 -0
  36. package/dist/chunk-DYBSRI7V.js +189 -0
  37. package/dist/chunk-DYBSRI7V.js.map +1 -0
  38. package/dist/chunk-F3LAGHPG.js +332 -0
  39. package/dist/chunk-F3LAGHPG.js.map +1 -0
  40. package/dist/chunk-HLDFI7R2.mjs +175 -0
  41. package/dist/chunk-HLDFI7R2.mjs.map +1 -0
  42. package/dist/chunk-HME2N3VY.mjs +354 -0
  43. package/dist/chunk-HME2N3VY.mjs.map +1 -0
  44. package/dist/chunk-I3L42475.js +145 -0
  45. package/dist/chunk-I3L42475.js.map +1 -0
  46. package/dist/chunk-JBLX27WD.mjs +240 -0
  47. package/dist/chunk-JBLX27WD.mjs.map +1 -0
  48. package/dist/chunk-JHZ7M2MR.mjs +133 -0
  49. package/dist/chunk-JHZ7M2MR.mjs.map +1 -0
  50. package/dist/chunk-JK2SE3I2.js +100 -0
  51. package/dist/chunk-JK2SE3I2.js.map +1 -0
  52. package/dist/chunk-JQZBPAPO.js +157 -0
  53. package/dist/chunk-JQZBPAPO.js.map +1 -0
  54. package/dist/chunk-JXYGC2C5.mjs +100 -0
  55. package/dist/chunk-JXYGC2C5.mjs.map +1 -0
  56. package/dist/chunk-KGFTD255.js +104 -0
  57. package/dist/chunk-KGFTD255.js.map +1 -0
  58. package/dist/chunk-LBHBNPNJ.mjs +148 -0
  59. package/dist/chunk-LBHBNPNJ.mjs.map +1 -0
  60. package/dist/chunk-LCXGZISK.js +158 -0
  61. package/dist/chunk-LCXGZISK.js.map +1 -0
  62. package/dist/chunk-LF4CILQS.mjs +87 -0
  63. package/dist/chunk-LF4CILQS.mjs.map +1 -0
  64. package/dist/chunk-MMR6XQNX.js +98 -0
  65. package/dist/chunk-MMR6XQNX.js.map +1 -0
  66. package/dist/chunk-NSSDYX2U.mjs +80 -0
  67. package/dist/chunk-NSSDYX2U.mjs.map +1 -0
  68. package/dist/chunk-O3O67R4I.js +143 -0
  69. package/dist/chunk-O3O67R4I.js.map +1 -0
  70. package/dist/chunk-OX5PLOWB.js +90 -0
  71. package/dist/chunk-OX5PLOWB.js.map +1 -0
  72. package/dist/chunk-PJ7UCTX4.mjs +362 -0
  73. package/dist/chunk-PJ7UCTX4.mjs.map +1 -0
  74. package/dist/chunk-QIBE7GVN.mjs +81 -0
  75. package/dist/chunk-QIBE7GVN.mjs.map +1 -0
  76. package/dist/chunk-QIOC54LQ.mjs +130 -0
  77. package/dist/chunk-QIOC54LQ.mjs.map +1 -0
  78. package/dist/chunk-QV6MIQ7H.mjs +328 -0
  79. package/dist/chunk-QV6MIQ7H.mjs.map +1 -0
  80. package/dist/chunk-TQN37HIN.js +94 -0
  81. package/dist/chunk-TQN37HIN.js.map +1 -0
  82. package/dist/chunk-XJTZDXSR.mjs +94 -0
  83. package/dist/chunk-XJTZDXSR.mjs.map +1 -0
  84. package/dist/chunk-XVUE53T3.js +361 -0
  85. package/dist/chunk-XVUE53T3.js.map +1 -0
  86. package/dist/chunk-Y364QIQH.js +139 -0
  87. package/dist/chunk-Y364QIQH.js.map +1 -0
  88. package/dist/chunk-YXM6Q4JS.mjs +94 -0
  89. package/dist/chunk-YXM6Q4JS.mjs.map +1 -0
  90. package/dist/chunk-ZDMFMUDR.js +309 -0
  91. package/dist/chunk-ZDMFMUDR.js.map +1 -0
  92. package/dist/chunk-ZVJ6NQUM.mjs +82 -0
  93. package/dist/chunk-ZVJ6NQUM.mjs.map +1 -0
  94. package/dist/color.d.mts +74 -0
  95. package/dist/color.d.ts +74 -0
  96. package/dist/color.js +40 -0
  97. package/dist/color.js.map +1 -0
  98. package/dist/color.mjs +3 -0
  99. package/dist/color.mjs.map +1 -0
  100. package/dist/crypto.d.mts +92 -0
  101. package/dist/crypto.d.ts +92 -0
  102. package/dist/crypto.js +60 -0
  103. package/dist/crypto.js.map +1 -0
  104. package/dist/crypto.mjs +3 -0
  105. package/dist/crypto.mjs.map +1 -0
  106. package/dist/data-structure.d.mts +213 -0
  107. package/dist/data-structure.d.ts +213 -0
  108. package/dist/data-structure.js +32 -0
  109. package/dist/data-structure.js.map +1 -0
  110. package/dist/data-structure.mjs +3 -0
  111. package/dist/data-structure.mjs.map +1 -0
  112. package/dist/date.d.mts +108 -0
  113. package/dist/date.d.ts +108 -0
  114. package/dist/date.js +72 -0
  115. package/dist/date.js.map +1 -0
  116. package/dist/date.mjs +3 -0
  117. package/dist/date.mjs.map +1 -0
  118. package/dist/dom.d.mts +92 -0
  119. package/dist/dom.d.ts +92 -0
  120. package/dist/dom.js +56 -0
  121. package/dist/dom.js.map +1 -0
  122. package/dist/dom.mjs +3 -0
  123. package/dist/dom.mjs.map +1 -0
  124. package/dist/file.d.mts +44 -0
  125. package/dist/file.d.ts +44 -0
  126. package/dist/file.js +32 -0
  127. package/dist/file.js.map +1 -0
  128. package/dist/file.mjs +3 -0
  129. package/dist/file.mjs.map +1 -0
  130. package/dist/i18n.d.mts +77 -0
  131. package/dist/i18n.d.ts +77 -0
  132. package/dist/i18n.js +40 -0
  133. package/dist/i18n.js.map +1 -0
  134. package/dist/i18n.mjs +3 -0
  135. package/dist/i18n.mjs.map +1 -0
  136. package/dist/index.d.mts +155 -0
  137. package/dist/index.d.ts +155 -0
  138. package/dist/index.js +839 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/index.mjs +22 -0
  141. package/dist/index.mjs.map +1 -0
  142. package/dist/network.d.mts +47 -0
  143. package/dist/network.d.ts +47 -0
  144. package/dist/network.js +28 -0
  145. package/dist/network.js.map +1 -0
  146. package/dist/network.mjs +3 -0
  147. package/dist/network.mjs.map +1 -0
  148. package/dist/number.d.mts +100 -0
  149. package/dist/number.d.ts +100 -0
  150. package/dist/number.js +56 -0
  151. package/dist/number.js.map +1 -0
  152. package/dist/number.mjs +3 -0
  153. package/dist/number.mjs.map +1 -0
  154. package/dist/object.d.mts +132 -0
  155. package/dist/object.d.ts +132 -0
  156. package/dist/object.js +80 -0
  157. package/dist/object.js.map +1 -0
  158. package/dist/object.mjs +3 -0
  159. package/dist/object.mjs.map +1 -0
  160. package/dist/performance.d.mts +85 -0
  161. package/dist/performance.d.ts +85 -0
  162. package/dist/performance.js +40 -0
  163. package/dist/performance.js.map +1 -0
  164. package/dist/performance.mjs +3 -0
  165. package/dist/performance.mjs.map +1 -0
  166. package/dist/storage.d.mts +176 -0
  167. package/dist/storage.d.ts +176 -0
  168. package/dist/storage.js +33 -0
  169. package/dist/storage.js.map +1 -0
  170. package/dist/storage.mjs +4 -0
  171. package/dist/storage.mjs.map +1 -0
  172. package/dist/string.d.mts +105 -0
  173. package/dist/string.d.ts +105 -0
  174. package/dist/string.js +68 -0
  175. package/dist/string.js.map +1 -0
  176. package/dist/string.mjs +3 -0
  177. package/dist/string.mjs.map +1 -0
  178. package/dist/tracking.d.mts +182 -0
  179. package/dist/tracking.d.ts +182 -0
  180. package/dist/tracking.js +52 -0
  181. package/dist/tracking.js.map +1 -0
  182. package/dist/tracking.mjs +3 -0
  183. package/dist/tracking.mjs.map +1 -0
  184. package/dist/transform.d.mts +53 -0
  185. package/dist/transform.d.ts +53 -0
  186. package/dist/transform.js +32 -0
  187. package/dist/transform.js.map +1 -0
  188. package/dist/transform.mjs +3 -0
  189. package/dist/transform.mjs.map +1 -0
  190. package/dist/upload-DzlQtUBc.d.mts +202 -0
  191. package/dist/upload-DzlQtUBc.d.ts +202 -0
  192. package/dist/upload.d.mts +1 -0
  193. package/dist/upload.d.ts +1 -0
  194. package/dist/upload.js +17 -0
  195. package/dist/upload.js.map +1 -0
  196. package/dist/upload.mjs +4 -0
  197. package/dist/upload.mjs.map +1 -0
  198. package/dist/url.d.mts +82 -0
  199. package/dist/url.d.ts +82 -0
  200. package/dist/url.js +44 -0
  201. package/dist/url.js.map +1 -0
  202. package/dist/url.mjs +3 -0
  203. package/dist/url.mjs.map +1 -0
  204. package/dist/validation.d.mts +83 -0
  205. package/dist/validation.d.ts +83 -0
  206. package/dist/validation.js +60 -0
  207. package/dist/validation.js.map +1 -0
  208. package/dist/validation.mjs +3 -0
  209. package/dist/validation.mjs.map +1 -0
  210. package/package.json +170 -0
@@ -0,0 +1,491 @@
1
+ 'use strict';
2
+
3
+ // src/data/data-structure.ts
4
+ var Stack = class {
5
+ constructor() {
6
+ this.items = [];
7
+ }
8
+ /**
9
+ * 入栈
10
+ */
11
+ push(item) {
12
+ this.items.push(item);
13
+ }
14
+ /**
15
+ * 出栈
16
+ */
17
+ pop() {
18
+ return this.items.pop();
19
+ }
20
+ /**
21
+ * 查看栈顶元素
22
+ */
23
+ peek() {
24
+ return this.items[this.items.length - 1];
25
+ }
26
+ /**
27
+ * 判断栈是否为空
28
+ */
29
+ isEmpty() {
30
+ return this.items.length === 0;
31
+ }
32
+ /**
33
+ * 获取栈的大小
34
+ */
35
+ size() {
36
+ return this.items.length;
37
+ }
38
+ /**
39
+ * 清空栈
40
+ */
41
+ clear() {
42
+ this.items = [];
43
+ }
44
+ /**
45
+ * 转换为数组
46
+ */
47
+ toArray() {
48
+ return [...this.items];
49
+ }
50
+ };
51
+ var DataQueue = class {
52
+ constructor() {
53
+ this.items = [];
54
+ }
55
+ /**
56
+ * 入队
57
+ */
58
+ enqueue(item) {
59
+ this.items.push(item);
60
+ }
61
+ /**
62
+ * 出队
63
+ */
64
+ dequeue() {
65
+ return this.items.shift();
66
+ }
67
+ /**
68
+ * 查看队首元素
69
+ */
70
+ front() {
71
+ return this.items[0];
72
+ }
73
+ /**
74
+ * 判断队列是否为空
75
+ */
76
+ isEmpty() {
77
+ return this.items.length === 0;
78
+ }
79
+ /**
80
+ * 获取队列的大小
81
+ */
82
+ size() {
83
+ return this.items.length;
84
+ }
85
+ /**
86
+ * 清空队列
87
+ */
88
+ clear() {
89
+ this.items = [];
90
+ }
91
+ /**
92
+ * 转换为数组
93
+ */
94
+ toArray() {
95
+ return [...this.items];
96
+ }
97
+ };
98
+ var ListNode = class {
99
+ constructor(value) {
100
+ this.next = null;
101
+ this.value = value;
102
+ }
103
+ };
104
+ var LinkedList = class {
105
+ constructor() {
106
+ this.head = null;
107
+ this.length = 0;
108
+ }
109
+ /**
110
+ * 在链表末尾添加元素
111
+ */
112
+ append(value) {
113
+ const newNode = new ListNode(value);
114
+ if (!this.head) {
115
+ this.head = newNode;
116
+ } else {
117
+ let current = this.head;
118
+ while (current.next) {
119
+ current = current.next;
120
+ }
121
+ current.next = newNode;
122
+ }
123
+ this.length++;
124
+ }
125
+ /**
126
+ * 在指定位置插入元素
127
+ */
128
+ insert(index, value) {
129
+ if (index < 0 || index > this.length) {
130
+ return false;
131
+ }
132
+ const newNode = new ListNode(value);
133
+ if (index === 0) {
134
+ newNode.next = this.head;
135
+ this.head = newNode;
136
+ } else {
137
+ let current = this.head;
138
+ for (let i = 0; i < index - 1; i++) {
139
+ current = current.next;
140
+ }
141
+ newNode.next = current.next;
142
+ current.next = newNode;
143
+ }
144
+ this.length++;
145
+ return true;
146
+ }
147
+ /**
148
+ * 删除指定位置的元素
149
+ */
150
+ removeAt(index) {
151
+ if (index < 0 || index >= this.length || !this.head) {
152
+ return null;
153
+ }
154
+ let current = this.head;
155
+ if (index === 0) {
156
+ this.head = current.next;
157
+ this.length--;
158
+ return current.value;
159
+ }
160
+ for (let i = 0; i < index - 1; i++) {
161
+ current = current.next;
162
+ }
163
+ const removed = current.next;
164
+ current.next = removed.next;
165
+ this.length--;
166
+ return removed.value;
167
+ }
168
+ /**
169
+ * 查找元素索引
170
+ */
171
+ indexOf(value) {
172
+ let current = this.head;
173
+ let index = 0;
174
+ while (current) {
175
+ if (current.value === value) {
176
+ return index;
177
+ }
178
+ current = current.next;
179
+ index++;
180
+ }
181
+ return -1;
182
+ }
183
+ /**
184
+ * 获取指定位置的元素
185
+ */
186
+ get(index) {
187
+ if (index < 0 || index >= this.length || !this.head) {
188
+ return null;
189
+ }
190
+ let current = this.head;
191
+ for (let i = 0; i < index; i++) {
192
+ current = current.next;
193
+ }
194
+ return current.value;
195
+ }
196
+ /**
197
+ * 判断链表是否为空
198
+ */
199
+ isEmpty() {
200
+ return this.length === 0;
201
+ }
202
+ /**
203
+ * 获取链表长度
204
+ */
205
+ size() {
206
+ return this.length;
207
+ }
208
+ /**
209
+ * 转换为数组
210
+ */
211
+ toArray() {
212
+ const result = [];
213
+ let current = this.head;
214
+ while (current) {
215
+ result.push(current.value);
216
+ current = current.next;
217
+ }
218
+ return result;
219
+ }
220
+ };
221
+ var TreeNode = class {
222
+ constructor(value) {
223
+ this.left = null;
224
+ this.right = null;
225
+ this.value = value;
226
+ }
227
+ };
228
+ var BinaryTree = class {
229
+ constructor() {
230
+ this.root = null;
231
+ }
232
+ /**
233
+ * 插入节点
234
+ */
235
+ insert(value) {
236
+ const newNode = new TreeNode(value);
237
+ if (!this.root) {
238
+ this.root = newNode;
239
+ return;
240
+ }
241
+ this.insertNode(this.root, newNode);
242
+ }
243
+ insertNode(node, newNode) {
244
+ if (newNode.value <= node.value) {
245
+ if (!node.left) {
246
+ node.left = newNode;
247
+ } else {
248
+ this.insertNode(node.left, newNode);
249
+ }
250
+ } else {
251
+ if (!node.right) {
252
+ node.right = newNode;
253
+ } else {
254
+ this.insertNode(node.right, newNode);
255
+ }
256
+ }
257
+ }
258
+ /**
259
+ * 查找节点
260
+ */
261
+ search(value) {
262
+ return this.searchNode(this.root, value);
263
+ }
264
+ searchNode(node, value) {
265
+ if (!node) {
266
+ return false;
267
+ }
268
+ if (value === node.value) {
269
+ return true;
270
+ }
271
+ if (value < node.value) {
272
+ return this.searchNode(node.left, value);
273
+ }
274
+ return this.searchNode(node.right, value);
275
+ }
276
+ /**
277
+ * 中序遍历
278
+ */
279
+ inOrder() {
280
+ const result = [];
281
+ this.inOrderTraverse(this.root, result);
282
+ return result;
283
+ }
284
+ inOrderTraverse(node, result) {
285
+ if (node) {
286
+ this.inOrderTraverse(node.left, result);
287
+ result.push(node.value);
288
+ this.inOrderTraverse(node.right, result);
289
+ }
290
+ }
291
+ /**
292
+ * 前序遍历
293
+ */
294
+ preOrder() {
295
+ const result = [];
296
+ this.preOrderTraverse(this.root, result);
297
+ return result;
298
+ }
299
+ preOrderTraverse(node, result) {
300
+ if (node) {
301
+ result.push(node.value);
302
+ this.preOrderTraverse(node.left, result);
303
+ this.preOrderTraverse(node.right, result);
304
+ }
305
+ }
306
+ /**
307
+ * 后序遍历
308
+ */
309
+ postOrder() {
310
+ const result = [];
311
+ this.postOrderTraverse(this.root, result);
312
+ return result;
313
+ }
314
+ postOrderTraverse(node, result) {
315
+ if (node) {
316
+ this.postOrderTraverse(node.left, result);
317
+ this.postOrderTraverse(node.right, result);
318
+ result.push(node.value);
319
+ }
320
+ }
321
+ };
322
+ var Graph = class {
323
+ constructor() {
324
+ this.vertices = /* @__PURE__ */ new Map();
325
+ }
326
+ /**
327
+ * 添加顶点
328
+ */
329
+ addVertex(vertex) {
330
+ if (!this.vertices.has(vertex)) {
331
+ this.vertices.set(vertex, []);
332
+ }
333
+ }
334
+ /**
335
+ * 添加边(无向图)
336
+ */
337
+ addEdge(vertex1, vertex2) {
338
+ if (!this.vertices.has(vertex1)) {
339
+ this.addVertex(vertex1);
340
+ }
341
+ if (!this.vertices.has(vertex2)) {
342
+ this.addVertex(vertex2);
343
+ }
344
+ const neighbors1 = this.vertices.get(vertex1);
345
+ const neighbors2 = this.vertices.get(vertex2);
346
+ if (!neighbors1.includes(vertex2)) {
347
+ neighbors1.push(vertex2);
348
+ }
349
+ if (!neighbors2.includes(vertex1)) {
350
+ neighbors2.push(vertex1);
351
+ }
352
+ }
353
+ /**
354
+ * 获取顶点的邻居
355
+ */
356
+ getNeighbors(vertex) {
357
+ return this.vertices.get(vertex) || [];
358
+ }
359
+ /**
360
+ * 深度优先搜索
361
+ */
362
+ dfs(start, callback) {
363
+ const visited = /* @__PURE__ */ new Set();
364
+ const result = [];
365
+ const dfsVisit = (vertex) => {
366
+ visited.add(vertex);
367
+ result.push(vertex);
368
+ if (callback) {
369
+ callback(vertex);
370
+ }
371
+ const neighbors = this.getNeighbors(vertex);
372
+ for (const neighbor of neighbors) {
373
+ if (!visited.has(neighbor)) {
374
+ dfsVisit(neighbor);
375
+ }
376
+ }
377
+ };
378
+ dfsVisit(start);
379
+ return result;
380
+ }
381
+ /**
382
+ * 广度优先搜索
383
+ */
384
+ bfs(start, callback) {
385
+ const visited = /* @__PURE__ */ new Set();
386
+ const queue = [start];
387
+ const result = [];
388
+ visited.add(start);
389
+ while (queue.length > 0) {
390
+ const vertex = queue.shift();
391
+ result.push(vertex);
392
+ if (callback) {
393
+ callback(vertex);
394
+ }
395
+ const neighbors = this.getNeighbors(vertex);
396
+ for (const neighbor of neighbors) {
397
+ if (!visited.has(neighbor)) {
398
+ visited.add(neighbor);
399
+ queue.push(neighbor);
400
+ }
401
+ }
402
+ }
403
+ return result;
404
+ }
405
+ /**
406
+ * 获取所有顶点
407
+ */
408
+ getVertices() {
409
+ return Array.from(this.vertices.keys());
410
+ }
411
+ };
412
+ var LRUCache = class {
413
+ constructor(capacity) {
414
+ if (capacity <= 0) {
415
+ throw new Error("Capacity must be greater than 0");
416
+ }
417
+ this.capacity = capacity;
418
+ this.cache = /* @__PURE__ */ new Map();
419
+ }
420
+ /**
421
+ * 获取值
422
+ */
423
+ get(key) {
424
+ if (!this.cache.has(key)) {
425
+ return void 0;
426
+ }
427
+ const value = this.cache.get(key);
428
+ this.cache.delete(key);
429
+ this.cache.set(key, value);
430
+ return value;
431
+ }
432
+ /**
433
+ * 设置值
434
+ */
435
+ set(key, value) {
436
+ if (this.cache.has(key)) {
437
+ this.cache.delete(key);
438
+ } else if (this.cache.size >= this.capacity) {
439
+ const firstKey = this.cache.keys().next().value;
440
+ if (firstKey !== void 0) {
441
+ this.cache.delete(firstKey);
442
+ }
443
+ }
444
+ this.cache.set(key, value);
445
+ }
446
+ /**
447
+ * 删除键
448
+ */
449
+ delete(key) {
450
+ return this.cache.delete(key);
451
+ }
452
+ /**
453
+ * 清空缓存
454
+ */
455
+ clear() {
456
+ this.cache.clear();
457
+ }
458
+ /**
459
+ * 判断是否包含键
460
+ */
461
+ has(key) {
462
+ return this.cache.has(key);
463
+ }
464
+ /**
465
+ * 获取缓存大小
466
+ */
467
+ size() {
468
+ return this.cache.size;
469
+ }
470
+ /**
471
+ * 获取所有键
472
+ */
473
+ keys() {
474
+ return Array.from(this.cache.keys()).filter((key) => key !== void 0);
475
+ }
476
+ /**
477
+ * 获取所有值
478
+ */
479
+ values() {
480
+ return Array.from(this.cache.values());
481
+ }
482
+ };
483
+
484
+ exports.BinaryTree = BinaryTree;
485
+ exports.DataQueue = DataQueue;
486
+ exports.Graph = Graph;
487
+ exports.LRUCache = LRUCache;
488
+ exports.LinkedList = LinkedList;
489
+ exports.Stack = Stack;
490
+ //# sourceMappingURL=chunk-BHCRFURU.js.map
491
+ //# sourceMappingURL=chunk-BHCRFURU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/data-structure.ts"],"names":[],"mappings":"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","file":"chunk-BHCRFURU.js","sourcesContent":["/**\n * 数据结构工具\n */\n\n/**\n * 栈实现\n */\nexport class Stack<T> {\n private items: T[] = [];\n\n /**\n * 入栈\n */\n push(item: T): void {\n this.items.push(item);\n }\n\n /**\n * 出栈\n */\n pop(): T | undefined {\n return this.items.pop();\n }\n\n /**\n * 查看栈顶元素\n */\n peek(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n /**\n * 判断栈是否为空\n */\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n /**\n * 获取栈的大小\n */\n size(): number {\n return this.items.length;\n }\n\n /**\n * 清空栈\n */\n clear(): void {\n this.items = [];\n }\n\n /**\n * 转换为数组\n */\n toArray(): T[] {\n return [...this.items];\n }\n}\n\n/**\n * 队列实现(数据结构版本,与performance.Queue区分)\n */\nexport class DataQueue<T> {\n private items: T[] = [];\n\n /**\n * 入队\n */\n enqueue(item: T): void {\n this.items.push(item);\n }\n\n /**\n * 出队\n */\n dequeue(): T | undefined {\n return this.items.shift();\n }\n\n /**\n * 查看队首元素\n */\n front(): T | undefined {\n return this.items[0];\n }\n\n /**\n * 判断队列是否为空\n */\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n /**\n * 获取队列的大小\n */\n size(): number {\n return this.items.length;\n }\n\n /**\n * 清空队列\n */\n clear(): void {\n this.items = [];\n }\n\n /**\n * 转换为数组\n */\n toArray(): T[] {\n return [...this.items];\n }\n}\n\n/**\n * 链表节点\n */\nclass ListNode<T> {\n value: T;\n next: ListNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\n/**\n * 链表实现\n */\nexport class LinkedList<T> {\n private head: ListNode<T> | null = null;\n private length = 0;\n\n /**\n * 在链表末尾添加元素\n */\n append(value: T): void {\n const newNode = new ListNode(value);\n\n if (!this.head) {\n this.head = newNode;\n } else {\n let current = this.head;\n while (current.next) {\n current = current.next;\n }\n current.next = newNode;\n }\n\n this.length++;\n }\n\n /**\n * 在指定位置插入元素\n */\n insert(index: number, value: T): boolean {\n if (index < 0 || index > this.length) {\n return false;\n }\n\n const newNode = new ListNode(value);\n\n if (index === 0) {\n newNode.next = this.head;\n this.head = newNode;\n } else {\n let current = this.head;\n for (let i = 0; i < index - 1; i++) {\n current = current!.next;\n }\n newNode.next = current!.next;\n current!.next = newNode;\n }\n\n this.length++;\n return true;\n }\n\n /**\n * 删除指定位置的元素\n */\n removeAt(index: number): T | null {\n if (index < 0 || index >= this.length || !this.head) {\n return null;\n }\n\n let current = this.head;\n\n if (index === 0) {\n this.head = current.next;\n this.length--;\n return current.value;\n }\n\n for (let i = 0; i < index - 1; i++) {\n current = current.next!;\n }\n\n const removed = current.next!;\n current.next = removed.next;\n this.length--;\n\n return removed.value;\n }\n\n /**\n * 查找元素索引\n */\n indexOf(value: T): number {\n let current = this.head;\n let index = 0;\n\n while (current) {\n if (current.value === value) {\n return index;\n }\n current = current.next;\n index++;\n }\n\n return -1;\n }\n\n /**\n * 获取指定位置的元素\n */\n get(index: number): T | null {\n if (index < 0 || index >= this.length || !this.head) {\n return null;\n }\n\n let current = this.head;\n for (let i = 0; i < index; i++) {\n current = current.next!;\n }\n\n return current.value;\n }\n\n /**\n * 判断链表是否为空\n */\n isEmpty(): boolean {\n return this.length === 0;\n }\n\n /**\n * 获取链表长度\n */\n size(): number {\n return this.length;\n }\n\n /**\n * 转换为数组\n */\n toArray(): T[] {\n const result: T[] = [];\n let current = this.head;\n\n while (current) {\n result.push(current.value);\n current = current.next;\n }\n\n return result;\n }\n}\n\n/**\n * 二叉树节点\n */\nclass TreeNode<T> {\n value: T;\n left: TreeNode<T> | null = null;\n right: TreeNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\n/**\n * 二叉树实现\n */\nexport class BinaryTree<T> {\n private root: TreeNode<T> | null = null;\n\n /**\n * 插入节点\n */\n insert(value: T): void {\n const newNode = new TreeNode(value);\n\n if (!this.root) {\n this.root = newNode;\n return;\n }\n\n this.insertNode(this.root, newNode);\n }\n\n private insertNode(node: TreeNode<T>, newNode: TreeNode<T>): void {\n // 简单实现:小于等于的放左边,大于的放右边\n if (newNode.value <= node.value) {\n if (!node.left) {\n node.left = newNode;\n } else {\n this.insertNode(node.left, newNode);\n }\n } else {\n if (!node.right) {\n node.right = newNode;\n } else {\n this.insertNode(node.right, newNode);\n }\n }\n }\n\n /**\n * 查找节点\n */\n search(value: T): boolean {\n return this.searchNode(this.root, value);\n }\n\n private searchNode(node: TreeNode<T> | null, value: T): boolean {\n if (!node) {\n return false;\n }\n\n if (value === node.value) {\n return true;\n }\n\n if (value < node.value) {\n return this.searchNode(node.left, value);\n }\n\n return this.searchNode(node.right, value);\n }\n\n /**\n * 中序遍历\n */\n inOrder(): T[] {\n const result: T[] = [];\n this.inOrderTraverse(this.root, result);\n return result;\n }\n\n private inOrderTraverse(node: TreeNode<T> | null, result: T[]): void {\n if (node) {\n this.inOrderTraverse(node.left, result);\n result.push(node.value);\n this.inOrderTraverse(node.right, result);\n }\n }\n\n /**\n * 前序遍历\n */\n preOrder(): T[] {\n const result: T[] = [];\n this.preOrderTraverse(this.root, result);\n return result;\n }\n\n private preOrderTraverse(node: TreeNode<T> | null, result: T[]): void {\n if (node) {\n result.push(node.value);\n this.preOrderTraverse(node.left, result);\n this.preOrderTraverse(node.right, result);\n }\n }\n\n /**\n * 后序遍历\n */\n postOrder(): T[] {\n const result: T[] = [];\n this.postOrderTraverse(this.root, result);\n return result;\n }\n\n private postOrderTraverse(node: TreeNode<T> | null, result: T[]): void {\n if (node) {\n this.postOrderTraverse(node.left, result);\n this.postOrderTraverse(node.right, result);\n result.push(node.value);\n }\n }\n}\n\n/**\n * 图实现(邻接表)\n */\nexport class Graph<T> {\n private vertices: Map<T, T[]> = new Map();\n\n /**\n * 添加顶点\n */\n addVertex(vertex: T): void {\n if (!this.vertices.has(vertex)) {\n this.vertices.set(vertex, []);\n }\n }\n\n /**\n * 添加边(无向图)\n */\n addEdge(vertex1: T, vertex2: T): void {\n if (!this.vertices.has(vertex1)) {\n this.addVertex(vertex1);\n }\n if (!this.vertices.has(vertex2)) {\n this.addVertex(vertex2);\n }\n\n const neighbors1 = this.vertices.get(vertex1)!;\n const neighbors2 = this.vertices.get(vertex2)!;\n\n if (!neighbors1.includes(vertex2)) {\n neighbors1.push(vertex2);\n }\n if (!neighbors2.includes(vertex1)) {\n neighbors2.push(vertex1);\n }\n }\n\n /**\n * 获取顶点的邻居\n */\n getNeighbors(vertex: T): T[] {\n return this.vertices.get(vertex) || [];\n }\n\n /**\n * 深度优先搜索\n */\n dfs(start: T, callback?: (vertex: T) => void): T[] {\n const visited = new Set<T>();\n const result: T[] = [];\n\n const dfsVisit = (vertex: T): void => {\n visited.add(vertex);\n result.push(vertex);\n if (callback) {\n callback(vertex);\n }\n\n const neighbors = this.getNeighbors(vertex);\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor)) {\n dfsVisit(neighbor);\n }\n }\n };\n\n dfsVisit(start);\n return result;\n }\n\n /**\n * 广度优先搜索\n */\n bfs(start: T, callback?: (vertex: T) => void): T[] {\n const visited = new Set<T>();\n const queue: T[] = [start];\n const result: T[] = [];\n\n visited.add(start);\n\n while (queue.length > 0) {\n const vertex = queue.shift()!;\n result.push(vertex);\n if (callback) {\n callback(vertex);\n }\n\n const neighbors = this.getNeighbors(vertex);\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor)) {\n visited.add(neighbor);\n queue.push(neighbor);\n }\n }\n }\n\n return result;\n }\n\n /**\n * 获取所有顶点\n */\n getVertices(): T[] {\n return Array.from(this.vertices.keys());\n }\n}\n\n/**\n * LRU缓存实现\n */\nexport class LRUCache<K, V> {\n private capacity: number;\n private cache: Map<K, V>;\n\n constructor(capacity: number) {\n if (capacity <= 0) {\n throw new Error('Capacity must be greater than 0');\n }\n this.capacity = capacity;\n this.cache = new Map();\n }\n\n /**\n * 获取值\n */\n get(key: K): V | undefined {\n if (!this.cache.has(key)) {\n return undefined;\n }\n\n // 将访问的键移到末尾(最近使用)\n const value = this.cache.get(key)!;\n this.cache.delete(key);\n this.cache.set(key, value);\n\n return value;\n }\n\n /**\n * 设置值\n */\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n // 更新现有键,移到末尾\n this.cache.delete(key);\n } else if (this.cache.size >= this.capacity) {\n // 删除最久未使用的键(第一个)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n\n this.cache.set(key, value);\n }\n\n /**\n * 删除键\n */\n delete(key: K): boolean {\n return this.cache.delete(key);\n }\n\n /**\n * 清空缓存\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * 判断是否包含键\n */\n has(key: K): boolean {\n return this.cache.has(key);\n }\n\n /**\n * 获取缓存大小\n */\n size(): number {\n return this.cache.size;\n }\n\n /**\n * 获取所有键\n */\n keys(): K[] {\n return Array.from(this.cache.keys()).filter((key): key is K => key !== undefined);\n }\n\n /**\n * 获取所有值\n */\n values(): V[] {\n return Array.from(this.cache.values());\n }\n}\n"]}
@@ -0,0 +1,110 @@
1
+ 'use strict';
2
+
3
+ // src/core/string.ts
4
+ function capitalize(str) {
5
+ if (!str) return str;
6
+ return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
7
+ }
8
+ function camelCase(str) {
9
+ if (!str) return str;
10
+ const words = str.replace(/[A-Z]/g, (letter) => ` ${letter.toLowerCase()}`).split(/[\s\-_]+/).filter((word) => word.length > 0);
11
+ if (words.length === 0) return "";
12
+ return words[0].toLowerCase() + words.slice(1).map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join("");
13
+ }
14
+ function kebabCase(str) {
15
+ return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
16
+ }
17
+ function truncate(str, length, suffix = "...") {
18
+ if (str.length <= length) return str;
19
+ return str.slice(0, length - suffix.length) + suffix;
20
+ }
21
+ function snakeCase(str) {
22
+ if (!str) return str;
23
+ return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`).replace(/[\s-]+/g, "_").replace(/^_+|_+$/g, "").toLowerCase();
24
+ }
25
+ function pascalCase(str) {
26
+ if (!str) return str;
27
+ const camel = camelCase(str);
28
+ return camel.charAt(0).toUpperCase() + camel.slice(1);
29
+ }
30
+ function mask(str, options = {}) {
31
+ if (!str) return str;
32
+ const { start = 0, end = str.length, maskChar = "*" } = options;
33
+ const startIndex = Math.max(0, start);
34
+ const endIndex = Math.min(str.length, end);
35
+ if (startIndex >= endIndex) return str;
36
+ return str.slice(0, startIndex) + maskChar.repeat(endIndex - startIndex) + str.slice(endIndex);
37
+ }
38
+ function maskPhone(phone) {
39
+ if (!phone || phone.length < 7) return phone;
40
+ return mask(phone, { start: 3, end: phone.length - 4 });
41
+ }
42
+ function maskEmail(email) {
43
+ if (!email || !email.includes("@")) return email;
44
+ const [local, domain] = email.split("@");
45
+ if (local.length <= 2) return email;
46
+ return `${local.slice(0, 2)}***@${domain}`;
47
+ }
48
+ function slugify(str) {
49
+ if (!str) return "";
50
+ return str.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
51
+ }
52
+ function removeAccents(str) {
53
+ if (!str) return str;
54
+ return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
55
+ }
56
+ function escapeHtml(str) {
57
+ if (!str) return str;
58
+ const map = {
59
+ "&": "&amp;",
60
+ "<": "&lt;",
61
+ ">": "&gt;",
62
+ '"': "&quot;",
63
+ "'": "&#39;"
64
+ };
65
+ return str.replace(/[&<>"']/g, (char) => map[char]);
66
+ }
67
+ function unescapeHtml(str) {
68
+ if (!str) return str;
69
+ const map = {
70
+ "&amp;": "&",
71
+ "&lt;": "<",
72
+ "&gt;": ">",
73
+ "&quot;": '"',
74
+ "&#39;": "'"
75
+ };
76
+ return str.replace(/&amp;|&lt;|&gt;|&quot;|&#39;/g, (char) => map[char]);
77
+ }
78
+ function template(template2, data) {
79
+ if (!template2) return template2;
80
+ return template2.replace(/\{\{(\w+)\}\}/g, (match, key) => {
81
+ const value = data[key];
82
+ return value !== void 0 && value !== null ? String(value) : match;
83
+ });
84
+ }
85
+ function highlight(text, keyword, tag = "mark") {
86
+ if (!text || !keyword) return text;
87
+ const regex = new RegExp(`(${escapeRegex(keyword)})`, "gi");
88
+ return text.replace(regex, `<${tag}>$1</${tag}>`);
89
+ }
90
+ function escapeRegex(str) {
91
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
92
+ }
93
+
94
+ exports.camelCase = camelCase;
95
+ exports.capitalize = capitalize;
96
+ exports.escapeHtml = escapeHtml;
97
+ exports.highlight = highlight;
98
+ exports.kebabCase = kebabCase;
99
+ exports.mask = mask;
100
+ exports.maskEmail = maskEmail;
101
+ exports.maskPhone = maskPhone;
102
+ exports.pascalCase = pascalCase;
103
+ exports.removeAccents = removeAccents;
104
+ exports.slugify = slugify;
105
+ exports.snakeCase = snakeCase;
106
+ exports.template = template;
107
+ exports.truncate = truncate;
108
+ exports.unescapeHtml = unescapeHtml;
109
+ //# sourceMappingURL=chunk-D7CS5EKF.js.map
110
+ //# sourceMappingURL=chunk-D7CS5EKF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/string.ts"],"names":["template"],"mappings":"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","file":"chunk-D7CS5EKF.js","sourcesContent":["/**\n * 字符串工具函数\n */\n\n/**\n * 首字母大写\n * @param str - 输入字符串\n * @returns 首字母大写的字符串\n */\nexport function capitalize(str: string): string {\n if (!str) return str;\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n}\n\n/**\n * 驼峰命名转换\n * @param str - 输入字符串(支持 kebab-case, snake_case, space separated)\n * @returns 驼峰命名字符串\n */\nexport function camelCase(str: string): string {\n if (!str) return str;\n\n // 先转换为小写,然后按空格、短横线、下划线分割\n const words = str\n .replace(/[A-Z]/g, letter => ` ${letter.toLowerCase()}`)\n .split(/[\\s\\-_]+/)\n .filter(word => word.length > 0);\n\n if (words.length === 0) return '';\n\n // 第一个单词全小写,后续单词首字母大写\n return (\n words[0].toLowerCase() +\n words\n .slice(1)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('')\n );\n}\n\n/**\n * 短横线命名转换\n * @param str - 输入字符串\n * @returns kebab-case 字符串\n */\nexport function kebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * 截断字符串\n * @param str - 输入字符串\n * @param length - 最大长度\n * @param suffix - 后缀,默认为 '...'\n * @returns 截断后的字符串\n */\nexport function truncate(str: string, length: number, suffix = '...'): string {\n if (str.length <= length) return str;\n return str.slice(0, length - suffix.length) + suffix;\n}\n\n/**\n * 下划线命名转换\n * @param str - 输入字符串\n * @returns snake_case 字符串\n */\nexport function snakeCase(str: string): string {\n if (!str) return str;\n return str\n .replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`)\n .replace(/[\\s-]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .toLowerCase();\n}\n\n/**\n * 帕斯卡命名转换\n * @param str - 输入字符串(支持 kebab-case, snake_case, space separated)\n * @returns PascalCase 字符串\n */\nexport function pascalCase(str: string): string {\n if (!str) return str;\n const camel = camelCase(str);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n}\n\n/**\n * 字符串脱敏\n * @param str - 输入字符串\n * @param options - 脱敏选项\n * @returns 脱敏后的字符串\n */\nexport function mask(\n str: string,\n options: {\n start?: number;\n end?: number;\n maskChar?: string;\n } = {}\n): string {\n if (!str) return str;\n const { start = 0, end = str.length, maskChar = '*' } = options;\n const startIndex = Math.max(0, start);\n const endIndex = Math.min(str.length, end);\n if (startIndex >= endIndex) return str;\n return str.slice(0, startIndex) + maskChar.repeat(endIndex - startIndex) + str.slice(endIndex);\n}\n\n/**\n * 手机号脱敏(默认显示前3位和后4位)\n * @param phone - 手机号\n * @returns 脱敏后的手机号\n */\nexport function maskPhone(phone: string): string {\n if (!phone || phone.length < 7) return phone;\n return mask(phone, { start: 3, end: phone.length - 4 });\n}\n\n/**\n * 邮箱脱敏(默认显示前2位和@后的域名)\n * @param email - 邮箱地址\n * @returns 脱敏后的邮箱\n */\nexport function maskEmail(email: string): string {\n if (!email || !email.includes('@')) return email;\n const [local, domain] = email.split('@');\n if (local.length <= 2) return email;\n return `${local.slice(0, 2)}***@${domain}`;\n}\n\n/**\n * URL友好的字符串转换(slugify)\n * @param str - 输入字符串\n * @returns URL友好的字符串\n */\nexport function slugify(str: string): string {\n if (!str) return '';\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n/**\n * 移除重音符号\n * @param str - 输入字符串\n * @returns 移除重音后的字符串\n */\nexport function removeAccents(str: string): string {\n if (!str) return str;\n return str.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n\n/**\n * HTML转义\n * @param str - 输入字符串\n * @returns 转义后的字符串\n */\nexport function escapeHtml(str: string): string {\n if (!str) return str;\n const map: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n };\n return str.replace(/[&<>\"']/g, char => map[char]);\n}\n\n/**\n * HTML反转义\n * @param str - 输入字符串\n * @returns 反转义后的字符串\n */\nexport function unescapeHtml(str: string): string {\n if (!str) return str;\n const map: Record<string, string> = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\",\n };\n return str.replace(/&amp;|&lt;|&gt;|&quot;|&#39;/g, char => map[char]);\n}\n\n/**\n * 模板字符串替换\n * @param template - 模板字符串,使用 {{key}} 作为占位符\n * @param data - 替换数据对象\n * @returns 替换后的字符串\n */\nexport function template(template: string, data: Record<string, unknown>): string {\n if (!template) return template;\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key) => {\n const value = data[key];\n return value !== undefined && value !== null ? String(value) : match;\n });\n}\n\n/**\n * 关键词高亮\n * @param text - 文本内容\n * @param keyword - 关键词\n * @param tag - 高亮标签,默认为 'mark'\n * @returns 高亮后的HTML字符串\n */\nexport function highlight(text: string, keyword: string, tag = 'mark'): string {\n if (!text || !keyword) return text;\n const regex = new RegExp(`(${escapeRegex(keyword)})`, 'gi');\n return text.replace(regex, `<${tag}>$1</${tag}>`);\n}\n\n/**\n * 转义正则表达式特殊字符\n */\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n"]}