UNPKG

wakeb-starter-cli

Version:

A powerful CLI tool for generating CRUD modules, common modules, and components with Vue 3 form schemas, featuring intelligent field detection and automatic schema generation

90 lines (73 loc) • 2.63 kB
import fs from "fs"; import path from "path"; import inquirer from "inquirer"; import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const MODULES_TEMPLATE_DIR = path.resolve(__dirname, "../../templates/modules"); const PROJECT_MODULES_DIR = path.resolve("src/modules"); export default async function addModule() { const moduleNames = getAvailableModules(MODULES_TEMPLATE_DIR); const existingModules = getExistingModules(PROJECT_MODULES_DIR); const choices = moduleNames.map((name) => ({ name: `${existingModules.includes(name) ? "āœ…" : "⬜"} ${name}`, value: name, checked: existingModules.includes(name), })); const { selectedModules } = await inquirer.prompt([ { type: "checkbox", name: "selectedModules", message: "šŸ“¦ Select modules to add:", choices, pageSize: 15, }, ]); for (const moduleName of selectedModules) { const sourcePath = path.join(MODULES_TEMPLATE_DIR, moduleName); const targetPath = path.join(PROJECT_MODULES_DIR, moduleName); if (fs.existsSync(targetPath)) { const { overwrite } = await inquirer.prompt([ { type: "confirm", name: "overwrite", message: `āš ļø Module '${moduleName}' already exists. Overwrite?`, default: false, }, ]); if (!overwrite) { console.log(`ā© Skipped: ${moduleName}`); continue; } } copyFolderRecursive(sourcePath, targetPath); console.log(`āœ… ${moduleName} module added.`); } console.log("\nšŸŽ‰ All selected modules have been processed.\n"); } function getAvailableModules(dir) { return fs.readdirSync(dir).filter((item) => { const itemPath = path.join(dir, item); return fs.statSync(itemPath).isDirectory(); }); } function getExistingModules(dir) { if (!fs.existsSync(dir)) return []; return fs.readdirSync(dir).filter((item) => { const itemPath = path.join(dir, item); return fs.statSync(itemPath).isDirectory(); }); } function copyFolderRecursive(src, dest) { if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true }); const entries = fs.readdirSync(src, { withFileTypes: true }); for (const entry of entries) { const srcPath = path.join(src, entry.name); const destPath = path.join(dest, entry.name); if (entry.isDirectory()) { copyFolderRecursive(srcPath, destPath); } else { fs.copyFileSync(srcPath, destPath); } } }