@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 +6 -0
- package/.lh/package.json.json +26 -0
- package/package.json +25 -0
- package/src/commands/run/database/create/addDatabaseConfig.js +193 -0
- package/src/commands/run/database/create/createDatabase.js +88 -0
- package/src/commands/run/database/create/index.js +157 -0
- package/src/commands/run/seeder/add.js +76 -0
- package/src/commands/run/table/fresh.js +76 -0
- package/src/commands/run/table/refresh.js +76 -0
- package/src/commands/run/trigger/fresh.js +76 -0
- package/src/index.js +100 -0
- package/src/lib/DBCubeLogger.js +116 -0
- package/src/lib/LoggerConsole.js +262 -0
- package/src/utils/Config.js +49 -0
- package/src/utils/ConfigFileUtils.js +295 -0
- package/src/utils/FileUtils.js +73 -0
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);
|