forked from zuriby/Faker.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tree.js
69 lines (53 loc) · 1.66 KB
/
tree.js
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
68
69
var faker = require('../index');
var tree = {
clone: function clone(obj) {
if (obj == null || typeof(obj) != 'object')
return obj;
var temp = obj.constructor(); // changed
for (var key in obj) {
temp[key] = this.clone(obj[key]);
}
return temp;
},
createTree: function (depth, width, obj) {
if (!obj) {
throw {
name: "ObjectError",
message: "there needs to be an object passed in"
};
}
if (width <= 0) {
throw {
name: "TreeParamError",
message: "width must be greater than zero"
};
}
var newObj = this.clone(obj);
for (var prop in newObj) {
if (newObj.hasOwnProperty(prop)) {
var value = null;
if (newObj[prop] !== "__RECURSE__") {
value = eval(newObj[prop]);
}
else {
if (depth !== 0) {
value = [];
var evalWidth = 1;
if (typeof(width) == "function") {
evalWidth = width();
}
else {
evalWidth = width;
}
for (var i = 0; i < evalWidth; i++) {
value.push(this.createTree(depth - 1, width, obj));
}
}
}
newObj[prop] = value;
}
}
return newObj;
}
};
module.exports = tree;