A simple sub-command parser for minimist
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
test
.gitignore
.travis.yml
LICENSE
README.md
index.js
package-lock.json
package.json

README.md

minimist-subcommand

npm version Build Status

A simple sub-command parser for minimist

Installation

npm install --save minimist-subcommand

Examples

Basic

basic.js:

var parseArgs = require('minimist');
var parseCommands = require('minimist-subcommand');

// parse sub-commands
var commandDefinition = {
  commands: {
    foo: null,
    bar: null
  }
};
var parsedCommandsAndArgv = parseCommands(commandDefinition, process.argv.slice(2));

// pass parsed argv to minimist
var options = parseArgs(parsedCommandsAndArgv.argv);

console.log('sub-command:', parsedCommandsAndArgv.commands);
console.log('parsed options by minimist:', options);
$ node ./basic.js foo arg -a -b val -c
sub-command: [ 'foo' ]
parsed options by minimist: { _: [ 'arg' ], a: true, b: 'val', c: true }
$ node ./basic.js arg -a
sub-command: []
parsed options by minimist: { _: [ 'arg' ], a: true }
$ node ./basic.js bar foo
sub-command: [ 'bar' ]
parsed options by minimist: { _: [ 'foo' ] }

Nested commands

nested-commands.js:

var parseArgs = require('minimist');
var parseCommands = require('minimist-subcommand');

// parse sub-commands
var commandDefinition = {
  commands: {
    singleton: null,
    married: {
      commands: {
        child: {
          commands: {
            grandchild: null
          }
        }
      }
    }
  }
};
var parsedCommandsAndArgv = parseCommands(commandDefinition, process.argv.slice(2));

// pass parsed argv to minimist
var options = parseArgs(parsedCommandsAndArgv.argv);

console.log('commands:', parsedCommandsAndArgv.commands);
console.log('parsed options by minimist:', options);
$ node ./nested-commands.js married child grandchild arg -a
commands: [ 'married', 'child', 'grandchild' ]
parsed options by minimist: { _: [ 'arg' ], a: true }
$ node ./nested-commands.js singleton child grandchild
commands: [ 'singleton' ]
parsed options by minimist: { _: [ 'child', 'grandchild' ] }

Use "default" option

use-default-option.js:

var parseArgs = require('minimist');
var parseCommands = require('minimist-subcommand');

// parse sub-commands
var commandDefinition = {
  default: 'bar',
  commands: {
    foo: null,
    bar: null
  }
};
var parsedCommandsAndArgv = parseCommands(commandDefinition, process.argv.slice(2));

// pass parsed argv to minimist
var options = parseArgs(parsedCommandsAndArgv.argv);

console.log('sub-command:', parsedCommandsAndArgv.commands);
console.log('parsed options by minimist:', options);
$ node ./use-default-option.js arg -a
sub-command: [ 'bar' ]
parsed options by minimist: { _: [ 'arg' ], a: true }

Command's Schema

If you want to check schema of commandDefinition, please use COMMAND_JSON_SCHEMA.

var COMMAND_JSON_SCHEMA = require('minimist-subcommand').COMMAND_JSON_SCHEMA;

var commandDefinition = {
  commands: {
    foo: null,
    bar: null
  }
};

// I will leave it to the judgment of the user.
someJsonSchemaLibrary.validate(COMMAND_JSON_SCHEMA, commandDefinition);