@diagramers/cli
Version:
Diagramers CLI - Command-line tools for managing Diagramers projects
240 lines (232 loc) ⢠11.3 kB
JavaScript
;
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