@launchql/cli
Version:
LaunchQL CLI
65 lines (62 loc) • 2.13 kB
JavaScript
import { extractFirst } from '../utils';
import deps from './migrate/deps';
// Migrate subcommands
import init from './migrate/init';
import list from './migrate/list';
import status from './migrate/status';
const subcommandMap = {
init,
status,
list,
deps
};
const migrateUsageText = `
LaunchQL Migrate Commands:
launchql migrate init Initialize migration tracking in database
launchql migrate status Show current migration status
launchql migrate list List all changes (deployed and pending)
launchql migrate deps Show change dependencies
Options:
--help, -h Show this help message
--cwd Working directory (default: current directory)
`;
export default async (argv, prompter, options) => {
let { first: subcommand, newArgv } = extractFirst(argv);
// Show usage if explicitly requested
if (argv.help || argv.h || subcommand === 'help') {
console.log(migrateUsageText);
process.exit(0);
}
// Prompt if no subcommand provided
if (!subcommand) {
const answer = await prompter.prompt(argv, [
{
type: 'autocomplete',
name: 'subcommand',
message: 'What migrate operation do you want to perform?',
options: Object.keys(subcommandMap).map(cmd => ({
name: cmd,
value: cmd,
description: getSubcommandDescription(cmd)
}))
}
]);
subcommand = answer.subcommand;
}
const subcommandFn = subcommandMap[subcommand];
if (!subcommandFn) {
console.error(`Unknown migrate subcommand: ${subcommand}`);
console.log(migrateUsageText);
process.exit(1);
}
await subcommandFn(newArgv, prompter, options);
};
function getSubcommandDescription(cmd) {
const descriptions = {
init: 'Initialize migration tracking in database',
status: 'Show current migration status',
list: 'List all changes (deployed and pending)',
deps: 'Show change dependencies'
};
return descriptions[cmd] || '';
}