Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb5b9cb4

Browse files
knagaitsevhiroppy
authored andcommitted
feat(server): add transportMode (#2116)
* feat(server): add transport mode* fix(transport): update transport e2e test and rename tests* test(options): fixed options test* refactor(server): move transport mode default setting into helper
1 parent460f15a commitb5b9cb4

21 files changed

+1085
-800
lines changed

‎lib/Server.js‎

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,9 @@ class Server {
6161

6262
this.log=_log||createLogger(options);
6363

64-
if(this.options.serverMode!==undefined){
64+
if(this.options.transportMode!==undefined){
6565
this.log.warn(
66-
'serverMode is an experimental option, meaning its usage could potentially change without warning'
67-
);
68-
}
69-
70-
if(this.options.clientMode!==undefined){
71-
this.log.warn(
72-
'clientMode is an experimental option, meaning its usage could potentially change without warning'
66+
'transportMode is an experimental option, meaning its usage could potentially change without warning'
7367
);
7468
}
7569

@@ -672,7 +666,7 @@ class Server {
672666

673667
if(!headers){
674668
this.log.warn(
675-
'serverMode implementation must pass headers to the callback of onConnection(f) '+
669+
'transportMode.server implementation must pass headers to the callback of onConnection(f) '+
676670
'via f(connection, headers) in order for clients to pass a headers security check'
677671
);
678672
}

‎lib/options.json‎

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,6 @@
4848
"warning"
4949
]
5050
},
51-
"clientMode": {
52-
"type":"string"
53-
},
5451
"compress": {
5552
"type":"boolean"
5653
},
@@ -303,16 +300,6 @@
303300
"serveIndex": {
304301
"type":"boolean"
305302
},
306-
"serverMode": {
307-
"anyOf": [
308-
{
309-
"type":"string"
310-
},
311-
{
312-
"instanceof":"Function"
313-
}
314-
]
315-
},
316303
"serverSideRender": {
317304
"type":"boolean"
318305
},
@@ -364,6 +351,32 @@
364351
}
365352
]
366353
},
354+
"transportMode": {
355+
"anyOf": [
356+
{
357+
"type":"object",
358+
"properties": {
359+
"client": {
360+
"type":"string"
361+
},
362+
"server": {
363+
"anyOf": [
364+
{
365+
"type":"string"
366+
},
367+
{
368+
"instanceof":"Function"
369+
}
370+
]
371+
}
372+
},
373+
"additionalProperties":false
374+
},
375+
{
376+
"enum": ["sockjs","ws"]
377+
}
378+
]
379+
},
367380
"useLocalIp": {
368381
"type":"boolean"
369382
},
@@ -396,7 +409,6 @@
396409
"ca":"should be {String|Buffer}",
397410
"cert":"should be {String|Buffer}",
398411
"clientLogLevel":"should be {String} and equal to one of the allowed values\n\n [ 'none', 'silent', 'info', 'debug', 'trace', 'error', 'warning', 'warn' ]\n\n (https://webpack.js.org/configuration/dev-server/#devserverclientloglevel)",
399-
"clientMode":"should be {String} (https://webpack.js.org/configuration/dev-server/#devserverclientmode)",
400412
"compress":"should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devservercompress)",
401413
"contentBase":"should be {Number|String|Array} (https://webpack.js.org/configuration/dev-server/#devservercontentbase)",
402414
"disableHostCheck":"should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverdisablehostcheck)",
@@ -438,7 +450,6 @@
438450
"reporter":"should be {Function} (https://github.com/webpack/webpack-dev-middleware#reporter)",
439451
"requestCert":"should be {Boolean}",
440452
"serveIndex":"should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverserveindex)",
441-
"serverMode":"should be {String|Function} (https://webpack.js.org/configuration/dev-server/#devserverservermode)",
442453
"serverSideRender":"should be {Boolean} (https://github.com/webpack/webpack-dev-middleware#serversiderender)",
443454
"setup":"should be {Function} (https://webpack.js.org/configuration/dev-server/#devserversetup)",
444455
"sockHost":"should be {String|Null} (https://webpack.js.org/configuration/dev-server/#devserversockhost)",
@@ -447,6 +458,7 @@
447458
"socket":"should be {String} (https://webpack.js.org/configuration/dev-server/#devserversocket)",
448459
"staticOptions":"should be {Object} (https://webpack.js.org/configuration/dev-server/#devserverstaticoptions)",
449460
"stats":"should be {Object|Boolean} (https://webpack.js.org/configuration/dev-server/#devserverstats-)",
461+
"transportMode":"should be {String|Object} (https://webpack.js.org/configuration/dev-server/#devservertransportmode)",
450462
"useLocalIp":"should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserveruselocalip)",
451463
"warn":"should be {Function}",
452464
"watchContentBase":"should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverwatchcontentbase)",

‎lib/utils/getSocketClientPath.js‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
functiongetSocketClientPath(options){
44
letClientImplementation;
55
letclientImplFound=true;
6-
switch(typeofoptions.clientMode){
6+
switch(typeofoptions.transportMode.client){
77
case'string':
88
// could be 'sockjs', 'ws', or a path that should be required
9-
if(options.clientMode==='sockjs'){
9+
if(options.transportMode.client==='sockjs'){
1010
ClientImplementation=require('../../client/clients/SockJSClient');
11-
}elseif(options.clientMode==='ws'){
11+
}elseif(options.transportMode.client==='ws'){
1212
ClientImplementation=require('../../client/clients/WebsocketClient');
1313
}else{
1414
try{
1515
// eslint-disable-next-line import/no-dynamic-require
16-
ClientImplementation=require(options.clientMode);
16+
ClientImplementation=require(options.transportMode.client);
1717
}catch(e){
1818
clientImplFound=false;
1919
}
@@ -25,7 +25,7 @@ function getSocketClientPath(options) {
2525

2626
if(!clientImplFound){
2727
thrownewError(
28-
"clientMode must be a string denoting a default implementation (e.g. 'sockjs', 'ws') or a full path to "+
28+
"transportMode.client must be a string denoting a default implementation (e.g. 'sockjs', 'ws') or a full path to "+
2929
'a JS file which exports a class extending BaseClient (webpack-dev-server/client-src/clients/BaseClient) '+
3030
'via require.resolve(...)'
3131
);

‎lib/utils/getSocketServerImplementation.js‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
functiongetSocketServerImplementation(options){
44
letServerImplementation;
55
letserverImplFound=true;
6-
switch(typeofoptions.serverMode){
6+
switch(typeofoptions.transportMode.server){
77
case'string':
88
// could be 'sockjs', in the future 'ws', or a path that should be required
9-
if(options.serverMode==='sockjs'){
9+
if(options.transportMode.server==='sockjs'){
1010
ServerImplementation=require('../servers/SockJSServer');
11-
}elseif(options.serverMode==='ws'){
11+
}elseif(options.transportMode.server==='ws'){
1212
ServerImplementation=require('../servers/WebsocketServer');
1313
}else{
1414
try{
1515
// eslint-disable-next-line import/no-dynamic-require
16-
ServerImplementation=require(options.serverMode);
16+
ServerImplementation=require(options.transportMode.server);
1717
}catch(e){
1818
serverImplFound=false;
1919
}
@@ -22,15 +22,15 @@ function getSocketServerImplementation(options) {
2222
case'function':
2323
// potentially do more checks here to confirm that the user implemented this properlly
2424
// since errors could be difficult to understand
25-
ServerImplementation=options.serverMode;
25+
ServerImplementation=options.transportMode.server;
2626
break;
2727
default:
2828
serverImplFound=false;
2929
}
3030

3131
if(!serverImplFound){
3232
thrownewError(
33-
"serverMode must be a string denoting a default implementation (e.g. 'sockjs', 'ws'), a full path to "+
33+
"transportMode.server must be a string denoting a default implementation (e.g. 'sockjs', 'ws'), a full path to "+
3434
'a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer) '+
3535
'via require.resolve(...), or the class itself which extends BaseServer'
3636
);

‎lib/utils/normalizeOptions.js‎

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,25 @@ function normalizeOptions(compiler, options) {
99
options.contentBase=
1010
options.contentBase!==undefined ?options.contentBase :process.cwd();
1111

12-
// set serverMode default
13-
if(options.serverMode===undefined){
14-
options.serverMode='sockjs';
15-
}
16-
17-
// set clientMode default
18-
if(options.clientMode===undefined){
19-
options.clientMode='sockjs';
12+
// normalize transportMode option
13+
if(options.transportMode===undefined){
14+
options.transportMode={
15+
server:'sockjs',
16+
client:'sockjs',
17+
};
18+
}else{
19+
switch(typeofoptions.transportMode){
20+
case'string':
21+
options.transportMode={
22+
server:options.transportMode,
23+
client:options.transportMode,
24+
};
25+
break;
26+
// if not a string, it is an object
27+
default:
28+
options.transportMode.server=options.transportMode.server||'sockjs';
29+
options.transportMode.client=options.transportMode.client||'sockjs';
30+
}
2031
}
2132

2233
if(!options.watchOptions){

‎test/e2e/Client.test.js‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,17 @@ const cssFilePath = resolve(__dirname, '../fixtures/reload-config/main.css');
2323
describe('reload',()=>{
2424
constmodes=[
2525
{
26-
title:'hot with defaultclientMode (sockjs)',
26+
title:'hot with defaulttransportMode.client (sockjs)',
2727
options:{
2828
hot:true,
2929
},
3030
shouldRefresh:false,
3131
},
3232
{
33-
title:'hot withclientMode ws',
33+
title:'hot withtransportMode.client ws',
3434
options:{
3535
hot:true,
36-
clientMode:'ws',
37-
serverMode:require.resolve('../../lib/servers/WebsocketServer'),
36+
transportMode:'ws',
3837
},
3938
shouldRefresh:false,
4039
},

‎test/e2e/ProvidePlugin.test.js‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const port = require('../ports-map').ProvidePlugin;
88
const{ beforeBrowserCloseDelay}=require('../helpers/puppeteer-constants');
99

1010
describe('ProvidePlugin',()=>{
11-
describe('inline with defaultclientMode (sockjs)',()=>{
11+
describe('inline with defaulttransportMode.client (sockjs)',()=>{
1212
beforeAll((done)=>{
1313
constoptions={
1414
port,
@@ -46,14 +46,13 @@ describe('ProvidePlugin', () => {
4646
});
4747
});
4848

49-
describe('inline withclientMode ws',()=>{
49+
describe('inline withtransportMode.client ws',()=>{
5050
beforeAll((done)=>{
5151
constoptions={
5252
port,
5353
host:'0.0.0.0',
5454
inline:true,
55-
clientMode:'ws',
56-
serverMode:require.resolve('../../lib/servers/WebsocketServer'),
55+
transportMode:'ws',
5756
watchOptions:{
5857
poll:true,
5958
},
Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,35 @@
33
consttestServer=require('../helpers/test-server');
44
constconfig=require('../fixtures/client-config/webpack.config');
55
construnBrowser=require('../helpers/run-browser');
6-
constport=require('../ports-map').ClientMode;
6+
constport=require('../ports-map').TransportMode;
77
const{
88
initConsoleDelay,
99
awaitServerCloseDelay,
1010
}=require('../helpers/puppeteer-constants');
1111

12-
describe('clientMode',()=>{
12+
describe('transportMode client',()=>{
1313
constmodes=[
1414
{
1515
title:'sockjs',
1616
options:{
17-
clientMode:'sockjs',
17+
transportMode:'sockjs',
1818
},
1919
},
2020
{
2121
title:'ws',
2222
options:{
23-
clientMode:'ws',
24-
serverMode:require.resolve('../../lib/servers/WebsocketServer'),
23+
transportMode:'ws',
2524
},
2625
},
2726
{
2827
title:'custom client',
2928
options:{
30-
clientMode:require.resolve(
31-
'../fixtures/custom-client/CustomSockJSClient'
32-
),
29+
transportMode:{
30+
server:'sockjs',
31+
client:require.resolve(
32+
'../fixtures/custom-client/CustomSockJSClient'
33+
),
34+
},
3335
},
3436
},
3537
];

test/e2e/__snapshots__/ClientMode.test.js.snap renamed to test/e2e/__snapshots__/TransportMode.test.js.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`clientMode custom client on browser client logs correctly 1`]=`
3+
exports[`transportMode client custom client on browser client logs correctly 1`]=`
44
Array [
55
"Hey.",
66
"open",
@@ -13,15 +13,15 @@ Array [
1313
]
1414
`;
1515

16-
exports[`clientMode sockjs on browser client logs correctly 1`]=`
16+
exports[`transportMode client sockjs on browser client logs correctly 1`]=`
1717
Array [
1818
"Hey.",
1919
"[WDS] Live Reloading enabled.",
2020
"[WDS] Disconnected!",
2121
]
2222
`;
2323

24-
exports[`clientMode ws on browser client logs correctly 1`]=`
24+
exports[`transportMode client ws on browser client logs correctly 1`]=`
2525
Array [
2626
"Hey.",
2727
"[WDS] Live Reloading enabled.",

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp