mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 23:59:59 -05:00
fix(node): add missing process.reallyExit method (#19326)
This PR adds the missing `process.reallyExit()` method to node's `process` object. Was [pinged on twitter](https://twitter.com/biwanczuk/status/1663326659787862017) regarding running the `fastify` test suite in node. They use `node-tap` which has been around arguably the longest of the test frameworks and relies on a couple of old APIs. They have `signal-exit` as a dependency which in turn [makes use of `process.reallyExit()`](8fa7fc9a9c/src/index.ts (L19)
). That function cannot be found anywhere in their documentation, but exists at runtime. See6a6b3c5402/lib/internal/bootstrap/node.js (L172)
This doesn't yet make `node-tap` work, but gets us one step closer.
This commit is contained in:
parent
489d2e81c3
commit
d0efd040c7
3 changed files with 37 additions and 1 deletions
|
@ -727,3 +727,22 @@ Deno.test({
|
|||
assertEquals(stripColor(decoder.decode(stdout).trim()), "exit");
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "process.reallyExit",
|
||||
async fn() {
|
||||
const command = new Deno.Command(Deno.execPath(), {
|
||||
args: [
|
||||
"run",
|
||||
"--quiet",
|
||||
"--unstable",
|
||||
"./testdata/process_really_exit.ts",
|
||||
],
|
||||
cwd: testDir,
|
||||
});
|
||||
const { stdout } = await command.output();
|
||||
|
||||
const decoder = new TextDecoder();
|
||||
assertEquals(stripColor(decoder.decode(stdout).trim()), "really exited");
|
||||
},
|
||||
});
|
||||
|
|
10
cli/tests/unit_node/testdata/process_really_exit.ts
vendored
Normal file
10
cli/tests/unit_node/testdata/process_really_exit.ts
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
import process from "node:process";
|
||||
|
||||
//deno-lint-ignore no-undef
|
||||
// @ts-ignore - Node typings don't even have this because it's
|
||||
// been deprecated for 4 years. But it's used in `signal-exit`,
|
||||
// which in turn is used in `node-tap`.
|
||||
process.reallyExit = function () {
|
||||
console.info("really exited");
|
||||
};
|
||||
process.exit();
|
|
@ -91,7 +91,7 @@ export const exit = (code?: number | string) => {
|
|||
process.emit("exit", process.exitCode || 0);
|
||||
}
|
||||
|
||||
Deno.exit(process.exitCode || 0);
|
||||
process.reallyExit(process.exitCode || 0);
|
||||
};
|
||||
|
||||
function addReadOnlyProcessAlias(
|
||||
|
@ -380,6 +380,13 @@ class Process extends EventEmitter {
|
|||
/** https://nodejs.org/api/process.html#process_process_exit_code */
|
||||
exit = exit;
|
||||
|
||||
// Undocumented Node API that is used by `signal-exit` which in turn
|
||||
// is used by `node-tap`. It was marked for removal a couple of years
|
||||
// ago. See https://github.com/nodejs/node/blob/6a6b3c54022104cc110ab09044a2a0cecb8988e7/lib/internal/bootstrap/node.js#L172
|
||||
reallyExit = (code: number) => {
|
||||
return Deno.exit(code || 0);
|
||||
};
|
||||
|
||||
_exiting = _exiting;
|
||||
|
||||
/** https://nodejs.org/api/process.html#processexitcode_1 */
|
||||
|
|
Loading…
Reference in a new issue