diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/io/12_io.js | 106 | ||||
| -rw-r--r-- | ext/node/lib.rs | 1 | ||||
| -rw-r--r-- | ext/node/polyfills/_process/streams.mjs | 12 | ||||
| -rw-r--r-- | ext/node/polyfills/process.ts | 6 |
4 files changed, 116 insertions, 9 deletions
diff --git a/ext/io/12_io.js b/ext/io/12_io.js index b9ff1190b..d1f3b8b1b 100644 --- a/ext/io/12_io.js +++ b/ext/io/12_io.js @@ -7,6 +7,10 @@ const core = globalThis.Deno.core; const ops = core.ops; const primordials = globalThis.__bootstrap.primordials; +import { + readableStreamForRid, + writableStreamForRid, +} from "internal:deno_web/06_streams.js"; const { Uint8Array, ArrayPrototypePush, @@ -221,6 +225,105 @@ async function readAllInnerSized(r, size, options) { } } +class Stdin { + #readable; + + constructor() { + } + + get rid() { + return 0; + } + + read(p) { + return read(this.rid, p); + } + + readSync(p) { + return readSync(this.rid, p); + } + + close() { + core.close(this.rid); + } + + get readable() { + if (this.#readable === undefined) { + this.#readable = readableStreamForRid(this.rid); + } + return this.#readable; + } + + setRaw(mode, options = {}) { + const cbreak = !!(options.cbreak ?? false); + ops.op_stdin_set_raw(mode, cbreak); + } +} + +class Stdout { + #writable; + + constructor() { + } + + get rid() { + return 1; + } + + write(p) { + return write(this.rid, p); + } + + writeSync(p) { + return writeSync(this.rid, p); + } + + close() { + core.close(this.rid); + } + + get writable() { + if (this.#writable === undefined) { + this.#writable = writableStreamForRid(this.rid); + } + return this.#writable; + } +} + +class Stderr { + #writable; + + constructor() { + } + + get rid() { + return 2; + } + + write(p) { + return write(this.rid, p); + } + + writeSync(p) { + return writeSync(this.rid, p); + } + + close() { + core.close(this.rid); + } + + get writable() { + if (this.#writable === undefined) { + this.#writable = writableStreamForRid(this.rid); + } + return this.#writable; + } +} + +const stdin = new Stdin(); +const stdout = new Stdout(); +const stderr = new Stderr(); + export { copy, iter, @@ -233,6 +336,9 @@ export { readAllSyncSized, readSync, SeekMode, + stderr, + stdin, + stdout, write, writeSync, }; diff --git a/ext/node/lib.rs b/ext/node/lib.rs index 444dffeec..a1fa9408a 100644 --- a/ext/node/lib.rs +++ b/ext/node/lib.rs @@ -365,6 +365,7 @@ pub fn init_polyfill() -> Extension { Extension::builder(env!("CARGO_PKG_NAME")) .esm(esm_files) .esm_entry_point("internal:deno_node/module_all.ts") + .dependencies(vec!["deno_io"]) .ops(vec