@carry0987/event-emitter
Advanced tools
Comparing version 1.1.0 to 1.1.1
@@ -7,9 +7,9 @@ type EventArgs<T> = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T]; | ||
listeners(): { | ||
[event: string]: ((...args: any[]) => void)[]; | ||
[event: string]: ((...args: any[]) => void | Promise<void>)[]; | ||
}; | ||
addListener<EventName extends keyof EventTypes>(event: EventName, listener: (...args: EventArgs<EventTypes[EventName]>) => void): EventEmitter<EventTypes>; | ||
on<EventName extends keyof EventTypes>(event: EventName, listener: (...args: EventArgs<EventTypes[EventName]>) => void): EventEmitter<EventTypes>; | ||
off<EventName extends keyof EventTypes>(event: EventName, listener: (...args: EventArgs<EventTypes[EventName]>) => void): EventEmitter<EventTypes>; | ||
emit<EventName extends keyof EventTypes>(event: EventName, ...args: EventArgs<EventTypes[EventName]>): boolean; | ||
once<EventName extends keyof EventTypes>(event: EventName, listener: (...args: EventArgs<EventTypes[EventName]>) => void): EventEmitter<EventTypes>; | ||
addListener<EventName extends keyof EventTypes>(event: EventName, listener: (...args: EventArgs<EventTypes[EventName]>) => void | Promise<void>): EventEmitter<EventTypes>; | ||
on<EventName extends keyof EventTypes>(event: EventName, listener: (...args: EventArgs<EventTypes[EventName]>) => void | Promise<void>): EventEmitter<EventTypes>; | ||
off<EventName extends keyof EventTypes>(event: EventName, listener: (...args: EventArgs<EventTypes[EventName]>) => void | Promise<void>): EventEmitter<EventTypes>; | ||
emit<EventName extends keyof EventTypes>(event: EventName, ...args: EventArgs<EventTypes[EventName]>): Promise<boolean>; | ||
once<EventName extends keyof EventTypes>(event: EventName, listener: (...args: EventArgs<EventTypes[EventName]>) => void | Promise<void>): EventEmitter<EventTypes>; | ||
} | ||
@@ -16,0 +16,0 @@ |
@@ -30,3 +30,3 @@ class EventEmitter { | ||
} | ||
emit(event, ...args) { | ||
async emit(event, ...args) { | ||
const eventName = event; | ||
@@ -37,3 +37,4 @@ // Initialize the event | ||
if (this.callbacks[eventName].length > 0) { | ||
this.callbacks[eventName].forEach((value) => value(...args)); | ||
// Execute all callbacks and wait for them to complete if they are promises | ||
await Promise.all(this.callbacks[eventName].map(async (value) => await value(...args))); | ||
return true; | ||
@@ -44,4 +45,4 @@ } | ||
once(event, listener) { | ||
const onceListener = (...args) => { | ||
listener(...args); | ||
const onceListener = async (...args) => { | ||
await listener(...args); | ||
this.off(event, onceListener); | ||
@@ -53,4 +54,4 @@ }; | ||
const version = '1.1.0'; | ||
const version = '1.1.1'; | ||
export { EventEmitter, version }; |
{ | ||
"name": "@carry0987/event-emitter", | ||
"version": "1.1.0", | ||
"version": "1.1.1", | ||
"description": "EventEmitter is a TypeScript library that provides a simple yet powerful event-handling mechanism. It allows you to define and manage events in your application.", | ||
@@ -5,0 +5,0 @@ "type": "module", |
@@ -10,2 +10,3 @@ # EventEmitter-JS | ||
- Flexible event management | ||
- Support for both synchronous and asynchronous event listeners | ||
@@ -85,17 +86,31 @@ ## Installation | ||
### Using Asynchronous Event Listeners | ||
Add asynchronous event listeners using the `on` or `once` method: | ||
```typescript | ||
emitter.on('greet', async (message) => { | ||
await new Promise(resolve => setTimeout(resolve, 1000)); | ||
console.log(`Async Listener: ${message}`); | ||
}); | ||
emitter.emit('greet', 'Hello, async world!').then(() => { | ||
console.log('All async listeners have been called.'); | ||
}); | ||
``` | ||
## API | ||
### `on(event: EventName, listener: (...args: any[]) => void): EventEmitter` | ||
### `on(event: EventName, listener: (...args: any[]) => void | Promise<void>): EventEmitter` | ||
Registers an event listener for the specified event. | ||
### `off(event: EventName, listener: (...args: any[]) => void): EventEmitter` | ||
### `off(event: EventName, listener: (...args: any[]) => void | Promise<void>): EventEmitter` | ||
Removes the specified event listener. | ||
### `emit(event: EventName, ...args: any[]): boolean` | ||
Emits the specified event, calling all registered listeners with the provided arguments. | ||
### `emit(event: EventName, ...args: any[]): Promise<boolean>` | ||
Emits the specified event, calling all registered listeners with the provided arguments. Returns a promise that resolves to `true` if there were listeners, and `false` otherwise. | ||
### `once(event: EventName, listener: (...args: any[]) => void): EventEmitter` | ||
### `once(event: EventName, listener: (...args: any[]) => void | Promise<void>): EventEmitter` | ||
Registers a one-time event listener for the specified event. The listener will be called at most once after being added. | ||
### `listeners(): { [event: string]: ((...args: any[]) => void)[] }` | ||
### `listeners(): { [event: string]: ((...args: any[]) => void | Promise<void>)[] }` | ||
Returns an object containing all registered event listeners. | ||
@@ -102,0 +117,0 @@ |
8764
66
121