UNPKG

@splitsoftware/splitio-commons

Version:
59 lines (58 loc) 2.94 kB
"use strict"; 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;