UNPKG

@launchql/cli

Version:
52 lines (51 loc) 1.84 kB
import { LaunchQLPackage } from '@launchql/core'; import { errors } from '@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 */ export async function selectPackage(argv, prompter, cwd, operationName, log) { const pkg = new 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 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 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; }