@taicode/common-base 4.0.0-beta.1 → 4.0.0-beta.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disposer.d.ts","sourceRoot":"","sources":["../../source/disposer/disposer.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAEvD,qBAAa,QAAQ;IACnB,OAAO,CAAC,gBAAgB,CAAwB;IAGhD,
|
|
1
|
+
{"version":3,"file":"disposer.d.ts","sourceRoot":"","sources":["../../source/disposer/disposer.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAEvD,qBAAa,QAAQ;IACnB,OAAO,CAAC,gBAAgB,CAAwB;IAGhD,GAAG,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAK/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAY/B"}
|
|
@@ -6,20 +6,20 @@ describe('Disposer', () => {
|
|
|
6
6
|
beforeEach(() => {
|
|
7
7
|
disposer = new Disposer();
|
|
8
8
|
});
|
|
9
|
-
describe('
|
|
9
|
+
describe('add', () => {
|
|
10
10
|
it('应该能够添加清理函数', () => {
|
|
11
11
|
const cleanupFn = vi.fn();
|
|
12
12
|
expect(() => {
|
|
13
|
-
disposer.
|
|
13
|
+
disposer.add(cleanupFn);
|
|
14
14
|
}).not.toThrow();
|
|
15
15
|
});
|
|
16
16
|
it('应该能够添加多个清理函数', async () => {
|
|
17
17
|
const cleanupFn1 = vi.fn();
|
|
18
18
|
const cleanupFn2 = vi.fn();
|
|
19
19
|
const cleanupFn3 = vi.fn();
|
|
20
|
-
disposer.
|
|
21
|
-
disposer.
|
|
22
|
-
disposer.
|
|
20
|
+
disposer.add(cleanupFn1);
|
|
21
|
+
disposer.add(cleanupFn2);
|
|
22
|
+
disposer.add(cleanupFn3);
|
|
23
23
|
await disposer.dispose();
|
|
24
24
|
expect(cleanupFn1).toHaveBeenCalledOnce();
|
|
25
25
|
expect(cleanupFn2).toHaveBeenCalledOnce();
|
|
@@ -30,10 +30,10 @@ describe('Disposer', () => {
|
|
|
30
30
|
const stringFn = vi.fn(() => 'cleanup result');
|
|
31
31
|
const numberFn = vi.fn(() => 42);
|
|
32
32
|
const promiseFn = vi.fn(() => Promise.resolve('async cleanup'));
|
|
33
|
-
disposer.
|
|
34
|
-
disposer.
|
|
35
|
-
disposer.
|
|
36
|
-
disposer.
|
|
33
|
+
disposer.add(voidFn);
|
|
34
|
+
disposer.add(stringFn);
|
|
35
|
+
disposer.add(numberFn);
|
|
36
|
+
disposer.add(promiseFn);
|
|
37
37
|
await disposer.dispose();
|
|
38
38
|
expect(voidFn).toHaveBeenCalled();
|
|
39
39
|
expect(stringFn).toHaveBeenCalled();
|
|
@@ -46,9 +46,9 @@ describe('Disposer', () => {
|
|
|
46
46
|
const cleanupFn1 = vi.fn();
|
|
47
47
|
const cleanupFn2 = vi.fn();
|
|
48
48
|
const cleanupFn3 = vi.fn();
|
|
49
|
-
disposer.
|
|
50
|
-
disposer.
|
|
51
|
-
disposer.
|
|
49
|
+
disposer.add(cleanupFn1);
|
|
50
|
+
disposer.add(cleanupFn2);
|
|
51
|
+
disposer.add(cleanupFn3);
|
|
52
52
|
await disposer.dispose();
|
|
53
53
|
expect(cleanupFn1).toHaveBeenCalledOnce();
|
|
54
54
|
expect(cleanupFn2).toHaveBeenCalledOnce();
|
|
@@ -56,23 +56,23 @@ describe('Disposer', () => {
|
|
|
56
56
|
});
|
|
57
57
|
it('应该按添加顺序执行清理函数', async () => {
|
|
58
58
|
const executionOrder = [];
|
|
59
|
-
disposer.
|
|
60
|
-
disposer.
|
|
61
|
-
disposer.
|
|
59
|
+
disposer.add(() => executionOrder.push(1));
|
|
60
|
+
disposer.add(() => executionOrder.push(2));
|
|
61
|
+
disposer.add(() => executionOrder.push(3));
|
|
62
62
|
await disposer.dispose();
|
|
63
63
|
expect(executionOrder).toEqual([1, 2, 3]);
|
|
64
64
|
});
|
|
65
65
|
it('应该按添加顺序执行异步清理函数', async () => {
|
|
66
66
|
const executionOrder = [];
|
|
67
|
-
disposer.
|
|
67
|
+
disposer.add(async () => {
|
|
68
68
|
await Promise.resolve();
|
|
69
69
|
executionOrder.push(1);
|
|
70
70
|
});
|
|
71
|
-
disposer.
|
|
71
|
+
disposer.add(async () => {
|
|
72
72
|
await Promise.resolve();
|
|
73
73
|
executionOrder.push(2);
|
|
74
74
|
});
|
|
75
|
-
disposer.
|
|
75
|
+
disposer.add(async () => {
|
|
76
76
|
await Promise.resolve();
|
|
77
77
|
executionOrder.push(3);
|
|
78
78
|
});
|
|
@@ -87,9 +87,9 @@ describe('Disposer', () => {
|
|
|
87
87
|
const workingFn2 = vi.fn();
|
|
88
88
|
// 模拟 logger.error
|
|
89
89
|
const loggerErrorSpy = vi.spyOn(logger, 'error').mockImplementation(() => { });
|
|
90
|
-
disposer.
|
|
91
|
-
disposer.
|
|
92
|
-
disposer.
|
|
90
|
+
disposer.add(workingFn1);
|
|
91
|
+
disposer.add(errorFn);
|
|
92
|
+
disposer.add(workingFn2);
|
|
93
93
|
// dispose 不应该抛出错误
|
|
94
94
|
await expect(disposer.dispose()).resolves.toBeUndefined();
|
|
95
95
|
// 所有函数都应该被调用
|
|
@@ -102,7 +102,7 @@ describe('Disposer', () => {
|
|
|
102
102
|
});
|
|
103
103
|
it('应该在执行后清空清理函数列表', async () => {
|
|
104
104
|
const cleanupFn = vi.fn();
|
|
105
|
-
disposer.
|
|
105
|
+
disposer.add(cleanupFn);
|
|
106
106
|
await disposer.dispose();
|
|
107
107
|
expect(cleanupFn).toHaveBeenCalledOnce();
|
|
108
108
|
// 再次调用 dispose 不应该执行任何函数
|
|
@@ -112,9 +112,9 @@ describe('Disposer', () => {
|
|
|
112
112
|
it('应该能够在清空后重新添加清理函数', async () => {
|
|
113
113
|
const firstCleanup = vi.fn();
|
|
114
114
|
const secondCleanup = vi.fn();
|
|
115
|
-
disposer.
|
|
115
|
+
disposer.add(firstCleanup);
|
|
116
116
|
await disposer.dispose();
|
|
117
|
-
disposer.
|
|
117
|
+
disposer.add(secondCleanup);
|
|
118
118
|
await disposer.dispose();
|
|
119
119
|
expect(firstCleanup).toHaveBeenCalledOnce();
|
|
120
120
|
expect(secondCleanup).toHaveBeenCalledOnce();
|
|
@@ -124,7 +124,7 @@ describe('Disposer', () => {
|
|
|
124
124
|
});
|
|
125
125
|
it('应该能够多次调用 dispose', async () => {
|
|
126
126
|
const cleanupFn = vi.fn();
|
|
127
|
-
disposer.
|
|
127
|
+
disposer.add(cleanupFn);
|
|
128
128
|
await disposer.dispose();
|
|
129
129
|
await disposer.dispose();
|
|
130
130
|
await disposer.dispose();
|
|
@@ -135,8 +135,8 @@ describe('Disposer', () => {
|
|
|
135
135
|
it('应该能够清理事件监听器', async () => {
|
|
136
136
|
const removeEventListener = vi.fn();
|
|
137
137
|
const unsubscribe = vi.fn();
|
|
138
|
-
disposer.
|
|
139
|
-
disposer.
|
|
138
|
+
disposer.add(removeEventListener);
|
|
139
|
+
disposer.add(unsubscribe);
|
|
140
140
|
await disposer.dispose();
|
|
141
141
|
expect(removeEventListener).toHaveBeenCalled();
|
|
142
142
|
expect(unsubscribe).toHaveBeenCalled();
|
|
@@ -144,8 +144,8 @@ describe('Disposer', () => {
|
|
|
144
144
|
it('应该能够清理定时器', async () => {
|
|
145
145
|
const clearTimeout = vi.fn();
|
|
146
146
|
const clearInterval = vi.fn();
|
|
147
|
-
disposer.
|
|
148
|
-
disposer.
|
|
147
|
+
disposer.add(() => clearTimeout(123));
|
|
148
|
+
disposer.add(() => clearInterval(456));
|
|
149
149
|
await disposer.dispose();
|
|
150
150
|
expect(clearTimeout).toHaveBeenCalledWith(123);
|
|
151
151
|
expect(clearInterval).toHaveBeenCalledWith(456);
|
|
@@ -153,8 +153,8 @@ describe('Disposer', () => {
|
|
|
153
153
|
it('应该能够清理资源连接', async () => {
|
|
154
154
|
const closeConnection = vi.fn();
|
|
155
155
|
const releaseResource = vi.fn();
|
|
156
|
-
disposer.
|
|
157
|
-
disposer.
|
|
156
|
+
disposer.add(() => closeConnection());
|
|
157
|
+
disposer.add(() => releaseResource());
|
|
158
158
|
await disposer.dispose();
|
|
159
159
|
expect(closeConnection).toHaveBeenCalled();
|
|
160
160
|
expect(releaseResource).toHaveBeenCalled();
|
|
@@ -167,9 +167,9 @@ describe('Disposer', () => {
|
|
|
167
167
|
};
|
|
168
168
|
const offFunction1 = mockEventEmitter.on('event1', vi.fn());
|
|
169
169
|
const offFunction2 = mockEventEmitter.on('event2', vi.fn());
|
|
170
|
-
disposer.
|
|
171
|
-
disposer.
|
|
172
|
-
disposer.
|
|
170
|
+
disposer.add(offFunction1);
|
|
171
|
+
disposer.add(offFunction2);
|
|
172
|
+
disposer.add(() => mockEventEmitter.cleanup());
|
|
173
173
|
await disposer.dispose();
|
|
174
174
|
expect(offFunction1).toHaveBeenCalled();
|
|
175
175
|
expect(offFunction2).toHaveBeenCalled();
|
|
@@ -180,7 +180,7 @@ describe('Disposer', () => {
|
|
|
180
180
|
it('应该捕获并记录同步错误', async () => {
|
|
181
181
|
const loggerErrorSpy = vi.spyOn(logger, 'error').mockImplementation(() => { });
|
|
182
182
|
const error = new Error('Sync error');
|
|
183
|
-
disposer.
|
|
183
|
+
disposer.add(() => {
|
|
184
184
|
throw error;
|
|
185
185
|
});
|
|
186
186
|
await disposer.dispose();
|
|
@@ -189,13 +189,13 @@ describe('Disposer', () => {
|
|
|
189
189
|
});
|
|
190
190
|
it('应该处理不同类型的错误', async () => {
|
|
191
191
|
const loggerErrorSpy = vi.spyOn(logger, 'error').mockImplementation(() => { });
|
|
192
|
-
disposer.
|
|
192
|
+
disposer.add(() => {
|
|
193
193
|
throw new TypeError('Type error');
|
|
194
194
|
});
|
|
195
|
-
disposer.
|
|
195
|
+
disposer.add(() => {
|
|
196
196
|
throw 'String error';
|
|
197
197
|
});
|
|
198
|
-
disposer.
|
|
198
|
+
disposer.add(() => {
|
|
199
199
|
throw { message: 'Object error' };
|
|
200
200
|
});
|
|
201
201
|
await disposer.dispose();
|
|
@@ -205,7 +205,7 @@ describe('Disposer', () => {
|
|
|
205
205
|
it('应该捕获并记录异步错误', async () => {
|
|
206
206
|
const loggerErrorSpy = vi.spyOn(logger, 'error').mockImplementation(() => { });
|
|
207
207
|
const asyncError = new Error('Async error');
|
|
208
|
-
disposer.
|
|
208
|
+
disposer.add(async () => {
|
|
209
209
|
throw asyncError;
|
|
210
210
|
});
|
|
211
211
|
await disposer.dispose();
|