@getsolara/solara.db
Version:
Optional database functionality for @getsolara/solara.js using quick.db
73 lines (68 loc) • 3.08 kB
JavaScript
const { QuickDB } = require('quick.db');
const path = require('path');
const fs = require('fs');
function loadDbPackageFiles(dirPath, fileSuffix = '.js', recursive = false) {
const results = [];
if (!fs.existsSync(dirPath)) return results;
try {
const items = fs.readdirSync(dirPath, { withFileTypes: true });
for (const item of items) {
const fullPath = path.join(dirPath, item.name);
if (item.isDirectory() && recursive) {
results.push(...loadDbPackageFiles(fullPath, fileSuffix, recursive));
} else if (item.isFile() && item.name.endsWith(fileSuffix)) {
results.push(fullPath);
}
}
} catch (error) {
console.error(`Solara.db FileUtils: Error reading dir ${dirPath}:`, error);
}
return results;
}
function initializeDatabaseFeatures(client, dbConfig, verboseLogging) {
if (!client || typeof client.addFunction !== 'function') {
console.error("Solara.db: Invalid SolaraClient instance provided for initialization.");
return null;
}
if (!dbConfig || !dbConfig.dbPath) {
console.error("Solara.db: dbPath configuration is missing.");
return null;
}
let dbInstance = null;
try {
dbInstance = new QuickDB({ filePath: dbConfig.dbPath });
console.log("Solara.db: Database features initialized via @getsolara/solara.db at", dbConfig.dbPath);
const funcDir = path.join(__dirname, 'functions');
if (fs.existsSync(funcDir)) {
const functionFiles = loadDbPackageFiles(funcDir, '.js');
let dbFuncLoadedCount = 0;
for (const filePath of functionFiles) {
try {
const funcData = require(filePath);
if (client.addFunction(funcData)) {
dbFuncLoadedCount++;
}
} catch (funcLoadError) {
if (funcLoadError.code === 'MODULE_NOT_FOUND') {
const missingModule = funcLoadError.message.split("'")[1] || "unknown module";
console.warn(`Solara.db: Skipping function ${path.basename(filePath)} due to missing dependency: '${missingModule}'.`);
} else {
console.error(`Solara.db: Error loading function file ${path.basename(filePath)}:`, funcLoadError);
}
}
}
if (verboseLogging) {
console.log(`Solara.db: Loaded ${dbFuncLoadedCount} database-specific functions.`);
}
} else if (verboseLogging) {
console.warn("Solara.db: 'functions' directory not found in @getsolara/solara.db package.");
}
return dbInstance;
} catch (error) {
console.error("Solara.db: Failed to initialize QuickDB instance or register functions:", error);
return null;
}
}
module.exports = {
initializeDatabaseFeatures
};