-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
console.ts
48 lines (44 loc) · 1.29 KB
/
console.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { bold, cyan, dim, red, reset, yellow } from 'kleur/colors';
import type { LogMessage } from './core.js';
import { dateTimeFormat, levels } from './core.js';
let lastMessage: string;
let lastMessageCount = 1;
export const consoleLogDestination = {
write(event: LogMessage) {
// eslint-disable-next-line no-console
let dest = console.error;
if (levels[event.level] < levels['error']) {
// eslint-disable-next-line no-console
dest = console.log;
}
function getPrefix() {
let prefix = '';
let type = event.label;
if (type) {
// hide timestamp when type is undefined
prefix += dim(dateTimeFormat.format(new Date()) + ' ');
if (event.level === 'info') {
type = bold(cyan(`[${type}]`));
} else if (event.level === 'warn') {
type = bold(yellow(`[${type}]`));
} else if (event.level === 'error') {
type = bold(red(`[${type}]`));
}
prefix += `${type} `;
}
return reset(prefix);
}
let message = event.message;
// For repeat messages, only update the message counter
if (message === lastMessage) {
lastMessageCount++;
message = `${message} ${yellow(`(x${lastMessageCount})`)}`;
} else {
lastMessage = message;
lastMessageCount = 1;
}
const outMessage = getPrefix() + message;
dest(outMessage);
return true;
},
};