-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbrowser.ts
More file actions
61 lines (51 loc) · 2.04 KB
/
browser.ts
File metadata and controls
61 lines (51 loc) · 2.04 KB
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
/**
* @file Browser-safe Logger surface — minimal shim mirroring the public
* `success`/`fail`/`warn`/`error`/`info`/`log` methods of the full Node
* Logger, but backed by the global `console` so it works in Chrome MV3
* service workers, content scripts, popups, and any other browser context
* that doesn't have `node:process` / `node:console` / fs.
*/
export interface BrowserLogger {
log(message: unknown, ...args: unknown[]): BrowserLogger
info(message: unknown, ...args: unknown[]): BrowserLogger
warn(message: unknown, ...args: unknown[]): BrowserLogger
error(message: unknown, ...args: unknown[]): BrowserLogger
success(message: unknown, ...args: unknown[]): BrowserLogger
fail(message: unknown, ...args: unknown[]): BrowserLogger
}
const SYM_SUCCESS = '✓' // oxlint-disable-line socket/no-status-emoji -- canonical logger owner
const SYM_FAIL = '✕' // oxlint-disable-line socket/no-status-emoji -- canonical logger owner
const SYM_WARN = '⚠' // oxlint-disable-line socket/no-status-emoji -- canonical logger owner
const SYM_INFO = 'ℹ' // oxlint-disable-line socket/no-status-emoji -- canonical logger owner
class ConsoleBrowserLogger implements BrowserLogger {
log(message: unknown, ...args: unknown[]): this {
console.log(message, ...args)
return this
}
info(message: unknown, ...args: unknown[]): this {
console.log(SYM_INFO, message, ...args)
return this
}
warn(message: unknown, ...args: unknown[]): this {
console.warn(SYM_WARN, message, ...args)
return this
}
error(message: unknown, ...args: unknown[]): this {
console.error(SYM_FAIL, message, ...args)
return this
}
success(message: unknown, ...args: unknown[]): this {
console.log(SYM_SUCCESS, message, ...args)
return this
}
fail(message: unknown, ...args: unknown[]): this {
return this.error(message, ...args)
}
}
let sharedLogger: BrowserLogger | undefined
export function getDefaultLogger(): BrowserLogger {
if (!sharedLogger) {
sharedLogger = new ConsoleBrowserLogger()
}
return sharedLogger
}