@graphql-mesh/utils
Version:
33 lines (32 loc) • 1.02 kB
JavaScript
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;
}