# emit-stream

> turn event emitters into streams and streams into event emitters

Latest version **0.1.2** (published 2013-05-16) · MIT license · 0 weekly downloads

## Install

```sh
npm install emit-stream
pnpm add emit-stream
yarn add emit-stream
bun add emit-stream
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.2 |
| Published | 2013-05-16 |
| First published | 2012-08-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | James Halliday |
| Maintainers | substack |
| Keywords | emit, event, emitter, EventEmitter, stream |

## Links

- npm: https://www.npmjs.com/package/emit-stream
- Repository: https://github.com/substack/emit-stream
- npm.io page: https://npm.io/package/emit-stream

## Dependencies (1)

- [through](https://npm.io/package/through.md) ~2.3.4

## Alternatives

- [async-exit-hook](https://npm.io/package/async-exit-hook.md) — 3.7M weekly downloads
- [evnty](https://npm.io/package/evnty.md) — 7.2K weekly downloads
- [eleventy-plugin-asciidoc](https://npm.io/package/eleventy-plugin-asciidoc.md) — 3.5K weekly downloads
- [@jswork/next-get2get](https://npm.io/package/@jswork/next-get2get.md) — 945 weekly downloads
- [@dashersw/axon](https://npm.io/package/@dashersw/axon.md) — 934 weekly downloads

## Recent versions

- 0.1.2 (latest) — 2013-05-16
- 0.1.1 — 2013-05-13
- 0.1.0 — 2012-08-28
- 0.0.0 — 2012-08-21

## README

# emit-stream

turn event emitters into streams and streams into event emitters

[![build status](https://secure.travis-ci.org/substack/emit-stream.png)](http://travis-ci.org/substack/emit-stream)

![emit stream explained](http://substack.net/images/emit_stream.gif)

# example

write a server that streams an event emitter's events to clients:

``` js
var emitStream = require('emit-stream');
var JSONStream = require('JSONStream');
var net = require('net');

var server = (function () {
    var ev = createEmitter();
    
    return net.createServer(function (stream) {
        emitStream(ev)
            .pipe(JSONStream.stringify())
            .pipe(stream)
        ;
    });
})();
server.listen(5555);

var EventEmitter = require('events').EventEmitter;

function createEmitter () {
    var ev = new EventEmitter;
    setInterval(function () {
        ev.emit('ping', Date.now());
    }, 2000);
    
    var x = 0;
    setInterval(function () {
        ev.emit('x', x ++);
    }, 500);
    
    return ev;
}
```

then re-constitute the event-emitters on the client:

``` js
var emitStream = require('emit-stream');
var net = require('net');

var stream = net.connect(5555)
    .pipe(JSONStream.parse([true]))
;
var ev = emitStream(stream);

ev.on('ping', function (t) {
    console.log('# ping: ' + t);
});

ev.on('x', function (x) {
    console.log('x = ' + x);
});
```

***

```
$ node example/emit.js 
x = 0
x = 1
x = 2
x = 3
# ping: 1346116850523
x = 4
x = 5
^C
```

# methods

``` js
var emitStream = require('emit-stream')
```

## emitStream(x)

If `x` is a stream, returns an event emitter from `emit.toStream(x)`.

Otherwise returns a stream from `emit.fromStream(x)`.

## emitStream.toStream(emitter)

Return a stream from the EventEmitter `emitter`.

The `'data'` emitted by this stream will be array data.
Serialization is up to you. I recommend
[JSONStream](http://github.com/dominictarr/JSONStream)
for most purposes.

## emitStream.fromStream(stream)

Return an EventEmitter from `stream`.

The `'data'` written to this stream should be an array, like
[JSONStream](http://github.com/dominictarr/JSONStream) creates.

# install

With [npm](http://npmjs.org) do:

```
npm install emit-stream
```

# license

MIT

---
_Source: https://npm.io/package/emit-stream · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
