--- /dev/null
+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
\ No newline at end of file