@cw-base/event
v1.0.1
Published
Async event bus with stop/error flow control for cw-base stack.
Readme
@cw-base/event
Asenkron event yönetimi; handler'lar sıralı çalışır, stop() ve fail() çağrıları ile akış kontrol edilir, son result değeri döndürülür.
Kurulum
pnpm add @cw-base/eventEventBus otomatik olarak DI container'ına singleton olarak kaydedilir. LogService ile entegre olduğu için log paketinin de bootstrap'te hazır olması önerilir.
Kullanım
import "reflect-metadata";
import { Container } from "@cw-base/di";
import { EventBus } from "@cw-base/event";
const container = new Container();
const events = container.resolve(EventBus);
events.on("user.registered", async (ctx) => {
await sendWelcomeEmail(ctx.payload.email);
ctx.setResult("email-sent");
});
events.on("user.registered", async (ctx) => {
if (!ctx.payload.profileComplete) {
ctx.stop();
ctx.setResult("pending-profile");
}
});
const result = await events.emit("user.registered", {
email: "[email protected]",
profileComplete: false
});
console.log(result.result); // "pending-profile"
console.log(result.hasStopped); // trueAPI
EventBus
on(event, handler)/off(event, handler)/once(event, handler)emit(event, payload)→Promise<EventResult<T>>listSubscriptions()kayıtlı handler'ları döndürür.
EventContext
payload: orijinal event verisiresult: son set edilen değersetResult(value)stop()sonraki handler'ları engellerfail(error, message?)hata durumunu işaretler ve stop ederhasStopped,hasError,errorMessage,error
EventResult
emit sonucunda dönen obje: hasError, hasStopped, errorMessage, error, result.
Wildcard Aboneleri
* event adına subscribe edilen handler'lar tüm eventler için tetiklenir:
events.on("*", async (ctx) => {
auditLogger.info("event", { name: ctx.name, payload: ctx.payload });
});Handler exception fırlatırsa fail() davranışı tetiklenir ve log servisi üzerinden hata kaydı yapılır.
