81 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.createConfig = void 0;
 | |
| const isPlainObj = require("is-plain-obj");
 | |
| const url = require("url");
 | |
| const errors_1 = require("./errors");
 | |
| const logger_1 = require("./logger");
 | |
| const logger = (0, logger_1.getInstance)();
 | |
| function createConfig(context, opts) {
 | |
|     // structure of config object to be returned
 | |
|     const config = {
 | |
|         context: undefined,
 | |
|         options: {},
 | |
|     };
 | |
|     // app.use('/api', proxy({target:'http://localhost:9000'}));
 | |
|     if (isContextless(context, opts)) {
 | |
|         config.context = '/';
 | |
|         config.options = Object.assign(config.options, context);
 | |
|         // app.use('/api', proxy('http://localhost:9000'));
 | |
|         // app.use(proxy('http://localhost:9000/api'));
 | |
|     }
 | |
|     else if (isStringShortHand(context)) {
 | |
|         const oUrl = url.parse(context);
 | |
|         const target = [oUrl.protocol, '//', oUrl.host].join('');
 | |
|         config.context = oUrl.pathname || '/';
 | |
|         config.options = Object.assign(config.options, { target }, opts);
 | |
|         if (oUrl.protocol === 'ws:' || oUrl.protocol === 'wss:') {
 | |
|             config.options.ws = true;
 | |
|         }
 | |
|         // app.use('/api', proxy({target:'http://localhost:9000'}));
 | |
|     }
 | |
|     else {
 | |
|         config.context = context;
 | |
|         config.options = Object.assign(config.options, opts);
 | |
|     }
 | |
|     configureLogger(config.options);
 | |
|     if (!config.options.target && !config.options.router) {
 | |
|         throw new Error(errors_1.ERRORS.ERR_CONFIG_FACTORY_TARGET_MISSING);
 | |
|     }
 | |
|     return config;
 | |
| }
 | |
| exports.createConfig = createConfig;
 | |
| /**
 | |
|  * Checks if a String only target/config is provided.
 | |
|  * This can be just the host or with the optional path.
 | |
|  *
 | |
|  * @example
 | |
|  *      app.use('/api', proxy('http://localhost:9000'));
 | |
|  *      app.use(proxy('http://localhost:9000/api'));
 | |
|  *
 | |
|  * @param  {String}  context [description]
 | |
|  * @return {Boolean}         [description]
 | |
|  */
 | |
| function isStringShortHand(context) {
 | |
|     if (typeof context === 'string') {
 | |
|         return !!url.parse(context).host;
 | |
|     }
 | |
| }
 | |
| /**
 | |
|  * Checks if a Object only config is provided, without a context.
 | |
|  * In this case the all paths will be proxied.
 | |
|  *
 | |
|  * @example
 | |
|  *     app.use('/api', proxy({target:'http://localhost:9000'}));
 | |
|  *
 | |
|  * @param  {Object}  context [description]
 | |
|  * @param  {*}       opts    [description]
 | |
|  * @return {Boolean}         [description]
 | |
|  */
 | |
| function isContextless(context, opts) {
 | |
|     return isPlainObj(context) && (opts == null || Object.keys(opts).length === 0);
 | |
| }
 | |
| function configureLogger(options) {
 | |
|     if (options.logLevel) {
 | |
|         logger.setLevel(options.logLevel);
 | |
|     }
 | |
|     if (options.logProvider) {
 | |
|         logger.setProvider(options.logProvider);
 | |
|     }
 | |
| }
 |