From afd128003eb4c3ee9510ea22663384fbb7336b5c Mon Sep 17 00:00:00 2001 From: AriPerkkio Date: Sun, 25 Jun 2023 15:27:17 +0300 Subject: [PATCH] fix(watch): clear screen on all terminals --- packages/vitest/src/node/logger.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/vitest/src/node/logger.ts b/packages/vitest/src/node/logger.ts index e576210de3f4..85337c349a55 100644 --- a/packages/vitest/src/node/logger.ts +++ b/packages/vitest/src/node/logger.ts @@ -8,6 +8,11 @@ import { RandomSequencer } from './sequencers/RandomSequencer' import type { Vitest } from './core' import { printError } from './error' +const ESC = '\x1B[' +const ERASE_SCREEN = `${ESC}2J` +const ERASE_SCROLLBACK = `${ESC}3J` +const CURSOR_HOME_ROW = `${ESC}H` + export class Logger { outputStream = process.stdout errorStream = process.stderr @@ -43,7 +48,13 @@ export class Logger { return } - this.console.log(`\x1Bc${message}`) + // Clear screen and scrollback buffer. Windows requires special handling except on Git Bash + if (process.platform === 'win32' && !process.env.SHELL?.includes('bash')) + this.console.log(`${ERASE_SCREEN}${ESC}0f`) + else + this.console.log(`${ERASE_SCREEN}${ERASE_SCROLLBACK}${CURSOR_HOME_ROW}`) + + this.console.log(message) } clearScreen(message: string, force = false) {