mergeConfig.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. 'use strict';
  2. var utils = require('../utils');
  3. /**
  4. * Config-specific merge-function which creates a new config-object
  5. * by merging two configuration objects together.
  6. *
  7. * @param {Object} config1
  8. * @param {Object} config2
  9. * @returns {Object} New object resulting from merging config2 to config1
  10. */
  11. module.exports = function mergeConfig(config1, config2) {
  12. // eslint-disable-next-line no-param-reassign
  13. config2 = config2 || {};
  14. var config = {};
  15. var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];
  16. var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];
  17. var defaultToConfig2Keys = [
  18. 'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',
  19. 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
  20. 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',
  21. 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent',
  22. 'httpsAgent', 'cancelToken', 'socketPath'
  23. ];
  24. utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
  25. if (typeof config2[prop] !== 'undefined') {
  26. config[prop] = config2[prop];
  27. }
  28. });
  29. utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {
  30. if (utils.isObject(config2[prop])) {
  31. config[prop] = utils.deepMerge(config1[prop], config2[prop]);
  32. } else if (typeof config2[prop] !== 'undefined') {
  33. config[prop] = config2[prop];
  34. } else if (utils.isObject(config1[prop])) {
  35. config[prop] = utils.deepMerge(config1[prop]);
  36. } else if (typeof config1[prop] !== 'undefined') {
  37. config[prop] = config1[prop];
  38. }
  39. });
  40. utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
  41. if (typeof config2[prop] !== 'undefined') {
  42. config[prop] = config2[prop];
  43. } else if (typeof config1[prop] !== 'undefined') {
  44. config[prop] = config1[prop];
  45. }
  46. });
  47. var axiosKeys = valueFromConfig2Keys
  48. .concat(mergeDeepPropertiesKeys)
  49. .concat(defaultToConfig2Keys);
  50. var otherKeys = Object
  51. .keys(config2)
  52. .filter(function filterAxiosKeys(key) {
  53. return axiosKeys.indexOf(key) === -1;
  54. });
  55. utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {
  56. if (typeof config2[prop] !== 'undefined') {
  57. config[prop] = config2[prop];
  58. } else if (typeof config1[prop] !== 'undefined') {
  59. config[prop] = config1[prop];
  60. }
  61. });
  62. return config;
  63. };