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.
		
		
		
		
		
			
		
			
				
					101 lines
				
				3.2 KiB
			
		
		
			
		
	
	
					101 lines
				
				3.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var utils = require('../utils');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Config-specific merge-function which creates a new config-object
							 | 
						||
| 
								 | 
							
								 * by merging two configuration objects together.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param {Object} config1
							 | 
						||
| 
								 | 
							
								 * @param {Object} config2
							 | 
						||
| 
								 | 
							
								 * @returns {Object} New object resulting from merging config2 to config1
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								module.exports = function mergeConfig(config1, config2) {
							 | 
						||
| 
								 | 
							
								  // eslint-disable-next-line no-param-reassign
							 | 
						||
| 
								 | 
							
								  config2 = config2 || {};
							 | 
						||
| 
								 | 
							
								  var config = {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function getMergedValue(target, source) {
							 | 
						||
| 
								 | 
							
								    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
							 | 
						||
| 
								 | 
							
								      return utils.merge(target, source);
							 | 
						||
| 
								 | 
							
								    } else if (utils.isPlainObject(source)) {
							 | 
						||
| 
								 | 
							
								      return utils.merge({}, source);
							 | 
						||
| 
								 | 
							
								    } else if (utils.isArray(source)) {
							 | 
						||
| 
								 | 
							
								      return source.slice();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return source;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // eslint-disable-next-line consistent-return
							 | 
						||
| 
								 | 
							
								  function mergeDeepProperties(prop) {
							 | 
						||
| 
								 | 
							
								    if (!utils.isUndefined(config2[prop])) {
							 | 
						||
| 
								 | 
							
								      return getMergedValue(config1[prop], config2[prop]);
							 | 
						||
| 
								 | 
							
								    } else if (!utils.isUndefined(config1[prop])) {
							 | 
						||
| 
								 | 
							
								      return getMergedValue(undefined, config1[prop]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // eslint-disable-next-line consistent-return
							 | 
						||
| 
								 | 
							
								  function valueFromConfig2(prop) {
							 | 
						||
| 
								 | 
							
								    if (!utils.isUndefined(config2[prop])) {
							 | 
						||
| 
								 | 
							
								      return getMergedValue(undefined, config2[prop]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // eslint-disable-next-line consistent-return
							 | 
						||
| 
								 | 
							
								  function defaultToConfig2(prop) {
							 | 
						||
| 
								 | 
							
								    if (!utils.isUndefined(config2[prop])) {
							 | 
						||
| 
								 | 
							
								      return getMergedValue(undefined, config2[prop]);
							 | 
						||
| 
								 | 
							
								    } else if (!utils.isUndefined(config1[prop])) {
							 | 
						||
| 
								 | 
							
								      return getMergedValue(undefined, config1[prop]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // eslint-disable-next-line consistent-return
							 | 
						||
| 
								 | 
							
								  function mergeDirectKeys(prop) {
							 | 
						||
| 
								 | 
							
								    if (prop in config2) {
							 | 
						||
| 
								 | 
							
								      return getMergedValue(config1[prop], config2[prop]);
							 | 
						||
| 
								 | 
							
								    } else if (prop in config1) {
							 | 
						||
| 
								 | 
							
								      return getMergedValue(undefined, config1[prop]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var mergeMap = {
							 | 
						||
| 
								 | 
							
								    'url': valueFromConfig2,
							 | 
						||
| 
								 | 
							
								    'method': valueFromConfig2,
							 | 
						||
| 
								 | 
							
								    'data': valueFromConfig2,
							 | 
						||
| 
								 | 
							
								    'baseURL': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'transformRequest': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'transformResponse': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'paramsSerializer': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'timeout': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'timeoutMessage': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'withCredentials': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'adapter': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'responseType': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'xsrfCookieName': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'xsrfHeaderName': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'onUploadProgress': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'onDownloadProgress': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'decompress': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'maxContentLength': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'maxBodyLength': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'beforeRedirect': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'transport': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'httpAgent': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'httpsAgent': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'cancelToken': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'socketPath': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'responseEncoding': defaultToConfig2,
							 | 
						||
| 
								 | 
							
								    'validateStatus': mergeDirectKeys
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
							 | 
						||
| 
								 | 
							
								    var merge = mergeMap[prop] || mergeDeepProperties;
							 | 
						||
| 
								 | 
							
								    var configValue = merge(prop);
							 | 
						||
| 
								 | 
							
								    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return config;
							 | 
						||
| 
								 | 
							
								};
							 |