JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 4
  • Score
    100M100P100Q34641F
  • License ISC

Small library for parsing command line arguments type-safely and with great architecture.

Package Exports

  • typed-cmdargs
  • typed-cmdargs/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (typed-cmdargs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

typed-cmdargs

Small library for parsing command line arguments for git style tools.

The strength is the type safety and extensible architecture it enables.

How to install

npm install typed-cmdargs

Example

Helper classes

interface IgnoreAction {
  act(): void;
}
class DownloadIgnore implement IgnoreAction {
  constructor(private language: string) { }
  act() { ... }
}
class DoNothing implement IgnoreAction {
  act() { }
}

class Repo implements Command {
  constructor(
    private name: string, 
    private flags: { 
      private: boolean, 
      ignore: IgnoreAction 
    }) { }
  execute() { 
    ...
    this.flags.ignore.act();
    ...
  }
}

Configuring the parser

let argParser = new ArgumentParser();
argParser.push("repo", {
  desc: "Setup a new repository",
  arg: "name",
  construct: (arg, params) => new Repo(arg, params),
  flags: {
    private: {
      short: "p",
      desc: "Private repository",
      overrideValue: true,
      defaultValue: false,
    },
    ignore: {
      short: "i",
      desc: "Fetch standard .gitignore",
      arg: "language",
      overrideValue: (s) => new DownloadIgnore(s),
      defaultValue: new DoNothing(),
    },
  },
});

Template for calling the parser

if (process.argv[0].endsWith("node.exe")) process.argv.splice(0, 1);
process.argv.splice(0, 1);
if (process.argv[0] === "help") {
  console.log(argParser.helpString(process.argv[1]));
} else {
  let cmds = argParser.parse(process.argv);
  cmds.forEach((cmd) => cmd.execute());
}

How to use

For a more thorough tutorial see my blog post on Medium: https://medium.com/@thedrlambda/cli-architecture-in-nodejs-852e95773403

How to test

npm test

How to contribute

Make sure the tests are passing and that there are only dev dependencies, then just send me a pull request.