multitude
Version:
Comprehensive streams for push and pull
59 lines (48 loc) • 5.36 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.mergeMap = mergeMap;
var _operate = require("../../utils/operate");
var _intercept = require("../../utils/intercept");
function mergeMap(projection) {
return (0, _operate.operate)(obs => {
let index = 0;
let parentComplete = false;
let completeSubscriptions = 0;
const subscriptions = [];
function unsubscribe() {
for (const subscription of subscriptions) {
subscription.unsubscribe();
}
}
return [null, function next(value) {
if (obs.closed) return;
(0, _intercept.intercept)(projection(value, index++), obs, {
start(subscription) {
subscriptions.push(subscription);
},
error(error) {
obs.error(error);
unsubscribe();
},
complete() {
completeSubscriptions++;
if (!parentComplete) return;
if (completeSubscriptions >= subscriptions.length) {
obs.complete();
unsubscribe();
}
}
});
}, null, function complete() {
parentComplete = true;
if (completeSubscriptions >= subscriptions.length) {
obs.complete();
}
}, function teardown() {
if (obs.closed || !parentComplete) unsubscribe();
}];
});
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wdXNoL29wZXJhdG9ycy9jb21iaW5lL21lcmdlTWFwLnRzIl0sIm5hbWVzIjpbIm1lcmdlTWFwIiwicHJvamVjdGlvbiIsIm9icyIsImluZGV4IiwicGFyZW50Q29tcGxldGUiLCJjb21wbGV0ZVN1YnNjcmlwdGlvbnMiLCJzdWJzY3JpcHRpb25zIiwidW5zdWJzY3JpYmUiLCJzdWJzY3JpcHRpb24iLCJuZXh0IiwidmFsdWUiLCJjbG9zZWQiLCJzdGFydCIsInB1c2giLCJlcnJvciIsImNvbXBsZXRlIiwibGVuZ3RoIiwidGVhcmRvd24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFFTyxTQUFTQSxRQUFULENBQ0xDLFVBREssRUFFaUI7QUFDdEIsU0FBTyxzQkFBZUMsR0FBRCxJQUFTO0FBQzVCLFFBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsUUFBSUMsY0FBYyxHQUFHLEtBQXJCO0FBQ0EsUUFBSUMscUJBQXFCLEdBQUcsQ0FBNUI7QUFDQSxVQUFNQyxhQUFrQyxHQUFHLEVBQTNDOztBQUVBLGFBQVNDLFdBQVQsR0FBNkI7QUFDM0IsV0FBSyxNQUFNQyxZQUFYLElBQTJCRixhQUEzQixFQUEwQztBQUN4Q0UsUUFBQUEsWUFBWSxDQUFDRCxXQUFiO0FBQ0Q7QUFDRjs7QUFFRCxXQUFPLENBQ0wsSUFESyxFQUVMLFNBQVNFLElBQVQsQ0FBY0MsS0FBZCxFQUE4QjtBQUM1QixVQUFJUixHQUFHLENBQUNTLE1BQVIsRUFBZ0I7QUFFaEIsZ0NBQVVWLFVBQVUsQ0FBQ1MsS0FBRCxFQUFRUCxLQUFLLEVBQWIsQ0FBcEIsRUFBc0NELEdBQXRDLEVBQTJDO0FBQ3pDVSxRQUFBQSxLQUFLLENBQUNKLFlBQUQsRUFBZTtBQUNsQkYsVUFBQUEsYUFBYSxDQUFDTyxJQUFkLENBQW1CTCxZQUFuQjtBQUNELFNBSHdDOztBQUl6Q00sUUFBQUEsS0FBSyxDQUFDQSxLQUFELEVBQVE7QUFDWFosVUFBQUEsR0FBRyxDQUFDWSxLQUFKLENBQVVBLEtBQVY7QUFDQVAsVUFBQUEsV0FBVztBQUNaLFNBUHdDOztBQVF6Q1EsUUFBQUEsUUFBUSxHQUFHO0FBQ1RWLFVBQUFBLHFCQUFxQjtBQUVyQixjQUFJLENBQUNELGNBQUwsRUFBcUI7O0FBQ3JCLGNBQUlDLHFCQUFxQixJQUFJQyxhQUFhLENBQUNVLE1BQTNDLEVBQW1EO0FBQ2pEZCxZQUFBQSxHQUFHLENBQUNhLFFBQUo7QUFDQVIsWUFBQUEsV0FBVztBQUNaO0FBQ0Y7O0FBaEJ3QyxPQUEzQztBQWtCRCxLQXZCSSxFQXdCTCxJQXhCSyxFQXlCTCxTQUFTUSxRQUFULEdBQW9CO0FBQ2xCWCxNQUFBQSxjQUFjLEdBQUcsSUFBakI7O0FBQ0EsVUFBSUMscUJBQXFCLElBQUlDLGFBQWEsQ0FBQ1UsTUFBM0MsRUFBbUQ7QUFDakRkLFFBQUFBLEdBQUcsQ0FBQ2EsUUFBSjtBQUNEO0FBQ0YsS0E5QkksRUErQkwsU0FBU0UsUUFBVCxHQUFvQjtBQUNsQixVQUFJZixHQUFHLENBQUNTLE1BQUosSUFBYyxDQUFDUCxjQUFuQixFQUFtQ0csV0FBVztBQUMvQyxLQWpDSSxDQUFQO0FBbUNELEdBL0NNLENBQVA7QUFnREQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQdXNoIH0gZnJvbSAnQGRlZmluaXRpb25zJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi8uLi91dGlscy9vcGVyYXRlJztcbmltcG9ydCB7IGludGVyY2VwdCB9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyY2VwdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU1hcDxULCBVPihcbiAgcHJvamVjdGlvbjogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBQdXNoLkNvbnZlcnRpYmxlPFU+XG4pOiBQdXNoLk9wZXJhdGlvbjxULCBVPiB7XG4gIHJldHVybiBvcGVyYXRlPFQsIFU+KChvYnMpID0+IHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBwYXJlbnRDb21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBjb21wbGV0ZVN1YnNjcmlwdGlvbnMgPSAwO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnM6IFB1c2guU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucykge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgbnVsbCxcbiAgICAgIGZ1bmN0aW9uIG5leHQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9icy5jbG9zZWQpIHJldHVybjtcblxuICAgICAgICBpbnRlcmNlcHQocHJvamVjdGlvbih2YWx1ZSwgaW5kZXgrKyksIG9icywge1xuICAgICAgICAgIHN0YXJ0KHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcihlcnJvcikge1xuICAgICAgICAgICAgb2JzLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlU3Vic2NyaXB0aW9ucysrO1xuXG4gICAgICAgICAgICBpZiAoIXBhcmVudENvbXBsZXRlKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoY29tcGxldGVTdWJzY3JpcHRpb25zID49IHN1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG9icy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgbnVsbCxcbiAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBwYXJlbnRDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIGlmIChjb21wbGV0ZVN1YnNjcmlwdGlvbnMgPj0gc3Vic2NyaXB0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBvYnMuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uIHRlYXJkb3duKCkge1xuICAgICAgICBpZiAob2JzLmNsb3NlZCB8fCAhcGFyZW50Q29tcGxldGUpIHVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgXTtcbiAgfSk7XG59XG4iXX0=
;