@dbcube/cli 1.0.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/.lh/.lhignore ADDED
@@ -0,0 +1,6 @@
1
+ # list file to not track by the local-history extension. comment line starts with a '#' character
2
+ # each line describe a regular expression pattern (search for 'Javascript regex')
3
+ # it will relate to the workspace directory root. for example:
4
+ # '.*\.txt' ignores any file with 'txt' extension
5
+ # '/test/.*' ignores all the files under the 'test' directory
6
+ # '.*/test/.*' ignores all the files under any 'test' directory (even under sub-folders)
@@ -0,0 +1,26 @@
1
+ {
2
+ "sourceFile": "package.json",
3
+ "activeCommit": 0,
4
+ "commits": [
5
+ {
6
+ "activePatchIndex": 2,
7
+ "patches": [
8
+ {
9
+ "date": 1756705588331,
10
+ "content": "Index: \n===================================================================\n--- \n+++ \n"
11
+ },
12
+ {
13
+ "date": 1756705654448,
14
+ "content": "Index: \n===================================================================\n--- \n+++ \n@@ -13,9 +13,8 @@\n \"author\": \"\",\n \"license\": \"ISC\",\n \"description\": \"\",\n \"dependencies\": {\n- \"@dbcube/schema-builder\": \"^1.0.0\",\n \"@inquirer/prompts\": \"^7.4.1\",\n \"alwait\": \"^1.0.0\",\n \"chalk\": \"^5.4.1\",\n \"dotenv\": \"^17.0.1\",\n"
15
+ },
16
+ {
17
+ "date": 1756706224795,
18
+ "content": "Index: \n===================================================================\n--- \n+++ \n@@ -2,9 +2,8 @@\n \"name\": \"dbcube\",\n \"version\": \"1.0.1\",\n \"main\": \"index.js\",\n \"scripts\": {\n- \"start\": \"node example.js\",\n \"dbcube\": \"node src/index.js\"\n },\n \"bin\": {\n \"dbcube\": \"./src/index.js\"\n"
19
+ }
20
+ ],
21
+ "date": 1756705588331,
22
+ "name": "Commit-0",
23
+ "content": "{\n \"name\": \"dbcube\",\n \"version\": \"1.0.0\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"start\": \"node example.js\",\n \"dbcube\": \"node src/index.js\"\n },\n \"bin\": {\n \"dbcube\": \"./src/index.js\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"description\": \"\",\n \"dependencies\": {\n \"@inquirer/prompts\": \"^7.4.1\",\n \"alwait\": \"^1.0.0\",\n \"chalk\": \"^5.4.1\",\n \"dotenv\": \"^17.0.1\",\n \"fs-extra\": \"^11.3.0\",\n \"glob\": \"^11.0.1\",\n \"ora\": \"^8.2.0\"\n }\n}\n"
24
+ }
25
+ ]
26
+ }
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@dbcube/cli",
3
+ "version": "1.0.1",
4
+ "main": "index.js",
5
+ "scripts": {
6
+ "dbcube": "node src/index.js"
7
+ },
8
+ "bin": {
9
+ "dbcube": "./src/index.js"
10
+ },
11
+ "keywords": [],
12
+ "author": "",
13
+ "license": "ISC",
14
+ "description": "",
15
+ "dependencies": {
16
+ "@dbcube/schema-builder": "^1.0.0",
17
+ "@inquirer/prompts": "^7.8.4",
18
+ "alwait": "^1.0.0",
19
+ "chalk": "^5.6.0",
20
+ "dotenv": "^17.2.1",
21
+ "fs-extra": "^11.3.1",
22
+ "glob": "^11.0.3",
23
+ "ora": "^8.2.0"
24
+ }
25
+ }
@@ -0,0 +1,193 @@
1
+ const { default: chalk } = require('chalk');
2
+ const { default: alwait } = require('alwait');
3
+ const ConfigFileUtils = require('../../../../utils/ConfigFileUtils');
4
+ const path = require('path');
5
+
6
+ // Importar las funciones de @inquirer/prompts
7
+ const { select, input, password, confirm, Separator } = require('@inquirer/prompts');
8
+ const { default: ora } = require('ora');
9
+ const Config = require('../../../../utils/Config');
10
+
11
+ // Obtener los argumentos pasados al comando
12
+ const args = process.argv.slice(2);
13
+
14
+ /**
15
+ * Función para crear y agregar configuración de base de datos
16
+ */
17
+ async function addDatabaseConfiguration(databaseName = null, motor = null) {
18
+ try {
19
+ // Si no se proporciona nombre, solicitarlo
20
+ if (!databaseName) {
21
+ databaseName = await input({
22
+ message: 'Nombre de referencia a la base de datos:',
23
+ validate: (value) => {
24
+ const rootPath = path.resolve(process.cwd());
25
+ const configPath = path.join(rootPath, 'dbcube.config.js');
26
+ const getconfig = require(configPath);
27
+ const config = new Config();
28
+ getconfig(config);
29
+ const databases = Object.keys(config.getAllDatabases());
30
+
31
+ for (const database of databases) {
32
+ if(database === value){
33
+ return 'El nombre de la base de datos ya existe';
34
+ }
35
+ }
36
+
37
+ if(value.trim() === ''){
38
+ return 'Debe especificar un nombre de referencia para la base de datos';
39
+ }
40
+
41
+ return true;
42
+ }
43
+ });
44
+ }
45
+
46
+ // Si no se proporciona motor, solicitarlo
47
+ if (!motor) {
48
+ motor = await select({
49
+ message: 'Seleccione el motor de base de datos:',
50
+ choices: [
51
+ {
52
+ name: 'MySQL',
53
+ value: 'mysql',
54
+ description: `⚡${chalk.white("MySQL es un sistema de gestión de bases de datos relacional")}`
55
+ },
56
+ {
57
+ name: 'PostgreSQL',
58
+ value: 'postgresql',
59
+ description: `⚡${chalk.white("PostgreSQL es un sistema de gestión de bases de datos relacional orientado a objetos")}`
60
+ },
61
+ {
62
+ name: 'SQLite',
63
+ value: 'sqlite',
64
+ description: `⚡${chalk.white("SQLite es un sistema de gestión de bases de datos relacional ligero")}`
65
+ },
66
+ {
67
+ name: 'MongoDB\n',
68
+ value: 'mongodb',
69
+ description: `⚡${chalk.white("MongoDB es un sistema de base de datos NoSQL orientado a documentos")}`
70
+ }
71
+ ]
72
+ });
73
+ }
74
+
75
+ let HOST = "localhost";
76
+ let PORT = 0;
77
+ let USER = "root";
78
+ let PASSWORD = "";
79
+
80
+ if(motor != "sqlite"){
81
+ HOST = await input({
82
+ message: 'Digite el nombre del host:',
83
+ placeholder: 'localhost',
84
+ default: 'localhost',
85
+ });
86
+ PORT = await input({
87
+ message: 'Digite el puerto:',
88
+ placeholder: motor=="mysql" ? "3306" : motor=="postgresql" ? "5432" : "27017",
89
+ default: motor=="mysql" ? 3306 : motor=="postgresql" ? 5432 : 27017,
90
+ validate: (value) => {
91
+ if (value === undefined || value === null || value === '') return true;
92
+
93
+ const port = parseInt(value);
94
+ return !isNaN(port) && port >= 0 && port < 65536
95
+ ? true
96
+ : 'Debe ser un número de puerto válido (1-65535)';
97
+ }
98
+ });
99
+ USER = await input({
100
+ message: 'Digite el nombre de usuario:',
101
+ placeholder: 'root',
102
+ default: 'root',
103
+ });
104
+ PASSWORD = await password({
105
+ message: 'Digite la contraseña:',
106
+ placeholder: 'root',
107
+ default: 'root',
108
+ });
109
+ }
110
+
111
+ const DATABASE = await input({
112
+ message: 'Digite el nombre de la base de datos:',
113
+ default: databaseName,
114
+ placeholder: databaseName,
115
+ validate: (value) => value.trim() !== '' ? true : 'Debe especificar un nombre de la base de datos'
116
+ });
117
+
118
+ // Crear el objeto de configuración
119
+ const configAnswers = {
120
+ HOST, USER, PASSWORD, DATABASE, PORT
121
+ };
122
+
123
+ console.log('\n')
124
+ const spinner2 = ora('Agregando configuración al archivo...').start();
125
+
126
+ // Agregar la nueva configuración al archivo
127
+ const result = await ConfigFileUtils.addDatabaseConfig(databaseName, motor, configAnswers);
128
+
129
+ if (!result) {
130
+ console.log('\n')
131
+ spinner2.fail('Hubo un error al agregar la configuración.');
132
+ process.exit(1);
133
+ }
134
+
135
+ await alwait(1000);
136
+ spinner2.succeed("Configuración agregada correctamente!\n");
137
+
138
+ console.log(`✅ Configuración para '${databaseName}' creada exitosamente`);
139
+
140
+ // Escribir el nombre a un archivo temporal para el siguiente proceso
141
+ const fs = require('fs');
142
+ const tempFile = path.join(__dirname, '.temp_db_name');
143
+ fs.writeFileSync(tempFile, databaseName);
144
+
145
+ return databaseName;
146
+
147
+ } catch (error) {
148
+ console.error('Error al agregar la configuración:', error);
149
+ process.exit(1);
150
+ }
151
+ }
152
+
153
+ // Procesar argumentos de línea de comandos
154
+ function parseArguments(args) {
155
+ const parsedArgs = {};
156
+
157
+ for (let i = 0; i < args.length; i++) {
158
+ const arg = args[i];
159
+
160
+ if (arg.startsWith('--name=')) {
161
+ parsedArgs.name = arg.split('=')[1];
162
+ } else if (arg === '--name' || arg === '-n') {
163
+ parsedArgs.name = args[i + 1];
164
+ i++; // Saltar el siguiente argumento
165
+ } else if (arg.startsWith('--motor=') || arg.startsWith('--engine=')) {
166
+ parsedArgs.motor = arg.split('=')[1];
167
+ } else if (arg === '--motor' || arg === '--engine' || arg === '-m') {
168
+ parsedArgs.motor = args[i + 1];
169
+ i++; // Saltar el siguiente argumento
170
+ }
171
+ }
172
+
173
+ return parsedArgs;
174
+ }
175
+
176
+ // Función principal
177
+ async function main() {
178
+ console.log(`\n💚 ${chalk.green("Agregando configuración de base de datos...")}`);
179
+
180
+ try {
181
+ const parsedArgs = parseArguments(args);
182
+ await addDatabaseConfiguration(parsedArgs.name, parsedArgs.motor);
183
+ } catch (error) {
184
+ console.error('Error inesperado:', error);
185
+ process.exit(1);
186
+ }
187
+ }
188
+
189
+ // Ejecutar el comando
190
+ main().catch(error => {
191
+ console.error('Error fatal:', error);
192
+ process.exit(1);
193
+ });
@@ -0,0 +1,88 @@
1
+ const { default: chalk } = require('chalk');
2
+ const { default: alwait } = require('alwait');
3
+ const { default: ora } = require('ora');
4
+ const { default: Schema } = require('@dbcube/schema-builder');
5
+
6
+ // Obtener los argumentos pasados al comando
7
+ const args = process.argv.slice(2);
8
+
9
+ /**
10
+ * Función para crear la base de datos física
11
+ */
12
+ async function createDatabasePhysically(databaseName) {
13
+ try {
14
+ if (!databaseName) {
15
+ console.error('❌ Error: Debe proporcionar el nombre de la base de datos');
16
+ console.log('Uso: node createDatabase.js --name=<nombre> | -n <nombre>');
17
+ process.exit(1);
18
+ }
19
+
20
+ console.log('\n')
21
+ const spinner = ora(`Creando base de datos '${databaseName}'...`).start();
22
+
23
+ console.log("\n")
24
+ console.log(`Inicializando Schema para: ${databaseName}`)
25
+ const schema = new Schema(databaseName);
26
+ console.log(`Creando base de datos: ${databaseName}`)
27
+ await schema.createDatabase();
28
+
29
+ await alwait(1000);
30
+ spinner.succeed(`Base de datos '${databaseName}' creada correctamente!\n`);
31
+
32
+ console.log(`✅ Base de datos '${databaseName}' creada exitosamente`);
33
+
34
+ } catch (error) {
35
+ console.log('\n')
36
+ console.error('❌ Error al crear la base de datos:', error.message || error);
37
+ process.exit(1);
38
+ }
39
+ }
40
+
41
+ // Procesar argumentos de línea de comandos
42
+ function parseArguments(args) {
43
+ const parsedArgs = {};
44
+
45
+ for (let i = 0; i < args.length; i++) {
46
+ const arg = args[i];
47
+
48
+ if (arg.startsWith('--name=')) {
49
+ parsedArgs.name = arg.split('=')[1];
50
+ } else if (arg === '--name' || arg === '-n') {
51
+ parsedArgs.name = args[i + 1];
52
+ i++; // Saltar el siguiente argumento
53
+ } else if (arg.startsWith('--database=') || arg.startsWith('--db=')) {
54
+ parsedArgs.name = arg.split('=')[1];
55
+ } else if (arg === '--database' || arg === '--db' || arg === '-d') {
56
+ parsedArgs.name = args[i + 1];
57
+ i++; // Saltar el siguiente argumento
58
+ }
59
+ }
60
+
61
+ return parsedArgs;
62
+ }
63
+
64
+ // Función principal
65
+ async function main() {
66
+ console.log(`\n💚 ${chalk.green("Creando base de datos...")}`);
67
+
68
+ try {
69
+ const parsedArgs = parseArguments(args);
70
+
71
+ if (!parsedArgs.name) {
72
+ console.error('❌ Error: Debe proporcionar el nombre de la base de datos');
73
+ console.log('Uso: --name=<nombre> | -n <nombre> | --database=<nombre> | -d <nombre>');
74
+ process.exit(1);
75
+ }
76
+
77
+ await createDatabasePhysically(parsedArgs.name);
78
+ } catch (error) {
79
+ console.error('Error inesperado:', error);
80
+ process.exit(1);
81
+ }
82
+ }
83
+
84
+ // Ejecutar el comando
85
+ main().catch(error => {
86
+ console.error('Error fatal:', error);
87
+ process.exit(1);
88
+ });
@@ -0,0 +1,157 @@
1
+ const { default: chalk } = require('chalk');
2
+ const { default: alwait } = require('alwait');
3
+ const ConfigFileUtils = require('../../../../utils/ConfigFileUtils');
4
+ const { select, input } = require('@inquirer/prompts');
5
+ const { default: ora } = require('ora');
6
+ const { execSync } = require('child_process');
7
+ const path = require('path');
8
+
9
+ /**
10
+ * Función para crear una nueva base de datos con configuración (Proceso completo en dos fases)
11
+ */
12
+ async function createNewDatabase() {
13
+ try {
14
+ console.log(`\n💚 ${chalk.green("Proceso de creación de base de datos...")}`);
15
+ console.log('📋 Fase 1: Configuración');
16
+ console.log('🏗️ Fase 2: Creación física\n');
17
+
18
+ // Fase 1: Ejecutar addDatabaseConfig.js
19
+ console.log('🔧 Iniciando configuración de base de datos...');
20
+ const configCommand = `node "${path.join(__dirname, 'addDatabaseConfig.js')}"`;
21
+
22
+ try {
23
+ execSync(configCommand, {
24
+ stdio: 'inherit',
25
+ cwd: process.cwd()
26
+ });
27
+ } catch (error) {
28
+ console.error('❌ Error en la fase de configuración:', error.message);
29
+ process.exit(1);
30
+ }
31
+
32
+ // Leer el nombre de la base de datos del archivo temporal
33
+ const fs = require('fs');
34
+ const tempFile = path.join(__dirname, '.temp_db_name');
35
+ let databaseName;
36
+
37
+ try {
38
+ databaseName = fs.readFileSync(tempFile, 'utf8');
39
+ // Limpiar el archivo temporal
40
+ fs.unlinkSync(tempFile);
41
+ } catch (error) {
42
+ console.error('❌ Error: No se pudo obtener el nombre de la base de datos configurada');
43
+ process.exit(1);
44
+ }
45
+
46
+ console.log('\n🏗️ Iniciando creación física de la base de datos...');
47
+
48
+ // Fase 2: Ejecutar createDatabase.js
49
+ const createCommand = `node "${path.join(__dirname, 'createDatabase.js')}" --name="${databaseName}"`;
50
+
51
+ try {
52
+ execSync(createCommand, {
53
+ stdio: 'inherit',
54
+ cwd: process.cwd()
55
+ });
56
+ } catch (error) {
57
+ console.error('❌ Error en la fase de creación:', error.message);
58
+ process.exit(1);
59
+ }
60
+
61
+ console.log(`\n🎉 ${chalk.green("¡Base de datos creada exitosamente!")}`);
62
+ console.log(`✅ Configuración y creación de '${databaseName}' completadas\n`);
63
+
64
+ } catch (error) {
65
+ console.error('Error al crear la base de datos:', error);
66
+ process.exit(1);
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Función para usar una base de datos ya configurada
72
+ * @param {string} databaseName - Nombre de la base de datos a usar
73
+ */
74
+ async function useExistingDatabase(databaseName) {
75
+ console.log(`\n=== Usando base de datos: ${databaseName} ===\n`);
76
+
77
+ console.log('📋 Usando configuración existente para crear la base de datos...\n');
78
+
79
+ try {
80
+ // Ejecutar createDatabase.js con el nombre de la base de datos existente
81
+ const createCommand = `node "${path.join(__dirname, 'createDatabase.js')}" --name="${databaseName}"`;
82
+
83
+ try {
84
+ execSync(createCommand, {
85
+ stdio: 'inherit',
86
+ cwd: process.cwd()
87
+ });
88
+ } catch (error) {
89
+ console.error('❌ Error al crear la base de datos:', error.message);
90
+ process.exit(1);
91
+ }
92
+
93
+ console.log(`\n🎉 ${chalk.green("¡Base de datos lista para usar!")}`);
94
+ console.log(`✅ Base de datos '${databaseName}' creada usando configuración existente\n`);
95
+
96
+ } catch (error) {
97
+ console.log('❌ Error al crear la base de datos:', error);
98
+ process.exit(1);
99
+ }
100
+ }
101
+
102
+ async function main() {
103
+ //const dbcubelog = new DBCubeLogger(`❤️ ${chalk.green("Creemos una base de datos...")}\n`);
104
+ console.log(`\n💚 ${chalk.green("Creemos una base de datos...")}`);
105
+
106
+ try {
107
+ // Obtener las bases de datos configuradas
108
+ const spinner = ora('Cargando bases de datos configuradas...').start();
109
+ const configuredDatabases = await ConfigFileUtils.getConfiguredDatabases();
110
+ await alwait(1000);
111
+ spinner.succeed(`¡Configuracion de bases de datos cargada!\n`);
112
+
113
+ // Preparar las opciones para el menú
114
+ const choices = [];
115
+
116
+ // Agregar las bases de datos configuradas
117
+ configuredDatabases.forEach(element => {
118
+ choices.push({
119
+ name: `${element.name} (${element.type})`,
120
+ value: element.name,
121
+ description: `${chalk.white(` Usar la configuración para la base de datos: \n 📦 ${element.name}`)}`
122
+ });
123
+ });
124
+ let selected = 'create';
125
+ if(choices.length > 0){
126
+ // Agregar opción para crear nueva base de datos
127
+ choices.push({
128
+ name: 'Crear nueva configuración\n',
129
+ value: 'create',
130
+ description: `📦 ${chalk.white(" Crear una nueva configuración de base de datos")}`
131
+ });
132
+ // Mostrar menú de selección con inquirer
133
+ selected = await select({
134
+ message: 'Seleccione una base de datos o cree una nueva:',
135
+ choices: choices
136
+ });
137
+ }
138
+
139
+ console.clear();
140
+ console.log(`\n💚 ${chalk.green("Creemos una base de datos...")}`);
141
+ if (selected === 'create') {
142
+ // El usuario quiere crear una nueva base de datos
143
+ await createNewDatabase();
144
+ } else {
145
+ // El usuario quiere usar una base de datos existente
146
+ await useExistingDatabase(selected);
147
+ }
148
+ } catch (error) {
149
+ console.error('Error inesperado:', error);
150
+ }
151
+ }
152
+
153
+ // Ejecutar el ejemplo
154
+ main().catch(error => {
155
+ console.error('Error fatal:', error);
156
+ process.exit(1);
157
+ });
@@ -0,0 +1,76 @@
1
+ const { default: Schema } = require('@dbcube/schema-builder');
2
+ const ConfigFileUtils = require('./../../../utils/ConfigFileUtils');
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const FileUtils = require('./../../../utils/FileUtils');
6
+ const { default: chalk } = require('chalk');
7
+ const { default: ora } = require('ora');
8
+ const { default: alwait } = require('alwait');
9
+
10
+ async function main() {
11
+ // Suprimir logs de dotenv
12
+ process.env.DOTENV_SILENT = 'true';
13
+
14
+ console.clear();
15
+ console.log(`\n🌱 ${chalk.green("Ejecutando seeders...")}`);
16
+ try {
17
+ // Verificar y leer archivos de la carpeta cubes
18
+ const spinner = ora('Preparando ejecución de seeders...').start();
19
+ await alwait(500);
20
+ const cubesDir = path.join(process.cwd(), 'dbcube', 'cubes');
21
+
22
+ // Verificar si la carpeta existe
23
+ if (!fs.existsSync(cubesDir)) {
24
+ spinner.fail('Carpeta de cubes no encontrada');
25
+ throw new Error('❌ The cubes folder does not exist');
26
+ }
27
+
28
+ // Leer todos los archivos en la carpeta
29
+ const cubeFiles = FileUtils.getCubeFilesRecursively('dbcube', 'table.cube')
30
+
31
+ if (cubeFiles.length === 0) {
32
+ spinner.fail('No hay cubes para ejecutar');
33
+ throw new Error('❌ There are no cubes to execute');
34
+ } else {
35
+ spinner.succeed('Cubes encontrados correctamente');
36
+
37
+ const loadingSpinner = ora('Cargando configuraciones de base de datos...').start();
38
+ let countTableCreated = 0;
39
+ const configuredDatabases = await ConfigFileUtils.getConfiguredDatabases();
40
+ loadingSpinner.succeed(`Configuraciones cargadas (${configuredDatabases.length} bases de datos)`);
41
+
42
+ // Recorrer cada archivo y mostrar su contenido
43
+ for (const config of configuredDatabases) {
44
+ const seederSpinner = ora(`Ejecutando seeders para: ${config.name} (${config.type})...`).start();
45
+ const schema = new Schema(config.name);
46
+ await schema.executeSeeders();
47
+ seederSpinner.succeed(`Seeders ejecutados para: ${config.name}`);
48
+ countTableCreated++;
49
+ }
50
+
51
+ if(countTableCreated==0) {
52
+ console.log(`\n⚠️ ${chalk.yellow('No hay seeders para ejecutar.')}`);
53
+ } else {
54
+ console.log(`\n🎉 ${chalk.green(`Seeders ejecutados exitosamente en ${countTableCreated} base(s) de datos!`)}`);
55
+ }
56
+
57
+ }
58
+ } catch (error) {
59
+ if(error.message.includes("reading 'init'")){
60
+ console.error('❌ Configuracion de base de datos no encontrada\n');
61
+ console.error('Ejecute el comando para crear una nueva base de datos:');
62
+ console.error(`\tdbcube run create:database`);
63
+ console.error('\nO verifique que la base de datos este configurada en el archivo dbcube.config.js\n');
64
+ process.exit(1);
65
+ } else if(error.message.includes("reading 'getDatabase'")){
66
+ console.error('- Se sugiere cambiar el linea o crear la base de datos a la que se hace referencia.');
67
+ }else{
68
+ console.error('Error aqui:', error);
69
+ console.error('Error aqui:', error.message);
70
+ }
71
+ }
72
+ console.log('\n');
73
+ }
74
+
75
+ // Ejecutar el ejemplo
76
+ main().catch(console.error);
@@ -0,0 +1,76 @@
1
+ const { default: Schema } = require('@dbcube/schema-builder');
2
+ const ConfigFileUtils = require('./../../../utils/ConfigFileUtils');
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const FileUtils = require('./../../../utils/FileUtils');
6
+ const { default: chalk } = require('chalk');
7
+ const { default: ora } = require('ora');
8
+ const { default: alwait } = require('alwait');
9
+
10
+ async function main() {
11
+ // Suprimir logs de dotenv
12
+ process.env.DOTENV_SILENT = 'true';
13
+
14
+ console.clear();
15
+ console.log(`\n🗑️ ${chalk.green("Ejecutando fresh tables...")}`);
16
+ try {
17
+ // Verificar y leer archivos de la carpeta cubes
18
+ const spinner = ora('Preparando ejecución fresh de tablas...').start();
19
+ await alwait(500);
20
+ const cubesDir = path.join(process.cwd(), 'dbcube', 'cubes');
21
+
22
+ // Verificar si la carpeta existe
23
+ if (!fs.existsSync(cubesDir)) {
24
+ spinner.fail('Carpeta de cubes no encontrada');
25
+ throw new Error('❌ The cubes folder does not exist');
26
+ }
27
+
28
+ // Leer todos los archivos en la carpeta
29
+ const cubeFiles = FileUtils.getCubeFilesRecursively('dbcube', 'table.cube')
30
+
31
+ if (cubeFiles.length === 0) {
32
+ spinner.fail('No hay cubes para ejecutar');
33
+ throw new Error('❌ There are no cubes to execute');
34
+ } else {
35
+ spinner.succeed('Cubes encontrados correctamente');
36
+
37
+ const loadingSpinner = ora('Cargando configuraciones de base de datos...').start();
38
+ let countTableCreated = 0;
39
+ const configuredDatabases = await ConfigFileUtils.getConfiguredDatabases();
40
+ loadingSpinner.succeed(`Configuraciones cargadas (${configuredDatabases.length} bases de datos)`);
41
+
42
+ // Recorrer cada archivo y mostrar su contenido
43
+ for (const config of configuredDatabases) {
44
+ const freshSpinner = ora(`Ejecutando fresh tables para: ${config.name} (${config.type})...`).start();
45
+ const schema = new Schema(config.name);
46
+ await schema.freshTables();
47
+ freshSpinner.succeed(`Fresh tables ejecutado para: ${config.name}`);
48
+ countTableCreated++;
49
+ }
50
+
51
+ if(countTableCreated==0) {
52
+ console.log(`\n⚠️ ${chalk.yellow('No hay tablas para procesar.')}`);
53
+ } else {
54
+ console.log(`\n🎉 ${chalk.green(`Fresh tables ejecutado exitosamente en ${countTableCreated} base(s) de datos!`)}`);
55
+ }
56
+
57
+ }
58
+ } catch (error) {
59
+ if(error.message.includes("reading 'init'")){
60
+ console.error('❌ Configuracion de base de datos no encontrada\n');
61
+ console.error('Ejecute el comando para crear una nueva base de datos:');
62
+ console.error(`\tdbcube run create:database`);
63
+ console.error('\nO verifique que la base de datos este configurada en el archivo dbcube.config.js\n');
64
+ process.exit(1);
65
+ } else if(error.message.includes("reading 'getDatabase'")){
66
+ console.error('- Se sugiere cambiar el linea o crear la base de datos a la que se hace referencia.');
67
+ }else{
68
+ console.error('Error aqui:', error);
69
+ console.error('Error aqui:', error.message);
70
+ }
71
+ }
72
+ console.log('\n');
73
+ }
74
+
75
+ // Ejecutar el ejemplo
76
+ main().catch(console.error);