Skip to content

Registering Events ​

You can build your Omnibus bus using a builder pattern. During the build step you can register new events in two ways: creating new events using .register method or deriving new events from already existing ones using .derive method.

Registering new event ​

To register new event, call a register method with the new name of the event and the event payload type. To pass the argument types please use args method (it's due to TypeScript limitation of not being able to derive some of the generic types while having other provided manually).

ts
import { Omnibus, args } from '@hypersphere/omnibus'

const bus = Omnibus.builder()
.register('log', args<{ message: string, severity: 'warning' | 'error' }>())
.build()

Deriving an event ​

To derive an event from already existing one, use .derive method. It takes the name of the new event, the event it's result is derived from and callback that transforms the event payload.

ts
import { Omnibus, args } from '@hypersphere/omnibus'

const bus = Omnibus.builder()
.register('log', args<{ message: string, severity: 'warning' | 'error' }>())
.derive('log.error', 'log', b => b.filter(log => log.severity === 'error'))
.build()

The code above creates log.error event bus based on the error bus by filtering in only error messages.

Available methods ​

There are several methods available:

methoddescription
.filterfilters out events based on the result of the callback
.mapmaps each individual event into the new format
.reducetakes previously returned value and the new one to generate a new one
.memoizeremembers the result of the builder transformations based on the parameter