123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /*!
- * set-value <https://github.com/jonschlinkert/set-value>
- *
- * Copyright (c) 2014-2015, 2017, Jon Schlinkert.
- * Released under the MIT License.
- */
- 'use strict';
- var split = require('split-string');
- var extend = require('extend-shallow');
- var isPlainObject = require('is-plain-object');
- var isObject = require('is-extendable');
- module.exports = function(obj, prop, val) {
- if (!isObject(obj)) {
- return obj;
- }
- if (Array.isArray(prop)) {
- prop = [].concat.apply([], prop).join('.');
- }
- if (typeof prop !== 'string') {
- return obj;
- }
- 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;
- }
- if (isPlainObject(current[key]) && isPlainObject(val)) {
- current[key] = extend({}, current[key], val);
- } else {
- current[key] = val;
- }
- }
- return obj;
- };
|