diff options
| author | Jason Miller <[email protected]> | 2017-01-14 21:48:51 -0500 |
|---|---|---|
| committer | Jason Miller <[email protected]> | 2017-01-14 21:48:51 -0500 |
| commit | e77a42cdeca3f4c484f82a335a8a2bb8382d4fcc (patch) | |
| tree | 612f883228b2db7343df71151427480f82b35206 /src | |
Initial commit! 🚀
Diffstat (limited to 'src')
| -rw-r--r-- | src/index.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..36b25f1 --- /dev/null +++ b/src/index.js @@ -0,0 +1,47 @@ +/** Mitt: Tiny (~200b) functional event emitter / pubsub. + * @name mitt + * @returns {Mitt} + */ +export default function mitt(all) { + // Arrays of event handlers, keyed by type + all = all || {}; + + // Get or create a named handler list + function list(type) { + let t = type.toLowerCase(); + return all[t] || (all[t] = []); + } + + return { + + /** Register an event handler for the given type. + * @param {String} type Type of event to listen for, or `"*"` for all events + * @param {Function} handler Function to call in response to the given event + * @memberof mitt + */ + on(type, handler) { + list(type).push(handler); + }, + + /** Remove an event handler for the given type. + * @param {String} type Type of event to unregister `handler` from, or `"*"` + * @param {Function} handler Handler function to remove + * @memberof mitt + */ + off(type, handler) { + let e = list(type), + i = e.indexOf(handler); + if (~i) e.splice(i, 1); + }, + + /** Invoke all handlers for the given type. + * If present, `"*"` handlers are invoked prior to type-matched handlers. + * @param {String} type The event type to invoke + * @param {Any} [event] An event object, passed to each handler + * @memberof mitt + */ + emit(type, event) { + list('*').concat(list(type)).forEach( f => { f(event); }); + } + }; +} |
