@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.
- package/LICENSE +1 -1
- package/README.md +43 -48
- package/commands/new-project/index.js +70 -0
- package/commands/new-project/new-project.js +69 -0
- package/index.js +31 -30707
- package/package.json +12 -33
- package/{code-base → templates}/env/config.txt +0 -2
- package/templates/startup-project/.dockerignore +7 -0
- package/templates/startup-project/.prettierrc.json +9 -0
- package/templates/startup-project/.vscode/launch.json +28 -0
- package/templates/startup-project/.vscode/mcp.json +11 -0
- package/{code-base → templates}/startup-project/.vscode/settings.json +23 -9
- package/templates/startup-project/Dockerfile +49 -0
- package/templates/startup-project/README.md +33 -0
- package/templates/startup-project/bunfig.toml +10 -0
- package/templates/startup-project/eslint.config.mts +85 -0
- package/templates/startup-project/nest-cli.json +35 -0
- package/{code-base → templates}/startup-project/package.json +24 -26
- package/templates/startup-project/prisma/migrations/20250320165043_init/migration.sql +19 -0
- 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
- package/templates/startup-project/prisma/migrations/20250321190248_incluindo_status_ao_person/migration.sql +2 -0
- package/templates/startup-project/prisma/migrations/20250326185507_incluindo_tabela_de_endereco/migration.sql +19 -0
- package/templates/startup-project/prisma/migrations/20250326195627_aplicando_on_delete_cascade/migration.sql +5 -0
- package/templates/startup-project/prisma/migrations/20250326200821_removendo_ondelete_cascade/migration.sql +5 -0
- package/{code-base → templates}/startup-project/src/application/person/common/persist-person.request.ts +2 -2
- package/{code-base → templates}/startup-project/src/application/person/read/read-person.response.ts +2 -2
- package/{code-base → templates}/startup-project/src/application/person/update/update-person.request.ts +2 -2
- package/{code-base → templates}/startup-project/src/domain/entities/person/person.ts +2 -2
- package/{code-base → templates}/startup-project/src/infra/database/db-transaction-context.ts +0 -1
- package/{code-base → templates}/startup-project/src/test/setup-e2e.ts +7 -2
- package/templates/startup-project/tsconfig.app.json +8 -0
- package/templates/startup-project/tsconfig.build.json +9 -0
- package/{code-base → templates}/startup-project/tsconfig.json +9 -8
- package/templates/startup-project/tsconfig.prisma.json +16 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/code-base/startup-project/.eslintignore +0 -2
- package/code-base/startup-project/.eslintrc.js +0 -20
- package/code-base/startup-project/.swcrc +0 -23
- package/code-base/startup-project/.vscode/launch.json +0 -41
- package/code-base/startup-project/Dockerfile +0 -26
- package/code-base/startup-project/LICENSE +0 -21
- package/code-base/startup-project/README.md +0 -5
- package/code-base/startup-project/nest-cli.json +0 -19
- package/code-base/startup-project/prisma/scripts/fix-extensions.mjs +0 -28
- package/code-base/startup-project/src/domain/services/.gitkeep +0 -0
- package/code-base/startup-project/src/infra/services/.gitkeep +0 -0
- package/code-base/startup-project/tsconfig.build-prisma.json +0 -21
- package/code-base/startup-project/tsconfig.build.json +0 -9
- package/code-base/startup-project/vitest.config.e2e.mts +0 -19
- package/code-base/startup-project/vitest.config.mts +0 -18
- package/commands/new-project/index.ts +0 -34
- package/index.ts +0 -42
- package/utils/copy-folder.ts +0 -25
- /package/{code-base → templates}/gitignore/config.txt +0 -0
- /package/{code-base → templates}/startup-project/.gitattributes +0 -0
- /package/{code-base → templates}/startup-project/.vscode/tasks.json +0 -0
- /package/{code-base → templates}/startup-project/prisma/migrations/migration_lock.toml +0 -0
- /package/{code-base → templates}/startup-project/prisma/schema.prisma +0 -0
- /package/{code-base → templates}/startup-project/prisma.config.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/mapping/mapping.profile.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/mapping/person.mapping.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/create/create-person.handler.spec.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/create/create-person.handler.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/create/create-person.request.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/create/create-person.response.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/create/create-person.validator.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/create-person-job/create-person-job.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/delete/delete-person.handler.spec.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/delete/delete-person.handler.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/delete-inative-job/delete-inactive-job.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/events/inactive-person/inactive-person-event.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/events/inactive-person/inactive-person-handler.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/events/person-event.job.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/read/read-person.handler.spec.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/read/read-person.handler.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.handler.spec.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.handler.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.request.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many-person.response.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/read-many/read-many.validator.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/update/update-person.handler.spec.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/update/update-person.handler.ts +0 -0
- /package/{code-base → templates}/startup-project/src/application/person/update/update-person.validator.ts +0 -0
- /package/{code-base → templates}/startup-project/src/core/env.ts +0 -0
- /package/{code-base → templates}/startup-project/src/domain/dtos/read-many-person.dto.ts +0 -0
- /package/{code-base → templates}/startup-project/src/domain/entities/person/person-address.ts +0 -0
- /package/{code-base → templates}/startup-project/src/domain/entities/person/person-phone.ts +0 -0
- /package/{code-base → templates}/startup-project/src/domain/repositories/iperson.repository.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/app.module.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/controllers/controller.module.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/controllers/person/create-person.controller.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/controllers/person/delete-person.controller.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/controllers/person/person.controller.e2e-spec.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/controllers/person/person.module.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/controllers/person/read-many-person.controller.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/controllers/person/read-person.controller.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/controllers/person/router.config.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/controllers/person/update-person.controller.ts +0 -0
- /package/{code-base → templates}/startup-project/src/host/main.ts +0 -0
- /package/{code-base → templates}/startup-project/src/infra/database/repositories/person.repository.ts +0 -0
- /package/{code-base → templates}/startup-project/src/infra/database/repositories/repositories.module.ts +0 -0
- /package/{code-base → templates}/startup-project/src/infra/infra.module.ts +0 -0
- /package/{code-base → templates}/startup-project/src/test/create-e2e-test-app.ts +0 -0
- /package/{code-base → templates}/startup-project/src/test/create-unit-test-app.ts +0 -0
- /package/{code-base → templates}/startup-project/src/test/mockup/person/create-person-request.mockup.ts +0 -0
- /package/{code-base → templates}/startup-project/src/test/repositories/person.repository.ts +0 -0
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,76 +1,71 @@
|
|
|
1
1
|
# @koalarx/nest-cli
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
16
|
-
- Bun 1.0.0+ ([Instale o Bun](https://bun.sh))
|
|
13
|
+
## 🚀 Uso
|
|
17
14
|
|
|
18
|
-
|
|
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
|
-
|
|
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
|
-
|
|
24
|
+
koala-nest new
|
|
41
25
|
```
|
|
42
26
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
39
|
+
## 📁 Estrutura Gerada
|
|
48
40
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
59
|
+
## 🔗 Links Úteis
|
|
66
60
|
|
|
67
|
-
|
|
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
|
-
|
|
65
|
+
## 🤝 Contribuindo
|
|
70
66
|
|
|
71
|
-
-
|
|
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
|
-
|
|
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
|
+
}
|