inherit_events.js 754 B

123456789101112131415161718192021222324252627
  1. 'use strict';
  2. function inheritEvents(source, target, events) {
  3. const listeners = {};
  4. target
  5. .on('newListener', (eventName) => {
  6. if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) {
  7. source.on(
  8. eventName,
  9. (listeners[eventName] = function () {
  10. const args = [].slice.call(arguments);
  11. args.unshift(eventName);
  12. target.emit.apply(target, args);
  13. }),
  14. );
  15. }
  16. })
  17. .on('removeListener', (eventName) => {
  18. if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) {
  19. source.removeListener(eventName, listeners[eventName]);
  20. delete listeners[eventName];
  21. }
  22. });
  23. }
  24. module.exports = inheritEvents;