JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 5
  • Score
    100M100P100Q54528F
  • License MIT

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

Package Exports

  • comquirer

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 (comquirer) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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 
});