UNPKG

@launchql/cli

Version:
130 lines (123 loc) 4.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@launchql/core"); const types_1 = require("@launchql/types"); const env_1 = require("@launchql/env"); const path_1 = require("path"); const pg_cache_1 = require("pg-cache"); const exportUsageText = ` LaunchQL Export Command: lql export [OPTIONS] Export database migrations from existing databases. Options: --help, -h Show this help message --author <name> Project author (default: from git config) --extensionName <name> Extension name --metaExtensionName <name> Meta extension name (default: svc) --cwd <directory> Working directory (default: current directory) Examples: lql export Export migrations from selected database `; exports.default = async (argv, prompter, _options) => { // Show usage if explicitly requested if (argv.help || argv.h) { console.log(exportUsageText); process.exit(0); } const { email, username } = (0, types_1.getGitConfigInfo)(); const cwd = argv.cwd ?? process.cwd(); const project = new core_1.LaunchQLPackage(cwd); project.ensureWorkspace(); project.resetCwd(project.workspacePath); const options = (0, env_1.getEnvOptions)(); const db = await (0, pg_cache_1.getPgPool)({ database: 'postgres' }); const databasesResult = await db.query(` SELECT datname FROM pg_catalog.pg_database WHERE datistemplate = FALSE AND datname NOT IN ('postgres') AND datname !~ '^pg_'; `); let databases; ({ databases } = await prompter.prompt(argv, [ { type: 'checkbox', name: 'databases', message: 'Select a database', options: databasesResult.rows.map(row => row.datname), required: true } ])); const dbname = databases.filter(d => d.selected).map(d => d.value)[0]; const selectedDb = await (0, pg_cache_1.getPgPool)({ database: dbname }); const dbsResult = await selectedDb.query(` SELECT id, name FROM collections_public.database; `); let database_ids; ({ database_ids } = await prompter.prompt({}, [ { type: 'checkbox', name: 'database_ids', message: 'Select database_id(s)', options: dbsResult.rows.map(db => db.name), required: true } ])); const dbInfo = { dbname, database_ids: database_ids.map(did => dbsResult.rows.find(db => db.name === did.name).id) }; const { author, extensionName, metaExtensionName } = await prompter.prompt(argv, [ { type: 'text', name: 'author', message: 'Project author', default: `${username} <${email}>`, required: true }, { type: 'text', name: 'extensionName', message: 'Extension name', default: dbInfo.database_ids[0], required: true }, { type: 'text', name: 'metaExtensionName', message: 'Meta extension name', default: 'svc', required: true } ]); const schemasResult = await selectedDb.query(`SELECT * FROM collections_public.schema WHERE database_id = $1`, [dbInfo.database_ids[0]]); const { schema_names } = await prompter.prompt({}, [ { type: 'checkbox', name: 'schema_names', message: 'Select schema_name(s)', options: schemasResult.rows.map(s => s.schema_name), default: schemasResult.rows.map(s => s.schema_name), required: true } ]); const outdir = (0, path_1.resolve)(project.workspacePath, 'packages/'); await (0, core_1.exportMigrations)({ project, options, dbInfo, author, schema_names, outdir, extensionName, metaExtensionName }); console.log(` ||| (o o) ooO--(_)--Ooo- ✨ finished! `); };