@amberjs/core
Version:
Amber.js core module
29 lines (22 loc) • 623 B
JavaScript
const EventEmitter = require('events');
const define = Object.defineProperty;
class Operation extends EventEmitter {
static setEvents(events) {
define(this.prototype, 'events', {
value: createEvents(events)
});
}
on(event, handler) {
if(this.events[event]) {
return this.addListener(event, handler);
}
throw new Error(`Invalid event "${event}" to operation ${this.constructor.name}.`);
}
}
const createEvents = (eventsArray) => {
return eventsArray.reduce((obj, output) => {
obj[output] = output;
return obj;
}, Object.create(null));
};
module.exports = Operation;