UNPKG

@zexson/eventmanager

Version:
67 lines (66 loc) 2.14 kB
"use strict"; 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;