forked from jchomaz/Vulture
37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.KillOnSignal = void 0;
|
|
const operators_1 = require("rxjs/operators");
|
|
/**
|
|
* Watches the main concurrently process for signals and sends the same signal down to each spawned
|
|
* command.
|
|
*/
|
|
class KillOnSignal {
|
|
constructor({ process }) {
|
|
this.process = process;
|
|
}
|
|
handle(commands) {
|
|
let caughtSignal;
|
|
['SIGINT', 'SIGTERM', 'SIGHUP'].forEach((signal) => {
|
|
this.process.on(signal, () => {
|
|
caughtSignal = signal;
|
|
commands.forEach((command) => command.kill(signal));
|
|
});
|
|
});
|
|
return {
|
|
commands: commands.map((command) => {
|
|
const closeStream = command.close.pipe((0, operators_1.map)((exitInfo) => {
|
|
const exitCode = caughtSignal === 'SIGINT' ? 0 : exitInfo.exitCode;
|
|
return { ...exitInfo, exitCode };
|
|
}));
|
|
return new Proxy(command, {
|
|
get(target, prop) {
|
|
return prop === 'close' ? closeStream : target[prop];
|
|
},
|
|
});
|
|
}),
|
|
};
|
|
}
|
|
}
|
|
exports.KillOnSignal = KillOnSignal;
|