import { Observable } from '../core/Observable' import { Subscribable } from '../core/types.h' import { getSpecies } from '../helpers/getSpecies' export const timeout = (time: number, stream: Subscribable): Observable => { const C = getSpecies(stream) return new C((observer) => { let timer: any = setTimeout(() => { observer.error(new Error('Timeout has occurred')) }, time) return stream.subscribe({ next(value) { observer.next(value) if (timer) { clearTimeout(timer) timer = null } }, error(reason) { observer.error(reason) clearTimeout(timer) timer = null }, complete() { observer.complete() clearTimeout(timer) timer = null } }) }) }