UNPKG

@beenotung/tslib

Version:
53 lines (52 loc) 1.85 kB
"use strict"; 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;