|                                                                |  | #through
[](http://travis-ci.org/dominictarr/through)[](https://ci.testling.com/dominictarr/through)
Easy way to create a `Stream` that is both `readable` and `writable`. 
* Pass in optional `write` and `end` methods.* `through` takes care of pause/resume logic if you use `this.queue(data)` instead of `this.emit('data', data)`.* Use `this.pause()` and `this.resume()` to manage flow.* Check `this.paused` to see current flow state. (`write` always returns `!this.paused`).
This function is the basis for most of the synchronous streams in [event-stream](http://github.com/dominictarr/event-stream).
``` jsvar through = require('through')
through(function write(data) {    this.queue(data) //data *must* not be null  },  function end () { //optional    this.queue(null)  })```
Or, can also be used _without_ buffering on pause, use `this.emit('data', data)`,and this.emit('end')
``` jsvar through = require('through')
through(function write(data) {    this.emit('data', data)    //this.pause()   },  function end () { //optional    this.emit('end')  })```
## Extended Options
You will probably not need these 99% of the time.
### autoDestroy=false
By default, `through` emits close when the writableand readable side of the stream has ended.If that is not desired, set `autoDestroy=false`.
``` jsvar through = require('through')
//like thisvar ts = through(write, end, {autoDestroy: false})//or like thisvar ts = through(write, end)ts.autoDestroy = false```
## License
MIT / Apache2
 |