code: function read(stream, size, options) {
    if (!options && typeof size === 'object') {
      options = size;
      size = null;
    }
    return readInternal(stream, size, undefined, options);
  }
docs: 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).