UNPKG

venom-cli-toolkit

Version:

A sample CLI tool with advanced features

204 lines (203 loc) 7.95 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var chalk_1 = require("chalk"); var commander_1 = require("commander"); var ora_1 = require("ora"); var fs_1 = require("fs"); var path_1 = require("path"); var inquirer_1 = require("inquirer"); var child_process_1 = require("child_process"); var figlet_1 = require("figlet"); var program = new commander_1.Command(); var spinner = (0, ora_1.default)(); // Initialize spinner // Display CLI header with figlet console.log(chalk_1.default.cyanBright(figlet_1.default.textSync("VeNoM CLI", { font: 'Slant' }))); console.log(chalk_1.default.gray('Advanced CLI for project creation and management\n')); // CLI Version program.version('1.0.0').description('VeNoM CLI - Advanced CLI for project creation and management'); // Greet Command program .command('greet [name]') .description('Greet someone') .action(function (name) { var greetingName = name || 'World'; console.log(chalk_1.default.greenBright("Hello, ".concat(greetingName, "!"))); }); // Version Command program .command('version') .description('Show CLI version') .action(function () { console.log(chalk_1.default.blue("VeNoM CLI version: ".concat(program.version()))); }); // ASCII Art Command program .command('ascii') .description('Display ASCII art') .option('-t, --text <text>', 'Text for ASCII art', 'Hello') .action(function (options) { console.log(chalk_1.default.yellow(figlet_1.default.textSync(options.text, { font: 'Standard' }))); }); // Create New Project Command program .command('new <projectName>') .description('Create a new project') .action(function (projectName) { spinner.start('Initializing project setup...'); createNewProject(projectName); }); // Info Command program .command('info') .description('Display CLI info') .action(function () { console.log(chalk_1.default.green('VeNoM CLI - Developed by Vansh')); console.log(chalk_1.default.yellow('Visit my GitHub: https://github.com/VanshVala23')); }); // Exit Command program .command('exit') .description('Exit CLI') .action(function () { console.log(chalk_1.default.red('Goodbye! Exiting CLI...')); process.exit(0); }); /// Create New Project Function function createNewProject(projectName) { var projectPath = path_1.default.resolve(process.cwd(), projectName); if (fs_1.default.existsSync(projectPath)) { spinner.fail("Project folder \"".concat(projectName, "\" already exists.")); return; } inquirer_1.default .prompt([ { type: 'list', name: 'template', message: 'Choose a project template:', choices: ['React', 'Node.js', 'TypeScript', 'Angular', 'Vite', 'Empty'], }, ]) .then(function (_a) { var template = _a.template; spinner.succeed('Template selected'); fs_1.default.mkdirSync(projectPath); fs_1.default.writeFileSync(path_1.default.join(projectPath, 'README.md'), "# ".concat(projectName, "\n\nGenerated by VeNoM CLI.")); switch (template) { case 'React': setupReactProject(projectPath, projectName); break; case 'Node.js': setupNodeProject(projectPath, projectName); break; case 'TypeScript': setupTypeScriptProject(projectPath, projectName); break; case 'Angular': setupAngularProject(projectPath, projectName); break; case 'Vite': setupViteProject(projectPath, projectName); break; default: console.log(chalk_1.default.yellow('Empty project created.')); } }); } // Angular Project Setup function setupAngularProject(projectPath, projectName) { spinner.start('Setting up Angular project...'); try { (0, child_process_1.execSync)("npx @angular/cli new ".concat(projectName, " --directory . --skip-install"), { cwd: projectPath, stdio: 'inherit' }); (0, child_process_1.execSync)('npm install', { cwd: projectPath, stdio: 'inherit' }); spinner.succeed('Angular project setup complete.'); console.log(chalk_1.default.cyan("cd ".concat(projectName))); console.log(chalk_1.default.cyan('npm start')); } catch (error) { spinner.fail('Failed to set up Angular project.'); console.error(error); } } // Vite Project Setup function setupViteProject(projectPath, projectName) { spinner.start('Setting up Vite project...'); try { (0, child_process_1.execSync)("npx create-vite@latest ".concat(projectName, " -- --template react"), { cwd: process.cwd(), stdio: 'inherit' }); (0, child_process_1.execSync)('npm install --legacy-peer-deps', { cwd: projectPath, stdio: 'inherit' }); spinner.succeed('Vite project setup complete.'); console.log(chalk_1.default.cyan("cd ".concat(projectName))); console.log(chalk_1.default.cyan('npm run dev')); } catch (error) { spinner.fail('Failed to set up Vite project.'); console.error(error); } } // React Project Setup function setupReactProject(projectPath, projectName) { spinner.start('Setting up React project...'); try { (0, child_process_1.execSync)("npx create-react-app ".concat(projectName), { cwd: process.cwd(), stdio: 'inherit' }); spinner.succeed('React project setup complete.'); console.log(chalk_1.default.green("Navigate to your project: cd ".concat(projectName))); console.log(chalk_1.default.green('Start the development server: npm start')); } catch (error) { spinner.fail('Failed to set up React project.'); if (error instanceof Error) { console.error(chalk_1.default.red('Error:'), error.message); } } } // Node.js Project Setup function setupNodeProject(projectPath, projectName) { spinner.start('Setting up Node.js app...'); var packageJson = { name: projectName, version: '1.0.0', description: 'A Node.js application', main: 'index.js', scripts: { start: 'node index.js', }, }; fs_1.default.writeFileSync(path_1.default.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2)); fs_1.default.writeFileSync(path_1.default.join(projectPath, 'index.js'), "console.log('Hello, ".concat(projectName, "!');")); try { (0, child_process_1.execSync)('npm install', { cwd: projectPath, stdio: 'inherit' }); spinner.succeed('Node.js project setup complete.'); } catch (error) { spinner.fail('Failed to install dependencies.'); console.error(error); } } // TypeScript Project Setup function setupTypeScriptProject(projectPath, projectName) { spinner.start('Setting up TypeScript app...'); var packageJson = { name: projectName, version: '1.0.0', description: 'A TypeScript application', main: 'index.ts', scripts: { start: 'ts-node src/index.ts', }, }; var srcPath = path_1.default.join(projectPath, 'src'); fs_1.default.mkdirSync(srcPath, { recursive: true }); fs_1.default.writeFileSync(path_1.default.join(srcPath, 'index.ts'), "console.log('Hello, ".concat(projectName, "!');")); fs_1.default.writeFileSync(path_1.default.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2)); try { (0, child_process_1.execSync)('npm install typescript ts-node @types/node --save-dev', { cwd: projectPath, stdio: 'inherit' }); spinner.succeed('TypeScript project setup complete.'); } catch (error) { spinner.fail('Failed to install dependencies.'); console.error(error); } } // Start CLI program.parse(process.argv);