-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
77 lines (71 loc) · 1.71 KB
/
main.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
70
71
72
73
74
75
76
77
function stringify(obj, depth, printing) {
return JSON.stringify(fixStringify(obj, depth, printing))
}
function fixStringify(obj, depth, printing) {
if(obj==undefined) {return {}}
if(depth==undefined) {depth=10}
if(printing==undefined) {printing}
let broken = removeBroken(obj, String(obj), "", depth, printing)
if(broken[0]) {
return {}
} else {
return broken[1]
}
}
function removeBroken(obj, name, prefix, depth, printing) {
type = typeof obj
if(type=='object') {
if(isBroken(obj)) {
if(!hasBrokenChilds(obj)) {
log(1, prefix, name, printing)
return [true]
} else if(depth==0) {
log(3, prefix, name, printing)
return [true]
} else {
log(7, prefix, name, printing)
let newobj = obj
for(var x in obj) {
let broken = removeBroken(obj[x], x, prefix + " ", depth-1, printing)
if(broken[0]) {
delete newobj[x]
}
}
return [false, newobj]
}
} else {
return [false, obj]
}
} else {
if(isBroken(obj)) {
log(1, prefix, name, printing)
return [true]
} else {
return [false, obj]
}
}
}
function log(color, prefix, name, printing) {
if(printing) {
console.log('\x1b[3'+color+'m%s\x1b[0m', prefix + name)
}
}
function hasBrokenChilds(obj) {
for(var x in obj) {
try {
JSON.stringify(obj[x])}
catch(error) {
return true}}
return false
}
function isBroken(obj) {
try {
JSON.stringify(obj)
return false}
catch(error) {
return true}
}
module.exports.stringify = stringify
module.exports.fixStringify = fixStringify
module.exports.isBroken = isBroken
module.exports.hasBrokenChilds = hasBrokenChilds