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
Markdown
# 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.