UNPKG

@reliverse/rse

Version:

@reliverse/rse is your all-in-one companion for bootstrapping and improving any kind of projects (especially web apps built with frameworks like Next.js) — whether you're kicking off something new or upgrading an existing app. It is also a little AI-power

94 lines (93 loc) 3.19 kB
import { detectProject } from "@reliverse/cfg"; import { runCmd, selectPrompt } from "@reliverse/rempts"; import { generate } from "random-words"; import { getWebCmd } from "../cmds.js"; import { showManualBuilderMenu } from "../init/impl/init-impl.js"; import { aiMenu } from "../../libs/sdk/ai/ai-menu.js"; import { cliJsrPath, UNKNOWN_VALUE } from "../../libs/sdk/constants.js"; import { ad, getRandomMessage, getWelcomeTitle, premium } from "../../libs/sdk/db/messages.js"; import { getMainMenuOptions } from "../../libs/sdk/init/use-template/cp-modules/cli-main-modules/cli-menu-items/getMainMenuOptions.js"; import { showCloneProjectMenu } from "../../libs/sdk/init/use-template/cp-modules/cli-main-modules/cli-menu-items/showCloneProjectMenu.js"; import { showEndPrompt } from "../../libs/sdk/init/use-template/cp-modules/cli-main-modules/modules/showStartEndPrompt.js"; import { showDevToolsMenu } from "../../libs/sdk/toolbox/toolbox-impl.js"; import { showNativeCliMenu } from "../../libs/sdk/utils/native-cli/nc-mod.js"; import { showNewProjectMenu, showOpenProjectMenu } from "../../providers/reliverse-stack/reliverse-stack-mod.js"; export async function app(params) { const { cwd, isDev, mrse, memory, config } = params; const skipPrompts = config.skipPromptsUseAutoBehavior ?? false; const frontendUsername = memory.name !== "" ? memory.name : UNKNOWN_VALUE; const projectName = isDev ? generate({ exactly: 2, join: "-" }) : config.projectName ?? UNKNOWN_VALUE; if (!isDev) { await detectProject(cwd, isDev); } const options = await getMainMenuOptions(cwd, isDev, mrse); const mainMenuOption = await selectPrompt({ options, title: frontendUsername ? getWelcomeTitle(frontendUsername) : getRandomMessage("welcome"), content: `[Ad] ${ad} ${premium}`, titleColor: "retroGradient", displayInstructions: true, endTitle: "\u270B User pressed Ctrl+C, exiting..." }); if (mainMenuOption === "create") { await showNewProjectMenu({ projectName, cwd, isDev, memory, config, mrse, skipPrompts }); } else if (mainMenuOption === "clone") { await showCloneProjectMenu({ isDev, cwd, config, memory }); } else if (mainMenuOption === "native-cli") { const outputDir = cliJsrPath; await showNativeCliMenu({ outputDir }); } else if (mainMenuOption === "manual") { await showManualBuilderMenu({ projectName, cwd, isDev, memory, config, skipPrompts }); } else if (mainMenuOption === "detected-projects") { await showOpenProjectMenu({ projectName, cwd, isDev, memory, config, mrse, skipPrompts }); } else if (mainMenuOption === "isDevTools") { await showDevToolsMenu({ projectName, cwd, isDev, config, memory, skipPrompts }); } else if (mainMenuOption === "ai") { await aiMenu(config, false, memory); } else if (mainMenuOption === "web-ui") { await showWebUiMenu({ isDev }); } await showEndPrompt(); } export async function showWebUiMenu({ isDev }) { await runCmd(await getWebCmd(), [`--dev ${isDev}`]); }