UNPKG

@re-shell/cli

Version:

Full-stack development platform uniting microservices and microfrontends. Build complete applications with .NET (ASP.NET Core Web API, Minimal API), Java (Spring Boot, Quarkus, Micronaut, Vert.x), Rust (Actix-Web, Warp, Rocket, Axum), Python (FastAPI, Dja

398 lines (397 loc) • 18.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.searchMarketplace = searchMarketplace; exports.showPluginDetails = showPluginDetails; exports.installMarketplacePlugin = installMarketplacePlugin; exports.showPluginReviews = showPluginReviews; exports.showFeaturedPlugins = showFeaturedPlugins; exports.showPopularPlugins = showPopularPlugins; exports.showCategories = showCategories; exports.clearMarketplaceCache = clearMarketplaceCache; exports.showMarketplaceStats = showMarketplaceStats; const chalk_1 = __importDefault(require("chalk")); const spinner_1 = require("../utils/spinner"); const error_handler_1 = require("../utils/error-handler"); const plugin_marketplace_1 = require("../utils/plugin-marketplace"); // Search plugins in marketplace async function searchMarketplace(query, options = {}) { const { verbose = false, json = false, limit = 10, category, featured, verified, free, sort = 'relevance', order = 'desc' } = options; try { const marketplace = (0, plugin_marketplace_1.createMarketplace)(); const filters = { query, category, featured, verified, free, sortBy: sort, sortOrder: order, limit }; const spinner = (0, spinner_1.createSpinner)('Searching marketplace...'); spinner.start(); const result = await marketplace.searchPlugins(filters); spinner.stop(); if (json) { console.log(JSON.stringify(result, null, 2)); return; } console.log(chalk_1.default.cyan(`\nšŸ” Marketplace Search Results\n`)); if (result.plugins.length === 0) { console.log(chalk_1.default.yellow('No plugins found matching your criteria.')); return; } console.log(chalk_1.default.gray(`Found ${result.total} plugin(s), showing ${result.plugins.length}`)); console.log(''); result.plugins.forEach(plugin => { displayPluginSummary(plugin, verbose); console.log(''); }); if (result.pages > 1) { console.log(chalk_1.default.gray(`Page ${result.page} of ${result.pages}`)); } } catch (error) { throw new error_handler_1.ValidationError(`Marketplace search failed: ${error instanceof Error ? error.message : String(error)}`); } } // Show plugin details async function showPluginDetails(pluginId, options = {}) { const { verbose = false, json = false } = options; if (!(0, plugin_marketplace_1.isValidPluginId)(pluginId)) { throw new error_handler_1.ValidationError(`Invalid plugin ID: ${pluginId}`); } try { const marketplace = (0, plugin_marketplace_1.createMarketplace)(); const spinner = (0, spinner_1.createSpinner)(`Fetching plugin details for ${pluginId}...`); spinner.start(); const plugin = await marketplace.getPlugin(pluginId); spinner.stop(); if (!plugin) { console.log(chalk_1.default.red(`Plugin '${pluginId}' not found in marketplace.`)); return; } if (json) { console.log(JSON.stringify(plugin, null, 2)); return; } displayPluginDetails(plugin, verbose); } catch (error) { throw new error_handler_1.ValidationError(`Failed to fetch plugin details: ${error instanceof Error ? error.message : String(error)}`); } } // Install plugin from marketplace async function installMarketplacePlugin(pluginId, version, options = {}) { const { verbose = false, global = false, force = false } = options; if (!(0, plugin_marketplace_1.isValidPluginId)(pluginId)) { throw new error_handler_1.ValidationError(`Invalid plugin ID: ${pluginId}`); } try { const marketplace = (0, plugin_marketplace_1.createMarketplace)(); const spinner = (0, spinner_1.createSpinner)(`Installing ${pluginId}${version ? `@${version}` : ''}...`); spinner.start(); const result = await marketplace.installPlugin(pluginId, version, { global, force }); spinner.stop(); if (result.success) { console.log(chalk_1.default.green(`āœ“ Successfully installed ${pluginId}@${result.installedVersion}`)); console.log(` Location: ${result.installPath}`); if (result.dependencies.length > 0) { console.log(` Dependencies: ${result.dependencies.join(', ')}`); } if (result.warnings.length > 0) { console.log(chalk_1.default.yellow(' Warnings:')); result.warnings.forEach(warning => { console.log(` ${chalk_1.default.yellow('⚠')} ${warning}`); }); } console.log(chalk_1.default.gray(` Installation completed in ${result.duration}ms`)); } else { console.log(chalk_1.default.red(`āœ— Failed to install ${pluginId}`)); if (result.errors.length > 0) { console.log(chalk_1.default.red(' Errors:')); result.errors.forEach(error => { console.log(` ${chalk_1.default.red('āœ—')} ${error}`); }); } } if (verbose && result.warnings.length > 0) { console.log(chalk_1.default.yellow('\nWarnings:')); result.warnings.forEach(warning => { console.log(` ${chalk_1.default.yellow('⚠')} ${warning}`); }); } } catch (error) { throw new error_handler_1.ValidationError(`Plugin installation failed: ${error instanceof Error ? error.message : String(error)}`); } } // Get plugin reviews async function showPluginReviews(pluginId, options = {}) { const { verbose = false, json = false, limit = 10 } = options; if (!(0, plugin_marketplace_1.isValidPluginId)(pluginId)) { throw new error_handler_1.ValidationError(`Invalid plugin ID: ${pluginId}`); } try { const marketplace = (0, plugin_marketplace_1.createMarketplace)(); const spinner = (0, spinner_1.createSpinner)(`Fetching reviews for ${pluginId}...`); spinner.start(); const reviews = await marketplace.getPluginReviews(pluginId, limit); spinner.stop(); if (json) { console.log(JSON.stringify(reviews, null, 2)); return; } console.log(chalk_1.default.cyan(`\n⭐ Reviews for ${pluginId}\n`)); if (reviews.length === 0) { console.log(chalk_1.default.yellow('No reviews found for this plugin.')); return; } reviews.forEach(review => { const stars = 'ā˜…'.repeat(review.rating) + 'ā˜†'.repeat(5 - review.rating); const verifiedBadge = review.verified ? chalk_1.default.green('[Verified]') : ''; console.log(`${chalk_1.default.yellow(stars)} ${chalk_1.default.white(review.title)} ${verifiedBadge}`); console.log(`By ${chalk_1.default.blue(review.username)} on ${new Date(review.createdAt).toLocaleDateString()}`); console.log(`${review.content}`); if (verbose && (review.pros?.length || review.cons?.length)) { if (review.pros?.length) { console.log(chalk_1.default.green(' Pros:')); review.pros.forEach(pro => console.log(` + ${pro}`)); } if (review.cons?.length) { console.log(chalk_1.default.red(' Cons:')); review.cons.forEach(con => console.log(` - ${con}`)); } } if (review.helpful > 0) { console.log(chalk_1.default.gray(` ${review.helpful} people found this helpful`)); } console.log(''); }); } catch (error) { throw new error_handler_1.ValidationError(`Failed to fetch reviews: ${error instanceof Error ? error.message : String(error)}`); } } // Get featured plugins async function showFeaturedPlugins(options = {}) { const { verbose = false, json = false, limit = 6 } = options; try { const marketplace = (0, plugin_marketplace_1.createMarketplace)(); const spinner = (0, spinner_1.createSpinner)('Fetching featured plugins...'); spinner.start(); const plugins = await marketplace.getFeaturedPlugins(limit); spinner.stop(); if (json) { console.log(JSON.stringify(plugins, null, 2)); return; } console.log(chalk_1.default.cyan('\n🌟 Featured Plugins\n')); if (plugins.length === 0) { console.log(chalk_1.default.yellow('No featured plugins available.')); return; } plugins.forEach(plugin => { displayPluginSummary(plugin, verbose); console.log(''); }); } catch (error) { throw new error_handler_1.ValidationError(`Failed to fetch featured plugins: ${error instanceof Error ? error.message : String(error)}`); } } // Get popular plugins async function showPopularPlugins(category, options = {}) { const { verbose = false, json = false, limit = 10 } = options; try { const marketplace = (0, plugin_marketplace_1.createMarketplace)(); const categoryText = category ? ` in ${category}` : ''; const spinner = (0, spinner_1.createSpinner)(`Fetching popular plugins${categoryText}...`); spinner.start(); const plugins = await marketplace.getPopularPlugins(category, limit); spinner.stop(); if (json) { console.log(JSON.stringify(plugins, null, 2)); return; } console.log(chalk_1.default.cyan(`\nšŸ”„ Popular Plugins${categoryText}\n`)); if (plugins.length === 0) { console.log(chalk_1.default.yellow('No popular plugins found.')); return; } plugins.forEach((plugin, index) => { console.log(`${chalk_1.default.yellow((index + 1).toString().padStart(2))}. ${chalk_1.default.white(plugin.name)}`); console.log(` ${plugin.description}`); console.log(` ${chalk_1.default.gray(`${(0, plugin_marketplace_1.formatDownloadCount)(plugin.downloads)} downloads • ⭐ ${plugin.rating}/5`)}`); if (verbose) { console.log(` ${chalk_1.default.blue(plugin.author)} • ${chalk_1.default.gray(plugin.category)} • ${plugin.license}`); } console.log(''); }); } catch (error) { throw new error_handler_1.ValidationError(`Failed to fetch popular plugins: ${error instanceof Error ? error.message : String(error)}`); } } // Get plugin categories async function showCategories(options = {}) { const { verbose = false, json = false } = options; try { const marketplace = (0, plugin_marketplace_1.createMarketplace)(); const spinner = (0, spinner_1.createSpinner)('Fetching plugin categories...'); spinner.start(); const categories = await marketplace.getCategories(); spinner.stop(); if (json) { console.log(JSON.stringify(categories, null, 2)); return; } console.log(chalk_1.default.cyan('\nšŸ“‚ Plugin Categories\n')); categories.forEach(category => { console.log(`${chalk_1.default.yellow(category.name)} (${category.count})`); if (verbose) { console.log(` ${chalk_1.default.gray(category.description)}`); } console.log(''); }); console.log(chalk_1.default.gray(`Total: ${categories.reduce((sum, c) => sum + c.count, 0)} plugins across ${categories.length} categories`)); } catch (error) { throw new error_handler_1.ValidationError(`Failed to fetch categories: ${error instanceof Error ? error.message : String(error)}`); } } // Clear marketplace cache async function clearMarketplaceCache() { try { const marketplace = (0, plugin_marketplace_1.createMarketplace)(); marketplace.clearCache(); console.log(chalk_1.default.green('āœ“ Marketplace cache cleared')); } catch (error) { throw new error_handler_1.ValidationError(`Failed to clear cache: ${error instanceof Error ? error.message : String(error)}`); } } // Get marketplace statistics async function showMarketplaceStats() { try { const marketplace = (0, plugin_marketplace_1.createMarketplace)(); const stats = marketplace.getStats(); console.log(chalk_1.default.cyan('\nšŸ“Š Marketplace Statistics\n')); console.log(chalk_1.default.yellow('Cache:')); console.log(` Cached items: ${stats.cacheSize}`); console.log(` Cache timeout: ${Math.round(stats.config.cacheTimeout / 1000)}s`); console.log(chalk_1.default.yellow('\nDownloads:')); console.log(` Active downloads: ${stats.activeDownloads}`); console.log(` Download timeout: ${Math.round(stats.config.downloadTimeout / 1000)}s`); console.log(chalk_1.default.yellow('\nSecurity:')); console.log(` Signature verification: ${stats.config.verifySignatures ? chalk_1.default.green('enabled') : chalk_1.default.red('disabled')}`); } catch (error) { throw new error_handler_1.ValidationError(`Failed to get marketplace stats: ${error instanceof Error ? error.message : String(error)}`); } } // Display plugin summary function displayPluginSummary(plugin, verbose) { const badges = []; if (plugin.featured) badges.push(chalk_1.default.yellow('FEATURED')); if (plugin.verified) badges.push(chalk_1.default.green('VERIFIED')); if (plugin.pricing.type === 'free') badges.push(chalk_1.default.blue('FREE')); const badgeText = badges.length > 0 ? ` ${badges.join(' ')}` : ''; console.log(`${chalk_1.default.white(plugin.name)}${badgeText}`); console.log(`${plugin.description}`); console.log(`${chalk_1.default.blue(plugin.author)} • v${plugin.version} • ${chalk_1.default.gray(plugin.category)}`); console.log(`${chalk_1.default.gray(`${(0, plugin_marketplace_1.formatDownloadCount)(plugin.downloads)} downloads • ⭐ ${plugin.rating}/5 (${plugin.reviewCount} reviews)`)}`); if (verbose) { console.log(`Keywords: ${plugin.keywords.join(', ')}`); console.log(`Size: ${(0, plugin_marketplace_1.formatFileSize)(plugin.size)} • License: ${plugin.license}`); console.log(`Updated: ${new Date(plugin.updatedAt).toLocaleDateString()}`); } } // Display detailed plugin information function displayPluginDetails(plugin, verbose) { console.log(chalk_1.default.cyan(`\nšŸ“¦ ${plugin.name}\n`)); // Basic info console.log(`${plugin.description}\n`); // Badges const badges = []; if (plugin.featured) badges.push(chalk_1.default.yellow('FEATURED')); if (plugin.verified) badges.push(chalk_1.default.green('VERIFIED')); if (plugin.pricing.type === 'free') badges.push(chalk_1.default.blue('FREE')); if (badges.length > 0) { console.log(`${badges.join(' ')}\n`); } // Metadata console.log(chalk_1.default.yellow('Details:')); console.log(` Author: ${chalk_1.default.blue(plugin.author)}`); console.log(` Version: ${plugin.version} (latest: ${plugin.latestVersion})`); console.log(` Category: ${plugin.category}`); console.log(` License: ${plugin.license}`); console.log(` Size: ${(0, plugin_marketplace_1.formatFileSize)(plugin.size)}`); // Stats console.log(chalk_1.default.yellow('\nStatistics:')); console.log(` Downloads: ${(0, plugin_marketplace_1.formatDownloadCount)(plugin.downloads)}`); console.log(` Rating: ⭐ ${plugin.rating}/5.0 (${plugin.reviewCount} reviews)`); console.log(` Weekly: ${(0, plugin_marketplace_1.formatDownloadCount)(plugin.metrics.weeklyDownloads)}`); console.log(` Monthly: ${(0, plugin_marketplace_1.formatDownloadCount)(plugin.metrics.monthlyDownloads)}`); // Keywords if (plugin.keywords.length > 0) { console.log(chalk_1.default.yellow('\nKeywords:')); console.log(` ${plugin.keywords.join(', ')}`); } // Compatibility console.log(chalk_1.default.yellow('\nCompatibility:')); console.log(` CLI Version: ${plugin.compatibility.cliVersion}`); console.log(` Node.js: ${plugin.compatibility.nodeVersion}`); console.log(` Platforms: ${plugin.compatibility.platforms.join(', ')}`); // Dependencies if (Object.keys(plugin.dependencies).length > 0) { console.log(chalk_1.default.yellow('\nDependencies:')); Object.entries(plugin.dependencies).forEach(([name, version]) => { console.log(` ${name}: ${version}`); }); } // Support console.log(chalk_1.default.yellow('\nSupport:')); if (plugin.support.documentation) { console.log(` Documentation: ${plugin.support.documentation}`); } if (plugin.support.issues) { console.log(` Issues: ${plugin.support.issues}`); } if (plugin.support.community) { console.log(` Community: ${plugin.support.community}`); } console.log(` Languages: ${plugin.support.languages.join(', ')}`); // Dates console.log(chalk_1.default.yellow('\nTimestamps:')); console.log(` Created: ${new Date(plugin.createdAt).toLocaleDateString()}`); console.log(` Updated: ${new Date(plugin.updatedAt).toLocaleDateString()}`); if (verbose) { // Repository metrics console.log(chalk_1.default.yellow('\nRepository:')); console.log(` Stars: ${plugin.metrics.stars}`); console.log(` Forks: ${plugin.metrics.forks}`); console.log(` Issues: ${plugin.metrics.issues}`); console.log(` Contributors: ${plugin.metrics.contributors}`); console.log(` Last Commit: ${new Date(plugin.metrics.lastCommit).toLocaleDateString()}`); // Pricing console.log(chalk_1.default.yellow('\nPricing:')); console.log(` Type: ${plugin.pricing.type}`); if (plugin.pricing.price) { console.log(` Price: ${plugin.pricing.currency}${plugin.pricing.price} (${plugin.pricing.billing})`); } if (plugin.pricing.trialDays) { console.log(` Trial: ${plugin.pricing.trialDays} days`); } } }