/**!
 * end-or-error - index.js
 *
 * Copyright(c) stream-utils and other contributors.
 * MIT Licensed
 *
 * Authors:
 *   fengmk2 <m@fengmk2.com> (http://fengmk2.com)
 */

'use strict';

/**
 * Module dependencies.
 */

module.exports = function eoe(stream, cb) {
  if (!stream.readable) {
    return cb();
  }

  stream.on('error', onerror);
  stream.on('end', onend);

  function onerror(err) {
    cleanup();
    cb(err);
  }

  function onend(data) {
    cleanup();
    cb(null, data);
  }

  function cleanup() {
    stream.removeListener('error', onerror);
    stream.removeListener('end', onend);
  }
};