@launchql/cli
Version:
LaunchQL CLI
101 lines (100 loc) • 3.31 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractFirst = void 0;
exports.validateCommonArgs = validateCommonArgs;
exports.validateFlagDependencies = validateFlagDependencies;
exports.logEffectiveArgs = logEffectiveArgs;
exports.constructTarget = constructTarget;
const logger_1 = require("@launchql/logger");
const log = new logger_1.Logger('argv-utils');
const extractFirst = (argv) => {
const first = argv._?.[0];
const newArgv = {
...argv,
_: argv._?.slice(1) ?? []
};
return { first, newArgv };
};
exports.extractFirst = extractFirst;
/**
* Validates and normalizes common CLI arguments
*/
function validateCommonArgs(argv) {
const validated = {
...argv,
cwd: argv.cwd || process.cwd(),
_: argv._ || []
};
const booleanFlags = ['recursive', 'yes', 'tx', 'fast', 'logOnly', 'createdb', 'usePlan', 'cache', 'drop', 'all', 'summary', 'help', 'h'];
for (const flag of booleanFlags) {
if (argv[flag] !== undefined && typeof argv[flag] !== 'boolean') {
log.warn(`--${flag} flag should be boolean, converting to true`);
validated[flag] = true;
}
}
const stringFlags = ['package', 'to', 'database'];
for (const flag of stringFlags) {
if (argv[flag] !== undefined && typeof argv[flag] !== 'string') {
log.warn(`--${flag} should be a string, converting`);
validated[flag] = String(argv[flag]);
}
}
return validated;
}
/**
* Checks if required flags are provided when certain conditions are met
*/
function validateFlagDependencies(argv) {
if (argv.to && !argv.package && !argv.recursive) {
log.warn('--to flag provided without --package or --recursive. Target may not work as expected.');
}
if (argv.package && argv.recursive) {
if (argv.package.includes(':')) {
log.warn('--package should not contain ":" when using --recursive. Use --to for target specification.');
}
}
}
/**
* Logs the effective CLI arguments for debugging
*/
function logEffectiveArgs(argv, commandName) {
const relevantArgs = {
cwd: argv.cwd,
database: argv.database,
package: argv.package,
to: argv.to,
recursive: argv.recursive,
yes: argv.yes,
tx: argv.tx,
fast: argv.fast,
logOnly: argv.logOnly,
createdb: argv.createdb,
usePlan: argv.usePlan,
cache: argv.cache,
drop: argv.drop,
all: argv.all,
summary: argv.summary
};
const definedArgs = Object.fromEntries(Object.entries(relevantArgs).filter(([_, value]) => value !== undefined));
if (Object.keys(definedArgs).length > 1) { // More than just cwd
log.debug(`${commandName} effective arguments:`, definedArgs);
}
}
/**
* Constructs a deployment target string from package and to arguments
*/
function constructTarget(argv, packageName) {
if (packageName && argv.to) {
return `${packageName}:${argv.to}`;
}
else if (packageName) {
return packageName;
}
else if (argv.package && argv.to) {
return `${argv.package}:${argv.to}`;
}
else if (argv.package) {
return argv.package;
}
return undefined;
}
;