• Validates a custom rule for syntax, security, and performance issues.

    Parameters

    Returns { valid: boolean; error?: string; warning?: CustomRuleWarningId }

    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 };
    }