Generate complete Rockets SDK CRUD modules with TypeORM entities, NestJS modules, controllers, services, DTOs, and interfaces. Use when creating new entities, domain objects, or junction tables for many-to-many relationships.
Rockets SDK CRUD Generator
Generate complete CRUD modules following Rockets SDK patterns with TypeORM, NestJS, and proper DTOs/interfaces.
Quick Start
node crud-generator/scripts/generate.js '{
"entityName": "Category",
"fields": [
{ "name": "name", "type": "string", "required": true, "maxLength": 100 }
]
}'
Configuration
interface Config {
// Required
entityName: string; // PascalCase entity name
// Optional naming
pluralName?: string; // API path plural (auto-pluralized)
tableName?: string; // Database table (snake_case)
// Output paths (configurable per project)
paths?: {
entity?: string; // Default: "src/entities"
module?: string; // Default: "src/modules"
shared?: string; // Default: "src/shared" (set to null to skip)
};
// Shared package import path for generated code
sharedPackage?: string; // e.g., "@my-org/shared" (default: relative import)
// Fields & Relations
fields: FieldConfig[];
relations?: RelationConfig[];
// Operations (default: all)
operations?: ('readMany' | 'readOne' | 'createOne' | 'updateOne' | 'deleteOne' | 'recoverOne')[];
// Options
generateModelService?: boolean;
isJunction?: boolean;
}
Field Configuration
interface FieldConfig {
name: string;
type: 'string' | 'text' | 'number' | 'float' | 'boolean' | 'date' | 'uuid' | 'json' | 'enum';
required?: boolean; // Default: true
unique?: boolean;
maxLength?: number;
minLength?: number;
min?: number;
max?: number;
precision?: number; // For float
scale?: number; // For float
default?: any;
enumValues?: string[]; // Required for enum type
apiDescription?: string;
apiExample?: any;
creatable?: boolean; // Include in CreateDto (default: true)
updatable?: boolean; // Include in UpdateDto (default: true)
}
Relation Configuration
interface RelationConfig {
name: string;
type: 'manyToOne' | 'oneToMany' | 'oneToOne';
targetEntity: string;
foreignKey?: string; // Default: targetCamelId
joinType?: 'LEFT' | 'INNER';
onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
nullable?: boolean;
}
Examples
Basic Entity
{
"entityName": "Tag",
"fields": [
{ "name": "name", "type": "string", "required": true, "maxLength": 50, "unique": true },
{ "name": "color", "type": "string", "maxLength": 7, "apiExample": "#FF5733" }
]
}
With Custom Paths (monorepo)
{
"entityName": "Product",
"paths": {
"entity": "apps/api/src/entities",
"module": "apps/api/src/modules",
"shared": "packages/shared/src"
},
"fields": [
{ "name": "name", "type": "string", "required": true },
{ "name": "price", "type": "float", "precision": 10, "scale": 2 }
]
}
Junction Table
{
"entityName": "ProductTag",
"tableName": "product_tag",
"isJunction": true,
"fields": [],
"relations": [
{ "name": "product", "type": "manyToOne", "targetEntity": "Product", "onDelete": "CASCADE" },
{ "name": "tag", "type": "manyToOne", "targetEntity": "Tag", "onDelete": "CASCADE" }
],
"operations": ["readMany", "readOne", "createOne", "deleteOne"]
}
Skip Shared Package
{
"entityName": "InternalLog",
"paths": {
"shared": null
},
"fields": [
{ "name": "message", "type": "text" }
]
}
Generated Files
For entity Category with default paths:
src/
├── entities/
│ └── category.entity.ts
├── modules/category/
│ ├── constants/category.constants.ts
│ ├── category.module.ts
│ ├── category.crud.controller.ts
│ ├── category.crud.service.ts
│ ├── category-typeorm-crud.adapter.ts
│ └── category-access-query.service.ts
└── shared/category/ (if paths.shared is set)
├── dtos/
│ ├── category.dto.ts
│ ├── category-create.dto.ts
│ ├── category-update.dto.ts
│ └── category-paginated.dto.ts
├── interfaces/
│ ├── category.interface.ts
│ ├── category-creatable.interface.ts
│ └── category-updatable.interface.ts
└── index.ts
Post-Generation
- Export entity from entities index
- Import module in app.module.ts
- Add ACL resource (if using access control)
- Export from shared index (if using shared package)
You Might Also Like
Related Skills

coding-agent
Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.
openclaw
add-uint-support
Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.
pytorch
at-dispatch-v2
Convert PyTorch AT_DISPATCH macros to AT_DISPATCH_V2 format in ATen C++ code. Use when porting AT_DISPATCH_ALL_TYPES_AND*, AT_DISPATCH_FLOATING_TYPES*, or other dispatch macros to the new v2 API. For ATen kernel files, CUDA kernels, and native operator implementations.
pytorch
skill-writer
Guide users through creating Agent Skills for Claude Code. Use when the user wants to create, write, author, or design a new Skill, or needs help with SKILL.md files, frontmatter, or skill structure.
pytorch
implementing-jsc-classes-cpp
Implements JavaScript classes in C++ using JavaScriptCore. Use when creating new JS classes with C++ bindings, prototypes, or constructors.
oven-sh
implementing-jsc-classes-zig
Creates JavaScript classes using Bun's Zig bindings generator (.classes.ts). Use when implementing new JS APIs in Zig with JSC integration.
oven-sh