Skip to content

Commit 527d8f1

Browse files
committed
refactor(reporters): Reporter#write -> Reporter#report
Signed-off-by: Lexus Drumgold <unicornware@flexdevelopment.llc>
1 parent 0608282 commit 527d8f1

File tree

4 files changed

+65
-17
lines changed

4 files changed

+65
-17
lines changed

src/lib/__tests__/create-logger.functional.spec.mts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('functional:lib/createLogger', () => {
2828
*
2929
* @return {undefined}
3030
*/
31-
public write(): undefined {
31+
public report(): undefined {
3232
return void expect(this).to.have.property('logger', subject)
3333
}
3434
}
@@ -55,14 +55,14 @@ describe('functional:lib/createLogger', () => {
5555
logTypes.warn
5656
])('should not send info above maximum log level (%#)', type => {
5757
// Arrange
58-
vi.spyOn(reporter, 'write')
58+
vi.spyOn(reporter, 'report')
5959

6060
// Act
6161
subject.level = subject.levels.silent
6262
subject[type](type)
6363

6464
// Expect
65-
expect(reporter.write).not.toHaveBeenCalled()
65+
expect(reporter.report).not.toHaveBeenCalled()
6666
})
6767

6868
it.each<[type: LogType, message: unknown, ...args: unknown[]]>([
@@ -77,16 +77,16 @@ describe('functional:lib/createLogger', () => {
7777
}]
7878
])('should send info to reporters (%#)', (type, message, ...args) => {
7979
// Arrange
80-
const write: MockInstance<Reporter['write']> = vi.spyOn(reporter, 'write')
80+
const spy: MockInstance<Reporter['report']> = vi.spyOn(reporter, 'report')
8181

8282
// Act
8383
subject.level = subject.levels.verbose
8484
subject[type](message, ...args)
8585

8686
// Expect
87-
expect(write).toHaveBeenCalledOnce()
88-
expect(write.mock.lastCall?.[0]).to.have.property('date').instanceof(Date)
89-
expect(omit(write.mock.lastCall![0], ['date'])).toMatchSnapshot()
87+
expect(spy).toHaveBeenCalledOnce()
88+
expect(spy.mock.lastCall?.[0]).to.have.property('date').instanceof(Date)
89+
expect(omit(spy.mock.lastCall![0], ['date'])).toMatchSnapshot()
9090
})
9191
})
9292
})

src/lib/create-logger.mts

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import type {
2121
LogObject,
2222
LogType
2323
} from '@flex-development/log'
24-
import { keys } from '@flex-development/tutils'
24+
import { keys, type Fn } from '@flex-development/tutils'
2525
import { ok } from 'devlop'
2626
import isUnicodeSupported from 'is-unicode-supported'
2727

@@ -178,8 +178,7 @@ function createLogger(
178178
logger.level = logger.normalizeLevel(options.level)
179179

180180
for (const type of keys(logger.types)) {
181-
Object.defineProperties(value, { name: { value: type } })
182-
Object.defineProperties(logger, { [type]: { enumerable: true, value } })
181+
bind(logger, type, send)
183182

184183
/**
185184
* @this {Logger}
@@ -190,12 +189,12 @@ function createLogger(
190189
* Message arguments
191190
* @return {undefined}
192191
*/
193-
function value(
192+
function send(
194193
this: Logger,
195194
message: unknown,
196195
...args: unknown[]
197196
): undefined {
198-
return void write.call(this, this.types[type], [message, ...args])
197+
return void report.call(this, this.types[type], [message, ...args])
199198
}
200199
}
201200

@@ -204,6 +203,39 @@ function createLogger(
204203
return logger
205204
}
206205

206+
/**
207+
* Bind a function to `logger`.
208+
*
209+
* @internal
210+
*
211+
* @this {void}
212+
*
213+
* @param {Partial<Logger>} logger
214+
* Logger object
215+
* @param {keyof Logger} name
216+
* Function name
217+
* @param {Fn} fn
218+
* The function to bind
219+
* @return {undefined}
220+
*/
221+
function bind(
222+
this: void,
223+
logger: Partial<Logger>,
224+
name: keyof Logger,
225+
fn: Fn
226+
): undefined {
227+
Object.defineProperties(logger, {
228+
[name]: {
229+
enumerable: true,
230+
value: fn.bind(logger)
231+
}
232+
})
233+
234+
Object.defineProperties(logger[name], { name: { value: name } })
235+
236+
return void logger
237+
}
238+
207239
/**
208240
* Send a message each log reporter.
209241
*
@@ -217,7 +249,7 @@ function createLogger(
217249
* Message arguments
218250
* @return {undefined}
219251
*/
220-
function write(
252+
function report(
221253
this: Logger,
222254
defaults: InputLogObject,
223255
args: unknown[]
@@ -257,7 +289,7 @@ function write(
257289
if (info.color === undefined) info.color = this.types[info.type].color
258290
if (info.icon === undefined) info.icon = this.types[info.type].icon
259291

260-
for (const reporter of this.reporters) void reporter.write(info)
292+
for (const reporter of this.reporters) void reporter.report(info)
261293
}
262294

263295
return void info

src/reporters/__tests__/abstract.reporter.spec-d.mts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,24 @@ describe('unit-d:reporters/Reporter', () => {
1111
expectTypeOf<TestSubject>().toHaveProperty('logger').toEqualTypeOf<Logger>()
1212
})
1313

14-
describe('write', () => {
15-
type Subject = TestSubject['write']
14+
describe('init', () => {
15+
type Subject = TestSubject['init']
16+
17+
describe('parameters', () => {
18+
it('should be callable with [Logger]', () => {
19+
expectTypeOf<Subject>().parameters.toEqualTypeOf<[Logger]>()
20+
})
21+
})
22+
23+
describe('returns', () => {
24+
it('should return undefined', () => {
25+
expectTypeOf<Subject>().returns.toEqualTypeOf<undefined>()
26+
})
27+
})
28+
})
29+
30+
describe('report', () => {
31+
type Subject = TestSubject['report']
1632

1733
describe('parameters', () => {
1834
it('should be callable with [LogObject]', () => {

src/reporters/abstract.reporter.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ abstract class Reporter {
5656
* The log information to process
5757
* @return {undefined | void}
5858
*/
59-
public abstract write(info: LogObject): undefined | void
59+
public abstract report(info: LogObject): undefined | void
6060
}
6161

6262
export default Reporter

0 commit comments

Comments
 (0)