Skip to content

Commit cde6a4f

Browse files
committed
fix(types): disallow parseArgs option defaults
1 parent f5901d7 commit cde6a4f

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

packages/rstack/src/cli/args.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
import {
22
parseArgs as nodeParseArgs,
3-
type ParseArgsConfig,
3+
type ParseArgsConfig as NodeParseArgsConfig,
4+
type ParseArgsOptionDescriptor as NodeParseArgsOptionDescriptor,
45
type ParseArgsOptionsConfig,
56
} from 'node:util';
67

8+
type ParseArgsOptionDescriptor = Omit<NodeParseArgsOptionDescriptor, 'default'> & {
9+
default?: never;
10+
};
11+
12+
type ParseArgsConfig = Omit<NodeParseArgsConfig, 'options'> & {
13+
options?: Record<string, ParseArgsOptionDescriptor>;
14+
};
15+
716
type CamelCase<Value extends string> = Value extends `${infer Head}-${infer Tail}`
817
? `${Head}${Capitalize<CamelCase<Tail>>}`
918
: Value;

packages/rstack/tests/cli/args.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
import { expect, test } from 'rstack/test';
22
import { parseArgs } from '../../src/cli/args.ts';
33

4+
const assertDefaultIsUnsupported = (): void => {
5+
parseArgs({
6+
options: {
7+
option: {
8+
type: 'string',
9+
// @ts-expect-error `default` is intentionally unsupported by this helper.
10+
default: 'default',
11+
},
12+
},
13+
});
14+
};
15+
16+
void assertDefaultIsUnsupported;
17+
418
test.each([
519
['--long-option', 'kebab'],
620
['--longOption', 'camel'],

0 commit comments

Comments
 (0)