UNPKG

1.55 kBJavaScriptView Raw
1'use strict';
2var isObj = require('is-obj');
3
4module.exports.get = function (obj, path) {
5 if (!isObj(obj) || typeof path !== 'string') {
6 return obj;
7 }
8
9 var pathArr = getPathSegments(path);
10
11 for (var i = 0; i < pathArr.length; i++) {
12 obj = obj[pathArr[i]];
13
14 if (obj === undefined) {
15 break;
16 }
17 }
18
19 return obj;
20};
21
22module.exports.set = function (obj, path, value) {
23 if (!isObj(obj) || typeof path !== 'string') {
24 return;
25 }
26
27 var pathArr = getPathSegments(path);
28
29 for (var i = 0; i < pathArr.length; i++) {
30 var p = pathArr[i];
31
32 if (!isObj(obj[p])) {
33 obj[p] = {};
34 }
35
36 if (i === pathArr.length - 1) {
37 obj[p] = value;
38 }
39
40 obj = obj[p];
41 }
42};
43
44module.exports.delete = function (obj, path) {
45 if (!isObj(obj) || typeof path !== 'string') {
46 return;
47 }
48
49 var pathArr = getPathSegments(path);
50
51 for (var i = 0; i < pathArr.length; i++) {
52 var p = pathArr[i];
53
54 if (i === pathArr.length - 1) {
55 delete obj[p];
56 return;
57 }
58
59 obj = obj[p];
60 }
61};
62
63module.exports.has = function (obj, path) {
64 if (!isObj(obj) || typeof path !== 'string') {
65 return false;
66 }
67
68 var pathArr = getPathSegments(path);
69
70 for (var i = 0; i < pathArr.length; i++) {
71 obj = obj[pathArr[i]];
72
73 if (obj === undefined) {
74 return false;
75 }
76 }
77
78 return true;
79};
80
81function getPathSegments(path) {
82 var pathArr = path.split('.');
83 var parts = [];
84
85 for (var i = 0; i < pathArr.length; i++) {
86 var p = pathArr[i];
87
88 while (p[p.length - 1] === '\\') {
89 p = p.slice(0, -1) + '.';
90 p += pathArr[++i];
91 }
92
93 parts.push(p);
94 }
95
96 return parts;
97}