@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
JavaScript
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==