Files
ProjectE/packages/cli/lib/args.ts
T
mbatchelder 6c438eab32 feat: add admin CLI for project management
- User management (list, create, delete, reset-password)
- Data CRUD for all 32 collections
- Import/export with JSON support
- Worker/queue management (status, jobs, retry, trigger)
- Webhook management (list, test, deliveries, retry)
- Agent management (list, CRUD, tasks, trigger, activity)
- Health diagnostics (check, errors, stats)
- JSON output mode (--json flag)
- Run via: npm run cli -- <command>
2026-07-24 07:02:11 -04:00

73 lines
2.0 KiB
TypeScript

export interface ParsedArgs {
command: string;
subcommand: string;
positional: string[];
flags: Record<string, string | boolean>;
}
export function parseArgs(argv: string[]): ParsedArgs {
const args = argv.slice(2); // skip node and script path
const flags: Record<string, string | boolean> = {};
const positional: string[] = [];
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if (arg.startsWith('--')) {
const key = arg.slice(2);
// Check if next arg is a value (not a flag)
const next = args[i + 1];
if (next && !next.startsWith('--')) {
flags[key] = next;
i++;
} else {
flags[key] = true;
}
} else if (arg.startsWith('-') && arg.length === 2) {
// Short flags like -j
const key = arg.slice(1);
const next = args[i + 1];
if (next && !next.startsWith('-')) {
flags[key] = next;
i++;
} else {
flags[key] = true;
}
} else {
positional.push(arg);
}
}
return {
command: positional[0] || '',
subcommand: positional[1] || '',
positional: positional.slice(2),
flags,
};
}
export function getFlag(flags: Record<string, string | boolean>, name: string, defaultValue = ''): string {
const val = flags[name];
if (val === undefined || val === true) return defaultValue;
return String(val);
}
export function getFlagNumber(flags: Record<string, string | boolean>, name: string, defaultValue: number): number {
const val = getFlag(flags, name);
if (!val) return defaultValue;
const num = parseInt(val, 10);
return isNaN(num) ? defaultValue : num;
}
export function hasFlag(flags: Record<string, string | boolean>, name: string): boolean {
return flags[name] !== undefined;
}
export function requirePositional(positional: string[], index: number, name: string): string {
const val = positional[index];
if (!val) {
console.error(`Error: Missing required argument: ${name}`);
process.exit(1);
}
return val;
}