Skip to content

Commit 569291f

Browse files
committed
feat(grease): createGreaser
Signed-off-by: Lexus Drumgold <[email protected]>
1 parent ad59ade commit 569291f

File tree

5 files changed

+90
-0
lines changed

5 files changed

+90
-0
lines changed

src/__tests__/grease.create.spec.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* @file Unit Tests - createGreaser
3+
* @module grease/tests/unit/createGreaser
4+
*/
5+
6+
import testSubject from '../grease.create'
7+
import GreaseService from '../grease.service'
8+
9+
describe('unit:createGreaser', () => {
10+
it('should return grease runner instance', async () => {
11+
expect(await testSubject()).to.be.instanceof(GreaseService)
12+
})
13+
})

src/grease.create.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @file createGreaser
3+
* @module grease/create
4+
*/
5+
6+
import { LoggerService, UserLogLevel } from '#src/log'
7+
import type { INestApplicationContext as App } from '@nestjs/common'
8+
import { NestFactory } from '@nestjs/core'
9+
import GreaseModule from './grease.module'
10+
import GreaseService from './grease.service'
11+
12+
/**
13+
* Create a greaser.
14+
*
15+
* @see {@linkcode GreaseService}
16+
*
17+
* @async
18+
*
19+
* @return {Promise<GreaseService>} Grease runner instance
20+
*/
21+
const createGreaser = async (): Promise<GreaseService> => {
22+
/**
23+
* NestJS application context.
24+
*
25+
* @const {App} app
26+
*/
27+
const app: App = await NestFactory.createApplicationContext(GreaseModule, {
28+
abortOnError: false,
29+
autoFlushLogs: false,
30+
bufferLogs: true
31+
})
32+
33+
// use custom logger
34+
app.useLogger(app.get(LoggerService).withTag('nest'))
35+
app.useLogger([UserLogLevel.WARN])
36+
app.flushLogs()
37+
38+
return (await app.init()).get(GreaseService)
39+
}
40+
41+
export default createGreaser

src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
export * from './decorators'
77
export * from './enums'
8+
export { default as createGreaser } from './grease.create'
89
export { default as GreaseModule } from './grease.module'
910
export { default as GreaseService } from './grease.service'
1011
export type * from './interfaces'

src/subdomains/log/providers/__tests__/logger.service.spec.ts

+15
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,21 @@ describe('unit:log/providers/LoggerService', () => {
8787
})
8888
})
8989

90+
describe('#setLogLevels', () => {
91+
it('should return this log level', () => {
92+
// Arrange
93+
const cases: [keyof typeof LogLevel, UserLogLevel[]][] = [
94+
['LOG', []],
95+
['WARN', [UserLogLevel.ERROR, UserLogLevel.FATAL, UserLogLevel.WARN]]
96+
]
97+
98+
// Act + Expect
99+
cases.forEach(([key, levels]) => {
100+
expect(new TestSubject().setLogLevels(levels)).to.equal(LogLevel[key])
101+
})
102+
})
103+
})
104+
90105
describe('#sync', () => {
91106
let subject: TestSubject
92107

src/subdomains/log/providers/logger.service.ts

+20
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import type { Reporter } from '#src/log/reporters'
1111
import type { Colors } from '#src/log/types'
1212
import type { GlobalOptions } from '#src/options'
1313
import {
14+
at,
1415
define,
1516
fallback,
1617
ifelse,
@@ -24,6 +25,7 @@ import {
2425
omit,
2526
select,
2627
set,
28+
sort,
2729
template,
2830
uppercase,
2931
values,
@@ -272,6 +274,24 @@ class LoggerService implements ILogger {
272274
})
273275
}
274276

277+
/**
278+
* Set `this` log level to the highest level in the given log level array.
279+
*
280+
* @public
281+
*
282+
* @param {OrLowercase<UserLogLevel>[]} levels - Log levels
283+
* @return {LogLevel} `this` log level
284+
*/
285+
public setLogLevels(levels: OrLowercase<UserLogLevel>[]): LogLevel {
286+
if (levels.length) {
287+
this.level = at(sort(levels, (level1, level2) => {
288+
return LogLevel[uppercase(level2)] - LogLevel[uppercase(level1)]
289+
}), 0)
290+
}
291+
292+
return this.level
293+
}
294+
275295
/**
276296
* Write a `start` log.
277297
*

0 commit comments

Comments
 (0)