MichalLytek / class-transformer-validator

A simple plugin for class-transformer and class-validator which combines them in a nice and programmer-friendly API.
MIT License
200 stars 19 forks source link

Error when validate nested Object #26

Closed zgababa closed 4 years ago

zgababa commented 4 years ago

Hello,

I have this code :

import 'reflect-metadata'

import { IsDate, ValidateNested, validate } from 'class-validator'
import { Type, plainToClass } from 'class-transformer'
import { transformAndValidate } from 'class-transformer-validator'

export class User {
  @Type(() => Date)
  @IsDate()
  availabilityDate?: Date
}

export class Parent {
  @ValidateNested()
  @Type(() => User)
  user?: User
}

const body = {
  user: {
    availabilityDate: new Date().toISOString(),
  },
}
const classTransformer = plainToClass(Parent, body) as any

console.log(
  'Typeof',
  Object.prototype.toString.call(classTransformer.user.availabilityDate) === '[object Date]'
) // true

validate(classTransformer).then((errors) => {
  console.log(errors) // []
})

transformAndValidate(User, body)
  .then((resultValidator: any) => {
    // Don't pass here
    console.log(
      Object.prototype.toString.call(resultValidator.user.availabilityDate) === '[object Date]'
    ) // Should be true
  })
  .catch((err) => {
    console.log(err) // -> constraints: { isDate: 'availabilityDate must be a Date instance' }
  })

As you can see, validate don't returns errors but transformAndValidate do. Did I miss something ?

Thanks

MichalLytek commented 4 years ago

@zgababa Why do you have plainToClass(Parent, body) and transformAndValidate(User, body)?

Shouldn't it be transformAndValidate(Parent, body)? At least then it works for me 🤔

MichalLytek commented 4 years ago

Closing for a housekeeping purposes 🔒