'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); }); };