| import { canReportError } from './util/canReportError'; | 
| import { toSubscriber } from './util/toSubscriber'; | 
| import { observable as Symbol_observable } from './symbol/observable'; | 
| import { pipeFromArray } from './util/pipe'; | 
| import { config } from './config'; | 
| export class Observable { | 
|     constructor(subscribe) { | 
|         this._isScalar = false; | 
|         if (subscribe) { | 
|             this._subscribe = subscribe; | 
|         } | 
|     } | 
|     lift(operator) { | 
|         const observable = new Observable(); | 
|         observable.source = this; | 
|         observable.operator = operator; | 
|         return observable; | 
|     } | 
|     subscribe(observerOrNext, error, complete) { | 
|         const { operator } = this; | 
|         const sink = toSubscriber(observerOrNext, error, complete); | 
|         if (operator) { | 
|             sink.add(operator.call(sink, this.source)); | 
|         } | 
|         else { | 
|             sink.add(this.source || (config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ? | 
|                 this._subscribe(sink) : | 
|                 this._trySubscribe(sink)); | 
|         } | 
|         if (config.useDeprecatedSynchronousErrorHandling) { | 
|             if (sink.syncErrorThrowable) { | 
|                 sink.syncErrorThrowable = false; | 
|                 if (sink.syncErrorThrown) { | 
|                     throw sink.syncErrorValue; | 
|                 } | 
|             } | 
|         } | 
|         return sink; | 
|     } | 
|     _trySubscribe(sink) { | 
|         try { | 
|             return this._subscribe(sink); | 
|         } | 
|         catch (err) { | 
|             if (config.useDeprecatedSynchronousErrorHandling) { | 
|                 sink.syncErrorThrown = true; | 
|                 sink.syncErrorValue = err; | 
|             } | 
|             if (canReportError(sink)) { | 
|                 sink.error(err); | 
|             } | 
|             else { | 
|                 console.warn(err); | 
|             } | 
|         } | 
|     } | 
|     forEach(next, promiseCtor) { | 
|         promiseCtor = getPromiseCtor(promiseCtor); | 
|         return new promiseCtor((resolve, reject) => { | 
|             let subscription; | 
|             subscription = this.subscribe((value) => { | 
|                 try { | 
|                     next(value); | 
|                 } | 
|                 catch (err) { | 
|                     reject(err); | 
|                     if (subscription) { | 
|                         subscription.unsubscribe(); | 
|                     } | 
|                 } | 
|             }, reject, resolve); | 
|         }); | 
|     } | 
|     _subscribe(subscriber) { | 
|         const { source } = this; | 
|         return source && source.subscribe(subscriber); | 
|     } | 
|     [Symbol_observable]() { | 
|         return this; | 
|     } | 
|     pipe(...operations) { | 
|         if (operations.length === 0) { | 
|             return this; | 
|         } | 
|         return pipeFromArray(operations)(this); | 
|     } | 
|     toPromise(promiseCtor) { | 
|         promiseCtor = getPromiseCtor(promiseCtor); | 
|         return new promiseCtor((resolve, reject) => { | 
|             let value; | 
|             this.subscribe((x) => value = x, (err) => reject(err), () => resolve(value)); | 
|         }); | 
|     } | 
| } | 
| Observable.create = (subscribe) => { | 
|     return new Observable(subscribe); | 
| }; | 
| function getPromiseCtor(promiseCtor) { | 
|     if (!promiseCtor) { | 
|         promiseCtor = config.Promise || Promise; | 
|     } | 
|     if (!promiseCtor) { | 
|         throw new Error('no Promise impl found'); | 
|     } | 
|     return promiseCtor; | 
| } | 
| //# sourceMappingURL=Observable.js.map |