File: //var/www/zaklada/html/node_modules/end-of-stream/index.js
var once = require('once');
var noop = function() {};
var isRequest = function(stream) {
	return stream.setHeader && typeof stream.abort === 'function';
};
var eos = function(stream, opts, callback) {
	if (typeof opts === 'function') return eos(stream, null, opts);
	if (!opts) opts = {};
	callback = once(callback || noop);
	var ws = stream._writableState;
	var rs = stream._readableState;
	var readable = opts.readable || (opts.readable !== false && stream.readable);
	var writable = opts.writable || (opts.writable !== false && stream.writable);
	var onlegacyfinish = function() {
		if (!stream.writable) onfinish();
	};
	var onfinish = function() {
		writable = false;
		if (!readable) callback();
	};
	var onend = function() {
		readable = false;
		if (!writable) callback();
	};
	var onclose = function() {
		if (readable && !(rs && rs.ended)) return callback(new Error('premature close'));
		if (writable && !(ws && ws.ended)) return callback(new Error('premature close'));
	};
	var onrequest = function() {
		stream.req.on('finish', onfinish);
	};
	if (isRequest(stream)) {
		stream.on('complete', onfinish);
		stream.on('abort', onclose);
		if (stream.req) onrequest();
		else stream.on('request', onrequest);
	} else if (writable && !ws) { // legacy streams
		stream.on('end', onlegacyfinish);
		stream.on('close', onlegacyfinish);
	}
	stream.on('end', onend);
	stream.on('finish', onfinish);
	if (opts.error !== false) stream.on('error', callback);
	stream.on('close', onclose);
	return stream;
};
module.exports = eos;