From 376e82570f8d2440359877fa5cba1debde0ae7b3 Mon Sep 17 00:00:00 2001 From: syoul Date: Tue, 9 Dec 2025 11:17:04 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20correction=20duplication=20navigation=20?= =?UTF-8?q?-=20d=C3=A9tection=20et=20suppression=20des=20doublons=20struct?= =?UTF-8?q?urels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Script Python amélioré pour détecter et supprimer les doublons de composant Navigation - Vérifications post-modification dans le script shell (fonctions, nav, ul, logo, export) - Vérification post-build pour détecter les doublons dans le HTML généré - Détection automatique des composants Navigation dupliqués - Arrêt du build si duplication détectée Le script détecte maintenant : - Duplication du composant Navigation (plusieurs fonctions) - Duplication structurelle (nav, ul, logo) - Duplication dans le HTML généré (headers/nav) Toutes les vérifications s'exécutent automatiquement lors du build Docker. --- Dockerfile.business | 132 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 131 insertions(+), 1 deletion(-) diff --git a/Dockerfile.business b/Dockerfile.business index 9048c4b..77d8381 100644 --- a/Dockerfile.business +++ b/Dockerfile.business @@ -136,6 +136,64 @@ try: with open(f, 'r', encoding='utf-8') as file: content = file.read() + # VÉRIFICATION PRÉLIMINAIRE: Détecter les doublons structurels + print("🔍 Vérification de la structure du composant...") + + # Compter les éléments structurels + nav_patterns = [ + r']*>', content)) + + # Compter les logos (Image avec logo ou logoFile) + logo_patterns = [ + r'logoFile', + r'logo\.svg', + r'[Ll]ogo', + r'Image.*logo' + ] + logo_count = sum(len(re.findall(pattern, content)) for pattern in logo_patterns) + + # Compter les fonctions Navigation + function_count = len(re.findall(r'(export\s+(default\s+)?function\s+Navigation|const\s+Navigation\s*=\s*\(|function\s+Navigation\s*\()', content)) + + print(f"📊 Structure détectée: {nav_count} nav, {ul_count} ul, {logo_count} logo, {function_count} fonction(s)") + + # Détecter les duplications structurelles + if function_count > 1: + print(f"⚠️ ATTENTION: {function_count} fonction(s) Navigation détectée(s) - possible duplication du composant", file=sys.stderr) + # Extraire uniquement la première fonction Navigation + matches = list(re.finditer(r'(export\s+(default\s+)?function\s+Navigation|const\s+Navigation\s*=\s*\(|function\s+Navigation\s*\()', content)) + if len(matches) > 1: + # Garder seulement jusqu'à la fin de la première fonction + first_end = matches[1].start() if len(matches) > 1 else len(content) + content = content[:first_end] + # Trouver la fin de la fonction (dernière accolade fermante avant la prochaine fonction) + brace_count = 0 + in_function = False + for i, char in enumerate(content[matches[0].start():], matches[0].start()): + if char == '{': + brace_count += 1 + in_function = True + elif char == '}': + brace_count -= 1 + if in_function and brace_count == 0: + content = content[:i+1] + break + print(f"✅ Duplication du composant supprimée") + + if ul_count > 3: # Plus de 3 ul suggère une duplication + print(f"⚠️ ATTENTION: {ul_count} éléments