UNPKG

codizium-cli

Version:

A CLI tool to scaffold Laravel and Node-based modules with ease.

116 lines (93 loc) 2.77 kB
const fs = require("fs"); const path = require("path"); function toPascalCase(str) { return str.replace(/(^|-)(\w)/g, (_, __, l) => l.toUpperCase()); } async function generateClass(options) { const currentDir = process.cwd(); const basePath = path.resolve(options.path || currentDir); const pascalName = toPascalCase(options.name); const pascalModule = toPascalCase(options.module || path.basename(basePath)); // Detect if we’re inside a module by checking for 'src' directory const isInsideModule = fs.existsSync(path.join(basePath, "src")); const moduleDir = isInsideModule ? basePath : path.join(basePath, options.module); // Fail fast if not a module folder if (!fs.existsSync(path.join(moduleDir, "src"))) { console.error("❌ Not inside a valid module (missing src/ folder)"); process.exit(1); } const fileMap = { controller: { dir: "src/Controllers", file: `${pascalName}Controller.php`, content: `<?php namespace Modules\\${pascalModule}\\Controllers; use Illuminate\\Routing\\Controller; class ${pascalName}Controller extends Controller { public function index() { return view('${options.module.toLowerCase()}::index'); } } ` }, model: { dir: "src/Models", file: `${pascalName}.php`, content: `<?php namespace Modules\\${pascalModule}\\Models; use Illuminate\\Database\\Eloquent\\Model; class ${pascalName} extends Model { // } ` }, enum: { dir: "src/Enums", file: `${pascalName}.php`, content: `<?php namespace Modules\\${pascalModule}\\Enums; enum ${pascalName}: string { case EXAMPLE = 'example'; } ` }, service: { dir: "src/Services", file: `${pascalName}Service.php`, content: `<?php namespace Modules\\${pascalModule}\\Services; class ${pascalName}Service { public function handle() { // } } ` }, request: { dir: "src/Requests", file: `${pascalName}Request.php`, content: `<?php namespace Modules\\${pascalModule}\\Requests; use Illuminate\\Foundation\\Http\\FormRequest; class ${pascalName}Request extends FormRequest { public function rules() { return [ // validation rules ]; } } ` } }; // Validate type if (!fileMap[options.type]) { console.error(`❌ Unknown component type: '${options.type}'`); process.exit(1); } const { dir, file, content } = fileMap[options.type]; const fullDir = path.join(moduleDir, dir); fs.mkdirSync(fullDir, { recursive: true }); fs.writeFileSync(path.join(fullDir, file), content); console.log(`✅ ${options.type.charAt(0).toUpperCase() + options.type.slice(1)} created: ${path.join(dir, file)}`); } module.exports = { generateClass };