@rxx/core
Version:
React MVI micro framework.
95 lines (94 loc) • 3.62 kB
JavaScript
;
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;