{"ast":null,"code":"import { OuterSubscriber } from '../OuterSubscriber';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { map } from './map';\nimport { from } from '../observable/from';\nexport function exhaustMap(project, resultSelector) {\n  if (resultSelector) {\n    return source => source.pipe(exhaustMap((a, i) => from(project(a, i)).pipe(map((b, ii) => resultSelector(a, b, i, ii)))));\n  }\n\n  return source => source.lift(new ExhaustMapOperator(project));\n}\n\nclass ExhaustMapOperator {\n  constructor(project) {\n    this.project = project;\n  }\n\n  call(subscriber, source) {\n    return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project));\n  }\n\n}\n\nclass ExhaustMapSubscriber extends OuterSubscriber {\n  constructor(destination, project) {\n    super(destination);\n    this.project = project;\n    this.hasSubscription = false;\n    this.hasCompleted = false;\n    this.index = 0;\n  }\n\n  _next(value) {\n    if (!this.hasSubscription) {\n      this.tryNext(value);\n    }\n  }\n\n  tryNext(value) {\n    let result;\n    const index = this.index++;\n\n    try {\n      result = this.project(value, index);\n    } catch (err) {\n      this.destination.error(err);\n      return;\n    }\n\n    this.hasSubscription = true;\n\n    this._innerSub(result, value, index);\n  }\n\n  _innerSub(result, value, index) {\n    const innerSubscriber = new InnerSubscriber(this, value, index);\n    const destination = this.destination;\n    destination.add(innerSubscriber);\n    const innerSubscription = subscribeToResult(this, result, undefined, undefined, innerSubscriber);\n\n    if (innerSubscription !== innerSubscriber) {\n      destination.add(innerSubscription);\n    }\n  }\n\n  _complete() {\n    this.hasCompleted = true;\n\n    if (!this.hasSubscription) {\n      this.destination.complete();\n    }\n\n    this.unsubscribe();\n  }\n\n  notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n    this.destination.next(innerValue);\n  }\n\n  notifyError(err) {\n    this.destination.error(err);\n  }\n\n  notifyComplete(innerSub) {\n    const destination = this.destination;\n    destination.remove(innerSub);\n    this.hasSubscription = false;\n\n    if (this.hasCompleted) {\n      this.destination.complete();\n    }\n  }\n\n} //# sourceMappingURL=exhaustMap.js.map","map":null,"metadata":{},"sourceType":"module"}