25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

51 satır
1.1 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var createChangeEmitter = exports.createChangeEmitter = function createChangeEmitter() {
  6. var currentListeners = [];
  7. var nextListeners = currentListeners;
  8. function ensureCanMutateNextListeners() {
  9. if (nextListeners === currentListeners) {
  10. nextListeners = currentListeners.slice();
  11. }
  12. }
  13. function listen(listener) {
  14. if (typeof listener !== 'function') {
  15. throw new Error('Expected listener to be a function.');
  16. }
  17. var isSubscribed = true;
  18. ensureCanMutateNextListeners();
  19. nextListeners.push(listener);
  20. return function () {
  21. if (!isSubscribed) {
  22. return;
  23. }
  24. isSubscribed = false;
  25. ensureCanMutateNextListeners();
  26. var index = nextListeners.indexOf(listener);
  27. nextListeners.splice(index, 1);
  28. };
  29. }
  30. function emit() {
  31. currentListeners = nextListeners;
  32. var listeners = currentListeners;
  33. for (var i = 0; i < listeners.length; i++) {
  34. listeners[i].apply(listeners, arguments);
  35. }
  36. }
  37. return {
  38. listen: listen,
  39. emit: emit
  40. };
  41. };