/** * Wrap the runtime-specific hook into stdin */ import { ITerminalIO, ITerminalSize } from '../common/mod.ts'; function getSizeFromTput(): ITerminalSize { const rows = parseInt( Bun.spawnSync(['tput', 'lines']).stdout.toString().trim(), 10, ); const cols = parseInt( Bun.spawnSync(['tput', 'cols']).stdout.toString().trim(), 10, ); return { rows: (rows > 0) ? rows + 1 : 25, cols: (cols > 0) ? cols + 1 : 80, }; } const BunTerminalIO: ITerminalIO = { inputLoop: async function* inputLoop() { for await (const chunk of Bun.stdin.stream()) { yield chunk; } }, getSize: function getSize(): ITerminalSize { return getSizeFromTput(); }, write: async function write(s: string): Promise { const buffer = new TextEncoder().encode(s); await Bun.write(Bun.stdout, buffer); }, }; export default BunTerminalIO;