UNPKG

@qodalis/angular-cli

Version:

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

68 lines 8.52 kB
import { delay, } from '@qodalis/cli-core'; export class CliTerminalTextAnimator { constructor(terminal) { this.terminal = terminal; this.isRunning = false; this.text = ''; } show(text) { this.showText(text || ''); } showText(text, options) { const { speed, removeAfterTyping } = options || {}; if (this.isRunning) { return; // Prevent multiple animations } this.isRunning = true; this.text = text || this.text; let index = 0; let isTyping = true; this.animationInterval = setInterval(() => { if (isTyping) { // Write text character by character this.terminal.write(this.text[index]); index++; // Switch to erasing mode once typing is done if (index === this.text.length) { isTyping = false; } } else if (removeAfterTyping) { clearInterval(this.animationInterval); this.animationInterval = null; delay(1000).then(() => { for (let i = 0; i < this.text.length; i++) { this.terminal.write('\b \b'); } }); this.isRunning = false; } else { // Erase text character by character this.terminal.write('\b \b'); // Backspace, overwrite with space, and backspace again index--; // Stop animation once all characters are erased if (index < 0) { clearInterval(this.animationInterval); this.animationInterval = null; this.isRunning = false; } } }, speed || 100); } /** * Hide the animation and reset the state. */ hide() { if (!this.isRunning) { return; // Prevent stopping if not running } this.isRunning = false; if (this.animationInterval) { clearInterval(this.animationInterval); this.animationInterval = null; } this.text = ''; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRlcm1pbmFsLXRleHQtYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGkvc3JjL2xpYi9jbGkvc2VydmljZXMvcHJvZ3Jlc3MtYmFycy9jbGktdGVybWluYWwtdGV4dC1hbmltYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUgsS0FBSyxHQUVSLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsTUFBTSxPQUFPLHVCQUF1QjtJQU1oQyxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBTHRDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFHbkIsU0FBSSxHQUFXLEVBQUUsQ0FBQztJQUVlLENBQUM7SUFFbkMsSUFBSSxDQUFDLElBQWE7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZLEVBQUUsT0FBZ0M7UUFDbkQsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyw4QkFBOEI7U0FDekM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRTlCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUVwQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUN0QyxJQUFJLFFBQVEsRUFBRTtnQkFDVixvQ0FBb0M7Z0JBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsS0FBSyxFQUFFLENBQUM7Z0JBRVIsNkNBQTZDO2dCQUM3QyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDNUIsUUFBUSxHQUFHLEtBQUssQ0FBQztpQkFDcEI7YUFDSjtpQkFBTSxJQUFJLGlCQUFpQixFQUFFO2dCQUMxQixhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFrQixDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0JBRTlCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUNoQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUMxQjtpQkFBTTtnQkFDSCxvQ0FBb0M7Z0JBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsdURBQXVEO2dCQUNyRixLQUFLLEVBQUUsQ0FBQztnQkFFUixnREFBZ0Q7Z0JBQ2hELElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtvQkFDWCxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFrQixDQUFDLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7b0JBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2lCQUMxQjthQUNKO1FBQ0wsQ0FBQyxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTyxDQUFDLGtDQUFrQztTQUM3QztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVybWluYWwgfSBmcm9tICdAeHRlcm0veHRlcm0nO1xuaW1wb3J0IHtcbiAgICBDbGlUZXh0QW5pbWF0b3JPcHRpb25zLFxuICAgIGRlbGF5LFxuICAgIElDbGlUZXh0QW5pbWF0b3IsXG59IGZyb20gJ0Bxb2RhbGlzL2NsaS1jb3JlJztcblxuZXhwb3J0IGNsYXNzIENsaVRlcm1pbmFsVGV4dEFuaW1hdG9yIGltcGxlbWVudHMgSUNsaVRleHRBbmltYXRvciB7XG4gICAgaXNSdW5uaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGFuaW1hdGlvbkludGVydmFsPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbDtcbiAgICBwcml2YXRlIHRleHQ6IHN0cmluZyA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZXJtaW5hbDogVGVybWluYWwpIHt9XG5cbiAgICBwdWJsaWMgc2hvdyh0ZXh0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd1RleHQodGV4dCB8fCAnJyk7XG4gICAgfVxuXG4gICAgc2hvd1RleHQodGV4dDogc3RyaW5nLCBvcHRpb25zPzogQ2xpVGV4dEFuaW1hdG9yT3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IHNwZWVkLCByZW1vdmVBZnRlclR5cGluZyB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gUHJldmVudCBtdWx0aXBsZSBhbmltYXRpb25zXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQgfHwgdGhpcy50ZXh0O1xuXG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBpc1R5cGluZyA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5hbmltYXRpb25JbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1R5cGluZykge1xuICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRleHQgY2hhcmFjdGVyIGJ5IGNoYXJhY3RlclxuICAgICAgICAgICAgICAgIHRoaXMudGVybWluYWwud3JpdGUodGhpcy50ZXh0W2luZGV4XSk7XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgICAgIC8vIFN3aXRjaCB0byBlcmFzaW5nIG1vZGUgb25jZSB0eXBpbmcgaXMgZG9uZVxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy50ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpc1R5cGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVtb3ZlQWZ0ZXJUeXBpbmcpIHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkludGVydmFsID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGRlbGF5KDEwMDApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZSgnXFxiIFxcYicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBFcmFzZSB0ZXh0IGNoYXJhY3RlciBieSBjaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKCdcXGIgXFxiJyk7IC8vIEJhY2tzcGFjZSwgb3ZlcndyaXRlIHdpdGggc3BhY2UsIGFuZCBiYWNrc3BhY2UgYWdhaW5cbiAgICAgICAgICAgICAgICBpbmRleC0tO1xuXG4gICAgICAgICAgICAgICAgLy8gU3RvcCBhbmltYXRpb24gb25jZSBhbGwgY2hhcmFjdGVycyBhcmUgZXJhc2VkXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25JbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBzcGVlZCB8fCAxMDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlIGFuaW1hdGlvbiBhbmQgcmVzZXQgdGhlIHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIFByZXZlbnQgc3RvcHBpbmcgaWYgbm90IHJ1bm5pbmdcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hbmltYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkludGVydmFsID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dCA9ICcnO1xuICAgIH1cbn1cbiJdfQ==