import { Observable } from '../core/Observable' import { Subscribable } from '../core/types.h' import { getSpecies } from '../helpers/getSpecies' export const takeUntil = (signal: Subscribable, stream: Subscribable): Observable => { const C = getSpecies(stream) return new C((observer) => { const signalSubscription = signal.subscribe({ next() { observer.complete() }, error(reason) { observer.error(reason) } }) if (observer.closed) { return undefined } const streamSubscription = stream.subscribe(observer) return () => { streamSubscription.unsubscribe() signalSubscription.unsubscribe() } }) }