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

Dependencies (0)

    Dev Dependencies (10)

    Package Sidebar

    Install

    npm i typed-rx-emitter

    Weekly Downloads

    2

    Version

    1.2.0

    License

    MIT

    Unpacked Size

    210 kB

    Total Files

    24

    Last publish

    Collaborators

    • bcherny