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; | ||
|  | }; |