"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
/* eslint-disable node/no-process-exit, no-console, no-process-exit */
/**
* Captures process exits and signals and calls user-defined cleanup function.
* On SIGINT, terminate straight away instead of running cleanup function
* Catches uncaught exceptions, and supports asynchronicity in cleanup function
* @param {function} cleanupPromise - graceful cleanup function to call on exit.
* If the function returns false, it will be considered an asynchronous function
* and you will have to run `process.kill(process.pid, errorCode)` yourself.
*/
function cleanupOnExit(cleanupPromise) {
process.on('asyncExit', function () {
cleanupPromise().then(function () {
console.log('Cleanup process finished');
process.exit(0);
}).catch(function (error) {
console.log(error);
process.exit(1);
});
});
function terminateHandler(code) {
console.log("".concat(code, " signal received, terminating straight away"));
// eslint-disable-next-line @typescript-eslint/no-use-before-define -- safe, functions hoisted
removeAllListeners();
process.kill(process.pid, code);
}
function cleanupHandler(code) {
console.log("About to exit with code: ".concat(code));
process.emit('asyncExit', code);
// callback();
// eslint-disable-next-line @typescript-eslint/no-use-before-define -- safe, functions hoisted
removeAllListeners();
}
function removeAllListeners() {
// Node <10 does not have process.off
if (typeof process.off !== 'function') {
process.removeListener('exit', cleanupHandler);
process.removeListener('SIGHUP', cleanupHandler);
process.removeListener('SIGQUIT', cleanupHandler);
process.removeListener('SIGTERM', terminateHandler);
process.removeListener('SIGINT', terminateHandler);
} else {
process.off('exit', cleanupHandler);
process.off('SIGHUP', cleanupHandler);
process.off('SIGQUIT', cleanupHandler);
process.off('SIGTERM', terminateHandler);
process.off('SIGINT', terminateHandler);
}
}
process.on('exit', cleanupHandler);
process.on('SIGHUP', cleanupHandler);
process.on('SIGQUIT', cleanupHandler);
// catch ctrl+c event and exit normally
process.on('SIGINT', terminateHandler);
process.on('SIGTERM', terminateHandler);
// catch uncaught exceptions, trace, then exit with error (will trigger cleanup)
process.on('uncaughtException', function (error) {
console.error('Uncaught Exception:');
console.error(error.stack);
process.exit(1);
});
}
var _default = cleanupOnExit;
exports.default = _default;
//# sourceMappingURL=appCleanup.js.map