@resolid/event package provides a lightweight, fully-typed event emitter for modern TypeScript projects. It offers a clean API for implementing event-driven architectures with zero dependencies.
Installation
Basic Usage
Create an emitter, register event listeners, and emit events:Core Methods
on() - Register Listener
Register a listener that will be called every time the event is emitted:packages/event/src/index.ts:7):
off() - Remove Listener
Remove a specific listener from an event:packages/event/src/index.ts:20):
offAll() - Remove All Listeners
Remove all listeners for a specific event or all events:packages/event/src/index.ts:39):
once() - One-time Listener
Register a listener that will be called only once:packages/event/src/index.ts:47):
emit() - Synchronous Emission
Emit an event synchronously, calling all registered listeners immediately:packages/event/src/index.ts:56):
emitAsync() - Asynchronous Emission
Emit an event asynchronously usingqueueMicrotask, allowing synchronous code to complete first:
packages/event/src/index.ts:70):
Type Safety
TheEmitter class is fully typed and preserves type information for event arguments:
Common Patterns
Event-Driven Service Communication
Decouple services using events:Lifecycle Hooks
Implement lifecycle hooks for components:State Change Notifications
Notify observers when state changes:Error Handling
Implement centralized error handling:Request/Response Pattern
Implement request/response communication:Memory Management
Always clean up event listeners to prevent memory leaks:API Reference
Emitter Class
See source atpackages/event/src/index.ts:3
Best Practices
1. Use Descriptive Event Names
2. Clean Up Listeners
Always remove listeners when they’re no longer needed:3. Use once() for One-Time Events
4. Consider emitAsync() for Non-Critical Events
UseemitAsync() when event handling shouldn’t block the current operation: