src/stream/pipe.js
function _gpfStreamPipe (source, destination) {
    _gpfIgnore(destination);
    var iReadableStream = _gpfStreamQueryReadable(source),
        iWritableStream = _gpfStreamPipeToWritable(_gpfArrayTail(arguments)),
        iFlushableStream = _gpfStreamPipeToFlushable(iWritableStream);
    try {
        return iReadableStream.read(iWritableStream)
            .then(function () {
                return iFlushableStream.flush();
            });
    } catch (e) {
        return Promise.reject(e);
    }
}
function _gpfStreamPipe (source, destination) {
    _gpfIgnore(destination);
    var iReadableStream = _gpfStreamQueryReadable(source),
        iWritableStream = _gpfStreamPipeToWritable(_gpfArrayTail(arguments)),
        iFlushableStream = _gpfStreamPipeToFlushable(iWritableStream);
    try {
        return iReadableStream.read(iWritableStream)
            .then(function () {
                return iFlushableStream.flush();
            });
    } catch (e) {
        return Promise.reject(e);
    }
}
function _gpfStreamPipe ( source , destination ) { _gpfIgnore ( destination ) ; var iReadableStream = _gpfStreamQueryReadable ( source ) , iWritableStream = _gpfStreamPipeToWritable ( _gpfArrayTail ( arguments ) ) , iFlushableStream = _gpfStreamPipeToFlushable ( iWritableStream ) ; try { return iReadableStream . read ( iWritableStream ) . then ( function ( ) { return iFlushableStream . flush ( ) ; } ) ; } catch ( e ) { return Promise . reject ( e ) ; } }
Pipe streams.

@param {gpf.interfaces.IReadableStream} source Source stream
@param {...gpf.interfaces.IWritableStream} destination Writable streams
@return {Promise} Resolved when reading (and subsequent writings) are done
@since 0.2.3
Pipe streams .