Scripts can compute an exit decision before actually calling process.exit.

exit decision Calculating an exit code as data keeps the core logic testable and easy to trace.

Exit Code Plan

failedChecks
exit_plan.ts
Replay: real traced execution (multi-file project)
type CheckSummary = {
    failed: number;
    exitCode: number;
};

function planExit(failed: number): CheckSummary {
    return {
        failed,
        exitCode: failed === 0 ? 0 : 1
    };
}

const failedChecks: number = 0;
const summary: CheckSummary = planExit(failedChecks);

console.log(`failed=${summary.failed};exit=${summary.exitCode}`);
type CheckSummary = {
    failed: number;
    exitCode: number;
};

function planExit(failed: number): CheckSummary {
    return {
        failed,
        exitCode: failed === 0 ? 0 : 1
    };
}

const failedChecks: number = 2;
const summary: CheckSummary = planExit(failedChecks);

console.log(`failed=${summary.failed};exit=${summary.exitCode}`);
  1. failedChecks ← 0

    10    };11}1213const failedChecks→ 0: number = 0;  //@failedChecks=214const summary: CheckSummary = planExit(failedChecks0);
  2. function planExit(failed: number): CheckSummary

    3    exitCode: number;4};56function planExit(failed0: number): CheckSummary {7    return {8        failed,9        exitCode: failed === 0 ? 0 : 110    };11}
  3. summary ← [object Object]

    13const failedChecks: number = 0;  //@failedChecks=214const summary→ [object Object]: CheckSummary = planExit(failedChecks0);1516console.log(`failed=${summary.failed0};exit=${summary.exitCode0}`);
    outputfailed=0;exit=0
  1. failedChecks ← 2

    10    };11}1213const failedChecks→ 2: number = 2;14const summary: CheckSummary = planExit(failedChecks2);
  2. function planExit(failed: number): CheckSummary

    3    exitCode: number;4};56function planExit(failed2: number): CheckSummary {7    return {8        failed,9        exitCode: failed === 0 ? 0 : 110    };11}
  3. summary ← [object Object]

    13const failedChecks: number = 2;14const summary→ [object Object]: CheckSummary = planExit(failedChecks2);1516console.log(`failed=${summary.failed2};exit=${summary.exitCode1}`);
    outputfailed=2;exit=1