@zexson/eventmanager
Version:
Shared utilities for Nex framework
67 lines (66 loc) • 2.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NexEventManager = void 0;
/**
* NexEventManager - Global event management system for Nex framework
*
* A lightweight, static event emitter that provides asynchronous event handling
* with support for one-time listeners and event cleanup.
*
* @example
* ```typescript
* // Register event listeners
* NexEventManager.on('user:login', (user) => {
* console.log(`User ${user.name} logged in`);
* });
*
* // Register one-time listener
* NexEventManager.once('app:ready', () => {
* console.log('Application is ready!');
* });
*
* // Emit events
* NexEventManager.emit('user:login', { name: 'John', id: 123 });
* NexEventManager.emit('app:ready');
*
* // Clear specific event listeners
* NexEventManager.clear('user:login');
*
* // Clear all event listeners
* NexEventManager.clear();
* ```
*
* @features
* - **Asynchronous Execution**: All event handlers run asynchronously using setTimeout
* - **One-time Listeners**: Support for `once()` method that auto-removes after execution
* - **Multiple Listeners**: Multiple functions can listen to the same event
* - **Event Cleanup**: Selective or complete event listener removal
* - **Type Safety**: Full TypeScript support with proper typing
*
* @author SignorMassimo
* @since 1.0.0
*/
class NexEventManager {
static events = [];
static on(event, func) {
this.events.push({ event, func, once: false });
}
static once(event, func) {
this.events.push({ event, func, once: true });
}
static emit(event, ...args) {
setTimeout(() => {
const matchingEvents = this.events.filter(e => e.event === event);
for (const e of matchingEvents)
(async () => await e.func(...args))();
this.events = this.events.filter(e => !(e.event === event && e.once));
}, 0);
}
static clear(event) {
if (event)
this.events = this.events.filter(e => e.event !== event);
else
this.events = [];
}
}
exports.NexEventManager = NexEventManager;