diff --git a/packages/cli/src/args.test.ts b/packages/cli/src/args.test.ts index d89dd08b..39df8411 100644 --- a/packages/cli/src/args.test.ts +++ b/packages/cli/src/args.test.ts @@ -19,4 +19,10 @@ describe('parseArgs', () => { it('parses list', () => { expect(parseArgs(['list']).command).toBe('list'); }); + it('rejects --dir without a value', () => { + expect(() => parseArgs(['add', 'spinner', '--dir'])).toThrow('--dir requires a path value'); + }); + it('rejects --dir followed by another flag', () => { + expect(() => parseArgs(['add', 'spinner', '--dir', '--dry-run'])).toThrow('--dir requires a path value'); + }); }); diff --git a/packages/cli/src/args.ts b/packages/cli/src/args.ts index 930dec01..b77ab497 100644 --- a/packages/cli/src/args.ts +++ b/packages/cli/src/args.ts @@ -18,7 +18,13 @@ export function parseArgs(argv: string[]): CliArgs { for (let i = 0; i < rest.length; i++) { const a = rest[i]!; - if (a === '--dir') { dir = rest[++i]; } + if (a === '--dir') { + const value = rest[++i]; + if (!value || value.startsWith('-')) { + throw new Error('--dir requires a path value'); + } + dir = value; + } else if (a === '--dry-run') { dryRun = true; } else if (a === '--yes' || a === '-y') { yes = true; } else if (!a.startsWith('-')) { components.push(a); }