@launchql/cli
Version:
LaunchQL CLI
130 lines (123 loc) • 4.07 kB
JavaScript
"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!
`);
};