dna-template-cli
Version:
DNA Template CLI v0.3.4 - Enhanced Commands Added (enhanced-create, enhanced-list, enhanced-validate)
147 lines (143 loc) • 6.84 kB
JavaScript
;
/**
* @fileoverview DNA CLI Tool - Main Entry Point
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const chalk_compat_1 = __importDefault(require("./utils/chalk-compat"));
const boxen_compat_1 = __importDefault(require("./utils/boxen-compat"));
const update_notifier_compat_1 = __importDefault(require("./utils/update-notifier-compat"));
const create_1 = require("./commands/create");
const list_1 = require("./commands/list");
const validate_1 = require("./commands/validate");
const update_1 = require("./commands/update");
const test_1 = require("./commands/test");
const track_1 = require("./commands/track");
const quality_1 = require("./commands/quality");
const git_1 = require("./commands/git");
const enhanced_create_1 = require("./commands/enhanced-create");
const enhanced_list_1 = require("./commands/enhanced-list");
const enhanced_validate_1 = require("./commands/enhanced-validate");
const features_1 = require("./config/features");
// import { qualityValidationCommand } from './commands/quality-validation';
const environment_1 = require("./environments/environment");
const logger_1 = require("./utils/logger");
const error_handler_1 = require("./utils/error-handler");
const pkg = {
name: 'dna-cli',
version: environment_1.environment.version,
};
async function main() {
try {
// Check for updates
const notifier = (0, update_notifier_compat_1.default)({ pkg, updateCheckInterval: environment_1.environment.updateCheckInterval });
if (notifier.update) {
const message = `Update available: ${chalk_compat_1.default.dim(notifier.update.current)} → ${chalk_compat_1.default.green(notifier.update.latest)}\nRun ${chalk_compat_1.default.cyan('npm install -g dna-cli')} to update`;
console.log((0, boxen_compat_1.default)(message, {
padding: 1,
margin: 1,
borderStyle: 'round',
borderColor: 'yellow'
}));
}
const program = new commander_1.Command();
// Configure main program
program
.name('dna-cli')
.description('DNA Template CLI - AI-native template generation ecosystem')
.version(environment_1.environment.version, '-v, --version', 'display version number')
.option('-d, --debug', 'enable debug mode')
.option('--verbose', 'enable verbose output')
.option('-q, --quiet', 'suppress non-error output')
.option('-c, --config <path>', 'use custom config file')
.hook('preAction', (thisCommand) => {
const opts = thisCommand.opts();
logger_1.logger.setLevel(opts['debug'] ? 'debug' : opts['verbose'] ? 'info' : opts['quiet'] ? 'error' : 'info');
if (opts['debug']) {
logger_1.logger.debug('Debug mode enabled');
logger_1.logger.debug('Environment:', environment_1.environment);
}
});
// Add commands
program.addCommand(create_1.createCommand);
program.addCommand(list_1.listCommand);
program.addCommand(validate_1.validateCommand);
program.addCommand(update_1.updateCommand);
// Add feature-flagged commands
if (features_1.FEATURES.TEST_COMMAND) {
program.addCommand(test_1.testCommand);
}
if (features_1.FEATURES.TRACK_COMMAND) {
program.addCommand(track_1.trackCommand);
}
if (features_1.FEATURES.QUALITY_VALIDATION) {
program.addCommand(quality_1.qualityCommand);
}
if (features_1.FEATURES.GIT_AUTOMATION) {
program.addCommand(git_1.gitCommand);
}
if (features_1.FEATURES.ENHANCED_COMMANDS) {
program.addCommand(enhanced_create_1.enhancedCreateCommand);
program.addCommand(enhanced_list_1.enhancedListCommand);
program.addCommand(enhanced_validate_1.enhancedValidateCommand);
}
// Show help when no command is provided
if (process.argv.length <= 2) {
showWelcome();
program.outputHelp();
return;
}
// Parse CLI arguments
await program.parseAsync(process.argv);
}
catch (error) {
(0, error_handler_1.handleError)(error);
process.exit(1);
}
}
function showWelcome() {
const welcome = `
${chalk_compat_1.default.cyan.bold('🧬 DNA Template CLI')}
${chalk_compat_1.default.gray('AI-native template generation ecosystem')}
${chalk_compat_1.default.gray('Create production-ready projects in under 10 minutes')}
${chalk_compat_1.default.bold('Quick Start:')}
${chalk_compat_1.default.cyan('dna-cli create')} ${chalk_compat_1.default.gray('# Interactive template creation')}
${chalk_compat_1.default.cyan('dna-cli list')} ${chalk_compat_1.default.gray('# Browse available templates')}
${chalk_compat_1.default.cyan('dna-cli test')} ${chalk_compat_1.default.gray('# Run comprehensive tests')}
${chalk_compat_1.default.cyan('dna-cli track')} ${chalk_compat_1.default.gray('# Progress tracking & session management')}
${chalk_compat_1.default.cyan('dna-cli quality')} ${chalk_compat_1.default.gray('# Quality validation & scoring')}
${chalk_compat_1.default.cyan('dna-cli create --help')} ${chalk_compat_1.default.gray('# Get detailed help')}
${chalk_compat_1.default.bold('Examples:')}
${chalk_compat_1.default.cyan('dna-cli create my-app --template ai-saas --framework nextjs')}
${chalk_compat_1.default.cyan('dna-cli track start --epic user-auth --story login-form')}
${chalk_compat_1.default.cyan('dna-cli test --framework nextjs --quality-gates')}
${chalk_compat_1.default.cyan('dna-cli quality check --framework nextjs --threshold 85')}
${chalk_compat_1.default.cyan('dna-cli list --framework react-native --category ai')}
`;
console.log((0, boxen_compat_1.default)(welcome, {
padding: 1,
margin: 1,
borderStyle: 'round',
borderColor: 'cyan',
}));
}
// Handle unhandled promise rejections
process.on('unhandledRejection', (reason, promise) => {
logger_1.logger.error('Unhandled Rejection at:', promise, 'reason:', reason);
(0, error_handler_1.handleError)(new Error(`Unhandled promise rejection: ${reason}`));
process.exit(1);
});
// Handle uncaught exceptions
process.on('uncaughtException', (error) => {
logger_1.logger.error('Uncaught Exception:', error);
(0, error_handler_1.handleError)(error);
process.exit(1);
});
// Run the CLI
if (require.main === module) {
main();
}