create-quickstart-app
Version:
CLI tool to generate Next.js projects with various configurations
106 lines (105 loc) • 3.45 kB
JavaScript
import prompts from "prompts";
export async function promptUser() {
const response = await prompts([
{
type: "text",
name: "projectName",
message: "What is your project name?",
initial: "my-customised-app",
validate: (input) => {
if (/^([A-Za-z\-_\d])+$/.test(input))
return true;
return "Project name may only include letters, numbers, underscores and hashes.";
},
},
{
type: "select",
name: "language",
message: "Which language would you like to use?",
choices: [
{ title: "TypeScript", value: "TypeScript" },
{ title: "JavaScript", value: "JavaScript" },
],
initial: 0,
},
{
type: "toggle",
name: "useClerk",
message: "Would you like to use Clerk for authentication?",
initial: true,
active: "Yes",
inactive: "No",
},
{
type: "select",
name: "database",
message: "Which database would you like to use?",
choices: [
{ title: "None", value: "None" },
{ title: "PostgreSQL", value: "PostgreSQL" },
{ title: "SQLite", value: "SQLite" },
{ title: "MySQL", value: "MySQL" },
{ title: "MongoDB", value: "MongoDB" },
],
initial: 0,
},
{
type: (prev) => (prev !== "None" ? "select" : null),
name: "orm",
message: "Which ORM would you like to use?",
choices: [
{ title: "None", value: "None" },
{ title: "Prisma", value: "Prisma" },
{ title: "Drizzle", value: "Drizzle" },
{ title: "Mongoose", value: "Mongoose" },
],
initial: 0,
},
{
type: "toggle",
name: "useSrcDir",
message: "Would you like to use a src directory?",
initial: false,
active: "Yes",
inactive: "No",
},
{
type: "toggle",
name: "useTemplates",
message: "Would you like to start from any starter-Kit?",
initial: false,
active: "Yes",
inactive: "No",
},
{
type: (prev) => (prev ? "select" : null),
name: "templates",
message: "Select templates to include:",
choices: [
{ title: "E-commerce Store", value: "ecommerce" },
{ title: "Self Blog Application", value: "blog" },
{ title: "Portfolio", value: "portfolio" },
{ title: "Landing Page", value: "landingPage" },
],
initial: 0,
hint: "Space to select, Return to submit",
},
{
type: "toggle",
name: "initGit",
message: "Initialize a git repository?",
initial: true,
active: "Yes",
inactive: "No",
},
{
type: "toggle",
name: "installDeps",
message: "Install dependencies?",
initial: true,
active: "Yes",
inactive: "No",
},
]);
return response;
}