UNPKG

@qodalis/angular-cli

Version:

A lightweight and flexible command-line interface (CLI) tool designed to streamline workflows and automate tasks for developers.

79 lines 10.9 kB
export class CliTerminalProgressBar { constructor(terminal) { this.terminal = terminal; this.isRunning = false; this.text = ''; this.progress = 0; this.total = 100; this.progressText = ''; } show(text) { this.isRunning = true; this.progress = 0; this.text = text || ''; // Update progress bar every 100ms this.progressBarInterval = setInterval(() => { this.updateProgressBar(); // Stop when progress reaches 100% if (this.progress > this.total) { this.progress = this.total; this.hide(); // Stop the progress bar } }, 100); } hide() { this.isRunning = false; if (this.progressBarInterval) { clearInterval(this.progressBarInterval); this.progressBarInterval = null; } this.clearCurrentLine(); this.text = ''; this.progressText = ''; } update(progress, options) { if (options?.type === 'increment') { this.progress += progress; } else { this.progress = progress; } if (this.progress > this.total) { this.progress = this.total; } this.updateProgressBar(); } complete() { this.progress = 100; this.hide(); } setText(text) { this.text = text; this.updateProgressBar(); } updateProgressBar() { const totalBars = 50; // Length of the progress bar const filledBars = Math.round((this.progress / this.total) * totalBars); const emptyBars = totalBars - filledBars; const progressBar = `[${'#'.repeat(filledBars)}${'.'.repeat(emptyBars)}]`; const percentage = `${this.progress}%`.padStart(4, ' '); const text = this.text.length > 0 ? ` ${this.text}` : ''; this.clearCurrentLine(); this.progressText = `${progressBar} ${percentage} ${text}`; this.terminal.write(this.progressText); // Write progress bar } clearCurrentLine() { const wrappedLines = Math.ceil(this.progressText.length / this.terminal.cols); for (let i = 0; i < wrappedLines; i++) { this.terminal.write('\x1b[2K'); // Clear the current line this.terminal.write('\r'); // Move the cursor to the start of the line if (i < wrappedLines - 1) { this.terminal.write('\x1b[F'); // Move the cursor up for all but the last line } if (i === wrappedLines - 1) { this.terminal.write('\r'); } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRlcm1pbmFsLXByb2dyZXNzLWJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaS9zcmMvbGliL2NsaS9zZXJ2aWNlcy9wcm9ncmVzcy1iYXJzL2NsaS10ZXJtaW5hbC1wcm9ncmVzcy1iYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxPQUFPLHNCQUFzQjtJQVMvQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBUnRDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFbkIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVsQixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsVUFBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLGlCQUFZLEdBQUcsRUFBRSxDQUFDO0lBRWUsQ0FBQztJQUVuQyxJQUFJLENBQUMsSUFBYTtRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFdkIsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRXpCLGtDQUFrQztZQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyx3QkFBd0I7YUFDeEM7UUFDTCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRU0sSUFBSTtRQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksSUFB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LFFBQVEsQ0FBQyxDQUFDLENBQUMsK0NBQStDO2FBQ2pGO1lBRUQsSUFBSSxDQUFDLEtBQUssWUFBWSxHQUFHLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDN0I7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlcm1pbmFsIH0gZnJvbSAnQHh0ZXJtL3h0ZXJtJztcbmltcG9ydCB7XG4gICAgQ2xpUGVyY2VudGFnZVByb2dyZXNzQmFyVXBkYXRlVmFsdWVPcHRpb25zLFxuICAgIElDbGlQZXJjZW50YWdlUHJvZ3Jlc3NCYXIsXG59IGZyb20gJ0Bxb2RhbGlzL2NsaS1jb3JlJztcblxuZXhwb3J0IGNsYXNzIENsaVRlcm1pbmFsUHJvZ3Jlc3NCYXIgaW1wbGVtZW50cyBJQ2xpUGVyY2VudGFnZVByb2dyZXNzQmFyIHtcbiAgICBpc1J1bm5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByaXZhdGUgdGV4dDogc3RyaW5nID0gJyc7XG4gICAgcHJpdmF0ZSBwcm9ncmVzc0JhckludGVydmFsPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbDtcbiAgICBwcml2YXRlIHByb2dyZXNzID0gMDtcbiAgICBwcml2YXRlIHRvdGFsID0gMTAwO1xuICAgIHByaXZhdGUgcHJvZ3Jlc3NUZXh0ID0gJyc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlcm1pbmFsOiBUZXJtaW5hbCkge31cblxuICAgIHB1YmxpYyBzaG93KHRleHQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dCB8fCAnJztcblxuICAgICAgICAvLyBVcGRhdGUgcHJvZ3Jlc3MgYmFyIGV2ZXJ5IDEwMG1zXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NCYXIoKTtcblxuICAgICAgICAgICAgLy8gU3RvcCB3aGVuIHByb2dyZXNzIHJlYWNoZXMgMTAwJVxuICAgICAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3MgPiB0aGlzLnRvdGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IHRoaXMudG90YWw7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7IC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0JhckludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMucHJvZ3Jlc3NCYXJJbnRlcnZhbCk7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQmFySW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhckN1cnJlbnRMaW5lKCk7XG5cbiAgICAgICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NUZXh0ID0gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZShcbiAgICAgICAgcHJvZ3Jlc3M6IG51bWJlcixcbiAgICAgICAgb3B0aW9ucz86IENsaVBlcmNlbnRhZ2VQcm9ncmVzc0JhclVwZGF0ZVZhbHVlT3B0aW9ucyxcbiAgICApIHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LnR5cGUgPT09ICdpbmNyZW1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzICs9IHByb2dyZXNzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3MgPiB0aGlzLnRvdGFsKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gdGhpcy50b3RhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NCYXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tcGxldGUoKSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAxMDA7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUZXh0KHRleHQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuXG4gICAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NCYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByb2dyZXNzQmFyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b3RhbEJhcnMgPSA1MDsgLy8gTGVuZ3RoIG9mIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgY29uc3QgZmlsbGVkQmFycyA9IE1hdGgucm91bmQoKHRoaXMucHJvZ3Jlc3MgLyB0aGlzLnRvdGFsKSAqIHRvdGFsQmFycyk7XG4gICAgICAgIGNvbnN0IGVtcHR5QmFycyA9IHRvdGFsQmFycyAtIGZpbGxlZEJhcnM7XG5cbiAgICAgICAgY29uc3QgcHJvZ3Jlc3NCYXIgPSBgWyR7JyMnLnJlcGVhdChmaWxsZWRCYXJzKX0keycuJy5yZXBlYXQoZW1wdHlCYXJzKX1dYDtcbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IGAke3RoaXMucHJvZ3Jlc3N9JWAucGFkU3RhcnQoNCwgJyAnKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMudGV4dC5sZW5ndGggPiAwID8gYCAke3RoaXMudGV4dH1gIDogJyc7XG5cbiAgICAgICAgdGhpcy5jbGVhckN1cnJlbnRMaW5lKCk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NUZXh0ID0gYCR7cHJvZ3Jlc3NCYXJ9ICR7cGVyY2VudGFnZX0gJHt0ZXh0fWA7XG5cbiAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZSh0aGlzLnByb2dyZXNzVGV4dCk7IC8vIFdyaXRlIHByb2dyZXNzIGJhclxuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJDdXJyZW50TGluZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZExpbmVzID0gTWF0aC5jZWlsKFxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1RleHQubGVuZ3RoIC8gdGhpcy50ZXJtaW5hbC5jb2xzLFxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd3JhcHBlZExpbmVzOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMudGVybWluYWwud3JpdGUoJ1xceDFiWzJLJyk7IC8vIENsZWFyIHRoZSBjdXJyZW50IGxpbmVcbiAgICAgICAgICAgIHRoaXMudGVybWluYWwud3JpdGUoJ1xccicpOyAvLyBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lXG4gICAgICAgICAgICBpZiAoaSA8IHdyYXBwZWRMaW5lcyAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKCdcXHgxYltGJyk7IC8vIE1vdmUgdGhlIGN1cnNvciB1cCBmb3IgYWxsIGJ1dCB0aGUgbGFzdCBsaW5lXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpID09PSB3cmFwcGVkTGluZXMgLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZSgnXFxyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=