nestjs-swagger-dto
Version:
Nestjs swagger dto decorators
146 lines (113 loc) • 3.96 kB
Markdown
# nestjs-swagger-dto
[](https://github.com/glebbash/nestjs-swagger-dto/actions)
[](https://coveralls.io/github/glebbash/nestjs-swagger-dto?branch=master)
## Nest.js Swagger DTO decorators
This library combines common `/swagger`, `class-transformer` and `class-validator` decorators that are used together into one decorator for full Nest.js DTO lifecycle including OpenAPI schema descriptions.
<table>
<tr>
<th>DTO with nestjs-swagger-dto</th>
<th>DTO without nestjs-swagger-dto</th>
</tr>
<tr>
<td>
```ts
import { IsEnum, IsNested, IsString } from 'nestjs-swagger-dto';
class RoleDto {
name?: string;
description?: string;
status!: RoleStatus;
permissions!: PermissionDto[];
}
```
</td>
<td>
```ts
import { ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { IsOptional, IsString, MaxLength, MinLength, ValidateNested } from 'class-validator';
export class RoleDto {
name?: string;
description?: string;
status!: RoleStatus;
permissions!: PermissionDto[];
}
```
</td>
</tr>
</table>
## Installation
```sh
npm i nestjs-swagger-dto
```
## Contents
This library contains the following decorators
| Name | Description |
| ---------- | ----------------------------- |
| IsBoolean | boolean |
| IsConstant | constant |
| IsDate | date / date-time |
| IsEnum | enum object / array of values |
| IsNested | nested DTO |
| IsNumber | numbers |
| IsObject | typed plain js objects |
| IsString | strings |
| IsUnknown | any json value |
All of the decorators support the following parameters:
| Name | Description |
| ----------- | ----------------------------------------------------------- |
| description | adds description |
| deprecated | deprecates a field |
| example | adds example |
| name | sets the name for serialized property |
| optional | makes property optional |
| nullable | makes property nullable |
| isArray | changes 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.
```ts
export class TestHeaders {
countryCode!: string;
timestamp!: string;
}
export class TestController {
async test( headers: TestHeaders): Promise<string> {
return headers.countryCode;
}
}
```
## Other
Bootstrapped with: [create-ts-lib-gh](https://github.com/glebbash/create-ts-lib-gh)
This project is [MIT Licensed](LICENSE).