@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
63 lines (62 loc) • 2.39 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.splitsParserFromSettingsFactory = void 0;
var lang_1 = require("../../../utils/lang");
var parseCondition_1 = require("./parseCondition");
function hasTreatmentChanged(prev, curr) {
if (typeof prev !== typeof curr)
return true;
if (typeof prev === 'string') { // strings treatments, just compare
return prev !== curr;
}
else { // has treatment and config, compare both
return prev.treatment !== curr.treatment || prev.config !== curr.config;
}
}
function splitsParserFromSettingsFactory() {
var previousMock = { 'emptyMock': '1' };
function mockUpdated(currentData) {
var names = Object.keys(currentData);
// Different amount of items
if (names.length !== Object.keys(previousMock).length) {
previousMock = (0, lang_1.merge)({}, currentData);
return true;
}
return names.some(function (name) {
var newSplit = !previousMock[name];
var newTreatment = hasTreatmentChanged(previousMock[name], currentData[name]);
var changed = newSplit || newTreatment;
if (changed)
previousMock = (0, lang_1.merge)({}, currentData);
return changed;
});
}
/**
*
* @param settings - validated object with mocked features mapping.
*/
return function splitsParserFromSettings(settings) {
var features = settings.features || {};
if (!mockUpdated(features))
return false;
var splitObjects = {};
(0, lang_1.forOwn)(features, function (data, splitName) {
var treatment = data;
var config = null;
if ((0, lang_1.isObject)(data)) {
treatment = data.treatment;
config = data.config || config;
}
var configurations = {};
if (config !== null)
configurations[treatment] = config;
splitObjects[splitName] = {
trafficTypeName: 'localhost',
conditions: [(0, parseCondition_1.parseCondition)({ treatment: treatment })],
configurations: configurations
};
});
return splitObjects;
};
}
exports.splitsParserFromSettingsFactory = splitsParserFromSettingsFactory;
;