8fd06d57bce92471a0537546dc29d6a2c8467038c452f0a990779e04e3ab10b7ef57e1f0cdf11538c2eeb652b579f4c1d49efdd50bdfc9af5f1b5c2f99188b 1.4 KB

1234567891011121314151617181920212223242526272829
  1. import { ObservableInput } from '../types';
  2. import { subscribeToArray } from './subscribeToArray';
  3. import { subscribeToPromise } from './subscribeToPromise';
  4. import { subscribeToIterable } from './subscribeToIterable';
  5. import { subscribeToObservable } from './subscribeToObservable';
  6. import { isArrayLike } from './isArrayLike';
  7. import { isPromise } from './isPromise';
  8. import { isObject } from './isObject';
  9. import { iterator as Symbol_iterator } from '../symbol/iterator';
  10. import { observable as Symbol_observable } from '../symbol/observable';
  11. import { Subscription } from '../Subscription';
  12. import { Subscriber } from '../Subscriber';
  13. export const subscribeTo = <T>(result: ObservableInput<T>): (subscriber: Subscriber<T>) => Subscription | void => {
  14. if (!!result && typeof result[Symbol_observable] === 'function') {
  15. return subscribeToObservable(result as any);
  16. } else if (isArrayLike(result)) {
  17. return subscribeToArray(result);
  18. } else if (isPromise(result)) {
  19. return subscribeToPromise(result as Promise<any>);
  20. } else if (!!result && typeof result[Symbol_iterator] === 'function') {
  21. return subscribeToIterable(result as any);
  22. } else {
  23. const value = isObject(result) ? 'an invalid object' : `'${result}'`;
  24. const msg = `You provided ${value} where a stream was expected.`
  25. + ' You can provide an Observable, Promise, Array, or Iterable.';
  26. throw new TypeError(msg);
  27. }
  28. };