/* See https://github.com/ReactiveX/rxjs/blob/5.0.2/src/util/subscribeToResult.ts#L70-L77 And also: - https://github.com/ReactiveX/rxjs/blob/5.0.2/src/Observable.ts - https://github.com/ReactiveX/rxjs/blob/5.0.2/src/symbol/observable.ts */ if (result instanceof Observable) { if (result._isScalar) { destination.next((result).value); destination.complete(); return null; } else { return result.subscribe(destination); } } // ... if (result && typeof result[$$observable] === 'function') { const obs = result[$$observable](); if (typeof obs.subscribe !== 'function') { destination.error(new TypeError('Provided object does not correctly implement Symbol.observable')); } else { return obs.subscribe(new InnerSubscriber(outerSubscriber, outerValue, outerIndex)); } }