UNPKG

@paulohenriquevn/m2js

Version:

Transform TypeScript/JavaScript code into LLM-friendly Markdown summaries + Smart Dead Code Detection + Graph-Deep Diff Analysis. Extract exported functions, classes, and JSDoc comments for better AI context with 60%+ token reduction. Intelligent dead cod

124 lines 4.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DiagramCoordinator = void 0; exports.generateDiagram = generateDiagram; const mermaid_enhancer_1 = require("./mermaid-enhancer"); const class_diagram_1 = require("./class-diagram"); /** * Main coordinator for diagram generation * Routes requests to appropriate diagram generators */ class DiagramCoordinator { constructor() { this.mermaidEnhancer = new mermaid_enhancer_1.MermaidEnhancer(); this.classGenerator = new class_diagram_1.ClassDiagramGenerator(); } /** * Generate diagram based on type and options */ generateDiagram(data, options) { switch (options.type) { case 'dependency': return this.generateDependencyDiagram(data.dependencyGraph, options); case 'class': return this.generateClassDiagram(data, options); case 'sequence': throw new Error('Sequence diagrams not yet implemented'); case 'component': throw new Error('Component diagrams not yet implemented'); default: throw new Error(`Unsupported diagram type: ${options.type}`); } } /** * Generate dependency diagram */ generateDependencyDiagram(graph, options) { return this.mermaidEnhancer.generateEnhancedDependencyDiagram(graph, options); } /** * Generate class diagram */ generateClassDiagram(data, options) { if (data.parsedFiles && data.parsedFiles.length > 1) { return this.classGenerator.generateMultiFileClassDiagram(data.parsedFiles, options); } else if (data.parsedFile) { return this.classGenerator.generateClassDiagram(data.parsedFile, options); } else { throw new Error('No parsed file data provided for class diagram'); } } /** * Get supported diagram types */ getSupportedTypes() { return ['dependency', 'class']; // Will expand as we implement more } /** * Validate diagram options */ validateOptions(options) { const errors = []; if (!this.getSupportedTypes().includes(options.type)) { errors.push(`Unsupported diagram type: ${options.type}`); } if (!['neutral', 'dark', 'forest', 'base'].includes(options.theme)) { errors.push(`Unsupported theme: ${options.theme}`); } if (!['markdown', 'svg', 'png'].includes(options.format)) { errors.push(`Unsupported format: ${options.format}`); } return { valid: errors.length === 0, errors, }; } /** * Generate multiple diagrams at once */ generateMultipleDiagrams(data, types, baseOptions = {}) { const results = {}; types.forEach(type => { try { const options = { type, theme: 'neutral', format: 'markdown', includeExternal: false, interactive: false, ...baseOptions, }; results[type] = this.generateDiagram(data, options); } catch (error) { console.warn(`Failed to generate ${type} diagram:`, error); } }); return results; } /** * Static factory method */ static create() { return new DiagramCoordinator(); } } exports.DiagramCoordinator = DiagramCoordinator; /** * Convenience function for quick diagram generation */ function generateDiagram(type, data, options = {}) { const coordinator = DiagramCoordinator.create(); const fullOptions = { type, theme: 'neutral', format: 'markdown', includeExternal: false, interactive: false, ...options, }; return coordinator.generateDiagram(data, fullOptions).content; } //# sourceMappingURL=diagram-coordinator.js.map