{"id":26641651,"url":"https://github.com/omar-dulaimi/prisma-class-validator-generator","last_synced_at":"2025-09-07T21:40:45.346Z","repository":{"id":41193966,"uuid":"482551961","full_name":"omar-dulaimi/prisma-class-validator-generator","owner":"omar-dulaimi","description":"Prisma 2+ generator to emit typescript models of your database with class validator","archived":false,"fork":false,"pushed_at":"2025-09-02T23:39:58.000Z","size":231,"stargazers_count":82,"open_issues_count":0,"forks_count":15,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-03T01:08:26.619Z","etag":null,"topics":["class-validator","prisma","prisma-generator"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/omar-dulaimi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"omar-dulaimi"}},"created_at":"2022-04-17T14:53:27.000Z","updated_at":"2025-09-02T23:40:01.000Z","dependencies_parsed_at":"2024-06-18T22:42:43.035Z","dependency_job_id":"93709969-ba06-4e55-9644-b77acc2db929","html_url":"https://github.com/omar-dulaimi/prisma-class-validator-generator","commit_stats":{"total_commits":25,"total_committers":3,"mean_commits":8.333333333333334,"dds":"0.19999999999999996","last_synced_commit":"089392ee6d2efee227194397a21f34e29ae4fe82"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/omar-dulaimi/prisma-class-validator-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omar-dulaimi%2Fprisma-class-validator-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omar-dulaimi%2Fprisma-class-validator-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omar-dulaimi%2Fprisma-class-validator-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omar-dulaimi%2Fprisma-class-validator-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/omar-dulaimi","download_url":"https://codeload.github.com/omar-dulaimi/prisma-class-validator-generator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omar-dulaimi%2Fprisma-class-validator-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274101618,"owners_count":25222446,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["class-validator","prisma","prisma-generator"],"created_at":"2025-03-24T18:34:46.202Z","updated_at":"2025-09-07T21:40:45.327Z","avatar_url":"https://github.com/omar-dulaimi.png","language":"TypeScript","readme":"# Prisma Class Validator Generator\n\n[![NPM Version](https://img.shields.io/npm/v/prisma-class-validator-generator?style=for-the-badge\u0026logo=npm\u0026color=blue)](https://www.npmjs.com/package/prisma-class-validator-generator)\n[![NPM Downloads](https://img.shields.io/npm/dm/prisma-class-validator-generator?style=for-the-badge\u0026logo=npm\u0026color=green)](https://www.npmjs.com/package/prisma-class-validator-generator)\n[![GitHub Stars](https://img.shields.io/github/stars/omar-dulaimi/prisma-class-validator-generator?style=for-the-badge\u0026logo=github\u0026color=yellow)](https://github.com/omar-dulaimi/prisma-class-validator-generator/stargazers)\n[![License](https://img.shields.io/github/license/omar-dulaimi/prisma-class-validator-generator?style=for-the-badge\u0026color=purple)](https://github.com/omar-dulaimi/prisma-class-validator-generator/blob/master/LICENSE)\n[![Test Coverage](https://img.shields.io/badge/coverage-95%25-brightgreen?style=for-the-badge)](https://github.com/omar-dulaimi/prisma-class-validator-generator)\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3 align=\"center\"\u003e🏗️ Prisma Class Validator Generator\u003c/h3\u003e\n  \u003cp align=\"center\"\u003e\n    \u003cstrong\u003eAutomatically generate TypeScript class-validator models from your Prisma schema\u003c/strong\u003e\u003cbr\u003e\n    Create type-safe validation classes with decorators from your database models\n  \u003c/p\u003e\n  \n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"#-quick-start\"\u003eQuick Start\u003c/a\u003e •\n    \u003ca href=\"#-examples\"\u003eExamples\u003c/a\u003e •\n    \u003ca href=\"#-features\"\u003eFeatures\u003c/a\u003e •\n    \u003ca href=\"#-contributing\"\u003eContributing\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## 💖 Support This Project\n\nIf this tool helps you build better applications, please consider supporting its development:\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/sponsors/omar-dulaimi\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Sponsor-GitHub-ea4aaa?style=for-the-badge\u0026logo=github\" alt=\"GitHub Sponsors\" height=\"40\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nYour sponsorship helps maintain and improve this project. Thank you! 🙏\n\n\n## ✨ Features\n\n- 🏗️ **Auto-generation** - Automatically generates TypeScript models with class-validator decorators\n- 🔧 **Prisma 6 support** - Full compatibility with the latest Prisma features and types\n- 🎯 **Type safety** - Perfect TypeScript integration with proper type inference\n- 📝 **Smart decorators** - Intelligent mapping of Prisma types to class-validator decorators\n- 🔄 **Incremental updates** - Regenerates only when schema changes\n- 🚀 **Zero config** - Works out of the box with sensible defaults\n- 🛡️ **Production ready** - Battle-tested with comprehensive test coverage\n- 📦 **Lightweight** - Minimal dependencies and fast generation\n\n## 🚀 Quick Start\n\n### Installation\n\n```bash\n# npm\nnpm install prisma-class-validator-generator\n\n# yarn\nyarn add prisma-class-validator-generator\n\n# pnpm\npnpm add prisma-class-validator-generator\n```\n\n### Basic Setup\n\n1. Add the generator to your Prisma schema:\n\n```prisma\ngenerator class_validator {\n  provider = \"prisma-class-validator-generator\"\n  output   = \"./generated\"  // optional, defaults to ./generated\n}\n\nmodel User {\n  id    Int     @id @default(autoincrement())\n  email String  @unique\n  name  String?\n  posts Post[]\n}\n\nmodel Post {\n  id        Int      @id @default(autoincrement())\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n  title     String\n  content   String?\n  published Boolean  @default(false)\n  viewCount Int      @default(0)\n  author    User?    @relation(fields: [authorId], references: [id])\n  authorId  Int?\n  rating    Float\n}\n```\n\n2. Generate your models:\n\n```bash\nnpx prisma generate\n```\n\n3. Use the generated classes:\n\n```typescript\nimport { User } from './generated/models';\nimport { validate } from 'class-validator';\n\nconst user = new User();\nuser.id = 1;\nuser.email = 'user@example.com';\nuser.name = 'John Doe';\n\nconst errors = await validate(user);\nif (errors.length \u003e 0) {\n  console.log('Validation failed:', errors);\n} else {\n  console.log('User is valid!');\n}\n```\n\n\n## 🎯 Generated Output\n\nThe generator creates TypeScript classes with appropriate class-validator decorators:\n\n### User.model.ts\n```typescript\nimport { IsInt, IsDefined, IsString, IsOptional } from \"class-validator\";\nimport { Post } from \"./Post.model\";\n\nexport class User {\n    @IsDefined()\n    @IsInt()\n    id!: number;\n\n    @IsDefined()\n    @IsString()\n    email!: string;\n\n    @IsOptional()\n    @IsString()\n    name?: string | null;\n\n    @IsDefined()\n    posts!: Post[];\n}\n```\n\n### Post.model.ts\n```typescript\nimport { IsInt, IsDefined, IsDate, IsString, IsOptional, IsBoolean, IsNumber } from \"class-validator\";\nimport { User } from \"./User.model\";\n\nexport class Post {\n    @IsDefined()\n    @IsInt()\n    id!: number;\n\n    @IsDefined()\n    @IsDate()\n    createdAt!: Date;\n\n    @IsDefined()\n    @IsDate()\n    updatedAt!: Date;\n\n    @IsDefined()\n    @IsString()\n    title!: string;\n\n    @IsOptional()\n    @IsString()\n    content?: string | null;\n\n    @IsDefined()\n    @IsBoolean()\n    published!: boolean;\n\n    @IsDefined()\n    @IsInt()\n    viewCount!: number;\n\n    @IsOptional()\n    author?: User | null;\n\n    @IsOptional()\n    @IsInt()\n    authorId?: number | null;\n\n    @IsDefined()\n    @IsNumber()\n    rating!: number;\n}\n```\n\n## 🔧 Configuration Options\n\nCustomize the generator behavior:\n\n```prisma\ngenerator class_validator {\n  provider               = \"prisma-class-validator-generator\"\n  output                 = \"./src/models\"           // Output directory\n  swagger                = \"true\"                   // Add Swagger decorators\n  separateRelationFields = \"true\"                   // Split base/relation classes\n}\n```\n\n### Available Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `output` | `string` | `\"./generated\"` | Output directory for generated models |\n| `swagger` | `string` | `\"false\"` | Add NestJS `@ApiProperty` decorators for Swagger docs |\n| `separateRelationFields` | `string` | `\"false\"` | Generate separate base and relation classes for flexible DTOs |\n\n### Swagger Support (`swagger = \"true\"`)\n\nAutomatically generates NestJS Swagger decorators alongside class-validator decorators:\n\n```typescript\nexport class User {\n  @IsDefined()\n  @ApiProperty({ example: 'Generated by autoincrement', type: \"integer\" })\n  @IsInt()\n  id!: number;\n\n  @IsDefined()\n  @ApiProperty({ type: \"string\" })\n  @IsString()\n  email!: string;\n\n  @IsOptional()\n  @ApiProperty({ type: \"string\", required: false })\n  @IsString()\n  name?: string | null;\n}\n```\n\n### Relation Field Splitting (`separateRelationFields = \"true\"`)\n\nPerfect for NestJS DTOs - generates separate classes for maximum flexibility:\n\n- **`UserBase.model.ts`** - Only scalar fields with validation decorators\n- **`UserRelations.model.ts`** - Only relation fields  \n- **`User.model.ts`** - Combined class extending UserBase\n\nThis enables powerful NestJS patterns:\n```typescript\n// Create DTO without relations using PickType\nexport class CreateUserDto extends PickType(UserBase, ['email', 'name']) {}\n\n// Update DTO with partial fields\nexport class UpdateUserDto extends PartialType(UserBase) {}\n\n// Full model with relations for responses\nexport class UserResponseDto extends User {}\n```\n\n## 📚 Advanced Usage\n\n### Complex Schema Example\n\n```prisma\nenum Role {\n  USER\n  ADMIN\n  MODERATOR\n}\n\nmodel User {\n  id        String   @id @default(cuid())\n  email     String   @unique\n  name      String?\n  role      Role     @default(USER)\n  profile   Profile?\n  posts     Post[]\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}\n\nmodel Profile {\n  id     String @id @default(cuid())\n  bio    String?\n  avatar Bytes?\n  user   User   @relation(fields: [userId], references: [id])\n  userId String @unique\n}\n\nmodel Post {\n  id        String    @id @default(cuid())\n  title     String\n  content   String?\n  published Boolean   @default(false)\n  tags      String[]\n  metadata  Json?\n  author    User      @relation(fields: [authorId], references: [id])\n  authorId  String\n  createdAt DateTime  @default(now())\n  updatedAt DateTime  @updatedAt\n}\n```\n\n### Generated Enum\n\n```typescript\nexport enum Role {\n  USER = \"USER\",\n  ADMIN = \"ADMIN\",\n  MODERATOR = \"MODERATOR\",\n}\n```\n\n### Generated Models with Advanced Types\n\n```typescript\nimport { IsString, IsDefined, IsEmail, IsOptional, IsEnum, IsDate } from \"class-validator\";\nimport { Role } from \"../enums\";\nimport { Profile } from \"./Profile.model\";\nimport { Post } from \"./Post.model\";\n\nexport class User {\n    @IsDefined()\n    @IsString()\n    id!: string;\n\n    @IsDefined()\n    @IsEmail()\n    email!: string;\n\n    @IsOptional()\n    @IsString()\n    name?: string | null;\n\n    @IsDefined()\n    @IsEnum(Role)\n    role!: Role;\n\n    @IsOptional()\n    profile?: Profile | null;\n\n    @IsDefined()\n    posts!: Post[];\n\n    @IsDefined()\n    @IsDate()\n    createdAt!: Date;\n\n    @IsDefined()\n    @IsDate()\n    updatedAt!: Date;\n}\n```\n\n## 🧪 Testing\n\nThe generator includes comprehensive tests covering:\n\n- Basic model generation\n- Complex schemas with relations\n- Enum generation\n- Edge cases and error handling\n- TypeScript compilation\n\nRun tests:\n\n```bash\nnpm test           # Run tests in watch mode\nnpm run test:ci    # Run tests once with coverage\nnpm run test:coverage  # Generate coverage report\n```\n\n## 🔍 Type Mapping\n\nThe generator intelligently maps Prisma types to class-validator decorators:\n\n| Prisma Type | TypeScript Type | Class Validator Decorator |\n|-------------|-----------------|---------------------------|\n| `String` | `string` | `@IsString()` |\n| `Int` | `number` | `@IsInt()` |\n| `Float` | `number` | `@IsNumber()` |\n| `Boolean` | `boolean` | `@IsBoolean()` |\n| `DateTime` | `Date` | `@IsDate()` |\n| `Bytes` | `Uint8Array` | `@IsDefined()` |\n| `Json` | `any` | `@IsDefined()` |\n| `String[]` | `string[]` | `@IsArray()` |\n| `Enum` | `EnumType` | `@IsEnum(EnumType)` |\n| Optional fields | `type \\| null` | `@IsOptional()` |\n| Required fields | `type` | `@IsDefined()` |\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n```bash\ngit clone https://github.com/omar-dulaimi/prisma-class-validator-generator.git\ncd prisma-class-validator-generator\nnpm install\nnpm run build\nnpm test\n```\n\n### Common Development Commands\n\n```bash\nnpm run build         # Compile TypeScript\nnpm run start         # Build and run Prisma generate\nnpm test              # Run tests in watch mode\nnpm run test:ci       # Run tests with coverage\nnpm run format        # Format code with Prettier\n```\n\n## 📖 API Reference\n\n### Generator Configuration\n\nThe generator accepts the following configuration in your `schema.prisma`:\n\n```prisma\ngenerator class_validator {\n  provider = \"prisma-class-validator-generator\"\n  output   = \"./generated\"    // Optional: output directory\n}\n```\n\n### Generated File Structure\n\n```\ngenerated/\n├── models/\n│   ├── User.model.ts\n│   ├── Post.model.ts\n│   └── index.ts\n├── enums/\n│   ├── Role.ts\n│   └── index.ts\n└── index.ts\n```\n\n## 🐛 Troubleshooting\n\n### Common Issues\n\n1. **Generator not found**: Ensure you've installed the package as a dependency\n2. **Output directory errors**: Check that the parent directory exists\n3. **Import errors**: Make sure class-validator is installed in your project\n\n### Debug Mode\n\nEnable debug logging by setting the `DEBUG` environment variable:\n\n```bash\nDEBUG=prisma:generator npx prisma generate\n```\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- Built for the amazing [Prisma](https://prisma.io) ecosystem\n- Powered by [class-validator](https://github.com/typestack/class-validator) for robust validation\n- Uses [ts-morph](https://github.com/dsherret/ts-morph) for TypeScript AST manipulation\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003eMade with ❤️ by \u003cstrong\u003eOmar Dulaimi\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/omar-dulaimi/prisma-class-validator-generator/stargazers\"\u003e⭐ Star us on GitHub\u003c/a\u003e •\n    \u003ca href=\"https://github.com/omar-dulaimi/prisma-class-validator-generator/issues\"\u003e🐛 Report Issues\u003c/a\u003e •\n    \u003ca href=\"https://github.com/omar-dulaimi/prisma-class-validator-generator/discussions\"\u003e💬 Discussions\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e","funding_links":["https://github.com/sponsors/omar-dulaimi"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomar-dulaimi%2Fprisma-class-validator-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomar-dulaimi%2Fprisma-class-validator-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomar-dulaimi%2Fprisma-class-validator-generator/lists"}