A lightweight signal/event emitter for single events. Perfect for state changes, async operations, and event-driven architectures.
npm install a-signalimport Signal from 'a-signal'
const signal = new Signal()
signal.on(data => console.log('Received:', data))
signal.emit('Hello World!') // logs: Received: Hello World!Unlike traditional event emitters with string-based event names, each signal represents one specific event type. This eliminates typos, improves performance, and makes your code more predictable.
// Traditional EventEmitter
emitter.on('user-login', handler) // Prone to typos
emitter.emit('user-login', userData)
// With a-signal
const loginSignal = new Signal() // Type-safe, focused
loginSignal.on(handler)
loginSignal.emit(userData)✨ State Management - Late subscribers get missed events
const userSignal = new Signal({ memorable: true })
userSignal.emit(currentUser) // Set initial state
userSignal.on(user => updateUI(user)) // Gets current user immediately⚡ Promisified events - Convert events to async/await
const signal = new Signal({ timeout: 5000 })
const result = await signal.wait() // Wait for next emission🔗 Clean APIs - Extract methods for composition
class MagicBox {
ready = new Signal({ memorable: true }).extractOn()
}
await new Promise(resolve => box.ready(resolve))🎯 Priority Control - Order execution and stop propagation
const signal = new Signal({ prioritized: true })
signal.on(() => signal.break(), 100) // High priority can stop othersSee documentation for comprehensive documentation:
- Getting Started - Main documentation, API reference and examples
- Basic Usage - Import, create, subscribe, unsubscribe
- Late - Handle events before subscription
- Memorable - Remember emission arguments
- Promises - Await signal emissions
- Extracts - Create clean APIs with method extraction
- Ordered - Priority execution and emission control
MIT License - Do whatever you like.
With love ❤️ from Ukraine 🇺🇦