From 6ec627889de9ad62913af99746308e35b8337346 Mon Sep 17 00:00:00 2001 From: Hovhannes Babayan Date: Thu, 4 Aug 2022 14:21:49 +0400 Subject: [PATCH] feat(closes #178): add cli help and version BREAKING CHANGE: updated node version range will cause installation fail for Node versions less 12.20.0 --- cli.js | 55 ++++++++++++++++++++++++++++++----------------- package-lock.json | 21 ++++++++++++++---- package.json | 9 ++++---- 3 files changed, 57 insertions(+), 28 deletions(-) diff --git a/cli.js b/cli.js index 18ee4e9..3797f64 100755 --- a/cli.js +++ b/cli.js @@ -1,25 +1,40 @@ #!/usr/bin/env node -const { mergeFiles } = require("./src/mergeFiles.js"); +const { Command } = require('commander') +const pkg = require('./package.json') +const { mergeFiles } = require('./src/mergeFiles.js') -const [, , destFilePath, ...srcFilePathsOrGlobPatterns] = process.argv; +function getProgram() { + const program = new Command() + program.version(pkg.version) + program.description( + pkg.description + + '\n\n' + + 'Example (combines a.xml and b.xml into target.xml):\n jrm target.xml a.xml b.xml' + + '\n\n' + + 'Example (glob patterns to match input files):\n jrm ./results/combined.xml "./results/units/*.xml" "./results/e2e/*.xml"' + ) + program.arguments(' ') + return program +} -(async () => { - try { - let processedFileCount = 0; - await mergeFiles(destFilePath, srcFilePathsOrGlobPatterns, { - onFileMatched: () => { - ++processedFileCount; - }, - }); - console.log(`Done. ${processedFileCount} files processed.`); - if (processedFileCount === 0) { - console.log( - "Provided input file patterns did not matched any file." - ); - } - } catch (err) { - console.error(err); - process.exitCode = 1; +const program = getProgram() +program.action(async function (destination, sources) { + const destFilePath = destination + const srcFilePathsOrGlobPatterns = sources + + let processedFileCount = 0 + await mergeFiles(destFilePath, srcFilePathsOrGlobPatterns, { + onFileMatched: () => { + ++processedFileCount } -})(); + }) + process.stdout.write(`Done. ${processedFileCount} files processed.\n`) + if (processedFileCount === 0) { + process.stdout.write(`Provided input file patterns did not matched any file.\n`) + } +}) +program.parseAsync().catch((e) => { + console.error(e) + process.exitCode = 1 +}) diff --git a/package-lock.json b/package-lock.json index 456e4a0..4d5a890 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,9 @@ "version": "3.0.6", "license": "MIT", "dependencies": { - "fast-glob": "3.2.11", - "xmlbuilder2": "3.0.2" + "commander": "~9.4.0", + "fast-glob": "~3.2.11", + "xmlbuilder2": "~3.0.2" }, "bin": { "jrm": "cli.js", @@ -1531,6 +1532,14 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/commander": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -4998,6 +5007,11 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "commander": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==" + }, "compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -5726,8 +5740,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "28.0.2", diff --git a/package.json b/package.json index 4477d4a..046fede 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,9 @@ "typings": "tsc index.js --declaration --allowJs --emitDeclarationOnly --outDir typings" }, "dependencies": { - "fast-glob": "3.2.11", - "xmlbuilder2": "3.0.2" + "commander": "~9.4.0", + "fast-glob": "~3.2.11", + "xmlbuilder2": "~3.0.2" }, "repository": { "type": "git", @@ -45,14 +46,14 @@ }, "homepage": "https://github.com/bhovhannes/junit-report-merger#readme", "devDependencies": { - "@evilmartians/lefthook": "1.0.5", "@bhovhannes/shared-config": "0.0.1", + "@evilmartians/lefthook": "1.0.5", "@jest/globals": "28.1.3", "jest": "28.1.3", "prettier": "2.7.1", "typescript": "4.7.4" }, "engines": { - "node": ">=12" + "node": "^12.20.0 || >=14" } }