Unimitt
Tiny 600b functional event emitter / pubsub.
This fork extends mitt to add support for randomized one-to-one pub-sub.
- Microscopic: weighs less than 600 bytes gzipped
-
Useful: a wildcard
"*"
event type listens to all events - Familiar: same names & ideas as Node's EventEmitter
-
Functional: methods don't rely on
this
- Great Name: somehow unimitt wasn't taken
Unimitt was made for the browser, but works in any JavaScript runtime. It has no dependencies and supports IE9+.
Table of Contents
Install
This project uses node and npm. Go check them out if you don't have them locally installed.
$ npm install --save unimitt
Then with a module bundler like rollup or webpack, use as you would anything else:
// using ES6 modules
import unimitt from 'unimitt'
// using CommonJS modules
var unimitt = require('unimitt')
The UMD build is also available on unpkg:
<script src="https://unpkg.com/unimitt/dist/unimitt.umd.js"></script>
You can find the library on window.unimitt
.
Usage
import unimitt from 'unimitt'
const emitter = unimitt()
// listen to an event
emitter.on('foo', e => console.log('foo', e) )
// listen to all events
emitter.on('*', (type, e) => console.log(type, e) )
// fire an event
emitter.emit('foo', { a: 'b' })
// clearing all events
emitter.all.clear()
// working with handler references:
function onFoo() {}
emitter.on('foo', onFoo) // listen
emitter.off('foo', onFoo) // unlisten
Typescript
Set "strict": true
in your tsconfig.json to get improved type inference for unimitt
instance methods.
import unimitt from 'unimitt';
type Events = {
foo: string;
bar?: number;
};
const emitter = unimitt<Events>(); // inferred as Emitter<Events>
emitter.on('foo', (e) => {}); // 'e' has inferred type 'string'
emitter.emit('foo', 42); // Error: Argument of type 'number' is not assignable to parameter of type 'string'. (2345)
Alternatively, you can use the provided Emitter
type:
import unimitt, { Emitter } from 'unimitt';
type Events = {
foo: string;
bar?: number;
};
const emitter: Emitter<Events> = unimitt<Events>();
API
Table of Contents
unimitt
Unimitt: Tiny (~600b) functional event emitter / pubsub.
Returns Unimitt
all
A Map of event names to registered handler functions.
groups
A map of event names, to queue groups, to registered handler functions.
on
Register an event handler for the given type.
Parameters
-
type
(string | symbol) Type of event to listen for, or'*'
for all events -
handler
Function Function to call in response to given event -
group
any?
off
Remove an event handler for the given type.
If handler
is omitted, all handlers of the given type are removed, including groups, unless a group is
specified, in which case all handlers for that group are removed (but not other groups, or non-group handlers).
Parameters
-
type
(string | symbol) Type of event to unregisterhandler
from ('*'
to remove a wildcard handler) -
handler
Function? Handler function to remove -
group
any?
emit
Invoke all handlers for the given type.
If present, '*'
handlers are invoked after type-matched handlers.
Note: Manually firing '*' handlers is not supported.
Parameters
-
type
(string | symbol) The event type to invoke -
evt
Any? Any value (object is recommended and powerful), passed to each handler
Contribute
First off, thanks for taking the time to contribute! Now, take a moment to be sure your contributions make sense to everyone else.
Reporting Issues
Found a problem? Want a new feature? First of all see if your issue or idea has already been reported. If don't, just open a new clear and descriptive issue.
Submitting pull requests
Pull requests are the greatest contributions, so be sure they are focused in scope, and do avoid unrelated commits.
- Fork it!
- Clone your fork:
git clone https://github.com/<your-username>/unimitt
- Navigate to the newly cloned directory:
cd unimitt
- Create a new branch for the new feature:
git checkout -b my-new-feature
- Install the tools necessary for development:
npm install
- Make your changes.
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request with full remarks documenting your changes.