@@ -21,10 +21,15 @@ export interface Logger {
2121 level : LogLevel
2222 info : ( ...args : any [ ] ) => void
2323 warn : ( ...args : any [ ] ) => void
24+ warnOnce : ( ...args : any [ ] ) => void
2425 error : ( ...args : any [ ] ) => void
2526 success : ( ...args : any [ ] ) => void
2627}
2728
29+ function format ( msgs : any [ ] ) {
30+ return msgs . filter ( ( arg ) => arg !== undefined && arg !== false ) . join ( ' ' )
31+ }
32+
2833export function createLogger (
2934 level : LogLevel = 'info' ,
3035 { customLogger, console = globalThis . console } : LoggerOptions = { } ,
@@ -33,31 +38,45 @@ export function createLogger(
3338 return customLogger
3439 }
3540
36- function output ( type : LogType , ... msgs : any [ ] ) {
41+ function output ( type : LogType , msg : string ) {
3742 const thresh = LogLevels [ logger . level ]
3843 if ( thresh < LogLevels [ type ] ) return
3944
4045 const method = type === 'info' ? 'log' : type
41- console [ method ] ( ... msgs . filter ( ( arg ) => arg !== undefined && arg !== false ) )
46+ console [ method ] ( msg )
4247 }
4348
49+ const warnedMessages = new Set < string > ( )
50+
4451 const logger : Logger = {
4552 level,
4653
47- info ( ...args : any [ ] ) : void {
48- output ( 'info' , blue `ℹ` , ... args )
54+ info ( ...msgs : any [ ] ) : void {
55+ output ( 'info' , ` ${ blue `ℹ` } ${ format ( msgs ) } ` )
4956 } ,
5057
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` )
5372 } ,
5473
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` )
5776 } ,
5877
59- success ( ...args : any [ ] ) : void {
60- output ( 'info' , green `✔` , ... args )
78+ success ( ...msgs : any [ ] ) : void {
79+ output ( 'info' , ` ${ green `✔` } ${ format ( msgs ) } ` )
6180 } ,
6281 }
6382 return logger
0 commit comments