@jawis/stdio-filter
Version:
Filter the stdio from console applications.
48 lines (47 loc) • 1.38 kB
JavaScript
;
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;