- 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
- Statically enforces that channels in
- 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
# Using Yarn:
yarn add typed-rx-emitter rxjs
# Using NPM:
npm install typed-rx-emitter rxjs --save
# Using Yarn:
yarn add typed-rx-emitter@^0.3
# Using NPM:
npm install typed-rx-emitter@^0.3 --save
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.
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? |
npm test