'use strict'; var once = require('once'); var sliced = require('sliced'); function propagateErrorEvent(to) { var reEmitEvent = once(function reEmitEvt(obj, args) { obj.emit.apply(obj, args); }); return function interceptEmit(from) { var originalEmit = from.emit; from.emit = function emit() { var args = sliced(arguments); if (args[0] !== 'error') { originalEmit.apply(from, args); } else { reEmitEvent(to, args); } }; }; } module.exports = function bubbleError() { var streams = sliced(arguments); var len = streams.length; if (len > 1) { var propagateError = propagateErrorEvent(streams[len - 1]); for (var i = 0; i < len - 1; i++) { propagateError(streams[i]); } } return streams; };