@orxataguy/tyr 1.0.4 → 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orxataguy/tyr",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "tyr": "./bin/tyr.js"
@@ -10,8 +10,7 @@
10
10
  },
11
11
  "files": [
12
12
  "bin/",
13
- "src/",
14
- "config/"
13
+ "src/"
15
14
  ],
16
15
  "scripts": {
17
16
  "test": "vitest run",
@@ -86,7 +86,8 @@ export class Kernel {
86
86
  console.log('Usage: tyr <command> [args...]');
87
87
  console.log(' tyr --config Configure Tyr for the first time');
88
88
  console.log(' tyr --version Show version');
89
- console.log(' tyr --update Update Tyr to the latest version');
89
+ console.log(' tyr --update Pull latest changes from the linked ~/.tyr repo');
90
+ console.log(' tyr --upgrade Upgrade Tyr to the latest npm version');
90
91
  return;
91
92
  }
92
93
 
@@ -98,14 +99,30 @@ export class Kernel {
98
99
  return;
99
100
  }
100
101
 
101
- // --update
102
+ // --update: pull latest changes from the linked ~/.tyr git repo
102
103
  if (commandName === '--update') {
104
+ const shell = this.container.get().shell;
105
+ const gitDir = path.join(this.userRoot, '.git');
106
+ if (!fs.existsSync(gitDir)) {
107
+ console.log('~/.tyr no está vinculado a ningún repositorio git.');
108
+ console.log('Ejecuta: tyr --config --repo <url> para vincularlo.');
109
+ return;
110
+ }
111
+ console.log('Actualizando ~/.tyr desde el repositorio...');
112
+ shell.cd(this.userRoot);
113
+ await shell.exec('git pull');
114
+ console.log('Actualización completada.');
115
+ return;
116
+ }
117
+
118
+ // --upgrade: update the Tyr npm package itself
119
+ if (commandName === '--upgrade') {
103
120
  const pkgPath = path.resolve(this.frameworkRoot, 'package.json');
104
121
  const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
105
122
  const shell = this.container.get().shell;
106
- console.log(`Updating ${pkg.name}...`);
123
+ console.log(`Actualizando ${pkg.name}...`);
107
124
  await shell.exec(`npm update -g ${pkg.name}`);
108
- console.log('Update complete. Run tyr --version to confirm.');
125
+ console.log('Actualización completada. Ejecuta tyr --version para confirmar.');
109
126
  return;
110
127
  }
111
128
 
@@ -111,7 +111,7 @@ REGLAS:export default;async(args:string[]);task() p/errores;fail() p/validar;Tes
111
111
  Responde SOLO código TS sin explicaciones ni backticks.`;
112
112
  }
113
113
 
114
- export default function ai({ logger, fs: tyrFs, frameworkRoot, run, fail }: TyrContext) {
114
+ export default function ai({ logger, fs: tyrFs, userRoot, run, fail }: TyrContext) {
115
115
  return async (args: string[]) => {
116
116
  const commandName = args[0];
117
117
  const prompt = args.slice(1).join(' ');
@@ -153,8 +153,8 @@ export default function ai({ logger, fs: tyrFs, frameworkRoot, run, fail }: TyrC
153
153
  );
154
154
  }
155
155
 
156
- const filePath = path.resolve(frameworkRoot, 'src/commands', `${commandName}.tyr.ts`);
156
+ const filePath = path.join(userRoot, 'commands', `${commandName}.tyr.ts`);
157
157
  await tyrFs.write(filePath, code);
158
- logger.success(`'${commandName}' -> src/commands/${commandName}.tyr.ts`);
158
+ logger.success(`'${commandName}' -> ~/.tyr/commands/${commandName}.tyr.ts`);
159
159
  };
160
160
  }
@@ -304,7 +304,7 @@ if (!fs.existsSync('./package.json')) {
304
304
  await run('ai', [name, prompt]);
305
305
 
306
306
  res.writeHead(200, { 'Content-Type': 'application/json' });
307
- res.end(JSON.stringify({ success: true, message: `Comando '${name}' generado correctamente en src/commands/${name}.tyr.ts` }));
307
+ res.end(JSON.stringify({ success: true, message: `Comando '${name}' generado correctamente en ~/.tyr/commands/${name}.tyr.ts` }));
308
308
  } catch (e: any) {
309
309
  res.writeHead(500, { 'Content-Type': 'application/json' });
310
310
  res.end(JSON.stringify({ success: false, message: e.message || 'Error al generar el comando.' }));
package/config/map.yml DELETED
@@ -1,4 +0,0 @@
1
- settings:
2
- appName: Tyr CLI
3
- version: 0.1.0
4
- commands: {}
@@ -1,113 +0,0 @@
1
- import { TyrContext } from '../core/Kernel';
2
-
3
- export default ({ task, fail, logger, shell, db, git, fs }: TyrContext) => {
4
- /**
5
- * @method extractBranchName
6
- * @description Extrae el nombre de rama de una URL o devuelve el nombre tal cual
7
- */
8
- const extractBranchName = (input: string): string => {
9
- if (input.includes('/')) {
10
- const parts = input.split('/');
11
- return parts[parts.length - 1];
12
- }
13
- return input;
14
- };
15
-
16
- return async (args: string[]) => {
17
-
18
- // Validación de argumentos
19
- if (args.length === 0) {
20
- fail(
21
- 'No se especificó la URL del cliente',
22
- 'Uso: clone-client <url-cliente> [url-rama-opcional]'
23
- );
24
- }
25
-
26
- const clientUrl = args[0];
27
- const branchUrlOrName = args[1] || null;
28
-
29
- logger.info('Navegando al directorio de clientes...');
30
- shell.cd('~/dev/wolbenvironment/dev/online-booking/htdocs/datosBroker');
31
-
32
- const broker = await task('Buscando broker en la base de datos', async () => {
33
- const result = await db.searchBrokerOnDB(clientUrl);
34
-
35
- if (!result) {
36
- fail(
37
- `No se encontró broker para la URL: ${clientUrl}`,
38
- 'Verifica que la URL sea correcta y esté registrada en la BD'
39
- );
40
- }
41
-
42
- logger.success(`Broker encontrado: ${result}`);
43
- return result;
44
- });
45
-
46
- const brokerPath = `~/dev/wolbenvironment/dev/online-booking/htdocs/datosBroker/${broker}`;
47
- const dirExists = fs.exists(brokerPath);
48
-
49
- if (dirExists) {
50
- logger.warn(`El directorio '${broker}' ya existe`);
51
-
52
- const choice = await shell.input(
53
- '¿Qué deseas hacer? (s)obrescribir / (m)antener / (r)enombrar: '
54
- );
55
-
56
- if (choice.toLowerCase() === 'm' || choice.toLowerCase() === 'mantener') {
57
- logger.info('Manteniendo directorio existente. Finalizando...');
58
- return;
59
- } else if (choice.toLowerCase() === 'r' || choice.toLowerCase() === 'renombrar') {
60
- await task('Renombrando directorio existente', async () => {
61
- await shell.exec(`mv ${broker} ${broker}.bak`);
62
- logger.success(`Directorio renombrado a: ${broker}.bak`);
63
- });
64
- } else if (choice.toLowerCase() === 's' || choice.toLowerCase() === 'sobrescribir') {
65
- await task('Eliminando directorio existente', async () => {
66
- await shell.exec(`rm -rf ${broker}`);
67
- logger.success('Directorio eliminado');
68
- });
69
- } else {
70
- fail('Opción no válida', 'Usa: s (sobrescribir), m (mantener) o r (renombrar)');
71
- }
72
- }
73
-
74
- const repoUrl = `git@github.com:Avantio/${broker}`;
75
- logger.info(`Repositorio: ${repoUrl}`);
76
-
77
- const loader = shell.showLoader('Clonando repositorio desde GitHub...');
78
-
79
- await task('Clonando repositorio', async () => {
80
- await git.clone(repoUrl);
81
- loader.stop();
82
- logger.success('Repositorio clonado exitosamente');
83
- }, false, () => loader.stop());
84
-
85
- shell.cd(broker);
86
-
87
- let branchName: string;
88
-
89
- if (branchUrlOrName) {
90
- branchName = extractBranchName(branchUrlOrName);
91
- logger.info(`Rama extraída: ${branchName}`);
92
- } else {
93
- const answer = await shell.input('🌿 ¿Qué rama quieres usar? (nombre o URL): ');
94
- branchName = extractBranchName(answer);
95
- }
96
-
97
- await task(`Cambiando a la rama: ${branchName}`, async () => {
98
- if (branchName.length > 0) {
99
- await shell.exec(`git checkout -b ${branchName}`);
100
- logger.success(`Ahora estás en la rama: ${branchName}`);
101
- } else {
102
- logger.info('No se va a generar ninguna rama nueva')
103
- }
104
- });
105
- logger.success(`Repositorio ${broker} clonado y configurado exitosamente`);
106
-
107
- };
108
- };
109
-
110
-
111
- // export const Test = {
112
- // args: []
113
- // }
@@ -1,116 +0,0 @@
1
- import { TyrContext } from '../core/Kernel';
2
-
3
- export default ({ task, fail, logger, shell, db, git, fs }: TyrContext) => {
4
- /**
5
- * @method extractBranchName
6
- * @description Extrae el nombre de rama de una URL o devuelve el nombre tal cual
7
- */
8
- const extractBranchName = (input: string): string => {
9
- if (input.includes('/')) {
10
- const parts = input.split('/');
11
- return parts[parts.length - 1];
12
- }
13
- return input;
14
- };
15
-
16
- return async (args: string[]) => {
17
-
18
- // Validación de argumentos
19
- if (args.length === 0) {
20
- fail(
21
- 'No se especificó la URL del cliente',
22
- 'Uso: clone-client <url-cliente> [url-rama-opcional]'
23
- );
24
- }
25
-
26
- const clientUrl = args[0];
27
- const branchUrlOrName = args[1] || null;
28
-
29
- logger.info('Navegando al directorio de clientes...');
30
- shell.cd('~/dev/wolbenvironment/dev/websITS/clients');
31
- console.log("Lanzo con url:", clientUrl)
32
- const broker = await task('Buscando broker en la base de datos', async () => {
33
- const result = await db.searchBrokerOnDB(clientUrl);
34
-
35
- if (!result) {
36
- fail(
37
- `No se encontró broker para la URL: ${clientUrl}`,
38
- 'Verifica que la URL sea correcta y esté registrada en la BD'
39
- );
40
- }
41
-
42
- logger.success(`Broker encontrado: ${result}`);
43
- return result;
44
- });
45
-
46
- const brokerPath = `~/dev/wolbenvironment/dev/websITS/clients/${broker}`;
47
- const dirExists = fs.exists(brokerPath);
48
-
49
- if (dirExists) {
50
- logger.warn(`El directorio '${broker}' ya existe`);
51
-
52
- const choice = await shell.input(
53
- '¿Qué deseas hacer? (s)obrescribir / (m)antener / (r)enombrar: '
54
- );
55
-
56
- if (choice.toLowerCase() === 'm' || choice.toLowerCase() === 'mantener') {
57
- logger.info('Manteniendo directorio existente. Finalizando...');
58
- return;
59
- } else if (choice.toLowerCase() === 'r' || choice.toLowerCase() === 'renombrar') {
60
- await task('Renombrando directorio existente', async () => {
61
- await shell.exec(`mv ${broker} ${broker}.bak`);
62
- logger.success(`Directorio renombrado a: ${broker}.bak`);
63
- });
64
- } else if (choice.toLowerCase() === 's' || choice.toLowerCase() === 'sobrescribir') {
65
- await task('Eliminando directorio existente', async () => {
66
- await shell.exec(`rm -rf ${broker}`);
67
- logger.success('Directorio eliminado');
68
- });
69
- } else {
70
- fail('Opción no válida', 'Usa: s (sobrescribir), m (mantener) o r (renombrar)');
71
- }
72
- }
73
-
74
- const repoUrl = `git@github.com:Avantio/${broker}`;
75
- logger.info(`Repositorio: ${repoUrl}`);
76
-
77
- const loader = shell.showLoader('Clonando repositorio desde GitHub...');
78
-
79
- await task('Clonando repositorio', async () => {
80
- await git.clone(repoUrl);
81
- loader.stop();
82
- logger.success('Repositorio clonado exitosamente');
83
- }, false, () => loader.stop());
84
-
85
- shell.cd(broker);
86
-
87
- let branchName: string;
88
-
89
- if (branchUrlOrName) {
90
- branchName = extractBranchName(branchUrlOrName);
91
- logger.info(`Rama extraída: ${branchName}`);
92
- } else {
93
- const answer = await shell.input('🌿 ¿Qué rama quieres usar? (nombre o URL): ');
94
- branchName = extractBranchName(answer);
95
- }
96
-
97
- await task(`Cambiando a la rama: ${branchName}`, async () => {
98
- if (branchName.length > 0) {
99
- await shell.exec(`git checkout -b ${branchName}`);
100
- logger.success(`Ahora estás en la rama: ${branchName}`);
101
- } else {
102
- logger.info('No se va a generar ninguna rama nueva')
103
- }
104
- });
105
- logger.success(`Repositorio ${broker} clonado y configurado exitosamente`);
106
-
107
- };
108
- };
109
-
110
- // export const Test = {
111
- // args: ['https://www.feelporto.com/'],
112
- // mockInputs: {
113
- // 'sobrescribir': 'm',
114
- // 'rama': ''
115
- // }
116
- // }
@@ -1,61 +0,0 @@
1
- import { TyrContext } from '../core/Kernel';
2
- import path from 'path';
3
- import { homedir } from 'os';
4
-
5
- export default ({ task, fail, logger, fs }: TyrContext) => {
6
- return async (_args: string[]) => {
7
- const homeDir = homedir();
8
- const userRoot = path.join(homeDir, '.tyr');
9
-
10
- const aliasesTemplatePath = path.join(homeDir, 'avantio', 'framework', 'core', 'include', 'bin', 'aliases.template.sh');
11
- const pluginsTemplatePath = path.join(homeDir, 'avantio', 'framework', 'core', 'include', 'bin', 'plugins.template.sh');
12
-
13
- const aliasesTarget = path.join(userRoot, 'aliases');
14
- const pluginsTarget = path.join(userRoot, 'plugins');
15
-
16
- await task('Verificando configuración de Tyr', async () => {
17
- if (!fs.exists(userRoot)) {
18
- fail(
19
- 'El directorio ~/.tyr no existe.',
20
- "Ejecuta 'tyr --config' antes de continuar."
21
- );
22
- }
23
- logger.success(`Directorio ~/.tyr encontrado: ${userRoot}`);
24
- });
25
-
26
- await task('Verificando templates de Avantio', async () => {
27
- if (!fs.exists(aliasesTemplatePath)) {
28
- fail(
29
- `Template de aliases no encontrado: ${aliasesTemplatePath}`,
30
- 'Verifica que el framework de Avantio esté correctamente instalado.'
31
- );
32
- }
33
- if (!fs.exists(pluginsTemplatePath)) {
34
- fail(
35
- `Template de plugins no encontrado: ${pluginsTemplatePath}`,
36
- 'Verifica que el framework de Avantio esté correctamente instalado.'
37
- );
38
- }
39
- logger.success('Templates de Avantio encontrados.');
40
- });
41
-
42
- await task('Copiando aliases de Avantio', async () => {
43
- const content = await fs.read(aliasesTemplatePath);
44
- if (!content) fail('No se pudo leer aliases.template.sh');
45
- await fs.write(aliasesTarget, content!);
46
- logger.success(`Aliases copiados a: ${aliasesTarget}`);
47
- });
48
-
49
- await task('Copiando plugins de Avantio', async () => {
50
- const content = await fs.read(pluginsTemplatePath);
51
- if (!content) fail('No se pudo leer plugins.template.sh');
52
- await fs.write(pluginsTarget, content!);
53
- logger.success(`Plugins copiados a: ${pluginsTarget}`);
54
- });
55
-
56
- logger.success('\nInstalación de Avantio completada.');
57
- logger.info(` aliases → ${aliasesTarget}`);
58
- logger.info(` plugins → ${pluginsTarget}`);
59
- logger.warn('\nRecuerda recargar tu shell para aplicar los cambios.');
60
- };
61
- };