twitst4tz

twitter statistics web application
Log | Files | Refs | README | LICENSE

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 }