@rxx/core
Version:
React MVI micro framework.
125 lines • 8.19 kB
JavaScript
;
/**
* @fileoverview
* @author Taketoshi Aono
*/
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");
/**
* StateHandler Registry.
*/
var stateHandlerRegistry = {};
/**
* Get registered stateHandlerRegistry.
*/
function getHandlers() {
return stateHandlerRegistry;
}
exports.getHandlers = getHandlers;
/**
* Register StateHandler to handler map.
* @param newHandlers Handler map.
*/
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;
/**
* Remove specified handler from registry.
* @param key Key or keys of target handler.
*/
function removeHandler(key) {
stateHandlerRegistry = utils_1.omit(stateHandlerRegistry, key);
}
exports.removeHandler = removeHandler;
var StateHandler = /** @class */ (function () {
function StateHandler(advices, cutPoints) {
if (advices === void 0) { advices = {}; }
if (cutPoints === void 0) { cutPoints = {}; }
var _this = this;
/**
* Subject for exported stream.
*/
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);
/*tslint:disable:no-string-literal*/
return advice['invoke']
? advice.invoke(mi, _this.intent)
: advice(mi, _this.intent);
/*tslint:enable:no-string-literal*/
};
});
});
}
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", {
/**
* Return response representation of stream.
* @return Representation of stream response.
*/
get: function () {
return this.handlerResponse;
},
enumerable: true,
configurable: true
});
/**
* @inheritDocs
*/
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;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVyL3N0YXRlLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBR0gscUNBTW1CO0FBQ25CLG1DQUFvRTtBQUNwRSxrQ0FBa0U7QUFTbEU7O0dBRUc7QUFDSCxJQUFJLG9CQUFvQixHQUFvQixFQUFFLENBQUM7QUFFL0M7O0dBRUc7QUFDSCxTQUFnQixXQUFXO0lBQ3pCLE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQztBQUZELGtDQUVDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLFdBQTRCO0lBRTVCLElBQUksZ0JBQWdCLEdBQW9CLEVBQUUsQ0FBQztJQUUzQyxJQUNFLENBQUMsYUFBSyxDQUFDLFdBQVcsRUFBRSxVQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLElBQU0sTUFBTSxHQUFHLENBQUMsWUFBWSxZQUFZLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLGdCQUFnQixHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxFQUNGO1FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBSSxnQkFBZ0IsaUNBQThCLENBQUMsQ0FBQztLQUNwRTtJQUNELElBQU0sT0FBTyxHQUFHLENBQUMsb0JBQW9CLHdCQUNoQyxvQkFBb0IsRUFDcEIsV0FBVyxDQUNmLENBQUMsQ0FBQztJQUVILE9BQU8saUJBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLFFBQVEsRUFBVixDQUFVLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBdkJELDRDQXVCQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxHQUFzQjtJQUNsRCxvQkFBb0IsR0FBRyxZQUFJLENBQUMsb0JBQW9CLEVBQUUs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