Class EventBus<TEvents, TPayloadMap>

EventBus v2.0 - Sistema de eventos type-safe e configurável.

Biblioteca genérica para pub/sub que pode ser consumida via CDN. Clientes definem seus próprios tipos de eventos através de generics.

const bus = EventBus.getInstance<'userLogin' | 'userLogout'>();
bus.subscribe('userLogin', (data) => console.log(data));
bus.publish('userLogin', { userId: '123' });
type MyEvents = 'login' | 'logout';
interface MyPayloads extends EventPayloadMap<MyEvents> {
login: { userId: string; timestamp: Date };
logout: { reason: string };
}

const bus = EventBus.create<MyEvents, MyPayloads>({
allowedEvents: ['login', 'logout'],
validateEvents: true,
enableMetrics: true
});

bus.subscribe('login', (payload) => {
// payload é tipado como { userId: string; timestamp: Date }
console.log(payload.userId);
});

Type Parameters

  • TEvents extends string = string

    União de strings literais dos eventos permitidos (ex: 'login' | 'logout')

  • TPayloadMap extends EventPayloadMap<TEvents> = EventPayloadMap<TEvents>

    Mapa opcional de tipos de payload por evento

Methods

  • Limpa todos os eventos e callbacks registrados no EventBus.

    Returns void

    bus.clearAllEvents();
    
  • Limpa todos os callbacks inscritos para um evento específico.

    Parameters

    • eventName: TEvents

      Nome do evento a limpar

    Returns void

    bus.clearEvent('login');
    
  • Retorna lista de nomes de eventos que possuem pelo menos um subscriber.

    VERSÃO 2.0: Substitui acesso direto ao campo events que agora é privado.

    Returns TEvents[]

    Array com nomes dos eventos ativos

    const activeEvents = bus.getEventNames();
    console.log('Eventos ativos:', activeEvents);
  • Retorna as métricas coletadas (se enableMetrics=true).

    Returns null | EventBusMetrics

    Objeto com métricas ou null se métricas estiverem desabilitadas

    const metrics = bus.getMetrics();
    if (metrics) {
    console.log('Total de publishes:', metrics.totalPublishes);
    console.log('Subscriptions por evento:', metrics.byEvent);
    }
  • Retorna o número de subscribers para um evento específico.

    Parameters

    Returns number

    Número de subscribers (0 se não houver)

    const count = bus.getSubscriberCount('login');
    console.log(`${count} subscribers para login`);
  • Verifica se um evento possui subscribers.

    Parameters

    • eventName: TEvents

      Nome do evento a verificar

    Returns boolean

    true se o evento possui ao menos um subscriber

    if (bus.hasSubscribers('login')) {
    console.log('Há subscribers para login');
    }
  • Publica um evento, executando todos os callbacks inscritos para ele.

    Erros em callbacks individuais não interrompem a execução dos demais. Callbacks são executados na ordem de inscrição.

    Type Parameters

    • E extends string

      Tipo específico do evento (inferido automaticamente)

    Parameters

    Returns void

    Error se validateEvents=true e o evento não for permitido

    bus.publish('login', { userId: '123', timestamp: new Date() });
    
  • Inscreve um callback para um evento específico.

    Type Parameters

    • E extends string

      Tipo específico do evento (inferido automaticamente)

    Parameters

    Returns Unsubscribe

    Função para desinscrever (Unsubscribe)

    Error se validateEvents=true e o evento não for permitido

    const unsubscribe = bus.subscribe('login', (payload) => {
    console.log('User logged in:', payload);
    });

    // Mais tarde, remover a inscrição
    unsubscribe();
  • Desinscreve um callback específico de um evento.

    Parameters

    Returns void

    const callback = (data) => console.log(data);
    bus.subscribe('login', callback);
    bus.unsubscribe('login', callback);
  • Retorna a instância singleton do EventBus.

    IMPORTANTE: A configuração só é aplicada na primeira chamada. Chamadas subsequentes ignoram o parâmetro config e retornam a instância existente.

    Type Parameters

    Parameters

    Returns EventBus<TEvents, TPayloadMap>

    A instância singleton do EventBus

    // Primeira chamada - configura o singleton
    const bus = EventBus.getInstance<'login' | 'logout'>({
    allowedEvents: ['login', 'logout'],
    validateEvents: true
    });

    // Chamadas subsequentes - retorna instância configurada
    const sameBus = EventBus.getInstance(); // config é ignorado
  • Reseta a instância singleton do EventBus.

    ⚠️ ATENÇÃO: Este método deve ser usado APENAS em testes. Não use em código de produção.

    Returns void

    // Em um arquivo de teste
    afterEach(() => {
    EventBus.resetInstance();
    });