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.
		
		
		
		
		
			
		
			
				
					70 lines
				
				1.1 KiB
			
		
		
			
		
	
	
					70 lines
				
				1.1 KiB
			| 
											3 years ago
										 | /*! | ||
|  |  * unpipe | ||
|  |  * Copyright(c) 2015 Douglas Christopher Wilson | ||
|  |  * MIT Licensed | ||
|  |  */ | ||
|  | 
 | ||
|  | 'use strict' | ||
|  | 
 | ||
|  | /** | ||
|  |  * Module exports. | ||
|  |  * @public | ||
|  |  */ | ||
|  | 
 | ||
|  | module.exports = unpipe | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if there are Node.js pipe-like data listeners. | ||
|  |  * @private | ||
|  |  */ | ||
|  | 
 | ||
|  | function hasPipeDataListeners(stream) { | ||
|  |   var listeners = stream.listeners('data') | ||
|  | 
 | ||
|  |   for (var i = 0; i < listeners.length; i++) { | ||
|  |     if (listeners[i].name === 'ondata') { | ||
|  |       return true | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return false | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Unpipe a stream from all destinations. | ||
|  |  * | ||
|  |  * @param {object} stream | ||
|  |  * @public | ||
|  |  */ | ||
|  | 
 | ||
|  | function unpipe(stream) { | ||
|  |   if (!stream) { | ||
|  |     throw new TypeError('argument stream is required') | ||
|  |   } | ||
|  | 
 | ||
|  |   if (typeof stream.unpipe === 'function') { | ||
|  |     // new-style
 | ||
|  |     stream.unpipe() | ||
|  |     return | ||
|  |   } | ||
|  | 
 | ||
|  |   // Node.js 0.8 hack
 | ||
|  |   if (!hasPipeDataListeners(stream)) { | ||
|  |     return | ||
|  |   } | ||
|  | 
 | ||
|  |   var listener | ||
|  |   var listeners = stream.listeners('close') | ||
|  | 
 | ||
|  |   for (var i = 0; i < listeners.length; i++) { | ||
|  |     listener = listeners[i] | ||
|  | 
 | ||
|  |     if (listener.name !== 'cleanup' && listener.name !== 'onclose') { | ||
|  |       continue | ||
|  |     } | ||
|  | 
 | ||
|  |     // invoke the listener
 | ||
|  |     listener.call(stream) | ||
|  |   } | ||
|  | } |