UNPKG

@graphql-mesh/utils

Version:
33 lines (32 loc) 1.02 kB
import { AsyncDisposableStack } from '@whatwg-node/disposablestack'; const terminateEvents = ['SIGINT', 'SIGTERM']; let eventListenerRegistered = false; const terminateHandlers = new Set(); function registerEventListener() { for (const eventName of terminateEvents) { globalThis.process?.once(eventName, () => { for (const handler of terminateHandlers) { handler(eventName); terminateHandlers.delete(handler); } }); } } export function registerTerminateHandler(callback) { if (!eventListenerRegistered) { registerEventListener(); eventListenerRegistered = true; } terminateHandlers.add(callback); return () => { terminateHandlers.delete(callback); }; } let terminateStack; export function getTerminateStack() { if (!terminateStack) { terminateStack = new AsyncDisposableStack(); registerTerminateHandler(() => terminateStack.disposeAsync()); } return terminateStack; }