2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-14 18:42:33 +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
+28 -39
View File
@@ -260,6 +260,32 @@ function merge(/* obj1, obj2, obj3, ... */) {
return result;
}
/**
* Function equal to merge with the difference being that no reference
* to original objects is kept.
*
* @see merge
* @param {Object} obj1 Object to merge
* @returns {Object} Result of all merge properties
*/
function deepMerge(/* obj1, obj2, obj3, ... */) {
var result = {};
function assignValue(val, key) {
if (typeof result[key] === 'object' && typeof val === 'object') {
result[key] = merge(result[key], val);
} else if (typeof val === 'object') {
result[key] = merge({}, val);
} else {
result[key] = val;
}
}
for (var i = 0, l = arguments.length; i < l; i++) {
forEach(arguments[i], assignValue);
}
return result;
}
/**
* Extends object a by mutably adding to it the properties of object b.
*
@@ -279,43 +305,6 @@ function extend(a, b, thisArg) {
return a;
}
/**
* 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
*/
function mergeConfig(defaults, instanceConfig) {
instanceConfig = instanceConfig || {};
var config = {};
forEach(['url', 'method', 'params', 'data'], function valueFromInstanceConfig(prop) {
config[prop] = instanceConfig[prop];
});
forEach(['headers', 'auth', 'proxy'], function mergeInstanceConfigWithDefaults(prop) {
if (!isUndefined(instanceConfig[prop])) {
if (isObject(instanceConfig[prop])) {
config[prop] = merge(defaults[prop], instanceConfig[prop]);
} else {
config[prop] = instanceConfig[prop];
}
} else if (!isUndefined(defaults[prop])) {
config[prop] = JSON.parse(JSON.stringify(defaults[prop]));
}
});
forEach([
'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',
'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',
'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken'
], function defaultToInstanceConfig(prop) {
config[prop] = isUndefined(instanceConfig[prop]) ? defaults[prop] : instanceConfig[prop];
});
return config;
}
module.exports = {
isArray: isArray,
isArrayBuffer: isArrayBuffer,
@@ -335,7 +324,7 @@ module.exports = {
isStandardBrowserEnv: isStandardBrowserEnv,
forEach: forEach,
merge: merge,
deepMerge: deepMerge,
extend: extend,
trim: trim,
mergeConfig: mergeConfig
trim: trim
};