Skip to main content
Home

event broker based on javascript generator etiher synchronous and asynchronous

This package works with Node.js, Bun, BrowsersIt is unknown whether this package works with Cloudflare Workers, Deno
It is unknown whether this package works with Cloudflare Workers
This package works with Node.js
It is unknown whether this package works with Deno
This package works with Bun
This package works with Browsers
JSR Score
88%
Published
a year ago (2.0.0)

Event Broker

In process event brokers based on javascript generator

The available brokers are:

  • AsyncEventBroker

    An asynchronous event broker that support a single event handler.

  • EventBroker

    Synchronous event broker that support a single event handlers

  • AsyncEventBrokerML

    An asynchronous event broker that supports multiple event handlers.

  • AsyncEventBrokerTopicsML

    An asynchronous event broker that supports multiple topics with multiple event handlers.

AsyncEventBroker Usage

Define Events' type

const replySymbol = Symbol("reply"); 

type ListenEvent = { data: string, [replySymbol]?: boolean  }
type ReplyEvent = { result: string }

Create an instance

const broker = new AsyncEventBroker<ListenEvent, ReplyEvent>()

Start broker


const listenerId = await broker.on( async ( ev:ListenEvent ) => {

    // handle event
    const result = await doSomething( ev.data )

    if( !!ev[replySymbol] ) { // if reply is required
        return { result } ; // this will be replyed to sender
    }
})

Note:

listenerId must be stored because it is need for eventually stop listening event. This is because: Only who start broker will be able to stop it

Send event to broker


await broker.emit( { data: "message1" } )

Send event to broker and wait reply


const reply = await broker.emitWithReply( { data: "message_with_reply", [replySymbol]: true  } )
// reply = { result: "....." }

Stop broker


try {
    await broker.off( startId )
}
catch( e ) {
    // startId is not valid !!!
}

Other Examples

Other usage examples could be found in test folder

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@soulsoftware/event-broker

Import symbol

import * as event_broker from "@soulsoftware/event-broker";
or

Import directly with a jsr specifier

import * as event_broker from "jsr:@soulsoftware/event-broker";

Add Package

pnpm i jsr:@soulsoftware/event-broker
or (using pnpm 10.8 or older)
pnpm dlx jsr add @soulsoftware/event-broker

Import symbol

import * as event_broker from "@soulsoftware/event-broker";

Add Package

yarn add jsr:@soulsoftware/event-broker
or (using Yarn 4.8 or older)
yarn dlx jsr add @soulsoftware/event-broker

Import symbol

import * as event_broker from "@soulsoftware/event-broker";

Add Package

vlt install jsr:@soulsoftware/event-broker

Import symbol

import * as event_broker from "@soulsoftware/event-broker";

Add Package

npx jsr add @soulsoftware/event-broker

Import symbol

import * as event_broker from "@soulsoftware/event-broker";

Add Package

bunx jsr add @soulsoftware/event-broker

Import symbol

import * as event_broker from "@soulsoftware/event-broker";