hoook

hoook is an event emitter with async and priority support. Since hoook works a bit differently compared to "normal" event emitters the methods are named fire, hook and unhook instead of the known emit, on and off.

Usage no npm install needed!

<script type="module">
  import hoook from 'https://cdn.skypack.dev/hoook';
</script>

README

hoook

hoook is an event emitter with async and priority support. Since hoook works a bit differently compared to "normal" event emitters the methods are named fire, hook and unhook instead of the known emit, on and off.

Usage

var hoook = require('hoook');

// create a new object
var ee = hoook();

// hook with priority 50.
// higher priorities will run first.
ee.hook('foo', function(ev) {
  // do something like sticking data
  // to the event object..
  ev.bar = 'middleware got called';
}, 50);

// by default the priority is 100.
// higher priority hooks will run
// before lower ones.
ee.hook('foo', function(ev) {
  // do something...
});

// if the callback has two or more
// arguments it is considered an
// async hook.
ee.hook('foo', function(ev, next) {
  setTimeout(function() {
    // jump to the next middleware
    // once finished.
    next();
  }, 1000);
});

// the middleware-chain can be aborted
ee.hook('foo', function(ev, next, stop) {
  // jump directly to the final callback
  stop();
});

// ...or you can abort it with an error
ee.hook('foo', function(ev, next, stop) {
  stop(new Error('something went wrong'));
});

// emitting an event is as easy as
ee.fire('foo');

// pass in a callback which will be
// called once the callback chain has finished
ee.fire('foo', function(err, ev) {
  if (err) {
    // if the middleware-chain was aborted with an error.
    // in this case ev will be undfined
  }
});

// defining the ev object goes like this:
ee.fire('foo', { type: 'myEvent' }, function(err, ev) {
  // by default ev is an empty object {}.
});

// remove all hooks listening to 'foo'
ee.unhook('foo');

// remove a specific hook
ee.unhook('foo', cb);

// remove all hooks
ee.unhook();

Installation

npm install hoook

License

MIT