Skip to content

vovchisko/a-signal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

a-signal

npm version License: MIT Made in Ukraine

A lightweight signal/event emitter for single events. Perfect for state changes, async operations, and event-driven architectures.

Quick Start

npm install a-signal
import Signal from 'a-signal'

const signal = new Signal()
signal.on(data => console.log('Received:', data))
signal.emit('Hello World!')  // logs: Received: Hello World!

Why a-signal?

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)

Key Features

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 others

Documentation

See 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

License

MIT License - Do whatever you like.


With love ❤️ from Ukraine 🇺🇦

About

declarative alternative for event emitters

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published