@nexus-ioc/graph-analyzer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/LICENSE +21 -0
  3. package/README.md +742 -0
  4. package/dist/analyzer/circular-dependency-detector.d.ts +94 -0
  5. package/dist/analyzer/circular-dependency-detector.js +203 -0
  6. package/dist/analyzer/circular-dependency-detector.js.map +1 -0
  7. package/dist/analyzer/module-depth-analyzer.d.ts +117 -0
  8. package/dist/analyzer/module-depth-analyzer.js +221 -0
  9. package/dist/analyzer/module-depth-analyzer.js.map +1 -0
  10. package/dist/analyzer/provider-scope-analyzer.d.ts +91 -0
  11. package/dist/analyzer/provider-scope-analyzer.js +137 -0
  12. package/dist/analyzer/provider-scope-analyzer.js.map +1 -0
  13. package/dist/analyzer/unused-provider-detector.d.ts +73 -0
  14. package/dist/analyzer/unused-provider-detector.js +147 -0
  15. package/dist/analyzer/unused-provider-detector.js.map +1 -0
  16. package/dist/cli.d.ts +2 -0
  17. package/dist/cli.js +537 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config/config-loader.d.ts +27 -0
  20. package/dist/config/config-loader.js +205 -0
  21. package/dist/config/config-loader.js.map +1 -0
  22. package/dist/config/config-schema.d.ts +83 -0
  23. package/dist/config/config-schema.js +97 -0
  24. package/dist/config/config-schema.js.map +1 -0
  25. package/dist/index.d.ts +41 -0
  26. package/dist/index.js +50 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/interfaces/graph-output.interface.d.ts +126 -0
  29. package/dist/interfaces/graph-output.interface.js +3 -0
  30. package/dist/interfaces/graph-output.interface.js.map +1 -0
  31. package/dist/interfaces/providers.interface.d.ts +10 -0
  32. package/dist/interfaces/providers.interface.js +3 -0
  33. package/dist/interfaces/providers.interface.js.map +1 -0
  34. package/dist/parser/dependency-extractor.d.ts +88 -0
  35. package/dist/parser/dependency-extractor.js +334 -0
  36. package/dist/parser/dependency-extractor.js.map +1 -0
  37. package/dist/parser/parse-entry-file.d.ts +15 -0
  38. package/dist/parser/parse-entry-file.js +46 -0
  39. package/dist/parser/parse-entry-file.js.map +1 -0
  40. package/dist/parser/parse-imports.d.ts +15 -0
  41. package/dist/parser/parse-imports.js +65 -0
  42. package/dist/parser/parse-imports.js.map +1 -0
  43. package/dist/parser/parse-ns-module.d.ts +39 -0
  44. package/dist/parser/parse-ns-module.js +122 -0
  45. package/dist/parser/parse-ns-module.js.map +1 -0
  46. package/dist/parser/parse-provider.d.ts +2 -0
  47. package/dist/parser/parse-provider.js +7 -0
  48. package/dist/parser/parse-provider.js.map +1 -0
  49. package/dist/parser/parse-ts-config.d.ts +10 -0
  50. package/dist/parser/parse-ts-config.js +40 -0
  51. package/dist/parser/parse-ts-config.js.map +1 -0
  52. package/dist/parser/parser-rec.d.ts +1 -0
  53. package/dist/parser/parser-rec.js +52 -0
  54. package/dist/parser/parser-rec.js.map +1 -0
  55. package/dist/parser/parser.d.ts +1 -0
  56. package/dist/parser/parser.js +61 -0
  57. package/dist/parser/parser.js.map +1 -0
  58. package/dist/parser/provider/class-parser.d.ts +20 -0
  59. package/dist/parser/provider/class-parser.js +137 -0
  60. package/dist/parser/provider/class-parser.js.map +1 -0
  61. package/dist/parser/provider/providers-parser.d.ts +9 -0
  62. package/dist/parser/provider/providers-parser.js +32 -0
  63. package/dist/parser/provider/providers-parser.js.map +1 -0
  64. package/dist/parser/provider/use-class-parser.d.ts +25 -0
  65. package/dist/parser/provider/use-class-parser.js +161 -0
  66. package/dist/parser/provider/use-class-parser.js.map +1 -0
  67. package/dist/parser/provider/use-factory-parser.d.ts +15 -0
  68. package/dist/parser/provider/use-factory-parser.js +53 -0
  69. package/dist/parser/provider/use-factory-parser.js.map +1 -0
  70. package/dist/parser/provider/use-value-parser.d.ts +13 -0
  71. package/dist/parser/provider/use-value-parser.js +41 -0
  72. package/dist/parser/provider/use-value-parser.js.map +1 -0
  73. package/dist/parser/rules.d.ts +10 -0
  74. package/dist/parser/rules.js +37 -0
  75. package/dist/parser/rules.js.map +1 -0
  76. package/dist/utils/error-formatter.d.ts +27 -0
  77. package/dist/utils/error-formatter.js +177 -0
  78. package/dist/utils/error-formatter.js.map +1 -0
  79. package/dist/utils/validator.d.ts +45 -0
  80. package/dist/utils/validator.js +252 -0
  81. package/dist/utils/validator.js.map +1 -0
  82. package/dist/visualize/generator.d.ts +26 -0
  83. package/dist/visualize/generator.js +75 -0
  84. package/dist/visualize/generator.js.map +1 -0
  85. package/dist/visualize/graph-analyzer.d.ts +126 -0
  86. package/dist/visualize/graph-analyzer.js +199 -0
  87. package/dist/visualize/graph-analyzer.js.map +1 -0
  88. package/dist/visualize/html-generator.d.ts +71 -0
  89. package/dist/visualize/html-generator.js +1312 -0
  90. package/dist/visualize/html-generator.js.map +1 -0
  91. package/dist/visualize/json-formatter.d.ts +106 -0
  92. package/dist/visualize/json-formatter.js +252 -0
  93. package/dist/visualize/json-formatter.js.map +1 -0
  94. package/docs/API_REFERENCE.md +747 -0
  95. package/docs/ARCHITECTURE.md +486 -0
  96. package/docs/CLI_GUIDE.md +576 -0
  97. package/docs/HTML_VISUALIZATION.md +365 -0
  98. package/package.json +85 -0
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphAnalyzer = void 0;
4
+ const generator_1 = require("./generator");
5
+ const html_generator_1 = require("./html-generator");
6
+ const json_formatter_1 = require("./json-formatter");
7
+ /**
8
+ * Main analyzer class for dependency injection graphs
9
+ *
10
+ * Analyzes Nexus IoC dependency graphs and generates JSON and/or PNG outputs.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const analyzer = new GraphAnalyzer(modulesGraph, 'src/main.ts', {
15
+ * outputFormat: 'json',
16
+ * jsonOutputPath: './output/graph.json'
17
+ * });
18
+ *
19
+ * const output = analyzer.parse();
20
+ * console.log(`Found ${output.metadata.totalProviders} providers`);
21
+ * ```
22
+ */
23
+ class GraphAnalyzer {
24
+ /**
25
+ * Create a new GraphAnalyzer instance
26
+ *
27
+ * @param graph - Map of module names to parsed modules
28
+ * @param entryPoint - Path to application entry point file
29
+ * @param options - Configuration options for output generation
30
+ */
31
+ constructor(graph, entryPoint, options = {}) {
32
+ this.graph = graph;
33
+ this.entryPoint = entryPoint;
34
+ this.options = options;
35
+ }
36
+ /**
37
+ * Parse the dependency graph and generate output based on configured format
38
+ *
39
+ * @returns GraphOutput object if format is 'json', 'html', or 'both', void if format is 'png'
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // Generate JSON only
44
+ * const output = analyzer.parse();
45
+ *
46
+ * // Generate PNG only
47
+ * analyzer.parse(); // Returns void
48
+ *
49
+ * // Generate HTML only
50
+ * analyzer.parse(); // Returns void
51
+ *
52
+ * // Generate both JSON and PNG
53
+ * const output = analyzer.parse(); // Returns GraphOutput and creates PNG
54
+ * ```
55
+ */
56
+ parse() {
57
+ const format = this.options.outputFormat || "both";
58
+ if (format === "json") {
59
+ return this.generateJson();
60
+ }
61
+ if (format === "png") {
62
+ this.generatePng();
63
+ return;
64
+ }
65
+ if (format === "html") {
66
+ this.generateHtml();
67
+ return;
68
+ }
69
+ if (format === "both") {
70
+ const output = this.generateJson();
71
+ this.generatePng();
72
+ return output;
73
+ }
74
+ }
75
+ /**
76
+ * Generate JSON output of the dependency graph
77
+ *
78
+ * Creates a structured JSON representation of all modules, providers, and dependencies.
79
+ * Optionally writes the output to a file if jsonOutputPath or outputPath is configured.
80
+ *
81
+ * @returns GraphOutput object containing modules, providers, and metadata
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const output = analyzer.generateJson();
86
+ * console.log(`Total modules: ${output.metadata.totalModules}`);
87
+ * console.log(`Total providers: ${output.metadata.totalProviders}`);
88
+ * ```
89
+ */
90
+ generateJson() {
91
+ const formatter = new json_formatter_1.JsonFormatter(this.graph, this.entryPoint, this.options.checkCircular || false, this.options.checkUnused || false, this.options.checkDepth || false, this.options.deepModuleThreshold || 5, this.options.checkScope || false);
92
+ const output = formatter.format();
93
+ // Write to file if path is specified
94
+ if (this.options.jsonOutputPath || this.options.outputPath) {
95
+ const fs = require("node:fs");
96
+ const pathModule = require("node:path");
97
+ const path = this.options.jsonOutputPath ||
98
+ this.options.outputPath ||
99
+ "./graph.json";
100
+ // Ensure directory exists
101
+ const dir = pathModule.dirname(path);
102
+ if (!fs.existsSync(dir)) {
103
+ fs.mkdirSync(dir, { recursive: true });
104
+ }
105
+ fs.writeFileSync(path, JSON.stringify(output, null, 2));
106
+ console.log(`JSON output written to: ${path}`);
107
+ }
108
+ return output;
109
+ }
110
+ /**
111
+ * Generate PNG visualization of the dependency graph using Graphviz
112
+ *
113
+ * Creates a visual graph representation showing modules as nodes and dependencies as edges.
114
+ * Requires Graphviz to be installed on the system.
115
+ *
116
+ * @throws Error if Graphviz is not installed or graph generation fails
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * analyzer.generatePng();
121
+ * // Creates graph.png in the configured output path
122
+ * ```
123
+ */
124
+ generatePng() {
125
+ const entryModule = this.graph.get("entry");
126
+ if (!entryModule || !entryModule.name) {
127
+ throw new Error("Empty entry module");
128
+ }
129
+ // biome-ignore lint/suspicious/noExplicitAny: Legacy format for GraphGenerator
130
+ const json = {};
131
+ const modules = [entryModule.name];
132
+ const visited = new Set(); // Track visited modules to prevent infinite loops
133
+ for (const module of modules) {
134
+ // Skip if already visited to prevent circular dependency infinite loops
135
+ if (visited.has(module)) {
136
+ continue;
137
+ }
138
+ visited.add(module);
139
+ const parseNsModule = this.graph.get(module);
140
+ if (!parseNsModule) {
141
+ continue;
142
+ }
143
+ json[module] = {
144
+ name: module,
145
+ imports: parseNsModule.imports,
146
+ exports: parseNsModule.exports,
147
+ isGlobal: parseNsModule.isGlobal,
148
+ providers: parseNsModule.providers.map((provider) => ({
149
+ token: provider.token,
150
+ value: provider.value,
151
+ inject: provider.inject,
152
+ scope: provider.scope,
153
+ type: provider.type,
154
+ dependencies: provider.dependencies,
155
+ })),
156
+ dependencies: parseNsModule.deps,
157
+ };
158
+ // Only add imports that haven't been visited yet
159
+ for (const imp of parseNsModule.imports) {
160
+ if (!visited.has(imp)) {
161
+ modules.push(imp);
162
+ }
163
+ }
164
+ }
165
+ const pngPath = this.options.pngOutputPath || this.options.outputPath || "./graph.png";
166
+ const graphGenerator = new generator_1.GraphGenerator(json, pngPath);
167
+ graphGenerator.scan();
168
+ console.log(`PNG output written to: ${pngPath}`);
169
+ }
170
+ /**
171
+ * Generate interactive HTML visualization of the dependency graph
172
+ *
173
+ * Creates an interactive HTML page with a graph visualization using Cytoscape.js.
174
+ * The HTML includes zoom/pan controls, node details, search functionality, and
175
+ * clickable file paths that open in your IDE.
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * analyzer.generateHtml();
180
+ * // Creates graph.html in the configured output path
181
+ * ```
182
+ */
183
+ generateHtml() {
184
+ const htmlPath = this.options.htmlOutputPath || this.options.outputPath || "./graph.html";
185
+ const htmlGenerator = new html_generator_1.HtmlGenerator(this.graph, this.entryPoint, this.options.htmlOptions || {});
186
+ const html = htmlGenerator.generate();
187
+ const fs = require("node:fs");
188
+ const path = require("node:path");
189
+ // Ensure directory exists
190
+ const dir = path.dirname(htmlPath);
191
+ if (!fs.existsSync(dir)) {
192
+ fs.mkdirSync(dir, { recursive: true });
193
+ }
194
+ fs.writeFileSync(htmlPath, html);
195
+ console.log(`HTML output written to: ${htmlPath}`);
196
+ }
197
+ }
198
+ exports.GraphAnalyzer = GraphAnalyzer;
199
+ //# sourceMappingURL=graph-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-analyzer.js","sourceRoot":"","sources":["../../src/visualize/graph-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { ParseEntryFile } from "../parser/parse-entry-file";
2
+ import type { ParseNsModule } from "../parser/parse-ns-module";
3
+ /**
4
+ * Options for HTML generation
5
+ */
6
+ export interface HtmlGeneratorOptions {
7
+ /** IDE protocol for clickable file links (default: 'vscode') */
8
+ ideProtocol?: "vscode" | "webstorm" | "idea" | "custom";
9
+ /** Custom IDE URL template (e.g., 'vscode://file/{path}:{line}:{column}') */
10
+ customIdeUrl?: string;
11
+ /** Title for the HTML page (default: 'Dependency Graph') */
12
+ title?: string;
13
+ /** Whether to use dark theme (default: false) */
14
+ darkTheme?: boolean;
15
+ }
16
+ /**
17
+ * Generates interactive HTML visualizations of dependency graphs
18
+ *
19
+ * Creates a self-contained HTML file with an interactive graph using Cytoscape.js.
20
+ * The graph includes modules and providers with clickable nodes, zoom/pan capabilities,
21
+ * and detailed information panels.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const generator = new HtmlGenerator(modulesGraph, 'src/main.ts', {
26
+ * ideProtocol: 'vscode',
27
+ * title: 'My App Dependencies',
28
+ * darkTheme: true
29
+ * });
30
+ *
31
+ * const html = generator.generate();
32
+ * fs.writeFileSync('graph.html', html);
33
+ * ```
34
+ */
35
+ export declare class HtmlGenerator {
36
+ readonly graph: Map<string, ParseNsModule | ParseEntryFile>;
37
+ private readonly entryPoint;
38
+ private readonly options;
39
+ private readonly formatter;
40
+ constructor(graph: Map<string, ParseNsModule | ParseEntryFile>, entryPoint: string, options?: HtmlGeneratorOptions);
41
+ /**
42
+ * Generate the complete HTML document
43
+ *
44
+ * @returns Complete HTML string ready to be written to a file
45
+ */
46
+ generate(): string;
47
+ /**
48
+ * Convert GraphOutput to Cytoscape.js format with compound nodes
49
+ */
50
+ private convertToCytoscapeFormat;
51
+ /**
52
+ * Get IDE URL for a file path
53
+ */
54
+ private getIdeUrl;
55
+ /**
56
+ * Generate warning section for providers with missing @Inject decorators
57
+ */
58
+ private generateMissingDecoratorsWarning;
59
+ /**
60
+ * Generate the complete HTML template
61
+ */
62
+ private generateHtmlTemplate;
63
+ /**
64
+ * Generate CSS styles
65
+ */
66
+ private generateStyles;
67
+ /**
68
+ * Generate JavaScript code
69
+ */
70
+ private generateScript;
71
+ }