Hoe het werkt

Geen monkey-patching, geen runtime proxies: gewoon de juiste timing en Reflect-metadata.

De pijplijn

DocfyModule.forRoot() draait synchroon tijdens de NestFactory.create()-fase, vóórdat SwaggerModule.createDocument() aangeroepen wordt. Het gebruikt require() om elk companion-docsbestand te laden, wat docs() uitvoert en Reflect-metadata rechtstreeks op de methoden van de controller schrijft, precies zoals TypeScripts decoratorsyntax dat zou doen op het moment dat de klasse gedefinieerd wordt.

Tegen de tijd dat SwaggerModule.createDocument() naar metadata scant, staat alles al klaar. Geen monkey-patching, geen runtime proxies.

Timing

Cruciaal timinginzicht

onModuleInit en andere lifecycle-hooks vuren af nadat SwaggerModule.createDocument() al aangeroepen is in main.ts. Elke aanpak gebaseerd op onModuleInit zou lege Swagger-documentatie opleveren. Daarom vermijdt nestjs-docfy dat pad en gebruikt het een synchrone require() binnen forRoot(), die draait tijdens NestFactory.create(), vóór elke lifecycle-hook of SwaggerModule-aanroep.

CLI: statische analyse

De generate-CLI gebruikt ts-morph voor statische analyse: het leest de TypeScript-AST zonder projectcode uit te voeren. Alle door de gebruiker opgegeven paden en glob-patronen worden vóór gebruik gevalideerd en gesaneerd.