@absmartly/javascript-sdk
Version:
A/B Smartly Javascript SDK
53 lines (52 loc) • 1.82 kB
JavaScript
var __importDefault = this && this.__importDefault || function (mod) {
return mod && mod.__esModule ? mod : {
"default": mod
};
};
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.mergeConfig = void 0;
const default_1 = __importDefault(require("rfdc/default"));
const utils_1 = require("./utils");
function mergeConfig(context, previousConfig) {
const merged = (0, default_1.default)(previousConfig);
const keys = context.variableKeys();
for (const [variableKey, experimentName] of Object.entries(keys)) {
let target = merged;
const frags = variableKey.split(".");
for (let index = 0; index < frags.length; ++index) {
const frag = frags[index];
if (`_${frag}_setter` in target) {
console.error(`Config key '${frags.slice(0, index + 1).join(".")}' already set by experiment '${target[`_${frag}_setter`]}'.`);
target = undefined;
break;
}
if (frag in target) {
if (index < frags.length - 1) {
if (!(0, utils_1.isObject)(target[frag])) {
console.warn(`Config key '${variableKey}' for experiment '${experimentName}' is overriding non-object value at '${frags.slice(0, index + 1).join(".")}' with an object.`);
target = target[frag] = {};
} else {
target = target[frag];
}
}
}
if (index === frags.length - 1) {
const defaultValue = target[frag];
Object.defineProperty(target, `_${frag}_setter`, {
value: experimentName,
writable: false
});
Object.defineProperty(target, frag, {
get: () => {
return context.variableValue(variableKey, defaultValue);
}
});
}
}
}
return merged;
}
exports.mergeConfig = mergeConfig;
;