@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
52 lines (51 loc) • 2.02 kB
JavaScript
import { isObject, isString } from '../../../utils/lang';
var FLAG_NAME_DISCARD_REASON = 'Invalid flag name (max 100 chars, no spaces)';
var TREATMENT_DISCARD_REASON = 'Invalid treatment (max 100 chars and must match pattern)';
var TREATMENT_PATTERN = /^[0-9]+[.a-zA-Z0-9_-]*$|^[a-zA-Z]+[a-zA-Z0-9_-]*$/;
export function isValidFlagName(name) {
return name.length <= 100 && !name.includes(' ');
}
export function isValidTreatment(t) {
var treatment = isObject(t) ? t.treatment : t;
if (!isString(treatment) || treatment.length > 100) {
return false;
}
return TREATMENT_PATTERN.test(treatment);
}
function sanitizeGlobal(logger, treatment) {
if (treatment === undefined)
return undefined;
if (!isValidTreatment(treatment)) {
logger.error("Fallback treatments - Discarded fallback: ".concat(TREATMENT_DISCARD_REASON));
return undefined;
}
return treatment;
}
function sanitizeByFlag(logger, byFlagFallbacks) {
var sanitizedByFlag = {};
if (!isObject(byFlagFallbacks))
return sanitizedByFlag;
Object.keys(byFlagFallbacks).forEach(function (flag) {
var t = byFlagFallbacks[flag];
if (!isValidFlagName(flag)) {
logger.error("Fallback treatments - Discarded flag '".concat(flag, "': ").concat(FLAG_NAME_DISCARD_REASON));
return;
}
if (!isValidTreatment(t)) {
logger.error("Fallback treatments - Discarded treatment for flag '".concat(flag, "': ").concat(TREATMENT_DISCARD_REASON));
return;
}
sanitizedByFlag[flag] = t;
});
return sanitizedByFlag;
}
export function sanitizeFallbacks(logger, fallbacks) {
if (!isObject(fallbacks)) {
logger.error('Fallback treatments - Discarded configuration: it must be an object with optional `global` and `byFlag` properties');
return;
}
return {
global: sanitizeGlobal(logger, fallbacks.global),
byFlag: sanitizeByFlag(logger, fallbacks.byFlag)
};
}