second
[josuexyz/.git] / node_modules / unpipe / index.js
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 }