@dhoniaridho/prisma-nestjs-generator
v1.0.3
Published
CLI to generate NestJS feature modules from Prisma models
Maintainers
Readme
🧰 NestJS Feature Generator
A CLI tool to scaffold fully structured NestJS feature modules from your Prisma models — including DTOs, controllers, services, repositories, and more. Automatically wires your module into main.module.ts and supports Prisma @api annotations.
✨ Features
- Auto-generates:
- Controllers (HTTP & Messaging)
- Services
- DTOs
- Repositories
- Feature Module
- Index exports
- Auto-detects related Prisma models
- Auto-wires to
main.module.ts(optional) - Smart DTO field generation based on
// @apicomments - Autocomplete prompt for model selection
- Custom output path support
🚀 Getting Started
1. Install
npm install -g @dhoniaridho/prisma-nestjs-generatorOr locally in your project:
pnpm add -D @dhoniaridho/prisma-nestjs-generator2. Prepare Your Prisma Model
To include fields in the generated DTOs, annotate them with // @api:
model User {
id String @id @default(uuid())
email String @unique // @api
name String? // @api
password String
createdAt DateTime @default(now())
}Only fields with // @api will be included in the generated DTOs.
3. Run the Generator
npx pngenYou'll be prompted to:
- Enter your feature name
- Select a Prisma model
- (Optional) Specify the destination path (default:
src/app/your-feature)
The generator will:
- Create full boilerplate structure
- Extract
@ApiProperty()fields from your Prisma model - Offer to wire the module into
main.module.ts - Optionally run
pnpm db:generate
📝 Output Structure
Given a User model and feature name account, the generated output will look like:
src/app/accounts/
├── controllers/
│ ├── http/
│ │ ├── accounts.controller.ts
│ │ └── accounts.controller.spec.ts
│ └── messaging/
│ └── accounts.controller.ts
├── services/
│ ├── accounts.service.ts
│ └── index.ts
├── repositories/
│ ├── accounts.repository.ts
│ └── index.ts
├── dtos/
│ ├── create-accounts.dto.ts
│ ├── update-accounts.dto.ts
│ └── index.ts
├── accounts.module.ts
├── index.ts🧠 DTO Annotation Guide
When generating DTOs, fields are added only if marked with // @api in schema.prisma.
Example
model Product {
id Int @id @default(autoincrement())
name String // @api
price Float // @api
stock Int?
}Will produce:
/**
* name
*/
@ApiProperty()
name: string;
/**
* price
*/
@ApiProperty()
price: number;Optional fields get { required: false } automatically:
/**
* stock
*/
@ApiProperty({ required: false })
stock?: number;🧩 Integration with NestJS
If you allow it, the generator can auto-import and register your module in src/main.module.ts:
import { AccountsModule } from "./app/accounts/accounts.module";
@Module({
imports: [AccountsModule],
})
export class MainModule {}🛠️ Requirements
- Node.js ≥ 18
- Prisma schema in
prisma/schema.prisma - Project using NestJS module structure
🧪 Development
To test locally:
pnpm link --global
pngen📦 Publishing
To publish to npm:
Update
package.json:{ "name": "@dhoniaridho/prisma-nestjs-generator", "bin": { "pngen": "./index.mjs" }, ... }Run:
npm publish --access public📎 License
MIT
Let me know if you want to generate this file as `README.md` directly in your project.