compose-emitter
v1.2.0
Published
Fast, lightweight and powerful composition of an EventEmitter with context binding in mind. Pass your emitter instance and context through options and compose on/off/once/emit methods using `.compose` method.
Downloads
12
Readme
compose-emitter
Fast, lightweight and powerful composition of an EventEmitter with context binding in mind. Pass your emitter instance and context through options and compose on/off/once/emit methods using
.compose
method.
This package gives you interface with only single method exposed - .compose
. You should implement the expected methods using flexible .compose
method and passing whatever emitter you want. It's up to you to create your emitter of choice with methods of choice. This just gives you the flexibility and context binding.
Install
npm i compose-emitter --save
Usage
For more use-cases see the tests
const emitter = require('compose-emitter')
// or get constructor
const ComposeEmitter = require('compose-emitter').ComposeEmitter
ComposeEmitter
Initialize ComposeEmitter with
options
. Pass your EventEmitter instance and optionally passoptions.context
to bind to listeners.
Params
options
{Object}: Pass event emitter instance tooptions.emitter
.
Example
var ComposeEmitter = require('compose-emitter').ComposeEmitter
var Emitter = require('component-emitter')
var ee = new ComposeEmitter({
emitter: new Emitter()
})
ee
.compose('on')('foo', console.log) // => 1, 2, 3
.compose('emit')('foo', 1, 2, 3)
ComposeEmitter.extend
Extend your application with ComposeEmitter static and prototype methods. See static-extend or tunnckoCore/app-base for more info and what's static and prototype methods are added.
Params
Parent
{Function}: The constructor to extend, using static-extend.
Example
var ComposeEmitter = require('compose-emitter').ComposeEmitter
var Emitter = require('eventemitter3')
function App (options) {
if (!(this instanceof App)) {
return new App(options)
}
ComposeEmitter.call(this, options)
}
ComposeEmitter.extend(App)
App.prototype.on = function on (name, fn, context) {
return this.compose('on')(name, fn, context)
}
App.prototype.once = function once (name, fn, context) {
return this.compose('once')(name, fn, context)
}
App.prototype.off = function off (name, fn, context) {
return this.compose('off')(name, fn, context)
}
App.prototype.emit = function emit () {
return this.compose('emit').apply(null, arguments)
}
var app = new App({
context: {foo: 'bar'},
emitter: new Emitter()
})
app
.on('foo', function (a) {
console.log('foo:', a, this) // => 123, {foo: 'bar'}
})
.once('bar', function (b) {
console.log('bar:', b) // => 456
})
.emit('foo', 123)
.emit('bar', 456)
.emit('bar', 789)
.compose
Compose different
type
of emitter methods. You can use this to create the usual.on
,.emit
and other methods. Pass astype
name of the method that your emitter have and optionaloptions
to pass context for the listeners.
Params
type
{String}: Name of the emitter method that you want to mirror.options
{Object}: Optionally passcontext
that will be bind to listeners.returns
{Function}: Method that accept as many arguments as you want or emitter method need.
Example
var emitter = require('compose-emitter')
var Emitter = require('eventemitter3')
var on = emitter.compose('on', {
context: {a: 'b'},
emitter: new Emitter()
})
var emit = emitter.compose('emit')
on('foo', function (a, b) {
console.log('foo:', a, b, this) // => 1, 2, {a: 'b', c: 'd'}
}, {c: 'd'})
emit('foo', 1, 2)
Related
- component-emitter: Event emitter | homepage
- define-property: Define a non-enumerable property on an object. | homepage
- eventemitter3: EventEmitter3 focuses on performance while maintaining a Node.js AND browser… more | homepage
- static-extend: Adds a static
extend
method to a class, to simplify… more | homepage
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
But before doing anything, please read the CONTRIBUTING.md guidelines.