Transformers
A transformer is a provider class decorated with the @Transformer() decorator.
The class, though, must implement the TransformerHandler interface.
@Transformer()
export class TestTransformer implements TransformerHandler {
  transform(value: unknown): unknown | Promise<unknown> {
    return `Adding some text: ${value}`;
  }
}
Transformers can be applied to the following route parameters decorators:
@Param(key: string, transformer?: TransformerClass)@Query(key: string, transformer?: TransformerClass)@Header(key: string, transformer?: TransformerClass)@Body(transformer?: TransformerClass)
@Controller('/test')
export class TestController {
  
  @Get('/transformer')
  async transformer(@Query('testTransformer', TestTransformer) param: string) {
    return param;
  }
}
Validation
Transformers can also suite the role of validators and errors can be thrown from its.
@Transformer()
export class NumberTransform implements TransformerHandler {
  transform(value: unknown): unknown | Promise<unknown> {
    if (!isNumber(value)) {
      throw new BadRequestException({ error: { }, message: 'Not a number' })
    }
    
    return parseInt(value);
  }
}
Built-in transformers and validators
| Component | Type | Description | 
|---|---|---|
@ToString() | 
Transformer | It converts the received into string | 
@ToNumber() | 
Transformer, Validator | It checks if the value can be converted into a number and eventually converts it. It can throw a BadRequestException. | 
@ToBoolean() | 
Transformer, Validator | It checks if the value can be converted into a boolean (true, 1, false, 0) and eventually converts it. It can throw a BadRequestException. |