From 9961bc0395b3c2b4ec176773a3adadf6971d9aa9 Mon Sep 17 00:00:00 2001 From: Tommy Date: Wed, 28 Feb 2024 23:43:46 -0600 Subject: [PATCH] Make options required (#260) Co-authored-by: Sindre Sorhus --- readme.md | 5 ++-- source/index.d.ts | 6 ++--- test-d/build.test-d.ts | 3 ++- test-d/index.test-d.ts | 3 ++- test/options/import-meta.js | 53 ++++++++++++++++++++++++++----------- 5 files changed, 47 insertions(+), 23 deletions(-) diff --git a/readme.md b/readme.md index ec553f5..67a9cdf 100644 --- a/readme.md +++ b/readme.md @@ -45,7 +45,7 @@ const cli = meow(` $ foo unicorns --rainbow 🌈 unicorns 🌈 `, { - importMeta: import.meta, + importMeta: import.meta, // This is required flags: { rainbow: { type: 'boolean', @@ -66,7 +66,7 @@ foo(cli.input.at(0), cli.flags); ## API -### meow(helpText, options?) +### meow(helpText, options) ### meow(options) Returns an `object` with: @@ -91,6 +91,7 @@ Type: `object` ##### importMeta +**Required**\ Type: `object` Pass in [`import.meta`](https://nodejs.org/dist/latest/docs/api/esm.html#esm_import_meta). This is used to find the correct package.json file. diff --git a/source/index.d.ts b/source/index.d.ts index b8f194f..6299975 100644 --- a/source/index.d.ts +++ b/source/index.d.ts @@ -395,7 +395,7 @@ const cli = meow(` $ foo unicorns --rainbow 🌈 unicorns 🌈 `, { - importMeta: import.meta, + importMeta: import.meta, // This is required flags: { rainbow: { type: 'boolean', @@ -413,5 +413,5 @@ const cli = meow(` foo(cli.input.at(0), cli.flags); ``` */ -export default function meow(helpMessage: string, options?: Options): Result; -export default function meow(options?: Options): Result; +export default function meow(helpMessage: string, options: Options): Result; +export default function meow(options: Options): Result; diff --git a/test-d/build.test-d.ts b/test-d/build.test-d.ts index ce26a8c..532e7e2 100644 --- a/test-d/build.test-d.ts +++ b/test-d/build.test-d.ts @@ -6,7 +6,8 @@ type AnyFlag = NonNullable[0]>['flags']>[str const importMeta = import.meta; -expectType>(meow('Help text')); +expectError(meow('Help text')); +expectError(meow('Help text', {})); expectType>(meow('Help text', {importMeta})); expectAssignable<{flags: {foo: number}}>( meow({importMeta: import.meta, flags: {foo: {type: 'number', isRequired: true}}}), diff --git a/test-d/index.test-d.ts b/test-d/index.test-d.ts index 9d06253..842272d 100644 --- a/test-d/index.test-d.ts +++ b/test-d/index.test-d.ts @@ -6,7 +6,8 @@ type AnyFlag = NonNullable[0]>['flags']>[str const importMeta = import.meta; -expectType>(meow('Help text')); +expectError(meow('Help text')); +expectError(meow('Help text', {})); expectType>(meow('Help text', {importMeta, hardRejection: false})); expectAssignable<{flags: {foo: number}}>( meow({importMeta: import.meta, flags: {foo: {type: 'number', isRequired: true}}}), diff --git a/test/options/import-meta.js b/test/options/import-meta.js index 421c3c1..e0f72b0 100644 --- a/test/options/import-meta.js +++ b/test/options/import-meta.js @@ -1,24 +1,45 @@ import test from 'ava'; import meow from '../../source/index.js'; -test('main', t => { - t.notThrows(() => meow({importMeta: import.meta})); +const verifyImportMeta = test.macro((t, {cli, error}) => { + if (error) { + t.throws(cli, {message: 'The `importMeta` option is required. Its value must be `import.meta`.'}); + } else { + t.notThrows(cli); + } }); -test('with help shortcut', t => { - t.notThrows(() => ( - meow(` - unicorns - rainbows - `, { - importMeta: import.meta, - }) - )); +test('main', verifyImportMeta, { + cli: () => meow({ + importMeta: import.meta, + }), }); -test('invalid package url', t => { - t.throws( - () => meow({importMeta: '/path/to/package'}), - {message: 'The `importMeta` option is required. Its value must be `import.meta`.'}, - ); +test('with help shortcut', verifyImportMeta, { + cli: () => meow(` + unicorns + rainbows + `, { + importMeta: import.meta, + }), +}); + +test('invalid package url', verifyImportMeta, { + cli: () => meow({importMeta: '/path/to/package'}), + error: true, +}); + +test('throws if unset', verifyImportMeta, { + cli: () => meow('foo', {}), + error: true, +}); + +test('throws if unset - options only', verifyImportMeta, { + cli: () => meow({}), + error: true, +}); + +test('throws if unset - help shortcut only', verifyImportMeta, { + cli: () => meow('foo'), + error: true, });