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