Skip to content

Commit 6973e4c

Browse files
hiroppyevilebottnawi
authored andcommitted
refactor(client): create log module into utils (#1953)
1 parent 1581adc commit 6973e4c

File tree

9 files changed

+152
-41
lines changed

9 files changed

+152
-41
lines changed

.eslintignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
client
1+
/client
2+
!/test/client
23
coverage
34
client-src/live/web_modules/
45
node_modules

.prettierignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
client
1+
/client
2+
!/test/client
23
coverage
34
client-src/live/web_modules/
45
node_modules

client-src/default/index.js

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
/* global __resourceQuery WorkerGlobalScope self */
44
/* eslint prefer-destructuring: off */
55
const stripAnsi = require('strip-ansi');
6-
const log = require('loglevel').getLogger('webpack-dev-server');
76
const socket = require('./socket');
87
const overlay = require('./overlay');
8+
const { log, setLogLevel } = require('./utils/log');
99
const sendMessage = require('./utils/sendMessage');
1010
const reloadApp = require('./utils/reloadApp');
1111
const createSocketUrl = require('./utils/createSocketUrl');
@@ -34,21 +34,6 @@ if (typeof window !== 'undefined') {
3434
options.hotReload = qs.indexOf('hotreload=false') === -1;
3535
}
3636

37-
const INFO = 'info';
38-
const WARN = 'warn';
39-
const ERROR = 'error';
40-
const DEBUG = 'debug';
41-
const TRACE = 'trace';
42-
const SILENT = 'silent';
43-
// deprecated
44-
// TODO: remove these at major released
45-
// https://github.com/webpack/webpack-dev-server/pull/1825
46-
const WARNING = 'warning';
47-
const NONE = 'none';
48-
49-
// Set the default log level
50-
log.setDefaultLevel(INFO);
51-
5237
const onSocketMsg = {
5338
hot() {
5439
options.hot = true;
@@ -81,27 +66,7 @@ const onSocketMsg = {
8166
if (hotCtx.keys().indexOf('./log') !== -1) {
8267
hotCtx('./log').setLogLevel(level);
8368
}
84-
switch (level) {
85-
case INFO:
86-
case WARN:
87-
case DEBUG:
88-
case TRACE:
89-
case ERROR:
90-
log.setLevel(level);
91-
break;
92-
// deprecated
93-
case WARNING:
94-
// loglevel's warning name is different from webpack's
95-
log.setLevel('warn');
96-
break;
97-
// deprecated
98-
case NONE:
99-
case SILENT:
100-
log.disableAll();
101-
break;
102-
default:
103-
log.error(`[WDS] Unknown clientLogLevel '${level}'`);
104-
}
69+
setLogLevel(level);
10570
},
10671
overlay(value) {
10772
if (typeof document !== 'undefined') {

client-src/default/utils/log.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
'use strict';
2+
3+
const log = require('loglevel').getLogger('webpack-dev-server');
4+
5+
const INFO = 'info';
6+
const WARN = 'warn';
7+
const ERROR = 'error';
8+
const DEBUG = 'debug';
9+
const TRACE = 'trace';
10+
const SILENT = 'silent';
11+
// deprecated
12+
// TODO: remove these at major released
13+
// https://github.com/webpack/webpack-dev-server/pull/1825
14+
const WARNING = 'warning';
15+
const NONE = 'none';
16+
17+
// Set the default log level
18+
log.setDefaultLevel(INFO);
19+
20+
function setLogLevel(level) {
21+
switch (level) {
22+
case INFO:
23+
case WARN:
24+
case ERROR:
25+
case DEBUG:
26+
case TRACE:
27+
log.setLevel(level);
28+
break;
29+
// deprecated
30+
case WARNING:
31+
// loglevel's warning name is different from webpack's
32+
log.setLevel('warn');
33+
break;
34+
// deprecated
35+
case NONE:
36+
case SILENT:
37+
log.disableAll();
38+
break;
39+
default:
40+
log.error(`[WDS] Unknown clientLogLevel '${level}'`);
41+
}
42+
}
43+
44+
module.exports = {
45+
log,
46+
setLogLevel,
47+
};

client-src/default/utils/reloadApp.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
/* global WorkerGlobalScope self */
44

5-
const log = require('loglevel').getLogger('webpack-dev-server');
5+
const { log } = require('./log');
66

77
function reloadApp(
88
{ hotReload, hot, liveReload },
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`log should output exception log when the level is unknown 1`] = `"[WDS] Unknown clientLogLevel 'foo'"`;
4+
5+
exports[`log should set log level via setLogLevel 1`] = `
6+
Array [
7+
Array [
8+
"info",
9+
],
10+
Array [
11+
"warn",
12+
],
13+
Array [
14+
"error",
15+
],
16+
Array [
17+
"debug",
18+
],
19+
Array [
20+
"trace",
21+
],
22+
Array [
23+
"warn",
24+
],
25+
]
26+
`;

test/client/default/utils/createSocketUrl.test.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ describe('createSocketUrl', () => {
1616
];
1717

1818
samples.forEach((url) => {
19-
jest.doMock('../../../../client-src/default/utils/getCurrentScriptSource.js', () => () => url);
19+
jest.doMock(
20+
'../../../../client-src/default/utils/getCurrentScriptSource.js',
21+
() => () => url
22+
);
23+
24+
// eslint-disable-next-line global-require
2025
const createSocketUrl = require('../../../../client-src/default/utils/createSocketUrl');
2126

2227
test(`should return the url when __resourceQuery is ${url}`, () => {
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
'use strict';
2+
3+
describe('log', () => {
4+
let logMock;
5+
let setLogLevel;
6+
7+
beforeEach(() => {
8+
jest.mock('loglevel');
9+
// eslint-disable-next-line global-require
10+
logMock = require('loglevel');
11+
logMock.getLogger.mockImplementation(() => {
12+
return {
13+
error: jest.fn(),
14+
setLevel: jest.fn(),
15+
setDefaultLevel: jest.fn(),
16+
disableAll: jest.fn(),
17+
};
18+
});
19+
20+
// eslint-disable-next-line global-require
21+
setLogLevel = require('../../../../client-src/default/utils/log')
22+
.setLogLevel;
23+
});
24+
25+
afterEach(() => {
26+
jest.resetAllMocks();
27+
jest.resetModules();
28+
});
29+
30+
test('should set info as the default level', () => {
31+
const setDefaultLevel =
32+
logMock.getLogger.mock.results[0].value.setDefaultLevel;
33+
34+
expect(setDefaultLevel).toBeCalled();
35+
expect(setDefaultLevel.mock.calls[0][0]).toEqual('info');
36+
});
37+
38+
test('should set log level via setLogLevel', () => {
39+
['info', 'warn', 'error', 'debug', 'trace', 'warning'].forEach((level) => {
40+
setLogLevel(level);
41+
});
42+
43+
expect(
44+
logMock.getLogger.mock.results[0].value.setLevel.mock.calls
45+
).toMatchSnapshot();
46+
});
47+
48+
test('should set none and silent via setLogLevel', () => {
49+
['none', 'silent'].forEach((level) => {
50+
setLogLevel(level);
51+
});
52+
53+
expect(
54+
logMock.getLogger.mock.results[0].value.disableAll.mock.results
55+
).toHaveLength(2);
56+
});
57+
58+
test('should output exception log when the level is unknown', () => {
59+
setLogLevel('foo');
60+
61+
expect(
62+
logMock.getLogger.mock.results[0].value.error.mock.calls[0][0]
63+
).toMatchSnapshot();
64+
});
65+
});

test/client/default/utils/reloadApp.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ describe('reloadApp', () => {
1818
log.getLogger.mockImplementation(() => {
1919
return {
2020
info: jest.fn(),
21+
setDefaultLevel: jest.fn(),
2122
};
2223
});
2324

0 commit comments

Comments
 (0)