diff options
Diffstat (limited to 'node_modules/union-value/node_modules/set-value/index.js')
-rw-r--r-- | node_modules/union-value/node_modules/set-value/index.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/node_modules/union-value/node_modules/set-value/index.js b/node_modules/union-value/node_modules/set-value/index.js new file mode 100644 index 0000000..e51ece5 --- /dev/null +++ b/node_modules/union-value/node_modules/set-value/index.js @@ -0,0 +1,63 @@ +/*! + * set-value <https://github.com/jonschlinkert/set-value> + * + * Copyright (c) 2014-2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +var toPath = require('to-object-path'); +var extend = require('extend-shallow'); +var isPlainObject = require('is-plain-object'); +var isObject = require('is-extendable'); + +module.exports = function(obj, path, val) { + if (!isObject(obj)) { + return obj; + } + + if (Array.isArray(path)) { + path = toPath(path); + } + + if (typeof path !== 'string') { + return obj; + } + + var segs = path.split('.'); + var len = segs.length, i = -1; + var res = obj; + var last; + + while (++i < len) { + var key = segs[i]; + + while (key[key.length - 1] === '\\') { + key = key.slice(0, -1) + '.' + segs[++i]; + } + + if (i === len - 1) { + last = key; + break; + } + + if (!isObject(obj[key])) { + obj[key] = {}; + } + obj = obj[key]; + } + + if (obj.hasOwnProperty(last) && isObject(obj[last])) { + if (isPlainObject(val)) { + extend(obj[last], val); + } else { + obj[last] = val; + } + + } else { + obj[last] = val; + } + return res; +}; + |