forked from lost-pixel/lost-pixel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog.ts
123 lines (107 loc) · 2.47 KB
/
log.ts
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import type { ShotMode } from './types';
type LogLevel = 'info' | 'error' | 'warn' | 'debug';
type LogEntry = {
timestamp: Date;
level: LogLevel;
item?: {
shotMode: ShotMode;
uniqueItemId: string;
itemIndex: number;
totalItems: number;
};
source: 'process' | 'browser';
context: 'general' | 'api' | 'console' | 'network' | 'timeout' | 'config';
content: unknown[];
};
export type LogMemory = LogEntry[];
export const logMemory: LogMemory = [];
const renderLog = (entry: LogEntry) => {
if (entry.source === 'browser' && entry.context === 'console') {
return;
}
if (entry.source === 'browser' && entry.context === 'network') {
return;
}
const { log } = console;
const logPrefix = [];
if (entry.item) {
logPrefix.push(`[${entry.item.itemIndex + 1}/${entry.item.totalItems}]`);
}
if (!['general', 'api', 'config'].includes(entry.context)) {
logPrefix.push(`[${entry.context}]`);
}
if (entry.level === 'error') {
logPrefix.push(`❌`);
}
if (entry.item?.uniqueItemId) {
log(...logPrefix, ...entry.content, `(${entry.item?.uniqueItemId})`);
} else {
log(...logPrefix, ...entry.content);
}
};
export const log = {
item: (item: LogEntry['item']) => ({
process(
level: LogEntry['level'],
context: LogEntry['context'],
...content: unknown[]
) {
const entry: LogEntry = {
timestamp: new Date(),
level,
item,
source: 'process',
context,
content,
};
logMemory.push(entry);
renderLog(entry);
},
browser(
level: LogEntry['level'],
context: LogEntry['context'],
...content: unknown[]
) {
const entry: LogEntry = {
timestamp: new Date(),
level,
item,
source: 'browser',
context,
content,
};
logMemory.push(entry);
renderLog(entry);
},
}),
process(
level: LogEntry['level'],
context: LogEntry['context'],
...content: unknown[]
) {
const entry: LogEntry = {
timestamp: new Date(),
level,
source: 'process',
context,
content,
};
logMemory.push(entry);
renderLog(entry);
},
browser(
level: LogEntry['level'],
context: LogEntry['context'],
...content: unknown[]
) {
const entry: LogEntry = {
timestamp: new Date(),
level,
source: 'browser',
context,
content,
};
logMemory.push(entry);
renderLog(entry);
},
};