rxact
Version:
an observable application management for Javascript apps
81 lines (59 loc) • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _isObservable = require('../utils/isObservable');
var _isObservable2 = _interopRequireDefault(_isObservable);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var defaultFactory = function defaultFactory(source) {
return source;
};
var source$Creator = function source$Creator(inputSource$, Observable, getState) {
if (inputSource$ === undefined) {
return Observable.of(getState());
}
if ((0, _isObservable2.default)(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$ || !(0, _isObservable2.default)(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;
};
exports.default = eventRunnerFactory;