eventail
v0.2.12
Published
Event emitter abstract class with priority support
Maintainers
Readme
What it does
- 🎯 Priority-based event handling
- ⚡ Single and one-time event listeners
- 🔄 Context binding support
- 📦 TypeScript support
- 🧪 No external dependencies
This is an abstract class, so you need to extend it to use it. The emit method is protected, meaning only your class can trigger events internally.
Installation
npm install eventailUsage
Basic Example
import { Eventail } from 'eventail';
class Player extends Eventail {
private level = 1;
private experience = 0;
public gainExperience(amount: number) {
this.experience += amount;
this.emit('experienceGained', amount, this.experience);
if (this.experience >= this.level * 100) {
this.level++;
this.experience = 0;
this.emit('leveledUp', this.level);
}
}
}
const player = new Player();
player.on('experienceGained', (amount, total) => {
console.log(`Gained ${amount} XP (Total: ${total})`);
});
player.on('leveledUp', (level) => {
console.log(`Level up! Now level ${level}`);
});
player.gainExperience(150);With Context and Priority
const ui = {
showMessage(text: string) {
console.log(`[UI] ${text}`);
}
};
// Lower numbers = higher priority
player.on('leveledUp', function(level) {
this.showMessage(`Reached level ${level}`);
}, ui, -10);One-Time Listeners
// Runs only once
player.once('firstDeath', () => {
console.log('This only happens once');
});Removing Listeners
const handler = (data) => console.log(data);
player.on('event', handler);
player.off('event', handler); // Remove specific listener
player.off('event'); // Remove all listeners for this eventAPI
on(type: string | number, callback: Function, context?: object, priority?: number)
Adds an event listener. Lower priority numbers execute first.
once(type: string | number, callback: Function, context?: object, priority?: number)
Adds a listener that removes itself after first execution.
off(type: string | number, callback?: Function, context?: object)
Removes listener(s). Without callback, removes all listeners for the event.
protected emit(type: string | number, ...args: any[])
Emits an event. Only available inside your class that extends Eventail.
Notes
- Listeners with the same priority may execute in any order
- The class uses WeakMap internally, so context objects can be garbage collected normally
- Event types can be strings or numbers
- This is just one way to handle events - there are probably better solutions for your specific use case
License
MIT © jango
