Environment agnostic event emitter


$ npm install event-emitter

To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: Browserify, Webmake or Webpack

var ee = require('event-emitter');
var emitter = ee({}), listener;
emitter.on('test', listener = function (args) {
  // …emitter logic 
emitter.once('test', function (args) {
  // …invoked only once(!) 
emitter.emit('test', arg1, arg2/*…args*/); // Two above listeners invoked 
emitter.emit('test', arg1, arg2/*…args*/); // Only first listener invoked 
emitter.off('test', listener);              // Removed first listener 
emitter.emit('test', arg1, arg2/*…args*/); // No listeners invoked 

Removes all listeners from given event emitter object

Whether object has some listeners attached to the object. When name is provided, it checks listeners for specific event name

var emitter = ee();
var hasListeners = require('event-emitter/has-listeners');
var listener = function () {};
hasListeners(emitter); // false 
emitter.on('foo', listener);
hasListeners(emitter); // true 
hasListeners(emitter, 'foo'); // true 
hasListeners(emitter, 'bar'); // false 
emitter.off('foo', listener);
hasListeners(emitter, 'foo'); // false 

Pipes all events from source emitter onto target emitter (all events from source emitter will be emitted also on target emitter, but not other way).
Returns pipe object which exposes pipe.close function. Invoke it to close configured pipe.
It works internally by redefinition of emit method, if in your interface this method is referenced differently, provide its name (or symbol) with third argument.

Unifies event handling for two objects. Events emitted on emitter1 would be also emitter on emitter2, and other way back.
Non reversible.

var eeUnify = require('event-emitter/unify');
var emitter1 = ee(), listener1, listener3;
var emitter2 = ee(), listener2, listener4;
emitter1.on('test', listener1 = function () { });
emitter2.on('test', listener2 = function () { });
emitter1.emit('test'); // Invoked listener1 
emitter2.emit('test'); // Invoked listener2 
var unify = eeUnify(emitter1, emitter2);
emitter1.emit('test'); // Invoked listener1 and listener2 
emitter2.emit('test'); // Invoked listener1 and listener2 
emitter1.on('test', listener3 = function () { });
emitter2.on('test', listener4 = function () { });
emitter1.emit('test'); // Invoked listener1, listener2, listener3 and listener4 
emitter2.emit('test'); // Invoked listener1, listener2, listener3 and listener4 


$ npm test