From 5ef947894e40dae3789dc7336967f6d1e3d74d4d Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Sun, 17 Nov 2019 13:35:27 +0700 Subject: [PATCH] Add support for `number` flag type (#103) --- index.d.ts | 2 +- readme.md | 2 +- test.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/index.d.ts b/index.d.ts index 9df36f8..67c50ff 100644 --- a/index.d.ts +++ b/index.d.ts @@ -8,7 +8,7 @@ declare namespace meow { The key is the flag name and the value is an object with any of: - - `type`: Type of value. (Possible values: `string` `boolean`) + - `type`: Type of value. (Possible values: `string` `boolean` `number`) - `alias`: Usually used to define a short flag alias. - `default`: Default value when the flag is not specified. diff --git a/readme.md b/readme.md index db0645e..fbc7106 100644 --- a/readme.md +++ b/readme.md @@ -98,7 +98,7 @@ Define argument flags. The key is the flag name and the value is an object with any of: -- `type`: Type of value. (Possible values: `string` `boolean`) +- `type`: Type of value. (Possible values: `string` `boolean` `number`) - `alias`: Usually used to define a short flag alias. - `default`: Default value when the flag is not specified. diff --git a/test.js b/test.js index ef60764..8840a03 100644 --- a/test.js +++ b/test.js @@ -240,3 +240,71 @@ test('disable autoVersion/autoHelp if `cli.input.length > 0`', t => { t.is(meow({argv: ['bar', '--help']}).input[0], 'bar'); t.is(meow({argv: ['bar', '--version', '--help']}).input[0], 'bar'); }); + +test('supports `number` flag type', t => { + const cli = meow({ + argv: ['--foo=1.3'], + flags: { + foo: { + type: 'number' + } + } + }).flags.foo; + + t.is(cli, 1.3); +}); + +test('supports `number` flag type - flag but no value', t => { + const cli = meow({ + argv: ['--foo'], + flags: { + foo: { + type: 'number' + } + } + }).flags.foo; + + t.is(cli, undefined); +}); + +test('supports `number` flag type - flag but no value but default', t => { + const cli = meow({ + argv: ['--foo'], + flags: { + foo: { + type: 'number', + default: 2 + } + } + }).flags.foo; + + t.is(cli, 2); +}); + +test('supports `number` flag type - no flag but default', t => { + const cli = meow({ + argv: [], + flags: { + foo: { + type: 'number', + default: 2 + } + } + }).flags.foo; + + t.is(cli, 2); +}); + +test('supports `number` flag type - throws on incorrect default value', t => { + t.throws(() => { + meow({ + argv: [], + flags: { + foo: { + type: 'number', + default: 'x' + } + } + }); + }); +});