index.js (1118B)
1 /*! 2 * unpipe 3 * Copyright(c) 2015 Douglas Christopher Wilson 4 * MIT Licensed 5 */ 6 7 'use strict' 8 9 /** 10 * Module exports. 11 * @public 12 */ 13 14 module.exports = unpipe 15 16 /** 17 * Determine if there are Node.js pipe-like data listeners. 18 * @private 19 */ 20 21 function hasPipeDataListeners(stream) { 22 var listeners = stream.listeners('data') 23 24 for (var i = 0; i < listeners.length; i++) { 25 if (listeners[i].name === 'ondata') { 26 return true 27 } 28 } 29 30 return false 31 } 32 33 /** 34 * Unpipe a stream from all destinations. 35 * 36 * @param {object} stream 37 * @public 38 */ 39 40 function unpipe(stream) { 41 if (!stream) { 42 throw new TypeError('argument stream is required') 43 } 44 45 if (typeof stream.unpipe === 'function') { 46 // new-style 47 stream.unpipe() 48 return 49 } 50 51 // Node.js 0.8 hack 52 if (!hasPipeDataListeners(stream)) { 53 return 54 } 55 56 var listener 57 var listeners = stream.listeners('close') 58 59 for (var i = 0; i < listeners.length; i++) { 60 listener = listeners[i] 61 62 if (listener.name !== 'cleanup' && listener.name !== 'onclose') { 63 continue 64 } 65 66 // invoke the listener 67 listener.call(stream) 68 } 69 }