import { type IEventBusAdapter, BaseEvent } from "@daiso-tech/core/event-bus/contracts";
import { EventBusFactory } from "@daiso-tech/core/event-bus";
import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/memory-event-bus-adapter";
import { RedisPubSubEventBusAdapter } from "@daiso-tech/core/event-bus/redis-pub-sub-event-bus-adapter";
import { type FactoryFn } from "@daiso-tech/core/utilities";
import { Serde } from "@daiso-tech/core/serde";
import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/super-json-serde-adapter"
import Redis from "ioredis";
type Store = Partial<Record<string, IEventBusAdapter>>;
const serde = new Serde(new SuperJsonSerdeAdapter());
const store: Store = {};
const eventBusFactory = new EventBusFactory({
  adapters: {
    memory: new MemoryEventBusAdapter(),
    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 } from "@daiso-tech/core/event-bus/memory-event-bus-adapter";
import { RedisPubSubEventBusAdapter } from "@daiso-tech/core/event-bus/redis-pub-sub-event-bus-adapter";
import { type FactoryFn } from "@daiso-tech/core/utilities";
import { Serde } from "@daiso-tech/core/serde";
import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/super-json-serde-adapter"
import Redis from "ioredis";
const serde = new Serde(new SuperJsonSerdeAdapter());
const eventBusFactory = new EventBusFactory({
  adapters: {
    memory: new MemoryEventBusAdapter(),
    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
EventBusFactoryclass is immutable.IMPORT_PATH:
"@daiso-tech/core/event-bus"