import * as tslib_1 from "tslib"; import { Observable } from '../../Observable'; import { Subscription } from '../../Subscription'; import { from } from '../../observable/from'; export function fromFetch(input, initWithSelector = {}) { const { selector } = initWithSelector, init = tslib_1.__rest(initWithSelector, ["selector"]); return new Observable(subscriber => { const controller = new AbortController(); const signal = controller.signal; let abortable = true; let unsubscribed = false; const subscription = new Subscription(); subscription.add(() => { unsubscribed = true; if (abortable) { controller.abort(); } }); let perSubscriberInit; if (init) { if (init.signal) { if (init.signal.aborted) { controller.abort(); } else { const outerSignal = init.signal; const outerSignalHandler = () => { if (!signal.aborted) { controller.abort(); } }; outerSignal.addEventListener('abort', outerSignalHandler); subscription.add(() => outerSignal.removeEventListener('abort', outerSignalHandler)); } } perSubscriberInit = Object.assign({}, init, { signal }); } else { perSubscriberInit = { signal }; } fetch(input, perSubscriberInit).then(response => { if (selector) { subscription.add(from(selector(response)).subscribe(value => subscriber.next(value), err => { abortable = false; if (!unsubscribed) { subscriber.error(err); } }, () => { abortable = false; subscriber.complete(); })); } else { abortable = false; subscriber.next(response); subscriber.complete(); } }).catch(err => { abortable = false; if (!unsubscribed) { subscriber.error(err); } }); return subscription; }); } //# sourceMappingURL=fetch.js.map