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}