@vooodooo/magic
Version:
Vooodooo - AI orchestration platform
198 lines (197 loc) • 7.95 kB
JavaScript
;
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