"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const events_1 = __importDefault(require("events")); const TERMINATION_TYPES = { sigint: 'sigint', sigbreak: 'sigbreak', shutdown: 'shutdown', }; const TERMINATION_LEVEL_INCREASED_EVENT = 'termination-level-increased'; class TerminationHandler extends events_1.default { constructor() { super(); this.handledSignalsCount = { [TERMINATION_TYPES.sigint]: 0, [TERMINATION_TYPES.sigbreak]: 0, [TERMINATION_TYPES.shutdown]: 0, }; this.terminationLevel = 0; this._setupHandlers(); } _exitEventHandler(terminationType) { this.handledSignalsCount[terminationType]++; if (this.handledSignalsCount[terminationType] > this.terminationLevel) { this.terminationLevel = this.handledSignalsCount[terminationType]; this.emit(TERMINATION_LEVEL_INCREASED_EVENT, this.terminationLevel); } } _setupHandlers() { process.on('SIGINT', () => this._exitEventHandler(TERMINATION_TYPES.sigint)); process.on('SIGBREAK', () => this._exitEventHandler(TERMINATION_TYPES.sigbreak)); process.on('message', message => message === 'shutdown' && this._exitEventHandler(TERMINATION_TYPES.shutdown)); } } exports.default = TerminationHandler; TerminationHandler.TERMINATION_LEVEL_INCREASED_EVENT = TERMINATION_LEVEL_INCREASED_EVENT; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYXRpb24taGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvdGVybWluYXRpb24taGFuZGxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUFrQztBQUdsQyxNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLE1BQU0sRUFBSSxRQUFRO0lBQ2xCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFFBQVEsRUFBRSxVQUFVO0NBQ3ZCLENBQUM7QUFFRixNQUFNLGlDQUFpQyxHQUFHLDZCQUE2QixDQUFDO0FBRXhFLE1BQXFCLGtCQUFtQixTQUFRLGdCQUFZO0lBQ3hEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsbUJBQW1CLEdBQUc7WUFDdkIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBSSxDQUFDO1lBQy9CLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMvQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7U0FDbEMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxpQkFBaUIsQ0FBRSxlQUFlO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBRTVDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRWxFLElBQUksQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDdkU7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRWpGLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNuSCxDQUFDO0NBQ0o7QUEvQkQscUNBK0JDO0FBRUQsa0JBQWtCLENBQUMsaUNBQWlDLEdBQUcsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XG5cblxuY29uc3QgVEVSTUlOQVRJT05fVFlQRVMgPSB7XG4gICAgc2lnaW50OiAgICdzaWdpbnQnLFxuICAgIHNpZ2JyZWFrOiAnc2lnYnJlYWsnLFxuICAgIHNodXRkb3duOiAnc2h1dGRvd24nLFxufTtcblxuY29uc3QgVEVSTUlOQVRJT05fTEVWRUxfSU5DUkVBU0VEX0VWRU5UID0gJ3Rlcm1pbmF0aW9uLWxldmVsLWluY3JlYXNlZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmF0aW9uSGFuZGxlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlZFNpZ25hbHNDb3VudCA9IHtcbiAgICAgICAgICAgIFtURVJNSU5BVElPTl9UWVBFUy5zaWdpbnRdOiAgIDAsXG4gICAgICAgICAgICBbVEVSTUlOQVRJT05fVFlQRVMuc2lnYnJlYWtdOiAwLFxuICAgICAgICAgICAgW1RFUk1JTkFUSU9OX1RZUEVTLnNodXRkb3duXTogMCxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnRlcm1pbmF0aW9uTGV2ZWwgPSAwO1xuXG4gICAgICAgIHRoaXMuX3NldHVwSGFuZGxlcnMoKTtcbiAgICB9XG5cbiAgICBfZXhpdEV2ZW50SGFuZGxlciAodGVybWluYXRpb25UeXBlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlZFNpZ25hbHNDb3VudFt0ZXJtaW5hdGlvblR5cGVdKys7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlZFNpZ25hbHNDb3VudFt0ZXJtaW5hdGlvblR5cGVdID4gdGhpcy50ZXJtaW5hdGlvbkxldmVsKSB7XG4gICAgICAgICAgICB0aGlzLnRlcm1pbmF0aW9uTGV2ZWwgPSB0aGlzLmhhbmRsZWRTaWduYWxzQ291bnRbdGVybWluYXRpb25UeXBlXTtcblxuICAgICAgICAgICAgdGhpcy5lbWl0KFRFUk1JTkFUSU9OX0xFVkVMX0lOQ1JFQVNFRF9FVkVOVCwgdGhpcy50ZXJtaW5hdGlvbkxldmVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zZXR1cEhhbmRsZXJzICgpIHtcbiAgICAgICAgcHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4gdGhpcy5fZXhpdEV2ZW50SGFuZGxlcihURVJNSU5BVElPTl9UWVBFUy5zaWdpbnQpKTtcbiAgICAgICAgcHJvY2Vzcy5vbignU0lHQlJFQUsnLCAoKSA9PiB0aGlzLl9leGl0RXZlbnRIYW5kbGVyKFRFUk1JTkFUSU9OX1RZUEVTLnNpZ2JyZWFrKSk7XG5cbiAgICAgICAgcHJvY2Vzcy5vbignbWVzc2FnZScsIG1lc3NhZ2UgPT4gbWVzc2FnZSA9PT0gJ3NodXRkb3duJyAmJiB0aGlzLl9leGl0RXZlbnRIYW5kbGVyKFRFUk1JTkFUSU9OX1RZUEVTLnNodXRkb3duKSk7XG4gICAgfVxufVxuXG5UZXJtaW5hdGlvbkhhbmRsZXIuVEVSTUlOQVRJT05fTEVWRUxfSU5DUkVBU0VEX0VWRU5UID0gVEVSTUlOQVRJT05fTEVWRUxfSU5DUkVBU0VEX0VWRU5UO1xuIl19