-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
67 lines (58 loc) · 1.37 KB
/
index.js
File metadata and controls
67 lines (58 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
*
* @param outputHolder
* @param objDefinition
* @param objValue
* @returns {*}
*/
function getObjectCustom(outputHolder, objDefinition, objValue) {
if (validateString(objDefinition)) {
makeObjectFromString(outputHolder, objDefinition, objValue);
return outputHolder;
} else {
throw new TypeError("Invalid string passed.");
}
}
/**
*
* @param objDefinition
* @param objValue
*/
function getObject(objDefinition, objValue) {
if (validateString(objDefinition)) {
let outputHolder = {};
makeObjectFromString(outputHolder, objDefinition, objValue);
return outputHolder;
} else {
throw new TypeError("Invalid string passed.");
}
}
/**
*
* @param string
* @returns {boolean}
*/
function validateString(string) {
if (typeof string === "string") {
let regex = /^(\w+.)*\w+$/;
return regex.test(string);
} else {
return false;
}
}
/**
*
* @param outputHolder
* @param definition
* @param value
*/
function makeObjectFromString(outputHolder, definition, value) {
const splitSting = definition.split('.');
const lastKey = splitSting.pop();
const lastObj = splitSting.reduce((obj, key) => obj[key] = obj[key] || {}, outputHolder);
lastObj[lastKey] = value;
}
module.exports = {
getObject: getObject,
getObjectWithHolder: getObjectCustom
};