Use argparse for parsing command-line options

This commit is contained in:
Rene Saarsoo 2020-09-30 15:03:33 +03:00
parent 53e36cba0c
commit 0511343f09
4 changed files with 44 additions and 8 deletions

View File

@ -16,10 +16,12 @@
"format:js": "prettier --write src/"
},
"dependencies": {
"argparse": "^2.0.1",
"ramda": "^0.27.1",
"xml": "^1.0.1"
},
"devDependencies": {
"@types/argparse": "^2.0.0",
"@types/jest": "^26.0.14",
"@types/node": "^14.10.3",
"@types/ramda": "types/npm-ramda#dist",

View File

@ -2,16 +2,11 @@ import * as fs from "fs";
import { generateZwo } from "./generateZwo";
import { parse } from "./parser";
import { stats } from "./stats";
import { parseCliOptions } from "./parseCliOptions";
const opts = { stats: false, filename: "" };
if (process.argv[2] === "--stats") {
opts.stats = true;
opts.filename = process.argv[3];
} else {
opts.filename = process.argv[2];
}
const opts = parseCliOptions();
const workout = parse(fs.readFileSync(opts.filename, "utf8"));
const workout = parse(fs.readFileSync(opts.file, "utf8"));
if (opts.stats) {
console.log(stats(workout));

29
src/parseCliOptions.ts Normal file
View File

@ -0,0 +1,29 @@
import { ArgumentParser } from "argparse";
export type CliOptions = {
file: string;
stats: boolean;
};
export const parseCliOptions = (): CliOptions => {
const argParser = new ArgumentParser({
description: "Zwift workout generator",
add_help: true,
});
argParser.add_argument("--stats", {
help: "output aggregate statistics instead of ZWO file",
action: "store_true",
default: false,
});
argParser.add_argument("file", { nargs: 1 });
// As we only allow one file as input,
// convert filenames array to just a single string.
const { file, ...rest } = argParser.parse_args();
return {
file: file[0],
...rest,
};
};

View File

@ -519,6 +519,11 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
"@types/argparse@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-2.0.0.tgz#df1bb55f4c3bbbb3c744a6b35f78a401d3283a89"
integrity sha512-FFW98gJUgUWGq7ZMd0gJmNRoOPqAaq9oiNqfc/RM6+C5BZKHHuHTwvlU5hrOULIXEfZz3rhw9jakwYe6cqNv3Q==
"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
version "7.1.9"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d"
@ -838,6 +843,11 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
argparse@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
arr-diff@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"