Path: blob/master/node_modules/axios/lib/core/mergeConfig.js
1126 views
'use strict';12var utils = require('../utils');34/**5* Config-specific merge-function which creates a new config-object6* by merging two configuration objects together.7*8* @param {Object} config19* @param {Object} config210* @returns {Object} New object resulting from merging config2 to config111*/12module.exports = function mergeConfig(config1, config2) {13// eslint-disable-next-line no-param-reassign14config2 = config2 || {};15var config = {};1617function getMergedValue(target, source) {18if (utils.isPlainObject(target) && utils.isPlainObject(source)) {19return utils.merge(target, source);20} else if (utils.isPlainObject(source)) {21return utils.merge({}, source);22} else if (utils.isArray(source)) {23return source.slice();24}25return source;26}2728// eslint-disable-next-line consistent-return29function mergeDeepProperties(prop) {30if (!utils.isUndefined(config2[prop])) {31return getMergedValue(config1[prop], config2[prop]);32} else if (!utils.isUndefined(config1[prop])) {33return getMergedValue(undefined, config1[prop]);34}35}3637// eslint-disable-next-line consistent-return38function valueFromConfig2(prop) {39if (!utils.isUndefined(config2[prop])) {40return getMergedValue(undefined, config2[prop]);41}42}4344// eslint-disable-next-line consistent-return45function defaultToConfig2(prop) {46if (!utils.isUndefined(config2[prop])) {47return getMergedValue(undefined, config2[prop]);48} else if (!utils.isUndefined(config1[prop])) {49return getMergedValue(undefined, config1[prop]);50}51}5253// eslint-disable-next-line consistent-return54function mergeDirectKeys(prop) {55if (prop in config2) {56return getMergedValue(config1[prop], config2[prop]);57} else if (prop in config1) {58return getMergedValue(undefined, config1[prop]);59}60}6162var mergeMap = {63'url': valueFromConfig2,64'method': valueFromConfig2,65'data': valueFromConfig2,66'baseURL': defaultToConfig2,67'transformRequest': defaultToConfig2,68'transformResponse': defaultToConfig2,69'paramsSerializer': defaultToConfig2,70'timeout': defaultToConfig2,71'timeoutMessage': defaultToConfig2,72'withCredentials': defaultToConfig2,73'adapter': defaultToConfig2,74'responseType': defaultToConfig2,75'xsrfCookieName': defaultToConfig2,76'xsrfHeaderName': defaultToConfig2,77'onUploadProgress': defaultToConfig2,78'onDownloadProgress': defaultToConfig2,79'decompress': defaultToConfig2,80'maxContentLength': defaultToConfig2,81'maxBodyLength': defaultToConfig2,82'transport': defaultToConfig2,83'httpAgent': defaultToConfig2,84'httpsAgent': defaultToConfig2,85'cancelToken': defaultToConfig2,86'socketPath': defaultToConfig2,87'responseEncoding': defaultToConfig2,88'validateStatus': mergeDirectKeys89};9091utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {92var merge = mergeMap[prop] || mergeDeepProperties;93var configValue = merge(prop);94(utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);95});9697return config;98};99100101