From d78204712a88f9e7c8ebad728143dee56ca995f3 Mon Sep 17 00:00:00 2001 From: Martti Laine Date: Fri, 9 Mar 2018 13:58:08 +0200 Subject: [PATCH] Clean up PR --- lib/axios.js | 2 +- lib/core/Axios.js | 10 +++------ lib/utils.js | 52 ++++++++++++++++++++--------------------------- 3 files changed, 26 insertions(+), 38 deletions(-) diff --git a/lib/axios.js b/lib/axios.js index 68621dd..11e274c 100644 --- a/lib/axios.js +++ b/lib/axios.js @@ -32,7 +32,7 @@ axios.Axios = Axios; // Factory for creating new instances axios.create = function create(instanceConfig) { - return createInstance(utils.mergeConfig(axios.defaults, instanceConfig || {})); + return createInstance(utils.mergeConfig(axios.defaults, instanceConfig)); }; // Expose Cancel & CancelToken diff --git a/lib/core/Axios.js b/lib/core/Axios.js index 766a897..92865d3 100644 --- a/lib/core/Axios.js +++ b/lib/core/Axios.js @@ -23,21 +23,17 @@ function Axios(instanceConfig) { * @param {Object} config The config specific for this request (merged with this.defaults) */ Axios.prototype.request = function request(config) { - config = config || {}; - /*eslint no-param-reassign:0*/ // Allow for axios('example/url'[, config]) a la fetch API if (typeof config === 'string') { config = arguments[1] || {}; config.url = arguments[0]; - } - - if (!config.method) { - config.method = 'get'; + } else { + config = config || {}; } config = utils.mergeConfig(this.defaults, config); - config.method = config.method.toLowerCase(); + config.method = config.method ? config.method.toLowerCase() : 'get'; // Hook up interceptors middleware var chain = [dispatchRequest, undefined]; diff --git a/lib/utils.js b/lib/utils.js index 342fa1f..14225bd 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -279,47 +279,39 @@ 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(prop) { + forEach(['url', 'method', 'params', 'data'], function valueFromInstanceConfig(prop) { config[prop] = instanceConfig[prop]; }); - forEach(['headers', 'auth', 'proxy'], function(prop) { + forEach(['headers', 'auth', 'proxy'], function mergeInstanceConfigWithDefaults(prop) { if (!isUndefined(instanceConfig[prop])) { - if (!isObject(instanceConfig[prop])) { - config[prop] = instanceConfig[prop]; + if (isObject(instanceConfig[prop])) { + config[prop] = merge(defaults[prop], instanceConfig[prop]); } else { - config[prop] = merge( - defaults[prop], - instanceConfig[prop] - ); + config[prop] = instanceConfig[prop]; } } else if (!isUndefined(defaults[prop])) { config[prop] = JSON.parse(JSON.stringify(defaults[prop])); } }); - var remainingProperties = [ - 'baseURL', - 'transformRequest', - 'transformResponse', - 'paramsSerializer', - 'timeout', - 'withCredentials', - 'adapter', - 'responseType', - 'xsrfCookieName', - 'xsrfHeaderName', - 'onUploadProgress', - 'onDownloadProgress', - 'maxContentLength', - 'validateStatus', - 'maxRedirects', - 'httpAgent', - 'httpsAgent', - 'cancelToken' - ]; - forEach(remainingProperties, function(prop) { - config[prop] = !isUndefined(instanceConfig[prop]) ? instanceConfig[prop] : 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; }