UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

55 lines (54 loc) 1.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createMulticastSource = void 0; var freeze_1 = require("../../../../../misc/helpers/freeze.cjs"); var noop_1 = require("../../../../../misc/helpers/noop.cjs"); function createMulticastSource() { var _emitFunctions = []; var _dispatchingObservers; var _dispatchingCount = 0; var cloneObservers = function () { if (_emitFunctions === _dispatchingObservers) { _emitFunctions = _emitFunctions.slice(); } }; var emit = function (value) { if (_dispatchingCount === 0) { _dispatchingObservers = _emitFunctions; _dispatchingCount = _dispatchingObservers.length; for (var i = 0; _dispatchingCount > 0; i++) { _dispatchingCount--; _dispatchingObservers[i](value); } } else { throw new Error("Already dispatching."); } }; var subscribe = function (emit) { var running = true; if (_dispatchingCount > 0) { cloneObservers(); } _emitFunctions.push(emit); return function () { if (running) { running = false; if (_dispatchingCount > 0) { cloneObservers(); _dispatchingObservers[_dispatchingObservers.indexOf(emit)] = noop_1.noop; } _emitFunctions.splice(_emitFunctions.indexOf(emit), 1); } }; }; return (0, freeze_1.freeze)({ getObservers: function () { return _emitFunctions; }, emit: emit, subscribe: subscribe }); } exports.createMulticastSource = createMulticastSource;