scroll/src/deno/terminal_io.ts

32 lines
867 B
JavaScript

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