v0.4.0 para @nestjs/swagger

Controllers limpos.
Swagger em outro arquivo.

nestjs-docfy separa a documentação Swagger/OpenAPI da lógica dos controllers usando um arquivo companheiro por convenção de nome, do mesmo jeito que o Nest já faz com *.controller.spec.ts.

Installation
npm install nestjs-docfy
# peer deps
npm install @nestjs/common @nestjs/swagger reflect-metadata
Companion file por convenção
users.controller.ts → users.controller.docs.ts. O mesmo padrão que o Nest já usa para *.controller.spec.ts.
CLI com CI gates
check, coverage --min, lint e patch-spec. Falhe o build quando faltar documentação.
Inferência automática de tipos
Interfaces, class-validator e @HttpCode() viram schema OpenAPI sem decorators extras.
docfy-ui AI-first
UI de referência com botão Copy for AI em cada endpoint, ideal para colar em LLMs.

Como fica na prática

Antes: um controller enterrado em decorators. Depois: apenas rotas, com a documentação vivendo ao lado, em um arquivo companheiro.

users.controller.ts
@WithDocs()
@Controller('users')
export class UsersController {
  constructor(private readonly users: UsersService) {}

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.users.findOne(id);
  }
}
users.controller.docs.ts
import { docs } from 'nestjs-docfy';
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
import { UsersController } from './users.controller';

docs(UsersController, {
  classDecorators: [ApiTags('users')],
  methods: {
    findOne: [
      ApiOperation({ summary: 'Get user by id' }),
      ApiResponse({ status: 200, description: 'OK', type: UserDto }),
      ApiResponse({ status: 404, description: 'User not found' }),
    ],
  },
});