import { scheduleObservable } from './scheduleObservable'; import { schedulePromise } from './schedulePromise'; import { scheduleArray } from './scheduleArray'; import { scheduleIterable } from './scheduleIterable'; import { scheduleAsyncIterable } from './scheduleAsyncIterable'; import { isInteropObservable } from '../util/isInteropObservable'; import { isPromise } from '../util/isPromise'; import { isArrayLike } from '../util/isArrayLike'; import { isIterable } from '../util/isIterable'; import { ObservableInput, SchedulerLike } from '../types'; import { Observable } from '../Observable'; import { isAsyncIterable } from '../util/isAsyncIterable'; import { createInvalidObservableTypeError } from '../util/throwUnobservableError'; import { isReadableStreamLike } from '../util/isReadableStreamLike'; import { scheduleReadableStreamLike } from './scheduleReadableStreamLike'; /** * Converts from a common {@link ObservableInput} type to an observable where subscription and emissions * are scheduled on the provided scheduler. * * @see {@link from} * @see {@link of} * * @param input The observable, array, promise, iterable, etc you would like to schedule * @param scheduler The scheduler to use to schedule the subscription and emissions from * the returned observable. */ export function scheduled(input: ObservableInput, scheduler: SchedulerLike): Observable { if (input != null) { if (isInteropObservable(input)) { return scheduleObservable(input, scheduler); } if (isArrayLike(input)) { return scheduleArray(input, scheduler); } if (isPromise(input)) { return schedulePromise(input, scheduler); } if (isAsyncIterable(input)) { return scheduleAsyncIterable(input, scheduler); } if (isIterable(input)) { return scheduleIterable(input, scheduler); } if (isReadableStreamLike(input)) { return scheduleReadableStreamLike(input, scheduler); } } throw createInvalidObservableTypeError(input); }