@@ -21,10 +21,15 @@ export interface Logger {
21
21
level : LogLevel
22
22
info : ( ...args : any [ ] ) => void
23
23
warn : ( ...args : any [ ] ) => void
24
+ warnOnce : ( ...args : any [ ] ) => void
24
25
error : ( ...args : any [ ] ) => void
25
26
success : ( ...args : any [ ] ) => void
26
27
}
27
28
29
+ function format ( msgs : any [ ] ) {
30
+ return msgs . filter ( ( arg ) => arg !== undefined && arg !== false ) . join ( ' ' )
31
+ }
32
+
28
33
export function createLogger (
29
34
level : LogLevel = 'info' ,
30
35
{ customLogger, console = globalThis . console } : LoggerOptions = { } ,
@@ -33,31 +38,45 @@ export function createLogger(
33
38
return customLogger
34
39
}
35
40
36
- function output ( type : LogType , ... msgs : any [ ] ) {
41
+ function output ( type : LogType , msg : string ) {
37
42
const thresh = LogLevels [ logger . level ]
38
43
if ( thresh < LogLevels [ type ] ) return
39
44
40
45
const method = type === 'info' ? 'log' : type
41
- console [ method ] ( ... msgs . filter ( ( arg ) => arg !== undefined && arg !== false ) )
46
+ console [ method ] ( msg )
42
47
}
43
48
49
+ const warnedMessages = new Set < string > ( )
50
+
44
51
const logger : Logger = {
45
52
level,
46
53
47
- info ( ...args : any [ ] ) : void {
48
- output ( 'info' , blue `ℹ` , ... args )
54
+ info ( ...msgs : any [ ] ) : void {
55
+ output ( 'info' , ` ${ blue `ℹ` } ${ format ( msgs ) } ` )
49
56
} ,
50
57
51
- warn ( ...args : any [ ] ) : void {
52
- output ( 'warn' , '\n' , bgYellow ` WARN ` , ...args , '\n' )
58
+ warn ( ...msgs : any [ ] ) : void {
59
+ const message = format ( msgs )
60
+ warnedMessages . add ( message )
61
+ output ( 'warn' , `\n${ bgYellow ` WARN ` } ${ message } \n` )
62
+ } ,
63
+
64
+ warnOnce ( ...msgs : any [ ] ) : void {
65
+ const message = format ( msgs )
66
+ if ( warnedMessages . has ( message ) ) {
67
+ return
68
+ }
69
+ warnedMessages . add ( message )
70
+
71
+ output ( 'warn' , `\n${ bgYellow ` WARN ` } ${ message } \n` )
53
72
} ,
54
73
55
- error ( ...args : any [ ] ) : void {
56
- output ( 'error' , '\n' , bgRed ` ERROR ` , ... args , '\n' )
74
+ error ( ...msgs : any [ ] ) : void {
75
+ output ( 'error' , `\n ${ bgRed ` ERROR ` } ${ format ( msgs ) } \n` )
57
76
} ,
58
77
59
- success ( ...args : any [ ] ) : void {
60
- output ( 'info' , green `✔` , ... args )
78
+ success ( ...msgs : any [ ] ) : void {
79
+ output ( 'info' , ` ${ green `✔` } ${ format ( msgs ) } ` )
61
80
} ,
62
81
}
63
82
return logger
0 commit comments