UNPKG

@launchql/cli

Version:
101 lines (100 loc) 3.31 kB
"use strict"; 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; }