nestforge-generator 0.1.1 → 0.3.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 (35) hide show
  1. package/README.md +39 -23
  2. package/README.pt-BR.md +39 -23
  3. package/dist/features/database.js +35 -0
  4. package/dist/features/database.js.map +1 -1
  5. package/dist/features/language.js +19 -1
  6. package/dist/features/language.js.map +1 -1
  7. package/dist/features/no-orm.js +493 -0
  8. package/dist/features/no-orm.js.map +1 -0
  9. package/dist/generator.js +27 -7
  10. package/dist/generator.js.map +1 -1
  11. package/dist/index.js +24 -13
  12. package/dist/index.js.map +1 -1
  13. package/dist/prompts.js +32 -22
  14. package/dist/prompts.js.map +1 -1
  15. package/package.json +2 -1
  16. package/templates/drizzle/README.md +2 -0
  17. package/templates/drizzle/README.pt-BR.md +2 -0
  18. package/templates/prisma/.github/workflows/ci.yml +24 -1
  19. package/templates/prisma/ARCHITECTURE.md +7 -1
  20. package/templates/prisma/ARCHITECTURE.pt-BR.md +7 -1
  21. package/templates/prisma/README.md +11 -7
  22. package/templates/prisma/README.pt-BR.md +11 -7
  23. package/templates/prisma/ROADMAP.md +5 -1
  24. package/templates/prisma/ROADMAP.pt-BR.md +5 -1
  25. package/templates/prisma/TESTING.md +25 -3
  26. package/templates/prisma/TESTING.pt-BR.md +25 -3
  27. package/templates/prisma/docker-compose.yml +29 -1
  28. package/templates/prisma/docs/adding-a-module.md +246 -230
  29. package/templates/prisma/docs/features-markers.md +11 -1
  30. package/templates/prisma/prisma/schema.prisma +4 -0
  31. package/templates/prisma/src/auth/token.service.ts +12 -3
  32. package/templates/prisma/src/health/indicators/prisma-health.indicator.spec.ts +39 -22
  33. package/templates/prisma/src/health/indicators/prisma-health.indicator.ts +24 -19
  34. package/templates/typeorm/README.md +2 -0
  35. package/templates/typeorm/README.pt-BR.md +2 -0
package/README.md CHANGED
@@ -2,19 +2,19 @@
2
2
 
3
3
  **English** | [Português](README.pt-BR.md)
4
4
 
5
- Interactive CLI that generates NestJS projects from NestForge's [Prisma](../../templates/prisma), [TypeORM](../../templates/typeorm), and [Drizzle](../../templates/drizzle) templates.
6
-
7
- Install the package locally:
8
-
9
- ```bash
10
- npm install nestforge-generator
11
- ```
12
-
13
- Run the locally installed CLI:
14
-
15
- ```bash
16
- npx nestforge
17
- ```
5
+ Interactive CLI that generates NestJS projects from NestForge's [Prisma](../../templates/prisma), [TypeORM](../../templates/typeorm), and [Drizzle](../../templates/drizzle) templates, or without an ORM.
6
+
7
+ Install the package locally:
8
+
9
+ ```bash
10
+ npm install nestforge-generator
11
+ ```
12
+
13
+ Run the locally installed CLI:
14
+
15
+ ```bash
16
+ npx nestforge
17
+ ```
18
18
 
19
19
  For the testing guide, CLI prompts, and complete checklist, see [`TESTING.md`](TESTING.md).
20
20
 
@@ -22,8 +22,8 @@ For the testing guide, CLI prompts, and complete checklist, see [`TESTING.md`](T
22
22
 
23
23
  - Interactive prompts using `@clack/prompts`;
24
24
  - TypeScript or JavaScript generation;
25
- - Prisma, TypeORM, and Drizzle ORM;
26
- - PostgreSQL, MySQL, and SQLite;
25
+ - Prisma, TypeORM, Drizzle ORM, or no ORM;
26
+ - PostgreSQL, MySQL, SQLite, and MongoDB with Prisma;
27
27
  - JWT, Session/Cookies, OAuth-only, or no authentication;
28
28
  - optional Docker;
29
29
  - optional Swagger/OpenAPI;
@@ -61,9 +61,10 @@ Available with:
61
61
 
62
62
  - PostgreSQL;
63
63
  - MySQL;
64
- - SQLite.
64
+ - SQLite;
65
+ - MongoDB.
65
66
 
66
- The CLI adjusts the `schema.prisma` provider, database URL, and provider-specific resources.
67
+ The CLI adjusts the `schema.prisma` provider, database URL, and provider-specific resources. MongoDB projects use mapped `ObjectId` fields and `prisma db push` instead of Prisma Migrate.
67
68
 
68
69
  ### TypeORM
69
70
 
@@ -105,6 +106,18 @@ The Drizzle template includes:
105
106
 
106
107
  After generation, only the schema and driver for the selected database remain in the project.
107
108
 
109
+ > **MongoDB compatibility:** MongoDB generation is currently available only with Prisma. TypeORM provides basic MongoDB support, but it is not directly compatible with the relational architecture of NestForge's TypeORM template. Drizzle does not currently provide an official MongoDB dialect. Therefore, the CLI does not offer MongoDB when TypeORM or Drizzle is selected.
110
+
111
+ ### No ORM
112
+
113
+ The “None” option:
114
+
115
+ - skips the database and authentication prompts;
116
+ - generates no schema, migrations, seed, database driver, or ORM dependency;
117
+ - removes authentication, users, and access control;
118
+ - keeps independent optional features;
119
+ - works with TypeScript and JavaScript.
120
+
108
121
  ## Authentication strategies
109
122
 
110
123
  ### JWT
@@ -247,11 +260,11 @@ When requested, the CLI automatically creates `.env` from the already processed
247
260
  | ORM: Prisma | ✅ Implemented |
248
261
  | ORM: TypeORM | ✅ Implemented |
249
262
  | ORM: Drizzle | ✅ Implemented |
250
- | ORM: None | Not implemented |
263
+ | ORM: None | Implemented |
251
264
  | Database: PostgreSQL | ✅ Implemented |
252
265
  | Database: MySQL | ✅ Implemented |
253
266
  | Database: SQLite | ✅ Implemented |
254
- | Database: MongoDB | Not implemented |
267
+ | Database: MongoDB | Implemented with Prisma |
255
268
  | Auth: JWT | ✅ Implemented |
256
269
  | Auth: Session/Cookies | ✅ Implemented |
257
270
  | Auth: OAuth-only | ✅ Implemented |
@@ -278,10 +291,14 @@ Coverage includes:
278
291
  - Prisma with PostgreSQL;
279
292
  - Prisma with MySQL;
280
293
  - Prisma with SQLite;
294
+ - Prisma with MongoDB and JWT;
295
+ - Prisma with MongoDB and Session/Cookies;
281
296
  - TypeORM with SQLite;
282
297
  - Drizzle with PostgreSQL;
283
298
  - Drizzle with MySQL;
284
299
  - Drizzle with SQLite;
300
+ - no ORM with TypeScript;
301
+ - no ORM with JavaScript, Docker, and Redis;
285
302
  - JWT;
286
303
  - Session/Cookies;
287
304
  - OAuth-only;
@@ -304,7 +321,7 @@ The following combinations were validated with installation, build, unit tests,
304
321
  - TypeScript + Drizzle + SQLite + JWT;
305
322
  - TypeScript + Drizzle + SQLite + Session/Cookies.
306
323
 
307
- PostgreSQL and MySQL have automated generation, configuration, and unused-driver removal tests. Complete smoke tests for these databases still require local services or Docker.
324
+ PostgreSQL, MySQL, and MongoDB have automated generation and configuration tests. Complete smoke tests that connect to these databases still require local services or Docker; MongoDB must run as a replica set.
308
325
 
309
326
  ## Known limitations
310
327
 
@@ -367,13 +384,12 @@ npm publish
367
384
  The build:
368
385
 
369
386
  1. compiles the CLI;
370
- 2. copies the Prisma, TypeORM, and Drizzle templates;
387
+ 2. copies the source templates;
371
388
  3. prepares the package published to npm.
372
389
 
373
390
  ## Next steps
374
391
 
375
- - an option without an ORM;
376
- - MongoDB;
392
+ - expand MongoDB support beyond Prisma when a compatible ORM integration is available;
377
393
  - more complete project and package name validation;
378
394
  - expand the smoke-test matrix with real PostgreSQL and MySQL services;
379
395
  - reduce the known limitations in the earlier templates.
package/README.pt-BR.md CHANGED
@@ -2,19 +2,19 @@
2
2
 
3
3
  [English](README.md) | **Português**
4
4
 
5
- CLI interativa que gera projetos NestJS a partir dos templates `../../templates/prisma`, `../../templates/typeorm` e `../../templates/drizzle` do NestForge.
6
-
7
- Instale o pacote localmente:
8
-
9
- ```bash
10
- npm install nestforge-generator
11
- ```
12
-
13
- Execute a CLI instalada localmente:
14
-
15
- ```bash
16
- npx nestforge
17
- ```
5
+ CLI interativa que gera projetos NestJS a partir dos templates `../../templates/prisma`, `../../templates/typeorm` e `../../templates/drizzle` do NestForge, ou sem ORM.
6
+
7
+ Instale o pacote localmente:
8
+
9
+ ```bash
10
+ npm install nestforge-generator
11
+ ```
12
+
13
+ Execute a CLI instalada localmente:
14
+
15
+ ```bash
16
+ npx nestforge
17
+ ```
18
18
 
19
19
  Para o guia de testes, perguntas da CLI e checklist completo, consulte [`TESTING.pt-BR.md`](TESTING.pt-BR.md).
20
20
 
@@ -22,8 +22,8 @@ Para o guia de testes, perguntas da CLI e checklist completo, consulte [`TESTING
22
22
 
23
23
  * Prompts interativos usando @clack/prompts;
24
24
  * geração em TypeScript ou JavaScript;
25
- * Prisma, TypeORM e Drizzle ORM;
26
- * PostgreSQL, MySQL e SQLite;
25
+ * Prisma, TypeORM, Drizzle ORM ou nenhum ORM;
26
+ * PostgreSQL, MySQL, SQLite e MongoDB com Prisma;
27
27
  * autenticação JWT, Session/Cookies, OAuth-only ou nenhuma;
28
28
  * Docker opcional;
29
29
  * Swagger/OpenAPI opcional;
@@ -61,9 +61,10 @@ Disponível com:
61
61
 
62
62
  * PostgreSQL;
63
63
  * MySQL;
64
- * SQLite.
64
+ * SQLite;
65
+ * MongoDB.
65
66
 
66
- A CLI ajusta o provider do schema.prisma, a URL do banco e os recursos específicos do provider.
67
+ A CLI ajusta o provider do schema.prisma, a URL do banco e os recursos específicos do provider. Projetos MongoDB usam campos `ObjectId` mapeados e `prisma db push` no lugar do Prisma Migrate.
67
68
 
68
69
  ### TypeORM
69
70
 
@@ -105,6 +106,18 @@ O template Drizzle inclui:
105
106
 
106
107
  Depois da geração, somente o schema e o driver do banco selecionado permanecem no projeto.
107
108
 
109
+ > **Compatibilidade com MongoDB:** a geração com MongoDB está disponível atualmente apenas com Prisma. O TypeORM oferece suporte básico a MongoDB, mas ele não é diretamente compatível com a arquitetura relacional do template TypeORM do NestForge. O Drizzle não oferece atualmente um dialeto oficial para MongoDB. Portanto, a CLI não disponibiliza MongoDB quando TypeORM ou Drizzle é selecionado.
110
+
111
+ ### Sem ORM
112
+
113
+ A opção “Nenhum”:
114
+
115
+ * pula as perguntas de banco de dados e autenticação;
116
+ * não gera schema, migrations, seed, driver de banco ou dependência de ORM;
117
+ * remove autenticação, usuários e controle de acesso;
118
+ * mantém os recursos opcionais independentes;
119
+ * funciona com TypeScript e JavaScript.
120
+
108
121
  ## Estratégias de autenticação
109
122
 
110
123
  ### JWT
@@ -248,11 +261,11 @@ processado.
248
261
  | ORM: Prisma | ✅ Implementado |
249
262
  | ORM: TypeORM | ✅ Implementado |
250
263
  | ORM: Drizzle | ✅ Implementado |
251
- | ORM: Nenhum | Não implementado |
264
+ | ORM: Nenhum | Implementado |
252
265
  | Banco: PostgreSQL | ✅ Implementado |
253
266
  | Banco: MySQL | ✅ Implementado |
254
267
  | Banco: SQLite | ✅ Implementado |
255
- | Banco: MongoDB | Não implementado |
268
+ | Banco: MongoDB | Com Prisma |
256
269
  | Auth: JWT | ✅ Implementada |
257
270
  | Auth: Session/Cookies | ✅ Implementada |
258
271
  | Auth: OAuth-only | ✅ Implementada |
@@ -277,10 +290,14 @@ A cobertura inclui:
277
290
  * Prisma com PostgreSQL;
278
291
  * Prisma com MySQL;
279
292
  * Prisma com SQLite;
293
+ * Prisma com MongoDB e JWT;
294
+ * Prisma com MongoDB e Session/Cookies;
280
295
  * TypeORM com SQLite;
281
296
  * Drizzle com PostgreSQL;
282
297
  * Drizzle com MySQL;
283
298
  * Drizzle com SQLite;
299
+ * sem ORM com TypeScript;
300
+ * sem ORM com JavaScript, Docker e Redis;
284
301
  * JWT;
285
302
  * Session/Cookies;
286
303
  * OAuth-only;
@@ -303,7 +320,7 @@ Foram validadas com instalação, build, testes unitários, migrations, seed e t
303
320
  * TypeScript + Drizzle + SQLite + JWT;
304
321
  * TypeScript + Drizzle + SQLite + Session/Cookies.
305
322
 
306
- PostgreSQL e MySQL possuem testes automatizados de geração, configuração e remoção dos drivers não utilizados. Smoke tests completos desses bancos ainda exigem serviços locais ou Docker.
323
+ PostgreSQL, MySQL e MongoDB possuem testes automatizados de geração e configuração. Smoke tests que conectam a esses bancos ainda exigem serviços locais ou Docker; o MongoDB deve funcionar como replica set.
307
324
 
308
325
  ## Limitações conhecidas
309
326
 
@@ -366,13 +383,12 @@ npm publish
366
383
  O build:
367
384
 
368
385
  1. compila a CLI;
369
- 2. copia os templates Prisma, TypeORM e Drizzle;
386
+ 2. copia os templates-fonte;
370
387
  3. prepara o pacote publicado no npm.
371
388
 
372
389
  ## Próximos itens
373
390
 
374
- * opção sem ORM;
375
- * MongoDB;
391
+ * ampliar o suporte a MongoDB além do Prisma quando houver uma integração compatível com o ORM;
376
392
  * validação mais completa do nome do projeto e do pacote;
377
393
  * ampliação da matriz de smoke tests com PostgreSQL e MySQL reais;
378
394
  * redução das limitações conhecidas dos templates anteriores.
@@ -16,6 +16,11 @@ const DATABASE_CONFIG = {
16
16
  devUrl: 'file:./dev.db',
17
17
  testUrl: 'file:./test.db',
18
18
  },
19
+ mongodb: {
20
+ provider: 'mongodb',
21
+ devUrl: 'mongodb://localhost:27017/nestforge?replicaSet=rs0',
22
+ testUrl: 'mongodb://localhost:27017/nestforge_test?replicaSet=rs0',
23
+ },
19
24
  };
20
25
  export async function applyDatabaseConfig(targetDir, database) {
21
26
  const databaseChoice = database;
@@ -24,6 +29,10 @@ export async function applyDatabaseConfig(targetDir, database) {
24
29
  return;
25
30
  }
26
31
  await updateSchemaProvider(targetDir, config.provider);
32
+ if (databaseChoice === 'mongodb') {
33
+ await updateMongoSchema(targetDir);
34
+ await updateMongoScripts(targetDir);
35
+ }
27
36
  await updateDatabaseType(targetDir, '.env.example', databaseChoice);
28
37
  await updateDatabaseType(targetDir, '.env.test', databaseChoice);
29
38
  await updateDatabaseUrl(targetDir, '.env.example', config.devUrl);
@@ -56,4 +65,30 @@ async function updateDatabaseUrl(targetDir, fileName, url) {
56
65
  const updated = content.replace(/^DATABASE_URL=.*$/m, `DATABASE_URL="${url}"`);
57
66
  await fs.writeFile(filePath, updated, 'utf-8');
58
67
  }
68
+ async function updateMongoScripts(targetDir) {
69
+ const packageJsonPath = path.join(targetDir, 'package.json');
70
+ if (!(await fs.pathExists(packageJsonPath))) {
71
+ return;
72
+ }
73
+ const packageJson = await fs.readJson(packageJsonPath);
74
+ packageJson.scripts['prisma:push'] =
75
+ 'prisma db push';
76
+ packageJson.scripts['pretest:e2e'] =
77
+ 'dotenv -e .env.test -- npx prisma db push --skip-generate';
78
+ delete packageJson.scripts['prisma:migrate'];
79
+ delete packageJson.scripts['prisma:deploy'];
80
+ await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
81
+ }
82
+ async function updateMongoSchema(targetDir) {
83
+ const schemaPath = path.join(targetDir, 'prisma', 'schema.prisma');
84
+ if (!(await fs.pathExists(schemaPath))) {
85
+ return;
86
+ }
87
+ const schema = await fs.readFile(schemaPath, 'utf8');
88
+ const updated = schema
89
+ .replaceAll('@id @default(uuid())', '@id @default(auto()) @map("_id") @db.ObjectId')
90
+ .replace(/id\s+String\s+@id\r?\n\s+sid String @unique/, 'id String @id @map("_id")\n sid String @unique')
91
+ .replace(/userId(\s+)String(?!\s+@db\.ObjectId)/g, 'userId$1String @db.ObjectId');
92
+ await fs.writeFile(schemaPath, updated, 'utf8');
93
+ }
59
94
  //# sourceMappingURL=database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/features/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/features/database.ts"],"names":[],"mappings":"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"}
@@ -34,10 +34,24 @@ export async function applyLanguageTransform(targetDir, language, orm) {
34
34
  await fs.remove(path.join(targetDir, 'tsconfig.build.json'));
35
35
  await fs.remove(path.join(targetDir, 'nest-cli.json'));
36
36
  await updatePackageJson(targetDir, orm);
37
+ await updateVitestConfigs(targetDir);
37
38
  if (orm === 'drizzle') {
38
39
  await updateDrizzleWorkflow(targetDir);
39
40
  }
40
41
  }
42
+ async function updateVitestConfigs(targetDir) {
43
+ for (const configName of [
44
+ 'vitest.config.js',
45
+ 'vitest.e2e.config.js',
46
+ ]) {
47
+ const configPath = path.join(targetDir, configName);
48
+ if (!(await fs.pathExists(configPath))) {
49
+ continue;
50
+ }
51
+ const config = await fs.readFile(configPath, 'utf8');
52
+ await fs.writeFile(configPath, config.replaceAll('.ts', '.js'), 'utf8');
53
+ }
54
+ }
41
55
  async function collectTypeScriptFiles(dir) {
42
56
  const entries = await fs.readdir(dir, { withFileTypes: true });
43
57
  const files = [];
@@ -74,10 +88,14 @@ async function removeTypeDeclarationFiles(dir) {
74
88
  }
75
89
  async function transpileFile(filePath) {
76
90
  const source = await fs.readFile(filePath, 'utf8');
91
+ const isTestFile = filePath.split(path.sep).includes('test') ||
92
+ filePath.endsWith('.spec.ts');
77
93
  const result = ts.transpileModule(source, {
78
94
  compilerOptions: {
79
95
  target: ts.ScriptTarget.ES2022,
80
- module: ts.ModuleKind.CommonJS,
96
+ module: isTestFile
97
+ ? ts.ModuleKind.ESNext
98
+ : ts.ModuleKind.CommonJS,
81
99
  experimentalDecorators: true,
82
100
  emitDecoratorMetadata: true,
83
101
  esModuleInterop: true,
@@ -1 +1 @@
1
- {"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/features/language.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/features/language.ts"],"names":[],"mappings":"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"}