create-avo-tools
Version:
A CLI for creating projects with your chosen tech stack and language
59 lines (55 loc) • 1.89 kB
JavaScript
import inquirer from 'inquirer';
export const getLanguage = async () => {
const { language } = await inquirer.prompt([
{
type: 'list',
name: 'language',
message: 'Which programming language would you like to use?',
choices: ['JavaScript', 'TypeScript', 'Python', 'Ruby', 'Go', 'Java', 'PHP'],
},
]);
return language;
};
export const getTechStackAndProjectName = async (language) => {
let techStackChoices = [];
if (language === 'JavaScript' || language === 'TypeScript') {
techStackChoices = ['React', 'Vue', 'Angular', 'Svelte'];
} else if (language === 'Python') {
techStackChoices = ['Flask', 'Django', 'FastAPI', 'Pyramid', 'Tornado'];
} else if (language === 'Ruby') {
techStackChoices = ['Rails', 'Sinatra'];
} else if (language === 'Go') {
techStackChoices = ['Gin', 'Echo'];
} else if (language === 'Java') {
techStackChoices = ['Spring Boot', 'Micronaut'];
} else if (language === 'PHP') {
techStackChoices = ['Laravel', 'Symfony'];
}
const { techStack, projectName, targetDirectory } = await inquirer.prompt([
{
type: 'list',
name: 'techStack',
message: 'Which tech stack would you like to use?',
choices: techStackChoices,
},
{
type: 'input',
name: 'projectName',
message: 'Enter a name for your project:',
default: 'my_project',
validate: function (input) {
if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input)) {
return true;
}
return 'Project name must be a valid identifier (letters, numbers, and underscores only, and cannot start with a number).';
},
},
{
type: 'input',
name: 'targetDirectory',
message: 'Enter the directory where you want to create the project:',
default: process.cwd(),
},
]);
return { techStack, projectName, targetDirectory };
};