Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 4x 4x 4x 37x 33x 12x 12x 12x 12x 107x 107x 107x 63x 63x 63x 53x 53x 2x 2x 2x | /* eslint-disable-next-line import/no-namespace */
import * as chalk from 'chalk'
import type { PrinterWriteStream } from '../interfaces/printer.interfaces'
const silentWriteStream: PrinterWriteStream = {
clearLine: () => true,
write: () => true,
cursorTo: () => true,
moveCursor: () => true,
}
export abstract class Printer<T extends Printer<T>> {
protected readonly SUCCESS_FN = (msg: string): string => chalk.green(`✔ ${msg}`)
protected readonly ERROR_FN = (msg: string): string => chalk.red(`✘ ${msg}`)
protected readonly WARN_FN = (msg: string): string => chalk.yellow(`! ${msg}`)
protected readonly INFO_FN = (msg: string): string => chalk.blue(`➔ ${msg}`)
protected readonly DEBUG_FN = (msg: string): string => chalk.magenta(`? ${msg}`)
protected constructor(private stdio: PrinterWriteStream) {
}
protected abstract self(): T
protected abstract stop(): T
/**
* Writes the given text to stdio. Does nothing, if no text is provided
* @param text
* @returns
*/
protected write(text?: string): T {
if (text) {
this.stdio.write(text)
}
return this.self()
}
protected clearLine(): T {
try {
this.stdio.clearLine(0)
this.stdio.cursorTo(0)
} catch {
// this might fail when piping stdout to /dev/null. Just ignore it in this case
}
return this.self()
}
protected newline(): T {
this.stdio.write('\n')
return this.self()
}
protected deleteLastLine(): T {
// stdio.moveCursor might not be available in some environments
Iif (typeof this.stdio.moveCursor === 'function') {
this.stdio.moveCursor(0, -1)
}
this.clearLine()
return this.self()
}
/**
* Suppresses all log output. Can't be undone on a running instance
*/
public silent(): void {
this.stdio = silentWriteStream
}
}
|