UNPKG

@reliverse/rse-sdk

Version:

@reliverse/rse-sdk without cli. @reliverse/rse-sdk allows you to create new plugins for @reliverse/rse CLI, interact with reliverse.org, and even extend your own CLI functionality (you may also try @reliverse/dler-sdk for this case).

63 lines (62 loc) 2.14 kB
import { re } from "@reliverse/relico"; import fs from "@reliverse/relifso"; import { cancel, isCancel, text } from "@reliverse/rempts"; import path from "node:path"; import { DEFAULT_CONFIG } from "../constants.js"; import { ProjectNameSchema } from "../types.js"; function validateDirectoryName(name) { if (name === ".") return void 0; const result = ProjectNameSchema.safeParse(name); if (!result.success) { return result.error.issues[0]?.message || "Invalid project name"; } return void 0; } export async function getProjectName(initialName) { if (initialName) { if (initialName === ".") { return initialName; } const finalDirName = path.basename(initialName); const validationError = validateDirectoryName(finalDirName); if (!validationError) { return initialName; } } let isValid = false; let projectPath = ""; let defaultName = DEFAULT_CONFIG.projectName; let counter = 1; while (fs.pathExistsSync(path.resolve(process.cwd(), defaultName)) && fs.readdirSync(path.resolve(process.cwd(), defaultName)).length > 0) { defaultName = `${DEFAULT_CONFIG.projectName}-${counter}`; counter++; } while (!isValid) { const response = await text({ message: "Enter your project name or path (relative to current directory)", placeholder: defaultName, initialValue: initialName, defaultValue: defaultName, validate: (value) => { const nameToUse = value.trim() || defaultName; const finalDirName = path.basename(nameToUse); const validationError = validateDirectoryName(finalDirName); if (validationError) return validationError; if (nameToUse !== ".") { const projectDir = path.resolve(process.cwd(), nameToUse); if (!projectDir.startsWith(process.cwd())) { return "Project path must be within current directory"; } } return void 0; } }); if (isCancel(response)) { cancel(re.red("Operation cancelled.")); process.exit(0); } projectPath = response || defaultName; isValid = true; } return projectPath; }