| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 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);};
 |