import { Observable } from '../core/Observable' import { Subscribable, SubscriptionObserver } from '../core/types.h' import { getSpecies } from './getSpecies' export const transform = ( stream: Subscribable, fn: (observer: SubscriptionObserver, value: T, index: number) => void ): Observable => { const C = getSpecies(stream) return new C((observer) => { let index = 0 return stream.subscribe({ next(value) { try { fn(observer, value, index) index += 1 } catch (e) { observer.error(e) } }, error(e) { observer.error(e) }, complete() { observer.complete() } }) }) }