@aws-cdk/aws-bedrock-agentcore-alpha
Version:
The CDK Construct Library for Amazon Bedrock
85 lines • 10.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ValidationError = void 0;
exports.validateStringField = validateStringField;
exports.validateFieldPattern = validateFieldPattern;
exports.throwIfInvalid = throwIfInvalid;
const aws_cdk_lib_1 = require("aws-cdk-lib");
/**
* Error thrown when validation fails
*/
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = 'ValidationError';
}
}
exports.ValidationError = ValidationError;
/**
* Validates the length of a string field against minimum and maximum constraints.
* @param value - The string value to validate
* @param fieldName - Name of the field being validated (for error messages)
* @param minLength - Minimum allowed length (defaults to 0)
* @param maxLength - Maximum allowed length
* @returns true if validation passes
* @throws Error if validation fails with current length information
*/
function validateStringField(params) {
const errors = [];
// Handle null/undefined values
if (params.value == null) {
return errors; // Skip validation for null/undefined values
}
const currentLength = params.value.length;
// Evaluate only if it is not an unresolved Token
if (!aws_cdk_lib_1.Token.isUnresolved(params.fieldName)) {
if (params.value.length > params.maxLength) {
errors.push(`The field ${params.fieldName} is ${currentLength} characters long but must be less than or equal to ${params.maxLength} characters`);
}
if (params.value.length < params.minLength) {
errors.push(`The field ${params.fieldName} is ${currentLength} characters long but must be at least ${params.minLength} characters`);
}
}
return errors;
}
/**
* Validates a string field against a regex pattern.
* @param value - The string value to validate
* @param fieldName - Name of the field being validated (for error messages)
* @param pattern - Regular expression pattern to test against
* @param customMessage - Optional custom error message
* @returns true if validation passes
* @throws Error if validation fails with detailed message
*/
function validateFieldPattern(value, fieldName, pattern, customMessage) {
const errors = [];
// Handle null/undefined values
if (value == null) {
return errors; // Skip validation for null/undefined values
}
// Evaluate only if it is not an unresolved Token
if (!aws_cdk_lib_1.Token.isUnresolved(value)) {
// Verify type
if (typeof value !== 'string') {
errors.push(`Expected string for ${fieldName}, got ${typeof value}`);
}
// Validate specified regex
if (!(pattern instanceof RegExp)) {
errors.push('Pattern must be a valid regular expression');
}
// Pattern validation
if (!pattern.test(value)) {
const defaultMessage = `The field ${fieldName} with value "${value}" does not match the required pattern ${pattern}`;
errors.push(customMessage || defaultMessage);
}
}
return errors;
}
function throwIfInvalid(validationFn, param) {
const errors = validationFn(param);
if (errors.length > 0) {
throw new ValidationError(errors.join('\n'));
}
return param;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThCQSxrREEwQkM7QUFXRCxvREFnQ0M7QUFJRCx3Q0FNQztBQTdHRCw2Q0FBb0M7QUFFcEM7O0dBRUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsS0FBSztJQUN4QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztLQUMvQjtDQUNGO0FBTEQsMENBS0M7QUFXRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLE1BQThCO0lBQ2hFLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUU1QiwrQkFBK0I7SUFDL0IsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLENBQUMsNENBQTRDO0lBQzdELENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUUxQyxpREFBaUQ7SUFDakQsSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsYUFBYSxNQUFNLENBQUMsU0FBUyxPQUFPLGFBQWEsc0RBQXNELE1BQU0sQ0FBQyxTQUFTLGFBQWEsQ0FDckksQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQyxNQUFNLENBQUMsSUFBSSxDQUNULGFBQWEsTUFBTSxDQUFDLFNBQVMsT0FBTyxhQUFhLHlDQUF5QyxNQUFNLENBQUMsU0FBUyxhQUFhLENBQ3hILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLG9CQUFvQixDQUNsQyxLQUFhLEVBQ2IsU0FBaUIsRUFDakIsT0FBZSxFQUNmLGFBQXNCO0lBRXRCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUU1QiwrQkFBK0I7SUFDL0IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxNQUFNLENBQUMsQ0FBQyw0Q0FBNEM7SUFDN0QsQ0FBQztJQUVELGlEQUFpRDtJQUNqRCxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixjQUFjO1FBQ2QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixTQUFTLFNBQVMsT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLENBQUMsT0FBTyxZQUFZLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLGNBQWMsR0FBRyxhQUFhLFNBQVMsZ0JBQWdCLEtBQUsseUNBQXlDLE9BQU8sRUFBRSxDQUFDO1lBQ3JILE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUlELFNBQWdCLGNBQWMsQ0FBSSxZQUE2QixFQUFFLEtBQVE7SUFDdkUsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gdmFsaWRhdGlvbiBmYWlsc1xuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuaW50ZXJmYWNlIEludGVydmFsVmFsaWRhdGlvbiB7XG4gIGZpZWxkTmFtZTogc3RyaW5nO1xuICBtaW5MZW5ndGg6IG51bWJlcjtcbiAgbWF4TGVuZ3RoOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTdHJpbmdMZW5ndGhWYWxpZGF0aW9uIGV4dGVuZHMgSW50ZXJ2YWxWYWxpZGF0aW9uIHtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHN0cmluZyBmaWVsZCBhZ2FpbnN0IG1pbmltdW0gYW5kIG1heGltdW0gY29uc3RyYWludHMuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RyaW5nIHZhbHVlIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gZmllbGROYW1lIC0gTmFtZSBvZiB0aGUgZmllbGQgYmVpbmcgdmFsaWRhdGVkIChmb3IgZXJyb3IgbWVzc2FnZXMpXG4gKiBAcGFyYW0gbWluTGVuZ3RoIC0gTWluaW11bSBhbGxvd2VkIGxlbmd0aCAoZGVmYXVsdHMgdG8gMClcbiAqIEBwYXJhbSBtYXhMZW5ndGggLSBNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoXG4gKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHMgd2l0aCBjdXJyZW50IGxlbmd0aCBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmdGaWVsZChwYXJhbXM6IFN0cmluZ0xlbmd0aFZhbGlkYXRpb24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBIYW5kbGUgbnVsbC91bmRlZmluZWQgdmFsdWVzXG4gIGlmIChwYXJhbXMudmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7IC8vIFNraXAgdmFsaWRhdGlvbiBmb3IgbnVsbC91bmRlZmluZWQgdmFsdWVzXG4gIH1cblxuICBjb25zdCBjdXJyZW50TGVuZ3RoID0gcGFyYW1zLnZhbHVlLmxlbmd0aDtcblxuICAvLyBFdmFsdWF0ZSBvbmx5IGlmIGl0IGlzIG5vdCBhbiB1bnJlc29sdmVkIFRva2VuXG4gIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHBhcmFtcy5maWVsZE5hbWUpKSB7XG4gICAgaWYgKHBhcmFtcy52YWx1ZS5sZW5ndGggPiBwYXJhbXMubWF4TGVuZ3RoKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgYFRoZSBmaWVsZCAke3BhcmFtcy5maWVsZE5hbWV9IGlzICR7Y3VycmVudExlbmd0aH0gY2hhcmFjdGVycyBsb25nIGJ1dCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke3BhcmFtcy5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnZhbHVlLmxlbmd0aCA8IHBhcmFtcy5taW5MZW5ndGgpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBgVGhlIGZpZWxkICR7cGFyYW1zLmZpZWxkTmFtZX0gaXMgJHtjdXJyZW50TGVuZ3RofSBjaGFyYWN0ZXJzIGxvbmcgYnV0IG11c3QgYmUgYXQgbGVhc3QgJHtwYXJhbXMubWluTGVuZ3RofSBjaGFyYWN0ZXJzYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzdHJpbmcgZmllbGQgYWdhaW5zdCBhIHJlZ2V4IHBhdHRlcm4uXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RyaW5nIHZhbHVlIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gZmllbGROYW1lIC0gTmFtZSBvZiB0aGUgZmllbGQgYmVpbmcgdmFsaWRhdGVkIChmb3IgZXJyb3IgbWVzc2FnZXMpXG4gKiBAcGFyYW0gcGF0dGVybiAtIFJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIHRlc3QgYWdhaW5zdFxuICogQHBhcmFtIGN1c3RvbU1lc3NhZ2UgLSBPcHRpb25hbCBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzIHdpdGggZGV0YWlsZWQgbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICBwYXR0ZXJuOiBSZWdFeHAsXG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcsXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBIYW5kbGUgbnVsbC91bmRlZmluZWQgdmFsdWVzXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9yczsgLy8gU2tpcCB2YWxpZGF0aW9uIGZvciBudWxsL3VuZGVmaW5lZCB2YWx1ZXNcbiAgfVxuXG4gIC8vIEV2YWx1YXRlIG9ubHkgaWYgaXQgaXMgbm90IGFuIHVucmVzb2x2ZWQgVG9rZW5cbiAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgLy8gVmVyaWZ5IHR5cGVcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goYEV4cGVjdGVkIHN0cmluZyBmb3IgJHtmaWVsZE5hbWV9LCBnb3QgJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIHNwZWNpZmllZCByZWdleFxuICAgIGlmICghKHBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICBlcnJvcnMucHVzaCgnUGF0dGVybiBtdXN0IGJlIGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uJyk7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiB2YWxpZGF0aW9uXG4gICAgaWYgKCFwYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICBjb25zdCBkZWZhdWx0TWVzc2FnZSA9IGBUaGUgZmllbGQgJHtmaWVsZE5hbWV9IHdpdGggdmFsdWUgXCIke3ZhbHVlfVwiIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBwYXR0ZXJuICR7cGF0dGVybn1gO1xuICAgICAgZXJyb3JzLnB1c2goY3VzdG9tTWVzc2FnZSB8fCBkZWZhdWx0TWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkZuPFQ+ID0gKHBhcmFtOiBUKSA9PiBzdHJpbmdbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZJbnZhbGlkPFQ+KHZhbGlkYXRpb25GbjogVmFsaWRhdGlvbkZuPFQ+LCBwYXJhbTogVCk6IFQge1xuICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0aW9uRm4ocGFyYW0pO1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gIH1cbiAgcmV0dXJuIHBhcmFtO1xufVxuIl19