Skip to content

Commit

Permalink
fix: config merge
Browse files Browse the repository at this point in the history
keep old value if the value being merged === default value
  • Loading branch information
laggingreflex committed May 30, 2017
1 parent ac33836 commit 8c8070f
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/config/merge.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
import _ from 'lodash';
import arrify from 'arrify';
import defaults from './defaults';

export default function merge(...configs) {
const mergedConfig = {};
for (const newConfig of configs) {
for (const key in newConfig) {
const oldValue = mergedConfig[key];
const newValue = newConfig[key];
const defaultValue = defaults[key] ? defaults[key].default : undefined;
if (!(key in mergedConfig)) {
mergedConfig[key] = newValue
} else if (_.isArray(newValue) || _.isArray(oldValue)) {
mergedConfig[key] = arrify(oldValue).concat(arrify(newValue));
} else if (_.isPlainObject(newValue) && _.isPlainObject(oldValue)) {
mergedConfig[key] = _.merge({}, oldValue, newValue);
} else if (defaultValue === newValue) {
mergedConfig[key] = oldValue;
} else {
mergedConfig[key] = newValue;
}
Expand Down

0 comments on commit 8c8070f

Please sign in to comment.