myex-cli
Version:
Opinionated Express.js framework with CLI tools
116 lines (110 loc) • 3.58 kB
JavaScript
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);