@taicode/common-base 3.0.1 → 3.1.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 (110) hide show
  1. package/output/batching-buffer/batching-buffer.test.js +1 -1
  2. package/output/batching-buffer/index.d.ts +2 -2
  3. package/output/batching-buffer/index.d.ts.map +1 -1
  4. package/output/batching-buffer/index.js +1 -1
  5. package/output/catch/catch.test.js +1 -1
  6. package/output/catch/index.d.ts +1 -1
  7. package/output/catch/index.d.ts.map +1 -1
  8. package/output/catch/index.js +1 -1
  9. package/output/color/color.d.ts.map +1 -1
  10. package/output/color/color.js +0 -1
  11. package/output/color/color.test.js +1 -1
  12. package/output/color/index.d.ts +1 -1
  13. package/output/color/index.d.ts.map +1 -1
  14. package/output/color/index.js +1 -1
  15. package/output/debounce/debounce.test.js +1 -1
  16. package/output/debounce/index.d.ts +1 -1
  17. package/output/debounce/index.d.ts.map +1 -1
  18. package/output/debounce/index.js +1 -1
  19. package/output/disposer/disposer.d.ts.map +1 -1
  20. package/output/disposer/disposer.js +2 -1
  21. package/output/disposer/disposer.test.js +1 -1
  22. package/output/disposer/index.d.ts +1 -1
  23. package/output/disposer/index.d.ts.map +1 -1
  24. package/output/disposer/index.js +1 -1
  25. package/output/error/error.test.js +1 -1
  26. package/output/error/index.d.ts +2 -2
  27. package/output/error/index.d.ts.map +1 -1
  28. package/output/error/index.js +1 -1
  29. package/output/event-emitter/event-emitter.test.js +1 -1
  30. package/output/event-emitter/index.d.ts +1 -1
  31. package/output/event-emitter/index.d.ts.map +1 -1
  32. package/output/event-emitter/index.js +1 -1
  33. package/output/flow-queue/flow-queue.d.ts.map +1 -1
  34. package/output/flow-queue/flow-queue.js +4 -5
  35. package/output/flow-queue/flow-queue.test.js +2 -2
  36. package/output/flow-queue/index.d.ts +2 -2
  37. package/output/flow-queue/index.d.ts.map +1 -1
  38. package/output/flow-queue/index.js +1 -1
  39. package/output/index.d.ts +17 -17
  40. package/output/index.d.ts.map +1 -1
  41. package/output/index.js +17 -17
  42. package/output/logger/formatter.js +1 -1
  43. package/output/logger/formatter.test.js +3 -3
  44. package/output/logger/index.d.ts +3 -3
  45. package/output/logger/index.d.ts.map +1 -1
  46. package/output/logger/index.js +3 -3
  47. package/output/logger/logger.d.ts +2 -2
  48. package/output/logger/logger.d.ts.map +1 -1
  49. package/output/logger/logger.js +1 -1
  50. package/output/logger/logger.test.js +4 -4
  51. package/output/logger/transport.d.ts +1 -1
  52. package/output/logger/transport.d.ts.map +1 -1
  53. package/output/logger/transport.js +1 -1
  54. package/output/logger/transport.test.js +2 -2
  55. package/output/lru-cache/index.d.ts +1 -1
  56. package/output/lru-cache/index.d.ts.map +1 -1
  57. package/output/lru-cache/index.js +1 -1
  58. package/output/lru-cache/lru-cache.test.js +1 -1
  59. package/output/number/index.d.ts +1 -1
  60. package/output/number/index.d.ts.map +1 -1
  61. package/output/number/index.js +1 -1
  62. package/output/number/number.test.js +1 -1
  63. package/output/object/index.d.ts +1 -1
  64. package/output/object/index.d.ts.map +1 -1
  65. package/output/object/index.js +1 -1
  66. package/output/object/object.test.js +1 -1
  67. package/output/ring-cache/index.d.ts +1 -1
  68. package/output/ring-cache/index.d.ts.map +1 -1
  69. package/output/ring-cache/index.js +1 -1
  70. package/output/ring-cache/ring-cache.test.js +1 -1
  71. package/output/scheduler/index.d.ts +2 -0
  72. package/output/scheduler/index.d.ts.map +1 -0
  73. package/output/scheduler/index.js +1 -0
  74. package/output/scheduler/scheduler.d.ts +222 -0
  75. package/output/scheduler/scheduler.d.ts.map +1 -0
  76. package/output/scheduler/scheduler.js +348 -0
  77. package/output/scheduler/scheduler.test.d.ts +2 -0
  78. package/output/scheduler/scheduler.test.d.ts.map +1 -0
  79. package/output/scheduler/scheduler.test.js +341 -0
  80. package/output/service/index.d.ts +1 -1
  81. package/output/service/index.d.ts.map +1 -1
  82. package/output/service/index.js +1 -1
  83. package/output/string/index.d.ts +1 -1
  84. package/output/string/index.d.ts.map +1 -1
  85. package/output/string/index.js +1 -1
  86. package/output/string/string.test.js +1 -1
  87. package/output/throttle/index.d.ts +1 -1
  88. package/output/throttle/index.d.ts.map +1 -1
  89. package/output/throttle/index.js +1 -1
  90. package/output/throttle/throttle.test.js +1 -1
  91. package/output/ttl-cache/index.d.ts +1 -1
  92. package/output/ttl-cache/index.d.ts.map +1 -1
  93. package/output/ttl-cache/index.js +1 -1
  94. package/output/ttl-cache/ttl-cache.test.js +1 -1
  95. package/package.json +7 -5
  96. package/output/events/disposer.d.ts +0 -6
  97. package/output/events/disposer.d.ts.map +0 -1
  98. package/output/events/disposer.js +0 -19
  99. package/output/events/disposer.test.d.ts +0 -2
  100. package/output/events/disposer.test.d.ts.map +0 -1
  101. package/output/events/disposer.test.js +0 -192
  102. package/output/events/event-emitter.d.ts +0 -33
  103. package/output/events/event-emitter.d.ts.map +0 -1
  104. package/output/events/event-emitter.js +0 -66
  105. package/output/events/event-emitter.test.d.ts +0 -2
  106. package/output/events/event-emitter.test.d.ts.map +0 -1
  107. package/output/events/event-emitter.test.js +0 -213
  108. package/output/events/index.d.ts +0 -3
  109. package/output/events/index.d.ts.map +0 -1
  110. package/output/events/index.js +0 -3
@@ -0,0 +1,341 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { Scheduler } from './scheduler';
3
+ describe('Scheduler', () => {
4
+ let scheduler;
5
+ beforeEach(() => {
6
+ scheduler = new Scheduler();
7
+ vi.useFakeTimers();
8
+ });
9
+ afterEach(() => {
10
+ scheduler.stop();
11
+ scheduler.clear();
12
+ vi.restoreAllMocks();
13
+ vi.useRealTimers();
14
+ });
15
+ describe('任务管理', () => {
16
+ it('应该成功添加任务', () => {
17
+ const handler = vi.fn();
18
+ scheduler.addTask({
19
+ id: 'test-task',
20
+ interval: 10,
21
+ handler,
22
+ });
23
+ expect(scheduler.getTaskIds()).toContain('test-task');
24
+ });
25
+ it('添加任务时 interval 必须是 10 的倍数', () => {
26
+ expect(() => {
27
+ scheduler.addTask({
28
+ id: 'invalid-task',
29
+ interval: 15,
30
+ handler: vi.fn(),
31
+ });
32
+ }).toThrow('must be a multiple of 10');
33
+ });
34
+ it('不应该添加重复 id 的任务', () => {
35
+ scheduler.addTask({
36
+ id: 'test-task',
37
+ interval: 10,
38
+ handler: vi.fn(),
39
+ });
40
+ expect(() => {
41
+ scheduler.addTask({
42
+ id: 'test-task',
43
+ interval: 20,
44
+ handler: vi.fn(),
45
+ });
46
+ }).toThrow('already exists');
47
+ });
48
+ it('应该成功移除任务', () => {
49
+ scheduler.addTask({
50
+ id: 'test-task',
51
+ interval: 10,
52
+ handler: vi.fn(),
53
+ });
54
+ const removed = scheduler.removeTask('test-task');
55
+ expect(removed).toBe(true);
56
+ expect(scheduler.getTaskIds()).not.toContain('test-task');
57
+ });
58
+ it('应该能够启用和禁用任务', () => {
59
+ scheduler.addTask({
60
+ id: 'test-task',
61
+ interval: 10,
62
+ handler: vi.fn(),
63
+ });
64
+ expect(scheduler.disableTask('test-task')).toBe(true);
65
+ const state = scheduler.getTaskState('test-task');
66
+ expect(state?.config.enabled).toBe(false);
67
+ expect(scheduler.enableTask('test-task')).toBe(true);
68
+ const state2 = scheduler.getTaskState('test-task');
69
+ expect(state2?.config.enabled).toBe(true);
70
+ });
71
+ });
72
+ describe('任务调度', () => {
73
+ it('应该按照指定间隔执行任务', async () => {
74
+ const handler = vi.fn();
75
+ scheduler.addTask({
76
+ id: 'test-task',
77
+ interval: 10,
78
+ handler,
79
+ });
80
+ scheduler.start();
81
+ // 第一次 tick (0s)
82
+ await vi.advanceTimersByTimeAsync(10000);
83
+ expect(handler).toHaveBeenCalledTimes(1);
84
+ // 第二次 tick (10s)
85
+ await vi.advanceTimersByTimeAsync(10000);
86
+ expect(handler).toHaveBeenCalledTimes(2);
87
+ // 第三次 tick (20s)
88
+ await vi.advanceTimersByTimeAsync(10000);
89
+ expect(handler).toHaveBeenCalledTimes(3);
90
+ });
91
+ it('应该支持不同间隔的多个任务', async () => {
92
+ const handler1 = vi.fn();
93
+ const handler2 = vi.fn();
94
+ scheduler.addTask({
95
+ id: 'task-10s',
96
+ interval: 10,
97
+ handler: handler1,
98
+ });
99
+ scheduler.addTask({
100
+ id: 'task-30s',
101
+ interval: 30,
102
+ handler: handler2,
103
+ });
104
+ scheduler.start();
105
+ // 10s
106
+ await vi.advanceTimersByTimeAsync(10000);
107
+ expect(handler1).toHaveBeenCalledTimes(1);
108
+ expect(handler2).toHaveBeenCalledTimes(0);
109
+ // 20s
110
+ await vi.advanceTimersByTimeAsync(10000);
111
+ expect(handler1).toHaveBeenCalledTimes(2);
112
+ expect(handler2).toHaveBeenCalledTimes(0);
113
+ // 30s
114
+ await vi.advanceTimersByTimeAsync(10000);
115
+ expect(handler1).toHaveBeenCalledTimes(3);
116
+ expect(handler2).toHaveBeenCalledTimes(1);
117
+ });
118
+ it('immediate 参数应该使任务立即执行', async () => {
119
+ const handler = vi.fn();
120
+ scheduler.addTask({
121
+ id: 'immediate-task',
122
+ interval: 10,
123
+ handler,
124
+ immediate: true,
125
+ });
126
+ scheduler.start();
127
+ // 立即执行
128
+ await vi.runAllTimersAsync();
129
+ expect(handler).toHaveBeenCalledTimes(1);
130
+ });
131
+ it('禁用的任务不应该执行', async () => {
132
+ const handler = vi.fn();
133
+ scheduler.addTask({
134
+ id: 'disabled-task',
135
+ interval: 10,
136
+ handler,
137
+ enabled: false,
138
+ });
139
+ scheduler.start();
140
+ await vi.advanceTimersByTimeAsync(20000);
141
+ expect(handler).not.toHaveBeenCalled();
142
+ });
143
+ });
144
+ describe('重试机制', () => {
145
+ it('失败的任务应该自动重试', async () => {
146
+ let attemptCount = 0;
147
+ const handler = vi.fn(async () => {
148
+ attemptCount++;
149
+ if (attemptCount < 3) {
150
+ throw new Error('Task failed');
151
+ }
152
+ });
153
+ const errorListener = vi.fn();
154
+ const retryListener = vi.fn();
155
+ const successListener = vi.fn();
156
+ scheduler.on('task:error', errorListener);
157
+ scheduler.on('task:retry', retryListener);
158
+ scheduler.on('task:success', successListener);
159
+ scheduler.addTask({
160
+ id: 'retry-task',
161
+ interval: 10,
162
+ handler,
163
+ maxRetries: 3,
164
+ retryDelay: 100,
165
+ });
166
+ scheduler.start();
167
+ await vi.advanceTimersByTimeAsync(10000);
168
+ await vi.advanceTimersByTimeAsync(500); // 等待重试
169
+ expect(handler).toHaveBeenCalledTimes(3);
170
+ expect(errorListener).toHaveBeenCalledTimes(2);
171
+ expect(retryListener).toHaveBeenCalledTimes(2);
172
+ expect(successListener).toHaveBeenCalledTimes(1);
173
+ });
174
+ it('超过最大重试次数后应该触发 task:failed 事件', async () => {
175
+ const handler = vi.fn(async () => {
176
+ throw new Error('Always fails');
177
+ });
178
+ const failedListener = vi.fn();
179
+ scheduler.on('task:failed', failedListener);
180
+ scheduler.addTask({
181
+ id: 'failing-task',
182
+ interval: 10,
183
+ handler,
184
+ maxRetries: 2,
185
+ retryDelay: 100,
186
+ });
187
+ scheduler.start();
188
+ await vi.advanceTimersByTimeAsync(10000);
189
+ await vi.advanceTimersByTimeAsync(500); // 等待重试
190
+ expect(handler).toHaveBeenCalledTimes(3); // 1 次初始 + 2 次重试
191
+ expect(failedListener).toHaveBeenCalledTimes(1);
192
+ });
193
+ it('失败后应该在下个周期重新执行', async () => {
194
+ let shouldFail = true;
195
+ const handler = vi.fn(async () => {
196
+ if (shouldFail) {
197
+ throw new Error('First execution fails');
198
+ }
199
+ });
200
+ scheduler.addTask({
201
+ id: 'recover-task',
202
+ interval: 10,
203
+ handler,
204
+ maxRetries: 0, // 不重试
205
+ });
206
+ scheduler.start();
207
+ // 第一次执行 - 失败
208
+ await vi.advanceTimersByTimeAsync(10000);
209
+ expect(handler).toHaveBeenCalledTimes(1);
210
+ shouldFail = false;
211
+ // 第二次执行 - 成功
212
+ await vi.advanceTimersByTimeAsync(10000);
213
+ expect(handler).toHaveBeenCalledTimes(2);
214
+ });
215
+ });
216
+ describe('事件系统', () => {
217
+ it('应该触发 scheduler:start 事件', () => {
218
+ const listener = vi.fn();
219
+ scheduler.on('scheduler:start', listener);
220
+ scheduler.start();
221
+ expect(listener).toHaveBeenCalledTimes(1);
222
+ });
223
+ it('应该触发 scheduler:stop 事件', () => {
224
+ const listener = vi.fn();
225
+ scheduler.on('scheduler:stop', listener);
226
+ scheduler.start();
227
+ scheduler.stop();
228
+ expect(listener).toHaveBeenCalledTimes(1);
229
+ });
230
+ it('应该触发 scheduler:tick 事件', async () => {
231
+ const listener = vi.fn();
232
+ scheduler.on('scheduler:tick', listener);
233
+ scheduler.start();
234
+ await vi.advanceTimersByTimeAsync(10000);
235
+ expect(listener).toHaveBeenCalledWith({ tick: 1 });
236
+ await vi.advanceTimersByTimeAsync(10000);
237
+ expect(listener).toHaveBeenCalledWith({ tick: 2 });
238
+ });
239
+ it('应该触发 task:start 和 task:success 事件', async () => {
240
+ const startListener = vi.fn();
241
+ const successListener = vi.fn();
242
+ scheduler.on('task:start', startListener);
243
+ scheduler.on('task:success', successListener);
244
+ scheduler.addTask({
245
+ id: 'success-task',
246
+ interval: 10,
247
+ handler: vi.fn(),
248
+ });
249
+ scheduler.start();
250
+ await vi.advanceTimersByTimeAsync(10000);
251
+ expect(startListener).toHaveBeenCalledWith({ taskId: 'success-task' });
252
+ expect(successListener).toHaveBeenCalledWith({
253
+ taskId: 'success-task',
254
+ duration: expect.any(Number)
255
+ });
256
+ });
257
+ });
258
+ describe('手动触发', () => {
259
+ it('应该能够手动触发任务执行', async () => {
260
+ const handler = vi.fn();
261
+ scheduler.addTask({
262
+ id: 'manual-task',
263
+ interval: 60,
264
+ handler,
265
+ });
266
+ const result = await scheduler.triggerTask('manual-task');
267
+ expect(result.isError()).toBe(false);
268
+ expect(handler).toHaveBeenCalledTimes(1);
269
+ });
270
+ it('手动触发不存在的任务应该返回错误', async () => {
271
+ const result = await scheduler.triggerTask('non-existent');
272
+ expect(result.isError()).toBe(true);
273
+ });
274
+ });
275
+ describe('统计信息', () => {
276
+ it('应该正确返回统计信息', () => {
277
+ scheduler.addTask({
278
+ id: 'task-1',
279
+ interval: 10,
280
+ handler: vi.fn(),
281
+ });
282
+ scheduler.addTask({
283
+ id: 'task-2',
284
+ interval: 20,
285
+ handler: vi.fn(),
286
+ enabled: false,
287
+ });
288
+ const stats = scheduler.getStats();
289
+ expect(stats.totalTasks).toBe(2);
290
+ expect(stats.enabledTasks).toBe(1);
291
+ expect(stats.running).toBe(false);
292
+ });
293
+ it('应该记录任务执行历史', async () => {
294
+ const handler = vi.fn();
295
+ scheduler.addTask({
296
+ id: 'history-task',
297
+ interval: 10,
298
+ handler,
299
+ });
300
+ scheduler.start();
301
+ await vi.advanceTimersByTimeAsync(30000); // 执行 3 次
302
+ const executions = scheduler.getTaskExecutions('history-task', 10);
303
+ expect(executions.length).toBe(3);
304
+ expect(executions.every((e) => e.success)).toBe(true);
305
+ });
306
+ });
307
+ describe('边界情况', () => {
308
+ it('重复启动应该被忽略', () => {
309
+ scheduler.start();
310
+ scheduler.start();
311
+ expect(scheduler.isRunning()).toBe(true);
312
+ });
313
+ it('停止未启动的调度器应该正常处理', () => {
314
+ expect(() => scheduler.stop()).not.toThrow();
315
+ });
316
+ it('不应该移除正在运行的任务', async () => {
317
+ const handler = vi.fn(async () => {
318
+ await new Promise((resolve) => setTimeout(resolve, 100));
319
+ });
320
+ scheduler.addTask({
321
+ id: 'running-task',
322
+ interval: 10,
323
+ handler,
324
+ });
325
+ scheduler.start();
326
+ await vi.advanceTimersByTimeAsync(10000);
327
+ const removed = scheduler.removeTask('running-task');
328
+ expect(removed).toBe(false);
329
+ });
330
+ it('运行中不应该清空任务', () => {
331
+ scheduler.addTask({
332
+ id: 'task-1',
333
+ interval: 10,
334
+ handler: vi.fn(),
335
+ });
336
+ scheduler.start();
337
+ scheduler.clear();
338
+ expect(scheduler.getTaskIds().length).toBe(1);
339
+ });
340
+ });
341
+ });
@@ -1,2 +1,2 @@
1
- export { Service } from './service';
1
+ export { Service } from './service.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
@@ -1 +1 @@
1
- export { Service } from './service';
1
+ export { Service } from './service.js';
@@ -1,2 +1,2 @@
1
- export * from './string';
1
+ export * from './string.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/string/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/string/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA"}
@@ -1 +1 @@
1
- export * from './string';
1
+ export * from './string.js';
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { randomString } from './string';
2
+ import { randomString } from './string.js';
3
3
  describe('randomString 函数', () => {
4
4
  beforeEach(() => {
5
5
  // 重置随机数生成器的模拟
@@ -1,2 +1,2 @@
1
- export * from './throttle';
1
+ export * from './throttle.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/throttle/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/throttle/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
@@ -1 +1 @@
1
- export * from './throttle';
1
+ export * from './throttle.js';
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import { throttle, throttleFn } from './throttle';
2
+ import { throttle, throttleFn } from './throttle.js';
3
3
  describe('throttle', () => {
4
4
  beforeEach(() => {
5
5
  vi.useFakeTimers();
@@ -1,2 +1,2 @@
1
- export { TtlCache, type TtlCacheOptions, type TtlCacheStats } from './ttl-cache';
1
+ export { TtlCache, type TtlCacheOptions, type TtlCacheStats } from './ttl-cache.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/ttl-cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/ttl-cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1 +1 @@
1
- export { TtlCache } from './ttl-cache';
1
+ export { TtlCache } from './ttl-cache.js';
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { TtlCache } from './ttl-cache';
2
+ import { TtlCache } from './ttl-cache.js';
3
3
  describe('TtlCache', () => {
4
4
  let cache;
5
5
  beforeEach(() => {
package/package.json CHANGED
@@ -1,21 +1,23 @@
1
1
  {
2
2
  "name": "@taicode/common-base",
3
- "version": "3.0.1",
3
+ "version": "3.1.0",
4
4
  "author": "Alain",
5
5
  "license": "ISC",
6
6
  "description": "",
7
+ "type": "module",
8
+ "engines": {
9
+ "node": ">=16.0.0"
10
+ },
7
11
  "main": "./output/index.js",
8
12
  "types": "./output/index.d.ts",
9
13
  "exports": {
10
14
  ".": {
11
15
  "types": "./output/index.d.ts",
12
- "import": "./output/index.js",
13
- "require": "./output/index.js"
16
+ "default": "./output/index.js"
14
17
  },
15
18
  "./*": {
16
19
  "types": "./output/*/index.d.ts",
17
- "import": "./output/*/index.js",
18
- "require": "./output/*/index.js"
20
+ "default": "./output/*/index.js"
19
21
  }
20
22
  },
21
23
  "scripts": {
@@ -1,6 +0,0 @@
1
- export declare class Disposer {
2
- private cleanupFunctions;
3
- addDisposer(cleanupFn: () => unknown): void;
4
- dispose(): void;
5
- }
6
- //# sourceMappingURL=disposer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"disposer.d.ts","sourceRoot":"","sources":["../../source/events/disposer.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ;IACnB,OAAO,CAAC,gBAAgB,CAAyB;IAGjD,WAAW,CAAC,SAAS,EAAE,MAAM,OAAO,GAAG,IAAI;IAK3C,OAAO,IAAI,IAAI;CAUhB"}
@@ -1,19 +0,0 @@
1
- export class Disposer {
2
- cleanupFunctions = [];
3
- // 添加清理函数
4
- addDisposer(cleanupFn) {
5
- this.cleanupFunctions.push(cleanupFn);
6
- }
7
- // 执行所有清理函数
8
- dispose() {
9
- for (const cleanupFn of this.cleanupFunctions) {
10
- try {
11
- cleanupFn();
12
- }
13
- catch (error) {
14
- console.error('Error during cleanup:', error);
15
- }
16
- }
17
- this.cleanupFunctions = []; // 清空清理函数列表
18
- }
19
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=disposer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"disposer.test.d.ts","sourceRoot":"","sources":["../../source/events/disposer.test.ts"],"names":[],"mappings":""}