UNPKG

ruch

Version:

Revolutionary React TypeScript CLI with hexagonal architecture & AI-powered development assistance. Create maintainable, scalable applications with domain-driven design and integrated AI tooling.

201 lines (146 loc) 5.68 kB
# Correction de la validation des noms de domaine ## Problème identifié L'utilisateur a signalé un problème critique : il était possible de créer des domaines avec des tirets (ex: `test-analytics`), ce qui casse la syntaxe TypeScript car les tirets ne sont pas autorisés dans les identifiants JavaScript/TypeScript. ## Impact du problème ### Erreurs de syntaxe générées : ```typescript // ❌ Code généré invalide avec tirets class MockTest-analyticsData { // Erreur de syntaxe // ... } export const mockTest-analyticsData; // Erreur de syntaxe export const test-analyticsHandlers; // Erreur de syntaxe ``` ### Problèmes dans l'analyse MSW : - Noms de variables invalides - Noms d'exports invalides - Imports cassés - Génération de code non-compilable ## Solution implémentée ### 1. Correction de la regex de validation **Avant :** ```typescript // ❌ Autorisait les tirets const validNamePattern = /^[a-zA-Z0-9_-]+$/; ``` **Après :** ```typescript // ✅ Seuls les identifiants TypeScript valides const validNamePattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/; ``` ### 2. Règles de validation strictes La nouvelle validation impose que les noms de domaine respectent les règles des identifiants TypeScript : -**Commencer par** : une lettre ou un underscore -**Contenir seulement** : lettres, chiffres, underscores -**Interdits** : tirets, espaces, caractères spéciaux, chiffres en début ### 3. Messages d'erreur informatifs **Avant :** ``` Domain name "test-analytics" is not valid. Use only letters, numbers, hyphens and underscores. ``` **Après :** ``` ❌ Invalid domain name: "test-analytics" 💡 Domain names must be valid TypeScript identifiers: - Start with a letter or underscore - Contain only letters, numbers, and underscores - No hyphens, spaces, or special characters 📝 Examples: "user", "userProfile", "user_profile", "orderManagement" ``` ## Fichiers modifiés ### 1. `src/utils/paths.ts` ```typescript export const validateDomainName = (name: string): boolean => { // Check that the name is a valid TypeScript identifier // Must start with letter or underscore, followed by letters, numbers, or underscores // No hyphens, spaces, or special characters allowed const validNamePattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/; return validNamePattern.test(name) && name.length > 0; }; ``` ### 2. `src/services/domain-factory.ts` ```typescript private validateDomainName(domainName: string): boolean { // Allow only valid TypeScript identifiers (no hyphens) const validNameRegex = /^[a-zA-Z_][a-zA-Z0-9_]*$/; return validNameRegex.test(domainName); } ``` ### 3. `src/utils/logging.ts` ```typescript export const logInvalidDomainName = ( logger: Logger, domainName: string ): void => { logError(logger, `❌ Invalid domain name: "${domainName}"`); logError(logger, '💡 Domain names must be valid TypeScript identifiers:'); logError(logger, ' - Start with a letter or underscore'); logError(logger, ' - Contain only letters, numbers, and underscores'); logError(logger, ' - No hyphens, spaces, or special characters'); logError( logger, '📝 Examples: "user", "userProfile", "user_profile", "orderManagement"' ); }; ``` ## Tests de validation ### ❌ Noms rejetés (comme attendu) ```bash ./dist/index.js create test-analytics # ❌ Tiret ./dist/index.js create "test with spaces" # ❌ Espaces ./dist/index.js create 123invalid # ❌ Commence par chiffre ./dist/index.js create test@invalid # ❌ Caractère spécial ``` ### ✅ Noms acceptés (fonctionnels) ```bash ./dist/index.js create user # ✅ Simple ./dist/index.js create userProfile # ✅ camelCase ./dist/index.js create user_profile # ✅ snake_case ./dist/index.js create orderManagement # ✅ camelCase long ./dist/index.js create _privateModule # ✅ Commence par underscore ``` ## Conventions recommandées Pour maintenir la cohérence dans les projets Ruch : ### 🎯 **camelCase (recommandé)** ```bash ruch create user ruch create userProfile ruch create orderManagement ruch create paymentGateway ``` ### 🎯 **snake_case (alternatif)** ```bash ruch create user_profile ruch create order_management ruch create payment_gateway ``` ### ❌ **À éviter** ```bash ruch create user-profile # ❌ Tirets interdits ruch create User # ❌ PascalCase (convention domaines = camelCase) ruch create user.profile # ❌ Points interdits ``` ## Impact sur l'analyse MSW dynamique Cette correction garantit que l'analyse dynamique génère du code TypeScript valide : ### ✅ Code généré valide ```typescript // Avec nom valide: userProfile class MockUserProfileData { // ✅ Identifiant valide // ... } export const mockUserProfileData; // ✅ Export valide export const userProfileHandlers; // ✅ Export valide ``` ### 🔄 Compatibilité -**Rétrocompatible** : Tous les domaines existants avec noms valides continuent de fonctionner -**Prévention** : Impossible de créer de nouveaux domaines avec noms invalides -**Cohérence** : Génération MSW toujours fonctionnelle ## Conclusion Cette correction critique résout le problème à la source en empêchant la création de domaines avec des noms incompatibles avec TypeScript. **Bénéfices :** - 🛡️ **Prévention** des erreurs de syntaxe TypeScript - 📝 **Code généré** toujours valide et compilable - 🎯 **Messages d'erreur** clairs et informatifs - 🔄 **Analyse MSW** robuste sans exceptions Les développeurs sont maintenant guidés vers des conventions de nommage saines dès la création du domaine.