@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
65 lines (64 loc) • 2.75 kB
JavaScript
import { isObject, isString } from '../../../utils/lang';
var CONFIG_NAME_DISCARD_REASON = 'Invalid config name (max 100 chars, no spaces)';
var VARIANT_DISCARD_REASON = 'Invalid variant (max 100 chars and must match pattern)';
var VALUE_DISCARD_REASON = 'Invalid value (must be an object)';
var VARIANT_PATTERN = /^[0-9]+[.a-zA-Z0-9_-]*$|^[a-zA-Z]+[a-zA-Z0-9_-]*$/;
export function isValidConfigName(name) {
return name.length <= 100 && !name.includes(' ');
}
export function isValidConfig(config) {
if (!isObject(config))
return false;
if (!isString(config.variant) || config.variant.length > 100 || !VARIANT_PATTERN.test(config.variant))
return false;
if (!isObject(config.value))
return false;
return true;
}
function sanitizeGlobal(logger, config) {
if (config === undefined)
return undefined;
if (!isValidConfig(config)) {
if (!isObject(config) || !isString(config.variant) || config.variant.length > 100 || !VARIANT_PATTERN.test(config.variant)) {
logger.error("Fallback configs - Discarded fallback: ".concat(VARIANT_DISCARD_REASON));
}
else {
logger.error("Fallback configs - Discarded fallback: ".concat(VALUE_DISCARD_REASON));
}
return undefined;
}
return config;
}
function sanitizeByName(logger, byNameFallbacks) {
var sanitizedByName = {};
if (!isObject(byNameFallbacks))
return sanitizedByName;
Object.keys(byNameFallbacks).forEach(function (configName) {
var config = byNameFallbacks[configName];
if (!isValidConfigName(configName)) {
logger.error("Fallback configs - Discarded config '".concat(configName, "': ").concat(CONFIG_NAME_DISCARD_REASON));
return;
}
if (!isValidConfig(config)) {
if (!isObject(config) || !isString(config.variant) || config.variant.length > 100 || !VARIANT_PATTERN.test(config.variant)) {
logger.error("Fallback configs - Discarded config '".concat(configName, "': ").concat(VARIANT_DISCARD_REASON));
}
else {
logger.error("Fallback configs - Discarded config '".concat(configName, "': ").concat(VALUE_DISCARD_REASON));
}
return;
}
sanitizedByName[configName] = config;
});
return sanitizedByName;
}
export function sanitizeFallbacks(logger, fallbacks) {
if (!isObject(fallbacks)) {
logger.error('Fallback configs - Discarded configuration: it must be an object with optional `global` and `byName` properties');
return;
}
return {
global: sanitizeGlobal(logger, fallbacks.global),
byName: sanitizeByName(logger, fallbacks.byName)
};
}