1 import { map } from './map';
2 import { from } from '../observable/from';
3 import { SimpleOuterSubscriber, SimpleInnerSubscriber, innerSubscribe } from '../innerSubscribe';
4 export function switchMap(project, resultSelector) {
5 if (typeof resultSelector === 'function') {
6 return (source) => source.pipe(switchMap((a, i) => from(project(a, i)).pipe(map((b, ii) => resultSelector(a, b, i, ii)))));
8 return (source) => source.lift(new SwitchMapOperator(project));
10 class SwitchMapOperator {
11 constructor(project) {
12 this.project = project;
14 call(subscriber, source) {
15 return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));
18 class SwitchMapSubscriber extends SimpleOuterSubscriber {
19 constructor(destination, project) {
21 this.project = project;
26 const index = this.index++;
28 result = this.project(value, index);
31 this.destination.error(error);
34 this._innerSub(result);
37 const innerSubscription = this.innerSubscription;
38 if (innerSubscription) {
39 innerSubscription.unsubscribe();
41 const innerSubscriber = new SimpleInnerSubscriber(this);
42 const destination = this.destination;
43 destination.add(innerSubscriber);
44 this.innerSubscription = innerSubscribe(result, innerSubscriber);
45 if (this.innerSubscription !== innerSubscriber) {
46 destination.add(this.innerSubscription);
50 const { innerSubscription } = this;
51 if (!innerSubscription || innerSubscription.closed) {
57 this.innerSubscription = undefined;
60 this.innerSubscription = undefined;
65 notifyNext(innerValue) {
66 this.destination.next(innerValue);
69 //# sourceMappingURL=switchMap.js.map