UNPKG

@rxx/worker

Version:

React MVI micro framework.

73 lines (72 loc) 2.87 kB
"use strict"; 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;