Skip to content

O módulo Event Emitter fornece um sistema de eventos tipado e assíncrono com suporte opcional a padrões wildcard. Métodos decorados com @OnEvent() são automaticamente descobertos e registrados durante o bootstrap — sem necessidade de registro manual.

Instalação

Nenhuma dependência extra necessária — o módulo está incluído em nestelia.

Configuração

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

@Module({
  imports: [
    EventEmitterModule.forRoot({
      wildcard: true,  // habilitar padrões "order.*" e "**"
      global: true,    // tornar EventEmitterService disponível globalmente
    }),
  ],
})
export class AppModule {}

Emitindo eventos

Injete EventEmitterService e chame emitAsync (aguarda todos os handlers) ou emit (dispara e esquece):

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;
  }
}

Ouvindo eventos

Adicione @OnEvent() a qualquer método de qualquer provedor @Injectable(). O módulo escaneia todos os provedores durante onApplicationBootstrap e registra os handlers automaticamente.

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

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

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

Padrões wildcard

Habilite wildcard: true no forRoot para usar padrões no estilo glob:

PadrãoCorresponde a
order.*order.created, order.shipped
**todos os eventos

Opções de configuração

OpçãoTipoPadrãoDescrição
wildcardbooleanfalseHabilitar correspondência wildcard
delimiterstring"."Delimitador de namespace
maxListenersnumber10Máximo de listeners por evento
globalbooleanfalseRegistrar como módulo global

Exportações

ExportaçãoDescrição
EventEmitterModuleClasse do módulo
EventEmitterServiceServiço de emissor de eventos injetável
OnEvent(event, opts?)Decorador de método para handlers
InjectEventEmitter()Atalho para decorador de parâmetro
EVENT_EMITTER_TOKENToken de injeção

Lançado sob a licença MIT.