@devquest/cli 1.0.5 → 1.0.8
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/dist/commands/clone.js +25 -10
- package/package.json +1 -1
package/dist/commands/clone.js
CHANGED
|
@@ -11,6 +11,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
11
11
|
const chalk_1 = __importDefault(require("chalk"));
|
|
12
12
|
const axios_1 = __importDefault(require("axios"));
|
|
13
13
|
const auth_1 = require("./auth");
|
|
14
|
+
const child_process_1 = require("child_process");
|
|
14
15
|
const env_1 = require("../utils/env");
|
|
15
16
|
exports.cloneCommand = new commander_1.Command('clone')
|
|
16
17
|
.argument('<id>', 'ID do desafio (ex: build-your-own-redis)')
|
|
@@ -46,15 +47,13 @@ exports.cloneCommand = new commander_1.Command('clone')
|
|
|
46
47
|
await git.clone(finalUrl, destPath);
|
|
47
48
|
}
|
|
48
49
|
else {
|
|
49
|
-
// Fallback para o repositório central de templates
|
|
50
50
|
finalUrl = `https://github.com/KalmonJ/devquest-templates.git`;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
// Em produção, sempre usamos o repositório central devquest-templates
|
|
54
53
|
else {
|
|
55
54
|
finalUrl = `https://github.com/KalmonJ/devquest-templates.git`;
|
|
56
55
|
}
|
|
57
|
-
// Se o URL final for o repositório central,
|
|
56
|
+
// Se o URL final for o repositório central, extrair pasta específica
|
|
58
57
|
if (finalUrl.includes('devquest-templates.git')) {
|
|
59
58
|
console.log(chalk_1.default.gray(`Clonando template de devquest-templates...`));
|
|
60
59
|
const tempDir = path_1.default.join(process.cwd(), `.devquest-temp-${id}`);
|
|
@@ -62,26 +61,42 @@ exports.cloneCommand = new commander_1.Command('clone')
|
|
|
62
61
|
await git.clone(finalUrl, tempDir, ['--depth', '1']);
|
|
63
62
|
const templateSourcePath = path_1.default.join(tempDir, id);
|
|
64
63
|
if (!fs_1.default.existsSync(templateSourcePath)) {
|
|
65
|
-
// Cleanup antes do erro
|
|
66
64
|
fs_1.default.rmSync(tempDir, { recursive: true, force: true });
|
|
67
65
|
throw new Error(`Template '${id}' não encontrado no repositório de templates.`);
|
|
68
66
|
}
|
|
69
|
-
// Move a pasta do template para o destino final
|
|
70
|
-
// No Node < 16.7.0 fs.cpSync não existe, mas como o usuário usa node v24, podemos usar
|
|
71
67
|
fs_1.default.cpSync(templateSourcePath, destPath, { recursive: true });
|
|
72
|
-
// Remove a pasta temporária
|
|
73
68
|
fs_1.default.rmSync(tempDir, { recursive: true, force: true });
|
|
74
|
-
// Inicializa
|
|
69
|
+
// Inicializa o novo repo para o usuário
|
|
75
70
|
const newGit = (0, simple_git_1.default)(destPath);
|
|
76
71
|
await newGit.init();
|
|
77
72
|
console.log(chalk_1.default.cyan(`🌐 Template extraído com sucesso do repositório central.`));
|
|
78
73
|
}
|
|
79
74
|
else if (!env_1.IS_DEV || !cloneUrl.startsWith('file://')) {
|
|
80
|
-
// Fallback genérico para clone direto (caso o URL seja outro)
|
|
81
75
|
const git = (0, simple_git_1.default)();
|
|
82
76
|
await git.clone(finalUrl, destPath);
|
|
83
77
|
}
|
|
84
|
-
|
|
78
|
+
// 3. Instalar dependências se houver um package.json
|
|
79
|
+
if (fs_1.default.existsSync(path_1.default.join(destPath, 'package.json'))) {
|
|
80
|
+
console.log(chalk_1.default.gray(`\n📦 Instalando dependências...`));
|
|
81
|
+
try {
|
|
82
|
+
(0, child_process_1.execSync)('npm install', { cwd: destPath, stdio: 'inherit' });
|
|
83
|
+
console.log(chalk_1.default.green(`✅ Dependências instaladas com sucesso.`));
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
console.log(chalk_1.default.yellow(`\n⚠️ Aviso: Não foi possível instalar as dependências automaticamente.`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// 4. Primeiro commit para limpar a visão do VS Code (Slate limpo)
|
|
90
|
+
try {
|
|
91
|
+
const finalGit = (0, simple_git_1.default)(destPath);
|
|
92
|
+
await finalGit.add('.');
|
|
93
|
+
await finalGit.commit('feat: initial boilerplate');
|
|
94
|
+
console.log(chalk_1.default.cyan(`✅ Projeto inicializado com commit de histórico.`));
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
// Silencioso se o git global não estiver configurado
|
|
98
|
+
}
|
|
99
|
+
console.log(chalk_1.default.green(`\n✅ Desafio clonado com sucesso em ./${targetFolderName}`));
|
|
85
100
|
console.log(chalk_1.default.yellow(`\nPróximos passos:`));
|
|
86
101
|
console.log(` cd ${targetFolderName}`);
|
|
87
102
|
console.log(` Leia o README.md e comece a desenvolver.`);
|