UNPKG

@rxx/core

Version:

React MVI micro framework.

95 lines (94 loc) 3.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var handler_1 = require("./handler"); var advice_1 = require("./advice"); var utils_1 = require("../utils"); var stateHandlerRegistry = {}; function getHandlers() { return stateHandlerRegistry; } exports.getHandlers = getHandlers; function registerHandlers(newHandlers) { var invalidTargetKey = ''; if (!utils_1.every(newHandlers, function (h, k) { var result = h instanceof StateHandler; if (!result) { invalidTargetKey = k; } return result; })) { throw new Error(invalidTargetKey + " is not valid state handler."); } var sources = (stateHandlerRegistry = tslib_1.__assign({}, stateHandlerRegistry, newHandlers)); return utils_1.mapValues(sources, function (v, k) { return v.response; }); } exports.registerHandlers = registerHandlers; function removeHandler(key) { stateHandlerRegistry = utils_1.omit(stateHandlerRegistry, key); } exports.removeHandler = removeHandler; var StateHandler = (function () { function StateHandler(advices, cutPoints) { if (advices === void 0) { advices = {}; } if (cutPoints === void 0) { cutPoints = {}; } var _this = this; this.store = new handler_1.StreamStore(); this.advices = advices; this.cutPoints = cutPoints; this.handlerResponse = new handler_1.HandlerResponse(this.store); utils_1.forIn(advices, function (advice, name) { var cutPoint = cutPoints[name]; cutPoint = utils_1.isArray(cutPoint) ? cutPoint : [cutPoint]; if (!cutPoint) { throw new Error("Cut point " + name + " does not exists"); } cutPoint.forEach(function (name) { if (typeof _this[name] !== 'function') { throw new Error('Advice only applyable to Function.'); } var method = _this[name]; _this[name] = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var proceed = function () { return method.apply(_this, args); }; var mi = new advice_1.MethodInvocation(proceed, _this, args, _this.constructor.displayName || _this.constructor.name, name); return advice['invoke'] ? advice.invoke(mi, _this.intent) : advice(mi, _this.intent); }; }); }); } StateHandler.prototype.setState = function (state) { this.state = state; }; StateHandler.prototype.setIntent = function (intent) { this.intentHandler = intent; }; StateHandler.prototype.setSubject = function (subject) { this.subject = subject; }; Object.defineProperty(StateHandler.prototype, "intent", { get: function () { return this.intentHandler; }, enumerable: true, configurable: true }); Object.defineProperty(StateHandler.prototype, "response", { get: function () { return this.handlerResponse; }, enumerable: true, configurable: true }); StateHandler.prototype.callback = function (key, value) { var _this = this; return function (args) { return _this.push(key, value !== undefined ? value : args); }; }; return StateHandler; }()); exports.StateHandler = StateHandler;