­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mergeInternals = void 0; var from_1 = require("../observable/from"); var OperatorSubscriber_1 = require("./OperatorSubscriber"); function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalTeardown) { var buffer = []; var active = 0; var index = 0; var isComplete = false; var checkComplete = function () { if (isComplete && !buffer.length && !active) { subscriber.complete(); } }; var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); }; var doInnerSub = function (value) { expand && subscriber.next(value); active++; var innerComplete = false; from_1.innerFrom(project(value, index++)).subscribe(new OperatorSubscriber_1.OperatorSubscriber(subscriber, function (innerValue) { onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue); if (expand) { outerNext(innerValue); } else { subscriber.next(innerValue); } }, function () { innerComplete = true; }, undefined, function () { if (innerComplete) { try { active--; var _loop_1 = function () { var bufferedValue = buffer.shift(); innerSubScheduler ? subscriber.add(innerSubScheduler.schedule(function () { return doInnerSub(bufferedValue); })) : doInnerSub(bufferedValue); }; while (buffer.length && active < concurrent) { _loop_1(); } checkComplete(); } catch (err) { subscriber.error(err); } } })); }; source.subscribe(new OperatorSubscriber_1.OperatorSubscriber(subscriber, outerNext, function () { isComplete = true; checkComplete(); })); return function () { additionalTeardown === null || additionalTeardown === void 0 ? void 0 : additionalTeardown(); }; } exports.mergeInternals = mergeInternals; //# sourceMappingURL=mergeInternals.js.map