UNPKG

@launchql/cli

Version:
84 lines (83 loc) 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAvailableDatabases = getAvailableDatabases; exports.selectDatabase = selectDatabase; exports.getTargetDatabase = getTargetDatabase; const pg_cache_1 = require("pg-cache"); const pg_env_1 = require("pg-env"); /** * Get list of available databases from PostgreSQL */ async function getAvailableDatabases(options = {}) { const { excludeTemplates = true, excludePostgres = true, excludeSystemDbs = true } = options; const db = await (0, pg_cache_1.getPgPool)({ database: 'postgres' }); let query = ` SELECT datname FROM pg_catalog.pg_database WHERE 1=1 `; if (excludeTemplates) { query += ` AND datistemplate = FALSE`; } if (excludePostgres) { query += ` AND datname NOT IN ('postgres')`; } if (excludeSystemDbs) { query += ` AND datname !~ '^pg_'`; } query += ` ORDER BY datname`; const result = await db.query(query); return result.rows.map((row) => row.datname); } /** * Prompt user to select a database */ async function selectDatabase(argv, prompter, options = {}) { const { message = 'Select target database', multiple = false } = options; // Check if database is already specified if (!multiple && (argv.db || argv.database)) { return argv.db || argv.database; } // Get available databases const databases = await getAvailableDatabases(options); if (databases.length === 0) { throw new Error('No databases found'); } // If only one database and not forcing selection, use it if (!multiple && databases.length === 1 && !argv.interactive) { return databases[0]; } // Prompt for selection const answer = await prompter.prompt(argv, [ { type: multiple ? 'checkbox' : 'autocomplete', name: 'database', message, options: databases, required: true } ]); return answer.database; } /** * Get target database with fallback to environment */ async function getTargetDatabase(argv, prompter, options = {}) { // If database is specified in args, use it if (argv.db || argv.database) { return argv.db || argv.database; } // Try to select from available databases try { return await selectDatabase(argv, prompter, options); } catch (error) { // Fall back to environment database const pgEnv = (0, pg_env_1.getPgEnvOptions)(); if (pgEnv.database) { return pgEnv.database; } throw new Error('No database specified and no default database found'); } }