-
Notifications
You must be signed in to change notification settings - Fork 0
/
oo-logger-base.html
108 lines (89 loc) · 3.06 KB
/
oo-logger-base.html
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<script>
// Declare in local function scope to avoid bleeding variables into global `window`.
(function () {
// Declare or reuse global namespace.
window.oo = window.oo || {}
oo.buildLog = function buildLog(context, level, timestamp, ...messages) {
_checkNotNil(context, () => "illegal argument: context is missing")
_checkNotNil(level, () => "illegal argument: level is missing")
_checkNotNil(timestamp, () => "illegal argument: timestamp is missing")
const timestampStr = _formatDate(timestamp)
const levelStr = _padLeft("|" + level + "|", 7, " ")
const contextStr = "[" + context + "]"
return [timestampStr, levelStr, contextStr, ...messages]
}
function _formatDate(date) {
_checkNotNil(date, () => "illegal argument: date is missing")
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hours = date.getHours()
const minutes = date.getMinutes()
const seconds = date.getSeconds()
const millis = date.getMilliseconds()
return "" + year + "-" + _padLeft(month) + "-" + _padLeft(day) +
" " + _padLeft(hours) + ":" + _padLeft(minutes) + ":" + _padLeft(seconds) +
"." + _padLeft(millis, 3)
}
function _padLeft(value, length = 2, char = "0") {
_check(char.length > 0, () => "illegal argument: char is empty")
let result = "" + value
while (result.length < length) {
result = char + result
}
return result
}
oo.json = function json(value, padding = 2) {
function replacer(key, value) {
if (value && value[Symbol.iterator] && !_isArray(value)) {
const array = Array.from(value)
if (array && !_isArrayEqual(array, value)) {
return array
}
}
return value
}
return JSON.stringify(value, replacer, padding)
}
oo.json1 = function json1(value) {
const string = oo.json(value, 1)
return string.split("\n").map(it => it.trim()).join(" ")
}
oo.json0 = function json0(value) {
return oo.json(value, 0)
}
function _check(condition, lazyMessage = null) {
if (!condition) {
if (lazyMessage) {
throw new Error(lazyMessage())
}
throw new Error("illegal argument")
}
}
function _checkNotNil(value, lazyMessage = null) {
if (_isNil(value)) {
if (lazyMessage) {
throw new Error(lazyMessage())
}
throw new Error("illegal argument")
}
}
function _isNil(value) {
return value === null && value === undefined
}
function _isArray(value) {
return Array.isArray(value)
}
function _isArrayEqual(a, b) {
if ((a === b) || (_isNil(a) && _isNil(b))) { return true }
if (_isNil(a) !== _isNil(b)) { return false }
if (a.length !== b.length) { return false }
for (let index = 0; index < a.length; index++) {
if (a[index] !== b[index]) {
return false
}
}
return true
}
}())
</script>