eventemitter3.esm.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. function getDefaultExportFromCjs (x) {
  2. return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
  3. }
  4. var eventemitter3 = {exports: {}};
  5. var hasRequiredEventemitter3;
  6. function requireEventemitter3 () {
  7. if (hasRequiredEventemitter3) return eventemitter3.exports;
  8. hasRequiredEventemitter3 = 1;
  9. (function (module) {
  10. var has = Object.prototype.hasOwnProperty
  11. , prefix = '~';
  12. /**
  13. * Constructor to create a storage for our `EE` objects.
  14. * An `Events` instance is a plain object whose properties are event names.
  15. *
  16. * @constructor
  17. * @private
  18. */
  19. function Events() {}
  20. //
  21. // We try to not inherit from `Object.prototype`. In some engines creating an
  22. // instance in this way is faster than calling `Object.create(null)` directly.
  23. // If `Object.create(null)` is not supported we prefix the event names with a
  24. // character to make sure that the built-in object properties are not
  25. // overridden or used as an attack vector.
  26. //
  27. if (Object.create) {
  28. Events.prototype = Object.create(null);
  29. //
  30. // This hack is needed because the `__proto__` property is still inherited in
  31. // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
  32. //
  33. if (!new Events().__proto__) prefix = false;
  34. }
  35. /**
  36. * Representation of a single event listener.
  37. *
  38. * @param {Function} fn The listener function.
  39. * @param {*} context The context to invoke the listener with.
  40. * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
  41. * @constructor
  42. * @private
  43. */
  44. function EE(fn, context, once) {
  45. this.fn = fn;
  46. this.context = context;
  47. this.once = once || false;
  48. }
  49. /**
  50. * Add a listener for a given event.
  51. *
  52. * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
  53. * @param {(String|Symbol)} event The event name.
  54. * @param {Function} fn The listener function.
  55. * @param {*} context The context to invoke the listener with.
  56. * @param {Boolean} once Specify if the listener is a one-time listener.
  57. * @returns {EventEmitter}
  58. * @private
  59. */
  60. function addListener(emitter, event, fn, context, once) {
  61. if (typeof fn !== 'function') {
  62. throw new TypeError('The listener must be a function');
  63. }
  64. var listener = new EE(fn, context || emitter, once)
  65. , evt = prefix ? prefix + event : event;
  66. if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
  67. else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
  68. else emitter._events[evt] = [emitter._events[evt], listener];
  69. return emitter;
  70. }
  71. /**
  72. * Clear event by name.
  73. *
  74. * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
  75. * @param {(String|Symbol)} evt The Event name.
  76. * @private
  77. */
  78. function clearEvent(emitter, evt) {
  79. if (--emitter._eventsCount === 0) emitter._events = new Events();
  80. else delete emitter._events[evt];
  81. }
  82. /**
  83. * Minimal `EventEmitter` interface that is molded against the Node.js
  84. * `EventEmitter` interface.
  85. *
  86. * @constructor
  87. * @public
  88. */
  89. function EventEmitter() {
  90. this._events = new Events();
  91. this._eventsCount = 0;
  92. }
  93. /**
  94. * Return an array listing the events for which the emitter has registered
  95. * listeners.
  96. *
  97. * @returns {Array}
  98. * @public
  99. */
  100. EventEmitter.prototype.eventNames = function eventNames() {
  101. var names = []
  102. , events
  103. , name;
  104. if (this._eventsCount === 0) return names;
  105. for (name in (events = this._events)) {
  106. if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
  107. }
  108. if (Object.getOwnPropertySymbols) {
  109. return names.concat(Object.getOwnPropertySymbols(events));
  110. }
  111. return names;
  112. };
  113. /**
  114. * Return the listeners registered for a given event.
  115. *
  116. * @param {(String|Symbol)} event The event name.
  117. * @returns {Array} The registered listeners.
  118. * @public
  119. */
  120. EventEmitter.prototype.listeners = function listeners(event) {
  121. var evt = prefix ? prefix + event : event
  122. , handlers = this._events[evt];
  123. if (!handlers) return [];
  124. if (handlers.fn) return [handlers.fn];
  125. for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
  126. ee[i] = handlers[i].fn;
  127. }
  128. return ee;
  129. };
  130. /**
  131. * Return the number of listeners listening to a given event.
  132. *
  133. * @param {(String|Symbol)} event The event name.
  134. * @returns {Number} The number of listeners.
  135. * @public
  136. */
  137. EventEmitter.prototype.listenerCount = function listenerCount(event) {
  138. var evt = prefix ? prefix + event : event
  139. , listeners = this._events[evt];
  140. if (!listeners) return 0;
  141. if (listeners.fn) return 1;
  142. return listeners.length;
  143. };
  144. /**
  145. * Calls each of the listeners registered for a given event.
  146. *
  147. * @param {(String|Symbol)} event The event name.
  148. * @returns {Boolean} `true` if the event had listeners, else `false`.
  149. * @public
  150. */
  151. EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
  152. var evt = prefix ? prefix + event : event;
  153. if (!this._events[evt]) return false;
  154. var listeners = this._events[evt]
  155. , len = arguments.length
  156. , args
  157. , i;
  158. if (listeners.fn) {
  159. if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
  160. switch (len) {
  161. case 1: return listeners.fn.call(listeners.context), true;
  162. case 2: return listeners.fn.call(listeners.context, a1), true;
  163. case 3: return listeners.fn.call(listeners.context, a1, a2), true;
  164. case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
  165. case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
  166. case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
  167. }
  168. for (i = 1, args = new Array(len -1); i < len; i++) {
  169. args[i - 1] = arguments[i];
  170. }
  171. listeners.fn.apply(listeners.context, args);
  172. } else {
  173. var length = listeners.length
  174. , j;
  175. for (i = 0; i < length; i++) {
  176. if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
  177. switch (len) {
  178. case 1: listeners[i].fn.call(listeners[i].context); break;
  179. case 2: listeners[i].fn.call(listeners[i].context, a1); break;
  180. case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
  181. case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
  182. default:
  183. if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
  184. args[j - 1] = arguments[j];
  185. }
  186. listeners[i].fn.apply(listeners[i].context, args);
  187. }
  188. }
  189. }
  190. return true;
  191. };
  192. /**
  193. * Add a listener for a given event.
  194. *
  195. * @param {(String|Symbol)} event The event name.
  196. * @param {Function} fn The listener function.
  197. * @param {*} [context=this] The context to invoke the listener with.
  198. * @returns {EventEmitter} `this`.
  199. * @public
  200. */
  201. EventEmitter.prototype.on = function on(event, fn, context) {
  202. return addListener(this, event, fn, context, false);
  203. };
  204. /**
  205. * Add a one-time listener for a given event.
  206. *
  207. * @param {(String|Symbol)} event The event name.
  208. * @param {Function} fn The listener function.
  209. * @param {*} [context=this] The context to invoke the listener with.
  210. * @returns {EventEmitter} `this`.
  211. * @public
  212. */
  213. EventEmitter.prototype.once = function once(event, fn, context) {
  214. return addListener(this, event, fn, context, true);
  215. };
  216. /**
  217. * Remove the listeners of a given event.
  218. *
  219. * @param {(String|Symbol)} event The event name.
  220. * @param {Function} fn Only remove the listeners that match this function.
  221. * @param {*} context Only remove the listeners that have this context.
  222. * @param {Boolean} once Only remove one-time listeners.
  223. * @returns {EventEmitter} `this`.
  224. * @public
  225. */
  226. EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
  227. var evt = prefix ? prefix + event : event;
  228. if (!this._events[evt]) return this;
  229. if (!fn) {
  230. clearEvent(this, evt);
  231. return this;
  232. }
  233. var listeners = this._events[evt];
  234. if (listeners.fn) {
  235. if (
  236. listeners.fn === fn &&
  237. (!once || listeners.once) &&
  238. (!context || listeners.context === context)
  239. ) {
  240. clearEvent(this, evt);
  241. }
  242. } else {
  243. for (var i = 0, events = [], length = listeners.length; i < length; i++) {
  244. if (
  245. listeners[i].fn !== fn ||
  246. (once && !listeners[i].once) ||
  247. (context && listeners[i].context !== context)
  248. ) {
  249. events.push(listeners[i]);
  250. }
  251. }
  252. //
  253. // Reset the array, or remove it completely if we have no more listeners.
  254. //
  255. if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
  256. else clearEvent(this, evt);
  257. }
  258. return this;
  259. };
  260. /**
  261. * Remove all listeners, or those of the specified event.
  262. *
  263. * @param {(String|Symbol)} [event] The event name.
  264. * @returns {EventEmitter} `this`.
  265. * @public
  266. */
  267. EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
  268. var evt;
  269. if (event) {
  270. evt = prefix ? prefix + event : event;
  271. if (this._events[evt]) clearEvent(this, evt);
  272. } else {
  273. this._events = new Events();
  274. this._eventsCount = 0;
  275. }
  276. return this;
  277. };
  278. //
  279. // Alias methods names because people roll like that.
  280. //
  281. EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
  282. EventEmitter.prototype.addListener = EventEmitter.prototype.on;
  283. //
  284. // Expose the prefix.
  285. //
  286. EventEmitter.prefixed = prefix;
  287. //
  288. // Allow `EventEmitter` to be imported as module namespace.
  289. //
  290. EventEmitter.EventEmitter = EventEmitter;
  291. //
  292. // Expose the module.
  293. //
  294. {
  295. module.exports = EventEmitter;
  296. }
  297. } (eventemitter3));
  298. return eventemitter3.exports;
  299. }
  300. var eventemitter3Exports = requireEventemitter3();
  301. var EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);
  302. export { EventEmitter, EventEmitter as default };