Skip to content

Instantly share code, notes, and snippets.

@io4
Created November 22, 2017 18:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save io4/62a7dc0ce6f074ef87ccf3705655510e to your computer and use it in GitHub Desktop.
Save io4/62a7dc0ce6f074ef87ccf3705655510e to your computer and use it in GitHub Desktop.
const EventEmitter = require("events");
function wrap(ev, def){
ev.__events = ev._events;
ev._eif = {};
ev._dobreak = {};
ev._events = new Proxy(ev.__events, {
get: function(t, p, r) {
if(p == "newListener") return;
if( !ev.__events[p] || (typeof ev.__events[p] == "object" && ev.__events[p].length == 0)) {
return def;
}
if( typeof ev.__events[p] == "function" ) {
ev.__events[p] = [ev.__events[p]];
}
if(typeof ev.__events[p] == "object" && ev.__events[p].length == 2) {
ev.__events[p] = [ev.__events[p][1]];
}
return new Proxy(ev.__events[p], {
get: function(_t, _p, _r){
if(_p == "length") return ev.__events[p].length;
return function ef(...args){
if( ev._eif[p] && ev._eif[p][_p] && ev._eif[p][_p](...args) ) return;
if( ev._dobreak[p] ) return;
let ret = ev.__events[p][_p](...args);
ev._dobreak[p] = ret;
};
}
});
}
});
ev.sif = function(name, id, func){
if( ev.__events[name] && ev.__events[name][id] ) {
if( !ev._eif[name] ) ev._eif[name] = {};
ev.__events[name][id] = func;
}
}
}
let e = new EventEmitter();
wrap(e, (...a)=>console.log(a,"?"));
e.on("test",console.log);
e.emit("test", 1);
e.sif("test", 0, n => console.log(n+"!")+1 );
e.emit("test", 3);
e.emit("test", 1);
e.emit("test1", 2);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment