nodejs-quickstart-structure 1.11.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +3 -3
  3. package/bin/index.js +2 -2
  4. package/docs/generateCase.md +245 -165
  5. package/lib/generator.js +8 -2
  6. package/lib/modules/app-setup.js +24 -0
  7. package/lib/modules/config-files.js +18 -1
  8. package/lib/modules/kafka-setup.js +2 -35
  9. package/package.json +1 -1
  10. package/templates/clean-architecture/js/src/errors/BadRequestError.js +1 -1
  11. package/templates/clean-architecture/js/src/errors/NotFoundError.js +1 -1
  12. package/templates/clean-architecture/js/src/index.js.ejs +2 -4
  13. package/templates/clean-architecture/js/src/infrastructure/config/env.js.ejs +47 -0
  14. package/templates/clean-architecture/js/src/infrastructure/webserver/middlewares/error.middleware.js +2 -1
  15. package/templates/clean-architecture/js/src/infrastructure/webserver/server.js.ejs +5 -2
  16. package/templates/clean-architecture/js/src/interfaces/graphql/resolvers/user.resolvers.js.ejs +4 -1
  17. package/templates/clean-architecture/ts/src/config/env.ts.ejs +46 -0
  18. package/templates/clean-architecture/ts/src/index.ts.ejs +9 -12
  19. package/templates/clean-architecture/ts/src/interfaces/graphql/resolvers/user.resolvers.ts.ejs +4 -1
  20. package/templates/clean-architecture/ts/src/utils/error.middleware.ts.ejs +2 -1
  21. package/templates/common/.env.example.ejs +3 -1
  22. package/templates/common/README.md.ejs +30 -0
  23. package/templates/common/database/js/mongoose.js.ejs +3 -1
  24. package/templates/common/database/ts/mongoose.ts.ejs +3 -1
  25. package/templates/common/docker-compose.yml.ejs +11 -1
  26. package/templates/common/ecosystem.config.js.ejs +40 -0
  27. package/templates/common/package.json.ejs +3 -1
  28. package/templates/mvc/js/src/config/env.js.ejs +46 -0
  29. package/templates/mvc/js/src/errors/BadRequestError.js +1 -1
  30. package/templates/mvc/js/src/errors/NotFoundError.js +1 -1
  31. package/templates/mvc/js/src/graphql/resolvers/user.resolvers.js.ejs +4 -1
  32. package/templates/mvc/js/src/index.js.ejs +2 -2
  33. package/templates/mvc/js/src/utils/error.middleware.js +2 -1
  34. package/templates/mvc/ts/src/config/env.ts.ejs +45 -0
  35. package/templates/mvc/ts/src/graphql/resolvers/user.resolvers.ts.ejs +4 -1
  36. package/templates/mvc/ts/src/index.ts.ejs +8 -12
  37. package/templates/mvc/ts/src/utils/error.middleware.ts.ejs +2 -1
  38. package/templates/clean-architecture/js/src/domain/repositories/UserRepository.js +0 -9
  39. /package/templates/clean-architecture/ts/src/infrastructure/repositories/{userRepository.ts.ejs → UserRepository.ts.ejs} +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.12.0] - 2026-03-04
9
+ ### Added
10
+ - **Zod Environment Validation:** Replaced manual `dotenv` process calls in server entry points with a centralized schema parser.
11
+ - Automatically generates `src/config/env.ts` (or `.js`) evaluating `NODE_ENV`, `PORT`, and strictly mapping database, cache, and Kafka connection definitions gracefully crashing the app at startup if missing.
12
+ - **PM2 Deployment Configuration:** Natively supports PM2 ecosystem clustering for VPS and EC2 configurations out-of-the-box.
13
+ - Generates `ecosystem.config.js` intelligently mapping dynamic environments for Redis, Databases, and Kafka without user prompts.
14
+ - Modifies `package.json` with an out-of-the-box `npm run deploy` script bound to `pm2 start ecosystem.config.js --env production`.
15
+ - Upgraded generated README deployment guides for transparent CLI instruction workflows outlining the contrast between running Docker vs PM2.
16
+
17
+ ## [1.11.1] - 2026-03-03
18
+ ### Fixed
19
+ - Fixed relative import paths in Clean Architecture JS `error.middleware.js` — changed to correct 3-level relative paths (`../../../`).
20
+
8
21
  ## [1.11.0] - 2026-03-02
9
22
  ### Added
10
23
  - **Centralized Error Handling Mechanism:** All generated projects now include a standardized, predictable error response structure for both REST APIs and GraphQL communication types.
package/README.md CHANGED
@@ -19,7 +19,7 @@ A powerful CLI tool to scaffold production-ready Node.js microservices with buil
19
19
  - **Database Integration**: Pre-configured setup for **MySQL**, **PostgreSQL**, or **MongoDB**.
20
20
  - **Communication Flow**: Scaffold APIs using **REST**, **GraphQL** (with Apollo Server), or **Kafka** (event-driven).
21
21
  - **Caching Layer**: Choose between **Redis** or built-in **Memory Cache** for data caching.
22
- - **Centralized Error Handling**: Every project ships with a global error handler, custom error classes (`ApiError`, `NotFoundError`, `BadRequestError`), and structured JSON error responses — consistent across REST & GraphQL.
22
+ - **Centralized Error Handling**: Every project ships with a global error handler, custom error classes and structured JSON error responses — consistent across REST & GraphQL.
23
23
  - **Dockerized**: Automatically generates `docker-compose.yml` for DB, Kafka, Redis, and Zookeeper.
24
24
  - **Database Migrations/Schemas**: Integrated **Flyway** for SQL migrations or **Mongoose** schemas for MongoDB.
25
25
  - **Professional Standards**: Generated projects come with highly professional, industry-standard tooling.
@@ -30,11 +30,12 @@ We don't just generate boilerplate; we generate **production-ready** foundations
30
30
 
31
31
  - **🔍 Code Quality**: Pre-configured `Eslint` and `Prettier` for consistent coding standards.
32
32
  - **🛡️ Security**: Built-in `Helmet`, `HPP`, `CORS`, and Rate-Limiting middleware.
33
- - **🚨 Error Handling**: Centralized global error middleware with custom error classes and structured `{ statusCode, message }` JSON responses. GraphQL uses Apollo's `formatError` hook; REST uses Express error middleware. Both integrate with Winston for automatic 500-level logging.
33
+ - **🚨 Error Handling**: Centralized global error middleware with custom error classes and structured JSON responses. GraphQL uses Apollo's `formatError` hook; REST uses Express error middleware.
34
34
  - **🧪 Testing Strategy**: Integrated `Jest` and `Supertest` setup for Unit and Integration testing.
35
35
  - **🔄 CI/CD Integration**: Pre-configured workflows for **GitHub Actions**, **Jenkins**, and **GitLab CI**.
36
36
  - **⚓ Git Hooks**: `Husky` and `Lint-Staged` to ensure no bad code is ever committed.
37
37
  - **🐳 DevOps**: Highly optimized **Multi-Stage Dockerfile** for small, secure production images.
38
+ - **🚀 Deployment**: Ship confidently with an integrated **PM2 Ecosystem Configuration** for zero-downtime reloads and robust process management.
38
39
 
39
40
  ## 🧩 240+ Project Combinations
40
41
 
@@ -92,7 +93,6 @@ The generated project will include:
92
93
 
93
94
  - `src/`: Source code (controllers, routes, services/use-cases).
94
95
  - `src/errors/`: Custom error classes — `ApiError`, `NotFoundError`, `BadRequestError`.
95
- - `src/utils/error.middleware.{ts|js}`: Global Express error handler (logs 500s, returns `{ statusCode, message }`).
96
96
  - `flyway/sql/`: SQL migration scripts (if SQL database selected).
97
97
  - `docker-compose.yml`: Services configuration for DB, Flyway, and Kafka.
98
98
  - `package.json`: Dependencies and scripts (`start`, `dev`, `build`).
package/bin/index.js CHANGED
@@ -52,7 +52,7 @@ program
52
52
 
53
53
  console.log(chalk.green('\n✔ Project generated successfully!'));
54
54
 
55
- let manualStartInstructions = `\nStart the app manually:\n cd ${answers.projectName}\n npm install`;
55
+ let manualStartInstructions = `\n${chalk.yellow('Development:')}\n cd ${answers.projectName}\n npm install`;
56
56
 
57
57
  const needsInfrastructure = answers.database !== 'None' || answers.caching === 'Redis' || answers.communication === 'Kafka';
58
58
 
@@ -67,7 +67,7 @@ program
67
67
  manualStartInstructions += `\n npm run dev`;
68
68
  }
69
69
 
70
- console.log(chalk.cyan(`\nNext steps:\n cd ${answers.projectName}\n npm install\n docker-compose up\n-----------------------${manualStartInstructions}`));
70
+ console.log(chalk.cyan(`\nNext steps:\n cd ${answers.projectName}\n npm install\n docker-compose up\n-----------------------${manualStartInstructions}\n\n${chalk.yellow('Production (PM2):')}\n npm run build\n npm run deploy\n npx pm2 logs`));
71
71
 
72
72
  } catch (error) {
73
73
  console.error(chalk.red('Error generating project:'), error);
@@ -1,185 +1,265 @@
1
1
  # NodeJS Quickstart Generator - Test Cases
2
2
 
3
- This document lists the **160 possible project combinations** supported by the `nodejs-quickstart` CLI. These combinations cover all supported languages, architectures, databases, communication patterns, and caching options.
3
+ This document lists the **240 possible project combinations** supported by the `nodejs-quickstart` CLI. These combinations cover all supported languages, architectures, databases, communication patterns, and caching options.
4
4
 
5
5
  ## Summary
6
6
  - **CI Providers**: `None`, `GitHub Actions`, `Jenkins`, `GitLab CI`
7
- - **MVC Architecture**: 120 Combinations
8
- - **Clean Architecture**: 40 Combinations
7
+ - **MVC Architecture**: 180 Combinations
8
+ - **Clean Architecture**: 60 Combinations
9
9
 
10
- **Total Core Combinations: 160**
10
+ **Total Core Combinations: 240**
11
11
 
12
12
  > **Note on CI/CD**: Each combination can be generated with or without CI/CD (`--ci-provider`), effectively doubling the state space.
13
13
 
14
14
  ---
15
15
 
16
- ## 1. MVC Architecture (120 Cases)
16
+ ## 1. MVC Architecture (180 Cases)
17
17
 
18
18
  | # | Language | Architecture | View Engine | Database | Communication | Caching |
19
19
  | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
20
20
  | 1 | TypeScript | MVC | EJS | None | REST APIs | None |
21
- | 2 | TypeScript | MVC | EJS | None | Kafka | None |
22
- | 3 | TypeScript | MVC | EJS | MySQL | REST APIs | None |
23
- | 4 | TypeScript | MVC | EJS | MySQL | REST APIs | Redis |
24
- | 5 | TypeScript | MVC | EJS | MySQL | REST APIs | Memory Cache |
25
- | 6 | TypeScript | MVC | EJS | MySQL | Kafka | None |
26
- | 7 | TypeScript | MVC | EJS | MySQL | Kafka | Redis |
27
- | 8 | TypeScript | MVC | EJS | MySQL | Kafka | Memory Cache |
28
- | 9 | TypeScript | MVC | EJS | PostgreSQL | REST APIs | None |
29
- | 10 | TypeScript | MVC | EJS | PostgreSQL | REST APIs | Redis |
30
- | 11 | TypeScript | MVC | EJS | PostgreSQL | REST APIs | Memory Cache |
31
- | 12 | TypeScript | MVC | EJS | PostgreSQL | Kafka | None |
32
- | 13 | TypeScript | MVC | EJS | PostgreSQL | Kafka | Redis |
33
- | 14 | TypeScript | MVC | EJS | PostgreSQL | Kafka | Memory Cache |
34
- | 15 | TypeScript | MVC | EJS | MongoDB | REST APIs | None |
35
- | 16 | TypeScript | MVC | EJS | MongoDB | REST APIs | Redis |
36
- | 17 | TypeScript | MVC | EJS | MongoDB | REST APIs | Memory Cache |
37
- | 18 | TypeScript | MVC | EJS | MongoDB | Kafka | None |
38
- | 19 | TypeScript | MVC | EJS | MongoDB | Kafka | Redis |
39
- | 20 | TypeScript | MVC | EJS | MongoDB | Kafka | Memory Cache |
40
- | 21 | TypeScript | MVC | Pug | None | REST APIs | None |
41
- | 22 | TypeScript | MVC | Pug | None | Kafka | None |
42
- | 23 | TypeScript | MVC | Pug | MySQL | REST APIs | None |
43
- | 24 | TypeScript | MVC | Pug | MySQL | REST APIs | Redis |
44
- | 25 | TypeScript | MVC | Pug | MySQL | REST APIs | Memory Cache |
45
- | 26 | TypeScript | MVC | Pug | MySQL | Kafka | None |
46
- | 27 | TypeScript | MVC | Pug | MySQL | Kafka | Redis |
47
- | 28 | TypeScript | MVC | Pug | MySQL | Kafka | Memory Cache |
48
- | 29 | TypeScript | MVC | Pug | PostgreSQL | REST APIs | None |
49
- | 30 | TypeScript | MVC | Pug | PostgreSQL | REST APIs | Redis |
50
- | 31 | TypeScript | MVC | Pug | PostgreSQL | REST APIs | Memory Cache |
51
- | 32 | TypeScript | MVC | Pug | PostgreSQL | Kafka | None |
52
- | 33 | TypeScript | MVC | Pug | PostgreSQL | Kafka | Redis |
53
- | 34 | TypeScript | MVC | Pug | PostgreSQL | Kafka | Memory Cache |
54
- | 35 | TypeScript | MVC | Pug | MongoDB | REST APIs | None |
55
- | 36 | TypeScript | MVC | Pug | MongoDB | REST APIs | Redis |
56
- | 37 | TypeScript | MVC | Pug | MongoDB | REST APIs | Memory Cache |
57
- | 38 | TypeScript | MVC | Pug | MongoDB | Kafka | None |
58
- | 39 | TypeScript | MVC | Pug | MongoDB | Kafka | Redis |
59
- | 40 | TypeScript | MVC | Pug | MongoDB | Kafka | Memory Cache |
60
- | 41 | TypeScript | MVC | None | None | REST APIs | None |
61
- | 42 | TypeScript | MVC | None | None | Kafka | None |
62
- | 43 | TypeScript | MVC | None | MySQL | REST APIs | None |
63
- | 44 | TypeScript | MVC | None | MySQL | REST APIs | Redis |
64
- | 45 | TypeScript | MVC | None | MySQL | REST APIs | Memory Cache |
65
- | 46 | TypeScript | MVC | None | MySQL | Kafka | None |
66
- | 47 | TypeScript | MVC | None | MySQL | Kafka | Redis |
67
- | 48 | TypeScript | MVC | None | MySQL | Kafka | Memory Cache |
68
- | 49 | TypeScript | MVC | None | PostgreSQL | REST APIs | None |
69
- | 50 | TypeScript | MVC | None | PostgreSQL | REST APIs | Redis |
70
- | 51 | TypeScript | MVC | None | PostgreSQL | REST APIs | Memory Cache |
71
- | 52 | TypeScript | MVC | None | PostgreSQL | Kafka | None |
72
- | 53 | TypeScript | MVC | None | PostgreSQL | Kafka | Redis |
73
- | 54 | TypeScript | MVC | None | PostgreSQL | Kafka | Memory Cache |
74
- | 55 | TypeScript | MVC | None | MongoDB | REST APIs | None |
75
- | 56 | TypeScript | MVC | None | MongoDB | REST APIs | Redis |
76
- | 57 | TypeScript | MVC | None | MongoDB | REST APIs | Memory Cache |
77
- | 58 | TypeScript | MVC | None | MongoDB | Kafka | None |
78
- | 59 | TypeScript | MVC | None | MongoDB | Kafka | Redis |
79
- | 60 | TypeScript | MVC | None | MongoDB | Kafka | Memory Cache |
80
- | 61 | JavaScript | MVC | EJS | None | REST APIs | None |
81
- | 62 | JavaScript | MVC | EJS | None | Kafka | None |
82
- | 63 | JavaScript | MVC | EJS | MySQL | REST APIs | None |
83
- | 64 | JavaScript | MVC | EJS | MySQL | REST APIs | Redis |
84
- | 65 | JavaScript | MVC | EJS | MySQL | REST APIs | Memory Cache |
85
- | 66 | JavaScript | MVC | EJS | MySQL | Kafka | None |
86
- | 67 | JavaScript | MVC | EJS | MySQL | Kafka | Redis |
87
- | 68 | JavaScript | MVC | EJS | MySQL | Kafka | Memory Cache |
88
- | 69 | JavaScript | MVC | EJS | PostgreSQL | REST APIs | None |
89
- | 70 | JavaScript | MVC | EJS | PostgreSQL | REST APIs | Redis |
90
- | 71 | JavaScript | MVC | EJS | PostgreSQL | REST APIs | Memory Cache |
91
- | 72 | JavaScript | MVC | EJS | PostgreSQL | Kafka | None |
92
- | 73 | JavaScript | MVC | EJS | PostgreSQL | Kafka | Redis |
93
- | 74 | JavaScript | MVC | EJS | PostgreSQL | Kafka | Memory Cache |
94
- | 75 | JavaScript | MVC | EJS | MongoDB | REST APIs | None |
95
- | 76 | JavaScript | MVC | EJS | MongoDB | REST APIs | Redis |
96
- | 77 | JavaScript | MVC | EJS | MongoDB | REST APIs | Memory Cache |
97
- | 78 | JavaScript | MVC | EJS | MongoDB | Kafka | None |
98
- | 79 | JavaScript | MVC | EJS | MongoDB | Kafka | Redis |
99
- | 80 | JavaScript | MVC | EJS | MongoDB | Kafka | Memory Cache |
100
- | 81 | JavaScript | MVC | Pug | None | REST APIs | None |
101
- | 82 | JavaScript | MVC | Pug | None | Kafka | None |
102
- | 83 | JavaScript | MVC | Pug | MySQL | REST APIs | None |
103
- | 84 | JavaScript | MVC | Pug | MySQL | REST APIs | Redis |
104
- | 85 | JavaScript | MVC | Pug | MySQL | REST APIs | Memory Cache |
105
- | 86 | JavaScript | MVC | Pug | MySQL | Kafka | None |
106
- | 87 | JavaScript | MVC | Pug | MySQL | Kafka | Redis |
107
- | 88 | JavaScript | MVC | Pug | MySQL | Kafka | Memory Cache |
108
- | 89 | JavaScript | MVC | Pug | PostgreSQL | REST APIs | None |
109
- | 90 | JavaScript | MVC | Pug | PostgreSQL | REST APIs | Redis |
110
- | 91 | JavaScript | MVC | Pug | PostgreSQL | REST APIs | Memory Cache |
111
- | 92 | JavaScript | MVC | Pug | PostgreSQL | Kafka | None |
112
- | 93 | JavaScript | MVC | Pug | PostgreSQL | Kafka | Redis |
113
- | 94 | JavaScript | MVC | Pug | PostgreSQL | Kafka | Memory Cache |
114
- | 95 | JavaScript | MVC | Pug | MongoDB | REST APIs | None |
115
- | 96 | JavaScript | MVC | Pug | MongoDB | REST APIs | Redis |
116
- | 97 | JavaScript | MVC | Pug | MongoDB | REST APIs | Memory Cache |
117
- | 98 | JavaScript | MVC | Pug | MongoDB | Kafka | None |
118
- | 99 | JavaScript | MVC | Pug | MongoDB | Kafka | Redis |
119
- | 100 | JavaScript | MVC | Pug | MongoDB | Kafka | Memory Cache |
120
- | 101 | JavaScript | MVC | None | None | REST APIs | None |
121
- | 102 | JavaScript | MVC | None | None | Kafka | None |
122
- | 103 | JavaScript | MVC | None | MySQL | REST APIs | None |
123
- | 104 | JavaScript | MVC | None | MySQL | REST APIs | Redis |
124
- | 105 | JavaScript | MVC | None | MySQL | REST APIs | Memory Cache |
125
- | 106 | JavaScript | MVC | None | MySQL | Kafka | None |
126
- | 107 | JavaScript | MVC | None | MySQL | Kafka | Redis |
127
- | 108 | JavaScript | MVC | None | MySQL | Kafka | Memory Cache |
128
- | 109 | JavaScript | MVC | None | PostgreSQL | REST APIs | None |
129
- | 110 | JavaScript | MVC | None | PostgreSQL | REST APIs | Redis |
130
- | 111 | JavaScript | MVC | None | PostgreSQL | REST APIs | Memory Cache |
131
- | 112 | JavaScript | MVC | None | PostgreSQL | Kafka | None |
132
- | 113 | JavaScript | MVC | None | PostgreSQL | Kafka | Redis |
133
- | 114 | JavaScript | MVC | None | PostgreSQL | Kafka | Memory Cache |
134
- | 115 | JavaScript | MVC | None | MongoDB | REST APIs | None |
135
- | 116 | JavaScript | MVC | None | MongoDB | REST APIs | Redis |
136
- | 117 | JavaScript | MVC | None | MongoDB | REST APIs | Memory Cache |
137
- | 118 | JavaScript | MVC | None | MongoDB | Kafka | None |
138
- | 119 | JavaScript | MVC | None | MongoDB | Kafka | Redis |
139
- | 120 | JavaScript | MVC | None | MongoDB | Kafka | Memory Cache |
21
+ | 2 | TypeScript | MVC | EJS | None | GraphQL | None |
22
+ | 3 | TypeScript | MVC | EJS | None | Kafka | None |
23
+ | 4 | TypeScript | MVC | EJS | MySQL | REST APIs | None |
24
+ | 5 | TypeScript | MVC | EJS | MySQL | REST APIs | Redis |
25
+ | 6 | TypeScript | MVC | EJS | MySQL | REST APIs | Memory Cache |
26
+ | 7 | TypeScript | MVC | EJS | MySQL | GraphQL | None |
27
+ | 8 | TypeScript | MVC | EJS | MySQL | GraphQL | Redis |
28
+ | 9 | TypeScript | MVC | EJS | MySQL | GraphQL | Memory Cache |
29
+ | 10 | TypeScript | MVC | EJS | MySQL | Kafka | None |
30
+ | 11 | TypeScript | MVC | EJS | MySQL | Kafka | Redis |
31
+ | 12 | TypeScript | MVC | EJS | MySQL | Kafka | Memory Cache |
32
+ | 13 | TypeScript | MVC | EJS | PostgreSQL | REST APIs | None |
33
+ | 14 | TypeScript | MVC | EJS | PostgreSQL | REST APIs | Redis |
34
+ | 15 | TypeScript | MVC | EJS | PostgreSQL | REST APIs | Memory Cache |
35
+ | 16 | TypeScript | MVC | EJS | PostgreSQL | GraphQL | None |
36
+ | 17 | TypeScript | MVC | EJS | PostgreSQL | GraphQL | Redis |
37
+ | 18 | TypeScript | MVC | EJS | PostgreSQL | GraphQL | Memory Cache |
38
+ | 19 | TypeScript | MVC | EJS | PostgreSQL | Kafka | None |
39
+ | 20 | TypeScript | MVC | EJS | PostgreSQL | Kafka | Redis |
40
+ | 21 | TypeScript | MVC | EJS | PostgreSQL | Kafka | Memory Cache |
41
+ | 22 | TypeScript | MVC | EJS | MongoDB | REST APIs | None |
42
+ | 23 | TypeScript | MVC | EJS | MongoDB | REST APIs | Redis |
43
+ | 24 | TypeScript | MVC | EJS | MongoDB | REST APIs | Memory Cache |
44
+ | 25 | TypeScript | MVC | EJS | MongoDB | GraphQL | None |
45
+ | 26 | TypeScript | MVC | EJS | MongoDB | GraphQL | Redis |
46
+ | 27 | TypeScript | MVC | EJS | MongoDB | GraphQL | Memory Cache |
47
+ | 28 | TypeScript | MVC | EJS | MongoDB | Kafka | None |
48
+ | 29 | TypeScript | MVC | EJS | MongoDB | Kafka | Redis |
49
+ | 30 | TypeScript | MVC | EJS | MongoDB | Kafka | Memory Cache |
50
+ | 31 | TypeScript | MVC | Pug | None | REST APIs | None |
51
+ | 32 | TypeScript | MVC | Pug | None | GraphQL | None |
52
+ | 33 | TypeScript | MVC | Pug | None | Kafka | None |
53
+ | 34 | TypeScript | MVC | Pug | MySQL | REST APIs | None |
54
+ | 35 | TypeScript | MVC | Pug | MySQL | REST APIs | Redis |
55
+ | 36 | TypeScript | MVC | Pug | MySQL | REST APIs | Memory Cache |
56
+ | 37 | TypeScript | MVC | Pug | MySQL | GraphQL | None |
57
+ | 38 | TypeScript | MVC | Pug | MySQL | GraphQL | Redis |
58
+ | 39 | TypeScript | MVC | Pug | MySQL | GraphQL | Memory Cache |
59
+ | 40 | TypeScript | MVC | Pug | MySQL | Kafka | None |
60
+ | 41 | TypeScript | MVC | Pug | MySQL | Kafka | Redis |
61
+ | 42 | TypeScript | MVC | Pug | MySQL | Kafka | Memory Cache |
62
+ | 43 | TypeScript | MVC | Pug | PostgreSQL | REST APIs | None |
63
+ | 44 | TypeScript | MVC | Pug | PostgreSQL | REST APIs | Redis |
64
+ | 45 | TypeScript | MVC | Pug | PostgreSQL | REST APIs | Memory Cache |
65
+ | 46 | TypeScript | MVC | Pug | PostgreSQL | GraphQL | None |
66
+ | 47 | TypeScript | MVC | Pug | PostgreSQL | GraphQL | Redis |
67
+ | 48 | TypeScript | MVC | Pug | PostgreSQL | GraphQL | Memory Cache |
68
+ | 49 | TypeScript | MVC | Pug | PostgreSQL | Kafka | None |
69
+ | 50 | TypeScript | MVC | Pug | PostgreSQL | Kafka | Redis |
70
+ | 51 | TypeScript | MVC | Pug | PostgreSQL | Kafka | Memory Cache |
71
+ | 52 | TypeScript | MVC | Pug | MongoDB | REST APIs | None |
72
+ | 53 | TypeScript | MVC | Pug | MongoDB | REST APIs | Redis |
73
+ | 54 | TypeScript | MVC | Pug | MongoDB | REST APIs | Memory Cache |
74
+ | 55 | TypeScript | MVC | Pug | MongoDB | GraphQL | None |
75
+ | 56 | TypeScript | MVC | Pug | MongoDB | GraphQL | Redis |
76
+ | 57 | TypeScript | MVC | Pug | MongoDB | GraphQL | Memory Cache |
77
+ | 58 | TypeScript | MVC | Pug | MongoDB | Kafka | None |
78
+ | 59 | TypeScript | MVC | Pug | MongoDB | Kafka | Redis |
79
+ | 60 | TypeScript | MVC | Pug | MongoDB | Kafka | Memory Cache |
80
+ | 61 | TypeScript | MVC | None | None | REST APIs | None |
81
+ | 62 | TypeScript | MVC | None | None | GraphQL | None |
82
+ | 63 | TypeScript | MVC | None | None | Kafka | None |
83
+ | 64 | TypeScript | MVC | None | MySQL | REST APIs | None |
84
+ | 65 | TypeScript | MVC | None | MySQL | REST APIs | Redis |
85
+ | 66 | TypeScript | MVC | None | MySQL | REST APIs | Memory Cache |
86
+ | 67 | TypeScript | MVC | None | MySQL | GraphQL | None |
87
+ | 68 | TypeScript | MVC | None | MySQL | GraphQL | Redis |
88
+ | 69 | TypeScript | MVC | None | MySQL | GraphQL | Memory Cache |
89
+ | 70 | TypeScript | MVC | None | MySQL | Kafka | None |
90
+ | 71 | TypeScript | MVC | None | MySQL | Kafka | Redis |
91
+ | 72 | TypeScript | MVC | None | MySQL | Kafka | Memory Cache |
92
+ | 73 | TypeScript | MVC | None | PostgreSQL | REST APIs | None |
93
+ | 74 | TypeScript | MVC | None | PostgreSQL | REST APIs | Redis |
94
+ | 75 | TypeScript | MVC | None | PostgreSQL | REST APIs | Memory Cache |
95
+ | 76 | TypeScript | MVC | None | PostgreSQL | GraphQL | None |
96
+ | 77 | TypeScript | MVC | None | PostgreSQL | GraphQL | Redis |
97
+ | 78 | TypeScript | MVC | None | PostgreSQL | GraphQL | Memory Cache |
98
+ | 79 | TypeScript | MVC | None | PostgreSQL | Kafka | None |
99
+ | 80 | TypeScript | MVC | None | PostgreSQL | Kafka | Redis |
100
+ | 81 | TypeScript | MVC | None | PostgreSQL | Kafka | Memory Cache |
101
+ | 82 | TypeScript | MVC | None | MongoDB | REST APIs | None |
102
+ | 83 | TypeScript | MVC | None | MongoDB | REST APIs | Redis |
103
+ | 84 | TypeScript | MVC | None | MongoDB | REST APIs | Memory Cache |
104
+ | 85 | TypeScript | MVC | None | MongoDB | GraphQL | None |
105
+ | 86 | TypeScript | MVC | None | MongoDB | GraphQL | Redis |
106
+ | 87 | TypeScript | MVC | None | MongoDB | GraphQL | Memory Cache |
107
+ | 88 | TypeScript | MVC | None | MongoDB | Kafka | None |
108
+ | 89 | TypeScript | MVC | None | MongoDB | Kafka | Redis |
109
+ | 90 | TypeScript | MVC | None | MongoDB | Kafka | Memory Cache |
110
+ | 91 | JavaScript | MVC | EJS | None | REST APIs | None |
111
+ | 92 | JavaScript | MVC | EJS | None | GraphQL | None |
112
+ | 93 | JavaScript | MVC | EJS | None | Kafka | None |
113
+ | 94 | JavaScript | MVC | EJS | MySQL | REST APIs | None |
114
+ | 95 | JavaScript | MVC | EJS | MySQL | REST APIs | Redis |
115
+ | 96 | JavaScript | MVC | EJS | MySQL | REST APIs | Memory Cache |
116
+ | 97 | JavaScript | MVC | EJS | MySQL | GraphQL | None |
117
+ | 98 | JavaScript | MVC | EJS | MySQL | GraphQL | Redis |
118
+ | 99 | JavaScript | MVC | EJS | MySQL | GraphQL | Memory Cache |
119
+ | 100 | JavaScript | MVC | EJS | MySQL | Kafka | None |
120
+ | 101 | JavaScript | MVC | EJS | MySQL | Kafka | Redis |
121
+ | 102 | JavaScript | MVC | EJS | MySQL | Kafka | Memory Cache |
122
+ | 103 | JavaScript | MVC | EJS | PostgreSQL | REST APIs | None |
123
+ | 104 | JavaScript | MVC | EJS | PostgreSQL | REST APIs | Redis |
124
+ | 105 | JavaScript | MVC | EJS | PostgreSQL | REST APIs | Memory Cache |
125
+ | 106 | JavaScript | MVC | EJS | PostgreSQL | GraphQL | None |
126
+ | 107 | JavaScript | MVC | EJS | PostgreSQL | GraphQL | Redis |
127
+ | 108 | JavaScript | MVC | EJS | PostgreSQL | GraphQL | Memory Cache |
128
+ | 109 | JavaScript | MVC | EJS | PostgreSQL | Kafka | None |
129
+ | 110 | JavaScript | MVC | EJS | PostgreSQL | Kafka | Redis |
130
+ | 111 | JavaScript | MVC | EJS | PostgreSQL | Kafka | Memory Cache |
131
+ | 112 | JavaScript | MVC | EJS | MongoDB | REST APIs | None |
132
+ | 113 | JavaScript | MVC | EJS | MongoDB | REST APIs | Redis |
133
+ | 114 | JavaScript | MVC | EJS | MongoDB | REST APIs | Memory Cache |
134
+ | 115 | JavaScript | MVC | EJS | MongoDB | GraphQL | None |
135
+ | 116 | JavaScript | MVC | EJS | MongoDB | GraphQL | Redis |
136
+ | 117 | JavaScript | MVC | EJS | MongoDB | GraphQL | Memory Cache |
137
+ | 118 | JavaScript | MVC | EJS | MongoDB | Kafka | None |
138
+ | 119 | JavaScript | MVC | EJS | MongoDB | Kafka | Redis |
139
+ | 120 | JavaScript | MVC | EJS | MongoDB | Kafka | Memory Cache |
140
+ | 121 | JavaScript | MVC | Pug | None | REST APIs | None |
141
+ | 122 | JavaScript | MVC | Pug | None | GraphQL | None |
142
+ | 123 | JavaScript | MVC | Pug | None | Kafka | None |
143
+ | 124 | JavaScript | MVC | Pug | MySQL | REST APIs | None |
144
+ | 125 | JavaScript | MVC | Pug | MySQL | REST APIs | Redis |
145
+ | 126 | JavaScript | MVC | Pug | MySQL | REST APIs | Memory Cache |
146
+ | 127 | JavaScript | MVC | Pug | MySQL | GraphQL | None |
147
+ | 128 | JavaScript | MVC | Pug | MySQL | GraphQL | Redis |
148
+ | 129 | JavaScript | MVC | Pug | MySQL | GraphQL | Memory Cache |
149
+ | 130 | JavaScript | MVC | Pug | MySQL | Kafka | None |
150
+ | 131 | JavaScript | MVC | Pug | MySQL | Kafka | Redis |
151
+ | 132 | JavaScript | MVC | Pug | MySQL | Kafka | Memory Cache |
152
+ | 133 | JavaScript | MVC | Pug | PostgreSQL | REST APIs | None |
153
+ | 134 | JavaScript | MVC | Pug | PostgreSQL | REST APIs | Redis |
154
+ | 135 | JavaScript | MVC | Pug | PostgreSQL | REST APIs | Memory Cache |
155
+ | 136 | JavaScript | MVC | Pug | PostgreSQL | GraphQL | None |
156
+ | 137 | JavaScript | MVC | Pug | PostgreSQL | GraphQL | Redis |
157
+ | 138 | JavaScript | MVC | Pug | PostgreSQL | GraphQL | Memory Cache |
158
+ | 139 | JavaScript | MVC | Pug | PostgreSQL | Kafka | None |
159
+ | 140 | JavaScript | MVC | Pug | PostgreSQL | Kafka | Redis |
160
+ | 141 | JavaScript | MVC | Pug | PostgreSQL | Kafka | Memory Cache |
161
+ | 142 | JavaScript | MVC | Pug | MongoDB | REST APIs | None |
162
+ | 143 | JavaScript | MVC | Pug | MongoDB | REST APIs | Redis |
163
+ | 144 | JavaScript | MVC | Pug | MongoDB | REST APIs | Memory Cache |
164
+ | 145 | JavaScript | MVC | Pug | MongoDB | GraphQL | None |
165
+ | 146 | JavaScript | MVC | Pug | MongoDB | GraphQL | Redis |
166
+ | 147 | JavaScript | MVC | Pug | MongoDB | GraphQL | Memory Cache |
167
+ | 148 | JavaScript | MVC | Pug | MongoDB | Kafka | None |
168
+ | 149 | JavaScript | MVC | Pug | MongoDB | Kafka | Redis |
169
+ | 150 | JavaScript | MVC | Pug | MongoDB | Kafka | Memory Cache |
170
+ | 151 | JavaScript | MVC | None | None | REST APIs | None |
171
+ | 152 | JavaScript | MVC | None | None | GraphQL | None |
172
+ | 153 | JavaScript | MVC | None | None | Kafka | None |
173
+ | 154 | JavaScript | MVC | None | MySQL | REST APIs | None |
174
+ | 155 | JavaScript | MVC | None | MySQL | REST APIs | Redis |
175
+ | 156 | JavaScript | MVC | None | MySQL | REST APIs | Memory Cache |
176
+ | 157 | JavaScript | MVC | None | MySQL | GraphQL | None |
177
+ | 158 | JavaScript | MVC | None | MySQL | GraphQL | Redis |
178
+ | 159 | JavaScript | MVC | None | MySQL | GraphQL | Memory Cache |
179
+ | 160 | JavaScript | MVC | None | MySQL | Kafka | None |
180
+ | 161 | JavaScript | MVC | None | MySQL | Kafka | Redis |
181
+ | 162 | JavaScript | MVC | None | MySQL | Kafka | Memory Cache |
182
+ | 163 | JavaScript | MVC | None | PostgreSQL | REST APIs | None |
183
+ | 164 | JavaScript | MVC | None | PostgreSQL | REST APIs | Redis |
184
+ | 165 | JavaScript | MVC | None | PostgreSQL | REST APIs | Memory Cache |
185
+ | 166 | JavaScript | MVC | None | PostgreSQL | GraphQL | None |
186
+ | 167 | JavaScript | MVC | None | PostgreSQL | GraphQL | Redis |
187
+ | 168 | JavaScript | MVC | None | PostgreSQL | GraphQL | Memory Cache |
188
+ | 169 | JavaScript | MVC | None | PostgreSQL | Kafka | None |
189
+ | 170 | JavaScript | MVC | None | PostgreSQL | Kafka | Redis |
190
+ | 171 | JavaScript | MVC | None | PostgreSQL | Kafka | Memory Cache |
191
+ | 172 | JavaScript | MVC | None | MongoDB | REST APIs | None |
192
+ | 173 | JavaScript | MVC | None | MongoDB | REST APIs | Redis |
193
+ | 174 | JavaScript | MVC | None | MongoDB | REST APIs | Memory Cache |
194
+ | 175 | JavaScript | MVC | None | MongoDB | GraphQL | None |
195
+ | 176 | JavaScript | MVC | None | MongoDB | GraphQL | Redis |
196
+ | 177 | JavaScript | MVC | None | MongoDB | GraphQL | Memory Cache |
197
+ | 178 | JavaScript | MVC | None | MongoDB | Kafka | None |
198
+ | 179 | JavaScript | MVC | None | MongoDB | Kafka | Redis |
199
+ | 180 | JavaScript | MVC | None | MongoDB | Kafka | Memory Cache |
140
200
 
141
- ## 2. Clean Architecture (40 Cases)
201
+ ## 2. Clean Architecture (60 Cases)
142
202
  *Note: Clean Architecture does not use server-side view engines (EJS/Pug).*
143
203
 
144
204
  | # | Language | Architecture | View Engine | Database | Communication | Caching |
145
205
  | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
146
- | 121 | TypeScript | Clean Architecture | N/A | None | REST APIs | None |
147
- | 122 | TypeScript | Clean Architecture | N/A | None | Kafka | None |
148
- | 123 | TypeScript | Clean Architecture | N/A | MySQL | REST APIs | None |
149
- | 124 | TypeScript | Clean Architecture | N/A | MySQL | REST APIs | Redis |
150
- | 125 | TypeScript | Clean Architecture | N/A | MySQL | REST APIs | Memory Cache |
151
- | 126 | TypeScript | Clean Architecture | N/A | MySQL | Kafka | None |
152
- | 127 | TypeScript | Clean Architecture | N/A | MySQL | Kafka | Redis |
153
- | 128 | TypeScript | Clean Architecture | N/A | MySQL | Kafka | Memory Cache |
154
- | 129 | TypeScript | Clean Architecture | N/A | PostgreSQL | REST APIs | None |
155
- | 130 | TypeScript | Clean Architecture | N/A | PostgreSQL | REST APIs | Redis |
156
- | 131 | TypeScript | Clean Architecture | N/A | PostgreSQL | REST APIs | Memory Cache |
157
- | 132 | TypeScript | Clean Architecture | N/A | PostgreSQL | Kafka | None |
158
- | 133 | TypeScript | Clean Architecture | N/A | PostgreSQL | Kafka | Redis |
159
- | 134 | TypeScript | Clean Architecture | N/A | PostgreSQL | Kafka | Memory Cache |
160
- | 135 | TypeScript | Clean Architecture | N/A | MongoDB | REST APIs | None |
161
- | 136 | TypeScript | Clean Architecture | N/A | MongoDB | REST APIs | Redis |
162
- | 137 | TypeScript | Clean Architecture | N/A | MongoDB | REST APIs | Memory Cache |
163
- | 138 | TypeScript | Clean Architecture | N/A | MongoDB | Kafka | None |
164
- | 139 | TypeScript | Clean Architecture | N/A | MongoDB | Kafka | Redis |
165
- | 140 | TypeScript | Clean Architecture | N/A | MongoDB | Kafka | Memory Cache |
166
- | 141 | JavaScript | Clean Architecture | N/A | None | REST APIs | None |
167
- | 142 | JavaScript | Clean Architecture | N/A | None | Kafka | None |
168
- | 143 | JavaScript | Clean Architecture | N/A | MySQL | REST APIs | None |
169
- | 144 | JavaScript | Clean Architecture | N/A | MySQL | REST APIs | Redis |
170
- | 145 | JavaScript | Clean Architecture | N/A | MySQL | REST APIs | Memory Cache |
171
- | 146 | JavaScript | Clean Architecture | N/A | MySQL | Kafka | None |
172
- | 147 | JavaScript | Clean Architecture | N/A | MySQL | Kafka | Redis |
173
- | 148 | JavaScript | Clean Architecture | N/A | MySQL | Kafka | Memory Cache |
174
- | 149 | JavaScript | Clean Architecture | N/A | PostgreSQL | REST APIs | None |
175
- | 150 | JavaScript | Clean Architecture | N/A | PostgreSQL | REST APIs | Redis |
176
- | 151 | JavaScript | Clean Architecture | N/A | PostgreSQL | REST APIs | Memory Cache |
177
- | 152 | JavaScript | Clean Architecture | N/A | PostgreSQL | Kafka | None |
178
- | 153 | JavaScript | Clean Architecture | N/A | PostgreSQL | Kafka | Redis |
179
- | 154 | JavaScript | Clean Architecture | N/A | PostgreSQL | Kafka | Memory Cache |
180
- | 155 | JavaScript | Clean Architecture | N/A | MongoDB | REST APIs | None |
181
- | 156 | JavaScript | Clean Architecture | N/A | MongoDB | REST APIs | Redis |
182
- | 157 | JavaScript | Clean Architecture | N/A | MongoDB | REST APIs | Memory Cache |
183
- | 158 | JavaScript | Clean Architecture | N/A | MongoDB | Kafka | None |
184
- | 159 | JavaScript | Clean Architecture | N/A | MongoDB | Kafka | Redis |
185
- | 160 | JavaScript | Clean Architecture | N/A | MongoDB | Kafka | Memory Cache |
206
+ | 181 | TypeScript | Clean Architecture | N/A | None | REST APIs | None |
207
+ | 182 | TypeScript | Clean Architecture | N/A | None | GraphQL | None |
208
+ | 183 | TypeScript | Clean Architecture | N/A | None | Kafka | None |
209
+ | 184 | TypeScript | Clean Architecture | N/A | MySQL | REST APIs | None |
210
+ | 185 | TypeScript | Clean Architecture | N/A | MySQL | REST APIs | Redis |
211
+ | 186 | TypeScript | Clean Architecture | N/A | MySQL | REST APIs | Memory Cache |
212
+ | 187 | TypeScript | Clean Architecture | N/A | MySQL | GraphQL | None |
213
+ | 188 | TypeScript | Clean Architecture | N/A | MySQL | GraphQL | Redis |
214
+ | 189 | TypeScript | Clean Architecture | N/A | MySQL | GraphQL | Memory Cache |
215
+ | 190 | TypeScript | Clean Architecture | N/A | MySQL | Kafka | None |
216
+ | 191 | TypeScript | Clean Architecture | N/A | MySQL | Kafka | Redis |
217
+ | 192 | TypeScript | Clean Architecture | N/A | MySQL | Kafka | Memory Cache |
218
+ | 193 | TypeScript | Clean Architecture | N/A | PostgreSQL | REST APIs | None |
219
+ | 194 | TypeScript | Clean Architecture | N/A | PostgreSQL | REST APIs | Redis |
220
+ | 195 | TypeScript | Clean Architecture | N/A | PostgreSQL | REST APIs | Memory Cache |
221
+ | 196 | TypeScript | Clean Architecture | N/A | PostgreSQL | GraphQL | None |
222
+ | 197 | TypeScript | Clean Architecture | N/A | PostgreSQL | GraphQL | Redis |
223
+ | 198 | TypeScript | Clean Architecture | N/A | PostgreSQL | GraphQL | Memory Cache |
224
+ | 199 | TypeScript | Clean Architecture | N/A | PostgreSQL | Kafka | None |
225
+ | 200 | TypeScript | Clean Architecture | N/A | PostgreSQL | Kafka | Redis |
226
+ | 201 | TypeScript | Clean Architecture | N/A | PostgreSQL | Kafka | Memory Cache |
227
+ | 202 | TypeScript | Clean Architecture | N/A | MongoDB | REST APIs | None |
228
+ | 203 | TypeScript | Clean Architecture | N/A | MongoDB | REST APIs | Redis |
229
+ | 204 | TypeScript | Clean Architecture | N/A | MongoDB | REST APIs | Memory Cache |
230
+ | 205 | TypeScript | Clean Architecture | N/A | MongoDB | GraphQL | None |
231
+ | 206 | TypeScript | Clean Architecture | N/A | MongoDB | GraphQL | Redis |
232
+ | 207 | TypeScript | Clean Architecture | N/A | MongoDB | GraphQL | Memory Cache |
233
+ | 208 | TypeScript | Clean Architecture | N/A | MongoDB | Kafka | None |
234
+ | 209 | TypeScript | Clean Architecture | N/A | MongoDB | Kafka | Redis |
235
+ | 210 | TypeScript | Clean Architecture | N/A | MongoDB | Kafka | Memory Cache |
236
+ | 211 | JavaScript | Clean Architecture | N/A | None | REST APIs | None |
237
+ | 212 | JavaScript | Clean Architecture | N/A | None | GraphQL | None |
238
+ | 213 | JavaScript | Clean Architecture | N/A | None | Kafka | None |
239
+ | 214 | JavaScript | Clean Architecture | N/A | MySQL | REST APIs | None |
240
+ | 215 | JavaScript | Clean Architecture | N/A | MySQL | REST APIs | Redis |
241
+ | 216 | JavaScript | Clean Architecture | N/A | MySQL | REST APIs | Memory Cache |
242
+ | 217 | JavaScript | Clean Architecture | N/A | MySQL | GraphQL | None |
243
+ | 218 | JavaScript | Clean Architecture | N/A | MySQL | GraphQL | Redis |
244
+ | 219 | JavaScript | Clean Architecture | N/A | MySQL | GraphQL | Memory Cache |
245
+ | 220 | JavaScript | Clean Architecture | N/A | MySQL | Kafka | None |
246
+ | 221 | JavaScript | Clean Architecture | N/A | MySQL | Kafka | Redis |
247
+ | 222 | JavaScript | Clean Architecture | N/A | MySQL | Kafka | Memory Cache |
248
+ | 223 | JavaScript | Clean Architecture | N/A | PostgreSQL | REST APIs | None |
249
+ | 224 | JavaScript | Clean Architecture | N/A | PostgreSQL | REST APIs | Redis |
250
+ | 225 | JavaScript | Clean Architecture | N/A | PostgreSQL | REST APIs | Memory Cache |
251
+ | 226 | JavaScript | Clean Architecture | N/A | PostgreSQL | GraphQL | None |
252
+ | 227 | JavaScript | Clean Architecture | N/A | PostgreSQL | GraphQL | Redis |
253
+ | 228 | JavaScript | Clean Architecture | N/A | PostgreSQL | GraphQL | Memory Cache |
254
+ | 229 | JavaScript | Clean Architecture | N/A | PostgreSQL | Kafka | None |
255
+ | 230 | JavaScript | Clean Architecture | N/A | PostgreSQL | Kafka | Redis |
256
+ | 231 | JavaScript | Clean Architecture | N/A | PostgreSQL | Kafka | Memory Cache |
257
+ | 232 | JavaScript | Clean Architecture | N/A | MongoDB | REST APIs | None |
258
+ | 233 | JavaScript | Clean Architecture | N/A | MongoDB | REST APIs | Redis |
259
+ | 234 | JavaScript | Clean Architecture | N/A | MongoDB | REST APIs | Memory Cache |
260
+ | 235 | JavaScript | Clean Architecture | N/A | MongoDB | GraphQL | None |
261
+ | 236 | JavaScript | Clean Architecture | N/A | MongoDB | GraphQL | Redis |
262
+ | 237 | JavaScript | Clean Architecture | N/A | MongoDB | GraphQL | Memory Cache |
263
+ | 238 | JavaScript | Clean Architecture | N/A | MongoDB | Kafka | None |
264
+ | 239 | JavaScript | Clean Architecture | N/A | MongoDB | Kafka | Redis |
265
+ | 240 | JavaScript | Clean Architecture | N/A | MongoDB | Kafka | Memory Cache |
package/lib/generator.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import path from 'path';
2
2
  import { fileURLToPath } from 'url';
3
3
  import { setupProjectDirectory, copyBaseStructure, copyCommonFiles } from './modules/project-setup.js';
4
- import { renderPackageJson, renderDockerCompose, renderReadme, renderDockerfile, renderProfessionalConfig, setupCiCd, renderTestSample, renderEnvExample } from './modules/config-files.js';
5
- import { renderIndexFile, renderErrorMiddleware, renderDynamicComponents, renderSwaggerConfig, setupViews as setupSrcViews } from './modules/app-setup.js';
4
+ import { renderPackageJson, renderDockerCompose, renderReadme, renderDockerfile, renderProfessionalConfig, setupCiCd, renderTestSample, renderEnvExample, renderPm2Config } from './modules/config-files.js';
5
+ import { renderIndexFile, renderEnvConfig, renderErrorMiddleware, renderDynamicComponents, renderSwaggerConfig, setupViews as setupSrcViews } from './modules/app-setup.js';
6
6
  import { setupDatabase } from './modules/database-setup.js';
7
7
  import { setupKafka, setupViews } from './modules/kafka-setup.js';
8
8
  import { setupCaching } from './modules/caching-setup.js';
@@ -33,6 +33,9 @@ export const generateProject = async (config) => {
33
33
  // 6. Render index file (ts/js)
34
34
  await renderIndexFile(templatePath, targetDir, config);
35
35
 
36
+ // 6a. Render Environment Configuration
37
+ await renderEnvConfig(templatePath, targetDir, config);
38
+
36
39
  // 6a. Render error middleware
37
40
  await renderErrorMiddleware(templatePath, targetDir, config);
38
41
 
@@ -73,6 +76,9 @@ export const generateProject = async (config) => {
73
76
  // 15. Env Example
74
77
  await renderEnvExample(templatesDir, targetDir, config);
75
78
 
79
+ // 16. PM2 Configuration
80
+ await renderPm2Config(templatesDir, targetDir, config);
81
+
76
82
  console.log(`
77
83
  ====================================================
78
84
  Node.js Project Created Successfully!
@@ -22,6 +22,30 @@ export const renderIndexFile = async (templatePath, targetDir, config) => {
22
22
  }
23
23
  };
24
24
 
25
+ export const renderEnvConfig = async (templatePath, targetDir, config) => {
26
+ const { language, architecture, database, caching, communication } = config;
27
+ const envExt = language === 'TypeScript' ? 'ts' : 'js';
28
+
29
+ let configDir = path.join(targetDir, 'src', 'config');
30
+ if (architecture === 'Clean Architecture' && language === 'JavaScript') {
31
+ configDir = path.join(targetDir, 'src', 'infrastructure', 'config');
32
+ }
33
+
34
+ const envTemplatePath = path.join(configDir, `env.${envExt}.ejs`);
35
+ const envDestPath = path.join(configDir, `env.${envExt}`);
36
+
37
+ if (await fs.pathExists(envTemplatePath)) {
38
+ const envTemplate = await fs.readFile(envTemplatePath, 'utf-8');
39
+ const envContent = ejs.render(envTemplate, {
40
+ database,
41
+ caching,
42
+ communication
43
+ });
44
+ await fs.writeFile(envDestPath, envContent);
45
+ await fs.remove(envTemplatePath);
46
+ }
47
+ };
48
+
25
49
  export const renderErrorMiddleware = async (templatePath, targetDir, config) => {
26
50
  const { language, architecture } = config;
27
51
  const errName = language === 'TypeScript' ? 'error.middleware.ts' : 'error.middleware.js';
@@ -59,6 +59,21 @@ export const renderDockerfile = async (templatesDir, targetDir, config) => {
59
59
  await fs.writeFile(path.join(targetDir, 'Dockerfile'), dockerfileContent);
60
60
  };
61
61
 
62
+ export const renderPm2Config = async (templatesDir, targetDir, config) => {
63
+ const { projectName, database, dbName, communication, language, caching } = config;
64
+ const pm2ConfigPath = path.join(targetDir, 'ecosystem.config.js');
65
+ const pm2Template = await fs.readFile(path.join(templatesDir, 'common', 'ecosystem.config.js.ejs'), 'utf-8');
66
+ const pm2Content = ejs.render(pm2Template, {
67
+ projectName,
68
+ database,
69
+ dbName,
70
+ communication,
71
+ language,
72
+ caching
73
+ });
74
+ await fs.writeFile(pm2ConfigPath, pm2Content);
75
+ };
76
+
62
77
  export const renderProfessionalConfig = async (templatesDir, targetDir, language) => {
63
78
  const eslintTemplate = await fs.readFile(path.join(templatesDir, 'common', 'eslint.config.mjs.ejs'), 'utf-8');
64
79
  const eslintContent = ejs.render(eslintTemplate, { language });
@@ -98,7 +113,8 @@ export const renderTestSample = async (templatesDir, targetDir, language) => {
98
113
 
99
114
  export const renderEnvExample = async (templatesDir, targetDir, config) => {
100
115
  const { database, dbName, communication, projectName, caching } = config;
101
- const envPath = path.join(targetDir, '.env.example');
116
+ const envExamplePath = path.join(targetDir, '.env.example');
117
+ const envPath = path.join(targetDir, '.env');
102
118
  const envTemplate = await fs.readFile(path.join(templatesDir, 'common', '.env.example.ejs'), 'utf-8');
103
119
 
104
120
  const envContent = ejs.render(envTemplate, {
@@ -109,5 +125,6 @@ export const renderEnvExample = async (templatesDir, targetDir, config) => {
109
125
  caching
110
126
  });
111
127
 
128
+ await fs.writeFile(envExamplePath, envContent);
112
129
  await fs.writeFile(envPath, envContent);
113
130
  };