rxact
Version:
an observable application management for Javascript apps
73 lines (53 loc) • 1.7 kB
JavaScript
import isObservable from '../utils/isObservable';
var defaultFactory = function defaultFactory(source) {
return source;
};
var source$Creator = function source$Creator(inputSource$, Observable, getState) {
if (inputSource$ === undefined) {
return Observable.of(getState());
}
if (isObservable(inputSource$)) {
return inputSource$;
}
return Observable.of(inputSource$);
};
var eventRunnerFactory = function eventRunnerFactory(Observable, getState) {
var eventRunner = function eventRunner(factory, inputSource$) {
var source$ = source$Creator(inputSource$, Observable, getState);
if (factory === null || factory === undefined) {
factory = defaultFactory;
}
if (typeof factory !== 'function') {
throw new Error('Expected first parameter of eventRunner to be a function.');
}
var outputSource$ = factory(source$);
if (!outputSource$ || !isObservable(outputSource$)) {
throw new Error('Expected an Observable object returned by factory in eventRunner');
}
var output = void 0;
var next = void 0;
var subscription = void 0;
var stream$ = new Observable(function (observer) {
if (output !== undefined) {
observer.next(output);
}
next = function next(value) {
return observer.next(value);
};
return {
unsubscribe: function unsubscribe() {
subscription.unsubscribe();
}
};
});
subscription = outputSource$.subscribe(function (value) {
if (typeof next === 'function') {
next(value);
}
output = value;
});
return stream$;
};
return eventRunner;
};
export default eventRunnerFactory;