Skip to content

A node module that aims to define a unique and simple configuration for inquirer and commander

License

Notifications You must be signed in to change notification settings

AlexisNo/comquirer

Repository files navigation

Comquirer

Build Status bitHound Overall Score bitHound Dependencies bitHound Code codecov

Define a command line and a prompt in one single configuration.

Quickly create commands that can be scripted AND user friendly using prompt to choose arguments and options values.

Comquirer is just a small wrapper of commander and inquirer that helps you to simplify their association.

Commander arguments and options are transformed into a hash of parameter keys <=> values. Then, parameters that do not have been provided in the command line are asked in an inquirer prompt. It is possible to configure a parameter to be set only with an argument/option or only with a question.

const icli = require('comquirer');
const packageJson = require('./package.json');

// It is possible to access directly to the commander instance
icli.getProgram().version(packageJson.version);

const config = {
  cmd: 'burger',
  description: 'create your burger',
  parameters: [{
    cmdSpec: '[name]',
    type: 'input',
    question: {
      message: 'How do you want to name your burger?'
    }
  }, {
    cmdSpec: '-s, --sauces <sauces-list>',
    description: 'A comma-separated list of sauces',
    type: 'checkbox',
    choices: ['bbq', 'ketchup', 'mayonnaise', 'mustard', 'spicy'],
    question: {
      message: 'Choose your sauce(s)'
    }
  }, {
    question: {
      message: 'Are you vegetarian?'
    }
  }, {
    cmdSpec: '-b, --bacon <none|simple|double|triple>',
    description: 'Select the quantity of bacon',
    type: 'list',
    choices: ['none', 'simple', 'double', 'triple'],
    question: {
      message: 'What quantity of bacon do you want?'
    }
  }, {
    cmdSpec: '--salad>',
    description: 'Add salad',
    type: 'bool',
    question: {
      message: 'Do you want some salad?'
    }
  }, {
    cmdSpec: '--tomato>',
    description: 'Add tomato',
    type: 'bool',
    question: {
      message: 'Do you want some tomato?'
    }
  }, {
    cmdSpec: '--steaks <quantity>',
    description: 'Number of steaks',
    type: 'integer',
    question: {
      message: 'How many steaks do you want?'
    }
  }],
  commanderActionHook() {
    // Here you can transform the data passed to commander's action() callback
    // and return it
    return arguments;
  },
  inquirerPromptHook(answers, commandParameterValues) {
    // Here you can transform the data promised by inquirer
    // Additionally, parameters provided in the command line are available
    return Promise.resolve([answers, commandParameterValues]);
  }
};

icli.createSubCommand(config, parameters => {
  // The argument of this callback function is the aggregation of parameter values from the command and from the prompt

  // Comquirer comes with a small helper to colorize text
  console.log('The ' + icli.format.info(parameters.name) + ' burger is in preparation ...')

  return burgerLib.doABurger(parameters)
  .then(burger => {
    console.log('Have a nice meal!');
    // syntax highlighting is performed by cardinal
    console.log(icli.highlight(JSON.stringify(burger, null, 2), { json: true }));
    // The result is available in a Promise returned by icli.parse()
    return burger
  });
});

// Call the parse() method of commander to begin the execution
icli.parse(process.argv)
.then(myBurger => {
  // This code is executed after 
});

About

A node module that aims to define a unique and simple configuration for inquirer and commander

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published