EventNexus - Event management and state synchronization library
npm install @eventnexus/core🚀 EventNexus es una librería de gestión de eventos sencilla y eficiente para TypeScript/JavaScript que facilita la comunicación entre componentes de manera desacoplada y escalable.
- 🎯 Patrón Singleton - Una sola instancia global
- ⚡ Eventos Síncronos y Asíncronos - Soporte completo para ambos modos
- 🌟 Eventos Wildcard - Escucha todos los eventos con *
- 🛡️ Manejo de Errores - Callbacks personalizables para errores
- ⏱️ Timeouts y Abort Signals - Control de tiempo y cancelación
- 🔧 Modos de Ejecución - Secuencial y paralelo
- 📦 TypeScript - Tipado completo y seguro
``bash`
npm install @eventnexus/coreo
yarn add @eventnexus/core
`typescript
import { NexusEventManager } from '@eventnexus/core';
const eventManager = NexusEventManager.getInstance();
// Registrar un listener
eventManager.register('user:login', {
handler: event => {
console.log(Usuario logueado: ${event.payload.name});
},
});
// Emitir un evento
eventManager.emit({
name: 'user:login',
payload: { name: 'Juan Pérez', email: 'juan@example.com' },
});
`
`typescript
// Modo secuencial
await eventManager.emitAsync(
{
name: 'order:paid',
payload: { orderId: 'ORD-001', amount: 99.99 },
},
{
mode: 'sequential',
stopOnError: true,
}
);
// Modo paralelo
await eventManager.emitAsync(
{
name: 'notification:sent',
payload: { message: 'Orden procesada', recipient: 'user@example.com' },
},
{
mode: 'parallel',
timeOutMs: 5000,
}
);
`
`typescriptEvento detectado: ${event.name}
// Escuchar todos los eventos
eventManager.register('*', {
handler: event => {
console.log();`
},
});
`typescript`
NexusEventManager.debug = true; // Habilita logs detallados
`typescriptError en evento "${info.event}":
NexusEventManager.onError = (error, info) => {
console.error(, error);`
};
`typescript`
NexusEventManager.maxListeners = 10; // Límite de listeners por evento
`typescript
// Flujo completo de compra
eventManager.emit({ name: 'user:login', payload: userData });
eventManager.emit({ name: 'order:created', payload: orderData });
await eventManager.emitAsync(
{
name: 'order:paid',
payload: paymentData,
},
{ mode: 'sequential' }
);
await eventManager.emitAsync(
{
name: 'notification:sent',
payload: notificationData,
},
{ mode: 'parallel' }
);
`
`typescript[${new Date().toISOString()}] ${event.name}
// Listener wildcard para logging
eventManager.register('*', {
handler: event => {
console.log(, event.payload);`
},
});
#### Métodos
- getInstance() - Obtiene la instancia singletonregister
- - Registra un listeneremit
- - Emite un evento síncronamenteemitAsync
- - Emite un evento asíncronamente
#### Propiedades Estáticas
- debug: boolean - Habilita modo debugmaxListeners: number
- - Límite de listeners por eventoonError?: (error: unknown, info: { event: string; listenerIndex: number }) => void
- - Callback de error
#### Métodos
- getInstance() - Obtiene la instancia singletonadd(eventName: string)
- - Crea un nuevo evento y retorna su símbologet()
- - Retorna todos los eventos registrados
`typescript
interface NexusEvent
name: string;
payload: T;
}
interface NexusEventListener
handler: (event: NexusEvent
}
interface EmitAsyncOptions {
mode?: 'sequential' | 'parallel';
stopOnError?: boolean;
timeOutMs?: number;
signal?: AbortSignal;
}
``
MIT
Las contribuciones son bienvenidas. Por favor, abre un issue o pull request.