From e77a42cdeca3f4c484f82a335a8a2bb8382d4fcc Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Sat, 14 Jan 2017 21:48:51 -0500 Subject: Initial commit! 🚀 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/index.js (limited to 'src') 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); }); + } + }; +} -- cgit v1.2.3