UNPKG

@notjustcoders/ioc-arise

Version:

Arise type-safe IoC containers from your code. Zero overhead, zero coupling.

85 lines 3.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.visualizeCommand = void 0; const commander_1 = require("commander"); const path_1 = require("path"); const fs_1 = require("fs"); const analyser_1 = require("../analyser"); const generator_1 = require("../generator"); const console_analysis_renderer_1 = require("../renderer/console-analysis-renderer"); const configManager_1 = require("../utils/configManager"); const configValidator_1 = require("../utils/configValidator"); const index_js_1 = require("../errors/index.js"); exports.visualizeCommand = new commander_1.Command('visualize') .description('Visualize project dependencies and analysis results') .option('-s, --source <dir>', 'Source directory to scan', 'src') .option('-i, --interface <pattern>', 'Interface name pattern to match (regex)') .option('-e, --exclude <patterns...>', 'Exclude patterns for files') .option('-r, --renderer <type>', 'Renderer type (console)', 'console') .action(async (options) => { try { // Initialize config manager with the source directory const initialSourceDir = (0, path_1.resolve)(options.source); const configManager = new configManager_1.ConfigManager(initialSourceDir); // Validate config if present if (configManager.hasConfigFile()) { const config = configManager.getConfig(); if (!configValidator_1.ConfigValidator.validateAndLog(config, configManager.getConfigPath())) { process.exit(1); } } // Merge CLI options with config file const mergedOptions = configManager.mergeWithCliOptions(options); const sourceDir = (0, path_1.resolve)(mergedOptions.source); if (!(0, fs_1.existsSync)(sourceDir)) { const error = index_js_1.ErrorFactory.sourceDirectoryNotFound(sourceDir); console.error(`❌ ${index_js_1.ErrorUtils.formatForConsole(error)}`); process.exit(1); } if (configManager.hasConfigFile()) { console.log(`📋 Using config file: ${configManager.getConfigPath()}`); } console.log(`🔍 Analyzing directory: ${sourceDir}`); // Perform analysis const classes = await (0, analyser_1.analyzeProject)(sourceDir, { sourceDir, interfacePattern: mergedOptions.interface, excludePatterns: mergedOptions.exclude }); if (classes.length === 0) { console.log('⚠️ No classes implementing interfaces found.'); return; } // Detect circular dependencies const circularDependencies = (0, generator_1.detectCircularDependencies)(classes); // Prepare analysis results const analysisResults = { classes, circularDependencies }; // Create renderer based on options const renderer = createRenderer(options.renderer); // Render the analysis results renderer.render(analysisResults); } catch (error) { if (index_js_1.ErrorUtils.isIoCError(error)) { console.error(`❌ ${index_js_1.ErrorUtils.formatForConsole(error)}`); } else { const wrappedError = index_js_1.ErrorFactory.unexpectedError(error); console.error(`❌ ${index_js_1.ErrorUtils.formatForConsole(wrappedError)}`); } process.exit(1); } }); function createRenderer(rendererType) { switch (rendererType.toLowerCase()) { case 'console': return new console_analysis_renderer_1.ConsoleAnalysisRenderer(); default: console.warn(`⚠️ Unknown renderer type: ${rendererType}. Falling back to console renderer.`); return new console_analysis_renderer_1.ConsoleAnalysisRenderer(); } } //# sourceMappingURL=visualize.js.map