index.js
function read(stream, size, options) {
  if (!options && typeof size === 'object') {
    options = size;
    size = null;
  }
  return readInternal(stream, size, undefined, options);
}
function read(stream, size, options) {
  if (!options && typeof size === 'object') {
    options = size;
    size = null;
  }
  return readInternal(stream, size, undefined, options);
}
function read ( stream , size , options ) { if ( ! options && typeof size === 'object' ) { options = size ; size = null ; } return readInternal ( stream , size , undefined , options ) ; }
Reads from a stream.Readable.
@param {stream.Readable} stream Stream from which to read.
@param {number=} size Number of bytes to read.  If <code>stream.read</code>
is a function, <code>size</code> is passed to it, guaranteeing maximum
result size.  Otherwise, <code>'data'</code> events will be consumed until
<code>size</code> bytes are read, making it a minimum rather than an exact
value.
@param {ReadOptions=} options Options.
@return {Promise<Buffer|string|*>|CancellableReadPromise<Buffer|string|*>}
Promise with result of read or Error.  Result may be shorter than
<code>size</code> if <code>'end'</code> occurs and will be <code>null</code>
if no data can be read.  If an error occurs after reading some data, the
<code>.read</code> property of the error object will contain the partial
read result.  The promise is resolved synchronously for streams in flowing
mode (see README.md for details).
Reads from a stream . Readable .