| 'use strict'; | |
| 
 | |
| module.exports = (stream, throwError) => { | |
|   return new Promise((resolve, reject) => { | |
|     if (typeof stream.resume !== 'function') { | |
|       return resolve(); | |
|     } | |
| 
 | |
|     // unpipe it | |
|     stream.unpipe && stream.unpipe(); | |
|     // enable resume first | |
|     stream.resume(); | |
| 
 | |
|     if (stream._readableState && stream._readableState.ended) { | |
|       return resolve(); | |
|     } | |
|     if (!stream.readable || stream.destroyed) { | |
|       return resolve(); | |
|     } | |
| 
 | |
|     function cleanup() { | |
|       stream.removeListener('end', onEnd); | |
|       stream.removeListener('close', onEnd); | |
|       stream.removeListener('error', onError); | |
|     } | |
| 
 | |
|     function onEnd() { | |
|       cleanup(); | |
|       resolve(); | |
|     } | |
| 
 | |
|     function onError(err) { | |
|       cleanup(); | |
|       // don't throw error by default | |
|       if (throwError) { | |
|         reject(err); | |
|       } else { | |
|         resolve(); | |
|       } | |
|     } | |
| 
 | |
|     stream.on('end', onEnd); | |
|     stream.on('close', onEnd); | |
|     stream.on('error', onError); | |
|   }); | |
| };
 |