6 var duplexer = require('duplexer2');
7 var Stream = require('stream');
27 module.exports = pipe;
32 * @param {Stream,...,[Function]}
38 if (arguments.length == 1) return arguments[0];
39 var streams = slice.call(arguments);
41 if ('function' == typeof streams[streams.length - 1]) {
42 cb = streams.splice(-1)[0];
44 var first = streams[0];
45 var last = streams[streams.length - 1];
48 if (first.writable && last.readable) ret = duplexer(opts, first, last);
49 else if (first.writable) ret = first;
50 else if (last.readable) ret = last;
51 else ret = new Stream;
53 streams.forEach(function(stream, i){
54 var next = streams[i+1];
55 if (next) stream.pipe(next);
56 if (stream != ret) stream.on('error', ret.emit.bind(ret, 'error'));
62 last.on('finish', end);