Parses command line arguments and verifies them against a specification. Written in TypeScript for Node.js
Find a file
2019-07-22 22:59:04 +02:00
.vscode 🙈 Add cspell to gitignore 2018-10-25 06:47:40 +02:00
src 🐛 Provide default value to reduce function 2018-11-09 03:12:48 +01:00
.editorconfig 🚚 Migrate from ssn-tools repo 2018-10-23 23:17:03 +02:00
.gitignore 🙈 Add cspell to gitignore 2018-10-25 06:47:40 +02:00
LICENSE 🚚 Migrate from ssn-tools repo 2018-10-23 23:17:03 +02:00
package-lock.json 👷 Update dependencies 2019-07-21 17:02:39 +02:00
package.json 👷 Fix windows issue 2019-07-22 22:59:04 +02:00
README.md 📝 Fix documentation 2019-07-21 17:00:47 +02:00
tsconfig.json 👷‍♂️ Update tsconfig so it generates .d.ts files 2018-10-23 23:23:49 +02:00

argument-parser

This module parses the command line arguments into a JavaScript object, and verifies that they match the given specification. It checks that all required options are set, that no unknown options are used, and optionally that the arguments match a given pattern.

The main goal is to keep all the complexity and error handling inside this module, so that all command line applications only need to provide a couple lines of specification and do not have to worry about verifying the input or checking for undefined.

Installation

For this tool to work, the TypeScript compiler must be globally installed:

sudo npm install -g typescript

In the project where you want to use this library, add the following to your package.json file:

{
  "dependencies": {
    "argument-parser": "git+https://git.jedipedia.net/swtor/argument-parser.git"
  }
}

Then run:

npm install

Usage

This example shows how to use this module to check the arguments against a specification.

#!/usr/bin/env node

import parseArguments from 'argument-parser';

/**
 * Check that arguments match the specification and stop execution on error.
 * Then parse the arguments into the `args` object.
 * The `fail()` function can be used to print an error message and will then
 * terminate execution.
 * Two options are allowed: --input and --size, or their short forms -i and -s.
 * --input is required, while --size is optional and defaults to "0".
 */
const { args, fail } = parseArguments({
  input: {
    short: 'i',
    description: 'Path to the input file'
  },
  size: {
    default: '0',
    short: 's',
    description: 'Size of the file, must be a non-negative integer',
    verify: str => str.match(/^[0-9]+$/) !== null
  }
});

try {
  console.log(args.input, args.size);
  //Do something based on the arguments...
} catch (error) {
  fail(`Error during execution: ${String(error)}`);
}

When called correctly from the command line, it prints the following:

$ ./index.js --input data.bin --size 1024
data.bin 1024

In case of an error, it prints an error message as well as the correct usage instructions, and then terminates with a non-zero exit code.

$ node index.js --wrong-option foobar
Error: Unknown option "--wrong-option".
Usage: ./index.js [options]
OPTIONS
  -i, --input <value>
      Path to the input file
  [-s, --s <value>], defaults to "0"
      Size of the file, must be a non-negative integer

License

Copyright (C) 2018-2019 Jedipedia.net

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.