ajout patterns

This commit is contained in:
MaksTinyWorkshop
2026-03-12 17:16:05 +01:00
parent 39067b153a
commit 1ac757558b
6 changed files with 559 additions and 478 deletions

View File

@@ -93,3 +93,48 @@ Deux processus ont réécrit le même fichier sans coordination, le second
- éviter deux passes décriture concurrentes sur le même fichier
- relire le diff immédiatement après toute passe automatique
- privilégier une séquence stricte : édition, puis lint/format, puis vérification
---
## tsx + NestJS : injection par type cassée silencieusement
### Contexte
Projet `app-alexandrie`, Epic 3, le 10-03-2026.
Le backend NestJS tournait avec `tsx watch` dans un contexte ESM (`module: nodenext`), notamment pour rester compatible avec Prisma v7.
### Symptômes
- `TypeError: Cannot read properties of undefined (reading 'get')` dans le constructeur dun service
- `ConfigService` injecté par type mais `undefined` au runtime
- `@Injectable()` et `ConfigModule` correctement configurés, sans erreur de compilation
### Cause probable
`tsx` repose sur esbuild pour transpiler TypeScript.
Dans ce contexte, `emitDecoratorMetadata` est ignoré même sil est activé dans `tsconfig.json`.
NestJS ne peut donc plus résoudre correctement certaines injections par type, notamment `constructor(private readonly config: ConfigService)`.
### Correctif / règle à retenir
- ne pas supposer que `emitDecoratorMetadata` fonctionne avec `tsx`
- dans ce contexte, éviter linjection par type de `ConfigService` pour les services dinfra
- lire explicitement les variables via `process.env`, après chargement amont de `ConfigModule.forRoot()`
Exemple :
```typescript
// AVANT
constructor(private readonly config: ConfigService) {
const host = this.config.get('REDIS_HOST');
}
// APRES
constructor() {
const host = process.env['REDIS_HOST'] ?? 'localhost';
}
```
### Alternative écartée
`nest start --watch` a été testé mais a introduit des conflits ESM/CJS dans ce contexte (`exports is not defined`).