@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
49 lines (48 loc) • 2.35 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.ifElseIfCombinerContext = void 0;
var lang_1 = require("../../utils/lang");
var thenable_1 = require("../../utils/promise/thenable");
var labels_1 = require("../../utils/labels");
var constants_1 = require("../../utils/constants");
var constants_2 = require("../../logger/constants");
function ifElseIfCombinerContext(log, predicates) {
function unexpectedInputHandler() {
log.error(constants_2.ERROR_ENGINE_COMBINER_IFELSEIF);
return {
treatment: constants_1.CONTROL,
label: labels_1.UNSUPPORTED_MATCHER_TYPE
};
}
function computeEvaluation(predicateResults) {
for (var i = 0, len = predicateResults.length; i < len; i++) {
var evaluation = predicateResults[i];
if (evaluation !== undefined) {
if (!(0, lang_1.isBoolean)(evaluation))
log.debug(constants_2.ENGINE_COMBINER_IFELSEIF, [evaluation.treatment]);
return evaluation;
}
}
log.debug(constants_2.ENGINE_COMBINER_IFELSEIF_NO_TREATMENT);
return undefined;
}
function ifElseIfCombiner(key, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator) {
// In Async environments we are going to have async predicates. There is none way to know
// before hand so we need to evaluate all the predicates, verify for thenables, and finally,
// define how to return the treatment (wrap result into a Promise or not).
var predicateResults = predicates.map(function (evaluator) { return evaluator(key, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator); });
// if we find a thenable
if ((0, lang_1.findIndex)(predicateResults, thenable_1.thenable) !== -1) {
return Promise.all(predicateResults).then(function (results) { return computeEvaluation(results); });
}
return computeEvaluation(predicateResults);
}
// if there is none predicates, then there was an error in parsing phase
if (!Array.isArray(predicates) || predicates.length === 0) {
return unexpectedInputHandler;
}
else {
return ifElseIfCombiner;
}
}
exports.ifElseIfCombinerContext = ifElseIfCombinerContext;
;