1 import * as tslib_1 from "tslib";
2 import { Observable } from '../../Observable';
3 import { Subscription } from '../../Subscription';
4 import { from } from '../../observable/from';
5 export function fromFetch(input, initWithSelector = {}) {
6 const { selector } = initWithSelector, init = tslib_1.__rest(initWithSelector, ["selector"]);
7 return new Observable(subscriber => {
8 const controller = new AbortController();
9 const signal = controller.signal;
11 let unsubscribed = false;
12 const subscription = new Subscription();
13 subscription.add(() => {
19 let perSubscriberInit;
22 if (init.signal.aborted) {
26 const outerSignal = init.signal;
27 const outerSignalHandler = () => {
28 if (!signal.aborted) {
32 outerSignal.addEventListener('abort', outerSignalHandler);
33 subscription.add(() => outerSignal.removeEventListener('abort', outerSignalHandler));
36 perSubscriberInit = Object.assign({}, init, { signal });
39 perSubscriberInit = { signal };
41 fetch(input, perSubscriberInit).then(response => {
43 subscription.add(from(selector(response)).subscribe(value => subscriber.next(value), err => {
46 subscriber.error(err);
50 subscriber.complete();
55 subscriber.next(response);
56 subscriber.complete();
61 subscriber.error(err);
67 //# sourceMappingURL=fetch.js.map