@nexus-ioc/graph-analyzer 0.1.0 → 0.2.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.
- package/CHANGELOG.md +10 -0
- package/README.md +63 -26
- package/dist/analyzer/circular-dependency-detector.d.ts +29 -9
- package/dist/analyzer/circular-dependency-detector.js +106 -63
- package/dist/analyzer/circular-dependency-detector.js.map +1 -1
- package/dist/analyzer/module-depth-analyzer.d.ts +10 -13
- package/dist/analyzer/module-depth-analyzer.js +40 -52
- package/dist/analyzer/module-depth-analyzer.js.map +1 -1
- package/dist/analyzer/provider-scope-analyzer.d.ts +7 -44
- package/dist/analyzer/provider-scope-analyzer.js +13 -84
- package/dist/analyzer/provider-scope-analyzer.js.map +1 -1
- package/dist/analyzer/unused-provider-detector.d.ts +11 -9
- package/dist/analyzer/unused-provider-detector.js +35 -55
- package/dist/analyzer/unused-provider-detector.js.map +1 -1
- package/dist/cli.js +34 -129
- package/dist/cli.js.map +1 -1
- package/dist/config/config-loader.js +3 -27
- package/dist/config/config-loader.js.map +1 -1
- package/dist/config/config-schema.d.ts +2 -16
- package/dist/config/config-schema.js +0 -18
- package/dist/config/config-schema.js.map +1 -1
- package/dist/graph/build-nexus-graph-model.d.ts +13 -0
- package/dist/graph/build-nexus-graph-model.js +202 -0
- package/dist/graph/build-nexus-graph-model.js.map +1 -0
- package/dist/graph/nexus-graph-model.d.ts +112 -0
- package/dist/graph/nexus-graph-model.js +10 -0
- package/dist/graph/nexus-graph-model.js.map +1 -0
- package/dist/graph/scope-resolution.d.ts +16 -0
- package/dist/graph/scope-resolution.js +46 -0
- package/dist/graph/scope-resolution.js.map +1 -0
- package/dist/index.d.ts +27 -29
- package/dist/index.js +34 -34
- package/dist/index.js.map +1 -1
- package/dist/interfaces/graph-output.interface.d.ts +49 -14
- package/dist/utils/error-formatter.js +1 -6
- package/dist/utils/error-formatter.js.map +1 -1
- package/dist/utils/validator.d.ts +0 -5
- package/dist/utils/validator.js +0 -60
- package/dist/utils/validator.js.map +1 -1
- package/dist/visualize/json-formatter.d.ts +5 -6
- package/dist/visualize/json-formatter.js +49 -47
- package/dist/visualize/json-formatter.js.map +1 -1
- package/package.json +5 -4
- package/dist/interfaces/providers.interface.d.ts +0 -10
- package/dist/interfaces/providers.interface.js +0 -3
- package/dist/interfaces/providers.interface.js.map +0 -1
- package/dist/parser/dependency-extractor.d.ts +0 -88
- package/dist/parser/dependency-extractor.js +0 -334
- package/dist/parser/dependency-extractor.js.map +0 -1
- package/dist/parser/parse-entry-file.d.ts +0 -15
- package/dist/parser/parse-entry-file.js +0 -46
- package/dist/parser/parse-entry-file.js.map +0 -1
- package/dist/parser/parse-imports.d.ts +0 -15
- package/dist/parser/parse-imports.js +0 -65
- package/dist/parser/parse-imports.js.map +0 -1
- package/dist/parser/parse-ns-module.d.ts +0 -39
- package/dist/parser/parse-ns-module.js +0 -122
- package/dist/parser/parse-ns-module.js.map +0 -1
- package/dist/parser/parse-provider.d.ts +0 -2
- package/dist/parser/parse-provider.js +0 -7
- package/dist/parser/parse-provider.js.map +0 -1
- package/dist/parser/parse-ts-config.d.ts +0 -10
- package/dist/parser/parse-ts-config.js +0 -40
- package/dist/parser/parse-ts-config.js.map +0 -1
- package/dist/parser/parser-rec.d.ts +0 -1
- package/dist/parser/parser-rec.js +0 -52
- package/dist/parser/parser-rec.js.map +0 -1
- package/dist/parser/parser.d.ts +0 -1
- package/dist/parser/parser.js +0 -61
- package/dist/parser/parser.js.map +0 -1
- package/dist/parser/provider/class-parser.d.ts +0 -20
- package/dist/parser/provider/class-parser.js +0 -137
- package/dist/parser/provider/class-parser.js.map +0 -1
- package/dist/parser/provider/providers-parser.d.ts +0 -9
- package/dist/parser/provider/providers-parser.js +0 -32
- package/dist/parser/provider/providers-parser.js.map +0 -1
- package/dist/parser/provider/use-class-parser.d.ts +0 -25
- package/dist/parser/provider/use-class-parser.js +0 -161
- package/dist/parser/provider/use-class-parser.js.map +0 -1
- package/dist/parser/provider/use-factory-parser.d.ts +0 -15
- package/dist/parser/provider/use-factory-parser.js +0 -53
- package/dist/parser/provider/use-factory-parser.js.map +0 -1
- package/dist/parser/provider/use-value-parser.d.ts +0 -13
- package/dist/parser/provider/use-value-parser.js +0 -41
- package/dist/parser/provider/use-value-parser.js.map +0 -1
- package/dist/parser/rules.d.ts +0 -10
- package/dist/parser/rules.js +0 -37
- package/dist/parser/rules.js.map +0 -1
- package/dist/visualize/generator.d.ts +0 -26
- package/dist/visualize/generator.js +0 -75
- package/dist/visualize/generator.js.map +0 -1
- package/dist/visualize/graph-analyzer.d.ts +0 -126
- package/dist/visualize/graph-analyzer.js +0 -199
- package/dist/visualize/graph-analyzer.js.map +0 -1
- package/dist/visualize/html-generator.d.ts +0 -71
- package/dist/visualize/html-generator.js +0 -1312
- package/dist/visualize/html-generator.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { CircularDependency } from "../analyzer/circular-dependency-detector";
|
|
2
2
|
import type { DepthLevel, ModuleDepthInfo } from "../analyzer/module-depth-analyzer";
|
|
3
|
-
import type { ProviderScopeInfo
|
|
3
|
+
import type { ProviderScopeInfo } from "../analyzer/provider-scope-analyzer";
|
|
4
4
|
import type { UnusedProvider } from "../analyzer/unused-provider-detector";
|
|
5
|
-
import type {
|
|
5
|
+
import type { GraphUndeclaredDependency } from "../graph/nexus-graph-model";
|
|
6
6
|
/**
|
|
7
7
|
* Complete dependency graph output format
|
|
8
8
|
*
|
|
@@ -53,10 +53,8 @@ export interface GraphAnalysis {
|
|
|
53
53
|
totalProviders: number;
|
|
54
54
|
/** Number of singleton providers */
|
|
55
55
|
singletonProviders: number;
|
|
56
|
-
/** Number of
|
|
57
|
-
|
|
58
|
-
/** Scope mismatches detected */
|
|
59
|
-
scopeMismatches: ScopeMismatch[];
|
|
56
|
+
/** Number of transient providers */
|
|
57
|
+
transientProviders: number;
|
|
60
58
|
/** All provider scope information */
|
|
61
59
|
providerScopes: ProviderScopeInfo[];
|
|
62
60
|
};
|
|
@@ -81,24 +79,58 @@ export interface GraphMetadata {
|
|
|
81
79
|
/** Total number of providers across all modules */
|
|
82
80
|
totalProviders: number;
|
|
83
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* A reference to a module or exported token, as shown in `ModuleInfo.imports`/
|
|
84
|
+
* `exports` and `ProviderInfo.module`. `path` disambiguates two same-named
|
|
85
|
+
* modules/tokens declared in different files — the file path where the
|
|
86
|
+
* referenced module/token is itself declared, when known.
|
|
87
|
+
*
|
|
88
|
+
* NOTE: this replaces the plain `string` shape these fields used before —
|
|
89
|
+
* a deliberate breaking change, since without a path a reader (human or
|
|
90
|
+
* renderer) has no way to tell two same-named modules apart.
|
|
91
|
+
*/
|
|
92
|
+
export interface ModuleReferenceInfo {
|
|
93
|
+
name: string;
|
|
94
|
+
path?: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Dependency of a provider, as shown in `ProviderInfo.dependencies`.
|
|
98
|
+
*/
|
|
99
|
+
export interface DependencyInfo {
|
|
100
|
+
token: string;
|
|
101
|
+
optional: boolean;
|
|
102
|
+
/** `true` when the provider lives in a child scope and this dependency
|
|
103
|
+
* comes from an ancestor scope. Present only when `true`.
|
|
104
|
+
*
|
|
105
|
+
* Approximate: computed from which scope registers the token, not from
|
|
106
|
+
* full imports/exports visibility. The type-checker's
|
|
107
|
+
* `NexusResolvedDependency.fromParentScope` is the precise value. */
|
|
108
|
+
crossScope?: boolean;
|
|
109
|
+
}
|
|
84
110
|
/**
|
|
85
111
|
* Information about a single module in the dependency graph
|
|
86
112
|
*
|
|
87
|
-
* Represents a Nexus IoC module decorated with @
|
|
113
|
+
* Represents a Nexus IoC module decorated with @Module.
|
|
88
114
|
*/
|
|
89
115
|
export interface ModuleInfo {
|
|
90
116
|
/** Module name (class name) */
|
|
91
117
|
name: string;
|
|
92
118
|
/** File path where the module is defined */
|
|
93
119
|
path: string;
|
|
94
|
-
/**
|
|
95
|
-
imports:
|
|
120
|
+
/** Modules imported by this module */
|
|
121
|
+
imports: ModuleReferenceInfo[];
|
|
96
122
|
/** Tokens of providers exported by this module */
|
|
97
|
-
exports:
|
|
123
|
+
exports: ModuleReferenceInfo[];
|
|
98
124
|
/** Tokens of providers registered in this module */
|
|
99
125
|
providers: string[];
|
|
100
126
|
/** Whether this module is marked as global */
|
|
101
127
|
isGlobal: boolean;
|
|
128
|
+
/** Name of the root module of the container scope this module belongs
|
|
129
|
+
* to. Present only when the application declares child scopes via
|
|
130
|
+
* `@Module({ children })`. */
|
|
131
|
+
scope?: string;
|
|
132
|
+
/** Modules declared in `@Module({ children })`, present only when non-empty. */
|
|
133
|
+
children?: ModuleReferenceInfo[];
|
|
102
134
|
}
|
|
103
135
|
/**
|
|
104
136
|
* Information about a single provider in the dependency graph
|
|
@@ -111,12 +143,15 @@ export interface ProviderInfo {
|
|
|
111
143
|
token: string;
|
|
112
144
|
/** Type of provider */
|
|
113
145
|
type: "Class" | "UseValue" | "UseFactory" | "UseClass";
|
|
114
|
-
/**
|
|
115
|
-
module:
|
|
146
|
+
/** The module that registers this provider */
|
|
147
|
+
module: ModuleReferenceInfo;
|
|
116
148
|
/** Lifecycle scope of the provider (only for class providers) */
|
|
117
|
-
scope?: "Singleton" | "
|
|
149
|
+
scope?: "Singleton" | "Transient";
|
|
118
150
|
/** Dependencies required by this provider */
|
|
119
|
-
dependencies:
|
|
151
|
+
dependencies: DependencyInfo[];
|
|
152
|
+
/** Constructor parameters/properties that look like dependencies but have
|
|
153
|
+
* no `@Inject` — present only when non-empty. */
|
|
154
|
+
undeclaredDependencies?: GraphUndeclaredDependency[];
|
|
120
155
|
/** Static value (only for UseValue providers) */
|
|
121
156
|
value?: string;
|
|
122
157
|
/** Factory function name (only for UseFactory providers) */
|
|
@@ -96,7 +96,7 @@ class ErrorFormatter {
|
|
|
96
96
|
// No entry module errors
|
|
97
97
|
else if (errorMessage.includes("No entry module")) {
|
|
98
98
|
suggestions.push("Make sure your entry file contains a NexusFactory.create() call");
|
|
99
|
-
suggestions.push("Check that the root module is properly decorated with @
|
|
99
|
+
suggestions.push("Check that the root module is properly decorated with @Module");
|
|
100
100
|
suggestions.push("");
|
|
101
101
|
suggestions.push("Example entry file:");
|
|
102
102
|
suggestions.push(" import { NexusFactory } from '@nexus-ioc/core';");
|
|
@@ -104,11 +104,6 @@ class ErrorFormatter {
|
|
|
104
104
|
suggestions.push("");
|
|
105
105
|
suggestions.push(" const app = NexusFactory.create(AppModule);");
|
|
106
106
|
}
|
|
107
|
-
// Invalid format errors
|
|
108
|
-
else if (errorMessage.includes("Invalid format")) {
|
|
109
|
-
suggestions.push("Use one of: json, png, html, or both");
|
|
110
|
-
suggestions.push("Example: graph-analyzer -f json src/main.ts");
|
|
111
|
-
}
|
|
112
107
|
// Invalid configuration errors
|
|
113
108
|
else if (errorMessage.includes("Invalid configuration")) {
|
|
114
109
|
suggestions.push("Check your configuration file syntax");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-formatter.js","sourceRoot":"","sources":["../../src/utils/error-formatter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"error-formatter.js","sourceRoot":"","sources":["../../src/utils/error-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,10 +21,6 @@ export declare class Validator {
|
|
|
21
21
|
* Validate that tsconfig.json exists if specified
|
|
22
22
|
*/
|
|
23
23
|
static validateTsConfig(tsConfigPath: string | undefined): ValidationError | null;
|
|
24
|
-
/**
|
|
25
|
-
* Check if Graphviz is installed (required for PNG generation)
|
|
26
|
-
*/
|
|
27
|
-
static validateGraphvizInstalled(format: string | undefined): ValidationError | null;
|
|
28
24
|
/**
|
|
29
25
|
* Validate entry file comprehensively
|
|
30
26
|
*/
|
|
@@ -40,6 +36,5 @@ export declare class Validator {
|
|
|
40
36
|
entryFile: string;
|
|
41
37
|
tsConfig?: string;
|
|
42
38
|
output?: string;
|
|
43
|
-
format?: string;
|
|
44
39
|
}): ValidationError | null;
|
|
45
40
|
}
|
package/dist/utils/validator.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Validator = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const node_child_process_1 = require("node:child_process");
|
|
6
5
|
const fs = tslib_1.__importStar(require("node:fs"));
|
|
7
6
|
const path = tslib_1.__importStar(require("node:path"));
|
|
8
7
|
class Validator {
|
|
@@ -107,61 +106,6 @@ class Validator {
|
|
|
107
106
|
};
|
|
108
107
|
}
|
|
109
108
|
}
|
|
110
|
-
/**
|
|
111
|
-
* Check if Graphviz is installed (required for PNG generation)
|
|
112
|
-
*/
|
|
113
|
-
static validateGraphvizInstalled(format) {
|
|
114
|
-
// Only check if PNG output is requested
|
|
115
|
-
if (format !== "png" && format !== "both" && format !== undefined) {
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
try {
|
|
119
|
-
const result = (0, node_child_process_1.spawnSync)("dot", ["-V"], {
|
|
120
|
-
stdio: "pipe",
|
|
121
|
-
encoding: "utf8",
|
|
122
|
-
});
|
|
123
|
-
// Graphviz returns version info on stderr
|
|
124
|
-
if (result.error || (!result.stdout && !result.stderr)) {
|
|
125
|
-
return {
|
|
126
|
-
type: "GRAPHVIZ_NOT_FOUND",
|
|
127
|
-
message: "Graphviz is not installed or not in PATH",
|
|
128
|
-
suggestions: [
|
|
129
|
-
"Install Graphviz to generate PNG visualizations",
|
|
130
|
-
"",
|
|
131
|
-
"Installation instructions:",
|
|
132
|
-
" • macOS: brew install graphviz",
|
|
133
|
-
" • Ubuntu/Debian: sudo apt-get install graphviz",
|
|
134
|
-
" • Windows: choco install graphviz",
|
|
135
|
-
" • Or download from: https://graphviz.org/download/",
|
|
136
|
-
"",
|
|
137
|
-
"Alternatively, use JSON or HTML format instead:",
|
|
138
|
-
" graph-analyzer -f json src/main.ts",
|
|
139
|
-
" graph-analyzer -f html src/main.ts",
|
|
140
|
-
],
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
return null;
|
|
144
|
-
}
|
|
145
|
-
catch (_error) {
|
|
146
|
-
return {
|
|
147
|
-
type: "GRAPHVIZ_NOT_FOUND",
|
|
148
|
-
message: "Graphviz is not installed or not in PATH",
|
|
149
|
-
suggestions: [
|
|
150
|
-
"Install Graphviz to generate PNG visualizations",
|
|
151
|
-
"",
|
|
152
|
-
"Installation instructions:",
|
|
153
|
-
" • macOS: brew install graphviz",
|
|
154
|
-
" • Ubuntu/Debian: sudo apt-get install graphviz",
|
|
155
|
-
" • Windows: choco install graphviz",
|
|
156
|
-
" • Or download from: https://graphviz.org/download/",
|
|
157
|
-
"",
|
|
158
|
-
"Alternatively, use JSON or HTML format instead:",
|
|
159
|
-
" graph-analyzer -f json src/main.ts",
|
|
160
|
-
" graph-analyzer -f html src/main.ts",
|
|
161
|
-
],
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
109
|
/**
|
|
166
110
|
* Validate entry file comprehensively
|
|
167
111
|
*/
|
|
@@ -235,10 +179,6 @@ class Validator {
|
|
|
235
179
|
const tsConfigError = Validator.validateTsConfig(options.tsConfig);
|
|
236
180
|
if (tsConfigError)
|
|
237
181
|
return tsConfigError;
|
|
238
|
-
// Validate Graphviz for PNG generation
|
|
239
|
-
const graphvizError = Validator.validateGraphvizInstalled(options.format);
|
|
240
|
-
if (graphvizError)
|
|
241
|
-
return graphvizError;
|
|
242
182
|
// Validate output directory if provided
|
|
243
183
|
if (options.output) {
|
|
244
184
|
const outputError = Validator.validateOutputDirectory(options.output);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
+
import type { NexusGraphModel } from "../graph/nexus-graph-model";
|
|
1
2
|
import type { GraphOutput } from "../interfaces/graph-output.interface";
|
|
2
|
-
import type { ParseEntryFile } from "../parser/parse-entry-file";
|
|
3
|
-
import type { ParseNsModule } from "../parser/parse-ns-module";
|
|
4
3
|
/**
|
|
5
4
|
* Formats dependency graphs as structured JSON output
|
|
6
5
|
*
|
|
@@ -9,7 +8,7 @@ import type { ParseNsModule } from "../parser/parse-ns-module";
|
|
|
9
8
|
*
|
|
10
9
|
* @example
|
|
11
10
|
* ```typescript
|
|
12
|
-
* const formatter = new JsonFormatter(
|
|
11
|
+
* const formatter = new JsonFormatter(graphModel, 'src/main.ts');
|
|
13
12
|
* const output = formatter.format();
|
|
14
13
|
*
|
|
15
14
|
* console.log(`Modules: ${output.modules.length}`);
|
|
@@ -21,7 +20,7 @@ import type { ParseNsModule } from "../parser/parse-ns-module";
|
|
|
21
20
|
* ```
|
|
22
21
|
*/
|
|
23
22
|
export declare class JsonFormatter {
|
|
24
|
-
private readonly
|
|
23
|
+
private readonly graphModel;
|
|
25
24
|
private readonly entryPoint;
|
|
26
25
|
private readonly checkCircular;
|
|
27
26
|
private readonly checkUnused;
|
|
@@ -31,7 +30,7 @@ export declare class JsonFormatter {
|
|
|
31
30
|
/**
|
|
32
31
|
* Create a new JsonFormatter instance
|
|
33
32
|
*
|
|
34
|
-
* @param
|
|
33
|
+
* @param graphModel - The application's graph model
|
|
35
34
|
* @param entryPoint - Path to application entry point file
|
|
36
35
|
* @param checkCircular - Whether to perform circular dependency detection
|
|
37
36
|
* @param checkUnused - Whether to perform unused provider detection
|
|
@@ -39,7 +38,7 @@ export declare class JsonFormatter {
|
|
|
39
38
|
* @param deepModuleThreshold - Threshold for identifying deep modules
|
|
40
39
|
* @param checkScope - Whether to perform provider scope analysis
|
|
41
40
|
*/
|
|
42
|
-
constructor(
|
|
41
|
+
constructor(graphModel: NexusGraphModel, entryPoint: string, checkCircular?: boolean, checkUnused?: boolean, checkDepth?: boolean, deepModuleThreshold?: number, checkScope?: boolean);
|
|
43
42
|
/**
|
|
44
43
|
* Format the dependency graph as a structured JSON object
|
|
45
44
|
*
|
|
@@ -13,7 +13,7 @@ const unused_provider_detector_1 = require("../analyzer/unused-provider-detector
|
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
15
|
* ```typescript
|
|
16
|
-
* const formatter = new JsonFormatter(
|
|
16
|
+
* const formatter = new JsonFormatter(graphModel, 'src/main.ts');
|
|
17
17
|
* const output = formatter.format();
|
|
18
18
|
*
|
|
19
19
|
* console.log(`Modules: ${output.modules.length}`);
|
|
@@ -28,7 +28,7 @@ class JsonFormatter {
|
|
|
28
28
|
/**
|
|
29
29
|
* Create a new JsonFormatter instance
|
|
30
30
|
*
|
|
31
|
-
* @param
|
|
31
|
+
* @param graphModel - The application's graph model
|
|
32
32
|
* @param entryPoint - Path to application entry point file
|
|
33
33
|
* @param checkCircular - Whether to perform circular dependency detection
|
|
34
34
|
* @param checkUnused - Whether to perform unused provider detection
|
|
@@ -36,8 +36,8 @@ class JsonFormatter {
|
|
|
36
36
|
* @param deepModuleThreshold - Threshold for identifying deep modules
|
|
37
37
|
* @param checkScope - Whether to perform provider scope analysis
|
|
38
38
|
*/
|
|
39
|
-
constructor(
|
|
40
|
-
this.
|
|
39
|
+
constructor(graphModel, entryPoint, checkCircular = false, checkUnused = false, checkDepth = false, deepModuleThreshold = 5, checkScope = false) {
|
|
40
|
+
this.graphModel = graphModel;
|
|
41
41
|
this.entryPoint = entryPoint;
|
|
42
42
|
this.checkCircular = checkCircular;
|
|
43
43
|
this.checkUnused = checkUnused;
|
|
@@ -76,33 +76,34 @@ class JsonFormatter {
|
|
|
76
76
|
* ```
|
|
77
77
|
*/
|
|
78
78
|
format() {
|
|
79
|
-
const entryModule = this.
|
|
80
|
-
if (!entryModule
|
|
79
|
+
const entryModule = this.graphModel.modules.get(this.graphModel.entryModuleId);
|
|
80
|
+
if (!entryModule) {
|
|
81
81
|
throw new Error("Empty entry module");
|
|
82
82
|
}
|
|
83
83
|
const modules = [];
|
|
84
84
|
const providers = [];
|
|
85
85
|
const visitedModules = new Set();
|
|
86
|
-
const modulesToVisit = [entryModule.
|
|
86
|
+
const modulesToVisit = [entryModule.id];
|
|
87
87
|
// Traverse all modules
|
|
88
88
|
while (modulesToVisit.length > 0) {
|
|
89
|
-
const
|
|
90
|
-
if (!
|
|
89
|
+
const moduleId = modulesToVisit.shift();
|
|
90
|
+
if (!moduleId || visitedModules.has(moduleId)) {
|
|
91
91
|
continue;
|
|
92
92
|
}
|
|
93
|
-
visitedModules.add(
|
|
94
|
-
const
|
|
95
|
-
if (!
|
|
93
|
+
visitedModules.add(moduleId);
|
|
94
|
+
const module = this.graphModel.modules.get(moduleId);
|
|
95
|
+
if (!module) {
|
|
96
96
|
continue;
|
|
97
97
|
}
|
|
98
98
|
// Add module info
|
|
99
|
-
modules.push(this.formatModule(
|
|
99
|
+
modules.push(this.formatModule(module));
|
|
100
100
|
// Add provider info
|
|
101
|
-
for (const provider of
|
|
102
|
-
providers.push(this.formatProvider(provider,
|
|
101
|
+
for (const provider of module.providers) {
|
|
102
|
+
providers.push(this.formatProvider(provider, module));
|
|
103
103
|
}
|
|
104
|
-
// Queue imported modules
|
|
105
|
-
modulesToVisit.push(...
|
|
104
|
+
// Queue imported modules, then declared child modules
|
|
105
|
+
modulesToVisit.push(...module.imports.map((entry) => entry.id));
|
|
106
|
+
modulesToVisit.push(...(module.children ?? []).map((entry) => entry.id));
|
|
106
107
|
}
|
|
107
108
|
// Create metadata
|
|
108
109
|
const metadata = {
|
|
@@ -120,7 +121,7 @@ class JsonFormatter {
|
|
|
120
121
|
};
|
|
121
122
|
// Add circular dependency analysis if enabled
|
|
122
123
|
if (this.checkCircular) {
|
|
123
|
-
const detector = new circular_dependency_detector_1.CircularDependencyDetector(this.
|
|
124
|
+
const detector = new circular_dependency_detector_1.CircularDependencyDetector(this.graphModel);
|
|
124
125
|
const analysis = detector.analyze();
|
|
125
126
|
if (analysis.hasCircularDependencies) {
|
|
126
127
|
if (!output.analysis) {
|
|
@@ -131,7 +132,7 @@ class JsonFormatter {
|
|
|
131
132
|
}
|
|
132
133
|
// Add unused provider analysis if enabled
|
|
133
134
|
if (this.checkUnused) {
|
|
134
|
-
const detector = new unused_provider_detector_1.UnusedProviderDetector(this.
|
|
135
|
+
const detector = new unused_provider_detector_1.UnusedProviderDetector(this.graphModel);
|
|
135
136
|
const analysis = detector.analyze();
|
|
136
137
|
if (analysis.hasUnusedProviders) {
|
|
137
138
|
if (!output.analysis) {
|
|
@@ -142,7 +143,7 @@ class JsonFormatter {
|
|
|
142
143
|
}
|
|
143
144
|
// Add module depth analysis if enabled
|
|
144
145
|
if (this.checkDepth) {
|
|
145
|
-
const analyzer = new module_depth_analyzer_1.ModuleDepthAnalyzer(this.
|
|
146
|
+
const analyzer = new module_depth_analyzer_1.ModuleDepthAnalyzer(this.graphModel, this.deepModuleThreshold);
|
|
146
147
|
const analysis = analyzer.analyze();
|
|
147
148
|
if (analysis.hasDepthAnalysis) {
|
|
148
149
|
if (!output.analysis) {
|
|
@@ -161,7 +162,7 @@ class JsonFormatter {
|
|
|
161
162
|
}
|
|
162
163
|
// Add provider scope analysis if enabled
|
|
163
164
|
if (this.checkScope) {
|
|
164
|
-
const analyzer = new provider_scope_analyzer_1.ProviderScopeAnalyzer(this.
|
|
165
|
+
const analyzer = new provider_scope_analyzer_1.ProviderScopeAnalyzer(this.graphModel);
|
|
165
166
|
const analysis = analyzer.analyze();
|
|
166
167
|
if (analysis.hasScopeAnalysis) {
|
|
167
168
|
if (!output.analysis) {
|
|
@@ -170,8 +171,7 @@ class JsonFormatter {
|
|
|
170
171
|
output.analysis.scopeAnalysis = {
|
|
171
172
|
totalProviders: analysis.totalProviders,
|
|
172
173
|
singletonProviders: analysis.singletonProviders,
|
|
173
|
-
|
|
174
|
-
scopeMismatches: analysis.scopeMismatches,
|
|
174
|
+
transientProviders: analysis.transientProviders,
|
|
175
175
|
providerScopes: analysis.providerScopes,
|
|
176
176
|
};
|
|
177
177
|
}
|
|
@@ -181,43 +181,42 @@ class JsonFormatter {
|
|
|
181
181
|
/**
|
|
182
182
|
* Format a module as ModuleInfo
|
|
183
183
|
*/
|
|
184
|
-
formatModule(
|
|
185
|
-
|
|
186
|
-
name:
|
|
187
|
-
path:
|
|
188
|
-
imports:
|
|
189
|
-
exports:
|
|
190
|
-
providers:
|
|
191
|
-
|
|
192
|
-
.filter((token) => token !== null),
|
|
193
|
-
isGlobal: parseNsModule.isGlobal,
|
|
184
|
+
formatModule(module) {
|
|
185
|
+
const moduleInfo = {
|
|
186
|
+
name: module.name,
|
|
187
|
+
path: module.path,
|
|
188
|
+
imports: module.imports.map(toModuleReferenceInfo),
|
|
189
|
+
exports: module.exports.map(toModuleReferenceInfo),
|
|
190
|
+
providers: module.providers.map((provider) => provider.token),
|
|
191
|
+
isGlobal: module.isGlobal,
|
|
194
192
|
};
|
|
193
|
+
if (module.scope !== undefined) {
|
|
194
|
+
moduleInfo.scope =
|
|
195
|
+
this.graphModel.modules.get(module.scope)?.name ?? module.scope;
|
|
196
|
+
}
|
|
197
|
+
if (module.children && module.children.length > 0) {
|
|
198
|
+
moduleInfo.children = module.children.map(toModuleReferenceInfo);
|
|
199
|
+
}
|
|
200
|
+
return moduleInfo;
|
|
195
201
|
}
|
|
196
202
|
/**
|
|
197
203
|
* Format a provider as ProviderInfo
|
|
198
204
|
*/
|
|
199
|
-
formatProvider(
|
|
200
|
-
// biome-ignore lint/suspicious/noExplicitAny: Provider type is complex
|
|
201
|
-
provider, moduleName) {
|
|
205
|
+
formatProvider(provider, module) {
|
|
202
206
|
const providerInfo = {
|
|
203
207
|
token: provider.token,
|
|
204
208
|
type: provider.type,
|
|
205
|
-
module:
|
|
206
|
-
dependencies: provider.dependencies
|
|
209
|
+
module: { name: module.name, path: module.path },
|
|
210
|
+
dependencies: provider.dependencies.map(({ token, optional, crossScope }) => crossScope ? { token, optional, crossScope } : { token, optional }),
|
|
207
211
|
};
|
|
208
|
-
// Add scope if present
|
|
209
212
|
if (provider.scope) {
|
|
210
213
|
providerInfo.scope = provider.scope;
|
|
211
214
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
providerInfo.value = String(provider.value);
|
|
215
|
+
if (provider.type === "UseClass" && provider.useClass) {
|
|
216
|
+
providerInfo.useClass = provider.useClass;
|
|
215
217
|
}
|
|
216
|
-
if (provider.
|
|
217
|
-
providerInfo.
|
|
218
|
-
}
|
|
219
|
-
if (provider.type === "UseClass" && provider.inject) {
|
|
220
|
-
providerInfo.useClass = provider.inject;
|
|
218
|
+
if (provider.undeclaredDependencies.length > 0) {
|
|
219
|
+
providerInfo.undeclaredDependencies = provider.undeclaredDependencies;
|
|
221
220
|
}
|
|
222
221
|
return providerInfo;
|
|
223
222
|
}
|
|
@@ -249,4 +248,7 @@ class JsonFormatter {
|
|
|
249
248
|
}
|
|
250
249
|
}
|
|
251
250
|
exports.JsonFormatter = JsonFormatter;
|
|
251
|
+
function toModuleReferenceInfo(entry) {
|
|
252
|
+
return { name: entry.name, path: entry.path };
|
|
253
|
+
}
|
|
252
254
|
//# sourceMappingURL=json-formatter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-formatter.js","sourceRoot":"","sources":["../../src/visualize/json-formatter.ts"],"names":[],"mappings":";;;AAAA,2FAAsF;AACtF,6EAAwE;AACxE,iFAA4E;AAC5E,mFAA8E;
|
|
1
|
+
{"version":3,"file":"json-formatter.js","sourceRoot":"","sources":["../../src/visualize/json-formatter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexus-ioc/graph-analyzer",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Static analysis and visualization tool for Nexus IoC dependency injection graphs. Detect circular dependencies, unused providers,
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Static analysis and visualization tool for Nexus IoC dependency injection graphs. Detect circular dependencies, unused providers, provider scopes, and visualize your architecture with interactive HTML graphs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nexus-ioc",
|
|
7
7
|
"dependency-injection",
|
|
@@ -79,7 +79,8 @@
|
|
|
79
79
|
"url": "https://github.com/Isqanderm/ioc/issues"
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
|
-
"@
|
|
83
|
-
"cli-spinners": "^2.9.2"
|
|
82
|
+
"@nexus-ioc/type-checker": "^0.2.0",
|
|
83
|
+
"cli-spinners": "^2.9.2",
|
|
84
|
+
"typescript": "^5.9.3"
|
|
84
85
|
}
|
|
85
86
|
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Dependency } from "../parser/dependency-extractor";
|
|
2
|
-
export interface ProvidersInterface {
|
|
3
|
-
parse(): this;
|
|
4
|
-
token: string | null;
|
|
5
|
-
value?: string | null;
|
|
6
|
-
scope?: string | null;
|
|
7
|
-
inject?: string[];
|
|
8
|
-
type: string;
|
|
9
|
-
dependencies?: Dependency[];
|
|
10
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"providers.interface.js","sourceRoot":"","sources":["../../src/interfaces/providers.interface.ts"],"names":[],"mappings":""}
|