Scratch space for learning atproto app development
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}