This repository has been archived by the owner on Mar 15, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
/
node.js
101 lines (85 loc) · 2.2 KB
/
node.js
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import chalk from 'chalk';
import loglevel from 'loglevelnext';
import uuid from 'uuid/v4';
import osLocale from 'os-locale';
export const colors = {
pink: chalk.hex('F1618C'),
purple: chalk.hex('B57EE5'),
orange: chalk.hex('F3AD38'),
green: chalk.hex('A2E05E'),
blue: chalk.hex('6DABF5'),
red: chalk.hex('F16161'),
gray: chalk.gray,
};
const locale = osLocale.sync().replace('_', '-');
const getLevels = colorSupportLevel => {
switch (colorSupportLevel) {
case 1: {
return {
trace: chalk.gray,
debug: chalk.cyan,
info: chalk.blue,
warn: chalk.yellow,
error: chalk.red,
};
}
case 2:
case 3: {
return {
trace: colors.gray,
debug: colors.purple,
info: colors.blue,
warn: colors.orange,
error: colors.red,
};
}
default: {
return {
trace: text => `₸ ${text}`,
debug: text => `➤ ${text}`,
info: text => `ⓘ ${text}`,
warn: text => `⚠ ${text}`,
error: text => `⚑ ${text}`,
};
}
}
};
export const levels = getLevels(chalk.level);
const defaults = {
name: '<unknown>',
level: 'debug',
unique: true,
};
const prefix = {
time: opts => levels[opts.level](`[${new Date().toLocaleTimeString(locale)}]`),
level: opts => levels[opts.level](`[${opts.logger.name}]`),
template: '{{level}} ',
};
export function createLogger(options) {
const opts = Object.assign({}, defaults, options);
const { id } = options;
opts.prefix = Object.assign({}, prefix, options.prefix);
delete opts.id;
Object.defineProperty(opts, 'id', {
get() {
if (!id) {
return this.name + (opts.unique ? `-${uuid()}` : '');
}
return id;
},
});
if (opts.timestamp) {
opts.prefix.template = `{{time}} ${opts.prefix.template}`;
}
const log = loglevel.getLogger(opts);
if (!Object.prototype.hasOwnProperty.call(log, 'id')) {
Object.defineProperty(log, 'id', {
get() {
return opts.id;
},
});
}
return log;
}
export default createLogger({ name: 'sb', id: 'storybook', timestamp: true });
export const hmr = createLogger({ name: 'wp', id: 'storybook-webpack', timestamp: true });