5.0.0 • Published 2 years ago
@plugola/message-bus v5.0.0
@plugola/message-bus
Plugola event management
Examples
Simple Event Handling
const messageBus = new MessageBus<
{
foo: [string]
bar: [number, number]
},
{},
{}
>()
messageBus.start()
const broker = messageBus.broker('broker name')
broker.on('foo', (str) => {
console.info(str)
})
broker.on('bar', (num1, num2) => {
console.info(num1 + num2)
})
broker.emit('foo', 'hello world')
broker.emit('bar', 1, 2)
Queued Events
Events are queued until, you call messageBus.start()
.
const messageBus = new MessageBus<{ foo: [string] }, {}, {}>()
const broker = messageBus.broker('my broker')
broker.on('foo', () =>
console.info("I'll log once messageBus.start() is called")
)
broker.emit('foo')
messageBus.start()
Subcription Specificity
You can narrow down you subsciption by the arguments emitted.
const messageBus = new MessageBus<{ foo: [string, string] }, {}, {}>()
const broker = messageBus.broker('my broker')
messageBus.start()
broker.on('foo', 'bar', 'bazzle', () => {
console.info('I only care when foo is emitted with "bar" and "bazzle"')
})
broker.emit('foo', 'rab', 'elzzab') // no subscriptions registered for this event
broker.emit('foo', 'bar', 'bazzle')
Event Interception
You can intercept messages to modify their arguments.
const messageBus = new MessageBus<{ foo: [string] }, {}, {}>()
const broker = messageBus.broker('my broker')
messageBus.start()
broker.intercept('foo', (str) => [str.reverse()])
broker.on('foo', console.info) // rab
broker.emit('foo', 'bar')
You can also cancel the event completely.
import { CancelEvent } from '@plugpola/message-bus'
broker.intercept('foo', () => CancelEvent)
broker.emit('foo') // no subscriptions will get called
Event Generators
You can register any number of "generators" to an event.
const messageBus = new MessageBus<
{},
{ foo: { args: [string]; yield: [string] } },
{}
>()
const broker = messageBus.broker('my broker')
messageBus.start()
broker.generator('foo', async function* (thing) {
yield `${thing} is a thing`
})
broker.generator('foo', 'bar', async function* (thing) {
yield 'Bars are great'
})
for await (const item of broker.iterate('foo', 'bar')) {
// item = "bar is a thing" | "Bars are great"
}
5.0.0
2 years ago
4.0.1
2 years ago
4.0.0
2 years ago
4.0.2
2 years ago
3.5.1
3 years ago
3.5.0
4 years ago
3.4.4
4 years ago
3.4.3
4 years ago
3.4.2
4 years ago
3.4.0
4 years ago
3.3.0
4 years ago
3.2.0
4 years ago
3.4.1
4 years ago
3.1.0
4 years ago
3.0.0
4 years ago
2.0.0
4 years ago
1.10.0
4 years ago
1.9.1
4 years ago
1.9.0
4 years ago
1.7.2
4 years ago
1.8.0
4 years ago
1.7.1
4 years ago
1.7.0
4 years ago
1.6.1
4 years ago
1.6.0
4 years ago
1.5.1
4 years ago
1.5.0
4 years ago
1.4.0
4 years ago
1.3.0
4 years ago
1.2.0
4 years ago
1.1.0
4 years ago
1.0.0
4 years ago
0.0.0
4 years ago