Initial commit
This commit is contained in:
60
themes/keepit/node_modules/@algolia/cli/commands/Interactive.js
generated
vendored
Normal file
60
themes/keepit/node_modules/@algolia/cli/commands/Interactive.js
generated
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
const inquirer = require('inquirer');
|
||||
|
||||
class Interactive {
|
||||
parseCommandNames(commandList, ownName) {
|
||||
const names = commandList.map(command => command._name);
|
||||
// Remove current command name and default command
|
||||
const commandNames = names.filter(name => name !== ownName && name !== '*');
|
||||
return commandNames;
|
||||
}
|
||||
|
||||
getCommandQuestion(commandNames) {
|
||||
return {
|
||||
type: 'list',
|
||||
name: 'commandChoice',
|
||||
message: 'Select the command to run',
|
||||
choices: commandNames,
|
||||
};
|
||||
}
|
||||
|
||||
getArgumentQuestions(validArguments) {
|
||||
return validArguments.map(argument => ({
|
||||
type: argument.description.includes('key') ? 'password' : 'input',
|
||||
name: argument.long.substring(2),
|
||||
message: `${argument.long} | ${argument.description}`,
|
||||
}));
|
||||
}
|
||||
|
||||
async start(program) {
|
||||
try {
|
||||
const commands = require('../commands.js');
|
||||
const ownName = program._name;
|
||||
const commandList = program.parent.commands;
|
||||
// Get list of valid commands
|
||||
const commandNames = this.parseCommandNames(commandList, ownName);
|
||||
const commandQuestion = this.getCommandQuestion(commandNames);
|
||||
// Prompt user to select a command
|
||||
const commandResponse = await inquirer.prompt(commandQuestion);
|
||||
// Prepare subsequent questions
|
||||
const selectedCommand = commandList.find(
|
||||
command => command._name === commandResponse.commandChoice
|
||||
);
|
||||
const validArguments = selectedCommand.options;
|
||||
const argumentQuestions = this.getArgumentQuestions(validArguments);
|
||||
// Prompt user to input command arguments
|
||||
const argumentsResponse = await inquirer.prompt(argumentQuestions);
|
||||
// Pass arguments to program
|
||||
const argumentsList = Object.keys(argumentsResponse);
|
||||
argumentsList.forEach(arg => {
|
||||
if (argumentsResponse[arg] !== '')
|
||||
program[arg] = argumentsResponse[arg]; // eslint-disable-line no-param-reassign
|
||||
});
|
||||
// Execute selected command
|
||||
commands[selectedCommand._name].start(program);
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new Interactive();
|
||||
Reference in New Issue
Block a user