@launchql/cli
Version:
LaunchQL CLI
55 lines (54 loc) • 1.97 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.selectPackage = selectPackage;
const core_1 = require("@launchql/core");
const types_1 = require("@launchql/types");
/**
* Handle package selection for operations that need a specific package
* Returns the selected package name, or undefined if validation fails or no packages exist
*/
async function selectPackage(argv, prompter, cwd, operationName, log) {
const pkg = new core_1.LaunchQLPackage(cwd);
const modules = await pkg.getModules();
const moduleNames = modules.map(mod => mod.getModuleName());
// Check if any modules exist
if (!moduleNames.length) {
const errorMsg = 'No modules found in the specified directory.';
if (log) {
log.error(errorMsg);
return undefined;
}
else {
prompter.close();
throw types_1.errors.NOT_FOUND({}, errorMsg);
}
}
// If a specific package was provided, validate it
if (argv.package) {
const packageName = argv.package;
if (log)
log.info(`Using specified package: ${packageName}`);
if (!moduleNames.includes(packageName)) {
const errorMsg = `Package '${packageName}' not found. Available packages: ${moduleNames.join(', ')}`;
if (log) {
log.error(errorMsg);
return undefined;
}
else {
throw types_1.errors.NOT_FOUND({}, errorMsg);
}
}
return packageName;
}
// Interactive selection
const { package: selectedPackage } = await prompter.prompt(argv, [{
type: 'autocomplete',
name: 'package',
message: `Choose a package to ${operationName}`,
options: moduleNames,
required: true
}]);
if (log)
log.info(`Selected package: ${selectedPackage}`);
return selectedPackage;
}
;