UNPKG

rxjs

Version:

Reactive Extensions for modern JavaScript

109 lines 3.93 kB
import { __asyncValues, __awaiter } from "tslib"; import { isArrayLike } from '../util/isArrayLike'; import { isPromise } from '../util/isPromise'; import { iterator as Symbol_iterator } from '../symbol/iterator'; import { observable as Symbol_observable } from '../symbol/observable'; import { Observable } from '../Observable'; import { scheduled } from '../scheduled/scheduled'; import { isFunction } from '../util/isFunction'; import { reportUnhandledError } from '../util/reportUnhandledError'; import { isInteropObservable } from '../util/isInteropObservable'; import { isAsyncIterable } from '../util/isAsyncIterable'; import { createInvalidObservableTypeError } from '../util/throwUnobservableError'; import { isIterable } from '../util/isIterable'; export function from(input, scheduler) { return scheduler ? scheduled(input, scheduler) : innerFrom(input); } export function innerFrom(input) { if (input instanceof Observable) { return input; } if (input != null) { if (isInteropObservable(input)) { return fromInteropObservable(input); } if (isArrayLike(input)) { return fromArrayLike(input); } if (isPromise(input)) { return fromPromise(input); } if (isAsyncIterable(input)) { return fromAsyncIterable(input); } if (isIterable(input)) { return fromIterable(input); } } throw createInvalidObservableTypeError(input); } function fromInteropObservable(obj) { return new Observable((subscriber) => { const obs = obj[Symbol_observable](); if (isFunction(obs.subscribe)) { return obs.subscribe(subscriber); } throw new TypeError('Provided object does not correctly implement Symbol.observable'); }); } export function fromArrayLike(array) { return new Observable((subscriber) => { for (let i = 0; i < array.length && !subscriber.closed; i++) { subscriber.next(array[i]); } subscriber.complete(); }); } function fromPromise(promise) { return new Observable((subscriber) => { promise .then((value) => { if (!subscriber.closed) { subscriber.next(value); subscriber.complete(); } }, (err) => subscriber.error(err)) .then(null, reportUnhandledError); }); } function fromIterable(iterable) { return new Observable((subscriber) => { const iterator = iterable[Symbol_iterator](); while (!subscriber.closed) { const { done, value } = iterator.next(); if (done) { subscriber.complete(); } else { subscriber.next(value); } } return () => isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); }); } function fromAsyncIterable(asyncIterable) { return new Observable((subscriber) => { process(asyncIterable, subscriber).catch((err) => subscriber.error(err)); }); } function process(asyncIterable, subscriber) { var asyncIterable_1, asyncIterable_1_1; var e_1, _a; return __awaiter(this, void 0, void 0, function* () { try { for (asyncIterable_1 = __asyncValues(asyncIterable); asyncIterable_1_1 = yield asyncIterable_1.next(), !asyncIterable_1_1.done;) { const value = asyncIterable_1_1.value; subscriber.next(value); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return)) yield _a.call(asyncIterable_1); } finally { if (e_1) throw e_1.error; } } subscriber.complete(); }); } //# sourceMappingURL=from.js.map