UNPKG

myex-cli

Version:

Opinionated Express.js framework with CLI tools

116 lines (110 loc) 3.58 kB
#!/usr/bin/env node import { program } from 'commander'; import chalk from 'chalk'; import figlet from 'figlet'; import { createProject } from '../lib/commands/create-project.js'; import { generateComponent } from '../lib/commands/generate-component.js'; import { generateModel } from '../lib/commands/generate-model.js'; import { generateController } from '../lib/commands/generate-controller.js'; import { generateRoute } from '../lib/commands/generate-route.js'; import { generateService } from '../lib/commands/generate-service.js'; import { generateMiddleware } from '../lib/commands/generate-middleware.js'; import { generateFeature } from '../lib/commands/generate-feature.js'; // Display banner console.log( chalk.blue( figlet.textSync('MYX', { horizontalLayout: 'full' }) ) ); console.log(chalk.blue('An opinionated Express.js framework with ES6 modules')); console.log(''); program .name('myx') .description('CLI to build and manage MYX applications') .version('1.0.0'); // Create new project program .command('new <project-name>') .description('Create a new MYX project') .option('-d, --directory <directory>', 'Specify a custom directory', './') .option('--no-git', 'Skip git initialization') .option('--no-install', 'Skip npm install') .option('--db <database>', 'Choose database (mongodb, postgres, mysql)', 'mongodb') .option('--auth <auth>', 'Choose authentication (jwt, passport, oauth)', 'jwt') .action((projectName, options) => { createProject(projectName, options); }); // Generate components program .command('generate') .alias('g') .description('Generate components for your MYX application') .addCommand( program .command('component <name>') .alias('c') .description('Generate a new component') .action((name) => { generateComponent(name); }) ) .addCommand( program .command('model <name>') .alias('m') .description('Generate a new model') .option('-f, --fields <fields...>', 'Define model fields (name:type:required)') .action((name, options) => { generateModel(name, options); }) ) .addCommand( program .command('controller <name>') .alias('ctrl') .description('Generate a new controller') .option('-m, --model <modelName>', 'Specify related model name') .action((name, options) => { generateController(name, options); }) ) .addCommand( program .command('route <name>') .alias('r') .description('Generate a new route') .option('-c, --controller <controllerName>', 'Specify controller name') .action((name, options) => { generateRoute(name, options); }) ) .addCommand( program .command('service <name>') .alias('s') .description('Generate a new service') .option('-m, --model <modelName>', 'Specify related model name') .action((name, options) => { generateService(name, options); }) ) .addCommand( program .command('middleware <name>') .alias('mid') .description('Generate a new middleware') .action((name) => { generateMiddleware(name); }) ) .addCommand( program .command('feature <name>') .alias('f') .description('Generate a full feature (model, controller, route, service)') .option('-f, --fields <fields...>', 'Define model fields (name:type:required)') .action((name, options) => { generateFeature(name, options); }) ); program.parse(process.argv);