typed-rx-emitter
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published
typed-rx-emitter: Typesafe Rx-based event emitter

Build Status npm mit ts flow

Highlights

  • 100% typesafe:
    • Statically enforces that channels in .on() are defined
    • Statically enforces that channels in .emit() are defined
    • Statically enforces that emitters are called with the correct data given their Message name
    • Statically enforces that listeners are called with the correct data given their Message name
  • Supports all RxJS Observable methods
  • Supports RxJS versions 4, 5, and 6
  • Preforms dynamic analysis to detect and warn about cycles in emitters
  • 3.7kb gzipped & minified (using RxJS6), including RxJS

Installation (with RxJS v5.x or v6.x - recommended)

# Using Yarn: 
yarn add typed-rx-emitter rxjs
 
# Using NPM: 
npm install typed-rx-emitter rxjs --save

Installation (with RxJS v4.x)

# Using Yarn: 
yarn add typed-rx-emitter@^0.3
 
# Using NPM: 
npm install typed-rx-emitter@^0.3 --save

Usage

import { Emitter } from 'typed-rx-emitter'
 
// Enumerate messages
type Messages = {
  INCREMENT_COUNTER: number
  OPEN_MODAL: boolean
}
 
const emitter = new Emitter<Messages>()
 
// Listen on an event (basic)
emitter
  .on('OPEN_MODAL')
  .subscribe(_ => console.log(`Change modal visibility: ${_}`)) // _ is a boolean
 
// Listen on an event (advanced)
import { debounceTime, filter } from 'rxjs/operators'
 
emitter
  .on('INCREMENT_COUNTER')
  .pipe(
    filter(_ => _ > 3), // _ is a number
    debounceTime(100)
  )
  .subscribe(_ => console.log(`Counter incremented to ${_}`)) // _ is a number
 
// Listen on all events
emitter
  .all()
  .subscribe(() => console.log('Something changed'))
 
// Trigger an event - throws a compile time error unless id and value are set, and are of the right types
emitter.emit('OPEN_MODAL', true)
 
// Event is misspelled - throws a compile time error
emitter.emit('INCREMENT_CONTER')

See a complete browser usage example here.

Options

Emitter takes an optional options argument. options is an object, and each key in the object is optional:

Option Default Description
Error CyclicalDependencyError Custom Error subclass for cycle warning
isDevMode false Perform dynamic analysis to warn about cycles?

Tests

npm test

Package Sidebar

Install

npm i typed-rx-emitter

Weekly Downloads

24

Version

1.2.0

License

MIT

Unpacked Size

210 kB

Total Files

24

Last publish

Collaborators

  • bcherny