53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
|
var reorder = require('./lib/reorder');
|
||
|
var respawn = require('./lib/respawn');
|
||
|
var remover = require('./lib/remover');
|
||
|
|
||
|
var FORBID_RESPAWNING_FLAG = '--no-respawning';
|
||
|
|
||
|
module.exports = function(flags, argv, forcedFlags, execute) {
|
||
|
if (!flags) {
|
||
|
throw new Error('You must specify flags to respawn with.');
|
||
|
}
|
||
|
if (!argv) {
|
||
|
throw new Error('You must specify an argv array.');
|
||
|
}
|
||
|
|
||
|
if (typeof forcedFlags === 'function') {
|
||
|
execute = forcedFlags;
|
||
|
forcedFlags = [];
|
||
|
}
|
||
|
|
||
|
if (typeof forcedFlags === 'string') {
|
||
|
forcedFlags = [forcedFlags];
|
||
|
}
|
||
|
|
||
|
if (!Array.isArray(forcedFlags)) {
|
||
|
forcedFlags = [];
|
||
|
}
|
||
|
|
||
|
var index = argv.indexOf(FORBID_RESPAWNING_FLAG);
|
||
|
if (index >= 0) {
|
||
|
argv = argv.slice(0, index).concat(argv.slice(index + 1));
|
||
|
argv = remover(flags, argv);
|
||
|
execute(true, process, argv);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var proc = process;
|
||
|
var reordered = reorder(flags, argv);
|
||
|
var ready = JSON.stringify(argv) === JSON.stringify(reordered);
|
||
|
|
||
|
if (forcedFlags.length) {
|
||
|
reordered = reordered.slice(0, 1)
|
||
|
.concat(forcedFlags)
|
||
|
.concat(reordered.slice(1));
|
||
|
ready = false;
|
||
|
}
|
||
|
|
||
|
if (!ready) {
|
||
|
reordered.push(FORBID_RESPAWNING_FLAG);
|
||
|
proc = respawn(reordered);
|
||
|
}
|
||
|
execute(ready, proc, reordered);
|
||
|
};
|