@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
59 lines (58 loc) • 2.94 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.engineParser = void 0;
var lang_1 = require("../utils/lang");
var parser_1 = require("./parser");
var key_1 = require("../utils/key");
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");
var prerequisites_1 = require("./matchers/prerequisites");
function evaluationResult(result, defaultTreatment) {
return {
treatment: (0, lang_1.get)(result, 'treatment', defaultTreatment),
label: (0, lang_1.get)(result, 'label', labels_1.NO_CONDITION_MATCH)
};
}
function engineParser(log, split, storage) {
var killed = split.killed, seed = split.seed, trafficAllocation = split.trafficAllocation, trafficAllocationSeed = split.trafficAllocationSeed, status = split.status, conditions = split.conditions, prerequisites = split.prerequisites;
var defaultTreatment = (0, lang_1.isString)(split.defaultTreatment) ? split.defaultTreatment : constants_1.CONTROL;
var evaluator = (0, parser_1.parser)(log, conditions, storage);
var prerequisiteMatcher = (0, prerequisites_1.prerequisitesMatcherContext)(prerequisites, storage, log);
return {
getTreatment: function (key, attributes, splitEvaluator) {
var parsedKey = (0, key_1.keyParser)(key);
function evaluate(prerequisitesMet) {
if (!prerequisitesMet) {
log.debug(constants_2.ENGINE_DEFAULT, ['Prerequisite not met']);
return {
treatment: defaultTreatment,
label: labels_1.PREREQUISITES_NOT_MET
};
}
var evaluation = evaluator(parsedKey, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator);
return (0, thenable_1.thenable)(evaluation) ?
evaluation.then(function (result) { return evaluationResult(result, defaultTreatment); }) :
evaluationResult(evaluation, defaultTreatment);
}
if (status === 'ARCHIVED')
return {
treatment: constants_1.CONTROL,
label: labels_1.SPLIT_ARCHIVED
};
if (killed) {
log.debug(constants_2.ENGINE_DEFAULT, ['Flag is killed']);
return {
treatment: defaultTreatment,
label: labels_1.SPLIT_KILLED
};
}
var prerequisitesMet = prerequisiteMatcher({ key: key, attributes: attributes }, splitEvaluator);
return (0, thenable_1.thenable)(prerequisitesMet) ?
prerequisitesMet.then(evaluate) :
evaluate(prerequisitesMet);
}
};
}
exports.engineParser = engineParser;
;