Prisma Class Validator Generator

6.2.0 · active · verified Wed Apr 22

The `prisma-class-validator-generator` is a utility that automates the creation of TypeScript data transfer objects (DTOs) directly from a Prisma schema, automatically decorating them with `class-validator` rules. This eliminates significant boilerplate for developers working with Prisma and `class-validator` for input validation. The package is currently stable at version `6.2.0`, following a relatively active release cadence with semantic versioning adopted since v6.1.0, indicating consistent development and maintenance. Key differentiators include its tight integration with Prisma, providing automatic mapping of Prisma types to appropriate validation decorators, ensuring type-safety, and offering a zero-configuration setup for immediate use. It supports modern Prisma versions, currently `Prisma 6.12+`, and is designed for Node.js 18+ environments with TypeScript 5.8+. This generator is crucial for projects aiming for robust backend validation without manually synchronizing schema changes with validation classes.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to configure the `prisma-class-validator-generator` in your Prisma schema, generate the TypeScript models, and then use `class-validator` along with `class-transformer` to validate data against the generated `User` class.

/* schema.prisma */
generator client {
  provider = "prisma-client"
  output   = "../generated/prisma-client"
}

generator class_validator {
  provider = "prisma-class-validator-generator"
  output   = "./generated"
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

model Post {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  title     String
  content   String?
  published Boolean  @default(false)
  viewCount Int      @default(0)
  author    User?    @relation(fields: [authorId], references: [id])
  authorId  Int?
  rating    Float
}

/* Usage in TypeScript file */
import { User } from './generated/models';
import { validate } from 'class-validator';
import { plainToClass } from 'class-transformer';

async function validateUser(userData: any) {
  const userInstance = plainToClass(User, userData);
  const errors = await validate(userInstance);

  if (errors.length > 0) {
    console.error('Validation failed:', errors);
    return false;
  } else {
    console.log('Validation successful!');
    return true;
  }
}

// Example usage:
validateUser({ email: 'test@example.com', name: 'John Doe' });
validateUser({ email: 'invalid-email', name: 123 }); // This should fail

// To run this, first ensure `prisma generate` has been executed:
// npx prisma generate

view raw JSON →