UNPKG

@splitsoftware/splitio-commons

Version:
65 lines (64 loc) 2.75 kB
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) }; }