{"id":13847365,"url":"https://github.com/AnandChowdhary/prisma-class-validator","last_synced_at":"2025-07-12T08:31:40.574Z","repository":{"id":48089762,"uuid":"338547545","full_name":"AnandChowdhary/prisma-class-validator","owner":"AnandChowdhary","description":"💎 Generate class-validator types from a Prisma project","archived":true,"fork":false,"pushed_at":"2021-08-07T09:16:16.000Z","size":5113,"stargazers_count":3,"open_issues_count":16,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-08T21:54:43.262Z","etag":null,"topics":["class-transformer","class-validator","generator","prisma","prisma-client","typescript"],"latest_commit_sha":null,"homepage":"https://npmjs.com/package/prisma-class-validator","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/AnandChowdhary.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-02-13T10:19:08.000Z","updated_at":"2023-01-28T07:22:16.000Z","dependencies_parsed_at":"2022-08-12T18:20:50.630Z","dependency_job_id":null,"html_url":"https://github.com/AnandChowdhary/prisma-class-validator","commit_stats":null,"previous_names":["koj-co/prisma-class-validator"],"tags_count":5,"template":false,"template_full_name":"pabio/template","purl":"pkg:github/AnandChowdhary/prisma-class-validator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnandChowdhary%2Fprisma-class-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnandChowdhary%2Fprisma-class-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnandChowdhary%2Fprisma-class-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnandChowdhary%2Fprisma-class-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AnandChowdhary","download_url":"https://codeload.github.com/AnandChowdhary/prisma-class-validator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnandChowdhary%2Fprisma-class-validator/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264962255,"owners_count":23689769,"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","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-transformer","class-validator","generator","prisma","prisma-client","typescript"],"created_at":"2024-08-04T18:01:18.074Z","updated_at":"2025-07-12T08:31:40.221Z","avatar_url":"https://github.com/AnandChowdhary.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# 💎 Prisma Class Validator\n\nAutomatically generator `class-validator` schema from Prisma client projects.\n\n\u003c!-- prettier-ignore-start --\u003e\n|   | Status |\n| - | - |\n| Build | [![Node CI](https://github.com/koj-co/prisma-class-validator/workflows/Node%20CI/badge.svg)](https://github.com/koj-co/prisma-class-validator/actions?query=workflow%3A%22Node+CI%22) [![Dependencies](https://img.shields.io/librariesio/github/koj-co/prisma-class-validator)](https://libraries.io/github/koj-co/prisma-class-validator) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/koj-co/prisma-class-validator)](https://github.com/koj-co/prisma-class-validator/releases) [![Snyk Vulnerabilities for GitHub Repo](https://img.shields.io/snyk/vulnerabilities/github/koj-co/prisma-class-validator)](https://snyk.io/test/github/koj-co/prisma-class-validator) |\n| Health | [![License CI](https://github.com/koj-co/prisma-class-validator/workflows/License%20CI/badge.svg)](https://github.com/koj-co/prisma-class-validator/actions?query=workflow%3A%22License+CI%22) [![CLA Assistant](https://github.com/koj-co/prisma-class-validator/workflows/CLA%20Assistant/badge.svg)](https://github.com/koj-co/prisma-class-validator/actions?query=workflow%3A%22CLA+Assistant%22) [![Pull Request Labeler](https://github.com/koj-co/prisma-class-validator/workflows/Pull%20Request%20Labeler/badge.svg)](https://github.com/koj-co/prisma-class-validator/actions?query=workflow%3A%22Pull+Request+Labeler%22) |\n| PRs | [![PR Generator CI](https://github.com/koj-co/prisma-class-validator/workflows/PR%20Generator%20CI/badge.svg)](https://github.com/koj-co/prisma-class-validator/actions?query=workflow%3A%22PR+Generator+CI%22) [![Merge PRs](https://github.com/koj-co/prisma-class-validator/workflows/Merge%20PRs/badge.svg)](https://github.com/koj-co/prisma-class-validator/actions?query=workflow%3A%22Merge+PRs%22) |\n\u003c!-- prettier-ignore-end --\u003e\n\nAt Koj, we use this package to automatically generate [`@koj/types`](https://www.npmjs.com/package/@koj/types) from our Prisma schema.\n\n## ⭐️ Features\n\nThe `readAndGenerateClassValidator` method reads your generated Prisma client (after running `npx prisma generate`) and automatically generates a class-validator schema.\n\nFirst, install from npm:\n\n```bash\nnpm install --save-dev prisma-class-validator\n```\n\nUsage with TypeScript/Node.js:\n\n```ts\nimport { readAndGenerateClassValidator } from \"prisma-class-validator\";\nimport { writeFile } from \"fs/promises\";\n\n(async () =\u003e {\n  const schema = await readAndGenerateClassValidator();\n  await writeFile(\"validator.ts\", schema);\n})();\n```\n\nUsage with JavaScript/Node.js:\n\n```js\nconst { readAndGenerateClassValidator } = require(\"prisma-class-validator\");\nconst { writeFile } = require(\"fs/promises\");\n\n(async () =\u003e {\n  const schema = await readAndGenerateClassValidator();\n  await writeFile(\"validator.ts\", schema);\n})();\n```\n\n## 💻 Example\n\nThe `generateClassValidatorFromPrismaClient` method is used to take a string consisting of generated Prisma schema and converting it to class-validator. In this case, you are expected to read the generated Prisma schema `index.d.ts` file and supply that as the input.\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample input\u003c/summary\u003e\n\n```ts\ngenerateClassValidatorFromPrismaClient(`\n  /**\n   * Client\n  **/\n  \n  import * as runtime from '@prisma/client/runtime';\n  \n  \n  /**\n   * Model Lead\n   */\n  \n  export type Lead = {\n    browser: string | null\n    city: string | null\n    countryCode: string | null\n    createdAt: Date\n    email: string\n    id: number\n    name: string\n    operatingSystem: string | null\n    region: string | null\n    responses: Prisma.JsonValue | null\n    timezone: string | null\n    updatedAt: Date\n  }\n  \n  /**\n   * Model User\n   */\n  \n  export type User = {\n    active: boolean\n    attributes: Prisma.JsonValue | null\n    checkLocationOnLogin: boolean\n    countryCode: string\n    createdAt: Date\n    gender: Gender\n  }\n\n  /**\n   * Enums\n   */\n\n  // Based on\n  // https://github.com/microsoft/TypeScript/issues/3192#issuecomment-261720275\n\n  export const Gender: {\n    FEMALE: 'FEMALE',\n    MALE: 'MALE',\n    NONBINARY: 'NONBINARY',\n    UNKNOWN: 'UNKNOWN'\n  };\n\n  export type Gender = (typeof Gender)[keyof typeof Gender]\n`);\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eResulting output\u003c/summary\u003e\n\n```ts\n`/**\n * DO NOT EDIT THIS FILE MANUALLY\n * ==============================\n *\n * This file is automatically generated by Prisma Class Validator using @prisma/client\n * Source: https://github.com/koj-co/prisma-class-validator/blob/HEAD/scripts/generate-types.ts\n */\n\nimport {\n  IsOptional,\n  IsString,\n  IsNumber,\n  IsNotEmpty,\n  IsBoolean,\n  IsObject,\n  IsDateString,\n  IsIn,\n} from \"class-validator\";\n\n/**\n * Model Lead\n */\n\nexport class Lead {\n  @IsString()\n  @IsOptional()\n  browser?: string | null;\n\n  @IsString()\n  @IsOptional()\n  city?: string | null;\n\n  @IsString()\n  @IsOptional()\n  countryCode?: string | null;\n\n  @IsDateString()\n  @IsNotEmpty()\n  createdAt!: Date;\n\n  @IsString()\n  @IsNotEmpty()\n  email!: string;\n\n  @IsNumber()\n  @IsNotEmpty()\n  id!: number;\n\n  @IsString()\n  @IsNotEmpty()\n  name!: string;\n\n  @IsString()\n  @IsOptional()\n  operatingSystem?: string | null;\n\n  @IsString()\n  @IsOptional()\n  region?: string | null;\n\n  @IsObject()\n  @IsOptional()\n  responses?: any | null;\n\n  @IsString()\n  @IsOptional()\n  timezone?: string | null;\n\n  @IsDateString()\n  @IsNotEmpty()\n  updatedAt!: Date;\n}\n\n/**\n * Model User\n */\n\nexport class User {\n  @IsBoolean()\n  @IsNotEmpty()\n  active!: boolean;\n\n  @IsObject()\n  @IsOptional()\n  attributes?: any | null;\n\n  @IsBoolean()\n  @IsNotEmpty()\n  checkLocationOnLogin!: boolean;\n\n  @IsString()\n  @IsNotEmpty()\n  countryCode!: string;\n\n  @IsDateString()\n  @IsNotEmpty()\n  createdAt!: Date;\n  \n  @IsString()\n  @IsIn([\"FEMALE\", \"MALE\", \"NONBINARY\", \"UNKNOWN\"])\n  @IsNotEmpty()\n  gender!: Gender;\n}\n\n/**\n * Enums\n */\n\n// Based on\n// https://github.com/microsoft/TypeScript/issues/3192#issuecomment-261720275\n\nexport let Gender: {\n  FEMALE: \"FEMALE\";\n  MALE: \"MALE\";\n  NONBINARY: \"NONBINARY\";\n  UNKNOWN: \"UNKNOWN\";\n};\n\nexport type Gender = typeof Gender[keyof typeof Gender];`;\n```\n\n\u003c/details\u003e\n\n## 📄 License\n\n[MIT](./LICENSE) © [Koj](https://koj.co)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://koj.co\"\u003e\n    \u003cimg width=\"44\" alt=\"Koj\" src=\"https://kojcdn.com/v1598284251/website-v2/koj-github-footer_m089ze.svg\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eAn open source project by \u003ca href=\"https://koj.co\"\u003eKoj\u003c/a\u003e. \u003cbr\u003e \u003ca href=\"https://koj.co\"\u003eFurnish your home in style, for as low as CHF175/month →\u003c/a\u003e\u003c/sub\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAnandChowdhary%2Fprisma-class-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAnandChowdhary%2Fprisma-class-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAnandChowdhary%2Fprisma-class-validator/lists"}