52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /*! | ||
|  |  * 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; | ||
|  | }; |