You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.7 KiB
81 lines
2.7 KiB
2 years ago
|
"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);
|
||
|
}
|
||
|
}
|