11import process from 'node:process'
2+ import readline from 'node:readline'
23import { bgRed , bgYellow , blue , green , rgb , yellow , type Ansis } from 'ansis'
34import { noop } from './general.ts'
45import type { InternalModuleFormat } from 'rolldown'
@@ -7,6 +8,7 @@ export type LogType = 'error' | 'warn' | 'info'
78export type LogLevel = LogType | 'silent'
89
910export interface LoggerOptions {
11+ allowClearScreen ?: boolean
1012 customLogger ?: Logger
1113 console ?: Console
1214 failOnWarn ?: boolean
@@ -26,12 +28,21 @@ export interface Logger {
2628 warnOnce : ( ...args : any [ ] ) => void
2729 error : ( ...args : any [ ] ) => void
2830 success : ( ...args : any [ ] ) => void
31+ clearScreen : ( type : LogType ) => void
2932}
3033
3134function format ( msgs : any [ ] ) {
3235 return msgs . filter ( ( arg ) => arg !== undefined && arg !== false ) . join ( ' ' )
3336}
3437
38+ function clearScreen ( ) {
39+ const repeatCount = process . stdout . rows - 2
40+ const blank = repeatCount > 0 ? '\n' . repeat ( repeatCount ) : ''
41+ console . info ( blank )
42+ readline . cursorTo ( process . stdout , 0 , 0 )
43+ readline . clearScreenDown ( process . stdout )
44+ }
45+
3546const warnedMessages = new Set < string > ( )
3647
3748export function createLogger (
@@ -40,6 +51,7 @@ export function createLogger(
4051 customLogger,
4152 console = globalThis . console ,
4253 failOnWarn = false ,
54+ allowClearScreen = true ,
4355 } : LoggerOptions = { } ,
4456) : Logger {
4557 if ( customLogger ) {
@@ -54,6 +66,10 @@ export function createLogger(
5466 console [ method ] ( msg )
5567 }
5668
69+ const canClearScreen =
70+ allowClearScreen && process . stdout . isTTY && ! process . env . CI
71+ const clear = canClearScreen ? clearScreen : ( ) => { }
72+
5773 const logger : Logger = {
5874 level,
5975
@@ -92,6 +108,12 @@ export function createLogger(
92108 success ( ...msgs : any [ ] ) : void {
93109 output ( 'info' , `${ green `✔` } ${ format ( msgs ) } ` )
94110 } ,
111+
112+ clearScreen ( type ) {
113+ if ( LogLevels [ logger . level ] >= LogLevels [ type ] ) {
114+ clear ( )
115+ }
116+ } ,
95117 }
96118 return logger
97119}
0 commit comments