Come funziona
Nessun monkey-patching, nessun proxy a runtime: solo il timing giusto e i metadati Reflect.
La pipeline
DocfyModule.forRoot() viene eseguito in modo sincrono durante la fase NestFactory.create(), prima che venga chiamato SwaggerModule.createDocument(). Usa require() per caricare ogni file docs companion, il che esegue docs() e scrive metadati Reflect direttamente sui metodi del controller, esattamente come farebbe la sintassi dei decorator di TypeScript al momento della definizione della classe.
Quando SwaggerModule.createDocument() analizza i metadati, tutto è già al suo posto. Nessun monkey-patching, nessun proxy a runtime.
Timing
onModuleInit e gli altri hook del ciclo di vita vengono eseguiti dopo che SwaggerModule.createDocument() è già stato chiamato in main.ts. Qualsiasi approccio basato su onModuleInit produrrebbe una documentazione Swagger vuota. Per questo nestjs-docfy evita quella strada e usa un require() sincrono dentro forRoot(), che viene eseguito durante NestFactory.create(), prima di qualsiasi hook del ciclo di vita o chiamata a SwaggerModule.
CLI: analisi statica
La CLI di generate usa ts-morph per l'analisi statica: legge l'AST TypeScript senza eseguire alcun codice del progetto. Tutti i percorsi e i pattern glob forniti dall'utente vengono validati e sanificati prima dell'uso.