aboutsummaryrefslogtreecommitdiff
path: root/node_modules/union-value/node_modules/set-value/index.js
diff options
context:
space:
mode:
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.js63
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;
+};
+