3.8.0 • Published 16 days ago

nestjs-swagger-dto v3.8.0

Weekly downloads
-
License
MIT
Repository
github
Last release
16 days ago

nestjs-swagger-dto

Deploy Coverage Status

Nest.js Swagger DTO decorators

This library combines common @nestjs/swagger, class-transformer and class-validator decorators that are used together into one decorator for full Nest.js DTO lifecycle including OpenAPI schema descriptions.

import { IsEnum, IsNested, IsString } from 'nestjs-swagger-dto';

class RoleDto {
  @IsString({
    optional: true,
    minLength: 3,
    maxLength: 256,
  })
  name?: string;

  @IsString({ optional: true, maxLength: 255 })
  description?: string;

  @IsEnum({ enum: { RoleStatus } })
  status!: RoleStatus;

  @IsNested({ type: PermissionDto, isArray: true })
  permissions!: PermissionDto[];
}
import { ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { IsOptional, IsString, MaxLength, MinLength, ValidateNested } from 'class-validator';

export class RoleDto {
  @IsOptional()
  @IsString()
  @MinLength(3)
  @MaxLength(256)
  name?: string;

  @IsOptional()
  @IsString()
  @MaxLength(256)
  description?: string;

  @ApiProperty({ enum: RoleStatus, enumName: 'RoleStatus' })
  status!: RoleStatus;

  @ValidateNested({ each: true })
  @Type(() => PermissionDto)
  @ApiProperty({ type: [PermissionDto] })
  permissions!: PermissionDto[];
}

Installation

npm i nestjs-swagger-dto

Contents

This library contains the following decorators

NameDescription
IsBooleanboolean
IsConstantconstant
IsDatedate / date-time
IsEnumenum object / array of values
IsNestednested DTO
IsNumbernumbers
IsObjecttyped plain js objects
IsStringstrings
IsUnknownany json value

All of the decorators support the following parameters:

NameDescription
descriptionadds description
deprecateddeprecates a field
exampleadds example
namesets the name for serialized property
optionalmakes property optional
nullablemakes property nullable
isArraychanges the type of property to array of items of this type

Also decorators have additional parameters like: min, max for IsNumber.

Headers validation

You can also validate request headers using TypedHeaders decorator.

export class TestHeaders {
  @IsString({
    // Note: header names will be lowercased automatically
    name: 'country-code',
    maxLength: 2,
    minLength: 2,
    example: 'US',
  })
  countryCode!: string;

  @IsString({
    name: 'timestamp',
    isDate: { format: 'date-time' },
  })
  timestamp!: string;
}

@Controller({ path: 'test', version: '1' })
export class TestController {
  @Get()
  async test(@TypedHeaders() headers: TestHeaders): Promise<string> {
    return headers.countryCode;
  }
}

Other

Bootstrapped with: create-ts-lib-gh

This project is Mit Licensed.

3.8.0

16 days ago

3.7.0

3 months ago

3.6.1

3 months ago

3.6.0

3 months ago

3.4.0

1 year ago

3.5.0

1 year ago

3.3.2

2 years ago

3.3.1

2 years ago

3.3.0

2 years ago

3.2.1

2 years ago

3.2.0

2 years ago

3.1.0

2 years ago

3.0.0

2 years ago

1.4.0

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

1.3.0

2 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago