DocfyUiModule.setup(mountPath, app, options?)
Serve o docfy-ui (a UI de documentação AI-first companion desse pacote) no mountPath, o mesmo papel que SwaggerModule.setup() + swagger-ui-express fazem para o Swagger UI cru.
Uso
Funciona tanto com Express (@nestjs/platform-express) quanto com Fastify (@nestjs/platform-fastify). No Fastify, a distribuição dos assets estáticos exige a dependência peer opcional @fastify/static (npm install @fastify/static) — o mesmo pacote que o próprio @nestjs/swagger usa para suportar o Swagger UI no Fastify.
import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { DocfyUiModule } from 'nestjs-docfy';
const app = await NestFactory.create(AppModule);
DocfyUiModule.setup('/docs', app); // before SwaggerModule.setup; see staticSpecPath below
const document = SwaggerModule.createDocument(app, new DocumentBuilder().build());
SwaggerModule.setup('api', app, document); // exposes /api-json, which docfy-ui fetches by default
await app.listen(3000);Visite /docs: nenhuma configuração adicional necessária, já que docfy-ui busca /api-json same-origin por default.
Options
| Option | Type | Default | Description |
|---|---|---|---|
staticSpecPath | string | nenhum | Path to a pre-built OpenAPI JSON file, served at /api-json instead of the app's live one. |
staticSpecPath (obrigatório se sua app builda com webpack: true)
O pipeline de metadata em runtime do DocfyModule não consegue aplicar docs files lá, então o /api-json ao vivo vai ficar sem tudo que docs files adicionariam. Gere um documento com patch antes:
npx nestjs-docfy patch-spec --spec http://localhost:3000/api-json --out openapi.patched.jsonE sirva ele:
DocfyUiModule.setup('/docs', app, { staticSpecPath: './openapi.patched.json' });Chame isso antes de SwaggerModule.setup(): o Express resolve rotas em ordem de registro, então o documento estático com patch tem precedência sobre o vivo para qualquer request a /api-json. No Fastify, o SwaggerModule.setup() registrar sua própria rota /api-json junto com essa opção causa FST_ERR_DUPLICATED_ROUTE no startup — ordem de registro não ajuda nesse caso, então aponte o SwaggerModule.setup() para outro jsonDocumentUrl (ou passe { raw: false }) ao combinar com staticSpecPath no Fastify.
Caveat: BrowserRouter e mount path
docfy-ui renderiza com BrowserRouter do React Router e sem basename configurável por ora, então rotas client-side profundas (por exemplo, dar refresh na página de detalhe de um endpoint diretamente) só resolvem corretamente quando mountPath é / (a raiz da aplicação). Montar em outro lugar (por exemplo, /docs) ainda serve a UI e o initial load funciona; navegação in-app para um endpoint específico e depois refresh dessa URL ainda não funciona em um mount path não-root.