Jak to działa

Bez monkey-patchingu, bez proxy w runtime: wystarczy właściwy moment i metadane Reflect.

Pipeline

DocfyModule.forRoot() działa synchronicznie podczas fazy NestFactory.create(), zanim wywołane zostanie SwaggerModule.createDocument(). Używa require(), aby wczytać każdy towarzyszący plik docs, który wykonuje docs() i zapisuje metadane Reflect bezpośrednio na metodach kontrolera, dokładnie tak, jak zrobiłaby to składnia dekoratorów TypeScript w momencie definicji klasy.

Zanim SwaggerModule.createDocument() zeskanuje metadane, wszystko jest już na miejscu. Bez monkey-patchingu, bez proxy w runtime.

Czasowanie

Kluczowa obserwacja o czasowaniu

onModuleInit i inne hooki cyklu życia uruchamiają się już po tym, jak SwaggerModule.createDocument() zostało wywołane w main.ts. Każde podejście oparte na onModuleInit dałoby pustą dokumentację Swaggera. Dlatego nestjs-docfy unika tej ścieżki i używa synchronicznego require() wewnątrz forRoot(), które działa podczas NestFactory.create(), zanim jakikolwiek hook cyklu życia albo wywołanie SwaggerModule.

CLI: analiza statyczna

CLI generate używa ts-morph do analizy statycznej: czyta AST TypeScript bez wykonywania żadnego kodu projektu. Wszystkie ścieżki i wzorce glob podane przez użytkownika są walidowane i sanityzowane przed użyciem.