import { Observable as RxStream } from '@reactivex/rxjs/dist/package/Observable'
import { Subject } from '@reactivex/rxjs/dist/package/Subject'
import { Subscription, StreamOps } from './index'
import '@reactivex/rxjs/dist/package/add/operator/map'
import '@reactivex/rxjs/dist/package/add/operator/merge'
import '@reactivex/rxjs/dist/package/add/operator/mergeMap'
import '@reactivex/rxjs/dist/package/add/operator/scan'
import '@reactivex/rxjs/dist/package/add/operator/catch'
import '@reactivex/rxjs/dist/package/add/operator/filter'
import '@reactivex/rxjs/dist/package/add/observable/empty'
import '@reactivex/rxjs/dist/package/add/observable/from'
import '@reactivex/rxjs/dist/package/add/observable/of'
import '@reactivex/rxjs/dist/package/add/observable/fromPromise'
import '@reactivex/rxjs/dist/package/add/observable/combineLatest'
declare module '.' {
interface S_ {
'RxStream': RxStream
}
}
declare module '../fantasy/typeclasses' {
interface _ {
'RxStream': RxStream
}
}
StreamOps.prototype.empty = RxStream.empty
StreamOps.prototype.just = RxStream.of
StreamOps.prototype.scan = function(f, base, fa) {
return fa.scan(f, base)
}
StreamOps.prototype.combine = function (
f: (...a: any[]) => C,
...v: RxStream[]
): RxStream {
return RxStream.combineLatest(v, f)
}
StreamOps.prototype.filter = function (f: (a: A) => boolean, fa: RxStream): RxStream {
return fa.filter(f)
}
StreamOps.prototype.map = function (f: (a: A) => B, fa: RxStream): RxStream {
return fa.map(f)
}
StreamOps.prototype.flatMap = function (f: (a: A) => RxStream, fa: RxStream): RxStream {
return fa.mergeMap(f)
}
StreamOps.prototype.subject = function () {
return new Subject()
}
StreamOps.prototype.subscribe = function (fa: RxStream, next: (v: A) => void, complete?: () => void) {
return fa.catch(x => {
console.error(x)
return fa
}).subscribe(next, x => console.error(x), complete) as Subscription
}
StreamOps.prototype.merge = function (a: RxStream, b: RxStream): RxStream {
return a.merge(b)
}
StreamOps.prototype.fromPromise = RxStream.fromPromise;
(StreamOps.prototype.from) = RxStream.from