From 54270fdf05ec8712c4006ed2bcd5d5969b2bd09c Mon Sep 17 00:00:00 2001 From: aarondill Date: Wed, 1 Feb 2023 11:43:15 -0600 Subject: [PATCH 01/10] feat: use util.parseArgs --- cli.js | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/cli.js b/cli.js index e1cb7bd9..340244c4 100755 --- a/cli.js +++ b/cli.js @@ -1,6 +1,7 @@ #!/usr/bin/env node import { globbySync } from 'globby' import fs from 'node:fs' +import { parseArgs } from 'node:util' import sortPackageJson from './index.js' import Reporter from './reporter.js' @@ -27,6 +28,25 @@ If file/glob is omitted, './package.json' file will be processed. ) } +function parseCliArguments() { + try { + return parseArgs({ + options: { + check: { type: 'boolean', short: 'c' }, + quiet: { type: 'boolean', short: 'q' }, + version: { type: 'boolean', short: 'v' }, + help: { type: 'boolean', short: 'h' }, + }, + allowPositionals: true, + strict: true, + }) + } catch (err) { + const { message } = err + console.error(message) + process.exit(2) + } +} + function sortPackageJsonFile(file, reporter, isCheck) { const original = fs.readFileSync(file, 'utf8') const sorted = sortPackageJson(original) @@ -58,35 +78,19 @@ function sortPackageJsonFiles(patterns, options) { } function run() { - const cliArguments = process.argv.slice(2) + const cliArguments = parseCliArguments() - if ( - cliArguments.some((argument) => argument === '--help' || argument === '-h') - ) { + if (cliArguments.values.help) { return showHelpInformation() } - if ( - cliArguments.some( - (argument) => argument === '--version' || argument === '-v', - ) - ) { + if (cliArguments.values.version) { return showVersion() } - const patterns = [] - let isCheck = false - let shouldBeQuiet = false - - for (const argument of cliArguments) { - if (argument === '--check' || argument === '-c') { - isCheck = true - } else if (argument === '--quiet' || argument === '-q') { - shouldBeQuiet = true - } else { - patterns.push(argument) - } - } + const patterns = cliArguments.positionals + const isCheck = !!cliArguments.values.check + const shouldBeQuiet = !!cliArguments.values.quiet if (!patterns.length) { patterns[0] = 'package.json' From 31d488afc6215f941e37c078b9012444173bc339 Mon Sep 17 00:00:00 2001 From: aarondill Date: Wed, 1 Feb 2023 21:57:13 -0600 Subject: [PATCH 02/10] refactor: destrucure argument in parseCLIArguments This moved argument destructuring to the parseCliArguments function, renames values to options, renames positionals to patterns, and moves the try catch to the run function --- cli.js | 52 ++++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/cli.js b/cli.js index 340244c4..adeb5f35 100755 --- a/cli.js +++ b/cli.js @@ -29,22 +29,17 @@ If file/glob is omitted, './package.json' file will be processed. } function parseCliArguments() { - try { - return parseArgs({ - options: { - check: { type: 'boolean', short: 'c' }, - quiet: { type: 'boolean', short: 'q' }, - version: { type: 'boolean', short: 'v' }, - help: { type: 'boolean', short: 'h' }, - }, - allowPositionals: true, - strict: true, - }) - } catch (err) { - const { message } = err - console.error(message) - process.exit(2) - } + const { values: options, positionals: patterns } = parseArgs({ + options: { + check: { type: 'boolean', short: 'c', default: false }, + quiet: { type: 'boolean', short: 'q', default: false }, + version: { type: 'boolean', short: 'v', default: false }, + help: { type: 'boolean', short: 'h', default: false }, + }, + allowPositionals: true, + strict: true, + }) + return { options, patterns } } function sortPackageJsonFile(file, reporter, isCheck) { @@ -78,25 +73,34 @@ function sortPackageJsonFiles(patterns, options) { } function run() { - const cliArguments = parseCliArguments() + let options, patterns + try { + ;({ options, patterns } = parseCliArguments()) + } catch (error) { + process.exitCode = 2 + console.error(error.message) + if (error.code === 'ERR_PARSE_ARGS_UNKNOWN_OPTION') { + console.error(`Try 'sort-package-json --help' for more information.`) + } + return + } - if (cliArguments.values.help) { + if (options.help) { return showHelpInformation() } - if (cliArguments.values.version) { + if (options.version) { return showVersion() } - const patterns = cliArguments.positionals - const isCheck = !!cliArguments.values.check - const shouldBeQuiet = !!cliArguments.values.quiet - if (!patterns.length) { patterns[0] = 'package.json' } - sortPackageJsonFiles(patterns, { isCheck, shouldBeQuiet }) + sortPackageJsonFiles(patterns, { + isCheck: options.check, + shouldBeQuiet: options.quiet, + }) } run() From 0d12907da904683ed088a99e6e96b63b0225d74d Mon Sep 17 00:00:00 2001 From: aarondill Date: Wed, 1 Feb 2023 22:46:37 -0600 Subject: [PATCH 03/10] refactor: move default pattern to parseCliArgument --- cli.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cli.js b/cli.js index adeb5f35..174940e3 100755 --- a/cli.js +++ b/cli.js @@ -39,6 +39,11 @@ function parseCliArguments() { allowPositionals: true, strict: true, }) + + if (!patterns.length) { + patterns[0] = 'package.json' + } + return { options, patterns } } @@ -93,10 +98,6 @@ function run() { return showVersion() } - if (!patterns.length) { - patterns[0] = 'package.json' - } - sortPackageJsonFiles(patterns, { isCheck: options.check, shouldBeQuiet: options.quiet, From c183b602c6b6ae904206c03c6cea7e346bfbc720 Mon Sep 17 00:00:00 2001 From: aarondill Date: Wed, 1 Feb 2023 22:52:19 -0600 Subject: [PATCH 04/10] fix: typo isQuiet->shouldBeQuiet --- reporter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reporter.js b/reporter.js index d61e1eb2..e09053dc 100644 --- a/reporter.js +++ b/reporter.js @@ -60,7 +60,7 @@ class Reporter { return } - const { isCheck, isQuiet } = this.#options + const { isCheck, shouldBeQuiet } = this.#options if (isCheck && changedFilesCount) { process.exitCode = 1 @@ -70,7 +70,7 @@ class Reporter { process.exitCode = 2 } - if (isQuiet) { + if (shouldBeQuiet) { return } From 834ea29e1097c43bd6edce96581e571f17a42d35 Mon Sep 17 00:00:00 2001 From: aarondill Date: Wed, 1 Feb 2023 23:04:46 -0600 Subject: [PATCH 05/10] fix: show help on illegal option value --- cli.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cli.js b/cli.js index 174940e3..86314845 100755 --- a/cli.js +++ b/cli.js @@ -84,7 +84,10 @@ function run() { } catch (error) { process.exitCode = 2 console.error(error.message) - if (error.code === 'ERR_PARSE_ARGS_UNKNOWN_OPTION') { + if ( + error.code === 'ERR_PARSE_ARGS_UNKNOWN_OPTION' || + error.code === 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE' + ) { console.error(`Try 'sort-package-json --help' for more information.`) } return From aaa38d19cd947f185d3cfc3bef3c1c3d95e9c0f3 Mon Sep 17 00:00:00 2001 From: aarondill Date: Wed, 1 Feb 2023 23:05:12 -0600 Subject: [PATCH 06/10] test: added tests for illegal argument usage --- tests/cli.js | 42 +++++++++++ tests/snapshots/cli.js.md | 136 ++++++++++++++++++++++++++++++++++++ tests/snapshots/cli.js.snap | Bin 3820 -> 4286 bytes 3 files changed, 178 insertions(+) diff --git a/tests/cli.js b/tests/cli.js index 30388d26..5da85bf1 100644 --- a/tests/cli.js +++ b/tests/cli.js @@ -63,6 +63,26 @@ test('run `cli --help` with `--version`', macro.testCLI, { message: 'Should prioritize help over version.', }) +test('run `cli --help=value`', macro.testCLI, { + args: ['--help=value'], + message: 'Should report illegal argument and suggest help.', +}) + +test('run `cli --version=value`', macro.testCLI, { + args: ['--version=value'], + message: 'Should report illegal argument and suggest help.', +}) + +test('run `cli --unknown-option`', macro.testCLI, { + args: ['--unknown-option'], + message: 'Should report unknown option and suggest help.', +}) + +test('run `cli -u` with unknown option', macro.testCLI, { + args: ['-u'], + message: 'Should report unknown option and suggest help.', +}) + test('run `cli` with no patterns', macro.testCLI, { fixtures: [ { @@ -87,6 +107,11 @@ test('run `cli --quiet` with no patterns', macro.testCLI, { message: 'Should format package.json without message.', }) +test('run `cli --quiet=value`', macro.testCLI, { + args: ['--quiet=value'], + message: 'Should report illegal argument and suggest help.', +}) + test('run `cli -q` with no patterns', macro.testCLI, { fixtures: [ { @@ -111,6 +136,11 @@ test('run `cli --check` with no patterns', macro.testCLI, { message: 'Should not sort package.json', }) +test('run `cli --check=value`', macro.testCLI, { + args: ['--check=value'], + message: 'Should report illegal argument and suggest help.', +}) + test('run `cli --check --quiet` with no patterns', macro.testCLI, { fixtures: [ { @@ -147,6 +177,18 @@ test('run `cli -c -q` with no patterns', macro.testCLI, { message: 'Should support `-q` alias', }) +test('run `cli -cq` with no patterns', macro.testCLI, { + fixtures: [ + { + file: 'package.json', + content: badJson, + expect: badJson, + }, + ], + args: ['-cq'], + message: 'Should support option aggregation', +}) + test('run `cli` on 1 bad file', macro.testCLI, { fixtures: [ { diff --git a/tests/snapshots/cli.js.md b/tests/snapshots/cli.js.md index b939c937..bf3f71e5 100644 --- a/tests/snapshots/cli.js.md +++ b/tests/snapshots/cli.js.md @@ -207,6 +207,78 @@ Generated by [AVA](https://avajs.dev). }, } +## run `cli --help=value` + +> Should report illegal argument and suggest help. + + { + args: [ + '--help=value', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Option '-h, --help' does not take an argument␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + +## run `cli --version=value` + +> Should report illegal argument and suggest help. + + { + args: [ + '--version=value', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Option '-v, --version' does not take an argument␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + +## run `cli --unknown-option` + +> Should report unknown option and suggest help. + + { + args: [ + '--unknown-option', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Unknown option '--unknown-option'. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- "--unknown-option"␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + +## run `cli -u` with unknown option + +> Should report unknown option and suggest help. + + { + args: [ + '-u', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Unknown option '-u'. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- "-u"␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + ## run `cli` with no patterns > Should format package.json. @@ -265,6 +337,24 @@ Generated by [AVA](https://avajs.dev). }, } +## run `cli --quiet=value` + +> Should report illegal argument and suggest help. + + { + args: [ + '--quiet=value', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Option '-q, --quiet' does not take an argument␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + ## run `cli -q` with no patterns > Should support -q alias. @@ -325,6 +415,24 @@ Generated by [AVA](https://avajs.dev). }, } +## run `cli --check=value` + +> Should report illegal argument and suggest help. + + { + args: [ + '--check=value', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Option '-c, --check' does not take an argument␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + ## run `cli --check --quiet` with no patterns > Should not sort package.json or report a message. @@ -415,6 +523,34 @@ Generated by [AVA](https://avajs.dev). }, } +## run `cli -cq` with no patterns + +> Should support option aggregation + + { + args: [ + '-cq', + ], + fixtures: [ + { + expect: `{␊ + "version": "1.0.0",␊ + "name": "sort-package-json"␊ + }`, + file: 'package.json', + original: `{␊ + "version": "1.0.0",␊ + "name": "sort-package-json"␊ + }`, + }, + ], + result: { + errorCode: 1, + stderr: '', + stdout: '', + }, + } + ## run `cli` on 1 bad file > Should format 1 file. diff --git a/tests/snapshots/cli.js.snap b/tests/snapshots/cli.js.snap index daa915276216656c03897e93e5303c166be0e7d7..e851f5aba0107ed2ffd08f261aab27270a97ab4f 100644 GIT binary patch literal 4286 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 Date: Wed, 1 Feb 2023 23:16:58 -0600 Subject: [PATCH 07/10] feat: add support for --no-check and --no-quiet --- cli.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/cli.js b/cli.js index 86314845..7cd9e4be 100755 --- a/cli.js +++ b/cli.js @@ -29,10 +29,12 @@ If file/glob is omitted, './package.json' file will be processed. } function parseCliArguments() { - const { values: options, positionals: patterns } = parseArgs({ + const { values: originalOptions, positionals: patterns } = parseArgs({ options: { check: { type: 'boolean', short: 'c', default: false }, quiet: { type: 'boolean', short: 'q', default: false }, + 'no-check': { type: 'boolean', default: false }, + 'no-quiet': { type: 'boolean', default: false }, version: { type: 'boolean', short: 'v', default: false }, help: { type: 'boolean', short: 'h', default: false }, }, @@ -44,6 +46,16 @@ function parseCliArguments() { patterns[0] = 'package.json' } + // support for negated options + const options = originalOptions + for (const key of Object.keys(originalOptions)) { + // no-check: true --> check: false + if (key.startsWith('no-') && originalOptions[key] === true) { + options[key.slice(3)] = false + delete options[key] + } + } + return { options, patterns } } From 65b60d13558ed8470503f08a9193c7a1fe6c77dc Mon Sep 17 00:00:00 2001 From: aarondill Date: Wed, 1 Feb 2023 23:23:21 -0600 Subject: [PATCH 08/10] Revert "feat: add support for --no-check and --no-quiet" This reverts commit 10a60672d5346ae160e6daa6e96f484c42e67b4f. --- cli.js | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/cli.js b/cli.js index 7cd9e4be..86314845 100755 --- a/cli.js +++ b/cli.js @@ -29,12 +29,10 @@ If file/glob is omitted, './package.json' file will be processed. } function parseCliArguments() { - const { values: originalOptions, positionals: patterns } = parseArgs({ + const { values: options, positionals: patterns } = parseArgs({ options: { check: { type: 'boolean', short: 'c', default: false }, quiet: { type: 'boolean', short: 'q', default: false }, - 'no-check': { type: 'boolean', default: false }, - 'no-quiet': { type: 'boolean', default: false }, version: { type: 'boolean', short: 'v', default: false }, help: { type: 'boolean', short: 'h', default: false }, }, @@ -46,16 +44,6 @@ function parseCliArguments() { patterns[0] = 'package.json' } - // support for negated options - const options = originalOptions - for (const key of Object.keys(originalOptions)) { - // no-check: true --> check: false - if (key.startsWith('no-') && originalOptions[key] === true) { - options[key.slice(3)] = false - delete options[key] - } - } - return { options, patterns } } From c3f5a6bff677f7d4ac3dc5ab77e74c6c70604d1c Mon Sep 17 00:00:00 2001 From: aarondill Date: Wed, 1 Feb 2023 23:25:20 -0600 Subject: [PATCH 09/10] test: add tests which throw for --no-* arguments --- tests/cli.js | 17 +++++++++ tests/snapshots/cli.js.md | 72 ++++++++++++++++++++++++++++++++++++ tests/snapshots/cli.js.snap | Bin 4286 -> 4399 bytes 3 files changed, 89 insertions(+) diff --git a/tests/cli.js b/tests/cli.js index 5da85bf1..8e16fdbb 100644 --- a/tests/cli.js +++ b/tests/cli.js @@ -83,6 +83,23 @@ test('run `cli -u` with unknown option', macro.testCLI, { message: 'Should report unknown option and suggest help.', }) +test('run `cli --no-version`', macro.testCLI, { + args: ['--no-version'], + message: 'Should report unknown option and suggest help.', +}) +test('run `cli --no-check`', macro.testCLI, { + args: ['--no-check'], + message: 'Should report unknown option and suggest help.', +}) +test('run `cli --no-quiet`', macro.testCLI, { + args: ['--no-version'], + message: 'Should report unknown option and suggest help.', +}) +test('run `cli --no-help`', macro.testCLI, { + args: ['--no-check'], + message: 'Should report unknown option and suggest help.', +}) + test('run `cli` with no patterns', macro.testCLI, { fixtures: [ { diff --git a/tests/snapshots/cli.js.md b/tests/snapshots/cli.js.md index bf3f71e5..9a11ea4f 100644 --- a/tests/snapshots/cli.js.md +++ b/tests/snapshots/cli.js.md @@ -279,6 +279,78 @@ Generated by [AVA](https://avajs.dev). }, } +## run `cli --no-version` + +> Should report unknown option and suggest help. + + { + args: [ + '--no-version', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Unknown option '--no-version'. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- "--no-version"␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + +## run `cli --no-check` + +> Should report unknown option and suggest help. + + { + args: [ + '--no-check', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Unknown option '--no-check'. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- "--no-check"␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + +## run `cli --no-quiet` + +> Should report unknown option and suggest help. + + { + args: [ + '--no-version', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Unknown option '--no-version'. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- "--no-version"␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + +## run `cli --no-help` + +> Should report unknown option and suggest help. + + { + args: [ + '--no-check', + ], + fixtures: [], + result: { + errorCode: 2, + stderr: `Unknown option '--no-check'. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- "--no-check"␊ + Try 'sort-package-json --help' for more information.␊ + `, + stdout: '', + }, + } + ## run `cli` with no patterns > Should format package.json. diff --git a/tests/snapshots/cli.js.snap b/tests/snapshots/cli.js.snap index e851f5aba0107ed2ffd08f261aab27270a97ab4f..22b92c284d4dbbe8d3f2fc832119392edd7bdf09 100644 GIT binary patch literal 4399 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 Date: Thu, 2 Feb 2023 13:31:21 +0800 Subject: [PATCH 10/10] test: update tests --- tests/cli.js | 18 ++--------- tests/snapshots/cli.js.md | 60 ++---------------------------------- tests/snapshots/cli.js.snap | Bin 4399 -> 4363 bytes 3 files changed, 6 insertions(+), 72 deletions(-) diff --git a/tests/cli.js b/tests/cli.js index 8e16fdbb..f87574b1 100644 --- a/tests/cli.js +++ b/tests/cli.js @@ -68,8 +68,8 @@ test('run `cli --help=value`', macro.testCLI, { message: 'Should report illegal argument and suggest help.', }) -test('run `cli --version=value`', macro.testCLI, { - args: ['--version=value'], +test('run `cli --version=true`', macro.testCLI, { + args: ['--version=true'], message: 'Should report illegal argument and suggest help.', }) @@ -85,19 +85,7 @@ test('run `cli -u` with unknown option', macro.testCLI, { test('run `cli --no-version`', macro.testCLI, { args: ['--no-version'], - message: 'Should report unknown option and suggest help.', -}) -test('run `cli --no-check`', macro.testCLI, { - args: ['--no-check'], - message: 'Should report unknown option and suggest help.', -}) -test('run `cli --no-quiet`', macro.testCLI, { - args: ['--no-version'], - message: 'Should report unknown option and suggest help.', -}) -test('run `cli --no-help`', macro.testCLI, { - args: ['--no-check'], - message: 'Should report unknown option and suggest help.', + message: 'A snapshot to show how `--no-*` works, not care about result.', }) test('run `cli` with no patterns', macro.testCLI, { diff --git a/tests/snapshots/cli.js.md b/tests/snapshots/cli.js.md index 9a11ea4f..59c23a6a 100644 --- a/tests/snapshots/cli.js.md +++ b/tests/snapshots/cli.js.md @@ -225,13 +225,13 @@ Generated by [AVA](https://avajs.dev). }, } -## run `cli --version=value` +## run `cli --version=true` > Should report illegal argument and suggest help. { args: [ - '--version=value', + '--version=true', ], fixtures: [], result: { @@ -281,43 +281,7 @@ Generated by [AVA](https://avajs.dev). ## run `cli --no-version` -> Should report unknown option and suggest help. - - { - args: [ - '--no-version', - ], - fixtures: [], - result: { - errorCode: 2, - stderr: `Unknown option '--no-version'. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- "--no-version"␊ - Try 'sort-package-json --help' for more information.␊ - `, - stdout: '', - }, - } - -## run `cli --no-check` - -> Should report unknown option and suggest help. - - { - args: [ - '--no-check', - ], - fixtures: [], - result: { - errorCode: 2, - stderr: `Unknown option '--no-check'. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- "--no-check"␊ - Try 'sort-package-json --help' for more information.␊ - `, - stdout: '', - }, - } - -## run `cli --no-quiet` - -> Should report unknown option and suggest help. +> A snapshot to show how `--no-*` works, not care about result. { args: [ @@ -333,24 +297,6 @@ Generated by [AVA](https://avajs.dev). }, } -## run `cli --no-help` - -> Should report unknown option and suggest help. - - { - args: [ - '--no-check', - ], - fixtures: [], - result: { - errorCode: 2, - stderr: `Unknown option '--no-check'. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- "--no-check"␊ - Try 'sort-package-json --help' for more information.␊ - `, - stdout: '', - }, - } - ## run `cli` with no patterns > Should format package.json. diff --git a/tests/snapshots/cli.js.snap b/tests/snapshots/cli.js.snap index 22b92c284d4dbbe8d3f2fc832119392edd7bdf09..63e2fd66a4366d8f6f8ce00c0ffaca85aa17c1a8 100644 GIT binary patch literal 4363 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 F008>FUK9WT literal 4399 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