aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
4 lines (3 loc) • 9.14 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.validateConfigName=validateConfigName,exports.validateDescription=validateDescription,exports.validateEvaluators=validateEvaluators,exports.validateSamplingPercentage=validateSamplingPercentage,exports.validateFilters=validateFilters,exports.validateSessionTimeout=validateSessionTimeout,exports.validateLogGroupNames=validateLogGroupNames,exports.validateServiceNames=validateServiceNames,exports.validateEvaluatorName=validateEvaluatorName,exports.validateInstructions=validateInstructions,exports.validateCategoricalRatingScale=validateCategoricalRatingScale,exports.validateNumericalRatingScale=validateNumericalRatingScale,exports.validateLambdaTimeout=validateLambdaTimeout,exports.throwIfInvalid=throwIfInvalid,exports.validateEvaluatorTags=validateEvaluatorTags,exports.validateEvaluationTags=validateEvaluationTags;var core_1=()=>{var tmp=require("../../../core");return core_1=()=>tmp,tmp},errors_1=()=>{var tmp=require("../../../core/lib/errors");return errors_1=()=>tmp,tmp},helpers_internal_1=()=>{var tmp=require("../../../core/lib/helpers-internal");return helpers_internal_1=()=>tmp,tmp};const CONFIG_NAME_MIN_LENGTH=1,CONFIG_NAME_MAX_LENGTH=48,DESCRIPTION_MAX_LENGTH=200,EVALUATORS_MIN_COUNT=1,EVALUATORS_MAX_COUNT=10,SAMPLING_PERCENTAGE_MIN=.01,SAMPLING_PERCENTAGE_MAX=100,FILTERS_MAX_COUNT=5,SESSION_TIMEOUT_MIN=1,SESSION_TIMEOUT_MAX=1440,LOG_GROUPS_MIN_COUNT=1,LOG_GROUPS_MAX_COUNT=5,SERVICE_NAMES_MIN_COUNT=1,SERVICE_NAMES_MAX_COUNT=1,EVALUATOR_NAME_MIN_LENGTH=1,EVALUATOR_NAME_MAX_LENGTH=48,RATING_SCALE_MIN_OPTIONS=1,TAG_KEY_MIN=1,TAG_KEY_MAX=128,TAG_VALUE_MAX=256,TAGS_MAX_COUNT=50,ONLINE_EVALUATION_CONFIG_TAG_KEY_PATTERN=/^[a-zA-Z+\-=._:/]+$/,EVALUATOR_TAG_KEY_PATTERN=/^[\p{L}\p{N}\s._:/=+@-]+$/u,TAG_VALUE_PATTERN=/^[\p{L}\p{N}\s._/=+-]*$/u;function validateConfigName(name,_scope){const errors=[];return name==null||core_1().Token.isUnresolved(name)||(name.length<CONFIG_NAME_MIN_LENGTH&&errors.push(`Configuration name must be at least ${CONFIG_NAME_MIN_LENGTH} character(s), got ${name.length}`),name.length>CONFIG_NAME_MAX_LENGTH&&errors.push(`Configuration name must be at most ${CONFIG_NAME_MAX_LENGTH} characters, got ${name.length}`),/^[a-zA-Z][a-zA-Z0-9_]{0,47}$/.test(name)||errors.push(`Configuration name "${name}" does not match required pattern. Must start with a letter and contain only alphanumeric characters and underscores.`)),errors}function validateDescription(description,_scope){const errors=[];return description==null||core_1().Token.isUnresolved(description)||description.length>DESCRIPTION_MAX_LENGTH&&errors.push(`Description must be at most ${DESCRIPTION_MAX_LENGTH} characters, got ${description.length}`),errors}function validateEvaluators(evaluators,_scope){const errors=[];return evaluators==null?(errors.push("Evaluators array is required"),errors):(evaluators.length<EVALUATORS_MIN_COUNT&&errors.push(`At least ${EVALUATORS_MIN_COUNT} evaluator is required, got ${evaluators.length}`),evaluators.length>EVALUATORS_MAX_COUNT&&errors.push(`At most ${EVALUATORS_MAX_COUNT} evaluators are allowed, got ${evaluators.length}`),errors)}function validateSamplingPercentage(percentage,_scope){const errors=[];return percentage==null||core_1().Token.isUnresolved(percentage)||(percentage<SAMPLING_PERCENTAGE_MIN&&errors.push(`Sampling percentage must be at least ${SAMPLING_PERCENTAGE_MIN}, got ${percentage}`),percentage>SAMPLING_PERCENTAGE_MAX&&errors.push(`Sampling percentage must be at most ${SAMPLING_PERCENTAGE_MAX}, got ${percentage}`)),errors}function validateFilters(filters,_scope){const errors=[];return filters==null||filters.length>FILTERS_MAX_COUNT&&errors.push(`At most ${FILTERS_MAX_COUNT} filters are allowed, got ${filters.length}`),errors}function validateSessionTimeout(minutes,_scope){const errors=[];return minutes==null||core_1().Token.isUnresolved(minutes)||(minutes<SESSION_TIMEOUT_MIN&&errors.push(`Session timeout must be at least ${SESSION_TIMEOUT_MIN} minute(s), got ${minutes}`),minutes>SESSION_TIMEOUT_MAX&&errors.push(`Session timeout must be at most ${SESSION_TIMEOUT_MAX} minutes, got ${minutes}`)),errors}function validateLogGroupNames(names,_scope){const errors=[];return names==null||names.length<LOG_GROUPS_MIN_COUNT?(errors.push(`At least ${LOG_GROUPS_MIN_COUNT} log group name is required, got ${names?.length??0}`),errors):(names.length>LOG_GROUPS_MAX_COUNT&&errors.push(`At most ${LOG_GROUPS_MAX_COUNT} log group names are allowed, got ${names.length}`),errors)}function validateServiceNames(names,_scope){const errors=[];return names==null||names.length<SERVICE_NAMES_MIN_COUNT?(errors.push(`At least ${SERVICE_NAMES_MIN_COUNT} service name is required, got ${names?.length??0}`),errors):(names.length>SERVICE_NAMES_MAX_COUNT&&errors.push(`At most ${SERVICE_NAMES_MAX_COUNT} service name is allowed, got ${names.length}`),errors)}function validateEvaluatorName(name,_scope){const errors=[];return name==null||core_1().Token.isUnresolved(name)||(name.length<EVALUATOR_NAME_MIN_LENGTH&&errors.push(`Evaluator name must be at least ${EVALUATOR_NAME_MIN_LENGTH} character(s), got ${name.length}`),name.length>EVALUATOR_NAME_MAX_LENGTH&&errors.push(`Evaluator name must be at most ${EVALUATOR_NAME_MAX_LENGTH} characters, got ${name.length}`),/^[a-zA-Z][a-zA-Z0-9_]{0,47}$/.test(name)||errors.push(`Evaluator name "${name}" does not match required pattern. Must start with a letter and contain only alphanumeric characters and underscores.`)),errors}function validateInstructions(instructions,_scope){const errors=[];return instructions==null?(errors.push("Instructions are required for LLM-as-a-Judge evaluators"),errors):(core_1().Token.isUnresolved(instructions)||instructions.trim().length===0&&errors.push("Instructions must not be empty"),errors)}function validateCategoricalRatingScale(options,_scope){const errors=[];if(options==null||options.length<RATING_SCALE_MIN_OPTIONS)return errors.push(`At least ${RATING_SCALE_MIN_OPTIONS} categorical rating option is required, got ${options?.length??0}`),errors;for(let i=0;i<options.length;i++)!core_1().Token.isUnresolved(options[i].label)&&(!options[i].label||options[i].label.trim().length===0)&&errors.push(`Categorical rating option at index ${i} must have a non-empty label`),!core_1().Token.isUnresolved(options[i].definition)&&(!options[i].definition||options[i].definition.trim().length===0)&&errors.push(`Categorical rating option at index ${i} must have a non-empty definition`);return errors}function validateNumericalRatingScale(options,_scope){const errors=[];if(options==null||options.length<RATING_SCALE_MIN_OPTIONS)return errors.push(`At least ${RATING_SCALE_MIN_OPTIONS} numerical rating option is required, got ${options?.length??0}`),errors;for(let i=0;i<options.length;i++)!core_1().Token.isUnresolved(options[i].label)&&(!options[i].label||options[i].label.trim().length===0)&&errors.push(`Numerical rating option at index ${i} must have a non-empty label`),!core_1().Token.isUnresolved(options[i].definition)&&(!options[i].definition||options[i].definition.trim().length===0)&&errors.push(`Numerical rating option at index ${i} must have a non-empty definition`);return errors}function validateLambdaTimeout(seconds,_scope){const errors=[];return seconds==null||core_1().Token.isUnresolved(seconds)||seconds<=0&&errors.push(`Lambda timeout must be a positive number, got ${seconds}`),errors}function throwIfInvalid(validationFn,param,scope){const errors=validationFn(param,scope);if(errors.length>0)throw scope?new(errors_1()).ValidationError((0,helpers_internal_1().lit)`ValidationFailed`,errors.join(`
`),scope):new(errors_1()).UnscopedValidationError((0,helpers_internal_1().lit)`ValidationFailed`,errors.join(`
`));return param}function validateTags(tags,keyPattern,_scope){const errors=[];if(tags==null||core_1().Token.isUnresolved(tags))return errors;Object.keys(tags).length>TAGS_MAX_COUNT&&errors.push(`Cannot have more than ${TAGS_MAX_COUNT} tags, got ${Object.keys(tags).length}`);for(const[key,value]of Object.entries(tags))core_1().Token.isUnresolved(key)||(key.trim().length===0?errors.push("Tag key cannot be empty or consist only of whitespace"):(key.length<TAG_KEY_MIN||key.length>TAG_KEY_MAX)&&errors.push(`Tag key "${key}" must be between ${TAG_KEY_MIN} and ${TAG_KEY_MAX} characters, got ${key.length}`),key.toLowerCase().startsWith("aws:")&&errors.push(`Tag key "${key}" cannot start with "aws:" as this prefix is reserved by AWS`),keyPattern.test(key)||errors.push(`Tag key "${key}" contains invalid characters`)),core_1().Token.isUnresolved(value)||(value.length>TAG_VALUE_MAX&&errors.push(`Tag value for key "${key}" must be at most ${TAG_VALUE_MAX} characters, got ${value.length}`),TAG_VALUE_PATTERN.test(value)||errors.push(`Tag value for key "${key}" contains invalid characters. Valid: Unicode letters, digits, whitespace, and _./=+-`));return errors}function validateEvaluatorTags(tags,scope){return validateTags(tags,EVALUATOR_TAG_KEY_PATTERN,scope)}function validateEvaluationTags(tags,scope){return validateTags(tags,ONLINE_EVALUATION_CONFIG_TAG_KEY_PATTERN,scope)}