UNPKG

@labnex/cli

Version:

CLI for Labnex, an AI-Powered Testing Automation Platform

168 lines • 7.32 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.projectsCommand = void 0; const commander_1 = require("commander"); const inquirer_1 = __importDefault(require("inquirer")); const chalk_1 = __importDefault(require("chalk")); const ora_1 = __importDefault(require("ora")); const cli_table3_1 = __importDefault(require("cli-table3")); const client_1 = require("../api/client"); exports.projectsCommand = new commander_1.Command('projects') .description('Manage your Labnex projects (list, create, view details).') .alias('project') .addCommand(new commander_1.Command('list') .description('List all your available Labnex projects.') .option('--format <format>', 'Output format (table, json)', 'table') .action(async (options) => { try { const spinner = (0, ora_1.default)('Fetching projects...').start(); const response = await client_1.apiClient.getProjects(); if (response.success) { spinner.succeed(`Found ${response.data.length} projects`); console.log(JSON.stringify(response.data, null, 2)); } else { spinner.fail(chalk_1.default.red('Failed to fetch projects')); } } catch (error) { console.error(chalk_1.default.red('Error:'), error.message); } })) .addCommand(new commander_1.Command('create') .description('Create a new Labnex project with a name, code, and description.') .option('-n, --name <name>', 'Project name') .option('-c, --code <code>', 'Project code (3-5 chars)') .option('-d, --description <description>', 'Project description') .action(async (options) => { try { let { name, code, description } = options; // Interactive prompts if options not provided if (!name || !code) { const prompts = []; if (!name) { prompts.push({ type: 'input', name: 'name', message: 'Project name:', validate: (input) => input.length > 0 || 'Name is required' }); } if (!code) { prompts.push({ type: 'input', name: 'code', message: 'Project code (3-5 chars):', validate: (input) => { if (input.length < 3 || input.length > 5) { return 'Code must be 3-5 characters'; } if (!/^[A-Z0-9]+$/i.test(input)) { return 'Code must be alphanumeric'; } return true; }, filter: (input) => input.toUpperCase() }); } if (!description) { prompts.push({ type: 'input', name: 'description', message: 'Description (optional):' }); } if (prompts.length > 0) { const answers = await inquirer_1.default.prompt(prompts); name = name || answers.name; code = code || answers.code; description = description || answers.description; } } const spinner = (0, ora_1.default)('Creating project...').start(); try { const response = await client_1.apiClient.createProject({ name, projectCode: code.toUpperCase(), description }); if (response.success) { spinner.succeed(chalk_1.default.green('Project created successfully')); console.log(chalk_1.default.gray(`ID: ${response.data._id}`)); console.log(chalk_1.default.gray(`Code: ${response.data.projectCode}`)); } else { spinner.fail(chalk_1.default.red('Failed to create project: ' + response.error)); } } catch (error) { spinner.fail(chalk_1.default.red('Creation failed: ' + error.message)); } } catch (error) { console.error(chalk_1.default.red('Error:'), error.message); } })) .addCommand(new commander_1.Command('show') .description('Display detailed information about a specific Labnex project.') .argument('<code>', 'Project code of the project to show') .action(async (code) => { try { const spinner = (0, ora_1.default)('Fetching project details...').start(); try { // Get all projects and find by code const response = await client_1.apiClient.getProjects(); const project = response.data.find(p => p.projectCode === code.toUpperCase()); if (!project) { spinner.fail(chalk_1.default.red(`Project not found: ${code}`)); return; } const detailResponse = await client_1.apiClient.getProject(project._id); if (detailResponse.success) { spinner.succeed('Project details retrieved'); displayProjectDetails(detailResponse.data); } else { spinner.fail(chalk_1.default.red('Failed to get project details')); } } catch (error) { spinner.fail(chalk_1.default.red('Failed to fetch project: ' + error.message)); } } catch (error) { console.error(chalk_1.default.red('Error:'), error.message); } })); function displayProjectDetails(project) { console.log(chalk_1.default.cyan(`\nšŸ“ ${project.name} (${project.projectCode})`)); console.log(chalk_1.default.gray('─'.repeat(50))); console.log(`${chalk_1.default.bold('Description:')} ${project.description || 'No description'}`); console.log(`${chalk_1.default.bold('Status:')} ${project.isActive ? chalk_1.default.green('Active') : chalk_1.default.gray('Inactive')}`); console.log(`${chalk_1.default.bold('Owner:')} ${project.owner.name} (${project.owner.email})`); console.log(`${chalk_1.default.bold('Created:')} ${new Date(project.createdAt).toLocaleDateString()}`); console.log(`${chalk_1.default.bold('Updated:')} ${new Date(project.updatedAt).toLocaleDateString()}`); console.log(`\n${chalk_1.default.bold('Statistics:')}`); console.log(` Test Cases: ${chalk_1.default.cyan(project.testCaseCount)}`); console.log(` Tasks: ${chalk_1.default.cyan(project.taskCount)}`); console.log(` Team Members: ${chalk_1.default.cyan(project.members.length)}`); if (project.members.length > 0) { console.log(`\n${chalk_1.default.bold('Team Members:')}`); const membersTable = new cli_table3_1.default({ head: ['Name', 'Email', 'Role'], colWidths: [20, 30, 15] }); project.members.forEach((member) => { membersTable.push([ member.name, member.email, member.role ]); }); console.log(membersTable.toString()); } } //# sourceMappingURL=projects.js.map