multitude
Version:
Comprehensive streams for push and pull
41 lines (35 loc) • 4.15 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.switchMap = switchMap;
var _operate = require("../../utils/operate");
var _intercept = require("../../utils/intercept");
function switchMap(projection) {
return (0, _operate.operate)(obs => {
let index = 0;
let subscription = null;
let parentComplete = false;
return [null, function next(value) {
if (subscription) subscription.unsubscribe();
if (obs.closed) return;
(0, _intercept.intercept)(projection(value, index++), obs, {
start(subs) {
subscription = subs;
},
complete() {
if (parentComplete) obs.complete();
}
});
}, null, function complete() {
parentComplete = true;
if (subscription && subscription.closed) obs.complete();
}, function teardown() {
if (obs.closed || !parentComplete) {
if (!subscription || subscription.closed) return;
subscription.unsubscribe();
}
}];
});
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wdXNoL29wZXJhdG9ycy9jb21iaW5lL3N3aXRjaE1hcC50cyJdLCJuYW1lcyI6WyJzd2l0Y2hNYXAiLCJwcm9qZWN0aW9uIiwib2JzIiwiaW5kZXgiLCJzdWJzY3JpcHRpb24iLCJwYXJlbnRDb21wbGV0ZSIsIm5leHQiLCJ2YWx1ZSIsInVuc3Vic2NyaWJlIiwiY2xvc2VkIiwic3RhcnQiLCJzdWJzIiwiY29tcGxldGUiLCJ0ZWFyZG93biJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUNBOztBQUVPLFNBQVNBLFNBQVQsQ0FDTEMsVUFESyxFQUVpQjtBQUN0QixTQUFPLHNCQUFlQyxHQUFELElBQVM7QUFDNUIsUUFBSUMsS0FBSyxHQUFHLENBQVo7QUFDQSxRQUFJQyxZQUFzQyxHQUFHLElBQTdDO0FBQ0EsUUFBSUMsY0FBYyxHQUFHLEtBQXJCO0FBRUEsV0FBTyxDQUNMLElBREssRUFFTCxTQUFTQyxJQUFULENBQWNDLEtBQWQsRUFBOEI7QUFDNUIsVUFBSUgsWUFBSixFQUFrQkEsWUFBWSxDQUFDSSxXQUFiO0FBQ2xCLFVBQUlOLEdBQUcsQ0FBQ08sTUFBUixFQUFnQjtBQUVoQixnQ0FBVVIsVUFBVSxDQUFDTSxLQUFELEVBQVFKLEtBQUssRUFBYixDQUFwQixFQUFzQ0QsR0FBdEMsRUFBMkM7QUFDekNRLFFBQUFBLEtBQUssQ0FBQ0MsSUFBRCxFQUFPO0FBQ1ZQLFVBQUFBLFlBQVksR0FBR08sSUFBZjtBQUNELFNBSHdDOztBQUl6Q0MsUUFBQUEsUUFBUSxHQUFHO0FBQ1QsY0FBSVAsY0FBSixFQUFvQkgsR0FBRyxDQUFDVSxRQUFKO0FBQ3JCOztBQU53QyxPQUEzQztBQVFELEtBZEksRUFlTCxJQWZLLEVBZ0JMLFNBQVNBLFFBQVQsR0FBb0I7QUFDbEJQLE1BQUFBLGNBQWMsR0FBRyxJQUFqQjtBQUNBLFVBQUlELFlBQVksSUFBSUEsWUFBWSxDQUFDSyxNQUFqQyxFQUF5Q1AsR0FBRyxDQUFDVSxRQUFKO0FBQzFDLEtBbkJJLEVBb0JMLFNBQVNDLFFBQVQsR0FBb0I7QUFDbEIsVUFBSVgsR0FBRyxDQUFDTyxNQUFKLElBQWMsQ0FBQ0osY0FBbkIsRUFBbUM7QUFDakMsWUFBSSxDQUFDRCxZQUFELElBQWlCQSxZQUFZLENBQUNLLE1BQWxDLEVBQTBDO0FBQzFDTCxRQUFBQSxZQUFZLENBQUNJLFdBQWI7QUFDRDtBQUNGLEtBekJJLENBQVA7QUEyQkQsR0FoQ00sQ0FBUDtBQWlDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFB1c2ggfSBmcm9tICdAZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL29wZXJhdGUnO1xuaW1wb3J0IHsgaW50ZXJjZXB0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJjZXB0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaE1hcDxULCBVPihcbiAgcHJvamVjdGlvbjogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBQdXNoLkNvbnZlcnRpYmxlPFU+XG4pOiBQdXNoLk9wZXJhdGlvbjxULCBVPiB7XG4gIHJldHVybiBvcGVyYXRlPFQsIFU+KChvYnMpID0+IHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBzdWJzY3JpcHRpb246IFB1c2guU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHBhcmVudENvbXBsZXRlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbnVsbCxcbiAgICAgIGZ1bmN0aW9uIG5leHQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmIChvYnMuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgaW50ZXJjZXB0KHByb2plY3Rpb24odmFsdWUsIGluZGV4KyspLCBvYnMsIHtcbiAgICAgICAgICBzdGFydChzdWJzKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24gPSBzdWJzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50Q29tcGxldGUpIG9icy5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgbnVsbCxcbiAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBwYXJlbnRDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIGlmIChzdWJzY3JpcHRpb24gJiYgc3Vic2NyaXB0aW9uLmNsb3NlZCkgb2JzLmNvbXBsZXRlKCk7XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4gICAgICAgIGlmIChvYnMuY2xvc2VkIHx8ICFwYXJlbnRDb21wbGV0ZSkge1xuICAgICAgICAgIGlmICghc3Vic2NyaXB0aW9uIHx8IHN1YnNjcmlwdGlvbi5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG4gIH0pO1xufVxuIl19
;