import { ITerminal, ITerminalSize, readKey } from '../common/runtime.ts'; const DenoTerminalIO: ITerminal = { argv: Deno.args, /** * Wrap the runtime-specific hook into stdin */ inputLoop: async function* inputLoop() { for await (const chunk of Deno.stdin.readable) { yield readKey(chunk); } }, getTerminalSize: function getSize(): Promise { const size: { rows: number; columns: number } = Deno.consoleSize(); return Promise.resolve({ rows: size.rows, cols: size.columns, }); }, readStdin: async function (): Promise { const gen = DenoTerminalIO.inputLoop(); const chunk = await gen.next(); return chunk.value!; }, writeStdout: async function write(s: string): Promise { const buffer: Uint8Array = new TextEncoder().encode(s); const stdout: WritableStream = Deno.stdout.writable; const writer: WritableStreamDefaultWriter = stdout.getWriter(); await writer.ready; await writer.write(buffer); writer.releaseLock(); }, }; export default DenoTerminalIO;