|
- 'use strict';
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var createChangeEmitter = exports.createChangeEmitter = function createChangeEmitter() {
- var currentListeners = [];
- var nextListeners = currentListeners;
-
- function ensureCanMutateNextListeners() {
- if (nextListeners === currentListeners) {
- nextListeners = currentListeners.slice();
- }
- }
-
- function listen(listener) {
- if (typeof listener !== 'function') {
- throw new Error('Expected listener to be a function.');
- }
-
- var isSubscribed = true;
-
- ensureCanMutateNextListeners();
- nextListeners.push(listener);
-
- return function () {
- if (!isSubscribed) {
- return;
- }
-
- isSubscribed = false;
-
- ensureCanMutateNextListeners();
- var index = nextListeners.indexOf(listener);
- nextListeners.splice(index, 1);
- };
- }
-
- function emit() {
- currentListeners = nextListeners;
- var listeners = currentListeners;
- for (var i = 0; i < listeners.length; i++) {
- listeners[i].apply(listeners, arguments);
- }
- }
-
- return {
- listen: listen,
- emit: emit
- };
- };
|