{"ast":null,"code":"import { isArray } from '../util/isArray';\nimport { fromArray } from './fromArray';\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function race(...observables) {\n  if (observables.length === 1) {\n    if (isArray(observables[0])) {\n      observables = observables[0];\n    } else {\n      return observables[0];\n    }\n  }\n\n  return fromArray(observables, undefined).lift(new RaceOperator());\n}\nexport class RaceOperator {\n  call(subscriber, source) {\n    return source.subscribe(new RaceSubscriber(subscriber));\n  }\n\n}\nexport class RaceSubscriber extends OuterSubscriber {\n  constructor(destination) {\n    super(destination);\n    this.hasFirst = false;\n    this.observables = [];\n    this.subscriptions = [];\n  }\n\n  _next(observable) {\n    this.observables.push(observable);\n  }\n\n  _complete() {\n    const observables = this.observables;\n    const len = observables.length;\n\n    if (len === 0) {\n      this.destination.complete();\n    } else {\n      for (let i = 0; i < len && !this.hasFirst; i++) {\n        let observable = observables[i];\n        let subscription = subscribeToResult(this, observable, observable, i);\n\n        if (this.subscriptions) {\n          this.subscriptions.push(subscription);\n        }\n\n        this.add(subscription);\n      }\n\n      this.observables = null;\n    }\n  }\n\n  notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n    if (!this.hasFirst) {\n      this.hasFirst = true;\n\n      for (let i = 0; i < this.subscriptions.length; i++) {\n        if (i !== outerIndex) {\n          let subscription = this.subscriptions[i];\n          subscription.unsubscribe();\n          this.remove(subscription);\n        }\n      }\n\n      this.subscriptions = null;\n    }\n\n    this.destination.next(innerValue);\n  }\n\n} //# sourceMappingURL=race.js.map","map":null,"metadata":{},"sourceType":"module"}