source: trip-planner-front/node_modules/set-value/index.js@ ceaed42

Last change on this file since ceaed42 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 1.2 KB
Line 
1/*!
2 * set-value <https://github.com/jonschlinkert/set-value>
3 *
4 * Copyright (c) 2014-2015, 2017, Jon Schlinkert.
5 * Released under the MIT License.
6 */
7
8'use strict';
9
10var split = require('split-string');
11var extend = require('extend-shallow');
12var isPlainObject = require('is-plain-object');
13var isObject = require('is-extendable');
14
15module.exports = function(obj, prop, val) {
16 if (!isObject(obj)) {
17 return obj;
18 }
19
20 if (Array.isArray(prop)) {
21 prop = [].concat.apply([], prop).join('.');
22 }
23
24 if (typeof prop !== 'string') {
25 return obj;
26 }
27
28 var keys = split(prop, {sep: '.', brackets: true}).filter(isValidKey);
29 var len = keys.length;
30 var idx = -1;
31 var current = obj;
32
33 while (++idx < len) {
34 var key = keys[idx];
35 if (idx !== len - 1) {
36 if (!isObject(current[key])) {
37 current[key] = {};
38 }
39 current = current[key];
40 continue;
41 }
42
43 if (isPlainObject(current[key]) && isPlainObject(val)) {
44 current[key] = extend({}, current[key], val);
45 } else {
46 current[key] = val;
47 }
48 }
49
50 return obj;
51};
52
53function isValidKey(key) {
54 return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';
55}
Note: See TracBrowser for help on using the repository browser.