You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							52 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							52 lines
						
					
					
						
							1.2 KiB
						
					
					
				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); | 
						|
};
 | 
						|
 |