UNPKG

@pilotlab/lux-debug

Version:

A luxurious user experience framework, developed by your friends at Pilot.

57 lines (40 loc) 1.84 kB
let readline = require('readline'); // built-in node package import LogConsole from './logConsole'; export class LogCursor { constructor(console:LogConsole) { this._console = console; } private _console:LogConsole; private _readline:any; setLine(value:number):LogCursor { return this.setPosition(undefined, value); } setColumn(value:number):LogCursor { return this.setPosition(value, undefined); } setPosition(x:number, y:number):LogCursor { readline.cursorTo(this._console.stream, x, y); return this; } move(x:number, y:number):LogCursor { readline.moveCursor(this._console.stream, x, y); return this; } up(value:number = 1):LogCursor { return this.move(0, -Math.abs(value)); } down(value:number = 1):LogCursor { return this.move(0, Math.abs(value)); } left(value:number = 1):LogCursor { return this.move(-Math.abs(value), 0); } right(value:number = 1):LogCursor { return this.move(Math.abs(value), 0); } hide() { this._readline = readline.createInterface({ input: process.stdin, output: process.stdout }); if (this._readline) this._readline.pause(); // This locks down keyboard input. this._console.stream.write(this._encode('[?25l')); // From Charm return this; } show() { if (this._readline) { /// Don't call this._readline.resume() as it interrupts testing. /// Instead, just close the interface. this._readline.close(); } this._console.stream.write(this._encode('[?25h')); // From Charm return this; } /// From Charm private _encode(value:string):Buffer { return new Buffer([0x1b].concat(value.split('').map((value:string) => value.charCodeAt(0)))); }; } // End class export default LogCursor;