Wyobraź sobie, że w cesarskiej kancelarii masz skrybę, który automatycznie dokumentuje każdy dekret na podstawie jego treści - nie musisz mu mówić, co ma zapisać, sam rozumie strukturę dokumentu. Dokładnie tak działa CLI Plugin
@nestjs/swagger.Bez CLI Plugin musisz ręcznie dodawać
@ApiProperty() do każdego pola w każdym DTO:1// Bez CLI Plugin - dużo powtarzalnego kodu
2export class CreateLegionaryDto {
3 @ApiProperty({ description: 'Imię legionisty' })
4 name: string;
5
6 @ApiProperty({ description: 'Ranga', required: false })
7 rank?: string;
8
9 @ApiProperty({ description: 'Doświadczenie' })
10 experience: number;
11
12 @ApiProperty({ description: 'Czy aktywny' })
13 isActive: boolean;
14}CLI Plugin analizuje typy TypeScript i automatycznie generuje metadane Swagger. Wystarczy prosta klasa:
1// Z CLI Plugin - czysty kod, automatyczna dokumentacja
2export class CreateLegionaryDto {
3 /** Imię legionisty */
4 name: string;
5
6 /** Ranga w legionie */
7 rank?: string;
8
9 /** Lata doświadczenia */
10 experience: number;
11
12 /** Czy legionista jest aktywny */
13 isActive: boolean;
14}Plugin automatycznie:
string, number, boolean)? jako opcjonalne@ApiProperty() w czasie kompilacjiAby włączyć CLI Plugin, dodaj odpowiednią konfigurację w pliku
nest-cli.json:1{
2 "collection": "@nestjs/schematics",
3 "sourceRoot": "src",
4 "compilerOptions": {
5 "deleteOutDir": true,
6 "plugins": [
7 {
8 "name": "@nestjs/swagger",
9 "options": {
10 "classValidatorShim": true,
11 "introspectComments": true,
12 "dtoFileNameSuffix": [".dto.ts", ".entity.ts"]
13 }
14 }
15 ]
16 }
17}| Opcja | Opis | Domyślna | |-------|------|----------| |
classValidatorShim | Automatycznie dodaje reguły walidacji z class-validator | true |
| introspectComments | Używa komentarzy JSDoc jako opisów | false |
| dtoFileNameSuffix | Jakie pliki analizować | ['.dto.ts', '.entity.ts'] |
| controllerFileNameSuffix | Sufiks plików kontrolerów | '.controller.ts' |
| controllerKeyOfComment | Klucz komentarza dla kontrolerów | 'description' |Gdy
introspectComments jest włączone, komentarze JSDoc stają się opisami w Swagger:1export class LegionDto {
2 /**
3 * Unikalna nazwa legionu w Imperium
4 * @example 'Legio X Gemina'
5 */
6 name: string;
7
8 /**
9 * Prowincja stacjonowania
10 * @example 'Pannonia'
11 */
12 province: string;
13
14 /**
15 * Liczba żołnierzy w legionie
16 * @example 5000
17 */
18 soldiers: number;
19}Tag
@example automatycznie generuje przykładową wartość w Swagger UI.Gdy
classValidatorShim jest włączony, dekoratory class-validator wpływają na dokumentację Swagger:1import { IsString, IsNumber, IsOptional, Min, Max, IsEnum } from 'class-validator';
2
3export class CreateLegionaryDto {
4 /** Imię legionisty */
5 @IsString()
6 name: string;
7
8 /** Ranga w legionie */
9 @IsEnum(LegionaryRank)
10 @IsOptional()
11 rank?: LegionaryRank;
12
13 /** Lata doświadczenia */
14 @IsNumber()
15 @Min(0)
16 @Max(40)
17 experience: number;
18}Plugin automatycznie:
@IsOptional() oznacza pole jako required: false@IsEnum() generuje listę dozwolonych wartości@Min() / @Max() ustawia minimum / maximum@IsString() potwierdza typ stringCLI Plugin nie zastępuje wszystkich przypadków użycia
@ApiProperty(). Nadal potrzebujesz go dla:type: () => AddressDto)type: [LegionaryDto])Skonfiguruj CLI Plugin i stwórz DTO z komentarzami JSDoc: