/*! * 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); } }