@koalarx/nest-cli 1.2.24 → 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 (106) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +43 -48
  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 +24 -26
  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/scripts/fix-extensions.mjs +0 -28
  45. package/code-base/startup-project/src/domain/services/.gitkeep +0 -0
  46. package/code-base/startup-project/src/infra/services/.gitkeep +0 -0
  47. package/code-base/startup-project/tsconfig.build-prisma.json +0 -21
  48. package/code-base/startup-project/tsconfig.build.json +0 -9
  49. package/code-base/startup-project/vitest.config.e2e.mts +0 -19
  50. package/code-base/startup-project/vitest.config.mts +0 -18
  51. package/commands/new-project/index.ts +0 -34
  52. package/index.ts +0 -42
  53. package/utils/copy-folder.ts +0 -25
  54. /package/{code-base → templates}/gitignore/config.txt +0 -0
  55. /package/{code-base → templates}/startup-project/.gitattributes +0 -0
  56. /package/{code-base → templates}/startup-project/.vscode/tasks.json +0 -0
  57. /package/{code-base → templates}/startup-project/prisma/migrations/migration_lock.toml +0 -0
  58. /package/{code-base → templates}/startup-project/prisma/schema.prisma +0 -0
  59. /package/{code-base → templates}/startup-project/prisma.config.ts +0 -0
  60. /package/{code-base → templates}/startup-project/src/application/mapping/mapping.profile.ts +0 -0
  61. /package/{code-base → templates}/startup-project/src/application/mapping/person.mapping.ts +0 -0
  62. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.handler.spec.ts +0 -0
  63. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.handler.ts +0 -0
  64. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.request.ts +0 -0
  65. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.response.ts +0 -0
  66. /package/{code-base → templates}/startup-project/src/application/person/create/create-person.validator.ts +0 -0
  67. /package/{code-base → templates}/startup-project/src/application/person/create-person-job/create-person-job.ts +0 -0
  68. /package/{code-base → templates}/startup-project/src/application/person/delete/delete-person.handler.spec.ts +0 -0
  69. /package/{code-base → templates}/startup-project/src/application/person/delete/delete-person.handler.ts +0 -0
  70. /package/{code-base → templates}/startup-project/src/application/person/delete-inative-job/delete-inactive-job.ts +0 -0
  71. /package/{code-base → templates}/startup-project/src/application/person/events/inactive-person/inactive-person-event.ts +0 -0
  72. /package/{code-base → templates}/startup-project/src/application/person/events/inactive-person/inactive-person-handler.ts +0 -0
  73. /package/{code-base → templates}/startup-project/src/application/person/events/person-event.job.ts +0 -0
  74. /package/{code-base → templates}/startup-project/src/application/person/read/read-person.handler.spec.ts +0 -0
  75. /package/{code-base → templates}/startup-project/src/application/person/read/read-person.handler.ts +0 -0
  76. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.handler.spec.ts +0 -0
  77. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.handler.ts +0 -0
  78. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.request.ts +0 -0
  79. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.response.ts +0 -0
  80. /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many.validator.ts +0 -0
  81. /package/{code-base → templates}/startup-project/src/application/person/update/update-person.handler.spec.ts +0 -0
  82. /package/{code-base → templates}/startup-project/src/application/person/update/update-person.handler.ts +0 -0
  83. /package/{code-base → templates}/startup-project/src/application/person/update/update-person.validator.ts +0 -0
  84. /package/{code-base → templates}/startup-project/src/core/env.ts +0 -0
  85. /package/{code-base → templates}/startup-project/src/domain/dtos/read-many-person.dto.ts +0 -0
  86. /package/{code-base → templates}/startup-project/src/domain/entities/person/person-address.ts +0 -0
  87. /package/{code-base → templates}/startup-project/src/domain/entities/person/person-phone.ts +0 -0
  88. /package/{code-base → templates}/startup-project/src/domain/repositories/iperson.repository.ts +0 -0
  89. /package/{code-base → templates}/startup-project/src/host/app.module.ts +0 -0
  90. /package/{code-base → templates}/startup-project/src/host/controllers/controller.module.ts +0 -0
  91. /package/{code-base → templates}/startup-project/src/host/controllers/person/create-person.controller.ts +0 -0
  92. /package/{code-base → templates}/startup-project/src/host/controllers/person/delete-person.controller.ts +0 -0
  93. /package/{code-base → templates}/startup-project/src/host/controllers/person/person.controller.e2e-spec.ts +0 -0
  94. /package/{code-base → templates}/startup-project/src/host/controllers/person/person.module.ts +0 -0
  95. /package/{code-base → templates}/startup-project/src/host/controllers/person/read-many-person.controller.ts +0 -0
  96. /package/{code-base → templates}/startup-project/src/host/controllers/person/read-person.controller.ts +0 -0
  97. /package/{code-base → templates}/startup-project/src/host/controllers/person/router.config.ts +0 -0
  98. /package/{code-base → templates}/startup-project/src/host/controllers/person/update-person.controller.ts +0 -0
  99. /package/{code-base → templates}/startup-project/src/host/main.ts +0 -0
  100. /package/{code-base → templates}/startup-project/src/infra/database/repositories/person.repository.ts +0 -0
  101. /package/{code-base → templates}/startup-project/src/infra/database/repositories/repositories.module.ts +0 -0
  102. /package/{code-base → templates}/startup-project/src/infra/infra.module.ts +0 -0
  103. /package/{code-base → templates}/startup-project/src/test/create-e2e-test-app.ts +0 -0
  104. /package/{code-base → templates}/startup-project/src/test/create-unit-test-app.ts +0 -0
  105. /package/{code-base → templates}/startup-project/src/test/mockup/person/create-person-request.mockup.ts +0 -0
  106. /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,76 +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
23
-
24
- # Entrar no diretório
25
- cd meu-projeto
26
-
27
- # Iniciar desenvolvimento (as dependências são instaladas automaticamente com bun)
28
- bun start:dev
29
19
  ```
30
20
 
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.
32
-
33
- ## Comandos Disponíveis
34
-
35
- ### `prisma:generate`
36
-
37
- Comando especializado que substitui o comando nativo do Prisma para compatibilidade com a biblioteca `@koalarx/nest`.
21
+ Ou de forma interativa:
38
22
 
39
23
  ```bash
40
- bun run prisma:generate
24
+ koala-nest new
41
25
  ```
42
26
 
43
- #### O problema:
44
-
45
- As versões mais recentes do Prisma utilizam um provider que gera arquivos de cliente com importações que não funcionam corretamente ao ser integrados com a biblioteca `@koalarx/nest`. O comando nativo `prisma generate` não resolve esses problemas automaticamente.
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
46
38
 
47
- #### A solução:
39
+ ## 📁 Estrutura Gerada
48
40
 
49
- Este comando executa uma sequência de operações para corrigir os importes e garantir compatibilidade total:
50
-
51
- 1. **`prisma generate`** — Gera o cliente Prisma baseado no schema atual
52
- 2. **`tsc --project tsconfig.build-prisma.json`** — Compila os arquivos TypeScript gerados na pasta `prisma/generated` para JavaScript utilizando a configuração específica do Prisma
53
- 3. **`bun prisma/scripts/fix-extensions.mjs`** Corrige os importes ESM dos arquivos compilados, adicionando extensões `.js` onde necessário
54
-
55
- #### Por que não usar `prisma generate` diretamente:
56
-
57
- O comando nativo do Prisma gera importações relativas sem extensão (ex: `from './generated'`), que não funcionam corretamente com ESM e causam incompatibilidades com a biblioteca `@koalarx/nest`. Este comando customizado resolve isso automaticamente.
58
-
59
- #### Quando executar:
60
-
61
- - Após modificar `prisma/schema.prisma`
62
- - Ao atualizar as versões do Prisma ou NestJS
63
- - Antes de fazer deploy em produção (incluído no CI/CD)
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
57
+ ```
64
58
 
65
- > **Importante:** Sempre use `bun run prisma:generate` ao invés do comando nativo `prisma generate` ao trabalhar com projetos `@koalarx/nest`.
59
+ ## 🔗 Links Úteis
66
60
 
67
- ## 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)
68
64
 
69
- Para guias detalhados, exemplos avançados e referência de features, consulte:
65
+ ## 🤝 Contribuindo
70
66
 
71
- - **[@koalarx/nest](https://github.com/igordrangel/koala-nest)** Documentação da biblioteca principal
72
- - **[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.
73
68
 
74
69
  ## 📄 Licença
75
70
 
76
- 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
+ }