UNPKG

@rxx/core

Version:

React MVI micro framework.

252 lines 22.1 kB
"use strict"; /** * The MIT License (MIT) * Copyright (c) Taketoshi Aono * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * @fileoverview * @author Taketoshi Aono */ Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var rxjs_1 = require("rxjs"); var intent_1 = require("./intent/intent"); var state_handler_1 = require("./handler/state-handler"); var utils_1 = require("./utils"); var combine_template_1 = require("./observable/combine-template"); var intent_handler_1 = require("./intent/intent-handler"); var subject_1 = require("./subject"); var devtools_1 = require("./devtools"); var reducer_1 = require("./reducer"); /** * Group of stores. * That merge multiple store state to one monolithic state. */ var StoreGroup = /** @class */ (function () { function StoreGroup(intent, stores, service, subject) { this.intent = intent; this.stores = stores; this.service = service; this.subject = subject; this.storeInstances = []; } /** * @returns Merged state. */ StoreGroup.prototype.initialize = function () { var _this = this; return this.stores.reduce(function (state, Store) { var store = new Store(_this.intent, _this.service, _this.subject.observable); var nextState = store.initialize(); _this.storeInstances.push(store); if (nextState.view) { state.view = tslib_1.__assign({}, state.view, nextState.view); } for (var key in nextState) { if (key !== 'view') { if (!nextState[key] || !(nextState[key] instanceof rxjs_1.Observable)) { throw new Error("Property " + key + " must be Observable."); } if (state[key]) { state[key] = state[key].merge(nextState[key]); } else { state[key] = nextState[key]; } } } return state; }, { view: {} }); }; StoreGroup.prototype.getStores = function () { return this.storeInstances; }; return StoreGroup; }()); var Provisioning = /** @class */ (function () { function Provisioning(name, context, intentConstructors, storeConstructors, stateFactory, service, stateHandlers, intentAdvice) { if (stateFactory === void 0) { stateFactory = function (o, i) { return i; }; } if (service === void 0) { service = {}; } if (stateHandlers === void 0) { stateHandlers = {}; } if (intentAdvice === void 0) { intentAdvice = function (v) { return v; }; } var _this = this; this.name = name; this.context = context; this.intentConstructors = intentConstructors; this.storeConstructors = storeConstructors; this.stateFactory = stateFactory; this.service = service; this.stateHandlers = stateHandlers; this.intentAdvice = intentAdvice; this.isDisposed = false; this.handlerSubscriptions = []; this.subscribers = []; this.handlers = {}; this.devToolsSubscribers = []; this.cache = null; if (!this.context.provisioning) { this.handlers = state_handler_1.getHandlers(); } else { utils_1.forIn(state_handler_1.getHandlers(), function (v, k) { _this.handlers[k] = v.clone(); }); } if (this.stateHandlers) { utils_1.forIn(this.stateHandlers, function (v, k) { _this.handlers[k] = v; }); } this.devTools = devtools_1.connectDevTools({ name: this.name, instanceId: this.name }); } Provisioning.prototype.dispose = function (removeCache) { if (removeCache === void 0) { removeCache = true; } this.isDisposed = true; this.subscription && this.subscription.unsubscribe(); this.subscription = null; this.intent.dispose(); this.handlerSubscriptions.forEach(function (s) { return s.unsubscribe(); }); this.devToolsSubscribers.forEach(function (a) { return a(); }); if (removeCache) { this.cache = null; } }; Provisioning.prototype.prepare = function () { var _this = this; if (this.isDisposed) { this.intent.prepare(this.context.__intent); this.subject.prepare(this.context.__subject); } else if (!this.intent) { this.intent = new intent_1.Intent(this.context.__intent); this.subject = new subject_1.SubjectTree(this.devTools, this.context.__subject); } if (!this.cache) { this.cache = {}; var intentInstance = {}; for (var key in this.intentConstructors) { intentInstance[key] = this.intentAdvice(new this.intentConstructors[key](function (type, payload) { _this.subject.notify({ type: type, payload: payload }); _this.intent.push(type, payload); }, tslib_1.__assign({ intent: this.intent.response }, utils_1.mapValues(this.handlers, function (v) { return v.response; })))); } this.cache.intentInstance = intentInstance; var storeGroup = (this.cache.storeGroup = new StoreGroup(intentInstance, this.storeConstructors, this.service, this.subject)); var intentHandler = (this.cache.intentHandler = intent_handler_1.generateIntentHandler(this.intent, this.subject)); this.cache.storeState = this.stateFactory(this.subject.observable, storeGroup.initialize()); this.cache.stores = storeGroup.getStores(); } utils_1.forIn(this.handlers, function (handler) { handler.setIntent(_this.cache.intentHandler); handler.setSubject(_this.subject); }); if (this.isDisposed || !this.subscription) { var state = tslib_1.__assign({}, this.cache.storeState); this.subscribeHandler(state); this.subscription = combine_template_1.combineTemplate(state).subscribe(function (state) { if (_this.context && _this.context.provisioning) { var parentState = _this.context.provisioning.getState(); for (var key in parentState) { if (state[key]) { state[key] = tslib_1.__assign({}, parentState[key], state[key]); } else { state[key] = parentState[key]; } } } _this.notifyUpdate(state); }, function (error) { console.error(error); }); this.devToolsSubscribers.push(this.devTools.subscribe(function (message) { if (message.type === 'DISPATCH' && message.payload.type === 'JUMP_TO_STATE') { var state_1 = JSON.parse(message.state); _this.notifyUpdateView(state_1); _this.subject.suspendDevtools(); _this.subject.notify({ type: reducer_1.SystemEvent.REPLACE_STATE, payload: { state: state_1 }, }); _this.subject.notify(state_1.__payload__); _this.subject.resumeDevtools(); } })); } this.isDisposed = false; }; Provisioning.prototype.getStores = function () { return this.cache.storeGroup.getStores(); }; Provisioning.prototype.getState = function () { return this.state; }; Provisioning.prototype.getIntentHandler = function () { return this.cache.intentHandler; }; Provisioning.prototype.getIntentInstance = function () { return this.cache.intentInstance; }; Provisioning.prototype.getIntent = function () { return this.intent; }; Provisioning.prototype.getSubject = function () { return this.subject; }; Provisioning.prototype.subscribe = function (subscriber, runInitial) { var _this = this; if (runInitial === void 0) { runInitial = false; } this.subscribers.push(subscriber); if (runInitial) { subscriber(this.state); } return function () { var index = -1; _this.subscribers.some(function (v, i) { if (v === subscriber) { index = i; return true; } return false; }); _this.subscribers.splice(index, 1); }; }; Provisioning.prototype.getHandlers = function () { return this.handlers; }; Provisioning.prototype.subscribeHandler = function (state) { for (var key in this.handlers) { this.handlerSubscriptions.push(this.handlers[key].subscribe(state)); } }; Provisioning.prototype.notifyUpdate = function (newState) { this.state = newState; this.subject.setState(newState); this.intent.setState(newState); utils_1.forIn(this.handlers, function (v) { return v.setState(newState); }); this.subscribers.forEach(function (subscriber) { return subscriber(newState); }); }; Provisioning.prototype.notifyUpdateView = function (viewState) { var _this = this; this.state.view = viewState; this.subject.setState(this.state); this.intent.setState(this.state); utils_1.forIn(this.handlers, function (v) { return v.setState(_this.state); }); this.subscribers.forEach(function (subscriber) { return subscriber(_this.state); }); }; return Provisioning; }()); exports.Provisioning = Provisioning; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zpc2lvbmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHOzs7QUFFSCw2QkFBeUQ7QUFFekQsMENBQXlFO0FBRXpFLHlEQUFvRTtBQUNwRSxpQ0FBb0Q7QUFDcEQsa0VBQWdFO0FBQ2hFLDBEQUErRTtBQUMvRSxxQ0FBd0M7QUFDeEMsdUNBQTREO0FBQzVELHFDQUF3QztBQVN4Qzs7O0dBR0c7QUFDSDtJQUdFLG9CQUNVLE1BQXNDLEVBQ3RDLE1BQW9DLEVBQ3BDLE9BQStCLEVBQy9CLE9BQW9CO1FBSHBCLFdBQU0sR0FBTixNQUFNLENBQWdDO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQThCO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBQy9CLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFOdEIsbUJBQWMsR0FBaUIsRUFBRSxDQUFDO0lBT3ZDLENBQUM7SUFFSjs7T0FFRztJQUNJLCtCQUFVLEdBQWpCO1FBQUEsaUJBOEJDO1FBN0JDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ3ZCLFVBQUMsS0FBSyxFQUFFLEtBQUs7WUFDWCxJQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FDckIsS0FBSSxDQUFDLE1BQU0sRUFDWCxLQUFJLENBQUMsT0FBTyxFQUNaLEtBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUN4QixDQUFDO1lBQ0YsSUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFVBQVcsRUFBRSxDQUFDO1lBQ3RDLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDbEIsS0FBSyxDQUFDLElBQUksd0JBQVEsS0FBSyxDQUFDLElBQUksRUFBSyxTQUFTLENBQUMsSUFBSSxDQUFFLENBQUM7YUFDbkQ7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