Skip to content

Commit b5bc05c

Browse files
heygradyhiroppy
authored andcommitted
add fs option (#1819)
* add fs option, fix validation test (#1818) * adding some more tests * sort and normalize options
1 parent 5195bfa commit b5bc05c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+3884
-281
lines changed

lib/options.json

Lines changed: 213 additions & 209 deletions
Large diffs are not rendered by default.

lib/utils/createConfig.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function createConfig(config, argv, { port }) {
3333
if (argv.sockPath) {
3434
options.sockPath = argv.sockPath;
3535
}
36-
36+
3737
if (argv.sockPort) {
3838
options.sockPort = argv.sockPort;
3939
}

package-lock.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
"less-loader": "4.1.0",
8181
"lint-staged": "8.1.5",
8282
"marked": "0.6.2",
83+
"memfs": "2.15.2",
8384
"nyc": "14.0.0",
8485
"prettier": "1.17.0",
8586
"puppeteer": "1.15.0",

test/Validation.test.js

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
no-shadow,
55
array-bracket-spacing
66
*/
7+
78
const webpack = require('webpack');
89
const Server = require('../lib/Server');
10+
const schema = require('../lib/options.json');
911
const config = require('./fixtures/simple-config/webpack.config');
1012

13+
const messages = schema.errorMessage.properties;
14+
1115
describe('Validation', () => {
1216
let compiler;
1317
let server;
@@ -32,44 +36,38 @@ describe('Validation', () => {
3236
{
3337
name: 'invalid `hot` configuration',
3438
config: { hot: 'false' },
35-
message:
36-
'options.hot should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-hot)\n',
39+
message: `options.hot ${messages.hot}`,
3740
},
3841
{
3942
name: 'invalid `logLevel` configuration',
4043
config: { logLevel: 1 },
41-
message:
42-
'options.logLevel should be {String} and equal to one of the allowed values',
44+
message: `options.logLevel ${messages.logLevel.split('\n\n')[0]}`,
4345
},
4446
{
4547
name: 'invalid `writeToDisk` configuration',
4648
config: { writeToDisk: 1 },
47-
message:
48-
'options.writeToDisk should be {Boolean|Function} (https://github.com/webpack/webpack-dev-middleware#writetodisk)\n',
49+
message: `options.writeToDisk ${messages.writeToDisk}`,
4950
},
5051
{
5152
name: 'invalid `overlay` configuration',
5253
config: { overlay: { errors: 1 } },
53-
message:
54-
'options.overlay should be {Object|Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-overlay)\n',
54+
message: `options.overlay ${messages.overlay}`,
5555
},
5656
{
5757
name: 'invalid `contentBase` configuration',
5858
config: { contentBase: [0] },
59-
message:
60-
'options.contentBase should be {Array} (https://webpack.js.org/configuration/dev-server/#devserver-contentbase)\n',
59+
message: `options.contentBase ${messages.contentBase}`,
6160
},
6261
{
6362
name: 'no additional properties',
6463
config: { additional: true },
65-
message: 'options should NOT have additional properties\n',
64+
message: 'options should NOT have additional properties',
6665
},
6766
];
6867

6968
tests.forEach((test) => {
7069
it(`should fail validation for ${test.name}`, () => {
7170
try {
72-
// eslint-disable-next-line no-new
7371
server = new Server(compiler, test.config);
7472
} catch (err) {
7573
if (err.name !== 'ValidationError') {
@@ -79,7 +77,7 @@ describe('Validation', () => {
7977
const [title, message] = err.message.split('\n\n');
8078

8179
expect(title).toEqual('webpack Dev Server Invalid Options');
82-
expect(message).toEqual(test.message);
80+
expect(message.trim()).toEqual(test.message);
8381

8482
return;
8583
}
@@ -98,7 +96,6 @@ describe('Validation', () => {
9896

9997
it('should allow filename to be a function', () => {
10098
try {
101-
// eslint-disable-next-line no-new
10299
server = new Server(compiler, { filename: () => {} });
103100
} catch (err) {
104101
if (err === 'ValidationError') {

test/cli.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ describe('CLI', () => {
6969
})
7070
.catch(done);
7171
});
72-
72+
7373
it('--color', (done) => {
7474
runDevServer('--color')
7575
.then((output) => {

test/options/__snapshots__/options.test.js.snap

Lines changed: 60 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,70 +2,71 @@
22

33
exports[`options should return errorMessage 1`] = `
44
Object {
5-
"after": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserver-after)",
6-
"allowedHosts": "should be {Array} (https://webpack.js.org/configuration/dev-server/#devserver-allowedhosts)",
7-
"before": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserver-before)",
8-
"bonjour": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-bonjour)",
9-
"ca": "should be {String|Buffer} (https://webpack.js.org/configuration/dev-server/#devserver-ca)",
10-
"cert": "should be {String|Buffer} (https://webpack.js.org/configuration/dev-server/#devserver-cert)",
5+
"after": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserverafter)",
6+
"allowedHosts": "should be {Array} (https://webpack.js.org/configuration/dev-server/#devserverallowedhosts)",
7+
"before": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserverbefore)",
8+
"bonjour": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverbonjour)",
9+
"ca": "should be {String|Buffer}",
10+
"cert": "should be {String|Buffer}",
1111
"clientLogLevel": "should be {String} and equal to one of the allowed values
1212
13-
[ 'trace', 'debug', 'info', 'warn', 'error', 'silent' ]
13+
[ 'none', 'info', 'error', 'warning' ]
1414
15-
(https://webpack.js.org/configuration/dev-server/#devserver-clientloglevel)",
16-
"compress": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-compress)",
17-
"contentBase": "should be {Array} (https://webpack.js.org/configuration/dev-server/#devserver-contentbase)",
18-
"disableHostCheck": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-disablehostcheck)",
19-
"features": "should be {Array} (https://webpack.js.org/configuration/dev-server/#devserver-features)",
20-
"filename": "should be {String|RegExp|Function} (https://webpack.js.org/configuration/dev-server/#devserver-filename-)",
21-
"headers": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devserver-headers-)",
22-
"historyApiFallback": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-historyapifallback)",
23-
"host": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserver-host)",
24-
"hot": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-hot)",
25-
"hotOnly": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-hotonly)",
26-
"http2": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-http2)",
27-
"https": "should be {Object|Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-https)",
28-
"index": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserver-index)",
29-
"injectClient": "should be {Array}",
30-
"injectHot": "should be {Array}",
31-
"inline": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-inline)",
32-
"key": "should be {String|Buffer} (https://webpack.js.org/configuration/dev-server/#devserver-key)",
33-
"lazy": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-lazy-)",
34-
"log": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserver-log)",
15+
(https://webpack.js.org/configuration/dev-server/#devserverclientloglevel)",
16+
"compress": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devservercompress)",
17+
"contentBase": "should be {Number|String|Array} (https://webpack.js.org/configuration/dev-server/#devservercontentbase)",
18+
"disableHostCheck": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverdisablehostcheck)",
19+
"features": "should be {Array}",
20+
"filename": "should be {String|RegExp|Function} (https://webpack.js.org/configuration/dev-server/#devserverfilename-)",
21+
"fs": "should be {Object} (https://github.com/webpack/webpack-dev-middleware#fs)",
22+
"headers": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devserverheaders-)",
23+
"historyApiFallback": "should be {Boolean|Object} (https://webpack.js.org/configuration/dev-server/#devserverhistoryapifallback)",
24+
"host": "should be {String|Null} (https://webpack.js.org/configuration/dev-server/#devserverhost)",
25+
"hot": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverhot)",
26+
"hotOnly": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverhotonly)",
27+
"http2": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverhttp2)",
28+
"https": "should be {Object|Boolean} (https://webpack.js.org/configuration/dev-server/#devserverhttps)",
29+
"index": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserverindex)",
30+
"injectClient": "should be {Boolean|Function}",
31+
"injectHot": "should be {Boolean|Function}",
32+
"inline": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverinline)",
33+
"key": "should be {String|Buffer}",
34+
"lazy": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverlazy-)",
35+
"log": "should be {Function}",
3536
"logLevel": "should be {String} and equal to one of the allowed values
3637
37-
[ 'trace', 'debug', 'info', 'warn', 'error', 'silent' ]
38+
[ 'info', 'warn', 'error', 'debug', 'trace', 'silent' ]
3839
39-
(https://webpack.js.org/configuration/dev-server/#devserver-loglevel)",
40-
"logTime": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-logtime)",
40+
(https://github.com/webpack/webpack-dev-middleware#loglevel)",
41+
"logTime": "should be {Boolean} (https://github.com/webpack/webpack-dev-middleware#logtime)",
4142
"mimeTypes": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devservermimetypes-)",
42-
"noInfo": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-noinfo-)",
43-
"open": "should be {String|Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-open)",
44-
"openPage": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserver-openpage)",
45-
"overlay": "should be {Object|Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-overlay)",
46-
"pfx": "should be {String|Buffer} (https://webpack.js.org/configuration/dev-server/#devserver-pfx)",
47-
"pfxPassphrase": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserver-pfxpassphrase)",
48-
"port": "should be {String|Number} (https://webpack.js.org/configuration/dev-server/#devserver-port)",
49-
"progress": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-progress-cli-only)",
50-
"proxy": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-hot)",
51-
"public": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserver-public)",
52-
"publicPath": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserver-publicpath-)",
53-
"quiet": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-quiet-)",
54-
"reporter": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserver-reporter)",
55-
"requestCert": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-requestcert)",
43+
"noInfo": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devservernoinfo-)",
44+
"open": "should be {String|Boolean} (https://webpack.js.org/configuration/dev-server/#devserveropen)",
45+
"openPage": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserveropenpage)",
46+
"overlay": "should be {Boolean|Object} (https://webpack.js.org/configuration/dev-server/#devserveroverlay)",
47+
"pfx": "should be {String|Buffer} (https://webpack.js.org/configuration/dev-server/#devserverpfx)",
48+
"pfxPassphrase": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserverpfxpassphrase)",
49+
"port": "should be {Number|String|Null} (https://webpack.js.org/configuration/dev-server/#devserverport)",
50+
"progress": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverprogress---cli-only)",
51+
"proxy": "should be {Object|Array} (https://webpack.js.org/configuration/dev-server/#devserverproxy)",
52+
"public": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserverpublic)",
53+
"publicPath": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserverpublicpath-)",
54+
"quiet": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverquiet-)",
55+
"reporter": "should be {Function} (https://github.com/webpack/webpack-dev-middleware#reporter)",
56+
"requestCert": "should be {Boolean}",
5657
"serveIndex": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverserveindex)",
57-
"serverSideRender": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-serversiderender)",
58-
"setup": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserver-setup)",
59-
"sockPath": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserver-sockPath)",
60-
"sockPort": "should be {Array}",
61-
"socket": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserver-socket)",
62-
"staticOptions": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-staticOptions)",
63-
"stats": "should be {Boolean|Object|String} (https://webpack.js.org/configuration/dev-server/#devserver-stats-)",
64-
"useLocalIp": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-uselocalip)",
65-
"warn": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserver-warn)",
66-
"watchContentBase": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserver-watchcontentbase)",
67-
"watchOptions": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devserver-watchoptions)",
68-
"writeToDisk": "should be {Boolean|Function} (https://github.com/webpack/webpack-dev-middleware#writetodisk)",
58+
"serverSideRender": "should be {Boolean} (https://github.com/webpack/webpack-dev-middleware#serversiderender)",
59+
"setup": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserversetup)",
60+
"sockPath": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserversockpath)",
61+
"sockPort": "should be {Number|String|Null}",
62+
"socket": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserversocket)",
63+
"staticOptions": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devserverstaticoptions)",
64+
"stats": "should be {Object|Boolean} (https://webpack.js.org/configuration/dev-server/#devserverstats-)",
65+
"useLocalIp": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserveruselocalip)",
66+
"warn": "should be {Function}",
67+
"watchContentBase": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverwatchcontentbase)",
68+
"watchOptions": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devserverwatchoptions-)",
69+
"writeToDisk": "should be {Boolean|Function} (https://webpack.js.org/configuration/dev-server/#devserverwritetodisk-)",
6970
}
7071
`;
7172
@@ -161,6 +162,9 @@ Object {
161162
},
162163
],
163164
},
165+
"fs": Object {
166+
"type": "object",
167+
},
164168
"headers": Object {
165169
"type": "object",
166170
},

test/options/after.test.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
'use strict';
2+
3+
const ValidationError = require('schema-utils/src/ValidationError');
4+
const webpack = require('webpack');
5+
const Server = require('../../lib/Server');
6+
const config = require('../fixtures/simple-config/webpack.config');
7+
8+
describe('Validation', () => {
9+
let compiler;
10+
let server;
11+
12+
beforeAll(() => {
13+
compiler = webpack(config);
14+
});
15+
16+
describe('after', () => {
17+
beforeEach(() => {
18+
server = null;
19+
});
20+
afterEach((done) => {
21+
if (server) {
22+
server.close(() => {
23+
done();
24+
});
25+
} else {
26+
done();
27+
}
28+
});
29+
30+
it('should allow after to be function', () => {
31+
let error = null;
32+
try {
33+
const after = () => {};
34+
35+
server = new Server(compiler, { after });
36+
} catch (err) {
37+
error = err;
38+
}
39+
expect(error).toBe(null);
40+
});
41+
42+
it('should not allow after to be the wrong type', () => {
43+
let error = null;
44+
try {
45+
server = new Server(compiler, { after: false });
46+
} catch (err) {
47+
error = err;
48+
}
49+
expect(error).toBeInstanceOf(ValidationError);
50+
});
51+
});
52+
});

0 commit comments

Comments
 (0)