@saashub/conform-class-validator
TypeScript icon, indicating that this package has built-in type declarations

0.2.0 • Public • Published

@saashub/conform-class-validator

GitHub Actions Workflow Status codecov NPM Version NPM Type Definitions NPM Unpacked Size NPM License

Rationale

Add on to Conform that adds supports class-validator models. Created on top of discussion.

Enjoy.

Install

npm install @saashub/conform-class-validator

Usage

Defining validation classes

Define your validation class like in the classical class-validator model.

export class ExampleModel {
  constructor(init: ExampleModel) {
    this.foo = init.foo;
    this.bar = init.bar;
  }

  @Length(1, 5)
  foo: string;

  @IsNotEmpty()
  bar: string;
}

The only thing you need to make sure of is that the constructor accepts your model object and not a list of properties:

✅ Do:

constructor(init:ExampleModel, ...)
{
  this.foo = init.foo;
  this.bar = init.bar;
}

❌ Don't:

constructor(foo:string, bar:string) {
  this.foo = foo;
  this.bar = bar;
}

Casting

FormData is always a Record<string,string>. This results in the need for casting in order to use non-string class-validator validations.

For Example:

❌ Won't work

class CastingModel {
 constructor(init:ExampleModel) {
     this.foo = init.foo;
 }
 
 @IsInt()
 foo:string
 
}

If we do not cast the entry FormData foo will always be a string meaning that it will never pass the @IsInt() validation.

✅ Will work:

class CastingModel {
 constructor(init:ExampleModel) {
  this.foo = Number(init.foo);
 }

 @IsInt()
 foo:number

}

Be careful when casting, any error in the constructor will be rethrown by the library as a ModelCreationError.

Implementing Form validation

You can use it just like the Zod and Yup Conform validators:

import { parseWithClassValidator } from "@saashub/conform-class-validator";

import { useForm } from "@conform-to/react";

function Example() {
  const [form, fields] = useForm({
    onValidate({ formData }) {
      return parseWithClassValidator(formData, { schema: ExampleModel });
    },
  });

  // ...
}

Parameters

Property Required Definition
payload true It could be either the FormData or URLSearchParams object depending on how the form is submitted.
schema true class-validator model
async false Set it to true if you want to parse the form data with validate method from the class-validator schema instead of validateSync.

Package Sidebar

Install

npm i @saashub/conform-class-validator

Weekly Downloads

0

Version

0.2.0

License

MIT

Unpacked Size

11 kB

Total Files

7

Last publish

Collaborators

  • tacgnol
  • ladamczyk