Partial rule (may be missing targetFields).
Complete rule with all required properties.
export function migrateCustomRule(rule: Partial<CustomRule>): CustomRule {
// Generate a stable ID if missing
const id =
rule.id || `${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
return {
id,
pattern: rule.pattern || "",
description: rule.description || "",
enabled: rule.enabled ?? true,
caseSensitive: rule.caseSensitive ?? false,
targetFields:
rule.targetFields && rule.targetFields.length > 0
? rule.targetFields
: ["titles"],
createdAt: rule.createdAt || new Date().toISOString(),
};
}
Migrates rule to current format, defaulting targetFields to ['titles'] for backward compatibility.