mergeInternals.js
2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { innerFrom } from '../observable/innerFrom';
import { executeSchedule } from '../util/executeSchedule';
import { createOperatorSubscriber } from './OperatorSubscriber';
export function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {
const buffer = [];
let active = 0;
let index = 0;
let isComplete = false;
const checkComplete = () => {
if (isComplete && !buffer.length && !active) {
subscriber.complete();
}
};
const outerNext = (value) => (active < concurrent ? doInnerSub(value) : buffer.push(value));
const doInnerSub = (value) => {
expand && subscriber.next(value);
active++;
let innerComplete = false;
innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, (innerValue) => {
onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);
if (expand) {
outerNext(innerValue);
}
else {
subscriber.next(innerValue);
}
}, () => {
innerComplete = true;
}, undefined, () => {
if (innerComplete) {
try {
active--;
while (buffer.length && active < concurrent) {
const bufferedValue = buffer.shift();
if (innerSubScheduler) {
executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));
}
else {
doInnerSub(bufferedValue);
}
}
checkComplete();
}
catch (err) {
subscriber.error(err);
}
}
}));
};
source.subscribe(createOperatorSubscriber(subscriber, outerNext, () => {
isComplete = true;
checkComplete();
}));
return () => {
additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();
};
}
//# sourceMappingURL=mergeInternals.js.map