@beenotung/tslib
Version:
utils library in Typescript
53 lines (52 loc) • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProgressCli = void 0;
const char_1 = require("./char");
class ProgressCli {
lastMessageLength = 0;
writeStream;
replaceChar;
constructor(options = {}) {
this.writeStream = options.out || process.stderr;
this.replaceChar = options.replaceChar || ' ';
}
write(message, mode) {
this.writeStream.write(message);
if (mode != 'do-not-replace') {
const index = message.lastIndexOf('\n');
if (index == -1) {
this.lastMessageLength += message.length + (0, char_1.countFullWidthChars)(message);
}
else {
this.lastMessageLength =
message.length - index + (0, char_1.countFullWidthChars)(message.slice(index + 1));
}
}
}
writeln(message) {
this.writeStream.write(message + '\n');
this.lastMessageLength = 0;
}
update(message) {
const { writeStream, lastMessageLength } = this;
const newMessageLength = message.length + (0, char_1.countFullWidthChars)(message);
if (writeStream.moveCursor) {
writeStream.moveCursor(-lastMessageLength, 0);
writeStream.write(message);
const excessMessageLength = lastMessageLength - newMessageLength;
if (excessMessageLength > 0) {
writeStream.write(this.replaceChar.repeat(excessMessageLength));
writeStream.moveCursor(-excessMessageLength, 0);
}
}
else {
writeStream.write('\n' + message);
}
this.lastMessageLength = newMessageLength;
}
nextLine() {
this.writeStream.write('\n');
this.lastMessageLength = 0;
}
}
exports.ProgressCli = ProgressCli;