import { makeRunMain } from "@effect/platform/Runtime" import { constVoid } from "effect/Function" /** @internal */ export const runMain = makeRunMain(({ fiber, teardown }) => { const keepAlive = setInterval(constVoid, 2 ** 31 - 1) let receivedSignal = false fiber.addObserver((exit) => { if (!receivedSignal) { process.removeListener("SIGINT", onSigint) process.removeListener("SIGTERM", onSigint) } clearInterval(keepAlive) teardown(exit, (code) => { if (receivedSignal || code !== 0) { process.exit(code) } }) }) function onSigint() { receivedSignal = true process.removeListener("SIGINT", onSigint) process.removeListener("SIGTERM", onSigint) fiber.unsafeInterruptAsFork(fiber.id()) } process.on("SIGINT", onSigint) process.on("SIGTERM", onSigint) })