@launchql/cli
Version:
LaunchQL CLI
100 lines (95 loc) • 3.29 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@launchql/core");
const logger_1 = require("@launchql/logger");
const env_1 = require("@launchql/env");
const pg_env_1 = require("pg-env");
const utils_1 = require("../utils");
const deployed_changes_1 = require("../utils/deployed-changes");
const cli_error_1 = require("../utils/cli-error");
const log = new logger_1.Logger('revert');
const revertUsageText = `
LaunchQL Revert Command:
lql revert [OPTIONS]
Revert database changes and migrations.
Options:
--help, -h Show this help message
--recursive Revert recursively through dependencies
--package <name> Revert specific package
--to <target> Revert to specific change or tag
--to Interactive selection of deployed changes
--tx Use transactions (default: true)
--cwd <directory> Working directory (default: current directory)
Examples:
lql revert Revert latest changes
lql revert --to @v1.0.0 Revert to specific tag
lql revert --to Interactive selection from deployed changes
`;
exports.default = async (argv, prompter, _options) => {
// Show usage if explicitly requested
if (argv.help || argv.h) {
console.log(revertUsageText);
process.exit(0);
}
const database = await (0, utils_1.getTargetDatabase)(argv, prompter, {
message: 'Select database'
});
const questions = [
{
name: 'yes',
type: 'confirm',
message: 'Are you sure you want to proceed?',
required: true
},
{
name: 'tx',
type: 'confirm',
message: 'Use Transaction?',
useDefault: true,
default: true,
required: false
}
];
let { yes, recursive, cwd, tx } = await prompter.prompt(argv, questions);
if (!yes) {
log.info('Operation cancelled.');
return;
}
log.debug(`Using current directory: ${cwd}`);
let packageName;
if (recursive && argv.to !== true) {
packageName = await (0, deployed_changes_1.selectDeployedPackage)(database, argv, prompter, log, 'revert');
if (!packageName) {
await (0, cli_error_1.cliExitWithError)('No package found to revert');
}
}
const pkg = new core_1.LaunchQLPackage(cwd);
const opts = (0, env_1.getEnvOptions)({
pg: (0, pg_env_1.getPgEnvOptions)({ database }),
deployment: {
useTx: tx
}
});
let target;
if (argv.to === true) {
target = await (0, deployed_changes_1.selectDeployedChange)(database, argv, prompter, log, 'revert');
if (!target) {
await (0, cli_error_1.cliExitWithError)('No target selected, operation cancelled');
}
}
else if (packageName && argv.to) {
target = `${packageName}:${argv.to}`;
}
else if (packageName) {
target = packageName;
}
else if (argv.package && argv.to) {
target = `${argv.package}:${argv.to}`;
}
else if (argv.package) {
target = argv.package;
}
await pkg.revert(opts, target, recursive);
log.success('Revert complete.');
return argv;
};
;