UNPKG

@getsolara/solara.db

Version:

Optional database functionality for @getsolara/solara.js using quick.db

73 lines (68 loc) 3.08 kB
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 };