Skip to content

Latest commit

 

History

History
186 lines (141 loc) · 6.21 KB

File metadata and controls

186 lines (141 loc) · 6.21 KB
Node Module Generator Banner

🚀 Node Module Generator (NMG)

The ultimate CLI companion for rapid, enterprise-grade Node.js scaffolding.

CI Status NPM Version NPM Downloads License


🏛️ Architecture Overview

Node Module Generator (NMG) enforces Clean Architecture principles to ensure your backend remains scalable, testable, and decoupled. It is purpose-built for high-performance Express.js environments using Awilix for Dependency Injection.

Layered Structure

graph TD
    UI[Interfaces Layer: Controllers & Routes] --> APP[Application Layer: Use Cases & DTOs]
    APP --> DOM[Domain Layer: Entities & Repository Interfaces]
    INF[Infrastructure Layer: Repository Impl & External Services] --> DOM
    
    subgraph "Inner Layers"
    DOM
    APP
    end
    
    subgraph "Outer Layers"
    UI
    INF
    end
Loading

🔥 Key Features

  • 💎 Clean Architecture by Design: Strict separation into Domain, Application, Infrastructure, and Interface layers.
  • 💉 Native Dependency Injection: Fully pre-configured for Awilix, providing seamless DI management.
  • 🧪 Test-Ready Scaffolding: Automatically generates Jest test suites for Controllers and Use Cases.
  • 🚀 Full ESM Support: Native support for ECMAScript Modules (ESM) with consistent camelCase file naming.
  • 🤖 Granular Control: Generate full modules or individual components (UseCases, Repos, DTOs) without disrupting existing code.

📦 Installation

Prerequisites

  • Node.js: v18.0.0 or higher (LTS recommended)
  • NPM, Yarn, or PNPM

Global Installation (Recommended)

Install NMG globally to access the command from any project.

npm install -g @saulpaulus17/node-module-generator

Direct Execution

Run it on-the-fly without a permanent installation:

npx @saulpaulus17/node-module-generator <command> <name>

🛠️ Target Project Dependencies

To ensure the modules generated by NMG function correctly, your main project must have the following core dependencies installed:

Production Dependencies

npm install express awilix @prisma/client

Development Dependencies

npm install --save-dev jest

Tip

These dependencies are essential because the generated code relies on Express for routing, Awilix for Dependency Injection, and Prisma for the data layer.


🚀 Detailed Usage

1. Generating a Full Module

Scaffolds a complete standard architecture with all 4 layers and initial unit tests.

nmg module Auth

2. Generating Individual Components

Quickly add specific components to an existing module structure.

# Add a new UseCase (e.g., login) to the Auth module
nmg usecase login --module=Auth

# Add a Repository Interface and Implementation (Prisma)
nmg repository User

# Add a DTO validation schema
nmg dto userRegistration --module=Auth

📂 Project Blueprint

Scaffolding a module (e.g., nmg module Product) produces the following industry-standard structure:

src/modules/Product/
├── application/                 
│   ├── dtos/                    # DTO schemas (e.g., productDto.js)
│   └── usecases/                # Business orchestration
│       ├── productUseCase.js  # Logic implementation
│       └── productUseCase.test.js # Unit tests
├── domain/                      
│   ├── entities/                # Business entity definitions
│   │   └── productEntity.js
│   └── repositories/            # Repository Interface (Contracts)
│       └── productRepository.js
├── infrastructure/              
│   ├── repositories/            # Implementation (default: Prisma)
│   │   └── prismaProductRepository.js
├── interfaces/                  
│   ├── controllers/             # Express handlers
│   │   ├── productController.js
│   │   └── productController.test.js
│   └── routes/                  # Express routes & method binding
│       └── productRoutes.js
└── product.module.js            # Central Awilix Module Registration

🛠️ Post-Scaffolding Integration

To finalize your new module integration, follow these standard steps:

  1. DI Registration: Open src/container.js and register any specific repository aliases or scoped usecases.
  2. Route Mounting: Mount the generated router in src/app.js:
    import productRoutes from './modules/Product/interfaces/routes/productRoutes.js';
    app.use('/api/v1/product', productRoutes);
  3. Detailed Implementation: Build out the specific logic in the generated templates (which are already integrated via Awilix).

🤝 Contributing & Support

We welcome contributions from the community!

  1. Fork the project.
  2. Create your Feature Branch (git checkout -b feat/NewFeature).
  3. Commit your changes (git commit -m 'feat: Add some NewFeature').
  4. Push to the Branch (git push origin feat/NewFeature).
  5. Open a Pull Request.

📝 License

Distributed under the MIT License. See LICENSE for more information.


Built with ❤️ for modern Node.js developers

Copyright © 2024 saul-paulus