UNPKG

@splitsoftware/splitio-commons

Version:
63 lines (62 loc) 2.39 kB
"use strict"; 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;