1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-09 07:39:15 -05:00

change type of stdio handles in JS api (#4891)

This commit is contained in:
Bartek Iwańczuk 2020-04-25 01:01:25 +02:00 committed by GitHub
parent 4a8d25646a
commit 912a57f6a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 82 additions and 12 deletions

View file

@ -97,9 +97,66 @@ export class File
} }
} }
export const stdin = new File(0); class Stdin implements Reader, SyncReader, Closer {
export const stdout = new File(1); readonly rid: number;
export const stderr = new File(2); constructor() {
this.rid = 0;
}
read(p: Uint8Array): Promise<number | EOF> {
return read(this.rid, p);
}
readSync(p: Uint8Array): number | EOF {
return readSync(this.rid, p);
}
close(): void {
close(this.rid);
}
}
class Stdout implements Writer, SyncWriter, Closer {
readonly rid: number;
constructor() {
this.rid = 1;
}
write(p: Uint8Array): Promise<number> {
return write(this.rid, p);
}
writeSync(p: Uint8Array): number {
return writeSync(this.rid, p);
}
close(): void {
close(this.rid);
}
}
export class Stderr implements Writer, SyncWriter, Closer {
readonly rid: number;
constructor() {
this.rid = 2;
}
write(p: Uint8Array): Promise<number> {
return write(this.rid, p);
}
writeSync(p: Uint8Array): number {
return writeSync(this.rid, p);
}
close(): void {
close(this.rid);
}
}
export const stdin = new Stdin();
export const stdout = new Stdout();
export const stderr = new Stderr();
function checkOpenOptions(options: OpenOptions): void { function checkOpenOptions(options: OpenOptions): void {
if (Object.values(options).filter((val) => val === true).length === 0) { if (Object.values(options).filter((val) => val === true).length === 0) {

View file

@ -825,12 +825,24 @@ declare namespace Deno {
close(): void; close(): void;
} }
/** An instance of `Deno.File` for `stdin`. */ export interface Stdin extends Reader, SyncReader, Closer {
export const stdin: File; readonly rid: number;
/** An instance of `Deno.File` for `stdout`. */ }
export const stdout: File;
/** An instance of `Deno.File` for `stderr`. */ export interface Stdout extends Writer, SyncWriter, Closer {
export const stderr: File; readonly rid: number;
}
export interface Stderr extends Writer, SyncWriter, Closer {
readonly rid: number;
}
/** A handle for `stdin`. */
export const stdin: Stdin;
/** A handle for `stdout`. */
export const stdout: Stdout;
/** A handle for `stderr`. */
export const stderr: Stderr;
export interface OpenOptions { export interface OpenOptions {
/** Sets the option for read access. This option, when `true`, means that the /** Sets the option for read access. This option, when `true`, means that the

View file

@ -1,7 +1,8 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
import { isTypedArray, TypedArray } from "./util.ts"; import { isTypedArray, TypedArray } from "./util.ts";
import { TextEncoder } from "./text_encoding.ts"; import { TextEncoder } from "./text_encoding.ts";
import { File, stdout } from "../files.ts"; import { SyncWriter } from "../io.ts";
import { stdout } from "../files.ts";
import { cliTable } from "./console_table.ts"; import { cliTable } from "./console_table.ts";
import { exposeForTest } from "../internals.ts"; import { exposeForTest } from "../internals.ts";
import { PromiseState } from "./promise.ts"; import { PromiseState } from "./promise.ts";
@ -38,12 +39,12 @@ export class CSI {
/* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable @typescript-eslint/no-use-before-define */
function cursorTo(stream: File, _x: number, _y?: number): void { function cursorTo(stream: SyncWriter, _x: number, _y?: number): void {
const uint8 = new TextEncoder().encode(CSI.kClear); const uint8 = new TextEncoder().encode(CSI.kClear);
stream.writeSync(uint8); stream.writeSync(uint8);
} }
function clearScreenDown(stream: File): void { function clearScreenDown(stream: SyncWriter): void {
const uint8 = new TextEncoder().encode(CSI.kClearScreenDown); const uint8 = new TextEncoder().encode(CSI.kClearScreenDown);
stream.writeSync(uint8); stream.writeSync(uint8);
} }