feat: event aggregator (#6218)

What:
- Event Aggregator Util
- Preparation for normalizing event in a new format (backward compatible with the current format)
- GQL Schema to joiner config and some Entities configured
- Link modules emmiting events
This commit is contained in:
Carlos R. L. Rodrigues authored and GitHub committed 2024-02-05 11:59:10 +00:00
1 parent 73fd92a1af
commit 884428a1b5
66 files changed
+1407 -749

No files matched your search

@@ -1,5 +1,11 @@
import { MedusaContainer } from "@medusajs/modules-sdk"
import { EmitData, EventBusTypes, Logger, Subscriber } from "@medusajs/types"
import {
EmitData,
EventBusTypes,
Logger,
Message,
Subscriber,
} from "@medusajs/types"
import { AbstractEventBusModuleService } from "@medusajs/utils"
import { EventEmitter } from "events"
import { ulid } from "ulid"
@@ -37,14 +43,16 @@ export default class LocalEventBusService extends AbstractEventBusModuleService
*/
async emit<T>(data: EmitData<T>[]): Promise<void>
async emit<T, TInput extends string | EmitData<T>[] = string>(
async emit<T>(data: Message<T>[]): Promise<void>
async emit<T, TInput extends string | EmitData<T>[] | Message<T>[] = string>(
eventOrData: TInput,
data?: T,
options: Record<string, unknown> = {}
): Promise<void> {
const isBulkEmit = Array.isArray(eventOrData)
const events: EmitData[] = isBulkEmit
const events: EmitData[] | Message<T>[] = isBulkEmit
? eventOrData
: [{ eventName: eventOrData, data }]
@@ -61,7 +69,8 @@ export default class LocalEventBusService extends AbstractEventBusModuleService
continue
}
this.eventEmitter_.emit(event.eventName, event.data)
const data = (event as EmitData).data ?? (event as Message<T>).body
this.eventEmitter_.emit(event.eventName, data)
}
}