merge-value
Version:
Similar to assign-value but deeply merges object values or nested values using object path/dot notation.
30 lines (23 loc) • 633 B
JavaScript
;
var isObject = require('is-extendable');
var merge = require('mixin-deep');
var get = require('get-value');
var set = require('set-value');
module.exports = function mergeValue(obj, prop, value) {
if (!isObject(obj)) {
throw new TypeError('expected an object');
}
if (typeof prop !== 'string' || value == null) {
return merge.apply(null, arguments);
}
if (typeof value === 'string') {
set(obj, prop, value);
return obj;
}
var current = get(obj, prop);
if (isObject(value) && isObject(current)) {
value = merge({}, current, value);
}
set(obj, prop, value);
return obj;
};