emitter-b
Version:
An enhanced EventEmitter with extra methods for detecting whether an event has any handlers or not for efficient event handler attachment.
1 lines • 7.84 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.EmitterB=t():e.EmitterB=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=2)}([function(e,t){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function i(e){return"number"==typeof e}function s(e){return"object"==typeof e&&null!==e}function o(e){return void 0===e}e.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(e){if(!i(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},n.prototype.emit=function(e){var t,n,i,f,h,l;if(this._events||(this._events={}),"error"===e&&(!this._events.error||s(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var u=new Error('Uncaught, unspecified "error" event. ('+t+")");throw u.context=t,u}if(n=this._events[e],o(n))return!1;if(r(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:f=Array.prototype.slice.call(arguments,1),n.apply(this,f)}else if(s(n))for(f=Array.prototype.slice.call(arguments,1),l=n.slice(),i=l.length,h=0;h<i;h++)l[h].apply(this,f);return!0},n.prototype.addListener=function(e,t){var i;if(!r(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,r(t.listener)?t.listener:t),this._events[e]?s(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,s(this._events[e])&&!this._events[e].warned&&(i=o(this._maxListeners)?n.defaultMaxListeners:this._maxListeners)&&i>0&&this._events[e].length>i&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(e,t){function n(){this.removeListener(e,n),i||(i=!0,t.apply(this,arguments))}if(!r(t))throw TypeError("listener must be a function");var i=!1;return n.listener=t,this.on(e,n),this},n.prototype.removeListener=function(e,t){var n,i,o,f;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],o=n.length,i=-1,n===t||r(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(n)){for(f=o;f-- >0;)if(n[f]===t||n[f].listener&&n[f].listener===t){i=f;break}if(i<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},n.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[e],r(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},n.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},n.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},n.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,n){"use strict";function r(){var e=arguments;if(1==e.length)var t={init:f},n=e[0];else var t=e[0],n=e[1];var c={};-1!==[Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError].indexOf(t)&&(t=i(t,c));var v="function"==typeof t;n[h]=v?t[h]:t;var p=new n(t);c.name=p.name,!p[u]&&v&&(p[u]=function(){t.apply(this,arguments)});var d=function(){};d[h]=p;var y=p.name?p.name:"";if(p[u]===o||p[u]===f)var m=new Function("F","return function "+y+"(){return new F()}")(d);else var m=new Function("F","i","u","n","return function "+y+"(){ var x=new F(),r=i.apply(x,arguments)\nif(r===n)\nreturn x\nelse if(r===u)\nreturn n\nelse\nreturn r\n}")(d,p[u],r[l]);p.constructor=m;for(var _ in p)s(m,p,_);for(var _ in t)a.call(t,_)&&m[_]===o&&s(m,t,_);return m.parent=t,m[h]=p,m}function i(e,t){function n(){var n=new e(arguments[0]);return n.name=t.name,this.message=n.message,Object.defineProperty?Object.defineProperty(this,"stack",{get:function(){return n.stack},configurable:!0}):this.stack=n.stack,this}var r=function(){};return r.prototype=e.prototype,n.prototype=new r,n}function s(e,t,n){try{var r=Object.getOwnPropertyDescriptor(t,n);r.get!==o||r.get!==o&&Object.defineProperty!==o?Object.defineProperty(e,n,r):e[n]=t[n]}catch(e){}}var o,f=function(){},h="prototype",l="undefined",u="init",a={}.hasOwnProperty;r[l]={},e.exports=r},function(e,t,n){function r(e,t,n){i(e[t][n],n),i(e[f(t)],n)}function i(e,t){if(void 0!==e)for(var n=0;n<e.length;n++)e[n](t)}function s(e,t,n,r){if(n instanceof Function&&(r=n,n=void 0),void 0!==n&&void 0!==r){var i=e[t][n];void 0===i&&(i=e[t][n]=[]),i.push(r)}else e[f(t)].push(r)}function o(e,t,n,r){if(n instanceof Function&&(r=n,n=void 0),void 0!==n&&void 0!==r)h(e[t][n],r);else if(void 0!==n)delete e[t][n];else if(void 0!==r){var i=f(t);h(e[i],r)}else{var i=f(t);e[t]={},e[i]=[]}}function f(e){return"ifonHandlers"===e?"ifonAllHandlers":"ifoffHandlers"===e?"ifoffAllHandlers":void 0}function h(e,t){var n=e.indexOf(t);e.splice(n,1)}function l(e){var t={};return e.forEach(function(e){t[e]=!0}),t}var u=n(0).EventEmitter,a=n(1);e.exports=a(u,function(e){this.init=function(){e.apply(this,arguments),this.ifonHandlers={},this.ifoffHandlers={},this.ifonAllHandlers=[],this.ifoffAllHandlers=[]},this.ifon=function(e,t){if(e instanceof Function){t=e;for(var n in this._events)this.listeners(n).length>0&&t(n)}else this.listeners(e).length>0&&t(e);s(this,"ifonHandlers",e,t)},this.removeIfon=function(e,t){o(this,"ifonHandlers",e,t)},this.ifoff=function(e,t){s(this,"ifoffHandlers",e,t)},this.removeIfoff=function(e,t){o(this,"ifoffHandlers",e,t)},this.proxy=function(e,t){if(void 0===t&&(t={}),void 0!==t.except)var n=l(t.except),r=function(e){return!(e in n)};else if(void 0!==t.only)var i=l(t.only),r=function(e){return e in i};else var r=function(){return!0};var s,o=this;this.ifon(function(t){r(t)&&e.on(t,s=function(){o.emit.apply(o,[t].concat(Array.prototype.slice.call(arguments)))})}),this.ifoff(function(t){r(t)&&e.off(t,s)})},this.on=this.addListener=function(t,n){var i=0===this.listeners(t).length;e.prototype.on.apply(this,arguments),i&&r(this,"ifonHandlers",t)},this.off=this.removeListener=function(t,n){var i=1===this.listeners(t).length;e.prototype.removeListener.apply(this,arguments),i&&r(this,"ifoffHandlers",t)},this.removeAllListeners=function(t){var n=[];if(void 0!==t)this.listeners(t).length>0&&n.push(t);else for(var t in this._events)this.listeners(t).length>0&&n.push(t);e.prototype.removeAllListeners.apply(this,arguments);for(var i=0;i<n.length;i++)r(this,"ifoffHandlers",n[i])}})}])});