# from2

`from2` is a high-level module for creating readable streams that properly handle backpressure.

Convience wrapper for [readable-stream](http://github.com/isaacs/readable-stream)'s `ReadableStream` base class, with an API lifted from [from](http://github.com/dominictarr/from) and [through2](http://github.com/rvagg/through2).

## Usage

[![from2](https://nodei.co/npm/from2.png?mini=true)](https://nodei.co/npm/from2)

### `stream = from2([opts], read)`

Where `opts` are the options to pass on to the `ReadableStream` constructor, and `read(size, next)` is called when data is requested from the stream.

* `size` is the recommended amount of data (in bytes) to retrieve.
* `next(err)` should be called when you're ready to emit more data.

For example, here's a readable stream that emits the contents of a given string:

```javascript
var from = require('from2')

function fromString(string) {
  return from(function(size, next) {
    // if there's no more content
    // left in the string, close the stream.
    if (string.length <= 0) return next(null, null)

    // Pull in a new chunk of text,
    // removing it from the string.
    var chunk = string.slice(0, size)
    string = string.slice(size)

    // Emit "chunk" from the stream.
    next(null, chunk)
  })
}

// pipe "hello world" out
// to stdout.
fromString('hello world').pipe(process.stdout)
```

### `stream = from2.obj([opts], read)`

Shorthand for `from2({ objectMode: true }, read)`.

### `createStream = from2.ctor([opts], read)`

If you're creating similar streams in quick succession you can improve performance by generating a stream **constructor** that you can reuse instead of creating one-off streams on each call.

Takes the same options as `from2`, instead returning a constructor which you can use to create new streams.

### See Also

* [from2-array](https://github.com/binocarlos/from2-array) - Create a from2 stream based on an array of source values.
* [from2-string](https://github.com/yoshuawuyts/from2-string) - Create a stream from a string. Sugary wrapper around from2.

## License

MIT. See [LICENSE.md](http://github.com/hughsk/from2/blob/master/LICENSE.md) for details.
