UNPKG

@jawis/stdio-filter

Version:
48 lines (47 loc) 1.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeUpdateScreen = void 0; const _jab_1 = require("^jab"); /** * */ const makeUpdateScreen = (deps) => { let cursorPos = 0; const shown = []; const gotoAndClearLine = (lineNumber) => { const diff = lineNumber - cursorPos; //move up/down if (diff < 0) { deps.streamOutput("\x1B[" + -diff + "A"); } else if (diff > 0) { deps.streamOutput("\x1B[" + diff + "B"); } //erase line deps.streamOutput("\x1B[2K"); //goto start of line deps.streamOutput("\x1B[1G"); //done cursorPos = lineNumber; }; const outputLine = (lineNumber, line) => { (0, _jab_1.assert)(line.indexOf("\n") === -1); gotoAndClearLine(lineNumber); deps.streamOutput(line); shown[lineNumber] = line; }; return (lines) => { for (let i = 0; i < lines.length; i++) { const line = lines[i]; if (shown[i] !== line) { outputLine(i, line); } } // clear old lines, not used anymore. const count = shown.length - lines.length; for (let i = 0; i < count; i++) { gotoAndClearLine(lines.length + i); } }; }; exports.makeUpdateScreen = makeUpdateScreen;