|
'use strict';
|
|
|
|
function getSocketServerImplementation(options) {
|
|
let ServerImplementation;
|
|
let serverImplFound = true;
|
|
switch (typeof options.transportMode.server) {
|
|
case 'string':
|
|
// could be 'sockjs', in the future 'ws', or a path that should be required
|
|
if (options.transportMode.server === 'sockjs') {
|
|
ServerImplementation = require('../servers/SockJSServer');
|
|
} else if (options.transportMode.server === 'ws') {
|
|
ServerImplementation = require('../servers/WebsocketServer');
|
|
} else {
|
|
try {
|
|
// eslint-disable-next-line import/no-dynamic-require
|
|
ServerImplementation = require(options.transportMode.server);
|
|
} catch (e) {
|
|
serverImplFound = false;
|
|
}
|
|
}
|
|
break;
|
|
case 'function':
|
|
// potentially do more checks here to confirm that the user implemented this properlly
|
|
// since errors could be difficult to understand
|
|
ServerImplementation = options.transportMode.server;
|
|
break;
|
|
default:
|
|
serverImplFound = false;
|
|
}
|
|
|
|
if (!serverImplFound) {
|
|
throw new Error(
|
|
"transportMode.server must be a string denoting a default implementation (e.g. 'sockjs', 'ws'), a full path to " +
|
|
'a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer) ' +
|
|
'via require.resolve(...), or the class itself which extends BaseServer'
|
|
);
|
|
}
|
|
|
|
return ServerImplementation;
|
|
}
|
|
|
|
module.exports = getSocketServerImplementation;
|