import { Observable } from '../core/Observable' import { Subscribable, Subscription } from '../core/types.h' import { getSpecies } from '../helpers/getSpecies' export const catchError = ( fn: (reason: R) => Subscribable, stream: Subscribable ): Observable => { const C = getSpecies(stream) return new C((observer) => { let subscription: Subscription subscription = stream.subscribe({ start(s) { subscription = s }, next(value) { observer.next(value) }, complete() { observer.complete() }, error(reason) { subscription = fn(reason).subscribe({ start(s) { subscription = s }, next(value) { observer.next(value) }, complete() { observer.complete() }, error(innerReason) { observer.error(innerReason) } }) } }) return () => subscription.unsubscribe() }) }