Skip to content

Commit d6a4409

Browse files
committed
feat(logger): add name and level property
1 parent 56527e4 commit d6a4409

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

spec/logger.spec.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { describe, expect, it } from 'vitest'
2+
import Base from '../src/base'
3+
import { loggerDecorator } from '../src/logger'
4+
5+
describe('logger', () => {
6+
it('has a logger property', () => {
7+
class Test extends Base {}
8+
loggerDecorator()(Test)
9+
10+
expect(Test.prototype).toHaveProperty('logger')
11+
})
12+
13+
it('overrides name if not provided', () => {
14+
class Test extends Base {}
15+
loggerDecorator()(Test)
16+
})
17+
18+
describe('options', () => {
19+
describe('level', () => {
20+
it('defaults to info', () => {
21+
class Test extends Base {}
22+
loggerDecorator()(Test)
23+
const instance = new Test()
24+
expect(instance.logger).toHaveProperty('level', 'info')
25+
})
26+
27+
it('can be overridden', () => {
28+
class Test extends Base {}
29+
loggerDecorator('', { level: 'debug' })(Test)
30+
const instance = new Test()
31+
expect(instance.logger).toHaveProperty('level', 'debug')
32+
})
33+
})
34+
})
35+
})

src/logger.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
type LogLevel = 'verbose' | 'debug' | 'info' | 'warn' | 'error'
2+
3+
type LoggerOptions = {
4+
level?: LogLevel
5+
}
6+
7+
function Logger(
8+
name?: string,
9+
options: LoggerOptions = {
10+
level: 'info'
11+
}
12+
): ClassDecorator {
13+
return function (target: Function) {
14+
name = name ?? target.name
15+
16+
const logger = {
17+
name,
18+
level: options.level
19+
}
20+
21+
Object.defineProperty(target.prototype, 'logger', {
22+
value: logger
23+
})
24+
}
25+
}
26+
27+
const loggerDecorator = Logger
28+
29+
export default Logger
30+
export { LogLevel, loggerDecorator }

0 commit comments

Comments
 (0)