typed-events.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.StrictEventEmitter = void 0;
  4. const events_1 = require("events");
  5. /**
  6. * Strictly typed version of an `EventEmitter`. A `TypedEventEmitter` takes type
  7. * parameters for mappings of event names to event data types, and strictly
  8. * types method calls to the `EventEmitter` according to these event maps.
  9. *
  10. * @typeParam ListenEvents - `EventsMap` of user-defined events that can be
  11. * listened to with `on` or `once`
  12. * @typeParam EmitEvents - `EventsMap` of user-defined events that can be
  13. * emitted with `emit`
  14. * @typeParam ReservedEvents - `EventsMap` of reserved events, that can be
  15. * emitted by socket.io with `emitReserved`, and can be listened to with
  16. * `listen`.
  17. */
  18. class StrictEventEmitter extends events_1.EventEmitter {
  19. /**
  20. * Adds the `listener` function as an event listener for `ev`.
  21. *
  22. * @param ev Name of the event
  23. * @param listener Callback function
  24. */
  25. on(ev, listener) {
  26. return super.on(ev, listener);
  27. }
  28. /**
  29. * Adds a one-time `listener` function as an event listener for `ev`.
  30. *
  31. * @param ev Name of the event
  32. * @param listener Callback function
  33. */
  34. once(ev, listener) {
  35. return super.once(ev, listener);
  36. }
  37. /**
  38. * Emits an event.
  39. *
  40. * @param ev Name of the event
  41. * @param args Values to send to listeners of this event
  42. */
  43. emit(ev, ...args) {
  44. return super.emit(ev, ...args);
  45. }
  46. /**
  47. * Emits a reserved event.
  48. *
  49. * This method is `protected`, so that only a class extending
  50. * `StrictEventEmitter` can emit its own reserved events.
  51. *
  52. * @param ev Reserved event name
  53. * @param args Arguments to emit along with the event
  54. */
  55. emitReserved(ev, ...args) {
  56. return super.emit(ev, ...args);
  57. }
  58. /**
  59. * Emits an event.
  60. *
  61. * This method is `protected`, so that only a class extending
  62. * `StrictEventEmitter` can get around the strict typing. This is useful for
  63. * calling `emit.apply`, which can be called as `emitUntyped.apply`.
  64. *
  65. * @param ev Event name
  66. * @param args Arguments to emit along with the event
  67. */
  68. emitUntyped(ev, ...args) {
  69. return super.emit(ev, ...args);
  70. }
  71. /**
  72. * Returns the listeners listening to an event.
  73. *
  74. * @param event Event name
  75. * @returns Array of listeners subscribed to `event`
  76. */
  77. listeners(event) {
  78. return super.listeners(event);
  79. }
  80. }
  81. exports.StrictEventEmitter = StrictEventEmitter;