43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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;
 | 
