diff --git a/packages/stdlib/src/node.js b/packages/stdlib/src/node.js index 188869c93b..6fe4bcb0a0 100644 --- a/packages/stdlib/src/node.js +++ b/packages/stdlib/src/node.js @@ -63,8 +63,22 @@ export function spawn(command, args, opts = {}) { return new Promise((resolve, reject) => { const sp = cpSpawn(command, args, { stdio: "inherit", ...opts }); - sp.once("error", reject); + const exitHandler = (signal) => { + sp.kill(signal); + }; + + process.once("exit", exitHandler); + + sp.once("error", (...args) => { + process.removeListener("exit", exitHandler); + + // eslint-disable-next-line prefer-promise-reject-errors + return reject(...args); + }); + sp.once("exit", (code) => { + process.removeListener("exit", exitHandler); + resolve({ exitCode: code ?? 0 }); }); });