UNPKG

kefir

Version:

Reactive Programming library for JavaScript inspired by Bacon.js and RxJS with focus on high performance and low memory usage

54 lines (45 loc) 1.32 kB
import {extend} from '../utils/objects' import {VALUE, ERROR, END} from '../constants' import $$observable from './symbol' function ESObservable(observable) { this._observable = observable.takeErrors(1) } extend(ESObservable.prototype, { subscribe(observerOrOnNext, onError, onComplete) { const observer = typeof observerOrOnNext === 'function' ? {next: observerOrOnNext, error: onError, complete: onComplete} : observerOrOnNext const fn = event => { if (event.type === END) { closed = true } if (event.type === VALUE && observer.next) { observer.next(event.value) } else if (event.type === ERROR && observer.error) { observer.error(event.value) } else if (event.type === END && observer.complete) { observer.complete(event.value) } } this._observable.onAny(fn) let closed = false const subscription = { unsubscribe: () => { closed = true this._observable.offAny(fn) }, get closed() { return closed }, } return subscription }, }) // Need to assign directly b/c Symbols aren't enumerable. ESObservable.prototype[$$observable] = function() { return this } export default function toESObservable() { return new ESObservable(this) }