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