@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
JavaScript
;
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