@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
JavaScript
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}`]);
}