@rxx/core
Version:
React MVI micro framework.
79 lines • 5.28 kB
JavaScript
;
/**
* 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 advice_1 = require("./advice");
/**
* Combine advices and make these to one advice.
* In combined advice, MethodInvocation#proceed call next advice,
* but other values like args, context etc... is return original value.
* @param advices Advice list.
* @returns Combined advice.
*/
function combineAdvice() {
var _this = this;
var advices = [];
for (var _i = 0; _i < arguments.length; _i++) {
advices[_i] = arguments[_i];
}
/**
* Call Advice or AdviceFunction.
* @param advice Call target.
* @param mi MethodInvocation object.
*/
function callAdvice(advice, mi, ih) {
return typeof advice !== 'function'
? advice.invoke(mi, ih)
: advice(mi, ih);
}
/**
* Advice that call other advices.
* @param mi MethodInvocation object.
* @returns Last advice returned value.
*/
return function (mi, ih) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var loop, clone;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
loop = function (next, advices) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!next) return [3 /*break*/, 2];
return [4 /*yield*/, callAdvice(next, new advice_1.MethodInvocation(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, loop(advices.shift(), advices)];
}); }); }, mi.getContext(), mi.getArguments(), mi.getInstanceName(), mi.getPropertyName()), ih)];
case 1: return [2 /*return*/, _a.sent()];
case 2: return [2 /*return*/, mi.proceed()];
}
});
}); };
clone = advices.slice();
return [4 /*yield*/, loop(clone.shift(), clone)];
case 1: return [2 /*return*/, _a.sent()];
}
});
}); };
}
exports.combineAdvice = combineAdvice;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1hZHZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGFuZGxlci9jb21iaW5lLWFkdmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHOzs7QUFFSCxtQ0FLa0I7QUFHbEI7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsYUFBYTtJQUE3QixpQkE4Q0M7SUE5QzZCLGlCQUE4QjtTQUE5QixVQUE4QixFQUE5QixxQkFBOEIsRUFBOUIsSUFBOEI7UUFBOUIsNEJBQThCOztJQUMxRDs7OztPQUlHO0lBQ0gsU0FBUyxVQUFVLENBQ2pCLE1BQXdCLEVBQ3hCLEVBQW9CLEVBQ3BCLEVBQWlCO1FBRWpCLE9BQU8sT0FBTyxNQUFNLEtBQUssVUFBVTtZQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxVQUFPLEVBQW9CLEVBQUUsRUFBaUI7Ozs7OztvQkFDN0MsSUFBSSxHQUFHLFVBQ1gsSUFBa0MsRUFDbEMsT0FBMkI7Ozs7O3lDQUV2QixJQUFJLEVBQUosd0JBQUk7b0NBQ0MscUJBQU0sVUFBVSxDQUNyQixJQUFJLEVBQ0osSUFBSSx5QkFBZ0IsQ0FDbEI7NENBQVksc0JBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBQTtpREFBQSxFQUMxQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQ2YsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUNqQixFQUFFLENBQUMsZUFBZSxFQUFFLEVBQ3BCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FDckIsRUFDRCxFQUFFLENBQ0gsRUFBQTt3Q0FWRCxzQkFBTyxTQVVOLEVBQUM7d0NBR0osc0JBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFDOzs7eUJBQ3JCLENBQUM7b0JBQ0ksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFFdkIscUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBQTt3QkFBdkMsc0JBQU8sU0FBZ0MsRUFBQzs7O1NBQ3pDLENBQUM7QUFDSixDQUFDO0FBOUNELHNDQThDQyJ9