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.
		
		
		
		
		
			
		
			
				
					
					
						
							106 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							106 lines
						
					
					
						
							3.3 KiB
						
					
					
				'use strict';
 | 
						|
 | 
						|
import utils from '../utils.js';
 | 
						|
import AxiosHeaders from "./AxiosHeaders.js";
 | 
						|
 | 
						|
const headersToObject = (thing) => thing instanceof AxiosHeaders ? thing.toJSON() : thing;
 | 
						|
 | 
						|
/**
 | 
						|
 * 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
 | 
						|
 */
 | 
						|
export default function mergeConfig(config1, config2) {
 | 
						|
  // eslint-disable-next-line no-param-reassign
 | 
						|
  config2 = config2 || {};
 | 
						|
  const config = {};
 | 
						|
 | 
						|
  function getMergedValue(target, source, caseless) {
 | 
						|
    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
 | 
						|
      return utils.merge.call({caseless}, 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(a, b, caseless) {
 | 
						|
    if (!utils.isUndefined(b)) {
 | 
						|
      return getMergedValue(a, b, caseless);
 | 
						|
    } else if (!utils.isUndefined(a)) {
 | 
						|
      return getMergedValue(undefined, a, caseless);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  // eslint-disable-next-line consistent-return
 | 
						|
  function valueFromConfig2(a, b) {
 | 
						|
    if (!utils.isUndefined(b)) {
 | 
						|
      return getMergedValue(undefined, b);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  // eslint-disable-next-line consistent-return
 | 
						|
  function defaultToConfig2(a, b) {
 | 
						|
    if (!utils.isUndefined(b)) {
 | 
						|
      return getMergedValue(undefined, b);
 | 
						|
    } else if (!utils.isUndefined(a)) {
 | 
						|
      return getMergedValue(undefined, a);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  // eslint-disable-next-line consistent-return
 | 
						|
  function mergeDirectKeys(a, b, prop) {
 | 
						|
    if (prop in config2) {
 | 
						|
      return getMergedValue(a, b);
 | 
						|
    } else if (prop in config1) {
 | 
						|
      return getMergedValue(undefined, a);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  const 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,
 | 
						|
    headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)
 | 
						|
  };
 | 
						|
 | 
						|
  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
 | 
						|
    const merge = mergeMap[prop] || mergeDeepProperties;
 | 
						|
    const configValue = merge(config1[prop], config2[prop], prop);
 | 
						|
    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
 | 
						|
  });
 | 
						|
 | 
						|
  return config;
 | 
						|
}
 |