wallet-core/node_modules/set-value/index.js

52 lines
1.0 KiB
JavaScript
Raw Normal View History

2017-08-14 05:01:11 +02:00
/*!
* set-value <https://github.com/jonschlinkert/set-value>
*
* Copyright (c) 2014-2015, 2017, Jon Schlinkert.
* Released under the MIT License.
*/
'use strict';
2017-12-10 21:51:33 +01:00
var split = require('split-string');
2017-08-14 05:01:11 +02:00
var extend = require('extend-shallow');
var isPlainObject = require('is-plain-object');
var isObject = require('is-extendable');
2017-12-10 21:51:33 +01:00
module.exports = function(obj, prop, val) {
2017-08-14 05:01:11 +02:00
if (!isObject(obj)) {
return obj;
}
2017-12-10 21:51:33 +01:00
if (Array.isArray(prop)) {
prop = [].concat.apply([], prop).join('.');
2017-08-14 05:01:11 +02:00
}
2017-12-10 21:51:33 +01:00
if (typeof prop !== 'string') {
2017-08-14 05:01:11 +02:00
return obj;
}
2017-12-10 21:51:33 +01:00
var keys = split(prop, {sep: '.', brackets: true});
var len = keys.length;
var idx = -1;
var current = obj;
while (++idx < len) {
var key = keys[idx];
if (idx !== len - 1) {
if (!isObject(current[key])) {
current[key] = {};
}
current = current[key];
continue;
2017-08-14 05:01:11 +02:00
}
2017-12-10 21:51:33 +01:00
if (isPlainObject(current[key]) && isPlainObject(val)) {
current[key] = extend({}, current[key], val);
2017-08-14 05:01:11 +02:00
} else {
2017-12-10 21:51:33 +01:00
current[key] = val;
2017-08-14 05:01:11 +02:00
}
}
2017-12-10 21:51:33 +01:00
return obj;
};