Skip to content

Commit bba87ac

Browse files
committed
Add level
1 parent fec755c commit bba87ac

File tree

4 files changed

+57
-24
lines changed

4 files changed

+57
-24
lines changed

src/default.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
'use strict'
22

3+
const { defaultGetLevel } = require('./level')
4+
35
// Default `opts.handlerFunc`
4-
const defaultHandler = function({ eventName, message }) {
5-
const level = eventName === 'warning' ? 'warn' : 'error'
6+
const defaultHandler = function(message, level) {
67
// eslint-disable-next-line no-restricted-globals, no-console
78
console[level](message)
89
}
910

1011
const DEFAULT_OPTS = {
12+
getLevel: defaultGetLevel,
1113
handlerFunc: defaultHandler,
1214
exitOnExceptions: true,
1315
}

src/handle.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
const { exit } = require('process')
44

55
const { getInfo } = require('./info')
6+
const { getLevel } = require('./level')
67
const { getMessage } = require('./message')
78

89
// Generic event handler for all events.
910
const handleEvent = async function({
11+
opts,
1012
opts: { handlerFunc, exitOnExceptions },
1113
eventName,
1214
error,
@@ -24,9 +26,10 @@ const handleEvent = async function({
2426
secondPromiseValue,
2527
})
2628

27-
const message = getMessage(info)
29+
const { level, levelInfo } = getLevel({ opts, info })
30+
const message = getMessage({ ...info, levelInfo })
2831

29-
handlerFunc({ ...info, message })
32+
handlerFunc(message, level, info)
3033

3134
exitProcess({ eventName, exitOnExceptions })
3235
}

src/level.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'use strict'
2+
3+
const { platform } = require('process')
4+
5+
const { red, yellow } = require('chalk')
6+
7+
const getLevel = function({ opts, info }) {
8+
const level = opts.getLevel(info)
9+
const levelInfo = LEVELS[level]
10+
11+
if (levelInfo === undefined) {
12+
const levels = Object.keys(LEVELS).join(', ')
13+
// TODO: infinite recursion?
14+
throw new Error(`Level ${level} is invalid. Must be one of: ${levels}`)
15+
}
16+
17+
return { level, levelInfo }
18+
}
19+
20+
const isWindows = platform === 'win32'
21+
// Each level is printed in a different way
22+
const LEVELS = {
23+
warn: {
24+
COLOR: yellow,
25+
SIGN: isWindows ? '\u203C' : '\u26A0',
26+
},
27+
error: {
28+
COLOR: red,
29+
SIGN: isWindows ? '\u00D7' : '\u2718',
30+
},
31+
}
32+
33+
const defaultGetLevel = function({ eventName }) {
34+
if (eventName === 'warning') {
35+
return 'warn'
36+
}
37+
38+
return 'error'
39+
}
40+
41+
module.exports = {
42+
getLevel,
43+
defaultGetLevel,
44+
}

src/message.js

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
'use strict'
22

3-
const { platform } = require('process')
43
const { inspect } = require('util')
54

6-
const { red, yellow, bold, dim, inverse } = require('chalk')
5+
const { bold, dim, inverse } = require('chalk')
76

87
// Retrieve `message` which sums up all information that can be gathered about
98
// the event.
@@ -14,6 +13,7 @@ const getMessage = function({
1413
secondPromiseState,
1514
secondPromiseValue,
1615
error,
16+
levelInfo,
1717
}) {
1818
const message = MESSAGES[eventName]({
1919
promiseState,
@@ -23,8 +23,7 @@ const getMessage = function({
2323
error,
2424
})
2525

26-
const level = eventName === 'warning' ? 'warn' : 'error'
27-
const messageA = prettify({ message, level, eventName })
26+
const messageA = prettify({ message, eventName, levelInfo })
2827
return messageA
2928
}
3029

@@ -86,11 +85,10 @@ const printValue = function(value) {
8685
return inspect(value)
8786
}
8887

89-
const prettify = function({ message, level, eventName }) {
88+
const prettify = function({ message, eventName, levelInfo: { COLOR, SIGN } }) {
9089
const [header, ...lines] = message.split('\n')
9190

9291
// Add color, icon and `eventName` to first message line.
93-
const { COLOR, SIGN } = LEVELS[level]
9492
const headerA = COLOR(`${bold(inverse(` ${SIGN} ${eventName} `))} ${header}`)
9593
// Add gray color and indentation to other lines.
9694
const linesA = lines.map(line => dim(`\t${VERTICAL_BAR} ${line}`))
@@ -99,20 +97,6 @@ const prettify = function({ message, level, eventName }) {
9997
return messageA
10098
}
10199

102-
// Start the message with an icon followed by `Error` or `Warning`
103-
// Also add colors
104-
const isWindows = platform === 'win32'
105-
const LEVELS = {
106-
warn: {
107-
COLOR: yellow,
108-
SIGN: isWindows ? '\u203C' : '\u26A0',
109-
},
110-
error: {
111-
COLOR: red,
112-
SIGN: isWindows ? '\u00D7' : '\u2718',
113-
},
114-
}
115-
116100
const VERTICAL_BAR = '\u2016'
117101

118102
module.exports = {

0 commit comments

Comments
 (0)