A CLI tool to quickly scaffold clean code features with repository pattern, services, controllers, and more
npm install easyfeatA powerful CLI tool to quickly scaffold clean code features with repository pattern, services, controllers, and more for Node.js/TypeScript backend applications.
- šļø Clean Architecture: Generates features following clean code principles
- š¦ Repository Pattern: Built-in support for repository pattern with base interfaces
- šÆ TypeScript First: Fully typed code generation
- š Express.js Ready: Controllers and routes ready for Express.js
- šļø MongoDB/Mongoose: Pre-configured Mongoose models and mappers
- ā
Validation: Joi validation schemas included
- šØ Flexible: Choose between full or minimal feature scaffolding
- š Version Support: API versioning support out of the box
Install globally to use easyfeat command anywhere:
``bash`
npm install -g easyfeat
Then use it:
`bash`
easyfeat create user
easyfeat delete product
Install in your project:
`bash`
npm install --save-dev easyfeat
Then use with npx:
`bash`
npx easyfeat create user
Or add to your package.json scripts:
`json`
{
"scripts": {
"create-feature": "easyfeat create",
"delete-feature": "easyfeat delete"
}
}
Now you can run:
`bash`
npm run create-feature user
npm run delete-feature product
Use directly without installing:
`bash`
npx easyfeat create user
This downloads and runs the latest version temporarily.
---
`bash`
easyfeat create user
This creates a complete user feature with entity, repository, service, controller, routes, DTOs, validation, and more.
`bashFull feature (recommended)
easyfeat create user
$3
`bash
easyfeat delete user
or
easyfeat remove user
`$3
`bash
easyfeat --help
easyfeat create --help
easyfeat delete --help
`Generated Structure
$3
When you run
easyfeat create user, it generates:`
src/
āāā core/
ā āāā interfaces/
ā āāā base.repository.interface.ts
āāā features/
ā āāā user/
ā āāā entities/
ā ā āāā user.entity.ts
ā āāā interfaces/
ā ā āāā i-user.repository.ts
ā ā āāā i-user.service.ts
ā āāā repositories/
ā ā āāā user.repository.ts
ā āāā mappers/
ā ā āāā user.mapper.ts
ā āāā models/
ā ā āāā user.model.ts
ā āāā dtos/
ā ā āāā create-user.dto.ts
ā ā āāā update-user.dto.ts
ā āāā services/
ā ā āāā user.service.ts
ā āāā controllers/
ā ā āāā user.controller.ts
ā āāā routes/
ā ā āāā user.routes.ts
ā āāā validations/
ā āāā user.validation.ts
āāā routes/
āāā index.ts
āāā v1/
āāā index.ts
`$3
The
--minimal flag creates a basic structure with implementation stubs, giving you more control over the implementation.Examples
$3
`bash
Create a user management feature
easyfeat create userCreate an authentication feature with minimal setup
easyfeat create auth --minimalCreate a product feature for API v2
easyfeat create product --version v2
`$3
`bash
easyfeat create product
easyfeat create order
easyfeat create payment
easyfeat create cart
`$3
`bash
easyfeat create post
easyfeat create comment
easyfeat create category
`$3
`bash
Auth service
easyfeat create authentication
easyfeat create authorizationProduct service
easyfeat create product
easyfeat create inventoryOrder service
easyfeat create order
easyfeat create shipment
`Customization
After generating a feature, customize these files:
1. Entity (
entities/*.entity.ts) - Add your domain properties
2. Model (models/*.model.ts) - Define MongoDB schema
3. DTOs (dtos/*.dto.ts) - Add data transfer objects
4. Validation (validations/*.validation.ts) - Add validation rules
5. Service (services/*.service.ts) - Implement business logic
6. Controller (controllers/*.controller.ts) - Customize API handlers
7. Mapper (mappers/*.mapper.ts) - Update entity/model transformations$3
`typescript
export class User {
id!: string;
email!: string;
username!: string;
firstName!: string;
lastName!: string;
isActive!: boolean;
createdAt!: Date;
updatedAt!: Date; constructor(data: Partial) {
Object.assign(this, data);
}
get fullName(): string {
return
${this.firstName} ${this.lastName};
} toJSON() {
return {
id: this.id,
email: this.email,
username: this.username,
fullName: this.fullName,
isActive: this.isActive,
createdAt: this.createdAt,
updatedAt: this.updatedAt
};
}
}
`$3
`typescript
const UserSchema = new Schema({
email: { type: String, required: true, unique: true, lowercase: true },
username: { type: String, required: true, unique: true },
firstName: { type: String, required: true },
lastName: { type: String, required: true },
isActive: { type: Boolean, default: true }
}, { timestamps: true });
`Integration with Express
FeatForge automatically updates your route files. Just import and use in your app:
`typescript
import express from 'express';
import routes from './routes';const app = express();
app.use(express.json());
app.use('/api', routes);
app.listen(3000, () => {
console.log('Server running on port 3000');
});
``EasyFeat generates code following these principles:
1. Separation of Concerns - Each layer has a single responsibility
2. Dependency Inversion - Interfaces between layers
3. Repository Pattern - Data access abstraction
4. DTO Pattern - Data transfer objects for API boundaries
5. Mapper Pattern - Transform between domain and data models
6. Validation Layer - Input validation with Joi
- Node.js >= 14.0.0
- TypeScript project
- Express.js (for generated routes)
- Mongoose (for generated models)
- Joi (for generated validations)
Contributions are welcome! Please check out CONTRIBUTING.md for guidelines.
MIT Ā© Nitesh
If you encounter any issues or have questions, please file an issue on the GitHub repository.
---
Made with ā¤ļø by Nitesh