Node Scripting Patterns
Exit Code Plan
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
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}`);
failedChecks ← 0
10 };11}1213const failedChecks→ 0: number = 0; //@failedChecks=214const summary: CheckSummary = planExit(failedChecks0);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}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
failedChecks ← 2
10 };11}1213const failedChecks→ 2: number = 2;14const summary: CheckSummary = planExit(failedChecks2);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}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