UNPKG

multitude

Version:

Comprehensive streams for push and pull

41 lines (35 loc) 4.15 kB
"use strict"; 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