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