Scratch space for learning atproto app development
at main 584 B view raw
1const SIGNALS = ['SIGINT', 'SIGTERM'] as const 2 3/** 4 * Runs a function with an abort signal that will be triggered when the process 5 * receives a termination signal. 6 */ 7export async function run<F extends (signal: AbortSignal) => Promise<void>>( 8 fn: F, 9): Promise<void> { 10 const killController = new AbortController() 11 12 const abort = (signal?: string) => { 13 for (const sig of SIGNALS) process.off(sig, abort) 14 killController.abort(signal) 15 } 16 17 for (const sig of SIGNALS) process.on(sig, abort) 18 19 try { 20 await fn(killController.signal) 21 } finally { 22 abort() 23 } 24}