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 72 73 74 75 76 77 | 5x 5x 5x 12x 12x 7x 7x 4x 4x 4x 6x 6x 10x 37x 6x 11x 1x 10x 10x 10x 10x 5x | /* eslint-disable-next-line import/no-namespace */ import * as chalk from 'chalk' import type { ProgressConfig } from '../interfaces/interfaces' import { Printer } from './printer' export class ProgressBar extends Printer<ProgressBar> { private DEFAULT_CONFIG: Partial<ProgressConfig> = { barLength: 100, showNumeric: false, steps: 50, } private config: ProgressConfig | undefined public constructor(stdio: NodeJS.WriteStream) { super(stdio) } protected stop(): ProgressBar { this.config = undefined return this } private static calcNumeric(config: ProgressConfig, percent: number): string { const steps: number = config.steps as number const fracture = Math.round(percent * steps).toString().padStart(steps.toString().length, ' ') return `(${fracture}/${steps}${config.unit ? (' ' + config.unit) : ''})` } private setConfig(config: ProgressConfig): ProgressBar { this.config = { ...this.DEFAULT_CONFIG, ...config, } return this } private checkForComplete(config: ProgressConfig, percent: number): ProgressBar { return percent === 1 ? this.clearLine() .deleteLastLine() .write(this.SUCCESS_FN(config.success)) .stop() .newline() : this } protected self(): ProgressBar { return this } public start(config: ProgressConfig): ProgressBar { return this.stop() .setConfig(config) .write(config.start) .newline() .fraction(0) } public fraction(fraction: number): ProgressBar { if (!this.config) { return this } const barLength: number = this.config.barLength as number const doneAmount = Math.floor(barLength * fraction) const restAmount = barLength - doneAmount return this.clearLine() .write(`[${chalk.bgWhite(' ').repeat(doneAmount)}${chalk.grey('.').repeat(restAmount)}]${this.config.showNumeric ? ProgressBar.calcNumeric(this.config, fraction) : ''}`) .checkForComplete(this.config, fraction) } } export const progress = new ProgressBar(process.stdout) |