@taicode/common-base 1.7.4 → 1.7.6
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/output/error/error.d.ts +110 -67
- package/output/error/error.d.ts.map +1 -1
- package/output/error/error.js +109 -61
- package/output/error/error.test.d.ts +0 -17
- package/output/error/error.test.d.ts.map +1 -1
- package/output/error/error.test.js +209 -99
- package/output/error/index.d.ts +2 -1
- package/output/error/index.d.ts.map +1 -1
- package/output/error/index.js +1 -1
- package/output/events/disposer.d.ts +6 -0
- package/output/events/disposer.d.ts.map +1 -0
- package/output/events/disposer.js +19 -0
- package/output/events/disposer.test.d.ts +2 -0
- package/output/events/disposer.test.d.ts.map +1 -0
- package/output/events/disposer.test.js +192 -0
- package/output/events/event-emitter.d.ts +33 -0
- package/output/events/event-emitter.d.ts.map +1 -0
- package/output/events/event-emitter.js +66 -0
- package/output/events/event-emitter.test.d.ts +2 -0
- package/output/events/event-emitter.test.d.ts.map +1 -0
- package/output/events/event-emitter.test.js +213 -0
- package/output/events/index.d.ts +3 -0
- package/output/events/index.d.ts.map +1 -0
- package/output/events/index.js +3 -0
- package/output/logger/formatter.d.ts +0 -1
- package/output/logger/formatter.d.ts.map +1 -1
- package/output/logger/formatter.js +1 -17
- package/output/logger/formatter.test.d.ts +0 -24
- package/output/logger/formatter.test.d.ts.map +1 -1
- package/output/logger/formatter.test.js +11 -30
- package/output/logger/logger.test.d.ts +0 -19
- package/output/logger/logger.test.d.ts.map +1 -1
- package/output/logger/logger.test.js +6 -16
- package/package.json +3 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
2
|
import { DefaultLogFormatter } from './formatter';
|
|
3
|
-
import { UserError, SystemError
|
|
3
|
+
import { UserError, SystemError } from '../error';
|
|
4
4
|
describe('DefaultLogFormatter', () => {
|
|
5
5
|
let formatter;
|
|
6
6
|
beforeEach(() => {
|
|
@@ -119,11 +119,11 @@ describe('DefaultLogFormatter', () => {
|
|
|
119
119
|
describe('错误格式化', () => {
|
|
120
120
|
describe('UserError 格式化', () => {
|
|
121
121
|
it('应该格式化带有完整信息的 UserError', () => {
|
|
122
|
-
const error = new UserError('validation-failed',
|
|
122
|
+
const error = new UserError('validation-failed', {
|
|
123
123
|
field: 'email',
|
|
124
124
|
value: 'invalid-email',
|
|
125
125
|
rule: 'email-format'
|
|
126
|
-
});
|
|
126
|
+
}, '验证失败');
|
|
127
127
|
const result = formatter.format(error);
|
|
128
128
|
expect(result).toContain('🚫 User Error [validation-failed]');
|
|
129
129
|
expect(result).toContain('Message: 验证失败');
|
|
@@ -132,7 +132,7 @@ describe('DefaultLogFormatter', () => {
|
|
|
132
132
|
});
|
|
133
133
|
it('应该在禁用颜色时不包含 ANSI 代码', () => {
|
|
134
134
|
const formatterWithoutColors = new DefaultLogFormatter({}, { useColors: false });
|
|
135
|
-
const error = new UserError('test-error', '测试错误');
|
|
135
|
+
const error = new UserError('test-error', undefined, '测试错误');
|
|
136
136
|
const result = formatterWithoutColors.format(error);
|
|
137
137
|
expect(result).not.toContain('\x1b[');
|
|
138
138
|
expect(result).toContain('🚫 User Error [test-error]');
|
|
@@ -140,14 +140,14 @@ describe('DefaultLogFormatter', () => {
|
|
|
140
140
|
});
|
|
141
141
|
it('应该在禁用堆栈时不显示堆栈信息', () => {
|
|
142
142
|
const formatterWithoutStack = new DefaultLogFormatter({}, { showStack: false });
|
|
143
|
-
const error = new UserError('test-error', '测试错误');
|
|
143
|
+
const error = new UserError('test-error', undefined, '测试错误');
|
|
144
144
|
const result = formatterWithoutStack.format(error);
|
|
145
145
|
expect(result).not.toContain('Stack:');
|
|
146
146
|
expect(result).toContain('Message: 测试错误');
|
|
147
147
|
});
|
|
148
148
|
it('应该在禁用上下文时不显示上下文信息', () => {
|
|
149
149
|
const formatterWithoutContext = new DefaultLogFormatter({}, { showContext: false });
|
|
150
|
-
const error = new UserError('test-error',
|
|
150
|
+
const error = new UserError('test-error', { field: 'test' }, '测试错误');
|
|
151
151
|
const result = formatterWithoutContext.format(error);
|
|
152
152
|
expect(result).not.toContain('Context:');
|
|
153
153
|
expect(result).toContain('Message: 测试错误');
|
|
@@ -155,11 +155,11 @@ describe('DefaultLogFormatter', () => {
|
|
|
155
155
|
});
|
|
156
156
|
describe('SystemError 格式化', () => {
|
|
157
157
|
it('应该格式化带有完整信息的 SystemError', () => {
|
|
158
|
-
const error = new SystemError('database-error',
|
|
158
|
+
const error = new SystemError('database-error', {
|
|
159
159
|
table: 'users',
|
|
160
160
|
query: 'SELECT * FROM users',
|
|
161
161
|
operation: 'select'
|
|
162
|
-
});
|
|
162
|
+
}, '数据库连接失败');
|
|
163
163
|
const result = formatter.format(error);
|
|
164
164
|
expect(result).toContain('⚠️ System Error [database-error]');
|
|
165
165
|
expect(result).toContain('Message: 数据库连接失败');
|
|
@@ -168,31 +168,12 @@ describe('DefaultLogFormatter', () => {
|
|
|
168
168
|
});
|
|
169
169
|
it('应该在禁用颜色时不包含 ANSI 代码', () => {
|
|
170
170
|
const formatterWithoutColors = new DefaultLogFormatter({}, { useColors: false });
|
|
171
|
-
const error = new SystemError('network-error', '网络错误');
|
|
171
|
+
const error = new SystemError('network-error', undefined, '网络错误');
|
|
172
172
|
const result = formatterWithoutColors.format(error);
|
|
173
173
|
expect(result).not.toContain('\x1b[');
|
|
174
174
|
expect(result).toContain('⚠️ System Error [network-error]');
|
|
175
175
|
});
|
|
176
176
|
});
|
|
177
|
-
describe('UnknownError 格式化', () => {
|
|
178
|
-
it('应该格式化带有完整信息的 UnknownError', () => {
|
|
179
|
-
const error = new UnknownError('未知错误', {
|
|
180
|
-
cause: 'something went wrong'
|
|
181
|
-
});
|
|
182
|
-
const result = formatter.format(error);
|
|
183
|
-
expect(result).toContain('❓ Unknown Error');
|
|
184
|
-
expect(result).toContain('Message: 未知错误');
|
|
185
|
-
expect(result).toContain('Context:');
|
|
186
|
-
expect(result).toContain('Stack:');
|
|
187
|
-
});
|
|
188
|
-
it('应该在禁用颜色时不包含 ANSI 代码', () => {
|
|
189
|
-
const formatterWithoutColors = new DefaultLogFormatter({}, { useColors: false });
|
|
190
|
-
const error = new UnknownError('测试未知错误');
|
|
191
|
-
const result = formatterWithoutColors.format(error);
|
|
192
|
-
expect(result).not.toContain('\x1b[');
|
|
193
|
-
expect(result).toContain('❓ Unknown Error');
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
177
|
describe('通用 Error 格式化', () => {
|
|
197
178
|
it('应该格式化普通 Error', () => {
|
|
198
179
|
const error = new Error('普通错误');
|
|
@@ -291,7 +272,7 @@ describe('DefaultLogFormatter', () => {
|
|
|
291
272
|
showContext: false,
|
|
292
273
|
useColors: false
|
|
293
274
|
});
|
|
294
|
-
const error = new UserError('test-error',
|
|
275
|
+
const error = new UserError('test-error', { field: 'test' }, '测试错误');
|
|
295
276
|
const result = minimalistFormatter.format(error);
|
|
296
277
|
expect(result).not.toContain('Stack:');
|
|
297
278
|
expect(result).not.toContain('Context:');
|
|
@@ -305,7 +286,7 @@ describe('DefaultLogFormatter', () => {
|
|
|
305
286
|
showContext: false,
|
|
306
287
|
useColors: false
|
|
307
288
|
});
|
|
308
|
-
const error = new SystemError('database-error',
|
|
289
|
+
const error = new SystemError('database-error', { table: 'users' }, '数据库错误');
|
|
309
290
|
const result = stackOnlyFormatter.format(error);
|
|
310
291
|
expect(result).toContain('Stack:');
|
|
311
292
|
expect(result).not.toContain('Context:');
|
|
@@ -1,21 +1,2 @@
|
|
|
1
|
-
declare module '../error' {
|
|
2
|
-
interface UserErrorTypes {
|
|
3
|
-
'validation-failed': {
|
|
4
|
-
field?: string;
|
|
5
|
-
value?: unknown;
|
|
6
|
-
rule?: string;
|
|
7
|
-
};
|
|
8
|
-
'test-error': {
|
|
9
|
-
field?: string;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
interface SystemErrorTypes {
|
|
13
|
-
'database-error': {
|
|
14
|
-
query?: string;
|
|
15
|
-
table?: string;
|
|
16
|
-
operation?: string;
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
1
|
export {};
|
|
21
2
|
//# sourceMappingURL=logger.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../source/logger/logger.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../source/logger/logger.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
2
|
import { Logger } from './logger';
|
|
3
3
|
import { DefaultLogFormatter } from './formatter';
|
|
4
|
-
import { UserError, SystemError
|
|
4
|
+
import { UserError, SystemError } from '../error';
|
|
5
5
|
import { MemoryTransport } from './transport'; // 测试向后兼容性
|
|
6
6
|
describe('Logger', () => {
|
|
7
7
|
it('应该默认记录 info 及以上级别', () => {
|
|
@@ -66,11 +66,11 @@ describe('Logger 错误处理', () => {
|
|
|
66
66
|
it('应该正确格式化 UserError', () => {
|
|
67
67
|
const mockPrint = vi.fn();
|
|
68
68
|
const logger = new Logger({ print: mockPrint });
|
|
69
|
-
const userError = new UserError('validation-failed',
|
|
69
|
+
const userError = new UserError('validation-failed', {
|
|
70
70
|
field: 'email',
|
|
71
71
|
value: 'invalid-email',
|
|
72
72
|
rule: 'email-format'
|
|
73
|
-
});
|
|
73
|
+
}, '邮箱格式无效');
|
|
74
74
|
logger.error('测试用户错误:', userError);
|
|
75
75
|
expect(mockPrint).toHaveBeenCalledWith('error', '测试用户错误:', expect.stringContaining('🚫 User Error [validation-failed]'));
|
|
76
76
|
expect(mockPrint).toHaveBeenCalledWith('error', '测试用户错误:', expect.stringContaining('邮箱格式无效'));
|
|
@@ -78,25 +78,15 @@ describe('Logger 错误处理', () => {
|
|
|
78
78
|
it('应该正确格式化 SystemError', () => {
|
|
79
79
|
const mockPrint = vi.fn();
|
|
80
80
|
const logger = new Logger({ print: mockPrint });
|
|
81
|
-
const systemError = new SystemError('database-error',
|
|
81
|
+
const systemError = new SystemError('database-error', {
|
|
82
82
|
table: 'users',
|
|
83
83
|
query: 'SELECT * FROM users',
|
|
84
84
|
operation: 'select'
|
|
85
|
-
});
|
|
85
|
+
}, '数据库连接失败');
|
|
86
86
|
logger.error('测试系统错误:', systemError);
|
|
87
87
|
expect(mockPrint).toHaveBeenCalledWith('error', '测试系统错误:', expect.stringContaining('⚠️ System Error [database-error]'));
|
|
88
88
|
expect(mockPrint).toHaveBeenCalledWith('error', '测试系统错误:', expect.stringContaining('数据库连接失败'));
|
|
89
89
|
});
|
|
90
|
-
it('应该正确格式化 UnknownError', () => {
|
|
91
|
-
const mockPrint = vi.fn();
|
|
92
|
-
const logger = new Logger({ print: mockPrint });
|
|
93
|
-
const unknownError = new UnknownError('未知错误', {
|
|
94
|
-
cause: 'something went wrong'
|
|
95
|
-
});
|
|
96
|
-
logger.error('测试未知错误:', unknownError);
|
|
97
|
-
expect(mockPrint).toHaveBeenCalledWith('error', '测试未知错误:', expect.stringContaining('❓ Unknown Error'));
|
|
98
|
-
expect(mockPrint).toHaveBeenCalledWith('error', '测试未知错误:', expect.stringContaining('未知错误'));
|
|
99
|
-
});
|
|
100
90
|
it('应该正确格式化普通 Error', () => {
|
|
101
91
|
const mockPrint = vi.fn();
|
|
102
92
|
const logger = new Logger({ print: mockPrint });
|
|
@@ -132,7 +122,7 @@ describe('Logger 错误处理', () => {
|
|
|
132
122
|
print: mockPrint,
|
|
133
123
|
formatter: customFormatter
|
|
134
124
|
});
|
|
135
|
-
const userError = new UserError('test-error',
|
|
125
|
+
const userError = new UserError('test-error', { field: 'test' }, '测试错误');
|
|
136
126
|
logger.error(userError);
|
|
137
127
|
const formattedError = mockPrint.mock.calls[0][1];
|
|
138
128
|
expect(formattedError).not.toContain('Stack:');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taicode/common-base",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.6",
|
|
4
4
|
"author": "Alain",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"description": "",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"output"
|
|
29
29
|
],
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"vitest": "^3.2.4"
|
|
31
|
+
"vitest": "^3.2.4",
|
|
32
|
+
"mobx": "^6.0.0"
|
|
32
33
|
}
|
|
33
34
|
}
|