Skip to content

El módulo Event Emitter proporciona un sistema de eventos tipado y asíncrono con soporte opcional para patrones wildcard. Los métodos decorados con @OnEvent() son descubiertos y registrados automáticamente durante el bootstrap, sin necesidad de registro manual.

Instalación

No se necesitan dependencias adicionales — el módulo está incluido en nestelia.

Configuración

typescript
import { Module } from "nestelia";
import { EventEmitterModule } from "nestelia/event-emitter";

@Module({
  imports: [
    EventEmitterModule.forRoot({
      wildcard: true,  // habilitar patrones "order.*" y "**"
      global: true,    // hacer EventEmitterService disponible globalmente
    }),
  ],
})
export class AppModule {}

Emitiendo eventos

Inyecta EventEmitterService y llama a emitAsync (espera todos los handlers) o emit (dispara y olvida):

typescript
import { Injectable } from "nestelia";
import { EventEmitterService } from "nestelia/event-emitter";

@Injectable()
export class OrdersService {
  constructor(private readonly events: EventEmitterService) {}

  async placeOrder(order: Order) {
    await this.events.emitAsync("order.created", order);
    return order;
  }
}

Escuchando eventos

Añade @OnEvent() a cualquier método de cualquier proveedor @Injectable(). El módulo escanea todos los proveedores durante onApplicationBootstrap y registra los handlers automáticamente.

typescript
import { Injectable } from "nestelia";
import { OnEvent } from "nestelia/event-emitter";

@Injectable()
export class NotificationListener {
  @OnEvent("order.created")
  handleOrderCreated(order: Order) {
    console.log("Nuevo pedido:", order.id);
  }

  @OnEvent("order.*")
  handleAnyOrderEvent(order: Order) {
    console.log("Evento de pedido disparado");
  }
}

Patrones wildcard

Habilita wildcard: true en forRoot para usar patrones estilo glob:

PatrónCoincide con
order.*order.created, order.shipped
**todos los eventos

Opciones de configuración

OpciónTipoPor defectoDescripción
wildcardbooleanfalseHabilitar coincidencia wildcard
delimiterstring"."Delimitador de namespace
maxListenersnumber10Máximo de listeners por evento
globalbooleanfalseRegistrar como módulo global

Exportaciones

ExportaciónDescripción
EventEmitterModuleClase del módulo
EventEmitterServiceServicio de emisor de eventos inyectable
OnEvent(event, opts?)Decorador de método para handlers
InjectEventEmitter()Atajo para decorador de parámetro
EVENT_EMITTER_TOKENToken de inyección

Publicado bajo la licencia MIT.