2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-17 19:21:29 +03:00

Refactor and introduce deepMerge

This commit is contained in:
Martti Laine
2018-03-23 20:21:02 +01:00
parent d1154eae3f
commit 72c66dfdec
4 changed files with 76 additions and 41 deletions
+2 -1
View File
@@ -3,6 +3,7 @@
var utils = require('./../utils');
var InterceptorManager = require('./InterceptorManager');
var dispatchRequest = require('./dispatchRequest');
var mergeConfig = require('./mergeConfig');
/**
* Create a new instance of Axios
@@ -32,7 +33,7 @@ Axios.prototype.request = function request(config) {
config = config || {};
}
config = utils.mergeConfig(this.defaults, config);
config = mergeConfig(this.defaults, config);
config.method = config.method ? config.method.toLowerCase() : 'get';
// Hook up interceptors middleware
+44
View File
@@ -0,0 +1,44 @@
'use strict';
var utils = require('../utils');
/**
* Config-specific merge-function which creates a new config-object
* based on given defaults and instance config.
*
* @param {Object} defaults Defaults
* @param {Object} instanceConfig Instance-specific config
* @returns {Object} New object resulting from merging instanceConfig to defaults
*/
module.exports = function mergeConfig(defaults, instanceConfig) {
// eslint-disable-next-line no-param-reassign
instanceConfig = instanceConfig || {};
var config = {};
utils.forEach(['url', 'method', 'params', 'data'], function valueFromInstanceConfig(prop) {
config[prop] = instanceConfig[prop];
});
utils.forEach(['headers', 'auth', 'proxy'], function mergeInstanceConfigWithDefaults(prop) {
if (typeof instanceConfig[prop] !== 'undefined') {
if (typeof instanceConfig[prop] === 'object') {
config[prop] = utils.deepMerge(defaults[prop], instanceConfig[prop]);
} else {
config[prop] = instanceConfig[prop];
}
} else if (typeof defaults[prop] !== 'undefined') {
config[prop] = utils.deepMerge(defaults[prop]);
}
});
utils.forEach([
'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',
'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',
'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken'
], function defaultToInstanceConfig(prop) {
config[prop] = typeof instanceConfig[prop] === 'undefined' ? defaults[prop] : instanceConfig[prop];
});
return config;
};