@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
56 lines (55 loc) • 2.86 kB
JavaScript
import { isObject, isString, isFiniteNumber } from '../lang';
import { validateSplit } from './split';
function validateTimestampData(log, maybeTimestamp, method, item) {
if (isFiniteNumber(maybeTimestamp) && maybeTimestamp > -1)
return true;
log.error(method + ": preloadedData." + item + " must be a positive number.");
return false;
}
function validateSplitsData(log, maybeSplitsData, method) {
if (isObject(maybeSplitsData)) {
var splitNames = Object.keys(maybeSplitsData);
if (splitNames.length === 0)
log.warn(method + ": preloadedData.splitsData doesn't contain feature flag definitions.");
// @TODO in the future, consider handling the possibility of having parsed definitions of splits
if (splitNames.every(function (splitName) { return validateSplit(log, splitName, method) && isString(maybeSplitsData[splitName]); }))
return true;
}
log.error(method + ": preloadedData.splitsData must be a map of feature flag names to their stringified definitions.");
return false;
}
function validateMySegmentsData(log, maybeMySegmentsData, method) {
if (isObject(maybeMySegmentsData)) {
var userKeys = Object.keys(maybeMySegmentsData);
if (userKeys.every(function (userKey) {
var segmentNames = maybeMySegmentsData[userKey];
// an empty list is valid
return Array.isArray(segmentNames) && segmentNames.every(function (segmentName) { return isString(segmentName); });
}))
return true;
}
log.error(method + ": preloadedData.mySegmentsData must be a map of user keys to their list of segment names.");
return false;
}
function validateSegmentsData(log, maybeSegmentsData, method) {
if (isObject(maybeSegmentsData)) {
var segmentNames = Object.keys(maybeSegmentsData);
if (segmentNames.every(function (segmentName) { return isString(maybeSegmentsData[segmentName]); }))
return true;
}
log.error(method + ": preloadedData.segmentsData must be a map of segment names to their stringified definitions.");
return false;
}
export function validatePreloadedData(log, maybePreloadedData, method) {
if (!isObject(maybePreloadedData)) {
log.error(method + ": preloadedData must be an object.");
}
else if (validateTimestampData(log, maybePreloadedData.lastUpdated, method, 'lastUpdated') &&
validateTimestampData(log, maybePreloadedData.since, method, 'since') &&
validateSplitsData(log, maybePreloadedData.splitsData, method) &&
(!maybePreloadedData.mySegmentsData || validateMySegmentsData(log, maybePreloadedData.mySegmentsData, method)) &&
(!maybePreloadedData.segmentsData || validateSegmentsData(log, maybePreloadedData.segmentsData, method))) {
return true;
}
return false;
}