2.0.0 • Published 6 years ago

@krab/vent v2.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
6 years ago

vent

v2.0.0

We follow breaking.feature.fix versioning

npm install --save @krab/vent

This module provides a simple-to-use and context-aware event-aggregator. Usage given below:

Importing
import Vent from '@krab/vent'; // in projects with ES7 modules
const Vent = require('@krab/vent/common'); // in projects with common JS modules

const vent = new Vent();
Basic Usage
const fooListener = () => console.log('foo');

vent.on('foo', fooListener); // attaches 'fooListener' to event 'foo'
vent.emit('foo'); // emits 'foo' and runs all attached listeners
vent.off('foo'); // removes all listeners attached to event 'foo'
vent.off('foo', fooListener); // removes 'fooListener' from event 'foo'
Once Listener
const onceListener = () => {
  if (onceListener.hasRun) {
    throw new Error('onceListener has run');
  }

  onceListener.hasRun = true;
};
onceListener.hasRun = false;

vent.once('once', onceListener); // 'onceListener' will be run only once for event 'once'
vent.emit('once'); // 'onceListener' will run and will be removed
vent.emit('once'); // 'onceListener' won't run again
Context Awareness

Event listeners can also be registered in context of an object. This gives us more control over the listeners.

const foo = () => console.log('foo');
const bar = () => console.log('bar');
const baz = () => console.log('baz');

const ctx = {};

vent.on('foo', foo, ctx);
vent.on('bar', bar, ctx);
vent.once('baz', baz, ctx);

vent.emit(ctx, 'foo'); // will run listener 'foo'
vent.emit('bar'); // will NOT run listener 'bar'

vent.off('foo', foo, ctx); // will remove listener 'foo' from the event for context 'ctx'
vent.off('foo', ctx); // will remove all listeners for event 'foo' for context 'ctx'

vent.off(ctx); // will remove all listeners for context 'ctx'