import { type IEventBusAdapter, BaseEvent } from "@daiso-tech/core/event-bus/contracts";
import { EventBusFactory } from "@daiso-tech/core/event-bus";
import { MemoryEventBusAdapter, RedisPubSubEventBusAdapter } from "@daiso-tech/core/event-bus/adapters";
import { Namespace, type FactoryFn } from "@daiso-tech/core/utilities";
import { Serde } from "@daiso-tech/core/serde";
import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/adapters"
import Redis from "ioredis";
type Store = Partial<Record<string, IEventBusAdapter>>;
function cahceAdapterFactory(store: Store): FactoryFn<string, IEventBusAdapter> {
return (prefix) => {
let adapter = store[prefix];
if (adapter === undefined) {
adapter = new MemoryEventBusAdapter();
store[prefix] = adapter;
}
return adapter;
}
}
const serde = new Serde(new SuperJsonSerdeAdapter());
const store: Store = {};
const eventBusFactory = new EventBusFactory({
namespace: new Namespace("event-bus"),
adapters: {
memory: new MemoryEventBusAdapter(),
memoryFactory: cahceAdapterFactory(store),
redis: new RedisPubSubEventBusAdapter({
serde,
dispatcherClient: new Redis("YOUR_REDIS_CONNECTION_STRING"),
listenerClient: new Redis("YOUR_REDIS_CONNECTION_STRING"),
}),
},
defaultAdapter: "memory"
});
import { type IEventBusAdapter, BaseEvent } from "@daiso-tech/core/event-bus/contracts";
import { EventBusFactory } from "@daiso-tech/core/event-bus";
import { MemoryEventBusAdapter, RedisPubSubEventBusAdapter } from "@daiso-tech/core/event-bus/adapters";
import { Namespace, type FactoryFn } from "@daiso-tech/core/utilities";
import { Serde } from "@daiso-tech/core/serde";
import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/adapters"
import Redis from "ioredis";
type Store = Partial<Record<string, IEventBusAdapter>>;
function cahceAdapterFactory(store: Store): FactoryFn<string, IEventBusAdapter> {
return (prefix) => {
let adapter = store[prefix];
if (adapter === undefined) {
adapter = new MemoryEventBusAdapter();
store[prefix] = adapter;
}
return adapter;
}
}
const dispatcherClient = new Redis("YOUR_REDIS_CONNECTION_STRING");
const listenerClient = new Redis("YOUR_REDIS_CONNECTION_STRING");
const serde = new Serde(new SuperJsonSerdeAdapter());
const store: Store = {};
const eventBusFactory = new EventBusFactory({
namespace: new Namespace("event-bus"),
adapters: {
memory: new MemoryEventBusAdapter(),
memoryFactory: cahceAdapterFactory(store),
redis: new RedisPubSubEventBusAdapter({
serde,
dispatcherClient: new Redis("YOUR_REDIS_CONNECTION_STRING"),
listenerClient: new Redis("YOUR_REDIS_CONNECTION_STRING"),
}),
},
defaultAdapter: "memory"
});
type AddEvent = {
a: number;
b: number;
};
type EventMap = {
add: AddEvent;
};
// Will dispatch AddEvent using the default adapter which is MemoryEventBusAdapter
await eventBusFactory
.use<EventMap>()
.dispatch("add", { a: 1, b: 2 });
// Will dispatch AddEvent using the redis adapter which is RedisPubSubEventBusAdapter
await eventBusFactory
.use<EventMap>("redis")
.dispatch("add", { a: 1, b: 2 });
The
EventBusFactory
class is immutable.IMPORT_PATH:
"@daiso-tech/core/event-bus"