Scratch space for learning atproto app development
1const SIGNALS = ['SIGINT', 'SIGTERM'] as const 2 3export async function run<F extends (signal: AbortSignal) => unknown>( 4 fn: F 5): Promise<Awaited<ReturnType<F>>> { 6 const killController = new AbortController() 7 8 const abort = (signal?: string) => { 9 for (const sig of SIGNALS) process.off(sig, abort) 10 killController.abort(signal) 11 } 12 13 for (const sig of SIGNALS) process.on(sig, abort) 14 15 try { 16 return (await fn(killController.signal)) as Awaited<ReturnType<F>> 17 } finally { 18 abort() 19 } 20}