@custom-generators/simple-prisma-dto-gen
v1.0.8
Published
Prisma generator for NestJS DTOs, enums and service scaffolding
Downloads
759
Maintainers
Readme
Simple Prisma DTO Gen
Prisma generator focused on NestJS projects.
It generates:
- DTO classes for Prisma models
- Insert DTO classes
- Enum files
- A
DatabaseGenServicewith CRUD helpers - An optional
PrismaService - A
model.jsonfile with the Prisma DMMF
Scope
This package is not a generic Prisma code generator.
Current assumptions:
- DTOs import
@nestjs/swagger - The optional generated
PrismaServiceimports@nestjs/common - The optional generated
PrismaServiceuses@prisma/adapter-mariadb(or@prisma/adapter-postgresql) - The generated service layer is designed for NestJS-style usage
Because of that, the package fits best in NestJS + Prisma projects.
Generated Output
Given an output directory, the generator creates:
<output>/
dtos/
insert.dtos/
enums/
service/
database.gen.ts
prisma.service.ts # only when generatePrismaService = true
model.jsonInstallation
Install the generator and Prisma:
npm install --save-dev prisma @custom-generators/simple-prisma-dto-gen
npm install --save @prisma/client @nestjs/swaggerInstall these only if you want the generated PrismaService:
npm install --save @nestjs/common @prisma/adapter-mariadb mariadb dotenvor
npm install --save @nestjs/common @prisma/adapter-postgresql dotenvPrisma Schema Configuration
Example schema.prisma:
generator client {
provider = "prisma-client"
output = "../src/generated/prisma"
engineType = "library"
}
generator classGenerator {
provider = "npx simple-prisma-dto-gen"
output = "../src/gen.dto"
customPrismaClientImportPath = "src/generated/prisma/client"
generatePrismaService = true
activeField = "active"
}If you use Postgresql add :
databaseType = "postgresql"
Generator Options
output: target directory for generated filescustomPrismaClientImportPath: import path used in generated service filesgeneratePrismaService: whentrue, generatesservice/prisma.service.ts; whenfalse,DatabaseGenServicedepends directly onPrismaClientactiveField: when set, generatedfindOne*andfindMany*methods filter by this field set totrue, and generateddelete*methods perform soft delete by setting this field tofalse
If activeField is not configured, generated delete* methods call Prisma delete().
Usage
Initialize Prisma if needed:
npx prisma initConfigure your database connection, then introspect or maintain your schema as usual:
npx prisma db pullRun generators:
npx prisma generateThe provider value must be an executable command that Prisma can run. For this package, use the published bin command, not the npm package name. Using @custom-generators/simple-prisma-dto-gen directly will fail because Prisma tries to execute that exact string in the shell.
If you prefer, you can still use the explicit executable path as a fallback:
generator classGenerator {
provider = "node node_modules/@custom-generators/simple-prisma-dto-gen/dist/bin.js"
}NestJS Integration
If you generate PrismaService, load environment variables before the Nest app bootstraps:
import 'dotenv/config'Example wrapper service:
import { Injectable } from "@nestjs/common"
import { DatabaseGenService } from "./gen.dto/service/database.gen"
import { PrismaService } from "./gen.dto/service/prisma.service"
@Injectable()
export class DatabaseService extends DatabaseGenService {
constructor(prisma: PrismaService) {
super(prisma)
}
}Register services in your module:
providers: [DatabaseService, PrismaService]Example
For a Prisma model like:
model User {
id Int @id @default(autoincrement())
nome String
ativo Boolean @default(true)
}The generator will produce files similar to:
dtos/user.dto.tsinsert.dtos/user.insert.dto.tsservice/database.gen.ts
And DatabaseGenService will include methods like:
findOneUserfindManyUsercreateUserupdateUserdeleteUser
Limitations
- The generated DTOs are tailored to NestJS Swagger usage
- This package is intentionally opinionated and project-style driven
