Merge commit '36c66dd290d3ce6eb1ccd310d0c658d4a32bb8eb' as 'repos/effect'

This commit is contained in:
-Puter
2026-07-19 03:25:18 +05:30
parent dd1071cc10
commit 2daf979036
2214 changed files with 673090 additions and 0 deletions
@@ -0,0 +1,59 @@
/**
* Node-compatible process runner for Effect programs.
*
* This module provides the shared `runMain` implementation used by
* Node-compatible platform packages. It runs one Effect as the main process
* fiber, interrupts that fiber on `SIGINT` or `SIGTERM`, and delegates final
* exit-code handling to the configured teardown.
*
* @since 4.0.0
*/
import type { Effect } from "effect/Effect"
import * as Runtime from "effect/Runtime"
/**
* Runs an Effect as the Node process main program, interrupting the fiber on
* `SIGINT` or `SIGTERM` and invoking the configured teardown to determine the
* process exit code.
*
* @category running
* @since 4.0.0
*/
export const runMain: {
(
options?: {
readonly disableErrorReporting?: boolean | undefined
readonly teardown?: Runtime.Teardown | undefined
}
): <E, A>(effect: Effect<A, E>) => void
<E, A>(
effect: Effect<A, E>,
options?: {
readonly disableErrorReporting?: boolean | undefined
readonly teardown?: Runtime.Teardown | undefined
}
): void
} = Runtime.makeRunMain(({
fiber,
teardown
}) => {
let receivedSignal = false
fiber.addObserver((exit) => {
process.removeListener("SIGINT", onSigint)
process.removeListener("SIGTERM", onSigint)
teardown(exit, (code) => {
if (receivedSignal || code !== 0) {
process.exit(code)
}
})
})
function onSigint() {
receivedSignal = true
fiber.interruptUnsafe(fiber.id)
}
process.on("SIGINT", onSigint)
process.on("SIGTERM", onSigint)
})