@rxx/worker
Version:
React MVI micro framework.
73 lines (72 loc) • 2.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var rxjs_1 = require("rxjs");
var utils_1 = require("./utils");
var operators_1 = require("rxjs/operators");
var provisioning_1 = require("./provisioning");
var utils_2 = require("./utils");
var worker_1 = require("./worker");
function getDefaultName() {
return 'AnonymousProvider';
}
function makeApp(apps, initialStateFactory, otherProps) {
if (otherProps === void 0) { otherProps = {}; }
return function app(subject, states) {
if (states === void 0) { states = {}; }
var initialState;
if (typeof initialStateFactory === 'function') {
initialState = initialStateFactory();
}
else {
initialState = initialStateFactory;
}
var initializedMap = {};
return Object.keys(apps).reduce(function (states, key) {
var app = apps[key];
var nextState = app(subject, initialState[key]);
if (nextState.view) {
if (!rxjs_1.isObservable(nextState.view)) {
throw new Error("Application view of " + key + " must be Observable.");
}
nextState.view = nextState.view.pipe(operators_1.startWith(initialState[key]));
if (!states.view) {
states.view = {};
}
if (!utils_1.isDefined(states.view[key])) {
states.view[key] = nextState.view;
}
else {
states.view[key] = rxjs_1.merge(states.view[key], nextState.view);
}
}
for (var key_1 in nextState) {
if (key_1 !== 'view') {
if (!nextState[key_1] || !(nextState[key_1] instanceof rxjs_1.Observable)) {
throw new Error("Property " + key_1 + " must be Observable.");
}
if (states[key_1]) {
states[key_1] = rxjs_1.merge(states[key_1], nextState[key_1]);
}
else {
states[key_1] = nextState[key_1];
}
}
}
return states;
}, states);
};
}
exports.makeApp = makeApp;
function run(apps, initialStateFactory, otherProps) {
if (otherProps === void 0) { otherProps = {}; }
return worker_1.initWorker(new provisioning_1.Provisioning(otherProps.intent
? utils_2.isObject(otherProps.intent)
? otherProps.intent
: { intent: otherProps.intent }
: {}, otherProps.store
? Array.isArray(otherProps.store)
? otherProps.store
: [otherProps.store]
: [], makeApp(apps, initialStateFactory), otherProps.service, otherProps.stateHandlers || {}));
}
exports.run = run;