UNPKG

@bytebase/dbhub

Version:

Token-efficient database MCP server for PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLite

50 lines (48 loc) • 1.52 kB
// src/utils/module-loader.ts var MISSING_MODULE_RE = /Cannot find (?:package|module) '([^']+)'/; function isDriverNotInstalled(err, driver) { if (!(err instanceof Error) || !("code" in err) || err.code !== "ERR_MODULE_NOT_FOUND") { return false; } const match = err.message.match(MISSING_MODULE_RE); if (!match) { return false; } const missingSpecifier = match[1]; return missingSpecifier === driver || missingSpecifier.startsWith(`${driver}/`); } function isModuleNotFound(err) { if (!(err instanceof Error) || !("code" in err)) { return false; } const code = err.code; return code === "ERR_MODULE_NOT_FOUND" || code === "MODULE_NOT_FOUND"; } async function loadConnectors(connectorModules) { await Promise.all( connectorModules.map(async ({ load, name, driver }) => { try { await load(); } catch (err) { if (isDriverNotInstalled(err, driver)) { console.error( `Skipping ${name} connector: driver package "${driver}" not installed.` ); } else if (isModuleNotFound(err)) { const msg = err instanceof Error ? err.message : String(err); const match = msg.match(MISSING_MODULE_RE); const missing = match ? match[1] : "unknown"; console.error( `Skipping ${name} connector: required dependency "${missing}" not installed.` ); } else { throw err; } } }) ); } export { isDriverNotInstalled, loadConnectors };