import { readKey } from '../common/fns.ts'; import { ITerminal, ITerminalSize } from '../common/types.ts'; const DenoTerminalIO: ITerminal = { argv: Deno.args, inputLoop: async function* (): AsyncGenerator { yield (await DenoTerminalIO.readStdinRaw()) ?? new Uint8Array(0); return null; }, 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 raw = await DenoTerminalIO.readStdinRaw(); return readKey(raw ?? new Uint8Array(0)); }, readStdinRaw: async function (): Promise { const reader = Deno.stdin.readable.getReader(); const chunk = await reader.read(); const res = chunk?.value; reader.releaseLock(); return res ?? null; }, writeStdout: async function (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;