| 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 |