dbcube 1.1.56 → 1.1.58
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/index.cjs +25 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +0 -1
- package/dist/index.js +25 -26
- package/package.json +1 -1
- package/src/lib/Dbcube.ts +28 -30
package/dist/index.cjs
CHANGED
|
@@ -117,7 +117,6 @@ var Dbcube = class _Dbcube {
|
|
|
117
117
|
configPath;
|
|
118
118
|
config;
|
|
119
119
|
databases;
|
|
120
|
-
initialized;
|
|
121
120
|
/**
|
|
122
121
|
* Creates a new Dbcube instance (Singleton pattern)
|
|
123
122
|
*
|
|
@@ -134,7 +133,6 @@ var Dbcube = class _Dbcube {
|
|
|
134
133
|
this.configPath = import_path.default.join(process.cwd(), "dbcube.config.js");
|
|
135
134
|
this.config = new import_core.Config();
|
|
136
135
|
this.databases = {};
|
|
137
|
-
this.initialized = false;
|
|
138
136
|
_Dbcube.instance = this;
|
|
139
137
|
}
|
|
140
138
|
/**
|
|
@@ -170,31 +168,32 @@ var Dbcube = class _Dbcube {
|
|
|
170
168
|
* ```
|
|
171
169
|
*/
|
|
172
170
|
async init(configCreate = {}) {
|
|
173
|
-
if (
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
171
|
+
if (configCreate.databaseName && !_Dbcube.instance.databases[configCreate.databaseName]) {
|
|
172
|
+
await this.loadConfig();
|
|
173
|
+
console.log("///////////// ESTAMOS AQUI /////////////////////");
|
|
174
|
+
let config;
|
|
175
|
+
try {
|
|
176
|
+
const requireUrl = typeof __filename !== "undefined" ? __filename : process.cwd();
|
|
177
|
+
const require2 = (0, import_module.createRequire)(requireUrl);
|
|
178
|
+
delete require2.cache[require2.resolve(this.configPath)];
|
|
179
|
+
const configModule = require2(this.configPath);
|
|
180
|
+
config = configModule.default || configModule;
|
|
181
|
+
} catch (error) {
|
|
182
|
+
console.log("\u274C Config load error:", error);
|
|
183
|
+
if (error.code === "MODULE_NOT_FOUND") {
|
|
184
|
+
console.log("\u274C Config file not found, please create a dbcube.config.js file");
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
config(this.config);
|
|
190
|
+
const databases = Object.keys(this.config.getAllDatabases());
|
|
191
|
+
for (const database of databases) {
|
|
192
|
+
this.databases[database] = new import_query_builder.Database(database);
|
|
193
|
+
}
|
|
194
|
+
if (configCreate.databaseName) {
|
|
195
|
+
this.databases[configCreate.databaseName] = new import_query_builder.Database(configCreate.databaseName);
|
|
188
196
|
}
|
|
189
|
-
throw error;
|
|
190
|
-
}
|
|
191
|
-
config(this.config);
|
|
192
|
-
const databases = Object.keys(this.config.getAllDatabases());
|
|
193
|
-
for (const database of databases) {
|
|
194
|
-
this.databases[database] = new import_query_builder.Database(database);
|
|
195
|
-
}
|
|
196
|
-
if (configCreate.databaseName) {
|
|
197
|
-
this.databases[configCreate.databaseName] = new import_query_builder.Database(configCreate.databaseName);
|
|
198
197
|
}
|
|
199
198
|
}
|
|
200
199
|
/**
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/Dbcube.ts","../src/lib/FileUtils.ts"],"sourcesContent":["import { Dbcube } from './lib/Dbcube';\r\nimport { Database, Table } from '@dbcube/query-builder';\r\n\r\n// Re-export the types directly from the definition\r\nexport { \r\n Dbcube,\r\n Database,\r\n Table\r\n};\r\n\r\n// Export types using interface definitions for better compatibility\r\nexport type DatabaseRecord = Record<string, any>;\r\nexport type WhereCallback = (query: Table) => void;","import { Config } from '@dbcube/core';\r\nimport { Database } from '@dbcube/query-builder';\r\nimport FileUtils from './FileUtils';\r\nimport path from 'path';\r\nimport { createRequire } from 'module';\r\n\r\n/**\r\n * DBCube ORM - Main class for database management\r\n * \r\n * A lightweight, flexible ORM that supports multiple database engines including \r\n * MySQL, PostgreSQL, SQLite, and MongoDB with a fluent query builder interface.\r\n * \r\n * @example\r\n * ```typescript\r\n * import { Dbcube } from 'dbcube';\r\n * \r\n * const dbcube = new Dbcube();\r\n * await dbcube.init();\r\n * \r\n * // Get a database connection\r\n * const db = dbcube.database('myDatabase');\r\n * \r\n * // Use query builder\r\n * const users = await db.table('users').select().where('active', true).get();\r\n * ```\r\n * \r\n * @class\r\n * @author Albert Araya\r\n * @license MIT\r\n */\r\nexport class Dbcube {\r\n private static instance: Dbcube;\r\n private configPath!: string;\r\n private config: any;\r\n private databases!: Record<string, any>;\r\n private initialized!: boolean;\r\n\r\n /**\r\n * Creates a new Dbcube instance (Singleton pattern)\r\n * \r\n * @constructor\r\n * @example\r\n * ```typescript\r\n * const dbcube = new Dbcube();\r\n * ```\r\n */\r\n constructor() {\r\n if (Dbcube.instance) {\r\n return Dbcube.instance;\r\n }\r\n this.configPath = path.join(process.cwd(), 'dbcube.config.js');\r\n this.config = new Config();\r\n this.databases = {};\r\n this.initialized = false;\r\n\r\n Dbcube.instance = this;\r\n }\r\n\r\n /**\r\n * Loads configuration from dbcube.config.js file\r\n * \r\n * @private\r\n * @returns {Promise<void>}\r\n * @throws {Error} If config file doesn't exist\r\n */\r\n async loadConfig() {\r\n const exists = await FileUtils.fileExists(this.configPath);\r\n exists ?? console.log('❌ Dont exists config file, please create a dbcube.config.js file');\r\n }\r\n\r\n /**\r\n * Initializes the Dbcube ORM with database configurations\r\n * \r\n * @param {Object} configCreate - Optional configuration for creating new database\r\n * @param {string} [configCreate.databaseName] - Name of the database to create\r\n * @param {string} [configCreate.motor] - Database engine (mysql, postgres, sqlite, mongodb)\r\n * @param {any} [configCreate.configAnswers] - Additional configuration answers\r\n * @returns {Promise<void>}\r\n * \r\n * @example\r\n * ```typescript\r\n * // Initialize with existing config\r\n * await dbcube.init();\r\n * \r\n * // Initialize with new database creation\r\n * await dbcube.init({\r\n * databaseName: 'myapp',\r\n * motor: 'mysql'\r\n * });\r\n * ```\r\n */\r\n async init(configCreate: { databaseName?: string; motor?: string; configAnswers?: any } = {}) {\r\n if (this.initialized) return;\r\n await this.loadConfig();\r\n console.log(\"///////////// ESTAMOS AQUI /////////////////////\")\r\n\r\n let config: any;\r\n try {\r\n // Use createRequire for better Next.js compatibility\r\n // Use __filename for CJS, process.cwd() for ESM\r\n const requireUrl = typeof __filename !== 'undefined' ? __filename : process.cwd();\r\n const require = createRequire(requireUrl);\r\n // Clear require cache to ensure fresh load\r\n delete require.cache[require.resolve(this.configPath)];\r\n const configModule = require(this.configPath);\r\n config = configModule.default || configModule;\r\n } catch (error: any) {\r\n console.log('❌ Config load error:', error);\r\n if (error.code === 'MODULE_NOT_FOUND') {\r\n console.log('❌ Config file not found, please create a dbcube.config.js file');\r\n return;\r\n }\r\n throw error;\r\n }\r\n\r\n config(this.config);\r\n\r\n const databases = Object.keys(this.config.getAllDatabases());\r\n\r\n for (const database of databases) {\r\n this.databases[database] = new Database(database);\r\n }\r\n if (configCreate.databaseName) {\r\n this.databases[configCreate.databaseName] = new Database(configCreate.databaseName);\r\n }\r\n }\r\n\r\n /**\r\n * Gets a database connection instance for query building\r\n * \r\n * @param {string} databaseName - Name of the database configuration\r\n * @returns {Database} Database instance with query builder capabilities\r\n * \r\n * @example\r\n * ```typescript\r\n * // Get database connection\r\n * const db = dbcube.database('myapp');\r\n * \r\n * // Use query builder methods\r\n * const users = await db.table('users')\r\n * .select(['id', 'name', 'email'])\r\n * .where('status', 'active')\r\n * .orderBy('created_at', 'desc')\r\n * .limit(10)\r\n * .get();\r\n * \r\n * // Insert data\r\n * await db.table('users').insert({\r\n * name: 'John Doe',\r\n * email: 'john@example.com'\r\n * });\r\n * \r\n * // Update data\r\n * await db.table('users')\r\n * .where('id', 1)\r\n * .update({ status: 'inactive' });\r\n * \r\n * // Delete data\r\n * await db.table('users').where('id', 1).delete();\r\n * ```\r\n */\r\n database(databaseName: string) {\r\n return this.databases[databaseName];\r\n }\r\n}\r\n\r\nexport default Dbcube;","import * as fs from 'fs';\r\nimport * as path from 'path';\r\n\r\nexport class FileUtils {\r\n /**\r\n * Verifica si un archivo existe (asincrónico).\r\n * @param filePath - Ruta del archivo.\r\n * @returns Promise que resuelve true si el archivo existe, false si no.\r\n */\r\n static async fileExists(filePath: string): Promise<boolean> {\r\n return new Promise<boolean>((resolve) => {\r\n fs.access(path.resolve(filePath), fs.constants.F_OK, (err) => {\r\n resolve(!err);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Verifica si un archivo existe (sincrónico).\r\n * @param filePath - Ruta del archivo.\r\n * @returns True si el archivo existe, false si no.\r\n */\r\n static fileExistsSync(filePath: string): boolean {\r\n try {\r\n fs.accessSync(path.resolve(filePath), fs.constants.F_OK);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Extrae el nombre de la base de datos de un string con formato @database().\r\n * @param input - String de entrada que contiene la referencia a la base de datos.\r\n * @returns El nombre de la base de datos o null si no se encuentra.\r\n */\r\n static extractDatabaseName(input: string): string | null {\r\n const match = input.match(/@database\\([\"']?([\\w-]+)[\"']?\\)/);\r\n return match ? match[1] : null;\r\n }\r\n\r\n /**\r\n * Lee recursivamente archivos que terminan en un sufijo dado y los ordena numéricamente.\r\n * @param dir - Directorio base (relativo o absoluto).\r\n * @param suffix - Sufijo de archivo (como 'table.cube').\r\n * @returns Rutas absolutas de los archivos encontrados y ordenados.\r\n */\r\n static getCubeFilesRecursively(dir: string, suffix: string): string[] {\r\n const baseDir = path.resolve(dir); // ✅ Asegura que sea absoluto\r\n const cubeFiles: string[] = [];\r\n\r\n function recurse(currentDir: string): void {\r\n const entries = fs.readdirSync(currentDir, { withFileTypes: true });\r\n \r\n for (const entry of entries) {\r\n const fullPath = path.join(currentDir, entry.name);\r\n \r\n if (entry.isDirectory()) {\r\n recurse(fullPath);\r\n } else if (entry.isFile() && (entry.name.endsWith(suffix) || entry.name.includes(suffix))) {\r\n cubeFiles.push(fullPath); // Ya es absoluta\r\n }\r\n }\r\n }\r\n\r\n recurse(baseDir);\r\n\r\n // Ordenar por número si los archivos comienzan con un número\r\n cubeFiles.sort((a: string, b: string) => {\r\n const aNum = parseInt(path.basename(a));\r\n const bNum = parseInt(path.basename(b));\r\n return (isNaN(aNum) ? 0 : aNum) - (isNaN(bNum) ? 0 : bNum);\r\n });\r\n\r\n return cubeFiles;\r\n }\r\n}\r\n\r\nexport default FileUtils;"],"mappings":"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","names":["resolve","path","require","import_query_builder"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/Dbcube.ts","../src/lib/FileUtils.ts"],"sourcesContent":["import { Dbcube } from './lib/Dbcube';\r\nimport { Database, Table } from '@dbcube/query-builder';\r\n\r\n// Re-export the types directly from the definition\r\nexport { \r\n Dbcube,\r\n Database,\r\n Table\r\n};\r\n\r\n// Export types using interface definitions for better compatibility\r\nexport type DatabaseRecord = Record<string, any>;\r\nexport type WhereCallback = (query: Table) => void;","import { Config } from '@dbcube/core';\r\nimport { Database } from '@dbcube/query-builder';\r\nimport FileUtils from './FileUtils';\r\nimport path from 'path';\r\nimport { createRequire } from 'module';\r\n\r\n/**\r\n * DBCube ORM - Main class for database management\r\n * \r\n * A lightweight, flexible ORM that supports multiple database engines including \r\n * MySQL, PostgreSQL, SQLite, and MongoDB with a fluent query builder interface.\r\n * \r\n * @example\r\n * ```typescript\r\n * import { Dbcube } from 'dbcube';\r\n * \r\n * const dbcube = new Dbcube();\r\n * await dbcube.init();\r\n * \r\n * // Get a database connection\r\n * const db = dbcube.database('myDatabase');\r\n * \r\n * // Use query builder\r\n * const users = await db.table('users').select().where('active', true).get();\r\n * ```\r\n * \r\n * @class\r\n * @author Albert Araya\r\n * @license MIT\r\n */\r\nexport class Dbcube {\r\n private static instance: Dbcube;\r\n private configPath!: string;\r\n private config: any;\r\n private databases!: Record<string, any>;\r\n\r\n /**\r\n * Creates a new Dbcube instance (Singleton pattern)\r\n * \r\n * @constructor\r\n * @example\r\n * ```typescript\r\n * const dbcube = new Dbcube();\r\n * ```\r\n */\r\n constructor() {\r\n if (Dbcube.instance) {\r\n return Dbcube.instance;\r\n }\r\n this.configPath = path.join(process.cwd(), 'dbcube.config.js');\r\n this.config = new Config();\r\n this.databases = {};\r\n Dbcube.instance = this;\r\n }\r\n\r\n /**\r\n * Loads configuration from dbcube.config.js file\r\n * \r\n * @private\r\n * @returns {Promise<void>}\r\n * @throws {Error} If config file doesn't exist\r\n */\r\n async loadConfig() {\r\n const exists = await FileUtils.fileExists(this.configPath);\r\n exists ?? console.log('❌ Dont exists config file, please create a dbcube.config.js file');\r\n }\r\n\r\n /**\r\n * Initializes the Dbcube ORM with database configurations\r\n * \r\n * @param {Object} configCreate - Optional configuration for creating new database\r\n * @param {string} [configCreate.databaseName] - Name of the database to create\r\n * @param {string} [configCreate.motor] - Database engine (mysql, postgres, sqlite, mongodb)\r\n * @param {any} [configCreate.configAnswers] - Additional configuration answers\r\n * @returns {Promise<void>}\r\n * \r\n * @example\r\n * ```typescript\r\n * // Initialize with existing config\r\n * await dbcube.init();\r\n * \r\n * // Initialize with new database creation\r\n * await dbcube.init({\r\n * databaseName: 'myapp',\r\n * motor: 'mysql'\r\n * });\r\n * ```\r\n */\r\n async init(configCreate: { databaseName?: string; motor?: string; configAnswers?: any } = {}) {\r\n if (configCreate.databaseName && !Dbcube.instance.databases[configCreate.databaseName]) {\r\n await this.loadConfig();\r\n console.log(\"///////////// ESTAMOS AQUI /////////////////////\")\r\n\r\n let config: any;\r\n try {\r\n // Use createRequire for better Next.js compatibility\r\n // Use __filename for CJS, process.cwd() for ESM\r\n const requireUrl = typeof __filename !== 'undefined' ? __filename : process.cwd();\r\n const require = createRequire(requireUrl);\r\n // Clear require cache to ensure fresh load\r\n delete require.cache[require.resolve(this.configPath)];\r\n const configModule = require(this.configPath);\r\n config = configModule.default || configModule;\r\n } catch (error: any) {\r\n console.log('❌ Config load error:', error);\r\n if (error.code === 'MODULE_NOT_FOUND') {\r\n console.log('❌ Config file not found, please create a dbcube.config.js file');\r\n return;\r\n }\r\n throw error;\r\n }\r\n\r\n config(this.config);\r\n\r\n const databases = Object.keys(this.config.getAllDatabases());\r\n\r\n for (const database of databases) {\r\n this.databases[database] = new Database(database);\r\n }\r\n if (configCreate.databaseName) {\r\n this.databases[configCreate.databaseName] = new Database(configCreate.databaseName);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets a database connection instance for query building\r\n * \r\n * @param {string} databaseName - Name of the database configuration\r\n * @returns {Database} Database instance with query builder capabilities\r\n * \r\n * @example\r\n * ```typescript\r\n * // Get database connection\r\n * const db = dbcube.database('myapp');\r\n * \r\n * // Use query builder methods\r\n * const users = await db.table('users')\r\n * .select(['id', 'name', 'email'])\r\n * .where('status', 'active')\r\n * .orderBy('created_at', 'desc')\r\n * .limit(10)\r\n * .get();\r\n * \r\n * // Insert data\r\n * await db.table('users').insert({\r\n * name: 'John Doe',\r\n * email: 'john@example.com'\r\n * });\r\n * \r\n * // Update data\r\n * await db.table('users')\r\n * .where('id', 1)\r\n * .update({ status: 'inactive' });\r\n * \r\n * // Delete data\r\n * await db.table('users').where('id', 1).delete();\r\n * ```\r\n */\r\n database(databaseName: string) {\r\n return this.databases[databaseName];\r\n }\r\n}\r\n\r\nexport default Dbcube;","import * as fs from 'fs';\r\nimport * as path from 'path';\r\n\r\nexport class FileUtils {\r\n /**\r\n * Verifica si un archivo existe (asincrónico).\r\n * @param filePath - Ruta del archivo.\r\n * @returns Promise que resuelve true si el archivo existe, false si no.\r\n */\r\n static async fileExists(filePath: string): Promise<boolean> {\r\n return new Promise<boolean>((resolve) => {\r\n fs.access(path.resolve(filePath), fs.constants.F_OK, (err) => {\r\n resolve(!err);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Verifica si un archivo existe (sincrónico).\r\n * @param filePath - Ruta del archivo.\r\n * @returns True si el archivo existe, false si no.\r\n */\r\n static fileExistsSync(filePath: string): boolean {\r\n try {\r\n fs.accessSync(path.resolve(filePath), fs.constants.F_OK);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Extrae el nombre de la base de datos de un string con formato @database().\r\n * @param input - String de entrada que contiene la referencia a la base de datos.\r\n * @returns El nombre de la base de datos o null si no se encuentra.\r\n */\r\n static extractDatabaseName(input: string): string | null {\r\n const match = input.match(/@database\\([\"']?([\\w-]+)[\"']?\\)/);\r\n return match ? match[1] : null;\r\n }\r\n\r\n /**\r\n * Lee recursivamente archivos que terminan en un sufijo dado y los ordena numéricamente.\r\n * @param dir - Directorio base (relativo o absoluto).\r\n * @param suffix - Sufijo de archivo (como 'table.cube').\r\n * @returns Rutas absolutas de los archivos encontrados y ordenados.\r\n */\r\n static getCubeFilesRecursively(dir: string, suffix: string): string[] {\r\n const baseDir = path.resolve(dir); // ✅ Asegura que sea absoluto\r\n const cubeFiles: string[] = [];\r\n\r\n function recurse(currentDir: string): void {\r\n const entries = fs.readdirSync(currentDir, { withFileTypes: true });\r\n \r\n for (const entry of entries) {\r\n const fullPath = path.join(currentDir, entry.name);\r\n \r\n if (entry.isDirectory()) {\r\n recurse(fullPath);\r\n } else if (entry.isFile() && (entry.name.endsWith(suffix) || entry.name.includes(suffix))) {\r\n cubeFiles.push(fullPath); // Ya es absoluta\r\n }\r\n }\r\n }\r\n\r\n recurse(baseDir);\r\n\r\n // Ordenar por número si los archivos comienzan con un número\r\n cubeFiles.sort((a: string, b: string) => {\r\n const aNum = parseInt(path.basename(a));\r\n const bNum = parseInt(path.basename(b));\r\n return (isNaN(aNum) ? 0 : aNum) - (isNaN(bNum) ? 0 : bNum);\r\n });\r\n\r\n return cubeFiles;\r\n }\r\n}\r\n\r\nexport default FileUtils;"],"mappings":"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","names":["resolve","path","require","import_query_builder"]}
|
package/dist/index.d.mts
CHANGED
package/dist/index.js
CHANGED
|
@@ -79,7 +79,6 @@ var Dbcube = class _Dbcube {
|
|
|
79
79
|
configPath;
|
|
80
80
|
config;
|
|
81
81
|
databases;
|
|
82
|
-
initialized;
|
|
83
82
|
/**
|
|
84
83
|
* Creates a new Dbcube instance (Singleton pattern)
|
|
85
84
|
*
|
|
@@ -96,7 +95,6 @@ var Dbcube = class _Dbcube {
|
|
|
96
95
|
this.configPath = path2.join(process.cwd(), "dbcube.config.js");
|
|
97
96
|
this.config = new Config();
|
|
98
97
|
this.databases = {};
|
|
99
|
-
this.initialized = false;
|
|
100
98
|
_Dbcube.instance = this;
|
|
101
99
|
}
|
|
102
100
|
/**
|
|
@@ -132,31 +130,32 @@ var Dbcube = class _Dbcube {
|
|
|
132
130
|
* ```
|
|
133
131
|
*/
|
|
134
132
|
async init(configCreate = {}) {
|
|
135
|
-
if (
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
133
|
+
if (configCreate.databaseName && !_Dbcube.instance.databases[configCreate.databaseName]) {
|
|
134
|
+
await this.loadConfig();
|
|
135
|
+
console.log("///////////// ESTAMOS AQUI /////////////////////");
|
|
136
|
+
let config;
|
|
137
|
+
try {
|
|
138
|
+
const requireUrl = typeof __filename !== "undefined" ? __filename : process.cwd();
|
|
139
|
+
const require2 = createRequire(requireUrl);
|
|
140
|
+
delete require2.cache[require2.resolve(this.configPath)];
|
|
141
|
+
const configModule = require2(this.configPath);
|
|
142
|
+
config = configModule.default || configModule;
|
|
143
|
+
} catch (error) {
|
|
144
|
+
console.log("\u274C Config load error:", error);
|
|
145
|
+
if (error.code === "MODULE_NOT_FOUND") {
|
|
146
|
+
console.log("\u274C Config file not found, please create a dbcube.config.js file");
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
config(this.config);
|
|
152
|
+
const databases = Object.keys(this.config.getAllDatabases());
|
|
153
|
+
for (const database of databases) {
|
|
154
|
+
this.databases[database] = new Database(database);
|
|
155
|
+
}
|
|
156
|
+
if (configCreate.databaseName) {
|
|
157
|
+
this.databases[configCreate.databaseName] = new Database(configCreate.databaseName);
|
|
150
158
|
}
|
|
151
|
-
throw error;
|
|
152
|
-
}
|
|
153
|
-
config(this.config);
|
|
154
|
-
const databases = Object.keys(this.config.getAllDatabases());
|
|
155
|
-
for (const database of databases) {
|
|
156
|
-
this.databases[database] = new Database(database);
|
|
157
|
-
}
|
|
158
|
-
if (configCreate.databaseName) {
|
|
159
|
-
this.databases[configCreate.databaseName] = new Database(configCreate.databaseName);
|
|
160
159
|
}
|
|
161
160
|
}
|
|
162
161
|
/**
|
package/package.json
CHANGED
package/src/lib/Dbcube.ts
CHANGED
|
@@ -33,7 +33,6 @@ export class Dbcube {
|
|
|
33
33
|
private configPath!: string;
|
|
34
34
|
private config: any;
|
|
35
35
|
private databases!: Record<string, any>;
|
|
36
|
-
private initialized!: boolean;
|
|
37
36
|
|
|
38
37
|
/**
|
|
39
38
|
* Creates a new Dbcube instance (Singleton pattern)
|
|
@@ -51,8 +50,6 @@ export class Dbcube {
|
|
|
51
50
|
this.configPath = path.join(process.cwd(), 'dbcube.config.js');
|
|
52
51
|
this.config = new Config();
|
|
53
52
|
this.databases = {};
|
|
54
|
-
this.initialized = false;
|
|
55
|
-
|
|
56
53
|
Dbcube.instance = this;
|
|
57
54
|
}
|
|
58
55
|
|
|
@@ -90,38 +87,39 @@ export class Dbcube {
|
|
|
90
87
|
* ```
|
|
91
88
|
*/
|
|
92
89
|
async init(configCreate: { databaseName?: string; motor?: string; configAnswers?: any } = {}) {
|
|
93
|
-
if (
|
|
94
|
-
|
|
95
|
-
|
|
90
|
+
if (configCreate.databaseName && !Dbcube.instance.databases[configCreate.databaseName]) {
|
|
91
|
+
await this.loadConfig();
|
|
92
|
+
console.log("///////////// ESTAMOS AQUI /////////////////////")
|
|
96
93
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
94
|
+
let config: any;
|
|
95
|
+
try {
|
|
96
|
+
// Use createRequire for better Next.js compatibility
|
|
97
|
+
// Use __filename for CJS, process.cwd() for ESM
|
|
98
|
+
const requireUrl = typeof __filename !== 'undefined' ? __filename : process.cwd();
|
|
99
|
+
const require = createRequire(requireUrl);
|
|
100
|
+
// Clear require cache to ensure fresh load
|
|
101
|
+
delete require.cache[require.resolve(this.configPath)];
|
|
102
|
+
const configModule = require(this.configPath);
|
|
103
|
+
config = configModule.default || configModule;
|
|
104
|
+
} catch (error: any) {
|
|
105
|
+
console.log('❌ Config load error:', error);
|
|
106
|
+
if (error.code === 'MODULE_NOT_FOUND') {
|
|
107
|
+
console.log('❌ Config file not found, please create a dbcube.config.js file');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
throw error;
|
|
112
111
|
}
|
|
113
|
-
throw error;
|
|
114
|
-
}
|
|
115
112
|
|
|
116
|
-
|
|
113
|
+
config(this.config);
|
|
117
114
|
|
|
118
|
-
|
|
115
|
+
const databases = Object.keys(this.config.getAllDatabases());
|
|
119
116
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
117
|
+
for (const database of databases) {
|
|
118
|
+
this.databases[database] = new Database(database);
|
|
119
|
+
}
|
|
120
|
+
if (configCreate.databaseName) {
|
|
121
|
+
this.databases[configCreate.databaseName] = new Database(configCreate.databaseName);
|
|
122
|
+
}
|
|
125
123
|
}
|
|
126
124
|
}
|
|
127
125
|
|