import WorkflowValidator from '../resources/WorkflowValidator.js';
/**
* Validateur pour les conventions de nommage dans les workflows n8n
*/
class NamingValidator implements WorkflowValidator {
/**
* Valide les conventions de nommage dans un workflow n8n
* @param workflow Les données du workflow à valider
* @param strictness Le niveau de rigueur de la validation
* @returns Résultat de la validation avec les problèmes détectés
*/
validate(workflow: any, strictness: 'low' | 'medium' | 'high') {
const issues: Array<{
message: string;
recommendation: string;
severity: 'low' | 'medium' | 'high';
location?: string;
}> = [];
// Vérifier le nom du workflow
if (!workflow.name) {
issues.push({
message: 'Le workflow n\'a pas de nom',
recommendation: 'Donnez un nom descriptif au workflow',
severity: 'high',
});
} else {
// Vérifier la longueur du nom
if (workflow.name.length < 5) {
issues.push({
message: 'Le nom du workflow est trop court',
recommendation: 'Utilisez un nom plus descriptif (au moins 5 caractères)',
severity: strictness === 'low' ? 'low' : 'medium',
});
}
// Vérifier le format du nom selon le niveau de rigueur
if (strictness === 'high') {
// Format recommandé: [Domaine]_[Action]_[Entité]
const namingPattern = /^[A-Z][a-z]+_[A-Za-z]+_[A-Za-z]+$/;
if (!namingPattern.test(workflow.name)) {
issues.push({
message: 'Le nom du workflow ne suit pas le format recommandé',
recommendation: 'Utilisez le format [Domaine]_[Action]_[Entité] (ex: Marketing_Send_Newsletter)',
severity: 'medium',
});
}
}
}
// Vérifier les noms des nœuds si le workflow contient des nœuds
if (workflow.nodes && Array.isArray(workflow.nodes)) {
workflow.nodes.forEach((node: any) => {
if (!node.name) {
issues.push({
message: `Un nœud de type ${node.type || 'inconnu'} n'a pas de nom`,
recommendation: 'Donnez un nom descriptif à chaque nœud',
severity: 'medium',
location: node.id,
});
} else if (node.name === node.type) {
// Le nœud a le même nom que son type (nom par défaut)
issues.push({
message: `Le nœud "${node.name}" utilise le nom par défaut`,
recommendation: 'Renommez le nœud pour décrire son rôle spécifique dans le workflow',
severity: 'low',
location: node.id,
});
}
// Pour les niveaux de rigueur medium et high, vérifier la longueur des noms
if (strictness !== 'low' && node.name && node.name.length < 3) {
issues.push({
message: `Le nom du nœud "${node.name}" est trop court`,
recommendation: 'Utilisez un nom plus descriptif (au moins 3 caractères)',
severity: 'low',
location: node.id,
});
}
});
}
return {
valid: issues.length === 0,
issues,
};
}
}
export default NamingValidator;