Back to blog
Package Generator (
Config Generator (
App Generator (

PEST.js uses a modular architecture with focused components for project generation.
Note:
The framework is built with shell scripts for simplicity and cross-platform compatibility.
Framework Structure
pest.js/
├── core/
│ ├── cli/main.sh # CLI interface
│ ├── generators/ # File generators
│ │ ├── package.sh # Package.json generator
│ │ ├── config.sh # Config files generator
│ │ └── app.sh # App file generator
│ └── utils/helpers.sh # Utility functions
└── pestjs # CLI entry point
CLI Interface
The main CLI (core/cli/main.sh
) handles:
- Environment validation
- User input collection
- Project structure creation
- File generation orchestration
- Git repository initialization
# CLI execution flow
./pestjs
├── validate_environment()
├── get_project_details()
├── create_structure()
├── generate_files()
└── init_git()
File Generators
core/generators/package.sh
)
Package Generator (Creates package.json
with minimal dependencies:
{
"dependencies": {
"express": "^4.18.2",
"cors": "^2.8.5",
"helmet": "^7.1.0",
"dotenv": "^16.4.1"
},
"devDependencies": {
"typescript": "^5.0.0",
"jest": "^29.7.0",
"eslint": "^8.56.0"
}
}
core/generators/config.sh
)
Config Generator (Generates essential configuration files:
tsconfig.json
- TypeScript configuration.eslintrc.json
- ESLint rules.gitignore
- Git ignore patterns.env
- Environment variables
core/generators/app.sh
)
App Generator (Creates the main Express application:
import express from 'express';
import cors from 'cors';
import helmet from 'helmet';
const app = express();
app.use(helmet());
app.use(cors());
app.use(express.json());
app.get('/', (_, res) => {
res.json({
message: 'Welcome to API',
version: '1.0.0'
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
Utility Functions
The core/utils/helpers.sh
provides:
- Print functions with colors
- Input validation
- File and directory operations
- Error handling
Design Decisions
Shell Scripts
- Cross-platform: Works on Linux, macOS, Windows (WSL)
- No dependencies: No Node.js required for framework itself
- Fast execution: Direct file system operations
- Simple maintenance: Easy to understand and modify
Modular Architecture
- Separation of concerns: Each generator has a single responsibility
- Reusability: Functions can be used across different generators
- Maintainability: Easy to add new generators or modify existing ones
Minimal Dependencies
- Express.js: Core web framework
- TypeScript: Type safety
- Jest: Testing
- ESLint: Code quality
- Essential packages only: No bloat or unnecessary dependencies
Generated Project Structure
your-project/
├── src/
│ ├── app.ts # Main application
│ ├── config/ # Configuration
│ ├── features/ # Feature modules
│ ├── middleware/ # Custom middleware
│ ├── utils/ # Utilities
│ └── types/ # TypeScript types
├── tests/ # Test files
├── package.json # Dependencies
├── tsconfig.json # TypeScript config
├── .eslintrc.json # ESLint config
└── .env # Environment variables
Technical Specifications
- Language: Bash shell scripts
- Runtime: Node.js (for generated projects)
- Framework: Express.js
- Type Safety: TypeScript
- Testing: Jest
- Linting: ESLint
- Package Manager: npm
Future Enhancements
- Database integration options
- Authentication templates
- Additional testing frameworks
- Deployment configurations
- Custom middleware templates