UNPKG

@vooodooo/magic

Version:

Vooodooo - AI orchestration platform

198 lines (197 loc) 7.95 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DocSystem = void 0; exports.createDocSystem = createDocSystem; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); /** * System for managing AI and human documentation */ class DocSystem { constructor(options) { this.aiDir = options?.aiDir || path_1.default.resolve(process.cwd(), 'docs/ai'); this.humanDir = options?.humanDir || path_1.default.resolve(process.cwd(), 'docs/human'); } /** * Convert AI documentation to human-readable format */ async convertAiToHuman(options) { try { const { input, output, recursive = false } = options; // Check if input exists if (!fs_1.default.existsSync(input)) { throw new Error(`Input not found: ${input}`); } // Process file or directory const stats = fs_1.default.statSync(input); if (stats.isFile()) { await this.convertAiFileToHuman(input, output); } else if (stats.isDirectory()) { await this.convertAiDirToHuman(input, output, recursive); } else { throw new Error(`Unsupported input type: ${input}`); } } catch (error) { console.error('Error converting AI to human documentation:', error); throw error; } } /** * Convert human documentation to AI-optimized format */ async convertHumanToAi(options) { try { const { input, output, recursive = false } = options; // Check if input exists if (!fs_1.default.existsSync(input)) { throw new Error(`Input not found: ${input}`); } // Process file or directory const stats = fs_1.default.statSync(input); if (stats.isFile()) { await this.convertHumanFileToAi(input, output); } else if (stats.isDirectory()) { await this.convertHumanDirToAi(input, output, recursive); } else { throw new Error(`Unsupported input type: ${input}`); } } catch (error) { console.error('Error converting human to AI documentation:', error); throw error; } } /** * Convert a single AI documentation file to human-readable format */ async convertAiFileToHuman(inputFile, outputFile) { try { // Read input file const content = fs_1.default.readFileSync(inputFile, 'utf8'); // Simple conversion: extract content after front matter let humanContent = content; const frontMatterMatch = content.match(/^---\n([\s\S]*?)\n---\n/); if (frontMatterMatch) { humanContent = content.replace(frontMatterMatch[0], ''); } // Ensure output directory exists const outputDir = path_1.default.dirname(outputFile); if (!fs_1.default.existsSync(outputDir)) { fs_1.default.mkdirSync(outputDir, { recursive: true }); } // Write output file fs_1.default.writeFileSync(outputFile, humanContent, 'utf8'); console.log(`Converted AI to human: ${inputFile} -> ${outputFile}`); } catch (error) { console.error(`Error converting AI file to human: ${inputFile}`, error); throw error; } } /** * Convert a directory of AI documentation to human-readable format */ async convertAiDirToHuman(inputDir, outputDir, recursive) { try { // Create output directory if it doesn't exist if (!fs_1.default.existsSync(outputDir)) { fs_1.default.mkdirSync(outputDir, { recursive: true }); } // Get all files in the directory const files = fs_1.default.readdirSync(inputDir, { withFileTypes: true }); // Process each file for (const file of files) { const inputPath = path_1.default.join(inputDir, file.name); const outputPath = path_1.default.join(outputDir, file.name); if (file.isFile() && (file.name.endsWith('.md') || file.name.endsWith('.mdx'))) { // Convert MD/MDX files await this.convertAiFileToHuman(inputPath, outputPath); } else if (file.isDirectory() && recursive) { // Recursively process subdirectories await this.convertAiDirToHuman(inputPath, outputPath, recursive); } } } catch (error) { console.error(`Error converting AI directory to human: ${inputDir}`, error); throw error; } } /** * Convert a single human documentation file to AI-optimized format */ async convertHumanFileToAi(inputFile, outputFile) { try { // Read input file const content = fs_1.default.readFileSync(inputFile, 'utf8'); // Simple conversion: add basic front matter const fileName = path_1.default.basename(inputFile, path_1.default.extname(inputFile)); const title = fileName.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase()); let aiContent = `--- title: "${title}" description: "AI-optimized documentation for ${title}" createdAt: "${new Date().toISOString()}" --- ${content}`; // Ensure output directory exists const outputDir = path_1.default.dirname(outputFile); if (!fs_1.default.existsSync(outputDir)) { fs_1.default.mkdirSync(outputDir, { recursive: true }); } // Write output file fs_1.default.writeFileSync(outputFile, aiContent, 'utf8'); console.log(`Converted human to AI: ${inputFile} -> ${outputFile}`); } catch (error) { console.error(`Error converting human file to AI: ${inputFile}`, error); throw error; } } /** * Convert a directory of human documentation to AI-optimized format */ async convertHumanDirToAi(inputDir, outputDir, recursive) { try { // Create output directory if it doesn't exist if (!fs_1.default.existsSync(outputDir)) { fs_1.default.mkdirSync(outputDir, { recursive: true }); } // Get all files in the directory const files = fs_1.default.readdirSync(inputDir, { withFileTypes: true }); // Process each file for (const file of files) { const inputPath = path_1.default.join(inputDir, file.name); const outputPath = path_1.default.join(outputDir, file.name); if (file.isFile() && (file.name.endsWith('.md') || file.name.endsWith('.mdx'))) { // Convert MD/MDX files await this.convertHumanFileToAi(inputPath, outputPath); } else if (file.isDirectory() && recursive) { // Recursively process subdirectories await this.convertHumanDirToAi(inputPath, outputPath, recursive); } } } catch (error) { console.error(`Error converting human directory to AI: ${inputDir}`, error); throw error; } } } exports.DocSystem = DocSystem; /** * Create a documentation system */ function createDocSystem(options) { return new DocSystem(options); } //# sourceMappingURL=doc-system.js.map