arbitrary-emitter
ES6 Map based event emitter in ~350 bytes
Arbitrary-emitter stores listeners in ES6 maps, so you can use any kind of value as key for your events
const emitter = arbitraryEmitter()
const key = {}
emitter.on(key, () => doSomething())
emitter.emit(key)
- ~350 bytes when gzipped
- conventional api (
on
, off
, once
and emit
) - check weak-emitter for a version that uses weakmaps to store events
Install
Install with npm or yarn, clone the repo or download and extract the zip.
Then import or insert it as script tag.
Emitter API
on(key, handler)
Adds the handler
function to the event tagged with key
. key
can be any type of value. Every handler will be added once, despite the number of times it was added to the event. Handlers are invoked in the order they were added.
const key = {}
emitter.on(key, () => doSomething())
emitter.emit(key)
once(key, handler)
Same as on
, but listener
will be triggered just once, then it will be removed.
const key = {}
emitter.once(key, () => doSomethingOnce())
emitter.emit(key)
emitter.emit(key)
emit(key[, ...args])
Invoke all handlers tagged with key
, passing the rest of the arguments
emitter.on('test', (opts) => console.log(opts.test))
const options = { test: 'Testing!' }
emitter.emit('test', options)
off([key[, handler]])
- If a
key
but no handler
is passed the event will be removed - If
key
and handler
are passed as arguments just the handler will be removed from the event
emitter.off(key, action)
emitter.off(key)
listeners(key)
Create and return an array with all the handlers for the event tagged with key
const f1 = () => alert('hi')
const f2 = () => alert('ho')
emitter.on('a', f1)
emitter.on('a', f2)
emitter.emitters()
Testing
npm test
© 2020 Jacobo Tabernero - Released under MIT License