Skip to content

Commit 78efddf

Browse files
committed
feat: clear console on rebuild start
1 parent beeffb2 commit 78efddf

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

dts.snapshot.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
"Format": "type Format = ModuleFormat",
103103
"globalLogger": "Logger",
104104
"InlineConfig": "interface InlineConfig extends UserConfig {\n config?: boolean | string\n configLoader?: 'auto' | 'native' | 'unrun'\n filter?: RegExp | Arrayable<string>\n}",
105-
"Logger": "interface Logger {\n level: LogLevel\n info: (...args: any[]) => void\n warn: (...args: any[]) => void\n warnOnce: (...args: any[]) => void\n error: (...args: any[]) => void\n success: (...args: any[]) => void\n}",
105+
"Logger": "interface Logger {\n level: LogLevel\n info: (...args: any[]) => void\n warn: (...args: any[]) => void\n warnOnce: (...args: any[]) => void\n error: (...args: any[]) => void\n success: (...args: any[]) => void\n clearScreen: (_: LogType) => void\n}",
106106
"LogLevel": "type LogLevel = LogType | 'silent'",
107107
"LogType": "type LogType = 'error' | 'warn' | 'info'",
108108
"MarkPartial": "type MarkPartial<T, K$1 extends keyof T> = Omit<Required<T>, K$1> & Partial<Pick<T, K$1>>",

src/build.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,8 @@ async function buildSingle(
211211
}
212212

213213
case 'BUNDLE_START': {
214-
if (changedFile.length > 0) {
215-
if (logger.level === 'info') {
216-
console.info('')
217-
}
214+
if (changedFile.length) {
215+
logger.clearScreen('info')
218216
logger.info(
219217
`Found ${bold(changedFile.join(', '))} changed, rebuilding...`,
220218
)

src/utils/logger.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import process from 'node:process'
2+
import readline from 'node:readline'
23
import { bgRed, bgYellow, blue, green, rgb, yellow, type Ansis } from 'ansis'
34
import { noop } from './general.ts'
45
import type { InternalModuleFormat } from 'rolldown'
@@ -7,6 +8,7 @@ export type LogType = 'error' | 'warn' | 'info'
78
export type LogLevel = LogType | 'silent'
89

910
export 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

3134
function 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+
3546
const warnedMessages = new Set<string>()
3647

3748
export 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

Comments
 (0)