@koalarx/nest-cli 1.2.23 → 1.19.1

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 (115) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +48 -19
  3. package/commands/new-project/index.js +70 -0
  4. package/commands/new-project/new-project.js +69 -0
  5. package/index.js +31 -30707
  6. package/package.json +12 -33
  7. package/{code-base → templates}/env/config.txt +0 -2
  8. package/templates/startup-project/.dockerignore +7 -0
  9. package/templates/startup-project/.prettierrc.json +9 -0
  10. package/templates/startup-project/.vscode/launch.json +28 -0
  11. package/templates/startup-project/.vscode/mcp.json +11 -0
  12. package/{code-base → templates}/startup-project/.vscode/settings.json +23 -9
  13. package/templates/startup-project/Dockerfile +49 -0
  14. package/templates/startup-project/README.md +33 -0
  15. package/templates/startup-project/bunfig.toml +10 -0
  16. package/templates/startup-project/eslint.config.mts +85 -0
  17. package/templates/startup-project/nest-cli.json +35 -0
  18. package/{code-base → templates}/startup-project/package.json +27 -28
  19. package/templates/startup-project/prisma/migrations/20250320165043_init/migration.sql +19 -0
  20. package/{code-base/startup-project/prisma/migrations/20250326220607_init → templates/startup-project/prisma/migrations/20250320171528_aplicando_map_de_tabelas_e_colunas}/migration.sql +16 -13
  21. package/templates/startup-project/prisma/migrations/20250321190248_incluindo_status_ao_person/migration.sql +2 -0
  22. package/templates/startup-project/prisma/migrations/20250326185507_incluindo_tabela_de_endereco/migration.sql +19 -0
  23. package/templates/startup-project/prisma/migrations/20250326195627_aplicando_on_delete_cascade/migration.sql +5 -0
  24. package/templates/startup-project/prisma/migrations/20250326200821_removendo_ondelete_cascade/migration.sql +5 -0
  25. package/{code-base → templates}/startup-project/src/application/person/common/persist-person.request.ts +2 -2
  26. package/{code-base → templates}/startup-project/src/application/person/read/read-person.response.ts +2 -2
  27. package/{code-base → templates}/startup-project/src/application/person/update/update-person.request.ts +2 -2
  28. package/{code-base → templates}/startup-project/src/domain/entities/person/person.ts +2 -2
  29. package/{code-base → templates}/startup-project/src/infra/database/db-transaction-context.ts +0 -1
  30. package/{code-base → templates}/startup-project/src/test/setup-e2e.ts +7 -2
  31. package/templates/startup-project/tsconfig.app.json +8 -0
  32. package/templates/startup-project/tsconfig.build.json +9 -0
  33. package/{code-base → templates}/startup-project/tsconfig.json +9 -8
  34. package/templates/startup-project/tsconfig.prisma.json +16 -0
  35. package/tsconfig.tsbuildinfo +1 -0
  36. package/code-base/startup-project/.eslintignore +0 -2
  37. package/code-base/startup-project/.eslintrc.js +0 -20
  38. package/code-base/startup-project/.swcrc +0 -23
  39. package/code-base/startup-project/.vscode/launch.json +0 -41
  40. package/code-base/startup-project/Dockerfile +0 -26
  41. package/code-base/startup-project/LICENSE +0 -21
  42. package/code-base/startup-project/README.md +0 -5
  43. package/code-base/startup-project/nest-cli.json +0 -19
  44. package/code-base/startup-project/prisma/generated/browser.ts +0 -34
  45. package/code-base/startup-project/prisma/generated/client.ts +0 -54
  46. package/code-base/startup-project/prisma/generated/commonInputTypes.ts +0 -172
  47. package/code-base/startup-project/prisma/generated/enums.ts +0 -15
  48. package/code-base/startup-project/prisma/generated/internal/class.ts +0 -210
  49. package/code-base/startup-project/prisma/generated/internal/prismaNamespace.ts +0 -927
  50. package/code-base/startup-project/prisma/generated/internal/prismaNamespaceBrowser.ts +0 -116
  51. package/code-base/startup-project/prisma/generated/models/Person.ts +0 -1497
  52. package/code-base/startup-project/prisma/generated/models/PersonAddress.ts +0 -1265
  53. package/code-base/startup-project/prisma/generated/models/PersonPhone.ts +0 -1315
  54. package/code-base/startup-project/prisma/generated/models.ts +0 -14
  55. package/code-base/startup-project/src/domain/services/.gitkeep +0 -0
  56. package/code-base/startup-project/src/infra/services/.gitkeep +0 -0
  57. package/code-base/startup-project/tsconfig.build.json +0 -4
  58. package/code-base/startup-project/vitest.config.e2e.mts +0 -19
  59. package/code-base/startup-project/vitest.config.mts +0 -18
  60. package/commands/new-project/index.ts +0 -34
  61. package/index.ts +0 -42
  62. package/utils/copy-folder.ts +0 -25
  63. /package/{code-base → templates}/gitignore/config.txt +0 -0
  64. /package/{code-base → templates}/startup-project/.gitattributes +0 -0
  65. /package/{code-base → templates}/startup-project/.vscode/tasks.json +0 -0
  66. /package/{code-base → templates}/startup-project/prisma/migrations/migration_lock.toml +0 -0
  67. /package/{code-base → templates}/startup-project/prisma/schema.prisma +0 -0
  68. /package/{code-base → templates}/startup-project/prisma.config.ts +0 -0
  69. /package/{code-base → templates}/startup-project/src/application/mapping/mapping.profile.ts +0 -0
  70. /package/{code-base → templates}/startup-project/src/application/mapping/person.mapping.ts +0 -0
  71. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.handler.spec.ts +0 -0
  72. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.handler.ts +0 -0
  73. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.request.ts +0 -0
  74. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.response.ts +0 -0
  75. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.validator.ts +0 -0
  76. /package/{code-base → templates}/startup-project/src/application/person/create-person-job/create-person-job.ts +0 -0
  77. /package/{code-base → templates}/startup-project/src/application/person/delete/delete-person.handler.spec.ts +0 -0
  78. /package/{code-base → templates}/startup-project/src/application/person/delete/delete-person.handler.ts +0 -0
  79. /package/{code-base → templates}/startup-project/src/application/person/delete-inative-job/delete-inactive-job.ts +0 -0
  80. /package/{code-base → templates}/startup-project/src/application/person/events/inactive-person/inactive-person-event.ts +0 -0
  81. /package/{code-base → templates}/startup-project/src/application/person/events/inactive-person/inactive-person-handler.ts +0 -0
  82. /package/{code-base → templates}/startup-project/src/application/person/events/person-event.job.ts +0 -0
  83. /package/{code-base → templates}/startup-project/src/application/person/read/read-person.handler.spec.ts +0 -0
  84. /package/{code-base → templates}/startup-project/src/application/person/read/read-person.handler.ts +0 -0
  85. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.handler.spec.ts +0 -0
  86. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.handler.ts +0 -0
  87. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.request.ts +0 -0
  88. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.response.ts +0 -0
  89. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many.validator.ts +0 -0
  90. /package/{code-base → templates}/startup-project/src/application/person/update/update-person.handler.spec.ts +0 -0
  91. /package/{code-base → templates}/startup-project/src/application/person/update/update-person.handler.ts +0 -0
  92. /package/{code-base → templates}/startup-project/src/application/person/update/update-person.validator.ts +0 -0
  93. /package/{code-base → templates}/startup-project/src/core/env.ts +0 -0
  94. /package/{code-base → templates}/startup-project/src/domain/dtos/read-many-person.dto.ts +0 -0
  95. /package/{code-base → templates}/startup-project/src/domain/entities/person/person-address.ts +0 -0
  96. /package/{code-base → templates}/startup-project/src/domain/entities/person/person-phone.ts +0 -0
  97. /package/{code-base → templates}/startup-project/src/domain/repositories/iperson.repository.ts +0 -0
  98. /package/{code-base → templates}/startup-project/src/host/app.module.ts +0 -0
  99. /package/{code-base → templates}/startup-project/src/host/controllers/controller.module.ts +0 -0
  100. /package/{code-base → templates}/startup-project/src/host/controllers/person/create-person.controller.ts +0 -0
  101. /package/{code-base → templates}/startup-project/src/host/controllers/person/delete-person.controller.ts +0 -0
  102. /package/{code-base → templates}/startup-project/src/host/controllers/person/person.controller.e2e-spec.ts +0 -0
  103. /package/{code-base → templates}/startup-project/src/host/controllers/person/person.module.ts +0 -0
  104. /package/{code-base → templates}/startup-project/src/host/controllers/person/read-many-person.controller.ts +0 -0
  105. /package/{code-base → templates}/startup-project/src/host/controllers/person/read-person.controller.ts +0 -0
  106. /package/{code-base → templates}/startup-project/src/host/controllers/person/router.config.ts +0 -0
  107. /package/{code-base → templates}/startup-project/src/host/controllers/person/update-person.controller.ts +0 -0
  108. /package/{code-base → templates}/startup-project/src/host/main.ts +0 -0
  109. /package/{code-base → templates}/startup-project/src/infra/database/repositories/person.repository.ts +0 -0
  110. /package/{code-base → templates}/startup-project/src/infra/database/repositories/repositories.module.ts +0 -0
  111. /package/{code-base → templates}/startup-project/src/infra/infra.module.ts +0 -0
  112. /package/{code-base → templates}/startup-project/src/test/create-e2e-test-app.ts +0 -0
  113. /package/{code-base → templates}/startup-project/src/test/create-unit-test-app.ts +0 -0
  114. /package/{code-base → templates}/startup-project/src/test/mockup/person/create-person-request.mockup.ts +0 -0
  115. /package/{code-base → templates}/startup-project/src/test/repositories/person.repository.ts +0 -0
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Igor D. Rangel
3
+ Copyright (c) 2023 Igor D. Rangel
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,42 +1,71 @@
1
1
  # @koalarx/nest-cli
2
2
 
3
- Ferramenta oficial de CLI para scaffolding rápido de projetos NestJS estruturados com padrões DDD.
4
-
5
- ## 📋 Sobre
6
-
7
- `@koalarx/nest-cli` é a forma recomendada para inicializar novos projetos que utilizam a biblioteca [@koalarx/nest](https://github.com/igordrangel/koala-nest). Cria automaticamente a estrutura de diretórios, configurações de ambiente e setup inicial.
3
+ CLI oficial para criar projetos utilizando **Koala Nest** - uma abstração robusta do NestJS seguindo princípios de Domain-Driven Design (DDD).
8
4
 
9
5
  ## 📦 Instalação
10
6
 
11
7
  ```bash
8
+ npm install -g @koalarx/nest-cli
9
+ # ou
12
10
  bun add -g @koalarx/nest-cli
13
11
  ```
14
12
 
15
- **Requisitos:**
16
- - Bun 1.0.0+ ([Instale o Bun](https://bun.sh))
13
+ ## 🚀 Uso
17
14
 
18
- ## 🚀 Uso Rápido
15
+ ### Criar Novo Projeto
19
16
 
20
17
  ```bash
21
- # Criar novo projeto
22
18
  koala-nest new meu-projeto
19
+ ```
23
20
 
24
- # Entrar no diretório
25
- cd meu-projeto
21
+ Ou de forma interativa:
26
22
 
27
- # Iniciar desenvolvimento (as dependências são instaladas automaticamente com bun)
28
- bun start:dev
23
+ ```bash
24
+ koala-nest new
25
+ ```
26
+
27
+ Isso criará um novo projeto com:
28
+ - ✅ Estrutura DDD completa (Domain, Application, Host, Infra)
29
+ - ✅ Configuração do Prisma
30
+ - ✅ Exemplo de CRUD com Person
31
+ - ✅ Testes unitários e E2E configurados
32
+ - ✅ Bun configurado
33
+ - ✅ Dockerfile
34
+ - ✅ ESLint e Prettier
35
+ - ✅ AutoMapping
36
+ - ✅ Validação com Zod
37
+ - ✅ Swagger/Scalar
38
+
39
+ ## 📁 Estrutura Gerada
40
+
41
+ ```
42
+ meu-projeto/
43
+ ├── src/
44
+ │ ├── application/ # Handlers, Validators, Mapping
45
+ │ ├── core/ # Configurações e variáveis globais
46
+ │ ├── domain/ # Entities, DTOs, Repositories
47
+ │ ├── host/ # Controllers e Modules
48
+ │ ├── infra/ # Database e implementações
49
+ │ └── test/ # Configurações de teste
50
+ ├── prisma/
51
+ │ ├── schema.prisma
52
+ │ └── migrations/
53
+ ├── .env
54
+ ├── Dockerfile
55
+ ├── package.json
56
+ └── tsconfig.json
29
57
  ```
30
58
 
31
- > **Nota:** A CLI utiliza **Bun** por debaixo dos panos para instalar os pacotes do projeto no comando `koala-nest new`. Isso torna o processo mais rápido e eficiente.
59
+ ## 🔗 Links Úteis
32
60
 
33
- ## 📖 Documentação Completa
61
+ - [Documentação Koala Nest](https://github.com/igordrangel/koala-nest)
62
+ - [Exemplo Completo](https://github.com/igordrangel/koala-nest/blob/main/docs/EXAMPLE.md)
63
+ - [NPM Package](https://www.npmjs.com/package/@koalarx/nest)
34
64
 
35
- Para guias detalhados, exemplos avançados e referência de features, consulte:
65
+ ## 🤝 Contribuindo
36
66
 
37
- - **[@koalarx/nest](https://github.com/igordrangel/koala-nest)** Documentação da biblioteca principal
38
- - **[Exemplo de Projeto](./code-base/startup-project)** — Estrutura padrão gerada pela CLI
67
+ Contribuições são bem-vindas! Veja o [repositório principal](https://github.com/igordrangel/koala-nest) para mais informações.
39
68
 
40
69
  ## 📄 Licença
41
70
 
42
- MIT
71
+ ISC © Igor D. Rangel
@@ -0,0 +1,70 @@
1
+ import chalk from 'chalk';
2
+ import { execSync } from 'node:child_process';
3
+ import { cpSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ const TEMPLATE_BASE = join(__dirname, '../../templates/startup-project');
9
+ const TEMPLATES_DIR = join(__dirname, '../../templates');
10
+ export async function newProject(projectName) {
11
+ const targetDir = join(process.cwd(), projectName);
12
+ console.log(chalk.blue('🚀 Criando projeto Koala Nest...'));
13
+ console.log(chalk.gray(`📁 Destino: ${targetDir}\n`));
14
+ console.log(chalk.yellow('📋 Copiando estrutura base...'));
15
+ cpSync(TEMPLATE_BASE, targetDir, {
16
+ recursive: true,
17
+ filter: (src) => {
18
+ const isBlacklisted = src.includes('node_modules') ||
19
+ (src.includes('dist') && !src.includes('dist-cli')) ||
20
+ src.includes('.git');
21
+ return !isBlacklisted;
22
+ }
23
+ });
24
+ console.log(chalk.yellow('📦 Adicionando configurações extras...'));
25
+ const dockerfilePath = join(TEMPLATES_DIR, 'startup-project', 'Dockerfile');
26
+ try {
27
+ cpSync(dockerfilePath, join(targetDir, 'Dockerfile'));
28
+ }
29
+ catch {
30
+ console.log(chalk.red('⚠️ Dockerfile não encontrado nos templates, pulando...'));
31
+ }
32
+ console.log(chalk.yellow('⚙️ Configurando package.json...'));
33
+ const packageJsonPath = join(targetDir, 'package.json');
34
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
35
+ packageJson.name = projectName;
36
+ writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
37
+ console.log(chalk.yellow('📄 Atualizando README...'));
38
+ const readmePath = join(targetDir, 'README.md');
39
+ let readme = readFileSync(readmePath, 'utf-8');
40
+ readme = readme.replace(/\[projectName\]/g, projectName);
41
+ writeFileSync(readmePath, readme);
42
+ console.log(chalk.yellow('🔐 Criando arquivo .env...'));
43
+ const envTemplate = readFileSync(join(TEMPLATES_DIR, 'env', 'config.txt'), 'utf-8');
44
+ const envContent = envTemplate.replace(/\[projectName\]/g, projectName.replace(/-/g, '_'));
45
+ writeFileSync(join(targetDir, '.env'), envContent);
46
+ console.log(chalk.yellow('🚫 Criando .gitignore...'));
47
+ const gitIgnoreContent = readFileSync(join(TEMPLATES_DIR, 'gitignore', 'config.txt'), 'utf-8');
48
+ writeFileSync(join(targetDir, '.gitignore'), gitIgnoreContent);
49
+ console.log(chalk.yellow('\n📥 Instalando dependências...'));
50
+ try {
51
+ execSync(`cd ${projectName} && bun install`, {
52
+ stdio: 'inherit',
53
+ });
54
+ console.log(chalk.yellow('🔨 Gerando Prisma Client...'));
55
+ execSync(`cd ${projectName} && bun run prisma:generate`, {
56
+ stdio: 'inherit',
57
+ });
58
+ }
59
+ catch {
60
+ console.log(chalk.red('⚠️ Erro ao instalar dependências. Execute manualmente:'));
61
+ console.log(chalk.gray(` cd ${projectName}`));
62
+ console.log(chalk.gray(` bun install`));
63
+ console.log(chalk.gray(` bun run prisma:generate`));
64
+ }
65
+ console.log(chalk.green('\n✅ Projeto criado com sucesso!'));
66
+ console.log(chalk.cyan('\n📚 Próximos passos:'));
67
+ console.log(chalk.gray(` cd ${projectName}`));
68
+ console.log(chalk.gray(` bun run start:dev`));
69
+ console.log(chalk.gray(`\n📖 Documentação: https://github.com/igordrangel/koala-nest\n`));
70
+ }
@@ -0,0 +1,69 @@
1
+ import chalk from 'chalk';
2
+ import { execSync } from 'node:child_process';
3
+ import { cpSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ const TEMPLATE_BASE = join(__dirname, '../../../example');
9
+ const TEMPLATES_DIR = join(__dirname, '../../templates');
10
+ export async function newProject(projectName) {
11
+ const targetDir = join(process.cwd(), projectName);
12
+ console.log(chalk.blue('🚀 Criando projeto Koala Nest...'));
13
+ console.log(chalk.gray(`📁 Destino: ${targetDir}\n`));
14
+ console.log(chalk.yellow('📋 Copiando estrutura base...'));
15
+ cpSync(TEMPLATE_BASE, targetDir, {
16
+ recursive: true,
17
+ filter: (src) => {
18
+ return !src.includes('node_modules') &&
19
+ !src.includes('dist') &&
20
+ !src.includes('.git');
21
+ }
22
+ });
23
+ console.log(chalk.yellow('📦 Adicionando configurações extras...'));
24
+ const dockerfilePath = join(TEMPLATES_DIR, 'startup-project', 'Dockerfile');
25
+ try {
26
+ cpSync(dockerfilePath, join(targetDir, 'Dockerfile'));
27
+ }
28
+ catch {
29
+ console.log(chalk.red('⚠️ Dockerfile não encontrado nos templates, pulando...'));
30
+ }
31
+ console.log(chalk.yellow('⚙️ Configurando package.json...'));
32
+ const packageJsonPath = join(targetDir, 'package.json');
33
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
34
+ packageJson.name = projectName;
35
+ writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
36
+ console.log(chalk.yellow('📄 Atualizando README...'));
37
+ const readmePath = join(targetDir, 'README.md');
38
+ let readme = readFileSync(readmePath, 'utf-8');
39
+ readme = readme.replace(/\[projectName\]/g, projectName);
40
+ writeFileSync(readmePath, readme);
41
+ console.log(chalk.yellow('🔐 Criando arquivo .env...'));
42
+ const envTemplate = readFileSync(join(TEMPLATES_DIR, 'env', 'config.txt'), 'utf-8');
43
+ const envContent = envTemplate.replace(/\[projectName\]/g, projectName.replace(/-/g, '_'));
44
+ writeFileSync(join(targetDir, '.env'), envContent);
45
+ console.log(chalk.yellow('🚫 Criando .gitignore...'));
46
+ const gitIgnoreContent = readFileSync(join(TEMPLATES_DIR, 'gitignore', 'config.txt'), 'utf-8');
47
+ writeFileSync(join(targetDir, '.gitignore'), gitIgnoreContent);
48
+ console.log(chalk.yellow('\n📥 Instalando dependências...'));
49
+ try {
50
+ execSync(`cd ${projectName} && bun install`, {
51
+ stdio: 'inherit',
52
+ });
53
+ console.log(chalk.yellow('🔨 Gerando Prisma Client...'));
54
+ execSync(`cd ${projectName} && bun build:prisma`, {
55
+ stdio: 'inherit',
56
+ });
57
+ }
58
+ catch {
59
+ console.log(chalk.red('⚠️ Erro ao instalar dependências. Execute manualmente:'));
60
+ console.log(chalk.gray(` cd ${projectName}`));
61
+ console.log(chalk.gray(` bun install`));
62
+ console.log(chalk.gray(` bun build:prisma`));
63
+ }
64
+ console.log(chalk.green('\n✅ Projeto criado com sucesso!'));
65
+ console.log(chalk.cyan('\n📚 Próximos passos:'));
66
+ console.log(chalk.gray(` cd ${projectName}`));
67
+ console.log(chalk.gray(` bun run start:dev`));
68
+ console.log(chalk.gray(`\n📖 Documentação: https://github.com/igordrangel/koala-nest\n`));
69
+ }