Suby
Suby is a tiny publish-subscibe library.
Installation
$ npm i -S suby
$ yarn add suby
Methods
sub, subscribe, listen, on: (namespace, callback) - subscribes to messages in a namespace and returns unsubscribe function.
pub, publish, emit: (namespace, data?) - publish data to namespace.
unsub, off: (namespace, callback) - unsubscribes from messages in a namespace.
onAny: (callback) - subscribe to messages in all namespaces and returns unsubscribe function.
offAny: (calllback) - unsubscribes from messages in all namespaces.
hasSubscribers: returns Boolean weather the store has registered subscribers.
hasSubscriber: (namespace, callback?) - returns Boolean weather there are subscribers or specific subscriber in provided namespace.
registerMiddleware: (Middleware | Middleware[]): register middleware callbacks that will be called with event name and data
Each middleware must return original or mutated data. Next middleware and callbacks willl be called with the new data.
unregisterMiddleware: (Middleware | Middleware[]): unregister middleware.
Usage
import Suby from 'suby'
const mySubyInstance = new Suby()
const unSub = mySubyInstance.sub('new-user', (userName) => {
console.log(`Hello ${userName}!`)
})
const offAny = mySubyInstance.onAny((event, data) => {
console.log('received new event', event, data)
})
mySubyInstance.pub('new-user', 'John')
unSub()
offAny()
mySubyInstance.pub('new-user', 'Homer')
function myLoggerMiddleware(event, data){
console.log(`Logger`, event, data)
return data
}
mySubyInstance.registerMiddleware(myLoggerMiddleware)
mySubyInstance.pub('new-user', 'Bob')
function onPing(){
console.log('PING')
}
mySubyInstance.on('ping', onPing)
mySubyInstance.off('ping', onPing)
Examples
const eventBus = new Suby()
const unSub = eventBus.sub('assets-loaded', (error) => {
unSub()
})
type Events = {
'event-a': string
'event-b': number
'event-c': undefined
}
const pubSub = new PubSub<Events>()
pubSub.on('event-a', 'hello')