@graphql-mesh/utils
Version:
37 lines (36 loc) • 1.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerTerminateHandler = registerTerminateHandler;
exports.getTerminateStack = getTerminateStack;
const disposablestack_1 = require("@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);
}
});
}
}
function registerTerminateHandler(callback) {
if (!eventListenerRegistered) {
registerEventListener();
eventListenerRegistered = true;
}
terminateHandlers.add(callback);
return () => {
terminateHandlers.delete(callback);
};
}
let terminateStack;
function getTerminateStack() {
if (!terminateStack) {
terminateStack = new disposablestack_1.AsyncDisposableStack();
registerTerminateHandler(() => terminateStack.disposeAsync());
}
return terminateStack;
}