UNPKG

@diagramers/cli

Version:

Diagramers CLI - Command-line tools for managing Diagramers projects

240 lines (232 loc) • 11.3 kB
#!/usr/bin/env node "use strict"; 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 init_1 = require("./commands/init"); const update_1 = require("./commands/update"); const extend_1 = require("./commands/extend"); const api_1 = require("./commands/api"); const admin_1 = require("./commands/admin"); const deploy_1 = require("./commands/deploy"); const chalk_1 = __importDefault(require("chalk")); const fs_1 = require("fs"); const path_1 = require("path"); const child_process_1 = require("child_process"); const program = new commander_1.Command(); // Dynamically read CLI version const cliPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'package.json'), 'utf8')); // Function to get API version from current project or global installation function getApiVersion() { // Check if we're in a diagramers API project directory (development scenario) try { const projectPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'package.json'), 'utf8')); if (projectPkg.name === '@diagramers/api') { return `${projectPkg.version} (development)`; } } catch { } // Try to read from current project's node_modules first try { const projectApiPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'node_modules', '@diagramers', 'api', 'package.json'), 'utf8')); return `${projectApiPkg.version} (project)`; } catch { } // Try to read from global CLI installation try { const globalApiPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'node_modules', '@diagramers', 'api', 'package.json'), 'utf8')); return `${globalApiPkg.version} (global)`; } catch { } // Check if we're in a project created from diagramers template try { const projectPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'package.json'), 'utf8')); // Check if it's a diagramers project by structure and package.json content const hasApiStructure = (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'src', 'modules')) && (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'src', 'core')) && (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'src', 'shared')); if (hasApiStructure || (projectPkg.name && projectPkg.name.includes('diagramers')) || (projectPkg.description && projectPkg.description.includes('diagramers')) || (projectPkg.description && projectPkg.description.includes('API project'))) { return `${projectPkg.version} (project template)`; } } catch { } // Try to check if it's available via npm (last resort) try { const npmVersion = (0, child_process_1.execSync)('npm view @diagramers/api version', { encoding: 'utf8', timeout: 5000 }).trim(); return `${npmVersion} (available on npm)`; } catch { } return 'not installed'; } // Function to get Admin version from current project or global installation function getAdminVersion() { // Check if we're in a diagramers Admin project directory (development scenario) try { const projectPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'package.json'), 'utf8')); if (projectPkg.name === '@diagramers/admin') { return `${projectPkg.version} (development)`; } } catch { } // Try to read from current project's node_modules first try { const projectAdminPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'node_modules', '@diagramers', 'admin', 'package.json'), 'utf8')); return `${projectAdminPkg.version} (project)`; } catch { } // Try to read from global CLI installation try { const globalAdminPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'node_modules', '@diagramers', 'admin', 'package.json'), 'utf8')); return `${globalAdminPkg.version} (global)`; } catch { } // Check if we're in a project created from diagramers admin template try { const projectPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'package.json'), 'utf8')); // Check if it's a diagramers admin project by structure and package.json content const hasAdminStructure = (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'src', 'components')) && (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'src', 'features')) && ((0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'src', 'hooks')) || (0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'src', 'services'))); if (hasAdminStructure || (projectPkg.name && projectPkg.name.includes('admin')) || (projectPkg.description && projectPkg.description.includes('admin')) || (projectPkg.description && projectPkg.description.includes('admin dashboard'))) { return `${projectPkg.version} (project template)`; } } catch { } // Try to check if it's available via npm (last resort) try { const npmVersion = (0, child_process_1.execSync)('npm view @diagramers/admin version', { encoding: 'utf8', timeout: 5000 }).trim(); return `${npmVersion} (available on npm)`; } catch { } return 'not installed'; } program .name('diagramers') .description('CLI tool for managing diagramers projects, modules, tables, and endpoints') .version(cliPkg.version, '-V, --version', 'output the current version'); // Custom version command for full version info program .command('version') .description('Show CLI and sub-library versions') .action(() => { console.log(`@diagramers/cli: ${cliPkg.version}`); console.log(`@diagramers/api: ${getApiVersion()}`); console.log(`@diagramers/admin: ${getAdminVersion()}`); // Additional context about project status try { const projectPkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'package.json'), 'utf8')); if (projectPkg.name && (projectPkg.name.includes('diagramers') || (projectPkg.description && projectPkg.description.includes('diagramers')))) { console.log(`\nšŸ“ Current project: ${projectPkg.name || 'unnamed'}`); console.log(`šŸ“‹ Project version: ${projectPkg.version || 'unknown'}`); } } catch { } }); // Add commands (0, init_1.initCommand)(program); (0, update_1.updateCommand)(program); (0, extend_1.extendCommand)(program); (0, api_1.apiCommand)(program); (0, admin_1.adminCommand)(program); // Add deploy command const deployCommand = new deploy_1.DeployCommand(); program.addCommand(deployCommand.getCommand()); // Add versions command program .command('versions') .description('List available versions of @diagramers/api') .option('-a, --all', 'Show all versions (default: show last 10)') .action(async (options) => { try { console.log(chalk_1.default.blue('šŸ“¦ Fetching available versions of @diagramers/api...')); const versionsOutput = (0, child_process_1.execSync)('npm view @diagramers/api versions --json', { encoding: 'utf8', timeout: 10000 }); const versions = JSON.parse(versionsOutput); console.log(chalk_1.default.green('\nāœ… Available versions:')); if (Array.isArray(versions)) { const displayVersions = options.all ? versions : versions.slice(-10); displayVersions.forEach((version) => { console.log(chalk_1.default.yellow(` ${version}`)); }); if (!options.all && versions.length > 10) { console.log(chalk_1.default.gray(`\n ... and ${versions.length - 10} more versions`)); console.log(chalk_1.default.gray(' Use --all to see all versions')); } } else { console.log(chalk_1.default.yellow(` ${versions}`)); } // Show current version try { const currentVersion = (0, child_process_1.execSync)('npm view @diagramers/api version', { encoding: 'utf8', timeout: 5000 }).trim(); console.log(chalk_1.default.green(`\nšŸ“Œ Latest version: ${currentVersion}`)); } catch (error) { // Ignore if we can't get current version } console.log(chalk_1.default.blue('\nšŸ“ Usage examples:')); console.log(chalk_1.default.gray(' diagramers init api my-project --version 1.1.17')); console.log(chalk_1.default.gray(' diagramers update --version 1.1.17')); } catch (error) { console.error(chalk_1.default.red(`āŒ Failed to fetch versions: ${error.message}`)); console.log(chalk_1.default.yellow('šŸ’” Make sure you have internet connection and npm is installed')); // Fallback: try to get just the latest version try { console.log(chalk_1.default.blue('\nšŸ”„ Trying to get latest version...')); const latestVersion = (0, child_process_1.execSync)('npm view @diagramers/api version', { encoding: 'utf8', timeout: 5000 }).trim(); console.log(chalk_1.default.green(`āœ… Latest version: ${latestVersion}`)); } catch (fallbackError) { console.log(chalk_1.default.red('āŒ Could not fetch any version information')); } process.exit(1); } }); program.addHelpText('after', ` ${chalk_1.default.bold('Examples:')} ${chalk_1.default.gray('# Initialize new API project')} ${chalk_1.default.blue('diagramers init api my-new-api')} ${chalk_1.default.gray('# Initialize new Admin project')} ${chalk_1.default.blue('diagramers init admin my-admin-app')} ${chalk_1.default.gray('# Initialize with specific version')} ${chalk_1.default.blue('diagramers init api my-new-api --version 1.1.17')} ${chalk_1.default.blue('diagramers init admin my-admin-app --version 1.0.0')} ${chalk_1.default.gray('# Update project to latest version')} ${chalk_1.default.blue('diagramers update')} ${chalk_1.default.gray('# Update to specific version')} ${chalk_1.default.blue('diagramers update --version 1.1.17')} ${chalk_1.default.gray('# Generate new module')} ${chalk_1.default.blue('diagramers extend --module products --crud')} ${chalk_1.default.gray('# Add endpoint to existing module')} ${chalk_1.default.blue('diagramers extend --endpoint users:search --method GET')} ${chalk_1.default.gray('# List available versions')} ${chalk_1.default.blue('diagramers versions')} ${chalk_1.default.bold('Version Information:')} CLI: ${chalk_1.default.green(cliPkg.version)} API: ${chalk_1.default.green(getApiVersion())} Admin: ${chalk_1.default.green(getAdminVersion())} `); // If no command is provided, show help if (!process.argv.slice(2).length) { program.outputHelp(); } program.parse(process.argv); //# sourceMappingURL=index.js.map