-
Notifications
You must be signed in to change notification settings - Fork 4
/
index.js
55 lines (45 loc) · 1.29 KB
/
index.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
// @flow
type groupLogFn = (...args: Array<any>) => void
const isDebugEnabled = global && typeof global.__DEV__ !== 'undefined' && !!global.__DEV__
const noop = () => {}
const displayLogs = (name: string, title: string, logs: Array<Array<any>>, show: boolean) => {
if (!show) {
return
}
if (console.groupCollapsed) {
console.groupCollapsed(`${name}: ${title}`)
}
for (var i = 0; i < logs.length; i++) {
console.log(...logs[i])
}
if (console.groupEnd){
console.groupEnd()
}
}
let filters: Array<string> = []
export const logger = {
setFilters: (...names: Array<string>): void => {
filters = names
},
log: (...args: Array<any>): void => {
isDebugEnabled && console.log(...args)
},
group: (name: string, title: string, logFn: (log: groupLogFn) => void | Promise<any> = noop) => {
const show = filters.length === 0 || filters.indexOf(name) !== -1
const logs: Array<any> = []
const done = logFn((...args: Array<any>): void => {
if (isDebugEnabled && show) {
logs.push(args)
}
})
if (done instanceof Promise) {
done.then(() => {
displayLogs(name, title, logs, show)
}).catch(() => {
displayLogs(name, title, logs, show)
})
} else {
displayLogs(name, title, logs, show)
}
}
}