UNPKG

@splitsoftware/splitio-commons

Version:
49 lines (48 loc) 2.35 kB
"use strict"; 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;