Skip to main content
Glama
test-sales-docs.cjs10.9 kB
/** * Test Script for Sales Documentation Generator * * Generates professional sales-ready documentation for CodeCanyon/ThemeForest * Tests on CodeIgniter example project */ const { exec } = require("child_process"); const util = require("util"); const path = require("path"); const fs = require("fs"); const execAsync = util.promisify(exec); async function testSalesDocumentation() { console.log( "\n╔═══════════════════════════════════════════════════════════╗" ); console.log("║ 📚 SALES DOCUMENTATION GENERATOR TEST 📚 ║"); console.log( "╚═══════════════════════════════════════════════════════════╝\n" ); const projectPath = path.join(__dirname, "test-php-project"); const outputDir = path.join(__dirname, "sales-docs-output"); console.log("📂 Project Path:", projectPath); console.log("📁 Output Directory:", outputDir); console.log("\n⚙️ Test Configuration:"); console.log(" • Product: Advanced User Management API"); console.log(" • Version: 1.0.0"); console.log(" • Author: Your Company"); console.log(" • Price: $49"); console.log(" • Demo: https://demo.example.com\n"); // Clean output directory if (fs.existsSync(outputDir)) { console.log("🧹 Cleaning output directory..."); fs.rmSync(outputDir, { recursive: true, force: true }); } try { // Import the Sales Documentation Generator const { generateSalesDocumentation, exportSalesDocumentation, } = require("./dist/tools/generateSalesDocumentation.js"); const { generateOpenApiSpec } = require("./dist/tools/generateOpenApi.js"); console.log("🔍 Analyzing PHP files...\n"); // Analyze PHP files directly using PHP analyzer const phpFiles = [ "CodeIgniterExample.php", "LaravelRoutesExample.php", "MiddlewareExample.php", ]; const analyzedFiles = []; for (const file of phpFiles) { const filePath = path.join(projectPath, file); console.log(` Analyzing: ${file}`); try { const { stdout } = await execAsync( `php "${path.join( __dirname, "src", "analyzers", "helpers", "php_analyzer_v2.php" )}" "${filePath}"`, { maxBuffer: 10 * 1024 * 1024 } ); const analysis = JSON.parse(stdout); analyzedFiles.push(analysis); } catch (error) { console.error(` ⚠️ Failed to analyze ${file}:`, error.message); } } console.log(`\n✅ Analyzed ${analyzedFiles.length} files\n`); // Generate OpenAPI spec console.log("📝 Generating OpenAPI specification...\n"); const openApiSpec = generateOpenApiSpec(analyzedFiles, { title: "Advanced User Management API", version: "1.0.0", description: "Professional RESTful API for user management with advanced features", serverUrl: "https://demo.example.com/api/v1", }); const apiEndpoints = Object.keys(openApiSpec.paths).length; const securitySchemes = Object.keys( openApiSpec.components?.securitySchemes || {} ).length; console.log("📊 OpenAPI Stats:"); console.log(` • Total Endpoints: ${apiEndpoints}`); console.log(` • Security Schemes: ${securitySchemes}\n`); // Generate Sales Documentation console.log("📚 Generating sales documentation...\n"); const options = { productName: "Advanced User Management API", productVersion: "1.0.0", author: "Your Company", description: "A comprehensive, professional-grade user management system built with modern PHP frameworks. Features robust authentication, role-based access control, and a complete RESTful API. Perfect for integrating user management into your web applications.", price: "$49", demoUrl: "https://demo.example.com", supportEmail: "support@yourcompany.com", features: [ "RESTful API with " + apiEndpoints + " endpoints", "JWT Authentication & Authorization", "Role-based Access Control (RBAC)", "Multi-framework support (CodeIgniter 3/4, Laravel, Symfony)", "OpenAPI 3.0 specification included", "Middleware-based security", "Comprehensive API documentation", "Code examples in PHP, JavaScript, Python", "Easy installation and configuration", "Professional support included", ], requirements: { php: "7.4", framework: "CodeIgniter 4 / Laravel 8+ / Symfony 5+", database: "MySQL 5.7+ or PostgreSQL 10+", extensions: ["pdo", "mbstring", "openssl", "curl", "json", "xml"], }, }; const docs = generateSalesDocumentation( analyzedFiles, openApiSpec, options ); // Export documentation await exportSalesDocumentation(docs, outputDir); // Create combined documentation const combinedMd = `${docs.readme}\n\n---\n\n${docs.installation}\n\n---\n\n${docs.apiReference}\n\n---\n\n${docs.configuration}\n\n---\n\n${docs.examples}\n\n---\n\n${docs.faq}\n\n---\n\n${docs.changelog}`; fs.writeFileSync( path.join(outputDir, "COMPLETE_DOCUMENTATION.md"), combinedMd ); console.log("✅ Sales documentation generated successfully!\n"); console.log( "╔═══════════════════════════════════════════════════════════╗" ); console.log( "║ 📄 FILES GENERATED 📄 ║" ); console.log( "╚═══════════════════════════════════════════════════════════╝\n" ); const files = fs.readdirSync(outputDir); files.forEach((file) => { const stats = fs.statSync(path.join(outputDir, file)); const sizeKB = (stats.size / 1024).toFixed(1); console.log(` ✅ ${file.padEnd(35)} ${sizeKB.padStart(6)} KB`); }); console.log( "\n╔═══════════════════════════════════════════════════════════╗" ); console.log( "║ 📊 DOCUMENTATION STATISTICS 📊 ║" ); console.log( "╚═══════════════════════════════════════════════════════════╝\n" ); console.log(" • API Endpoints:", apiEndpoints); console.log(" • Security Schemes:", securitySchemes); console.log(" • PHP Files Analyzed:", analyzedFiles.length); console.log(" • Documentation Files:", files.length); console.log( " • Frameworks Detected:", [ ...new Set( analyzedFiles.map((f) => f.frameworkInfo?.name).filter(Boolean) ), ].join(", ") ); // Show file sizes const totalSize = files.reduce((sum, file) => { return sum + fs.statSync(path.join(outputDir, file)).size; }, 0); console.log( " • Total Documentation Size:", (totalSize / 1024).toFixed(1), "KB\n" ); console.log( "╔═══════════════════════════════════════════════════════════╗" ); console.log( "║ 📄 CONTENT PREVIEW 📄 ║" ); console.log( "╚═══════════════════════════════════════════════════════════╝\n" ); // Preview README.md console.log("📖 README.md (first 20 lines):\n"); const readmeLines = docs.readme.split("\n").slice(0, 20); readmeLines.forEach((line) => console.log(" " + line)); console.log(" ... (truncated)\n"); // Preview API_REFERENCE.md console.log("📖 API_REFERENCE.md (first 15 lines):\n"); const apiRefLines = docs.apiReference.split("\n").slice(0, 15); apiRefLines.forEach((line) => console.log(" " + line)); console.log(" ... (truncated)\n"); console.log( "╔═══════════════════════════════════════════════════════════╗" ); console.log("║ 💡 NEXT STEPS FOR CODECANYON 💡 ║"); console.log( "╚═══════════════════════════════════════════════════════════╝\n" ); console.log("1️⃣ Review the generated documentation:"); console.log(` cd "${outputDir}"\n`); console.log("2️⃣ Generate PDF for buyers:"); console.log( " pandoc COMPLETE_DOCUMENTATION.md -o Documentation.pdf --toc" ); console.log(" (requires pandoc: https://pandoc.org/installing.html)\n"); console.log("3️⃣ Customize branding:"); console.log(" • Update README.md with your logo"); console.log(" • Add screenshots to documentation"); console.log(" • Customize color scheme\n"); console.log("4️⃣ Package for CodeCanyon:"); console.log(" • Include all PHP source files"); console.log(" • Add Documentation.pdf"); console.log(" • Add LICENSE.txt"); console.log(" • Create ZIP file\n"); console.log("5️⃣ Upload to marketplace:"); console.log(" • CodeCanyon: https://codecanyon.net/"); console.log(" • ThemeForest: https://themeforest.net/\n"); console.log( "╔═══════════════════════════════════════════════════════════╗" ); console.log( "║ ✅ TEST COMPLETED SUCCESSFULLY ✅ ║" ); console.log( "╚═══════════════════════════════════════════════════════════╝\n" ); } catch (error) { console.error("\n❌ Error:", error.message); console.error("\nStack trace:", error.stack); process.exit(1); } } // Run test testSalesDocumentation();

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LiL-Loco/documentation-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server