This repository has been archived by the owner on Jun 11, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.js
89 lines (77 loc) · 2.08 KB
/
utils.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
78
79
80
81
82
83
84
85
86
87
88
89
"use strict";
function logDetails(aValue) {
var valueType = typeof aValue;
switch (valueType) {
case "string":
case "number":
case "boolean":
case "undefined":
case "symbol":
case "function": {
console.log(valueType, aValue);
break;
}
case "object": {
if (null === aValue) {
console.log("null");
}
else if (aValue.constructor) {
switch (aValue.constructor.name) {
case "String":
case "Number":
case "Boolean":
case "Function": {
let unwrappedValue = aValue.valueOf();
console.log(typeof unwrappedValue, unwrappedValue);
break;
}
case "Promise": {
console.log("promise (value/reason somewhere below…)");
aValue
.then ((x) => { logDetails(x); })
.catch((error) => { logDetails(error); });
break;
}
case "Error": {
console.log(`error: ${aValue.message}, ${aValue.fileName}:${aValue.lineNumber}`);
break;
}
case "Array": {
console.log(`array (${aValue.length} items)`);
if (aValue.length < 10) {
for (let item of aValue) {
console.log(item);
}
}
else {
console.log("too many items…");
}
break;
}
case "Object": {
console.log("plain object");
let entries = Object.entries(aValue);
if (entries.length < 10) {
for (let [ key, subValue ] of entries) {
console.log(`${key}: ${subValue}`);
}
}
else {
console.log("too many entries…");
}
break;
}
default: {
console.warn(`constructor ${aValue.constructor} not handled`);
break;
}
}
}
break;
}
default: {
console.warn(`type ${valueType} not handled`);
break;
}
}
}