UNPKG

@prolaxu/galaxy-api-tool

Version:

CLI tool for generating Galaxy API files (Controllers, Resources, Vue components)

174 lines (151 loc) 7.08 kB
#!/usr/bin/env node const { Command } = require('commander'); const chalk = require('chalk'); const path = require('path'); const Generator = require('../lib/generator'); const program = new Command(); program .name('galaxy-api-tool') .description('CLI tool for generating Galaxy API files') .version('1.0.0'); // Generate API files (Controller + Request + Resource) program .command('gen:api <modelName>') .description('Generate Galaxy API files (Controller, Request, Resource)') .option('-p, --path <path>', 'Custom output path', process.cwd()) .option('--test', 'Generate in tests folder for testing') .action(async (modelName, options) => { console.log(chalk.blue('🚀 Generating Galaxy API files...')); try { const outputPath = options.test ? path.join(options.path, 'tests') : options.path; const generator = new Generator(outputPath); await generator.generateApi(modelName); const basePath = options.test ? 'tests/' : ''; console.log(chalk.green('✅ Generated:')); console.log(` - Controller: ${basePath}src/GalaxyAPI/Controllers/${modelName}Controller.php`); console.log(` - Request: ${basePath}src/GalaxyAPI/Requests/${modelName}Request.php`); console.log(` - Resource: ${basePath}src/GalaxyAPI/Resources/${modelName}Resource.php`); } catch (error) { console.error(chalk.red('❌ Error:'), error.message); process.exit(1); } }); // Generate API files without Request (uses EmptyRequest) program .command('gen:api-empty <modelName>') .description('Generate Galaxy API files without Request validation') .option('-p, --path <path>', 'Custom output path', process.cwd()) .option('--test', 'Generate in tests folder for testing') .action(async (modelName, options) => { console.log(chalk.blue('🚀 Generating Galaxy API files (empty)...')); try { const outputPath = options.test ? path.join(options.path, 'tests') : options.path; const generator = new Generator(outputPath); await generator.generateApiEmpty(modelName); const basePath = options.test ? 'tests/' : ''; console.log(chalk.green('✅ Generated:')); console.log(` - Controller: ${basePath}src/GalaxyAPI/Controllers/${modelName}Controller.php`); console.log(` - Resource: ${basePath}src/GalaxyAPI/Resources/${modelName}Resource.php`); } catch (error) { console.error(chalk.red('❌ Error:'), error.message); process.exit(1); } }); // Generate Vue.js CRUD views program .command('gen:views <modelInput>') .description('Generate Galaxy CRUD views (Vue components and Pinia store)') .option('-p, --path <path>', 'Custom output path', process.cwd()) .option('--test', 'Generate in tests folder for testing') .action(async (modelInput, options) => { console.log(chalk.blue('🚀 Generating Galaxy CRUD views...')); try { const outputPath = options.test ? path.join(options.path, 'tests') : options.path; const generator = new Generator(outputPath); const result = await generator.generateViews(modelInput); const basePath = options.test ? 'tests/' : ''; console.log(chalk.green(`✅ Generated CRUD files for ${result.modelName}:`)); if (result.groupFolder) { console.log(` 📁 Group: ${result.groupFolder}`); } console.log(` 📁 Store: ${basePath}${result.storePath}`); console.log(` 📝 Form: ${basePath}${result.formPath}`); console.log(` 📋 List: ${basePath}${result.listPath}`); console.log(` 🔽 Select: ${basePath}${result.selectPath}`); console.log(''); console.log(chalk.yellow('📝 Next steps:')); console.log(` 1. Update the columns array in ${result.modelName}ListComponent.vue`); console.log(` 2. Add form fields to ${result.modelName}Form.vue`); console.log(' 3. Import and use components in your routes/pages'); if (result.groupFolder) { console.log(` 4. API endpoint: v2/tenant/${result.fullLowerPath}`); } } catch (error) { console.error(chalk.red('❌ Error:'), error.message); process.exit(1); } }); // Generate everything (API + Views) program .command('gen:all <modelInput>') .description('Generate all Galaxy files (API + CRUD views)') .option('-p, --path <path>', 'Custom output path', process.cwd()) .option('--empty', 'Use empty request for API generation', false) .option('--test', 'Generate in tests folder for testing') .action(async (modelInput, options) => { console.log(chalk.blue('🚀 Generating all Galaxy files...')); try { const outputPath = options.test ? path.join(options.path, 'tests') : options.path; const generator = new Generator(outputPath); // Extract model name for API generation const modelName = modelInput.includes('/') ? modelInput.split('/').pop() : modelInput; // Generate API files if (options.empty) { await generator.generateApiEmpty(modelName); } else { await generator.generateApi(modelName); } // Generate Views const result = await generator.generateViews(modelInput); const basePath = options.test ? 'tests/' : ''; console.log(chalk.green('✅ Generated all files:')); console.log(chalk.cyan(' API Files:')); console.log(` - Controller: ${basePath}src/GalaxyAPI/Controllers/${modelName}Controller.php`); if (!options.empty) { console.log(` - Request: ${basePath}src/GalaxyAPI/Requests/${modelName}Request.php`); } console.log(` - Resource: ${basePath}src/GalaxyAPI/Resources/${modelName}Resource.php`); console.log(chalk.cyan(' CRUD Files:')); if (result.groupFolder) { console.log(` 📁 Group: ${result.groupFolder}`); } console.log(` 📁 Store: ${basePath}${result.storePath}`); console.log(` 📝 Form: ${basePath}${result.formPath}`); console.log(` 📋 List: ${basePath}${result.listPath}`); console.log(` 🔽 Select: ${basePath}${result.selectPath}`); console.log(''); console.log(chalk.yellow('📝 Next steps:')); console.log(` 1. Update the columns array in ${result.modelName}ListComponent.vue`); console.log(` 2. Add form fields to ${result.modelName}Form.vue`); console.log(' 3. Import and use components in your routes/pages'); if (result.groupFolder) { console.log(` 4. API endpoint: v2/tenant/${result.fullLowerPath}`); } } catch (error) { console.error(chalk.red('❌ Error:'), error.message); process.exit(1); } }); // Handle unknown commands program.on('command:*', () => { console.error(chalk.red('❌ Invalid command: %s'), program.args.join(' ')); console.log('See --help for a list of available commands.'); process.exit(1); }); // Show help if no command provided if (!process.argv.slice(2).length) { program.outputHelp(); } program.parse();