70 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*!
 | 
						|
 * 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)
 | 
						|
  }
 | 
						|
}
 |