@devquest/cli 1.0.3 → 1.0.5

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.
@@ -23,45 +23,67 @@ exports.cloneCommand = new commander_1.Command('clone')
23
23
  }
24
24
  console.log(chalk_1.default.blue(`🚀 Iniciando o desafio: ${id}`));
25
25
  try {
26
- // 1. Requisitar a URL do repositório para este usuário/desafio do Backend
27
26
  const response = await axios_1.default.post(`${env_1.API_BASE}/challenges/${id}/clone`, {}, {
28
27
  headers: { Authorization: `Bearer ${token}` }
29
28
  });
30
29
  const { cloneUrl, targetDir } = response.data;
31
- const destPath = path_1.default.resolve(process.cwd(), targetDir || id);
30
+ const targetFolderName = targetDir || id;
31
+ const destPath = path_1.default.resolve(process.cwd(), targetFolderName);
32
32
  if (fs_1.default.existsSync(destPath)) {
33
33
  console.log(chalk_1.default.red(`O diretório ${destPath} já existe.`));
34
34
  process.exit(1);
35
35
  }
36
36
  let finalUrl = cloneUrl;
37
- // Lógica dinâmica sugerida pelo usuário:
38
37
  // Se estiver local (IS_DEV) e o link for file://, resolvemos para o caminho local do monorepo
39
38
  if (env_1.IS_DEV && cloneUrl.startsWith('file://')) {
40
- // Assume que estamos no monorepo e templates estão em ../../../../templates
41
39
  const repoRoot = path_1.default.resolve(__dirname, '../../../..');
42
40
  const templateName = cloneUrl.replace('file://../../templates/', '');
43
41
  const localPath = path_1.default.join(repoRoot, 'templates', templateName);
44
42
  if (fs_1.default.existsSync(localPath)) {
45
43
  finalUrl = `file://${localPath}`;
46
44
  console.log(chalk_1.default.cyan(`🏠 Ambiente de desenvolvimento detectado. Usando template local.`));
45
+ const git = (0, simple_git_1.default)();
46
+ await git.clone(finalUrl, destPath);
47
47
  }
48
48
  else {
49
- // Se não achar local mesmo em dev, tenta o fallback remoto
50
- finalUrl = `https://github.com/kalmonj/devquest-template-${id}.git`;
49
+ // Fallback para o repositório central de templates
50
+ finalUrl = `https://github.com/KalmonJ/devquest-templates.git`;
51
51
  }
52
52
  }
53
- // Se não estiver em dev e for um link de arquivo (que veio do banco do monorepo),
54
- // ou se o link do banco for inválido para produção
55
- else if (!env_1.IS_DEV && cloneUrl.startsWith('file://')) {
56
- finalUrl = `https://github.com/kalmonj/devquest-template-${id}.git`;
57
- console.log(chalk_1.default.cyan(`🌐 CLI em produção. Usando repositório remoto oficial.`));
53
+ // Em produção, sempre usamos o repositório central devquest-templates
54
+ else {
55
+ finalUrl = `https://github.com/KalmonJ/devquest-templates.git`;
56
+ }
57
+ // Se o URL final for o repositório central, precisamos extrair a pasta específica
58
+ if (finalUrl.includes('devquest-templates.git')) {
59
+ console.log(chalk_1.default.gray(`Clonando template de devquest-templates...`));
60
+ const tempDir = path_1.default.join(process.cwd(), `.devquest-temp-${id}`);
61
+ const git = (0, simple_git_1.default)();
62
+ await git.clone(finalUrl, tempDir, ['--depth', '1']);
63
+ const templateSourcePath = path_1.default.join(tempDir, id);
64
+ if (!fs_1.default.existsSync(templateSourcePath)) {
65
+ // Cleanup antes do erro
66
+ fs_1.default.rmSync(tempDir, { recursive: true, force: true });
67
+ throw new Error(`Template '${id}' não encontrado no repositório de templates.`);
68
+ }
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
+ fs_1.default.cpSync(templateSourcePath, destPath, { recursive: true });
72
+ // Remove a pasta temporária
73
+ fs_1.default.rmSync(tempDir, { recursive: true, force: true });
74
+ // Inicializa um novo repo git se o usuário quiser (opcional, mas bom pra começar limpo)
75
+ const newGit = (0, simple_git_1.default)(destPath);
76
+ await newGit.init();
77
+ console.log(chalk_1.default.cyan(`🌐 Template extraído com sucesso do repositório central.`));
78
+ }
79
+ else if (!env_1.IS_DEV || !cloneUrl.startsWith('file://')) {
80
+ // Fallback genérico para clone direto (caso o URL seja outro)
81
+ const git = (0, simple_git_1.default)();
82
+ await git.clone(finalUrl, destPath);
58
83
  }
59
- console.log(chalk_1.default.gray(`Clonando de ${finalUrl} para ${destPath}...`));
60
- const git = (0, simple_git_1.default)();
61
- await git.clone(finalUrl, destPath);
62
- console.log(chalk_1.default.green(`✅ Desafio clonado com sucesso em ./${targetDir || id}`));
84
+ console.log(chalk_1.default.green(`✅ Desafio clonado com sucesso em ./${targetFolderName}`));
63
85
  console.log(chalk_1.default.yellow(`\nPróximos passos:`));
64
- console.log(` cd ${targetDir || id}`);
86
+ console.log(` cd ${targetFolderName}`);
65
87
  console.log(` Leia o README.md e comece a desenvolver.`);
66
88
  console.log(` Para submeter: devquest submit`);
67
89
  }
package/dist/index.js CHANGED
@@ -1,15 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
3
6
  Object.defineProperty(exports, "__esModule", { value: true });
4
7
  const commander_1 = require("commander");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
5
10
  const auth_1 = require("./commands/auth");
6
11
  const clone_1 = require("./commands/clone");
7
12
  const submit_1 = require("./commands/submit");
8
13
  const program = new commander_1.Command();
14
+ const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../package.json'), 'utf8'));
9
15
  program
10
16
  .name('devquest')
11
17
  .description('DevQuest CLI - Construa seu próprio Redis, Docker, Git e mais')
12
- .version('1.0.0');
18
+ .version(pkg.version);
13
19
  program.addCommand(auth_1.authCommand);
14
20
  program.addCommand(clone_1.cloneCommand);
15
21
  program.addCommand(submit_1.submitCommand);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devquest/cli",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "DevQuest CLI - Construa seu próprio Redis, Docker, Git e mais",
5
5
  "main": "dist/index.js",
6
6
  "bin": {