Skip to main content

EventBusResolver

The EventBusResolver class creates an event bus for each configured adapter. Use it to dispatch through a default adapter or select a specific adapter at runtime.

Initial configuration​

Configure the named adapters in the constructor, then call init() before registering listeners or selecting an event bus. Initialization creates an event bus for each configured adapter.

./samples/event-bus-resolver-initial-config.ts
import { EventBusResolver } from "eridu-tech/event-bus";
import { RedisPubSubEventBusAdapter } from "eridu-tech/event-bus/redis-pub-sub-event-bus-adapter";
import { MemoryEventBusAdapter } from "eridu-tech/event-bus/memory-event-bus-adapter";
import { SuperJsonSerde } from "eridu-tech/serde/super-json-serde";
import { Redis } from "ioredis";
import { z } from "zod";

type EventMap = {
add: {
a: 1;
b: 2;
};
sub: {
c: number;
d: number;
};
};

const serde = new SuperJsonSerde();
export const eventBusResolver = new EventBusResolver<
"memory" | "redis",
EventMap
>({
eventMapSchema: {
add: z.object({
a: z.literal(1),
b: z.literal(2),
}),
sub: z.object({
c: z.number(),
d: z.number(),
}),
},
adapters: {
memory: new MemoryEventBusAdapter(),
redis: new RedisPubSubEventBusAdapter({
client: new Redis("YOUR_REDIS_CONNECTION_STRING"),
serde,
}),
},
// You can set an optional default adapter
defaultAdapter: "memory",
});

await eventBusResolver.init();

Usage​

Registering listeners​

Register listeners during application setup. The resolver adds each listener to every configured adapter, so it can handle events regardless of which adapter is used to dispatch them.

1. Using the default adapter​

./samples/event-bus-resolver-default-adapter.ts
import { eventBusResolver } from "./event-bus-resolver-initial-config.js";

await eventBusResolver.use().dispatch("add", { a: 1, b: 2 });
danger

If no default adapter is configured and none is specified in use(), an error is thrown.

2. Specifying an adapter explicitly​

./samples/event-bus-resolver-specific-adapter.ts
import { eventBusResolver } from "./event-bus-resolver-initial-config.js";

await eventBusResolver.use("redis").dispatch("add", { a: 1, b: 2 });
danger

If you specify an adapter that is not configured, an error is thrown. Call init() before use(); otherwise, no configured adapter is available yet.

Further information​

For further information refer to eridu-tech/event-bus API docs.