nestjs-d2-diagrams 1.1.0 → 1.3.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/dist/analyzers/class-analyzer.d.ts +5 -2
- package/dist/analyzers/class-analyzer.d.ts.map +1 -1
- package/dist/analyzers/class-analyzer.js +154 -6
- package/dist/analyzers/class-analyzer.js.map +1 -1
- package/dist/analyzers/module-analyzer.d.ts.map +1 -1
- package/dist/analyzers/module-analyzer.js +4 -0
- package/dist/analyzers/module-analyzer.js.map +1 -1
- package/dist/cli.js +31 -22
- package/dist/cli.js.map +1 -1
- package/dist/generators/class-diagram.d.ts +10 -3
- package/dist/generators/class-diagram.d.ts.map +1 -1
- package/dist/generators/class-diagram.js +209 -40
- package/dist/generators/class-diagram.js.map +1 -1
- package/dist/interactive.d.ts +11 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +138 -24
- package/dist/interactive.js.map +1 -1
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -6
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { ClassInfo } from '../types';
|
|
1
|
+
import { ClassInfo, ModuleInfo } from '../types';
|
|
2
2
|
export declare class ClassAnalyzer {
|
|
3
3
|
private project;
|
|
4
4
|
constructor(projectPath: string);
|
|
5
|
-
analyze(): ClassInfo[];
|
|
5
|
+
analyze(modules?: ModuleInfo[]): ClassInfo[];
|
|
6
6
|
private analyzeSourceFile;
|
|
7
7
|
private analyzeClass;
|
|
8
|
+
private determineClassType;
|
|
8
9
|
private extractDependencies;
|
|
10
|
+
private extractProperties;
|
|
11
|
+
private extractMethods;
|
|
9
12
|
private extractTypeName;
|
|
10
13
|
private isPrimitiveOrCommon;
|
|
11
14
|
private hasInjectableDecorator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/class-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAkB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"class-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/class-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAkB,UAAU,EAA4B,MAAM,UAAU,CAAC;AAE3F,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAU;gBAEb,WAAW,EAAE,MAAM;IAQ/B,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE;IAwD5C,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,kBAAkB;IAoC1B,OAAO,CAAC,mBAAmB;IAsD3B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,cAAc;IAkDtB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,sBAAsB;CAG/B"}
|
|
@@ -10,39 +10,128 @@ class ClassAnalyzer {
|
|
|
10
10
|
});
|
|
11
11
|
this.project.addSourceFilesAtPaths(`${projectPath}/src/**/*.ts`);
|
|
12
12
|
}
|
|
13
|
-
analyze() {
|
|
13
|
+
analyze(modules) {
|
|
14
14
|
const classes = [];
|
|
15
15
|
const sourceFiles = this.project.getSourceFiles();
|
|
16
|
+
// Build a map of class names to their module context
|
|
17
|
+
const classToModuleMap = new Map();
|
|
18
|
+
if (modules) {
|
|
19
|
+
for (const module of modules) {
|
|
20
|
+
const allClasses = [
|
|
21
|
+
...module.controllers,
|
|
22
|
+
...module.providers,
|
|
23
|
+
...(module.guards || []),
|
|
24
|
+
...(module.interceptors || []),
|
|
25
|
+
...(module.pipes || []),
|
|
26
|
+
...(module.filters || []),
|
|
27
|
+
];
|
|
28
|
+
for (const className of allClasses) {
|
|
29
|
+
classToModuleMap.set(className, module.name);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
16
33
|
for (const sourceFile of sourceFiles) {
|
|
17
|
-
|
|
34
|
+
// Skip module files
|
|
35
|
+
if (sourceFile.getFilePath().endsWith('.module.ts'))
|
|
36
|
+
continue;
|
|
37
|
+
const classInfos = this.analyzeSourceFile(sourceFile, classToModuleMap);
|
|
18
38
|
classes.push(...classInfos);
|
|
19
39
|
}
|
|
20
|
-
|
|
40
|
+
// Filter to include only classes that are either:
|
|
41
|
+
// 1. In a module context (registered in a module)
|
|
42
|
+
// 2. Referenced as a dependency by another class
|
|
43
|
+
const referencedTypes = new Set();
|
|
44
|
+
for (const classInfo of classes) {
|
|
45
|
+
for (const dep of classInfo.dependencies) {
|
|
46
|
+
referencedTypes.add(dep.type);
|
|
47
|
+
}
|
|
48
|
+
// Also add properties and method parameter types as referenced
|
|
49
|
+
for (const prop of classInfo.properties) {
|
|
50
|
+
referencedTypes.add(prop.type);
|
|
51
|
+
}
|
|
52
|
+
for (const method of classInfo.methods) {
|
|
53
|
+
referencedTypes.add(method.returnType);
|
|
54
|
+
for (const param of method.parameters) {
|
|
55
|
+
const typeMatch = param.match(/:\s*(.+)$/);
|
|
56
|
+
if (typeMatch) {
|
|
57
|
+
referencedTypes.add(typeMatch[1].trim());
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return classes.filter(c => c.moduleContext || referencedTypes.has(c.name));
|
|
21
63
|
}
|
|
22
|
-
analyzeSourceFile(sourceFile) {
|
|
64
|
+
analyzeSourceFile(sourceFile, classToModuleMap) {
|
|
23
65
|
const classes = [];
|
|
24
66
|
const classDeclarations = sourceFile.getClasses();
|
|
25
67
|
for (const classDeclaration of classDeclarations) {
|
|
26
|
-
const classInfo = this.analyzeClass(classDeclaration, sourceFile);
|
|
68
|
+
const classInfo = this.analyzeClass(classDeclaration, sourceFile, classToModuleMap);
|
|
27
69
|
if (classInfo) {
|
|
28
70
|
classes.push(classInfo);
|
|
29
71
|
}
|
|
30
72
|
}
|
|
31
73
|
return classes;
|
|
32
74
|
}
|
|
33
|
-
analyzeClass(classDeclaration, sourceFile) {
|
|
75
|
+
analyzeClass(classDeclaration, sourceFile, classToModuleMap) {
|
|
34
76
|
const name = classDeclaration.getName();
|
|
35
77
|
if (!name)
|
|
36
78
|
return null;
|
|
37
79
|
const dependencies = this.extractDependencies(classDeclaration);
|
|
80
|
+
const properties = this.extractProperties(classDeclaration);
|
|
81
|
+
const methods = this.extractMethods(classDeclaration);
|
|
38
82
|
const isInjectable = this.hasInjectableDecorator(classDeclaration);
|
|
83
|
+
const classType = this.determineClassType(classDeclaration);
|
|
84
|
+
const moduleContext = classToModuleMap.get(name);
|
|
39
85
|
return {
|
|
40
86
|
name,
|
|
41
87
|
filePath: sourceFile.getFilePath(),
|
|
42
88
|
dependencies,
|
|
89
|
+
properties,
|
|
90
|
+
methods,
|
|
43
91
|
isInjectable,
|
|
92
|
+
classType,
|
|
93
|
+
moduleContext,
|
|
44
94
|
};
|
|
45
95
|
}
|
|
96
|
+
determineClassType(classDeclaration) {
|
|
97
|
+
// Check for specific decorators
|
|
98
|
+
if (classDeclaration.getDecorator('Controller'))
|
|
99
|
+
return 'controller';
|
|
100
|
+
if (classDeclaration.getDecorator('Injectable')) {
|
|
101
|
+
// Check if it's a guard, interceptor, pipe, or filter by interface/extends
|
|
102
|
+
const implementsClause = classDeclaration.getImplements();
|
|
103
|
+
const extendsClause = classDeclaration.getExtends();
|
|
104
|
+
for (const impl of implementsClause) {
|
|
105
|
+
const implName = impl.getText();
|
|
106
|
+
if (implName.includes('Guard'))
|
|
107
|
+
return 'guard';
|
|
108
|
+
if (implName.includes('Interceptor'))
|
|
109
|
+
return 'interceptor';
|
|
110
|
+
if (implName.includes('PipeTransform'))
|
|
111
|
+
return 'pipe';
|
|
112
|
+
if (implName.includes('ExceptionFilter'))
|
|
113
|
+
return 'filter';
|
|
114
|
+
}
|
|
115
|
+
if (extendsClause) {
|
|
116
|
+
const extendsName = extendsClause.getText();
|
|
117
|
+
if (extendsName.includes('Guard'))
|
|
118
|
+
return 'guard';
|
|
119
|
+
if (extendsName.includes('Interceptor'))
|
|
120
|
+
return 'interceptor';
|
|
121
|
+
}
|
|
122
|
+
return 'service';
|
|
123
|
+
}
|
|
124
|
+
if (classDeclaration.getDecorator('Catch'))
|
|
125
|
+
return 'filter';
|
|
126
|
+
// Check for middleware by interface
|
|
127
|
+
const implementsClause = classDeclaration.getImplements();
|
|
128
|
+
for (const impl of implementsClause) {
|
|
129
|
+
const implName = impl.getText();
|
|
130
|
+
if (implName.includes('NestMiddleware'))
|
|
131
|
+
return 'middleware';
|
|
132
|
+
}
|
|
133
|
+
return 'other';
|
|
134
|
+
}
|
|
46
135
|
extractDependencies(classDeclaration) {
|
|
47
136
|
const dependencies = [];
|
|
48
137
|
const constructors = classDeclaration.getConstructors();
|
|
@@ -88,6 +177,65 @@ class ClassAnalyzer {
|
|
|
88
177
|
}
|
|
89
178
|
return dependencies;
|
|
90
179
|
}
|
|
180
|
+
extractProperties(classDeclaration) {
|
|
181
|
+
const properties = [];
|
|
182
|
+
const props = classDeclaration.getProperties();
|
|
183
|
+
for (const prop of props) {
|
|
184
|
+
const name = prop.getName();
|
|
185
|
+
const type = prop.getType().getText();
|
|
186
|
+
const isPrivate = prop.hasModifier(ts_morph_1.SyntaxKind.PrivateKeyword);
|
|
187
|
+
const isReadonly = prop.isReadonly();
|
|
188
|
+
properties.push({
|
|
189
|
+
name,
|
|
190
|
+
type: this.extractTypeName(type),
|
|
191
|
+
isPrivate,
|
|
192
|
+
isReadonly,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
return properties;
|
|
196
|
+
}
|
|
197
|
+
extractMethods(classDeclaration) {
|
|
198
|
+
const methods = [];
|
|
199
|
+
const methodDeclarations = classDeclaration.getMethods();
|
|
200
|
+
for (const method of methodDeclarations) {
|
|
201
|
+
const name = method.getName();
|
|
202
|
+
if (name === 'constructor')
|
|
203
|
+
continue;
|
|
204
|
+
const isPrivate = method.hasModifier(ts_morph_1.SyntaxKind.PrivateKeyword);
|
|
205
|
+
// ONLY use explicit type annotation from source code
|
|
206
|
+
const returnTypeNode = method.getReturnTypeNode();
|
|
207
|
+
let returnType;
|
|
208
|
+
if (returnTypeNode) {
|
|
209
|
+
returnType = returnTypeNode.getText();
|
|
210
|
+
// Unwrap Promise<T> to just T
|
|
211
|
+
const promiseMatch = returnType.match(/^Promise<(.+)>$/);
|
|
212
|
+
if (promiseMatch) {
|
|
213
|
+
returnType = promiseMatch[1];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// No annotation - just say the method returns something
|
|
218
|
+
returnType = 'any';
|
|
219
|
+
}
|
|
220
|
+
const parameters = method.getParameters().map(p => {
|
|
221
|
+
const paramName = p.getName();
|
|
222
|
+
const paramTypeNode = p.getTypeNode();
|
|
223
|
+
let paramType = paramTypeNode ? paramTypeNode.getText() : 'any';
|
|
224
|
+
// Escape brackets for D2
|
|
225
|
+
paramType = paramType.replace(/\[/g, '\\[').replace(/\]/g, '\\]');
|
|
226
|
+
return `${paramName}: ${paramType}`;
|
|
227
|
+
});
|
|
228
|
+
// Escape brackets in return type
|
|
229
|
+
returnType = returnType.replace(/\[/g, '\\[').replace(/\]/g, '\\]');
|
|
230
|
+
methods.push({
|
|
231
|
+
name,
|
|
232
|
+
returnType,
|
|
233
|
+
isPrivate,
|
|
234
|
+
parameters,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
return methods;
|
|
238
|
+
}
|
|
91
239
|
extractTypeName(typeText) {
|
|
92
240
|
// Remove import() wrappers if present
|
|
93
241
|
let cleaned = typeText.replace(/import\([^)]+\)\./g, '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/class-analyzer.ts"],"names":[],"mappings":";;;AAAA,uCAAmF;AAGnF,MAAa,aAAa;IAGxB,YAAY,WAAmB;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAO,CAAC;YACzB,gBAAgB,EAAE,GAAG,WAAW,gBAAgB;YAChD,2BAA2B,EAAE,IAAI;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,WAAW,cAAc,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;
|
|
1
|
+
{"version":3,"file":"class-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/class-analyzer.ts"],"names":[],"mappings":";;;AAAA,uCAAmF;AAGnF,MAAa,aAAa;IAGxB,YAAY,WAAmB;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAO,CAAC;YACzB,gBAAgB,EAAE,GAAG,WAAW,gBAAgB;YAChD,2BAA2B,EAAE,IAAI;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,WAAW,cAAc,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,OAAsB;QAC5B,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAElD,qDAAqD;QACrD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,UAAU,GAAG;oBACjB,GAAG,MAAM,CAAC,WAAW;oBACrB,GAAG,MAAM,CAAC,SAAS;oBACnB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;oBACxB,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;oBAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;oBACvB,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;iBAC1B,CAAC;gBACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBACnC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,oBAAoB;YACpB,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAAE,SAAS;YAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9B,CAAC;QAED,kDAAkD;QAClD,kDAAkD;QAClD,iDAAiD;QACjD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,+DAA+D;YAC/D,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;gBACxC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YACD,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACvC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACvC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC3C,IAAI,SAAS,EAAE,CAAC;wBACd,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,iBAAiB,CAAC,UAAsB,EAAE,gBAAqC;QACrF,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QAElD,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;YACpF,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,YAAY,CAClB,gBAAkC,EAClC,UAAsB,EACtB,gBAAqC;QAErC,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEjD,OAAO;YACL,IAAI;YACJ,QAAQ,EAAE,UAAU,CAAC,WAAW,EAAE;YAClC,YAAY;YACZ,UAAU;YACV,OAAO;YACP,YAAY;YACZ,SAAS;YACT,aAAa;SACd,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,gBAAkC;QAC3D,gCAAgC;QAChC,IAAI,gBAAgB,CAAC,YAAY,CAAC,YAAY,CAAC;YAAE,OAAO,YAAY,CAAC;QACrE,IAAI,gBAAgB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;YAChD,2EAA2E;YAC3E,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC;YAC1D,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC;YAEpD,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,OAAO,OAAO,CAAC;gBAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;oBAAE,OAAO,aAAa,CAAC;gBAC3D,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;oBAAE,OAAO,MAAM,CAAC;gBACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC;oBAAE,OAAO,QAAQ,CAAC;YAC5D,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC5C,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,OAAO,OAAO,CAAC;gBAClD,IAAI,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;oBAAE,OAAO,aAAa,CAAC;YAChE,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC;YAAE,OAAO,QAAQ,CAAC;QAE5D,oCAAoC;QACpC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC;QAC1D,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAAE,OAAO,YAAY,CAAC;QAC/D,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,mBAAmB,CAAC,gBAAkC;QAC5D,MAAM,YAAY,GAAqB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,EAAE,CAAC;QAExD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAEnD,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;QAE/C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,qDAAqD;YACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,QAAgB,CAAC;YAErB,IAAI,QAAQ,EAAE,CAAC;gBACb,4DAA4D;gBAC5D,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,4BAA4B;gBAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7B,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,CAAC;YAED,yBAAyB;YACzB,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAE1C,uDAAuD;YACvD,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAEjD,8BAA8B;YAC9B,MAAM,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,KAAyB,CAAC;YAE9B,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,eAAe,CAAC,YAAY,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,EAAE,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;YAE5F,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE;gBACrB,IAAI,EAAE,QAAQ;gBACd,UAAU;gBACV,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,iBAAiB,CAAC,gBAAkC;QAC1D,MAAM,UAAU,GAAmB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC;QAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAU,CAAC,cAAc,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAErC,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBAChC,SAAS;gBACT,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,cAAc,CAAC,gBAAkC;QACvD,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC;QAEzD,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YAE9B,IAAI,IAAI,KAAK,aAAa;gBAAE,SAAS;YAErC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,qBAAU,CAAC,cAAc,CAAC,CAAC;YAEhE,qDAAqD;YACrD,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClD,IAAI,UAAkB,CAAC;YAEvB,IAAI,cAAc,EAAE,CAAC;gBACnB,UAAU,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;gBACtC,8BAA8B;gBAC9B,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACzD,IAAI,YAAY,EAAE,CAAC;oBACjB,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,wDAAwD;gBACxD,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAChD,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC9B,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;gBACtC,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBAChE,yBAAyB;gBACzB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAClE,OAAO,GAAG,SAAS,KAAK,SAAS,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,iCAAiC;YACjC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAEpE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,UAAU;gBACV,SAAS;gBACT,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,eAAe,CAAC,QAAgB;QACtC,sCAAsC;QACtC,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAEzD,wBAAwB;QACxB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEvC,kBAAkB;QAClB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAE1C,yDAAyD;QACzD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,iFAAiF;QACjF,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClC,+CAA+C;YAC/C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAEO,mBAAmB,CAAC,QAAgB;QAC1C,MAAM,UAAU,GAAG;YACjB,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO;YAChE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM;SACnD,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/D,OAAO,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAEO,sBAAsB,CAAC,gBAAkC;QAC/D,OAAO,gBAAgB,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC;IACnE,CAAC;CACF;AArTD,sCAqTC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/module-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAU;gBAEb,WAAW,EAAE,MAAM;IAQ/B,OAAO,IAAI,UAAU,EAAE;IAcvB,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"module-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/module-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAU;gBAEb,WAAW,EAAE,MAAM;IAQ/B,OAAO,IAAI,UAAU,EAAE;IAcvB,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,0BAA0B;CAiCnC"}
|
|
@@ -42,6 +42,10 @@ class ModuleAnalyzer {
|
|
|
42
42
|
providers: this.extractArrayPropertyValues(configObject, 'providers'),
|
|
43
43
|
controllers: this.extractArrayPropertyValues(configObject, 'controllers'),
|
|
44
44
|
exports: this.extractArrayPropertyValues(configObject, 'exports'),
|
|
45
|
+
guards: this.extractArrayPropertyValues(configObject, 'guards'),
|
|
46
|
+
interceptors: this.extractArrayPropertyValues(configObject, 'interceptors'),
|
|
47
|
+
pipes: this.extractArrayPropertyValues(configObject, 'pipes'),
|
|
48
|
+
filters: this.extractArrayPropertyValues(configObject, 'filters'),
|
|
45
49
|
};
|
|
46
50
|
}
|
|
47
51
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/module-analyzer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"module-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/module-analyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -13,7 +13,7 @@ const program = new commander_1.Command();
|
|
|
13
13
|
program
|
|
14
14
|
.name('nest-d2')
|
|
15
15
|
.description('Generate D2 diagrams from NestJS projects')
|
|
16
|
-
.version('1.
|
|
16
|
+
.version('1.2.0');
|
|
17
17
|
program
|
|
18
18
|
.command('generate')
|
|
19
19
|
.description('Generate component and class diagrams')
|
|
@@ -39,46 +39,55 @@ program
|
|
|
39
39
|
// Check for interactive mode
|
|
40
40
|
let isInteractive = options.interactive;
|
|
41
41
|
let defaultTechnology = '';
|
|
42
|
-
let containerTitle =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
42
|
+
let containerTitle = '';
|
|
43
|
+
let modules = [];
|
|
44
|
+
// Analyze modules first (needed for both diagrams)
|
|
45
|
+
console.log('\nAnalyzing modules...');
|
|
46
|
+
const moduleAnalyzer = new module_analyzer_1.ModuleAnalyzer(projectPath);
|
|
47
|
+
modules = moduleAnalyzer.analyze();
|
|
48
|
+
console.log(`Found ${modules.length} modules`);
|
|
49
49
|
// Generate component diagram
|
|
50
50
|
if (!options.classOnly) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
// Enrich modules with metadata if interactive
|
|
51
|
+
containerTitle = await (0, interactive_1.promptForContainerTitle)();
|
|
52
|
+
if (!isInteractive) {
|
|
53
|
+
isInteractive = await (0, interactive_1.promptForInteractiveMode)();
|
|
54
|
+
}
|
|
56
55
|
if (isInteractive) {
|
|
56
|
+
defaultTechnology = await (0, interactive_1.promptForDefaultTechnology)();
|
|
57
|
+
// Check for existing component diagram and parse metadata
|
|
58
|
+
const existingDiagramPath = `${outputDir}/component-diagram.d2`;
|
|
59
|
+
const existingMetadataMap = (0, interactive_1.parseExistingD2File)(existingDiagramPath, containerTitle);
|
|
60
|
+
if (existingMetadataMap.size > 0) {
|
|
61
|
+
console.log('\n✓ Found existing component diagram with metadata');
|
|
62
|
+
}
|
|
57
63
|
console.log('\n=== Adding metadata to modules ===');
|
|
58
64
|
const enrichedModules = [];
|
|
59
65
|
for (const module of modules) {
|
|
60
|
-
const
|
|
66
|
+
const existingMetadata = existingMetadataMap.get(module.name);
|
|
67
|
+
const enriched = await (0, interactive_1.enrichModuleWithMetadata)(module, defaultTechnology, existingMetadata);
|
|
61
68
|
enrichedModules.push(enriched);
|
|
62
69
|
}
|
|
63
70
|
modules = enrichedModules;
|
|
64
71
|
}
|
|
65
72
|
const componentGen = new component_diagram_1.ComponentDiagramGenerator(containerTitle);
|
|
66
|
-
|
|
73
|
+
// Don't show nesting in interactive mode (only show tech + desc)
|
|
74
|
+
const componentD2 = componentGen.generate(modules, !isInteractive);
|
|
67
75
|
const componentPath = `${outputDir}/component-diagram.d2`;
|
|
68
76
|
(0, fs_1.writeFileSync)(componentPath, componentD2);
|
|
69
77
|
console.log(`\n✓ Component diagram saved to: ${componentPath}`);
|
|
70
78
|
}
|
|
71
|
-
// Generate class
|
|
79
|
+
// Generate class diagrams
|
|
72
80
|
if (!options.componentOnly) {
|
|
73
81
|
console.log('\nAnalyzing classes...');
|
|
82
|
+
// Prompt for class diagram options
|
|
83
|
+
const classOptions = await (0, interactive_1.promptForClassDiagramOptions)();
|
|
74
84
|
const classAnalyzer = new class_analyzer_1.ClassAnalyzer(projectPath);
|
|
75
|
-
const classes = classAnalyzer.analyze();
|
|
85
|
+
const classes = classAnalyzer.analyze(modules);
|
|
76
86
|
console.log(`Found ${classes.length} classes`);
|
|
77
|
-
const classGen = new class_diagram_1.ClassDiagramGenerator();
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
console.log(`✓ Class diagram saved to: ${classPath}`);
|
|
87
|
+
const classGen = new class_diagram_1.ClassDiagramGenerator(classOptions.includeAttributes, classOptions.includeMethods);
|
|
88
|
+
classGen.generateAll(classes, modules, outputDir);
|
|
89
|
+
console.log(`✓ Global class diagram saved to: ${outputDir}/class-diagram-global.d2`);
|
|
90
|
+
console.log(`✓ Component class diagrams saved to: ${outputDir}/class-diagrams/`);
|
|
82
91
|
}
|
|
83
92
|
console.log('\nDone! 🎉');
|
|
84
93
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAA0D;AAC1D,+BAA+B;AAC/B,iEAA6D;AAC7D,+DAA2D;AAC3D,sEAA2E;AAC3E,8DAAmE;AACnE,+
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAA0D;AAC1D,+BAA+B;AAC/B,iEAA6D;AAC7D,+DAA2D;AAC3D,sEAA2E;AAC3E,8DAAmE;AACnE,+CAOuB;AAGvB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACvE,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,EAAE,YAAY,CAAC;KAC5E,MAAM,CAAC,kBAAkB,EAAE,iCAAiC,CAAC;KAC7D,MAAM,CAAC,cAAc,EAAE,6BAA6B,CAAC;KACrD,MAAM,CAAC,mBAAmB,EAAE,6CAA6C,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;QAE3D,gCAAgC;QAChC,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,WAAW,gBAAgB,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,IAAA,cAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,6BAA6B;QAC7B,IAAI,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,OAAO,GAAiB,EAAE,CAAC;QAE/B,mDAAmD;QACnD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,cAAc,GAAG,IAAI,gCAAc,CAAC,WAAW,CAAC,CAAC;QACvD,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;QAE/C,6BAA6B;QAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,cAAc,GAAG,MAAM,IAAA,qCAAuB,GAAE,CAAC;YAEjD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,aAAa,GAAG,MAAM,IAAA,sCAAwB,GAAE,CAAC;YACnD,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAClB,iBAAiB,GAAG,MAAM,IAAA,wCAA0B,GAAE,CAAC;gBAEvD,0DAA0D;gBAC1D,MAAM,mBAAmB,GAAG,GAAG,SAAS,uBAAuB,CAAC;gBAChE,MAAM,mBAAmB,GAAG,IAAA,iCAAmB,EAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;gBAErF,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;gBACpE,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;gBACpD,MAAM,eAAe,GAAG,EAAE,CAAC;gBAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC9D,MAAM,QAAQ,GAAG,MAAM,IAAA,sCAAwB,EAC7C,MAAM,EACN,iBAAiB,EACjB,gBAAgB,CACjB,CAAC;oBACF,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,GAAG,eAAe,CAAC;YAC5B,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,6CAAyB,CAAC,cAAc,CAAC,CAAC;YACnE,iEAAiE;YACjE,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC;YAEnE,MAAM,aAAa,GAAG,GAAG,SAAS,uBAAuB,CAAC;YAC1D,IAAA,kBAAa,EAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,mCAAmC,aAAa,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YAEtC,mCAAmC;YACnC,MAAM,YAAY,GAAG,MAAM,IAAA,0CAA4B,GAAE,CAAC;YAE1D,MAAM,aAAa,GAAG,IAAI,8BAAa,CAAC,WAAW,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE/C,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,IAAI,qCAAqB,CACxC,YAAY,CAAC,iBAAiB,EAC9B,YAAY,CAAC,cAAc,CAC5B,CAAC;YACF,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAElD,OAAO,CAAC,GAAG,CAAC,oCAAoC,SAAS,0BAA0B,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,wCAAwC,SAAS,kBAAkB,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import { ClassInfo } from '../types';
|
|
1
|
+
import { ClassInfo, ModuleInfo } from '../types';
|
|
2
2
|
export declare class ClassDiagramGenerator {
|
|
3
|
-
|
|
4
|
-
private
|
|
3
|
+
private includeAttributes;
|
|
4
|
+
private includeMethods;
|
|
5
|
+
constructor(includeAttributes?: boolean, includeMethods?: boolean);
|
|
6
|
+
generateAll(classes: ClassInfo[], modules: ModuleInfo[], outputDir: string): void;
|
|
7
|
+
generateGlobal(classes: ClassInfo[], modules: ModuleInfo[]): string;
|
|
8
|
+
generateForComponent(module: ModuleInfo, allClasses: ClassInfo[], allModules: ModuleInfo[]): string;
|
|
9
|
+
private addClassDefinitions;
|
|
10
|
+
private addClassNode;
|
|
5
11
|
private sanitizeName;
|
|
12
|
+
private escapeTypeForD2;
|
|
6
13
|
}
|
|
7
14
|
//# sourceMappingURL=class-diagram.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-diagram.d.ts","sourceRoot":"","sources":["../../src/generators/class-diagram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"class-diagram.d.ts","sourceRoot":"","sources":["../../src/generators/class-diagram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGjD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,cAAc,CAAU;gBAEpB,iBAAiB,GAAE,OAAc,EAAE,cAAc,GAAE,OAAc;IAK7E,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAmBjF,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IAsEnE,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM;IA8GnG,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,YAAY;IAyCpB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,eAAe;CASxB"}
|
|
@@ -1,73 +1,242 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ClassDiagramGenerator = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
4
5
|
class ClassDiagramGenerator {
|
|
5
|
-
|
|
6
|
+
constructor(includeAttributes = true, includeMethods = true) {
|
|
7
|
+
this.includeAttributes = includeAttributes;
|
|
8
|
+
this.includeMethods = includeMethods;
|
|
9
|
+
}
|
|
10
|
+
generateAll(classes, modules, outputDir) {
|
|
11
|
+
// Create class-diagrams subdirectory
|
|
12
|
+
const classDiagramsDir = `${outputDir}/class-diagrams`;
|
|
13
|
+
if (!(0, fs_1.existsSync)(classDiagramsDir)) {
|
|
14
|
+
(0, fs_1.mkdirSync)(classDiagramsDir, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
// Generate global diagram
|
|
17
|
+
const globalD2 = this.generateGlobal(classes, modules);
|
|
18
|
+
(0, fs_1.writeFileSync)(`${outputDir}/class-diagram-global.d2`, globalD2);
|
|
19
|
+
// Generate per-component diagrams
|
|
20
|
+
for (const module of modules) {
|
|
21
|
+
const componentD2 = this.generateForComponent(module, classes, modules);
|
|
22
|
+
const sanitizedModuleName = this.sanitizeName(module.name);
|
|
23
|
+
(0, fs_1.writeFileSync)(`${classDiagramsDir}/${sanitizedModuleName}.d2`, componentD2);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
generateGlobal(classes, modules) {
|
|
6
27
|
const lines = [];
|
|
7
|
-
lines.push('# NestJS Class Diagram');
|
|
28
|
+
lines.push('# NestJS Class Diagram - Global');
|
|
8
29
|
lines.push('');
|
|
9
30
|
lines.push('direction: down');
|
|
10
31
|
lines.push('');
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
//
|
|
14
|
-
|
|
32
|
+
this.addClassDefinitions(lines);
|
|
33
|
+
lines.push('');
|
|
34
|
+
// Group classes by module
|
|
35
|
+
const moduleMap = new Map();
|
|
36
|
+
const ungrouped = [];
|
|
37
|
+
for (const classInfo of classes) {
|
|
38
|
+
if (classInfo.moduleContext) {
|
|
39
|
+
if (!moduleMap.has(classInfo.moduleContext)) {
|
|
40
|
+
moduleMap.set(classInfo.moduleContext, []);
|
|
41
|
+
}
|
|
42
|
+
moduleMap.get(classInfo.moduleContext).push(classInfo);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
ungrouped.push(classInfo);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Create expanded containers for each module
|
|
49
|
+
for (const [moduleName, moduleClasses] of moduleMap) {
|
|
50
|
+
const sanitizedModuleName = this.sanitizeName(moduleName);
|
|
51
|
+
lines.push(`${sanitizedModuleName}: ${moduleName} {`);
|
|
52
|
+
lines.push(' class: [container-expanded]');
|
|
53
|
+
lines.push('');
|
|
54
|
+
for (const classInfo of moduleClasses) {
|
|
55
|
+
this.addClassNode(lines, classInfo, ' ');
|
|
56
|
+
}
|
|
57
|
+
lines.push('}');
|
|
58
|
+
lines.push('');
|
|
59
|
+
}
|
|
60
|
+
// Add ungrouped classes
|
|
61
|
+
for (const classInfo of ungrouped) {
|
|
62
|
+
this.addClassNode(lines, classInfo, '');
|
|
63
|
+
}
|
|
64
|
+
// Add all edges with full paths
|
|
65
|
+
for (const classInfo of classes) {
|
|
15
66
|
const className = this.sanitizeName(classInfo.name);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
67
|
+
const sourceFullPath = classInfo.moduleContext
|
|
68
|
+
? `${this.sanitizeName(classInfo.moduleContext)}.${className}`
|
|
69
|
+
: className;
|
|
70
|
+
for (const dep of classInfo.dependencies) {
|
|
71
|
+
const depClassName = this.sanitizeName(dep.type);
|
|
72
|
+
const depClass = classes.find(c => c.name === dep.type);
|
|
73
|
+
if (!depClass)
|
|
74
|
+
continue;
|
|
75
|
+
const targetFullPath = depClass.moduleContext
|
|
76
|
+
? `${this.sanitizeName(depClass.moduleContext)}.${depClassName}`
|
|
77
|
+
: depClassName;
|
|
78
|
+
const style = dep.isOptional ? ' {style.stroke-dash: 3}' : '';
|
|
79
|
+
lines.push(`${sourceFullPath} -> ${targetFullPath}: depends on${style}`);
|
|
21
80
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
81
|
+
}
|
|
82
|
+
return lines.join('\n');
|
|
83
|
+
}
|
|
84
|
+
generateForComponent(module, allClasses, allModules) {
|
|
85
|
+
const lines = [];
|
|
86
|
+
lines.push(`# NestJS Class Diagram - ${module.name}`);
|
|
87
|
+
lines.push('');
|
|
88
|
+
lines.push('direction: down');
|
|
89
|
+
lines.push('');
|
|
90
|
+
this.addClassDefinitions(lines);
|
|
91
|
+
lines.push('');
|
|
92
|
+
// Get classes directly in this module
|
|
93
|
+
const moduleClasses = allClasses.filter(c => c.moduleContext === module.name);
|
|
94
|
+
// Get all dependencies of module classes
|
|
95
|
+
const allDependencies = new Set();
|
|
96
|
+
for (const classInfo of moduleClasses) {
|
|
97
|
+
for (const dep of classInfo.dependencies) {
|
|
98
|
+
allDependencies.add(dep.type);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Find dependency classes and group them by module
|
|
102
|
+
const dependencyClassesByModule = new Map();
|
|
103
|
+
const localDependencies = [];
|
|
104
|
+
for (const depName of allDependencies) {
|
|
105
|
+
const depClass = allClasses.find(c => c.name === depName);
|
|
106
|
+
if (!depClass)
|
|
107
|
+
continue;
|
|
108
|
+
if (depClass.moduleContext === module.name) {
|
|
109
|
+
// Already in our module, will be shown at root
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
else if (depClass.moduleContext) {
|
|
113
|
+
// From another module - group it
|
|
114
|
+
if (!dependencyClassesByModule.has(depClass.moduleContext)) {
|
|
115
|
+
dependencyClassesByModule.set(depClass.moduleContext, []);
|
|
29
116
|
}
|
|
117
|
+
dependencyClassesByModule.get(depClass.moduleContext).push(depClass);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// No module context - show at root
|
|
121
|
+
localDependencies.push(depClass);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Build a set of all modules that will be rendered as containers
|
|
125
|
+
const renderedModules = new Set();
|
|
126
|
+
renderedModules.add(module.name);
|
|
127
|
+
for (const depModuleName of dependencyClassesByModule.keys()) {
|
|
128
|
+
renderedModules.add(depModuleName);
|
|
129
|
+
}
|
|
130
|
+
// Create this module's container
|
|
131
|
+
const sanitizedModuleName = this.sanitizeName(module.name);
|
|
132
|
+
lines.push(`${sanitizedModuleName}: ${module.name} {`);
|
|
133
|
+
lines.push(' class: [container-expanded]');
|
|
134
|
+
lines.push('');
|
|
135
|
+
for (const classInfo of moduleClasses) {
|
|
136
|
+
this.addClassNode(lines, classInfo, ' ');
|
|
137
|
+
}
|
|
138
|
+
lines.push('}');
|
|
139
|
+
lines.push('');
|
|
140
|
+
// Create expanded containers for dependency modules
|
|
141
|
+
for (const [depModuleName, depClasses] of dependencyClassesByModule) {
|
|
142
|
+
const sanitizedDepModuleName = this.sanitizeName(depModuleName);
|
|
143
|
+
lines.push(`${sanitizedDepModuleName}: ${depModuleName} {`);
|
|
144
|
+
lines.push(' class: [container-expanded]');
|
|
145
|
+
lines.push('');
|
|
146
|
+
for (const classInfo of depClasses) {
|
|
147
|
+
this.addClassNode(lines, classInfo, ' ');
|
|
30
148
|
}
|
|
31
149
|
lines.push('}');
|
|
32
150
|
lines.push('');
|
|
33
151
|
}
|
|
34
|
-
//
|
|
35
|
-
for (const classInfo of
|
|
152
|
+
// Add ungrouped dependencies
|
|
153
|
+
for (const classInfo of localDependencies) {
|
|
154
|
+
this.addClassNode(lines, classInfo, '');
|
|
155
|
+
}
|
|
156
|
+
// Add edges - NO module prefixes since classes are nested inside containers
|
|
157
|
+
for (const classInfo of moduleClasses) {
|
|
36
158
|
const className = this.sanitizeName(classInfo.name);
|
|
159
|
+
const sourceFullPath = `${sanitizedModuleName}.${className}`;
|
|
37
160
|
for (const dep of classInfo.dependencies) {
|
|
38
161
|
const depClassName = this.sanitizeName(dep.type);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
162
|
+
const depClass = allClasses.find(c => c.name === dep.type);
|
|
163
|
+
if (!depClass)
|
|
164
|
+
continue;
|
|
165
|
+
let targetFullPath;
|
|
166
|
+
if (depClass.moduleContext && renderedModules.has(depClass.moduleContext)) {
|
|
167
|
+
targetFullPath = `${this.sanitizeName(depClass.moduleContext)}.${depClassName}`;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
targetFullPath = depClassName;
|
|
44
171
|
}
|
|
172
|
+
const style = dep.isOptional ? ' {style.stroke-dash: 3}' : '';
|
|
173
|
+
lines.push(`${sourceFullPath} -> ${targetFullPath}: depends on${style}`);
|
|
45
174
|
}
|
|
46
175
|
}
|
|
47
176
|
return lines.join('\n');
|
|
48
177
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
178
|
+
addClassDefinitions(lines) {
|
|
179
|
+
lines.push('classes: {');
|
|
180
|
+
lines.push(' container-expanded: {');
|
|
181
|
+
lines.push(' shape: rectangle');
|
|
182
|
+
lines.push(' style.border-radius: 32');
|
|
183
|
+
lines.push(' style.stroke-dash: 3');
|
|
184
|
+
lines.push(' label.near: bottom-left');
|
|
185
|
+
lines.push(' style.stroke: "#666666"');
|
|
186
|
+
lines.push(' style.font-color: "#333333"');
|
|
187
|
+
lines.push(' }');
|
|
188
|
+
lines.push('}');
|
|
189
|
+
}
|
|
190
|
+
addClassNode(lines, classInfo, indent) {
|
|
191
|
+
const className = this.sanitizeName(classInfo.name);
|
|
192
|
+
lines.push(`${indent}${className}: ${classInfo.name} {`);
|
|
193
|
+
lines.push(`${indent} shape: class`);
|
|
194
|
+
if (classInfo.isInjectable) {
|
|
195
|
+
lines.push(`${indent} style.fill: "#e3f2fd"`);
|
|
196
|
+
}
|
|
197
|
+
// Add properties/attributes
|
|
198
|
+
if (this.includeAttributes && classInfo.properties.length > 0) {
|
|
199
|
+
for (const prop of classInfo.properties) {
|
|
200
|
+
if (prop.isPrivate)
|
|
201
|
+
continue;
|
|
202
|
+
const readonly = prop.isReadonly ? 'readonly ' : '';
|
|
203
|
+
lines.push(`${indent} ${readonly}${prop.name}: ${this.escapeTypeForD2(prop.type)}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Add dependency injections
|
|
207
|
+
if (classInfo.dependencies.length > 0) {
|
|
208
|
+
lines.push(`${indent} # Dependencies`);
|
|
55
209
|
for (const dep of classInfo.dependencies) {
|
|
56
|
-
|
|
210
|
+
const optional = dep.isOptional ? '?' : '';
|
|
211
|
+
const token = dep.token ? ` (@Inject('${dep.token}'))` : '';
|
|
212
|
+
lines.push(`${indent} ${dep.name}${optional}: ${this.escapeTypeForD2(dep.type)}${token}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Add methods
|
|
216
|
+
if (this.includeMethods && classInfo.methods.length > 0) {
|
|
217
|
+
for (const method of classInfo.methods) {
|
|
218
|
+
if (method.isPrivate)
|
|
219
|
+
continue;
|
|
220
|
+
const params = method.parameters.join(', ');
|
|
221
|
+
lines.push(`${indent} ${method.name}(${params}): ${this.escapeTypeForD2(method.returnType)}`);
|
|
57
222
|
}
|
|
58
223
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const hasDependencies = classInfo.dependencies.length > 0;
|
|
62
|
-
const isReferenced = referencedTypes.has(classInfo.name);
|
|
63
|
-
return hasDependencies || isReferenced;
|
|
64
|
-
});
|
|
224
|
+
lines.push(`${indent}}`);
|
|
225
|
+
lines.push('');
|
|
65
226
|
}
|
|
66
227
|
sanitizeName(name) {
|
|
67
|
-
// Remove special characters and make valid D2 identifier
|
|
68
228
|
return name
|
|
69
229
|
.replace(/[^a-zA-Z0-9_]/g, '_')
|
|
70
|
-
.replace(/^(\d)/, '_$1');
|
|
230
|
+
.replace(/^(\d)/, '_$1');
|
|
231
|
+
}
|
|
232
|
+
escapeTypeForD2(type) {
|
|
233
|
+
// Check if this is an unnamed type (object literal type starting with {)
|
|
234
|
+
const trimmedType = type.trim();
|
|
235
|
+
if (trimmedType.startsWith('{')) {
|
|
236
|
+
// Escape curly brackets and wrap in backslash-escaped quotes
|
|
237
|
+
return `\\"${trimmedType.replace(/\{/g, '\\{').replace(/\}/g, '\\}')}\\"`;
|
|
238
|
+
}
|
|
239
|
+
return type;
|
|
71
240
|
}
|
|
72
241
|
}
|
|
73
242
|
exports.ClassDiagramGenerator = ClassDiagramGenerator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-diagram.js","sourceRoot":"","sources":["../../src/generators/class-diagram.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"class-diagram.js","sourceRoot":"","sources":["../../src/generators/class-diagram.ts"],"names":[],"mappings":"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"}
|
package/dist/interactive.d.ts
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { ModuleInfo } from './types';
|
|
2
|
+
interface ExistingMetadata {
|
|
3
|
+
technology?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function parseExistingD2File(filePath: string, containerName: string): Map<string, ExistingMetadata>;
|
|
2
7
|
export declare function promptForContainerTitle(): Promise<string>;
|
|
3
8
|
export declare function promptForInteractiveMode(): Promise<boolean>;
|
|
4
9
|
export declare function promptForDefaultTechnology(): Promise<string>;
|
|
5
|
-
export declare function
|
|
10
|
+
export declare function promptForClassDiagramOptions(): Promise<{
|
|
11
|
+
includeAttributes: boolean;
|
|
12
|
+
includeMethods: boolean;
|
|
13
|
+
}>;
|
|
14
|
+
export declare function enrichModuleWithMetadata(module: ModuleInfo, defaultTechnology: string, existingMetadata?: ExistingMetadata): Promise<ModuleInfo>;
|
|
15
|
+
export {};
|
|
6
16
|
//# sourceMappingURL=interactive.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAwG1G;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS/D;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC,CASjE;AAED,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CASlE;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAC,CAAC,CAoBnH;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,UAAU,EAClB,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,UAAU,CAAC,CAoCrB"}
|
package/dist/interactive.js
CHANGED
|
@@ -3,17 +3,114 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parseExistingD2File = parseExistingD2File;
|
|
6
7
|
exports.promptForContainerTitle = promptForContainerTitle;
|
|
7
8
|
exports.promptForInteractiveMode = promptForInteractiveMode;
|
|
8
9
|
exports.promptForDefaultTechnology = promptForDefaultTechnology;
|
|
10
|
+
exports.promptForClassDiagramOptions = promptForClassDiagramOptions;
|
|
9
11
|
exports.enrichModuleWithMetadata = enrichModuleWithMetadata;
|
|
10
12
|
const prompts_1 = __importDefault(require("prompts"));
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
function parseExistingD2File(filePath, containerName) {
|
|
15
|
+
const metadataMap = new Map();
|
|
16
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
17
|
+
return metadataMap;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
|
|
21
|
+
const lines = content.split('\n');
|
|
22
|
+
// Sanitize container name to match D2 identifier format
|
|
23
|
+
const sanitizedContainer = containerName.replace(/[^a-zA-Z0-9_]/g, '_').replace(/^(\d)/, '_$1');
|
|
24
|
+
let insideContainerExpanded = false;
|
|
25
|
+
let currentModule = null;
|
|
26
|
+
let inModuleBlock = false;
|
|
27
|
+
let braceDepth = 0;
|
|
28
|
+
for (let i = 0; i < lines.length; i++) {
|
|
29
|
+
const line = lines[i];
|
|
30
|
+
const trimmed = line.trim();
|
|
31
|
+
// Check if we're entering the container-expanded block
|
|
32
|
+
if (trimmed.startsWith(`${sanitizedContainer}:`) && trimmed.includes('|md')) {
|
|
33
|
+
insideContainerExpanded = true;
|
|
34
|
+
braceDepth = 0;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
// Track brace depth to know when we exit the container
|
|
38
|
+
if (insideContainerExpanded) {
|
|
39
|
+
if (trimmed === '{')
|
|
40
|
+
braceDepth++;
|
|
41
|
+
if (trimmed === '}') {
|
|
42
|
+
braceDepth--;
|
|
43
|
+
if (braceDepth === 0) {
|
|
44
|
+
insideContainerExpanded = false;
|
|
45
|
+
inModuleBlock = false;
|
|
46
|
+
currentModule = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Only parse modules inside the container-expanded block
|
|
51
|
+
if (!insideContainerExpanded)
|
|
52
|
+
continue;
|
|
53
|
+
// Detect module block start: Container.ModuleName: |md
|
|
54
|
+
if (trimmed.includes(': |md') && trimmed.startsWith(`${sanitizedContainer}.`)) {
|
|
55
|
+
const match = trimmed.match(new RegExp(`^${sanitizedContainer}\\.([^:]+):`));
|
|
56
|
+
if (match) {
|
|
57
|
+
currentModule = match[1].trim();
|
|
58
|
+
inModuleBlock = true;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Inside module block, look for metadata
|
|
63
|
+
if (inModuleBlock && currentModule) {
|
|
64
|
+
// Extract module name from markdown header (### ModuleName)
|
|
65
|
+
if (trimmed.startsWith('###')) {
|
|
66
|
+
const moduleName = trimmed.replace(/^###\s*/, '').trim();
|
|
67
|
+
if (!metadataMap.has(moduleName)) {
|
|
68
|
+
metadataMap.set(moduleName, {});
|
|
69
|
+
}
|
|
70
|
+
currentModule = moduleName;
|
|
71
|
+
}
|
|
72
|
+
// Extract technology: **[Component: NestJS]**
|
|
73
|
+
if (trimmed.includes('[Component:')) {
|
|
74
|
+
const match = trimmed.match(/\[Component:\s*([^\]]+)\]/);
|
|
75
|
+
if (match && currentModule) {
|
|
76
|
+
const metadata = metadataMap.get(currentModule) || {};
|
|
77
|
+
metadata.technology = match[1].trim();
|
|
78
|
+
metadataMap.set(currentModule, metadata);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Extract description (any line after technology that's not formatting)
|
|
82
|
+
if (currentModule && !trimmed.startsWith('###') &&
|
|
83
|
+
!trimmed.includes('[Component:') &&
|
|
84
|
+
!trimmed.includes('---') &&
|
|
85
|
+
!trimmed.includes('|') &&
|
|
86
|
+
!trimmed.includes('{') &&
|
|
87
|
+
!trimmed.includes('}') &&
|
|
88
|
+
!trimmed.includes('class:') &&
|
|
89
|
+
trimmed.length > 0) {
|
|
90
|
+
const metadata = metadataMap.get(currentModule) || {};
|
|
91
|
+
if (!metadata.description) {
|
|
92
|
+
metadata.description = trimmed;
|
|
93
|
+
metadataMap.set(currentModule, metadata);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// End of module block
|
|
97
|
+
if (trimmed === '| {') {
|
|
98
|
+
inModuleBlock = false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.warn('Warning: Could not parse existing D2 file:', error);
|
|
105
|
+
}
|
|
106
|
+
return metadataMap;
|
|
107
|
+
}
|
|
11
108
|
async function promptForContainerTitle() {
|
|
12
109
|
const response = await (0, prompts_1.default)({
|
|
13
110
|
type: 'text',
|
|
14
111
|
name: 'container',
|
|
15
112
|
message: 'Please name the container that represents this project',
|
|
16
|
-
initial:
|
|
113
|
+
initial: '',
|
|
17
114
|
});
|
|
18
115
|
return response.container;
|
|
19
116
|
}
|
|
@@ -35,38 +132,55 @@ async function promptForDefaultTechnology() {
|
|
|
35
132
|
});
|
|
36
133
|
return response.technology || '';
|
|
37
134
|
}
|
|
38
|
-
async function
|
|
135
|
+
async function promptForClassDiagramOptions() {
|
|
136
|
+
const responses = await (0, prompts_1.default)([
|
|
137
|
+
{
|
|
138
|
+
type: 'confirm',
|
|
139
|
+
name: 'includeAttributes',
|
|
140
|
+
message: 'Include class attributes/properties in diagrams?',
|
|
141
|
+
initial: true,
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
type: 'confirm',
|
|
145
|
+
name: 'includeMethods',
|
|
146
|
+
message: 'Include class methods in diagrams?',
|
|
147
|
+
initial: true,
|
|
148
|
+
}
|
|
149
|
+
]);
|
|
150
|
+
return {
|
|
151
|
+
includeAttributes: responses.includeAttributes ?? true,
|
|
152
|
+
includeMethods: responses.includeMethods ?? true,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
async function enrichModuleWithMetadata(module, defaultTechnology, existingMetadata) {
|
|
39
156
|
console.log(`\n--- ${module.name} ---`);
|
|
157
|
+
// Use existing metadata as fallback
|
|
158
|
+
const existingTech = existingMetadata?.technology || defaultTechnology || 'NestJS';
|
|
159
|
+
const existingDesc = existingMetadata?.description || '';
|
|
40
160
|
const questions = [];
|
|
41
|
-
// Technology question
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
questions.push({
|
|
52
|
-
type: 'text',
|
|
53
|
-
name: 'technology',
|
|
54
|
-
message: 'Technology (e.g., NestJS, Spring Boot):',
|
|
55
|
-
initial: 'NestJS',
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
// Description question
|
|
161
|
+
// Technology question with existing value as initial
|
|
162
|
+
questions.push({
|
|
163
|
+
type: 'text',
|
|
164
|
+
name: 'technology',
|
|
165
|
+
message: existingMetadata?.technology
|
|
166
|
+
? `Technology (press Enter to keep "${existingTech}"):`
|
|
167
|
+
: `Technology (press Enter for "${existingTech}"):`,
|
|
168
|
+
initial: existingTech,
|
|
169
|
+
});
|
|
170
|
+
// Description question with existing value as initial
|
|
59
171
|
questions.push({
|
|
60
172
|
type: 'text',
|
|
61
173
|
name: 'description',
|
|
62
|
-
message:
|
|
63
|
-
|
|
174
|
+
message: existingMetadata?.description
|
|
175
|
+
? `Description (press Enter to keep current):`
|
|
176
|
+
: 'Description (what does this module do?):',
|
|
177
|
+
initial: existingDesc,
|
|
64
178
|
});
|
|
65
179
|
const answers = await (0, prompts_1.default)(questions);
|
|
66
180
|
return {
|
|
67
181
|
...module,
|
|
68
|
-
technology: answers.technology ||
|
|
69
|
-
description: answers.description || '',
|
|
182
|
+
technology: answers.technology || existingTech,
|
|
183
|
+
description: answers.description || existingDesc || '',
|
|
70
184
|
};
|
|
71
185
|
}
|
|
72
186
|
//# sourceMappingURL=interactive.js.map
|
package/dist/interactive.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":";;;;;AASA,kDAwGC;AAED,0DASC;AAED,4DASC;AAED,gEASC;AAED,oEAoBC;AAED,4DAwCC;AAlND,sDAA8B;AAE9B,2BAA8C;AAO9C,SAAgB,mBAAmB,CAAC,QAAgB,EAAE,aAAqB;IACzE,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;IAExD,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,wDAAwD;QACxD,MAAM,kBAAkB,GAAG,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEhG,IAAI,uBAAuB,GAAG,KAAK,CAAC;QACpC,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,uDAAuD;YACvD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5E,uBAAuB,GAAG,IAAI,CAAC;gBAC/B,UAAU,GAAG,CAAC,CAAC;gBACf,SAAS;YACX,CAAC;YAED,uDAAuD;YACvD,IAAI,uBAAuB,EAAE,CAAC;gBAC5B,IAAI,OAAO,KAAK,GAAG;oBAAE,UAAU,EAAE,CAAC;gBAClC,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;oBACpB,UAAU,EAAE,CAAC;oBACb,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;wBACrB,uBAAuB,GAAG,KAAK,CAAC;wBAChC,aAAa,GAAG,KAAK,CAAC;wBACtB,aAAa,GAAG,IAAI,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,yDAAyD;YACzD,IAAI,CAAC,uBAAuB;gBAAE,SAAS;YAEvC,uDAAuD;YACvD,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC;gBAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,kBAAkB,aAAa,CAAC,CAAC,CAAC;gBAC7E,IAAI,KAAK,EAAE,CAAC;oBACV,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChC,aAAa,GAAG,IAAI,CAAC;oBACrB,SAAS;gBACX,CAAC;YACH,CAAC;YAED,yCAAyC;YACzC,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;gBACnC,4DAA4D;gBAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBACzD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;wBACjC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAClC,CAAC;oBACD,aAAa,GAAG,UAAU,CAAC;gBAC7B,CAAC;gBAED,8CAA8C;gBAC9C,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;oBACzD,IAAI,KAAK,IAAI,aAAa,EAAE,CAAC;wBAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;wBACtD,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBACtC,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;gBAED,wEAAwE;gBACxE,IAAI,aAAa,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;oBAC3C,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;oBAChC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACxB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACtB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACtB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACtB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC3B,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;oBACtD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;wBAC1B,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC;wBAC/B,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;gBAED,sBAAsB;gBACtB,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;oBACtB,aAAa,GAAG,KAAK,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,uBAAuB;IAC3C,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,wDAAwD;QACjE,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC5B,CAAC;AAEM,KAAK,UAAU,wBAAwB;IAC5C,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAAC;QAC7B,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,uEAAuE;QAChF,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,WAAW,CAAC;AAC9B,CAAC;AAEM,KAAK,UAAU,0BAA0B;IAC9C,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,+EAA+E;QACxF,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;AACnC,CAAC;AAEM,KAAK,UAAU,4BAA4B;IAChD,MAAM,SAAS,GAAG,MAAM,IAAA,iBAAO,EAAC;QAC9B;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,kDAAkD;YAC3D,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,oCAAoC;YAC7C,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,OAAO;QACL,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,IAAI,IAAI;QACtD,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,IAAI;KACjD,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,wBAAwB,CAC5C,MAAkB,EAClB,iBAAyB,EACzB,gBAAmC;IAEnC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;IAExC,oCAAoC;IACpC,MAAM,YAAY,GAAG,gBAAgB,EAAE,UAAU,IAAI,iBAAiB,IAAI,QAAQ,CAAC;IACnF,MAAM,YAAY,GAAG,gBAAgB,EAAE,WAAW,IAAI,EAAE,CAAC;IAEzD,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,qDAAqD;IACrD,SAAS,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,gBAAgB,EAAE,UAAU;YACnC,CAAC,CAAC,oCAAoC,YAAY,KAAK;YACvD,CAAC,CAAC,gCAAgC,YAAY,KAAK;QACrD,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;IAEH,sDAAsD;IACtD,SAAS,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,gBAAgB,EAAE,WAAW;YACpC,CAAC,CAAC,4CAA4C;YAC9C,CAAC,CAAC,0CAA0C;QAC9C,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,IAAA,iBAAO,EAAC,SAAS,CAAC,CAAC;IAEzC,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,YAAY;QAC9C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,YAAY,IAAI,EAAE;KACvD,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,6 +5,10 @@ export interface ModuleInfo {
|
|
|
5
5
|
providers: string[];
|
|
6
6
|
controllers: string[];
|
|
7
7
|
exports: string[];
|
|
8
|
+
guards?: string[];
|
|
9
|
+
interceptors?: string[];
|
|
10
|
+
pipes?: string[];
|
|
11
|
+
filters?: string[];
|
|
8
12
|
technology?: string;
|
|
9
13
|
description?: string;
|
|
10
14
|
}
|
|
@@ -13,6 +17,22 @@ export interface ClassInfo {
|
|
|
13
17
|
filePath: string;
|
|
14
18
|
dependencies: DependencyInfo[];
|
|
15
19
|
isInjectable: boolean;
|
|
20
|
+
classType?: 'controller' | 'service' | 'guard' | 'interceptor' | 'pipe' | 'filter' | 'middleware' | 'other';
|
|
21
|
+
moduleContext?: string;
|
|
22
|
+
properties: PropertyInfo[];
|
|
23
|
+
methods: MethodInfo[];
|
|
24
|
+
}
|
|
25
|
+
export interface PropertyInfo {
|
|
26
|
+
name: string;
|
|
27
|
+
type: string;
|
|
28
|
+
isPrivate: boolean;
|
|
29
|
+
isReadonly: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface MethodInfo {
|
|
32
|
+
name: string;
|
|
33
|
+
returnType: string;
|
|
34
|
+
isPrivate: boolean;
|
|
35
|
+
parameters: string[];
|
|
16
36
|
}
|
|
17
37
|
export interface DependencyInfo {
|
|
18
38
|
name: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IAC5G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nestjs-d2-diagrams",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Generate D2 component and class diagrams from NestJS projects",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"bin": {
|
|
@@ -20,6 +20,11 @@
|
|
|
20
20
|
},
|
|
21
21
|
"homepage": "https://github.com/TSYF/NestJS-D2-Diagrams#readme",
|
|
22
22
|
"author": "Tomás Yañez <tsyf1999@gmail.com>",
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"dev": "tsc --watch",
|
|
26
|
+
"prepublishOnly": "npm run build"
|
|
27
|
+
},
|
|
23
28
|
"keywords": [
|
|
24
29
|
"nestjs",
|
|
25
30
|
"d2",
|
|
@@ -38,9 +43,5 @@
|
|
|
38
43
|
"@types/node": "^20.10.0",
|
|
39
44
|
"@types/prompts": "^2.4.9",
|
|
40
45
|
"typescript": "^5.3.0"
|
|
41
|
-
},
|
|
42
|
-
"scripts": {
|
|
43
|
-
"build": "tsc",
|
|
44
|
-
"dev": "tsc --watch"
|
|
45
46
|
}
|
|
46
|
-
}
|
|
47
|
+
}
|