mirror of
https://github.com/denoland/deno.git
synced 2024-10-29 08:58:01 -04:00
feat: deprecate Deno.{stdin,stdout,stderr}.rid
(#22073)
For removal in Deno v2. There are two issues: 1. Any script being run causes the output of `warnOnDeprecatedApi()` to be printed, even when none of the `rid` properties are called. 2. `.rid` of these classes is used in multiple tests. I'm not sure how to account for that. I thought of having `STDIN_RID`, and friends, constants, whose values can be shared between the tests and the classes themselves. Should we go with that or do something else? --------- Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
This commit is contained in:
parent
547468e625
commit
300eeb343e
3 changed files with 77 additions and 27 deletions
27
cli/tsc/dts/lib.deno.ns.d.ts
vendored
27
cli/tsc/dts/lib.deno.ns.d.ts
vendored
|
@ -2727,8 +2727,13 @@ declare namespace Deno {
|
||||||
* @category I/O
|
* @category I/O
|
||||||
*/
|
*/
|
||||||
export const stdin: Reader & ReaderSync & Closer & {
|
export const stdin: Reader & ReaderSync & Closer & {
|
||||||
/** The resource ID assigned to `stdin`. This can be used with the discreet
|
/**
|
||||||
* I/O functions in the `Deno` namespace. */
|
* The resource ID assigned to `stdin`. This can be used with the discreet
|
||||||
|
* I/O functions in the `Deno` namespace.
|
||||||
|
*
|
||||||
|
* @deprecated Use {@linkcode Deno.stdin} instance methods instead.
|
||||||
|
* {@linkcode Deno.stdin.rid} will be removed in Deno 2.0.
|
||||||
|
*/
|
||||||
readonly rid: number;
|
readonly rid: number;
|
||||||
/** A readable stream interface to `stdin`. */
|
/** A readable stream interface to `stdin`. */
|
||||||
readonly readable: ReadableStream<Uint8Array>;
|
readonly readable: ReadableStream<Uint8Array>;
|
||||||
|
@ -2769,8 +2774,13 @@ declare namespace Deno {
|
||||||
* @category I/O
|
* @category I/O
|
||||||
*/
|
*/
|
||||||
export const stdout: Writer & WriterSync & Closer & {
|
export const stdout: Writer & WriterSync & Closer & {
|
||||||
/** The resource ID assigned to `stdout`. This can be used with the discreet
|
/**
|
||||||
* I/O functions in the `Deno` namespace. */
|
* The resource ID assigned to `stdout`. This can be used with the discreet
|
||||||
|
* I/O functions in the `Deno` namespace.
|
||||||
|
*
|
||||||
|
* @deprecated Use {@linkcode Deno.stdout} instance methods instead.
|
||||||
|
* {@linkcode Deno.stdout.rid} will be removed in Deno 2.0.
|
||||||
|
*/
|
||||||
readonly rid: number;
|
readonly rid: number;
|
||||||
/** A writable stream interface to `stdout`. */
|
/** A writable stream interface to `stdout`. */
|
||||||
readonly writable: WritableStream<Uint8Array>;
|
readonly writable: WritableStream<Uint8Array>;
|
||||||
|
@ -2797,8 +2807,13 @@ declare namespace Deno {
|
||||||
* @category I/O
|
* @category I/O
|
||||||
*/
|
*/
|
||||||
export const stderr: Writer & WriterSync & Closer & {
|
export const stderr: Writer & WriterSync & Closer & {
|
||||||
/** The resource ID assigned to `stderr`. This can be used with the discreet
|
/**
|
||||||
* I/O functions in the `Deno` namespace. */
|
* The resource ID assigned to `stderr`. This can be used with the discreet
|
||||||
|
* I/O functions in the `Deno` namespace.
|
||||||
|
*
|
||||||
|
* @deprecated Use {@linkcode Deno.stderr} instance methods instead.
|
||||||
|
* {@linkcode Deno.stderr.rid} will be removed in Deno 2.0.
|
||||||
|
*/
|
||||||
readonly rid: number;
|
readonly rid: number;
|
||||||
/** A writable stream interface to `stderr`. */
|
/** A writable stream interface to `stderr`. */
|
||||||
readonly writable: WritableStream<Uint8Array>;
|
readonly writable: WritableStream<Uint8Array>;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// Interfaces 100% copied from Go.
|
// Interfaces 100% copied from Go.
|
||||||
// Documentation liberally lifted from them too.
|
// Documentation liberally lifted from them too.
|
||||||
// Thank you! We love Go! <3
|
// Thank you! We love Go! <3
|
||||||
|
|
||||||
import { core, internals, primordials } from "ext:core/mod.js";
|
import { core, internals, primordials } from "ext:core/mod.js";
|
||||||
const {
|
const {
|
||||||
op_stdin_set_raw,
|
op_stdin_set_raw,
|
||||||
|
@ -179,31 +180,41 @@ function concatBuffers(buffers) {
|
||||||
return contents;
|
return contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const STDIN_RID = 0;
|
||||||
|
const STDOUT_RID = 1;
|
||||||
|
const STDERR_RID = 2;
|
||||||
|
|
||||||
class Stdin {
|
class Stdin {
|
||||||
|
#rid = STDIN_RID;
|
||||||
#readable;
|
#readable;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
get rid() {
|
get rid() {
|
||||||
return 0;
|
internals.warnOnDeprecatedApi(
|
||||||
|
"Deno.stdin.rid",
|
||||||
|
new Error().stack,
|
||||||
|
"Use `Deno.stdin` instance methods instead.",
|
||||||
|
);
|
||||||
|
return this.#rid;
|
||||||
}
|
}
|
||||||
|
|
||||||
read(p) {
|
read(p) {
|
||||||
return read(this.rid, p);
|
return read(this.#rid, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
readSync(p) {
|
readSync(p) {
|
||||||
return readSync(this.rid, p);
|
return readSync(this.#rid, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close() {
|
||||||
core.tryClose(this.rid);
|
core.tryClose(this.#rid);
|
||||||
}
|
}
|
||||||
|
|
||||||
get readable() {
|
get readable() {
|
||||||
if (this.#readable === undefined) {
|
if (this.#readable === undefined) {
|
||||||
this.#readable = readableStreamForRid(this.rid);
|
this.#readable = readableStreamForRid(this.#rid);
|
||||||
}
|
}
|
||||||
return this.#readable;
|
return this.#readable;
|
||||||
}
|
}
|
||||||
|
@ -214,75 +225,87 @@ class Stdin {
|
||||||
}
|
}
|
||||||
|
|
||||||
isTerminal() {
|
isTerminal() {
|
||||||
return op_is_terminal(this.rid);
|
return op_is_terminal(this.#rid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Stdout {
|
class Stdout {
|
||||||
|
#rid = STDOUT_RID;
|
||||||
#writable;
|
#writable;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
get rid() {
|
get rid() {
|
||||||
return 1;
|
internals.warnOnDeprecatedApi(
|
||||||
|
"Deno.stdout.rid",
|
||||||
|
new Error().stack,
|
||||||
|
"Use `Deno.stdout` instance methods instead.",
|
||||||
|
);
|
||||||
|
return this.#rid;
|
||||||
}
|
}
|
||||||
|
|
||||||
write(p) {
|
write(p) {
|
||||||
return write(this.rid, p);
|
return write(this.#rid, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
writeSync(p) {
|
writeSync(p) {
|
||||||
return writeSync(this.rid, p);
|
return writeSync(this.#rid, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close() {
|
||||||
core.close(this.rid);
|
core.close(this.#rid);
|
||||||
}
|
}
|
||||||
|
|
||||||
get writable() {
|
get writable() {
|
||||||
if (this.#writable === undefined) {
|
if (this.#writable === undefined) {
|
||||||
this.#writable = writableStreamForRid(this.rid);
|
this.#writable = writableStreamForRid(this.#rid);
|
||||||
}
|
}
|
||||||
return this.#writable;
|
return this.#writable;
|
||||||
}
|
}
|
||||||
|
|
||||||
isTerminal() {
|
isTerminal() {
|
||||||
return op_is_terminal(this.rid);
|
return op_is_terminal(this.#rid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Stderr {
|
class Stderr {
|
||||||
|
#rid = STDERR_RID;
|
||||||
#writable;
|
#writable;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
get rid() {
|
get rid() {
|
||||||
return 2;
|
internals.warnOnDeprecatedApi(
|
||||||
|
"Deno.stderr.rid",
|
||||||
|
new Error().stack,
|
||||||
|
"Use `Deno.stderr` instance methods instead.",
|
||||||
|
);
|
||||||
|
return this.#rid;
|
||||||
}
|
}
|
||||||
|
|
||||||
write(p) {
|
write(p) {
|
||||||
return write(this.rid, p);
|
return write(this.#rid, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
writeSync(p) {
|
writeSync(p) {
|
||||||
return writeSync(this.rid, p);
|
return writeSync(this.#rid, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close() {
|
||||||
core.close(this.rid);
|
core.close(this.#rid);
|
||||||
}
|
}
|
||||||
|
|
||||||
get writable() {
|
get writable() {
|
||||||
if (this.#writable === undefined) {
|
if (this.#writable === undefined) {
|
||||||
this.#writable = writableStreamForRid(this.rid);
|
this.#writable = writableStreamForRid(this.#rid);
|
||||||
}
|
}
|
||||||
return this.#writable;
|
return this.#writable;
|
||||||
}
|
}
|
||||||
|
|
||||||
isTerminal() {
|
isTerminal() {
|
||||||
return op_is_terminal(this.rid);
|
return op_is_terminal(this.#rid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,9 +322,14 @@ export {
|
||||||
readAllSync,
|
readAllSync,
|
||||||
readSync,
|
readSync,
|
||||||
SeekMode,
|
SeekMode,
|
||||||
|
Stderr,
|
||||||
stderr,
|
stderr,
|
||||||
|
STDERR_RID,
|
||||||
stdin,
|
stdin,
|
||||||
|
STDIN_RID,
|
||||||
|
Stdout,
|
||||||
stdout,
|
stdout,
|
||||||
|
STDOUT_RID,
|
||||||
write,
|
write,
|
||||||
writeSync,
|
writeSync,
|
||||||
};
|
};
|
||||||
|
|
|
@ -37,7 +37,14 @@ export function createWritableStdioStream(writer, name) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
stream.fd = writer?.rid ?? -1;
|
let fd = -1;
|
||||||
|
|
||||||
|
if (writer instanceof io.Stdout) {
|
||||||
|
fd = io.STDOUT_RID;
|
||||||
|
} else if (writer instanceof io.Stderr) {
|
||||||
|
fd = io.STDERR_RID;
|
||||||
|
}
|
||||||
|
stream.fd = fd;
|
||||||
stream.destroySoon = stream.destroy;
|
stream.destroySoon = stream.destroy;
|
||||||
stream._isStdio = true;
|
stream._isStdio = true;
|
||||||
stream.once("close", () => writer?.close());
|
stream.once("close", () => writer?.close());
|
||||||
|
@ -117,7 +124,7 @@ export function setReadStream(s) {
|
||||||
// https://github.com/nodejs/node/blob/v18.12.1/lib/internal/bootstrap/switches/is_main_thread.js#L189
|
// https://github.com/nodejs/node/blob/v18.12.1/lib/internal/bootstrap/switches/is_main_thread.js#L189
|
||||||
/** Create process.stdin */
|
/** Create process.stdin */
|
||||||
export const initStdin = () => {
|
export const initStdin = () => {
|
||||||
const fd = io.stdin?.rid;
|
const fd = io.stdin ? io.STDIN_RID : undefined;
|
||||||
let stdin;
|
let stdin;
|
||||||
const stdinType = _guessStdinType(fd);
|
const stdinType = _guessStdinType(fd);
|
||||||
|
|
||||||
|
@ -172,7 +179,7 @@ export const initStdin = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
stdin.on("close", () => io.stdin?.close());
|
stdin.on("close", () => io.stdin?.close());
|
||||||
stdin.fd = io.stdin?.rid ?? -1;
|
stdin.fd = io.stdin ? io.STDIN_RID : -1;
|
||||||
Object.defineProperty(stdin, "isTTY", {
|
Object.defineProperty(stdin, "isTTY", {
|
||||||
enumerable: true,
|
enumerable: true,
|
||||||
configurable: true,
|
configurable: true,
|
||||||
|
|
Loading…
Reference in a new issue