Skip to content

Commit a85c6e4

Browse files
Remove null from booleanDefault type (#257)
1 parent 7b9e739 commit a85c6e4

File tree

7 files changed

+55
-53
lines changed

7 files changed

+55
-53
lines changed

readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ By default, the argument `5` in `$ foo 5` becomes a string. Enabling this would
213213

214214
##### booleanDefault
215215

216-
Type: `boolean | null | undefined`\
216+
Type: `boolean | undefined`\
217217
Default: `false`
218218

219219
Value of `boolean` flags not defined in `argv`.

source/index.d.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,8 +291,7 @@ export type Options<Flags extends AnyFlags> = {
291291
//}
292292
```
293293
*/
294-
// eslint-disable-next-line @typescript-eslint/ban-types
295-
readonly booleanDefault?: boolean | null | undefined;
294+
readonly booleanDefault?: boolean | undefined;
296295

297296
// TODO: Remove this in meow 14.
298297
/**

source/parser.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ const buildParserFlags = ({flags, booleanDefault}) => {
1313
delete flag.shortFlag;
1414
}
1515

16-
if (
17-
booleanDefault !== undefined
18-
&& flag.type === 'boolean'
19-
&& !Object.hasOwn(flag, 'default')
20-
) {
16+
if (booleanDefault !== undefined && flag.type === 'boolean' && !Object.hasOwn(flag, 'default')) {
2117
flag.default = flag.isMultiple ? [booleanDefault] : booleanDefault;
2218
}
2319

test-d/build.test-d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ expectType<Result<never>>(meow({importMeta, pkg: {foo: 'bar'}}));
4747
expectType<Result<never>>(meow({importMeta, argv: ['foo', 'bar']}));
4848
expectType<Result<never>>(meow({importMeta, inferType: true}));
4949
expectType<Result<never>>(meow({importMeta, booleanDefault: true}));
50-
expectType<Result<never>>(meow({importMeta, booleanDefault: null}));
5150
expectType<Result<never>>(meow({importMeta, booleanDefault: undefined}));
5251
expectType<Result<never>>(meow({importMeta}));
5352

test-d/index.test-d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ expectType<Result<never>>(meow({importMeta, pkg: {foo: 'bar'}}));
4747
expectType<Result<never>>(meow({importMeta, argv: ['foo', 'bar']}));
4848
expectType<Result<never>>(meow({importMeta, inferType: true}));
4949
expectType<Result<never>>(meow({importMeta, booleanDefault: true}));
50-
expectType<Result<never>>(meow({importMeta, booleanDefault: null}));
5150
expectType<Result<never>>(meow({importMeta, booleanDefault: undefined}));
5251
expectType<Result<never>>(meow({importMeta, hardRejection: false}));
5352

test/flags/_utils.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@
22
import test from 'ava';
33
import meow from '../../source/index.js';
44

5-
export const _verifyFlags = importMeta => test.macro(async (t, {flags = {}, args, expected, error}) => {
5+
export const _verifyFlags = importMeta => test.macro(async (t, {flags = {}, args, expected, error, ...meowOptions}) => {
66
const assertions = await t.try(async tt => {
77
const arguments_ = args?.split(' ') ?? [];
8-
const meowOptions = {importMeta, argv: arguments_, flags};
8+
9+
meowOptions = {
10+
...meowOptions,
11+
importMeta,
12+
argv: arguments_,
13+
flags,
14+
};
915

1016
tt.log('arguments:', arguments_);
1117

test/flags/boolean-default.js

Lines changed: 44 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,58 @@
11
import test from 'ava';
2-
import meow from '../../source/index.js';
2+
import {_verifyFlags} from './_utils.js';
33

4-
const importMeta = import.meta;
4+
const verifyFlags = _verifyFlags(import.meta);
55

6-
test('undefined - filter out unset boolean args', t => {
7-
const cli = meow({
8-
importMeta,
9-
argv: ['--foo'],
10-
booleanDefault: undefined,
11-
flags: {
12-
foo: {
13-
type: 'boolean',
14-
},
15-
bar: {
16-
type: 'boolean',
17-
},
18-
baz: {
19-
type: 'boolean',
20-
default: false,
21-
},
6+
test('undefined - filter out unset boolean args', verifyFlags, {
7+
booleanDefault: undefined,
8+
flags: {
9+
foo: {
10+
type: 'boolean',
2211
},
23-
});
24-
25-
t.like(cli.flags, {
12+
bar: {
13+
type: 'boolean',
14+
},
15+
baz: {
16+
type: 'boolean',
17+
default: false,
18+
},
19+
},
20+
args: '--foo',
21+
expected: {
2622
foo: true,
2723
bar: undefined,
2824
baz: false,
29-
});
25+
},
3026
});
3127

32-
test('boolean args are false by default', t => {
33-
const cli = meow({
34-
importMeta,
35-
argv: ['--foo'],
36-
flags: {
37-
foo: {
38-
type: 'boolean',
39-
},
40-
bar: {
41-
type: 'boolean',
42-
default: true,
43-
},
44-
baz: {
45-
type: 'boolean',
46-
},
28+
test('boolean args are false by default', verifyFlags, {
29+
flags: {
30+
foo: {
31+
type: 'boolean',
4732
},
48-
});
49-
50-
t.like(cli.flags, {
33+
bar: {
34+
type: 'boolean',
35+
default: true,
36+
},
37+
baz: {
38+
type: 'boolean',
39+
},
40+
},
41+
args: '--foo',
42+
expected: {
5143
foo: true,
5244
bar: true,
5345
baz: false,
54-
});
46+
},
47+
});
48+
49+
test('throws if default is null', verifyFlags, {
50+
booleanDefault: null,
51+
flags: {
52+
foo: {
53+
type: 'boolean',
54+
},
55+
},
56+
args: '--foo',
57+
error: 'Expected "foo" default value to be of type "boolean", got "null"',
5558
});

0 commit comments

Comments
 (0)