/signal

A 700 byte zero dependency single instance of an event emitter. 🎉

Primary LanguageJavaScriptMIT LicenseMIT

Signal

Build Status Coverage Status

 

Signal is a light ~700 Bytes Singleton instance of an Event bus. It works directly in the browser or has support for commonJS and amd modules.

Its Really tiny. Check it out here;

 

Motivation

I got the concept of creating a unified event bus whilst reading this article. What if an app had multiple tech stacks, was there was a way to communicate between them?? This can be super useful for people migrating their stacks from one to another. A unified bus is one of the ways for microservices / micro apps to communicate with one another. Typically they follow a pub sub design pattern

Installation

Using npm

npm install signal-event

yarn add signal-event

Usage

signal-event exports a function which when invoked with a consturctor will generate the same instance every single time. Thereby keeping all your events at one place.

const Signal = require('signal-event');

const S1 = new Signal();

Register An Event handler

S1.on('foo', function(data) {
  console.log(`got data for event name foo`, data)
});

Register Multiple Event handlers

S1.on('foo', handlerFunction1);
S1.on('foo', handlerFunction2);
S1.on('foo', handlerFunction3);
S1.on('foo', handlerFunction4);

S1.emit('foo', { foo: 'bar' })

// This will get triggered in all the handlers;

Emit an Event

S1.emit('foo', { foo: 'bar' })

Remove an Event Hanlder

function beepEventHandler(data) {
  // do something with data
}

S1.on('beep', beepEventHandler);

S1.emit('beep', 'bloop');

S1.remove('beep', beepEventHandler);

/*
* If you need to remove an event handler the function specified
 must have a name, annonymous arrow fn wont work
 S1.remove('beep', () => {}); will not work
*/

Remove All event handlers for an event

S1.remove('beep', null, true);

API

  1. Add Event Listener
Signal.on(eventName, handlerFunction)
  1. Emit Event
Signal.emit(eventName, data)
  1. Remove Event Handler
Signal.remove(eventName, handlerFunction, removeAllHandlers)

Dev Setup

yarn run test
yarn run cover

 

Liked the repo it.

Found any Bugs File them here