42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * exit
							 | 
						||
| 
								 | 
							
								 * https://github.com/cowboy/node-exit
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright (c) 2013 "Cowboy" Ben Alman
							 | 
						||
| 
								 | 
							
								 * Licensed under the MIT license.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = function exit(exitCode, streams) {
							 | 
						||
| 
								 | 
							
								  if (!streams) { streams = [process.stdout, process.stderr]; }
							 | 
						||
| 
								 | 
							
								  var drainCount = 0;
							 | 
						||
| 
								 | 
							
								  // Actually exit if all streams are drained.
							 | 
						||
| 
								 | 
							
								  function tryToExit() {
							 | 
						||
| 
								 | 
							
								    if (drainCount === streams.length) {
							 | 
						||
| 
								 | 
							
								      process.exit(exitCode);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  streams.forEach(function(stream) {
							 | 
						||
| 
								 | 
							
								    // Count drained streams now, but monitor non-drained streams.
							 | 
						||
| 
								 | 
							
								    if (stream.bufferSize === 0) {
							 | 
						||
| 
								 | 
							
								      drainCount++;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      stream.write('', 'utf-8', function() {
							 | 
						||
| 
								 | 
							
								        drainCount++;
							 | 
						||
| 
								 | 
							
								        tryToExit();
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // Prevent further writing.
							 | 
						||
| 
								 | 
							
								    stream.write = function() {};
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  // If all streams were already drained, exit now.
							 | 
						||
| 
								 | 
							
								  tryToExit();
							 | 
						||
| 
								 | 
							
								  // In Windows, when run as a Node.js child process, a script utilizing
							 | 
						||
| 
								 | 
							
								  // this library might just exit with a 0 exit code, regardless. This code,
							 | 
						||
| 
								 | 
							
								  // despite the fact that it looks a bit crazy, appears to fix that.
							 | 
						||
| 
								 | 
							
								  process.on('exit', function() {
							 | 
						||
| 
								 | 
							
								    process.exit(exitCode);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								};
							 |