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