summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-03-28 19:44:42 +0530
committerGitHub <noreply@github.com>2024-03-28 19:44:42 +0530
commitbca0fe1cde3d30ce31c158862cc6764babf71a14 (patch)
treec494cabd61a859a31307f43bc09721ff70f17031
parentde0b230078daebbbec82ea5d7aabb9f0a429125f (diff)
fix(ext/node): support stdin: "inherit" in node:child_process (#23110)
Fixes https://github.com/denoland/deno/issues/23051
-rw-r--r--ext/node/polyfills/internal/child_process.ts3
-rw-r--r--tests/unit_node/child_process_test.ts32
2 files changed, 34 insertions, 1 deletions
diff --git a/ext/node/polyfills/internal/child_process.ts b/ext/node/polyfills/internal/child_process.ts
index 0ca2a958e..b6137e0d1 100644
--- a/ext/node/polyfills/internal/child_process.ts
+++ b/ext/node/polyfills/internal/child_process.ts
@@ -866,7 +866,7 @@ export function spawnSync(
windowsVerbatimArguments = false,
} = options;
const [
- _stdin_ = "pipe", // TODO(bartlomieju): use this?
+ stdin_ = "pipe",
stdout_ = "pipe",
stderr_ = "pipe",
_channel, // TODO(kt3k): handle this correctly
@@ -881,6 +881,7 @@ export function spawnSync(
env: mapValues(env, (value) => value.toString()),
stdout: toDenoStdio(stdout_),
stderr: toDenoStdio(stderr_),
+ stdin: stdin_ == "inherit" ? "inherit" : "null",
uid,
gid,
windowsRawArguments: windowsVerbatimArguments,
diff --git a/tests/unit_node/child_process_test.ts b/tests/unit_node/child_process_test.ts
index 6a1d1dbc5..23de928db 100644
--- a/tests/unit_node/child_process_test.ts
+++ b/tests/unit_node/child_process_test.ts
@@ -823,3 +823,35 @@ Deno.test(function spawnCommandNullStdioArray() {
assertEquals(ret.status, 0);
});
+
+Deno.test(
+ function stdinInherit() {
+ const script = `
+ function timeoutPromise(promise, timeout) {
+ return new Promise((resolve, reject) => {
+ const timeoutId = setTimeout(() => {
+ Deno.exit(69);
+ }, timeout);
+ promise.then((value) => {
+ clearTimeout(timeoutId);
+ resolve(value);
+ }, (reason) => {
+ clearTimeout(timeoutId);
+ reject(reason);
+ });
+ });
+ }
+
+ await timeoutPromise(Deno.stdin.read(new Uint8Array(1)), 100)
+ `;
+
+ const output = spawnSync(Deno.execPath(), ["eval", script], {
+ stdio: "inherit",
+ });
+
+ // We want to timeout to occur because the stdin isn't 'null'
+ assertEquals(output.status, 69);
+ assertEquals(output.stdout, null);
+ assertEquals(output.stderr, null);
+ },
+);