@codehance/rapid-stack
Version:
A modern full-stack development toolkit for rapid application development
232 lines (204 loc) • 8.72 kB
JavaScript
const path = require('path');
const Environment = require('yeoman-environment');
const args = process.argv.slice(2);
const command = args[0];
// Check for version flag
if (command === '--version' || command === '-v') {
const packageJson = require('../package.json');
console.log(packageJson.version);
process.exit(0);
}
// Check for list command
if (command === 'list') {
console.log('\nAvailable Generators:');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
// Group commands by category
const categories = {
'Initialization': [
'init - Initialize a new project',
'run:devops - Run devops pipeline',
'run:static-devops - Run static devops pipeline'
],
'Build Commands': [
'build:backend - Build backend infrastructure',
'build:frontend - Build frontend infrastructure',
'build:devops - Build devops infrastructure',
'build:lifecycle - Build development lifecycle',
'build:fullstack - Build fullstack application',
'build:deploy - Deploy application to cloud',
'build:static - Build static assets',
'build:static-fullstack - Build static fullstack application'
],
'Schema Commands': [
'schema:create - Create backend schema',
'schema:run - Run backend schema',
'schema:rm - Remove backend schema'
],
'Frontend Commands': [
'frontend:platform - Add frontend platform',
'frontend:crud - Add CRUD operations',
'frontend:auth - Add authentication',
'frontend:event - Add event handling',
'frontend:list - Add list actions',
'frontend:home - Add home page',
'frontend:company - Add company page',
'frontend:platform:rm - Remove frontend platform',
'frontend:auth:rm - Remove frontend authentication'
],
'Backend Commands': [
'backend:graphql - Add GraphQL support',
'backend:auth - Add authentication',
'backend:auth:rm - Remove backend authentication',
'backend:external-api - Add external API integration'
],
'Development Commands': [
'serve, s - Start frontend and backend servers',
'destroy - Destroy all project resources (cloud, git, local)'
],
'Mobile Commands': [
'ios - Build iOS app',
'android - Build Android app'
]
};
// Print each category and its commands
for (const [category, commands] of Object.entries(categories)) {
console.log(`\n${category}:`);
commands.forEach(cmd => console.log(` ${cmd}`));
}
console.log('\nOptions:');
console.log(' --yes, -y - Automatically answer "yes" to all prompts');
console.log(' --auth-only - Only add authentication');
console.log(' --version, -v - Show version number');
console.log(' --rm - Remove resources (where applicable)');
process.exit(0);
}
// Parse command line options
const options = {};
let remainingArgs = [];
for (let i = 1; i < args.length; i++) {
if (args[i] === '--yes' || args[i] === '-y') {
options.askAnswered = true;
} else if (args[i] === '--auth-only') {
options.authOnly = true;
} else {
remainingArgs.push(args[i]);
}
}
if (!command) {
console.error('Please specify a command. Available commands:');
console.error('\nInitialization:');
console.error(' init - Initialize a new project');
console.error(' run:devops - Run devops pipeline');
console.error(' run:static-devops - Run static devops pipeline');
console.error('\nBuild Commands:');
console.error(' build:backend - Build backend infrastructure');
console.error(' build:frontend - Build frontend infrastructure');
console.error(' build:devops - Build devops infrastructure');
console.error(' build:lifecycle - Build development lifecycle');
console.error(' build:fullstack - Build fullstack application');
console.error(' build:deploy - Deploy application to cloud');
console.error(' build:static - Build static assets');
console.error(' build:static-fullstack - Build static fullstack application');
console.error('\nSchema Commands:');
console.error(' schema:create - Create backend schema');
console.error(' schema:run - Run backend schema');
console.error(' schema:rm - Remove backend schema');
console.error('\nFrontend Commands:');
console.error(' frontend:platform - Add frontend platform');
console.error(' frontend:crud - Add CRUD operations');
console.error(' frontend:auth - Add authentication');
console.error(' frontend:event - Add event handling');
console.error(' frontend:list - Add list actions');
console.error(' frontend:home - Add home page');
console.error(' frontend:company - Add company page');
console.error(' frontend:platform:rm - Remove frontend platform');
console.error(' frontend:auth:rm - Remove frontend authentication');
console.error('\nBackend Commands:');
console.error(' backend:graphql - Add GraphQL support');
console.error(' backend:auth - Add authentication');
console.error(' backend:auth:rm - Remove backend authentication');
console.error(' backend:external-api - Add external API integration');
console.error('\nDevelopment Commands:');
console.error(' serve, s - Start frontend and backend servers');
console.error(' destroy - Destroy all project resources (cloud, git, local)');
console.error('\nMobile Commands:');
console.error(' ios - Build iOS app');
console.error(' android - Build Android app');
console.error('\nOptions:');
console.error(' --yes, -y - Automatically answer "yes" to all prompts');
console.error(' --auth-only - Only add authentication');
console.error(' --version, -v - Show version number');
process.exit(1);
}
// Map commands to generator paths
const generatorMap = {
// Build Commands
'build:backend': '../lib/generators/build-backend',
'build:frontend': '../lib/generators/build-frontend',
'build:devops': '../lib/generators/build-devops',
'build:lifecycle': '../lib/generators/dev-lifecycle',
'build:fullstack': '../lib/generators/build-fullstack',
'build:deploy': '../lib/generators/build-fullstack-deploy',
'build:static': '../lib/generators/build-static-web',
'build:static-devops': '../lib/generators/build-static-devops',
'build:static-fullstack': '../lib/generators/build-static-fullstack',
// Schema Commands
'schema:create': '../lib/generators/backend-schema',
'schema:run': '../lib/generators/backend-schema-runner',
'schema:rm': '../lib/generators/remove-schema-runner',
// Frontend Commands
'frontend:platform': '../lib/generators/frontend-platform',
'frontend:crud': '../lib/generators/frontend-crud',
'frontend:auth': '../lib/generators/frontend-auth',
'frontend:home': '../lib/generators/frontend-home',
'frontend:company': '../lib/generators/frontend-company',
'frontend:auth:rm': '../lib/generators/remove-frontend-auth',
'frontend:event': '../lib/generators/frontend-event',
'frontend:list': '../lib/generators/frontend-list-action',
'frontend:platform:rm': '../lib/generators/remove-frontend-platform',
// Backend Commands
'backend:auth': '../lib/generators/backend-auth',
'backend:auth:rm': '../lib/generators/remove-backend-auth',
'backend:external-api': '../lib/generators/backend-external-api',
// GraphQL Commands
'graphql': '../lib/generators/graphql',
'graphql:rm': '../lib/generators/remove-graphql',
// Initialization
'init': '../lib/generators/init',
'run:devops': '../lib/generators/run-fullstack-devops',
'run:static-devops': '../lib/generators/run-static-devops',
'run:static-deploy': '../lib/generators/run-static-deploy',
// Development Commands
'serve': '../lib/generators/serve',
's': '../lib/generators/serve',
'destroy': '../lib/generators/destroy',
// mobile commands
'ios': '../lib/generators/ios',
'android': '../lib/generators/android',
};
const generatorPath = generatorMap[command];
if (!generatorPath) {
console.error(`Unknown command: ${command}`);
process.exit(1);
}
// Create and run the environment
const env = Environment.createEnv();
try {
const fullPath = path.resolve(__dirname, generatorPath);
env.register(fullPath, command);
// Create the run arguments array with the command and remaining args
const runArgs = [command, ...remainingArgs];
// Run the generator with the correct argument structure
env.run(runArgs, options)
.then(() => {
console.log(`Successfully ran generator: ${command}`);
})
.catch(err => {
console.error('Error running generator:', err);
process.exit(1);
});
} catch (err) {
console.error('Error loading generator:', err);
process.exit(1);
}