UNPKG

@gati-framework/cli

Version:

CLI tool for Gati framework - create, develop, build and deploy cloud-native applications

80 lines 3.48 kB
/** * @module cli/commands/build * @description Build command for production bundling (Issue #11) */ import { Command } from 'commander'; import chalk from 'chalk'; import ora from 'ora'; import { validateProject, printValidationResults } from '../utils/validator.js'; import { runTypeScriptCompiler, printBuildResults } from '../utils/bundler.js'; /** * Execute the build process */ async function executeBuild(cwd, options) { const spinner = ora('Building project...').start(); try { // Step 1: Validate project structure if (!options.skipValidation) { spinner.text = 'Validating project structure...'; const validationResult = validateProject(cwd); if (!validationResult.valid) { spinner.fail(chalk.red('✖ Project validation failed')); printValidationResults(validationResult); process.exit(1); } if (validationResult.warnings.length > 0) { spinner.warn(chalk.yellow('⚠ Project validation completed with warnings')); printValidationResults(validationResult); } else { spinner.succeed(chalk.green('✔ Project validation passed')); } } // Step 2: Build with TypeScript spinner.start('Compiling TypeScript...'); const buildOptions = { sourcemap: options.sourcemap, minify: options.minify, mode: options.mode || 'production', verbose: false, }; const buildResult = await runTypeScriptCompiler(cwd, buildOptions); if (!buildResult.success) { spinner.fail(chalk.red('✖ Build failed')); printBuildResults(buildResult); process.exit(1); } spinner.succeed(chalk.green('✔ TypeScript compilation completed')); printBuildResults(buildResult); // Build success summary // eslint-disable-next-line no-console console.log(chalk.cyan('\n📦 Build Summary:')); // eslint-disable-next-line no-console console.log(chalk.gray(` Mode: ${buildOptions.mode}`)); // eslint-disable-next-line no-console console.log(chalk.gray(` Source Maps: ${options.sourcemap ? 'enabled' : 'disabled'}`)); // eslint-disable-next-line no-console console.log(chalk.gray(` Minification: ${options.minify ? 'enabled' : 'disabled'}`)); // eslint-disable-next-line no-console console.log(chalk.gray(` Duration: ${buildResult.duration}ms`)); // eslint-disable-next-line no-console console.log(chalk.green('\n✨ Ready for deployment!')); } catch (error) { spinner.fail(chalk.red('✖ Build process failed')); // eslint-disable-next-line no-console console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error')); process.exit(1); } } export const buildCommand = new Command('build') .description('Build project for production') .option('--no-minify', 'Disable minification (enabled by default)') .option('--sourcemap', 'Generate source maps (disabled by default)') .option('--mode <mode>', 'Build mode (development or production)', 'production') .option('--skip-validation', 'Skip project validation') .action(async (options) => { const cwd = process.cwd(); await executeBuild(cwd, options); }); //# sourceMappingURL=build.js.map