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.
		
		
		
		
		
			
		
			
				
					
					
						
							75 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							75 lines
						
					
					
						
							1.0 KiB
						
					
					
				/*! | 
						|
 * destroy | 
						|
 * Copyright(c) 2014 Jonathan Ong | 
						|
 * MIT Licensed | 
						|
 */ | 
						|
 | 
						|
'use strict' | 
						|
 | 
						|
/** | 
						|
 * Module dependencies. | 
						|
 * @private | 
						|
 */ | 
						|
 | 
						|
var ReadStream = require('fs').ReadStream | 
						|
var Stream = require('stream') | 
						|
 | 
						|
/** | 
						|
 * Module exports. | 
						|
 * @public | 
						|
 */ | 
						|
 | 
						|
module.exports = destroy | 
						|
 | 
						|
/** | 
						|
 * Destroy a stream. | 
						|
 * | 
						|
 * @param {object} stream | 
						|
 * @public | 
						|
 */ | 
						|
 | 
						|
function destroy(stream) { | 
						|
  if (stream instanceof ReadStream) { | 
						|
    return destroyReadStream(stream) | 
						|
  } | 
						|
 | 
						|
  if (!(stream instanceof Stream)) { | 
						|
    return stream | 
						|
  } | 
						|
 | 
						|
  if (typeof stream.destroy === 'function') { | 
						|
    stream.destroy() | 
						|
  } | 
						|
 | 
						|
  return stream | 
						|
} | 
						|
 | 
						|
/** | 
						|
 * Destroy a ReadStream. | 
						|
 * | 
						|
 * @param {object} stream | 
						|
 * @private | 
						|
 */ | 
						|
 | 
						|
function destroyReadStream(stream) { | 
						|
  stream.destroy() | 
						|
 | 
						|
  if (typeof stream.close === 'function') { | 
						|
    // node.js core bug work-around | 
						|
    stream.on('open', onOpenClose) | 
						|
  } | 
						|
 | 
						|
  return stream | 
						|
} | 
						|
 | 
						|
/** | 
						|
 * On open handler to close stream. | 
						|
 * @private | 
						|
 */ | 
						|
 | 
						|
function onOpenClose() { | 
						|
  if (typeof this.fd === 'number') { | 
						|
    // actually close down the fd | 
						|
    this.close() | 
						|
  } | 
						|
}
 | 
						|
 |