The rule to validate.
Validation result with error or warning messages.
export function validateCustomRule(rule: CustomRule): {
valid: boolean;
error?: string;
warning?: CustomRuleWarningId;
} {
// Check basic validation
const basicError = checkBasicValidation(rule);
if (basicError) {
return { valid: false, error: basicError };
}
// Validate target fields
const targetFieldsError = validateTargetFields(rule.targetFields);
if (targetFieldsError) {
return { valid: false, error: targetFieldsError };
}
// Validate regex pattern syntax
try {
new RegExp(rule.pattern, rule.caseSensitive ? "u" : "ui");
} catch (error) {
return {
valid: false,
error: `Invalid regex pattern: ${error instanceof Error ? error.message : "Unknown error"}`,
};
}
// Check for ReDoS vulnerabilities
const trimmedPattern = rule.pattern.trim();
const redosWarning = checkRedosVulnerabilities(trimmedPattern);
if (redosWarning) {
return { valid: true, warning: redosWarning };
}
// Check for broad patterns
const broadWarning = checkBroadPatterns(trimmedPattern);
if (broadWarning) {
return { valid: true, warning: broadWarning };
}
return { valid: true };
}
Validates a custom rule for syntax, security, and performance issues.