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