Socket
Book a DemoInstallSign in
Socket

prisma-class-validator-generator

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

prisma-class-validator-generator

Prisma 2+ generator to emit typescript models of your database with class validator

6.1.0
latest
Source
npmnpm
Version published
Weekly downloads
1.3K
16.34%
Maintainers
1
Weekly downloads
ย 
Created
Source

Prisma Class Validator Generator

NPM Version NPM Downloads GitHub Stars License Test Coverage

๐Ÿ—๏ธ Prisma Class Validator Generator

Automatically generate TypeScript class-validator models from your Prisma schema
Create type-safe validation classes with decorators from your database models

Quick Start โ€ข Examples โ€ข Features โ€ข Contributing

๐Ÿ’– Support This Project

If this tool helps you build better applications, please consider supporting its development:

GitHub Sponsors

Your sponsorship helps maintain and improve this project. Thank you! ๐Ÿ™

โœจ Features

  • ๐Ÿ—๏ธ Auto-generation - Automatically generates TypeScript models with class-validator decorators
  • ๐Ÿ”ง Prisma 6 support - Full compatibility with the latest Prisma features and types
  • ๐ŸŽฏ Type safety - Perfect TypeScript integration with proper type inference
  • ๐Ÿ“ Smart decorators - Intelligent mapping of Prisma types to class-validator decorators
  • ๐Ÿ”„ Incremental updates - Regenerates only when schema changes
  • ๐Ÿš€ Zero config - Works out of the box with sensible defaults
  • ๐Ÿ›ก๏ธ Production ready - Battle-tested with comprehensive test coverage
  • ๐Ÿ“ฆ Lightweight - Minimal dependencies and fast generation

๐Ÿš€ Quick Start

Installation

# npm
npm install prisma-class-validator-generator

# yarn
yarn add prisma-class-validator-generator

# pnpm
pnpm add prisma-class-validator-generator

Basic Setup

  • Add the generator to your Prisma schema:
generator class_validator {
  provider = "prisma-class-validator-generator"
  output   = "./generated"  // optional, defaults to ./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
}
  • Generate your models:
npx prisma generate
  • Use the generated classes:
import { User } from './generated/models';
import { validate } from 'class-validator';

const user = new User();
user.id = 1;
user.email = 'user@example.com';
user.name = 'John Doe';

const errors = await validate(user);
if (errors.length > 0) {
  console.log('Validation failed:', errors);
} else {
  console.log('User is valid!');
}

๐ŸŽฏ Generated Output

The generator creates TypeScript classes with appropriate class-validator decorators:

User.model.ts

import { IsInt, IsDefined, IsString, IsOptional } from "class-validator";
import { Post } from "./Post.model";

export class User {
    @IsDefined()
    @IsInt()
    id!: number;

    @IsDefined()
    @IsString()
    email!: string;

    @IsOptional()
    @IsString()
    name?: string | null;

    @IsDefined()
    posts!: Post[];
}

Post.model.ts

import { IsInt, IsDefined, IsDate, IsString, IsOptional, IsBoolean, IsNumber } from "class-validator";
import { User } from "./User.model";

export class Post {
    @IsDefined()
    @IsInt()
    id!: number;

    @IsDefined()
    @IsDate()
    createdAt!: Date;

    @IsDefined()
    @IsDate()
    updatedAt!: Date;

    @IsDefined()
    @IsString()
    title!: string;

    @IsOptional()
    @IsString()
    content?: string | null;

    @IsDefined()
    @IsBoolean()
    published!: boolean;

    @IsDefined()
    @IsInt()
    viewCount!: number;

    @IsOptional()
    author?: User | null;

    @IsOptional()
    @IsInt()
    authorId?: number | null;

    @IsDefined()
    @IsNumber()
    rating!: number;
}

๐Ÿ”ง Configuration Options

Customize the generator behavior:

generator class_validator {
  provider               = "prisma-class-validator-generator"
  output                 = "./src/models"           // Output directory
  swagger                = "true"                   // Add Swagger decorators
  separateRelationFields = "true"                   // Split base/relation classes
}

Available Options

OptionTypeDefaultDescription
outputstring"./generated"Output directory for generated models
swaggerstring"false"Add NestJS @ApiProperty decorators for Swagger docs
separateRelationFieldsstring"false"Generate separate base and relation classes for flexible DTOs

Swagger Support (swagger = "true")

Automatically generates NestJS Swagger decorators alongside class-validator decorators:

export class User {
  @IsDefined()
  @ApiProperty({ example: 'Generated by autoincrement', type: "integer" })
  @IsInt()
  id!: number;

  @IsDefined()
  @ApiProperty({ type: "string" })
  @IsString()
  email!: string;

  @IsOptional()
  @ApiProperty({ type: "string", required: false })
  @IsString()
  name?: string | null;
}

Relation Field Splitting (separateRelationFields = "true")

Perfect for NestJS DTOs - generates separate classes for maximum flexibility:

  • UserBase.model.ts - Only scalar fields with validation decorators
  • UserRelations.model.ts - Only relation fields
  • User.model.ts - Combined class extending UserBase

This enables powerful NestJS patterns:

// Create DTO without relations using PickType
export class CreateUserDto extends PickType(UserBase, ['email', 'name']) {}

// Update DTO with partial fields
export class UpdateUserDto extends PartialType(UserBase) {}

// Full model with relations for responses
export class UserResponseDto extends User {}

๐Ÿ“š Advanced Usage

Complex Schema Example

enum Role {
  USER
  ADMIN
  MODERATOR
}

model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String?
  role      Role     @default(USER)
  profile   Profile?
  posts     Post[]
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model Profile {
  id     String @id @default(cuid())
  bio    String?
  avatar Bytes?
  user   User   @relation(fields: [userId], references: [id])
  userId String @unique
}

model Post {
  id        String    @id @default(cuid())
  title     String
  content   String?
  published Boolean   @default(false)
  tags      String[]
  metadata  Json?
  author    User      @relation(fields: [authorId], references: [id])
  authorId  String
  createdAt DateTime  @default(now())
  updatedAt DateTime  @updatedAt
}

Generated Enum

export enum Role {
  USER = "USER",
  ADMIN = "ADMIN",
  MODERATOR = "MODERATOR",
}

Generated Models with Advanced Types

import { IsString, IsDefined, IsEmail, IsOptional, IsEnum, IsDate } from "class-validator";
import { Role } from "../enums";
import { Profile } from "./Profile.model";
import { Post } from "./Post.model";

export class User {
    @IsDefined()
    @IsString()
    id!: string;

    @IsDefined()
    @IsEmail()
    email!: string;

    @IsOptional()
    @IsString()
    name?: string | null;

    @IsDefined()
    @IsEnum(Role)
    role!: Role;

    @IsOptional()
    profile?: Profile | null;

    @IsDefined()
    posts!: Post[];

    @IsDefined()
    @IsDate()
    createdAt!: Date;

    @IsDefined()
    @IsDate()
    updatedAt!: Date;
}

๐Ÿงช Testing

The generator includes comprehensive tests covering:

  • Basic model generation
  • Complex schemas with relations
  • Enum generation
  • Edge cases and error handling
  • TypeScript compilation

Run tests:

npm test           # Run tests in watch mode
npm run test:ci    # Run tests once with coverage
npm run test:coverage  # Generate coverage report

๐Ÿ” Type Mapping

The generator intelligently maps Prisma types to class-validator decorators:

Prisma TypeTypeScript TypeClass Validator Decorator
Stringstring@IsString()
Intnumber@IsInt()
Floatnumber@IsNumber()
Booleanboolean@IsBoolean()
DateTimeDate@IsDate()
BytesUint8Array@IsDefined()
Jsonany@IsDefined()
String[]string[]@IsArray()
EnumEnumType@IsEnum(EnumType)
Optional fieldstype | null@IsOptional()
Required fieldstype@IsDefined()

๐Ÿค Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

git clone https://github.com/omar-dulaimi/prisma-class-validator-generator.git
cd prisma-class-validator-generator
npm install
npm run build
npm test

Common Development Commands

npm run build         # Compile TypeScript
npm run start         # Build and run Prisma generate
npm test              # Run tests in watch mode
npm run test:ci       # Run tests with coverage
npm run format        # Format code with Prettier

๐Ÿ“– API Reference

Generator Configuration

The generator accepts the following configuration in your schema.prisma:

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

Generated File Structure

generated/
โ”œโ”€โ”€ models/
โ”‚   โ”œโ”€โ”€ User.model.ts
โ”‚   โ”œโ”€โ”€ Post.model.ts
โ”‚   โ””โ”€โ”€ index.ts
โ”œโ”€โ”€ enums/
โ”‚   โ”œโ”€โ”€ Role.ts
โ”‚   โ””โ”€โ”€ index.ts
โ””โ”€โ”€ index.ts

๐Ÿ› Troubleshooting

Common Issues

  • Generator not found: Ensure you've installed the package as a dependency
  • Output directory errors: Check that the parent directory exists
  • Import errors: Make sure class-validator is installed in your project

Debug Mode

Enable debug logging by setting the DEBUG environment variable:

DEBUG=prisma:generator npx prisma generate

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

Made with โค๏ธ by Omar Dulaimi

โญ Star us on GitHub โ€ข ๐Ÿ› Report Issues โ€ข ๐Ÿ’ฌ Discussions

Keywords

prisma

FAQs

Package last updated on 02 Sep 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with โšก๏ธ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.