cli-node-graph 1.0.1
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/README.md +69 -0
- package/dist/analysis/CircularDependencyAnalyzer.d.ts +13 -0
- package/dist/analysis/CircularDependencyAnalyzer.d.ts.map +1 -0
- package/dist/analysis/CircularDependencyAnalyzer.js +15 -0
- package/dist/analysis/CircularDependencyAnalyzer.js.map +1 -0
- package/dist/analysis/DeadCodeAnalyzer.d.ts +13 -0
- package/dist/analysis/DeadCodeAnalyzer.d.ts.map +1 -0
- package/dist/analysis/DeadCodeAnalyzer.js +37 -0
- package/dist/analysis/DeadCodeAnalyzer.js.map +1 -0
- package/dist/analysis/DependencyAnalyzer.d.ts +16 -0
- package/dist/analysis/DependencyAnalyzer.d.ts.map +1 -0
- package/dist/analysis/DependencyAnalyzer.js +26 -0
- package/dist/analysis/DependencyAnalyzer.js.map +1 -0
- package/dist/analysis/ImpactAnalyzer.d.ts +16 -0
- package/dist/analysis/ImpactAnalyzer.d.ts.map +1 -0
- package/dist/analysis/ImpactAnalyzer.js +26 -0
- package/dist/analysis/ImpactAnalyzer.js.map +1 -0
- package/dist/analysis/LayerViolationAnalyzer.d.ts +31 -0
- package/dist/analysis/LayerViolationAnalyzer.d.ts.map +1 -0
- package/dist/analysis/LayerViolationAnalyzer.js +71 -0
- package/dist/analysis/LayerViolationAnalyzer.js.map +1 -0
- package/dist/cli/ProjectLoader.d.ts +13 -0
- package/dist/cli/ProjectLoader.d.ts.map +1 -0
- package/dist/cli/ProjectLoader.js +48 -0
- package/dist/cli/ProjectLoader.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +139 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/AnalysisConfig.d.ts +22 -0
- package/dist/config/AnalysisConfig.d.ts.map +1 -0
- package/dist/config/AnalysisConfig.js +6 -0
- package/dist/config/AnalysisConfig.js.map +1 -0
- package/dist/exporters/CytoscapeExporter.d.ts +18 -0
- package/dist/exporters/CytoscapeExporter.d.ts.map +1 -0
- package/dist/exporters/CytoscapeExporter.js +85 -0
- package/dist/exporters/CytoscapeExporter.js.map +1 -0
- package/dist/exporters/DotExporter.d.ts +13 -0
- package/dist/exporters/DotExporter.d.ts.map +1 -0
- package/dist/exporters/DotExporter.js +38 -0
- package/dist/exporters/DotExporter.js.map +1 -0
- package/dist/exporters/GraphExporter.d.ts +7 -0
- package/dist/exporters/GraphExporter.d.ts.map +1 -0
- package/dist/exporters/GraphExporter.js +2 -0
- package/dist/exporters/GraphExporter.js.map +1 -0
- package/dist/exporters/GraphMLExporter.d.ts +8 -0
- package/dist/exporters/GraphMLExporter.d.ts.map +1 -0
- package/dist/exporters/GraphMLExporter.js +30 -0
- package/dist/exporters/GraphMLExporter.js.map +1 -0
- package/dist/exporters/JsonExporter.d.ts +8 -0
- package/dist/exporters/JsonExporter.d.ts.map +1 -0
- package/dist/exporters/JsonExporter.js +16 -0
- package/dist/exporters/JsonExporter.js.map +1 -0
- package/dist/graph/EdgeFactory.d.ts +13 -0
- package/dist/graph/EdgeFactory.d.ts.map +1 -0
- package/dist/graph/EdgeFactory.js +15 -0
- package/dist/graph/EdgeFactory.js.map +1 -0
- package/dist/graph/Graph.d.ts +37 -0
- package/dist/graph/Graph.d.ts.map +1 -0
- package/dist/graph/Graph.js +137 -0
- package/dist/graph/Graph.js.map +1 -0
- package/dist/graph/GraphAlgorithms.d.ts +28 -0
- package/dist/graph/GraphAlgorithms.d.ts.map +1 -0
- package/dist/graph/GraphAlgorithms.js +233 -0
- package/dist/graph/GraphAlgorithms.js.map +1 -0
- package/dist/graph/GraphBuilder.d.ts +10 -0
- package/dist/graph/GraphBuilder.d.ts.map +1 -0
- package/dist/graph/GraphBuilder.js +71 -0
- package/dist/graph/GraphBuilder.js.map +1 -0
- package/dist/graph/NodeFactory.d.ts +21 -0
- package/dist/graph/NodeFactory.d.ts.map +1 -0
- package/dist/graph/NodeFactory.js +53 -0
- package/dist/graph/NodeFactory.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/model/EdgeKind.d.ts +22 -0
- package/dist/model/EdgeKind.d.ts.map +1 -0
- package/dist/model/EdgeKind.js +23 -0
- package/dist/model/EdgeKind.js.map +1 -0
- package/dist/model/GraphEdge.d.ts +22 -0
- package/dist/model/GraphEdge.d.ts.map +1 -0
- package/dist/model/GraphEdge.js +2 -0
- package/dist/model/GraphEdge.js.map +1 -0
- package/dist/model/GraphNode.d.ts +22 -0
- package/dist/model/GraphNode.d.ts.map +1 -0
- package/dist/model/GraphNode.js +2 -0
- package/dist/model/GraphNode.js.map +1 -0
- package/dist/model/NodeKind.d.ts +21 -0
- package/dist/model/NodeKind.d.ts.map +1 -0
- package/dist/model/NodeKind.js +22 -0
- package/dist/model/NodeKind.js.map +1 -0
- package/dist/parser/ASTWalker.d.ts +21 -0
- package/dist/parser/ASTWalker.d.ts.map +1 -0
- package/dist/parser/ASTWalker.js +23 -0
- package/dist/parser/ASTWalker.js.map +1 -0
- package/dist/parser/ProgramFactory.d.ts +15 -0
- package/dist/parser/ProgramFactory.d.ts.map +1 -0
- package/dist/parser/ProgramFactory.js +65 -0
- package/dist/parser/ProgramFactory.js.map +1 -0
- package/dist/parser/visitors/CallVisitor.d.ts +17 -0
- package/dist/parser/visitors/CallVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/CallVisitor.js +111 -0
- package/dist/parser/visitors/CallVisitor.js.map +1 -0
- package/dist/parser/visitors/ClassVisitor.d.ts +14 -0
- package/dist/parser/visitors/ClassVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/ClassVisitor.js +87 -0
- package/dist/parser/visitors/ClassVisitor.js.map +1 -0
- package/dist/parser/visitors/DecoratorVisitor.d.ts +13 -0
- package/dist/parser/visitors/DecoratorVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/DecoratorVisitor.js +65 -0
- package/dist/parser/visitors/DecoratorVisitor.js.map +1 -0
- package/dist/parser/visitors/EnumVisitor.d.ts +11 -0
- package/dist/parser/visitors/EnumVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/EnumVisitor.js +26 -0
- package/dist/parser/visitors/EnumVisitor.js.map +1 -0
- package/dist/parser/visitors/ExportVisitor.d.ts +16 -0
- package/dist/parser/visitors/ExportVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/ExportVisitor.js +95 -0
- package/dist/parser/visitors/ExportVisitor.js.map +1 -0
- package/dist/parser/visitors/FunctionVisitor.d.ts +14 -0
- package/dist/parser/visitors/FunctionVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/FunctionVisitor.js +74 -0
- package/dist/parser/visitors/FunctionVisitor.js.map +1 -0
- package/dist/parser/visitors/HeritageVisitor.d.ts +14 -0
- package/dist/parser/visitors/HeritageVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/HeritageVisitor.js +87 -0
- package/dist/parser/visitors/HeritageVisitor.js.map +1 -0
- package/dist/parser/visitors/ImportVisitor.d.ts +14 -0
- package/dist/parser/visitors/ImportVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/ImportVisitor.js +96 -0
- package/dist/parser/visitors/ImportVisitor.js.map +1 -0
- package/dist/parser/visitors/InterfaceVisitor.d.ts +11 -0
- package/dist/parser/visitors/InterfaceVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/InterfaceVisitor.js +28 -0
- package/dist/parser/visitors/InterfaceVisitor.js.map +1 -0
- package/dist/parser/visitors/MethodVisitor.d.ts +11 -0
- package/dist/parser/visitors/MethodVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/MethodVisitor.js +30 -0
- package/dist/parser/visitors/MethodVisitor.js.map +1 -0
- package/dist/parser/visitors/TypeReferenceVisitor.d.ts +15 -0
- package/dist/parser/visitors/TypeReferenceVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/TypeReferenceVisitor.js +85 -0
- package/dist/parser/visitors/TypeReferenceVisitor.js.map +1 -0
- package/dist/parser/visitors/VariableVisitor.d.ts +11 -0
- package/dist/parser/visitors/VariableVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/VariableVisitor.js +27 -0
- package/dist/parser/visitors/VariableVisitor.js.map +1 -0
- package/dist/parser/visitors/context.d.ts +54 -0
- package/dist/parser/visitors/context.d.ts.map +1 -0
- package/dist/parser/visitors/context.js +117 -0
- package/dist/parser/visitors/context.js.map +1 -0
- package/dist/resolver/ModuleResolver.d.ts +16 -0
- package/dist/resolver/ModuleResolver.d.ts.map +1 -0
- package/dist/resolver/ModuleResolver.js +40 -0
- package/dist/resolver/ModuleResolver.js.map +1 -0
- package/dist/resolver/SymbolResolver.d.ts +15 -0
- package/dist/resolver/SymbolResolver.d.ts.map +1 -0
- package/dist/resolver/SymbolResolver.js +62 -0
- package/dist/resolver/SymbolResolver.js.map +1 -0
- package/dist/resolver/TypeResolver.d.ts +13 -0
- package/dist/resolver/TypeResolver.d.ts.map +1 -0
- package/dist/resolver/TypeResolver.js +32 -0
- package/dist/resolver/TypeResolver.js.map +1 -0
- package/dist/utils/cache.d.ts +12 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +38 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/id.d.ts +7 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +15 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/path.d.ts +9 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +18 -0
- package/dist/utils/path.js.map +1 -0
- package/docs/ARCHITECTURE.md +100 -0
- package/docs/CLI.md +62 -0
- package/package.json +58 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { EdgeKind } from '../../model/EdgeKind.js';
|
|
3
|
+
import { addLocatedEdge, ensureFileNode, registerSymbolNode } from './context.js';
|
|
4
|
+
import { NodeKind } from '../../model/NodeKind.js';
|
|
5
|
+
import { toPosixPath } from '../../utils/path.js';
|
|
6
|
+
/** Detects export declarations and re-exports. */
|
|
7
|
+
export class ExportVisitor {
|
|
8
|
+
ctx;
|
|
9
|
+
name = 'ExportVisitor';
|
|
10
|
+
constructor(ctx) {
|
|
11
|
+
this.ctx = ctx;
|
|
12
|
+
}
|
|
13
|
+
visit(node, vctx) {
|
|
14
|
+
if (ts.isExportDeclaration(node)) {
|
|
15
|
+
this.handleExportDeclaration(node, vctx);
|
|
16
|
+
}
|
|
17
|
+
else if (this.isExportedNode(node)) {
|
|
18
|
+
this.handleExportedDeclaration(node, vctx);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
isExportedNode(node) {
|
|
22
|
+
if (!ts.canHaveModifiers(node))
|
|
23
|
+
return false;
|
|
24
|
+
const declaration = node;
|
|
25
|
+
return !!(ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Export);
|
|
26
|
+
}
|
|
27
|
+
handleExportDeclaration(node, vctx) {
|
|
28
|
+
const sourceFile = vctx.sourceFile;
|
|
29
|
+
const filePath = toPosixPath(sourceFile.fileName);
|
|
30
|
+
const fileId = ensureFileNode(this.ctx, filePath);
|
|
31
|
+
if (node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) {
|
|
32
|
+
const specifier = node.moduleSpecifier.text;
|
|
33
|
+
const targetId = this.resolveModuleTarget(specifier, vctx);
|
|
34
|
+
if (targetId) {
|
|
35
|
+
addLocatedEdge(this.ctx, {
|
|
36
|
+
source: fileId,
|
|
37
|
+
target: targetId,
|
|
38
|
+
kind: EdgeKind.EXPORTS,
|
|
39
|
+
sourceFile,
|
|
40
|
+
node,
|
|
41
|
+
extra: { reExport: true, moduleSpecifier: specifier },
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
handleExportedDeclaration(node, vctx) {
|
|
47
|
+
const sourceFile = vctx.sourceFile;
|
|
48
|
+
const filePath = toPosixPath(sourceFile.fileName);
|
|
49
|
+
const fileId = ensureFileNode(this.ctx, filePath);
|
|
50
|
+
let name;
|
|
51
|
+
if (ts.isVariableStatement(node)) {
|
|
52
|
+
for (const decl of node.declarationList.declarations) {
|
|
53
|
+
if (ts.isIdentifier(decl.name)) {
|
|
54
|
+
name = decl.name.text;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if ('name' in node && node.name && ts.isIdentifier(node.name)) {
|
|
59
|
+
name = node.name.text;
|
|
60
|
+
}
|
|
61
|
+
if (name) {
|
|
62
|
+
addLocatedEdge(this.ctx, {
|
|
63
|
+
source: fileId,
|
|
64
|
+
target: registerSymbolNode(this.ctx, {
|
|
65
|
+
kind: this.inferKind(node),
|
|
66
|
+
name,
|
|
67
|
+
node,
|
|
68
|
+
sourceFile,
|
|
69
|
+
metadata: { exported: true },
|
|
70
|
+
}),
|
|
71
|
+
kind: EdgeKind.EXPORTS,
|
|
72
|
+
sourceFile,
|
|
73
|
+
node,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
inferKind(node) {
|
|
78
|
+
if (ts.isClassDeclaration(node))
|
|
79
|
+
return NodeKind.Class;
|
|
80
|
+
if (ts.isInterfaceDeclaration(node))
|
|
81
|
+
return NodeKind.Interface;
|
|
82
|
+
if (ts.isEnumDeclaration(node))
|
|
83
|
+
return NodeKind.Enum;
|
|
84
|
+
if (ts.isFunctionDeclaration(node))
|
|
85
|
+
return NodeKind.Function;
|
|
86
|
+
if (ts.isTypeAliasDeclaration(node))
|
|
87
|
+
return NodeKind.TypeAlias;
|
|
88
|
+
return NodeKind.Variable;
|
|
89
|
+
}
|
|
90
|
+
resolveModuleTarget(specifier, vctx) {
|
|
91
|
+
const resolved = this.ctx.moduleResolver.resolveImport(specifier, vctx.sourceFile.fileName, vctx.program);
|
|
92
|
+
return resolved ? ensureFileNode(this.ctx, resolved) : undefined;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=ExportVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportVisitor.js","sourceRoot":"","sources":["../../../src/parser/visitors/ExportVisitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ASTVisitor, VisitorContext } from '../ASTWalker.js';
|
|
3
|
+
import type { GraphBuildContext } from './context.js';
|
|
4
|
+
/** Captures function declarations including overloads. */
|
|
5
|
+
export declare class FunctionVisitor implements ASTVisitor {
|
|
6
|
+
private readonly ctx;
|
|
7
|
+
readonly name = "FunctionVisitor";
|
|
8
|
+
constructor(ctx: GraphBuildContext);
|
|
9
|
+
visit(node: ts.Node, vctx: VisitorContext): void;
|
|
10
|
+
private handleFunction;
|
|
11
|
+
private handleFunctionExpression;
|
|
12
|
+
private linkReturnType;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=FunctionVisitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FunctionVisitor.d.ts","sourceRoot":"","sources":["../../../src/parser/visitors/FunctionVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,0DAA0D;AAC1D,qBAAa,eAAgB,YAAW,UAAU;IAGpC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,QAAQ,CAAC,IAAI,qBAAqB;gBAEL,GAAG,EAAE,iBAAiB;IAEnD,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAQhD,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,cAAc;CA0BvB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { EdgeKind } from '../../model/EdgeKind.js';
|
|
3
|
+
import { NodeKind } from '../../model/NodeKind.js';
|
|
4
|
+
import { addLocatedEdge, registerSymbolNode } from './context.js';
|
|
5
|
+
/** Captures function declarations including overloads. */
|
|
6
|
+
export class FunctionVisitor {
|
|
7
|
+
ctx;
|
|
8
|
+
name = 'FunctionVisitor';
|
|
9
|
+
constructor(ctx) {
|
|
10
|
+
this.ctx = ctx;
|
|
11
|
+
}
|
|
12
|
+
visit(node, vctx) {
|
|
13
|
+
if (ts.isFunctionDeclaration(node) && node.name) {
|
|
14
|
+
this.handleFunction(node, vctx);
|
|
15
|
+
}
|
|
16
|
+
else if (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {
|
|
17
|
+
this.handleFunctionExpression(node, vctx);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
handleFunction(node, vctx) {
|
|
21
|
+
if (!node.name || !ts.isIdentifier(node.name))
|
|
22
|
+
return;
|
|
23
|
+
const name = node.name.text;
|
|
24
|
+
const fnId = registerSymbolNode(this.ctx, {
|
|
25
|
+
kind: NodeKind.Function,
|
|
26
|
+
name,
|
|
27
|
+
node,
|
|
28
|
+
sourceFile: vctx.sourceFile,
|
|
29
|
+
metadata: {
|
|
30
|
+
async: !!(node.modifiers && node.modifiers.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)),
|
|
31
|
+
generator: !!(node.asteriskToken),
|
|
32
|
+
exported: ts.canHaveModifiers(node) && !!(ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Export),
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
this.ctx.symbolNodeMap.set(`${vctx.sourceFile.fileName}:${name}`, fnId);
|
|
36
|
+
if (node.type) {
|
|
37
|
+
this.linkReturnType(fnId, node.type, vctx, node);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
handleFunctionExpression(node, vctx) {
|
|
41
|
+
const parent = node.parent;
|
|
42
|
+
if (ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name)) {
|
|
43
|
+
registerSymbolNode(this.ctx, {
|
|
44
|
+
kind: NodeKind.Function,
|
|
45
|
+
name: parent.name.text,
|
|
46
|
+
node,
|
|
47
|
+
sourceFile: vctx.sourceFile,
|
|
48
|
+
metadata: {
|
|
49
|
+
async: !!(node.modifiers && node.modifiers.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)),
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
linkReturnType(fnId, typeNode, vctx, node) {
|
|
55
|
+
const type = vctx.checker.getTypeFromTypeNode(typeNode);
|
|
56
|
+
const typeName = vctx.checker.typeToString(type);
|
|
57
|
+
const typeId = `Type:${typeName}`;
|
|
58
|
+
if (!this.ctx.graph.getNode(typeId)) {
|
|
59
|
+
this.ctx.graph.addNode(this.ctx.nodeFactory.create({
|
|
60
|
+
kind: NodeKind.TypeAlias,
|
|
61
|
+
label: typeName,
|
|
62
|
+
idOverride: typeId,
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
addLocatedEdge(this.ctx, {
|
|
66
|
+
source: fnId,
|
|
67
|
+
target: typeId,
|
|
68
|
+
kind: EdgeKind.RETURNS,
|
|
69
|
+
sourceFile: vctx.sourceFile,
|
|
70
|
+
node,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=FunctionVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FunctionVisitor.js","sourceRoot":"","sources":["../../../src/parser/visitors/FunctionVisitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ASTVisitor, VisitorContext } from '../ASTWalker.js';
|
|
3
|
+
import type { GraphBuildContext } from './context.js';
|
|
4
|
+
/** Captures extends/implements heritage clauses. */
|
|
5
|
+
export declare class HeritageVisitor implements ASTVisitor {
|
|
6
|
+
private readonly ctx;
|
|
7
|
+
readonly name = "HeritageVisitor";
|
|
8
|
+
constructor(ctx: GraphBuildContext);
|
|
9
|
+
visit(node: ts.Node, vctx: VisitorContext): void;
|
|
10
|
+
private handleClassHeritage;
|
|
11
|
+
private handleInterfaceHeritage;
|
|
12
|
+
private resolveHeritageType;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=HeritageVisitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeritageVisitor.d.ts","sourceRoot":"","sources":["../../../src/parser/visitors/HeritageVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,oDAAoD;AACpD,qBAAa,eAAgB,YAAW,UAAU;IAGpC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,QAAQ,CAAC,IAAI,qBAAqB;gBAEL,GAAG,EAAE,iBAAiB;IAEnD,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAQhD,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,mBAAmB;CAsB5B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { EdgeKind } from '../../model/EdgeKind.js';
|
|
3
|
+
import { NodeKind } from '../../model/NodeKind.js';
|
|
4
|
+
import { addLocatedEdge, registerSymbolNode } from './context.js';
|
|
5
|
+
/** Captures extends/implements heritage clauses. */
|
|
6
|
+
export class HeritageVisitor {
|
|
7
|
+
ctx;
|
|
8
|
+
name = 'HeritageVisitor';
|
|
9
|
+
constructor(ctx) {
|
|
10
|
+
this.ctx = ctx;
|
|
11
|
+
}
|
|
12
|
+
visit(node, vctx) {
|
|
13
|
+
if (ts.isClassDeclaration(node) && node.name) {
|
|
14
|
+
this.handleClassHeritage(node, vctx);
|
|
15
|
+
}
|
|
16
|
+
else if (ts.isInterfaceDeclaration(node) && node.name) {
|
|
17
|
+
this.handleInterfaceHeritage(node, vctx);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
handleClassHeritage(node, vctx) {
|
|
21
|
+
const classId = registerSymbolNode(this.ctx, {
|
|
22
|
+
kind: NodeKind.Class,
|
|
23
|
+
name: node.name.text,
|
|
24
|
+
node,
|
|
25
|
+
sourceFile: vctx.sourceFile,
|
|
26
|
+
});
|
|
27
|
+
if (node.heritageClauses) {
|
|
28
|
+
for (const clause of node.heritageClauses) {
|
|
29
|
+
const kind = clause.token === ts.SyntaxKind.ExtendsKeyword ? EdgeKind.EXTENDS : EdgeKind.IMPLEMENTS;
|
|
30
|
+
for (const type of clause.types) {
|
|
31
|
+
const targetId = this.resolveHeritageType(type, vctx);
|
|
32
|
+
if (targetId) {
|
|
33
|
+
addLocatedEdge(this.ctx, {
|
|
34
|
+
source: classId,
|
|
35
|
+
target: targetId,
|
|
36
|
+
kind,
|
|
37
|
+
sourceFile: vctx.sourceFile,
|
|
38
|
+
node: type,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
handleInterfaceHeritage(node, vctx) {
|
|
46
|
+
const interfaceId = registerSymbolNode(this.ctx, {
|
|
47
|
+
kind: NodeKind.Interface,
|
|
48
|
+
name: node.name.text,
|
|
49
|
+
node,
|
|
50
|
+
sourceFile: vctx.sourceFile,
|
|
51
|
+
});
|
|
52
|
+
if (node.heritageClauses) {
|
|
53
|
+
for (const clause of node.heritageClauses) {
|
|
54
|
+
for (const type of clause.types) {
|
|
55
|
+
const targetId = this.resolveHeritageType(type, vctx);
|
|
56
|
+
if (targetId) {
|
|
57
|
+
addLocatedEdge(this.ctx, {
|
|
58
|
+
source: interfaceId,
|
|
59
|
+
target: targetId,
|
|
60
|
+
kind: EdgeKind.EXTENDS,
|
|
61
|
+
sourceFile: vctx.sourceFile,
|
|
62
|
+
node: type,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
resolveHeritageType(type, _vctx) {
|
|
70
|
+
const symbol = this.ctx.symbolResolver.getSymbolAtLocation(type.expression);
|
|
71
|
+
if (!symbol)
|
|
72
|
+
return undefined;
|
|
73
|
+
const resolved = this.ctx.symbolResolver.resolveAlias(symbol);
|
|
74
|
+
const decl = this.ctx.symbolResolver.getDeclaration(resolved);
|
|
75
|
+
if (!decl)
|
|
76
|
+
return undefined;
|
|
77
|
+
const name = this.ctx.symbolResolver.getSymbolName(resolved);
|
|
78
|
+
const kind = symbol.flags & ts.SymbolFlags.Interface ? NodeKind.Interface : NodeKind.Class;
|
|
79
|
+
return registerSymbolNode(this.ctx, {
|
|
80
|
+
kind,
|
|
81
|
+
name,
|
|
82
|
+
node: decl,
|
|
83
|
+
sourceFile: decl.getSourceFile(),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=HeritageVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeritageVisitor.js","sourceRoot":"","sources":["../../../src/parser/visitors/HeritageVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElE,oDAAoD;AACpD,MAAM,OAAO,eAAe;IAGG;IAFpB,IAAI,GAAG,iBAAiB,CAAC;IAElC,YAA6B,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;IAAG,CAAC;IAEvD,KAAK,CAAC,IAAa,EAAE,IAAoB;QACvC,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7C,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,IAAyB,EAAE,IAAoB;QACzE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE;YAC3C,IAAI,EAAE,QAAQ,CAAC,KAAK;YACpB,IAAI,EAAE,IAAI,CAAC,IAAK,CAAC,IAAI;YACrB,IAAI;YACJ,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1C,MAAM,IAAI,GACR,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACzF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACtD,IAAI,QAAQ,EAAE,CAAC;wBACb,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;4BACvB,MAAM,EAAE,OAAO;4BACf,MAAM,EAAE,QAAQ;4BAChB,IAAI;4BACJ,UAAU,EAAE,IAAI,CAAC,UAAU;4BAC3B,IAAI,EAAE,IAAI;yBACX,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,IAA6B,EAAE,IAAoB;QACjF,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/C,IAAI,EAAE,QAAQ,CAAC,SAAS;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;YACpB,IAAI;YACJ,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACtD,IAAI,QAAQ,EAAE,CAAC;wBACb,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;4BACvB,MAAM,EAAE,WAAW;4BACnB,MAAM,EAAE,QAAQ;4BAChB,IAAI,EAAE,QAAQ,CAAC,OAAO;4BACtB,UAAU,EAAE,IAAI,CAAC,UAAU;4BAC3B,IAAI,EAAE,IAAI;yBACX,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,mBAAmB,CACzB,IAAoC,EACpC,KAAqB;QAErB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,IAAI,GACR,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEhF,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE;YAClC,IAAI;YACJ,IAAI;YACJ,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;SACjC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ASTVisitor, VisitorContext } from '../ASTWalker.js';
|
|
3
|
+
import type { GraphBuildContext } from './context.js';
|
|
4
|
+
/** Detects import declarations including dynamic imports. */
|
|
5
|
+
export declare class ImportVisitor implements ASTVisitor {
|
|
6
|
+
private readonly ctx;
|
|
7
|
+
readonly name = "ImportVisitor";
|
|
8
|
+
constructor(ctx: GraphBuildContext);
|
|
9
|
+
visit(node: ts.Node, vctx: VisitorContext): void;
|
|
10
|
+
private handleImportDeclaration;
|
|
11
|
+
private handleDynamicImport;
|
|
12
|
+
private resolveTarget;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ImportVisitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImportVisitor.d.ts","sourceRoot":"","sources":["../../../src/parser/visitors/ImportVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD,6DAA6D;AAC7D,qBAAa,aAAc,YAAW,UAAU;IAGlC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,QAAQ,CAAC,IAAI,mBAAmB;gBAEH,GAAG,EAAE,iBAAiB;IAEnD,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAQhD,OAAO,CAAC,uBAAuB;IA+B/B,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,aAAa;CAgCtB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { EdgeKind } from '../../model/EdgeKind.js';
|
|
3
|
+
import { NodeKind } from '../../model/NodeKind.js';
|
|
4
|
+
import { addLocatedEdge, ensureFileNode } from './context.js';
|
|
5
|
+
import { toPosixPath } from '../../utils/path.js';
|
|
6
|
+
/** Detects import declarations including dynamic imports. */
|
|
7
|
+
export class ImportVisitor {
|
|
8
|
+
ctx;
|
|
9
|
+
name = 'ImportVisitor';
|
|
10
|
+
constructor(ctx) {
|
|
11
|
+
this.ctx = ctx;
|
|
12
|
+
}
|
|
13
|
+
visit(node, vctx) {
|
|
14
|
+
if (ts.isImportDeclaration(node)) {
|
|
15
|
+
this.handleImportDeclaration(node, vctx);
|
|
16
|
+
}
|
|
17
|
+
else if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword) {
|
|
18
|
+
this.handleDynamicImport(node, vctx);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
handleImportDeclaration(node, vctx) {
|
|
22
|
+
if (!ts.isStringLiteral(node.moduleSpecifier))
|
|
23
|
+
return;
|
|
24
|
+
const specifier = node.moduleSpecifier.text;
|
|
25
|
+
const sourceFile = vctx.sourceFile;
|
|
26
|
+
const filePath = toPosixPath(sourceFile.fileName);
|
|
27
|
+
const sourceFileId = ensureFileNode(this.ctx, filePath);
|
|
28
|
+
const targetId = this.resolveTarget(specifier, vctx);
|
|
29
|
+
if (!targetId)
|
|
30
|
+
return;
|
|
31
|
+
const isTypeOnly = node.importClause?.isTypeOnly ?? false;
|
|
32
|
+
addLocatedEdge(this.ctx, {
|
|
33
|
+
source: sourceFileId,
|
|
34
|
+
target: targetId,
|
|
35
|
+
kind: EdgeKind.IMPORTS,
|
|
36
|
+
sourceFile,
|
|
37
|
+
node,
|
|
38
|
+
extra: { moduleSpecifier: specifier, typeOnly: isTypeOnly },
|
|
39
|
+
});
|
|
40
|
+
addLocatedEdge(this.ctx, {
|
|
41
|
+
source: sourceFileId,
|
|
42
|
+
target: targetId,
|
|
43
|
+
kind: EdgeKind.DEPENDS_ON,
|
|
44
|
+
sourceFile,
|
|
45
|
+
node,
|
|
46
|
+
extra: { moduleSpecifier: specifier },
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
handleDynamicImport(node, vctx) {
|
|
50
|
+
const arg = node.arguments[0];
|
|
51
|
+
if (!arg || !ts.isStringLiteral(arg))
|
|
52
|
+
return;
|
|
53
|
+
const specifier = arg.text;
|
|
54
|
+
const sourceFile = vctx.sourceFile;
|
|
55
|
+
const filePath = toPosixPath(sourceFile.fileName);
|
|
56
|
+
const sourceFileId = ensureFileNode(this.ctx, filePath);
|
|
57
|
+
const targetId = this.resolveTarget(specifier, vctx);
|
|
58
|
+
if (!targetId)
|
|
59
|
+
return;
|
|
60
|
+
addLocatedEdge(this.ctx, {
|
|
61
|
+
source: sourceFileId,
|
|
62
|
+
target: targetId,
|
|
63
|
+
kind: EdgeKind.DYNAMIC_IMPORT,
|
|
64
|
+
sourceFile,
|
|
65
|
+
node,
|
|
66
|
+
static: false,
|
|
67
|
+
confidence: 'medium',
|
|
68
|
+
extra: { moduleSpecifier: specifier },
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
resolveTarget(specifier, vctx) {
|
|
72
|
+
if (this.ctx.moduleResolver.isPackageImport(specifier)) {
|
|
73
|
+
const packageName = this.ctx.moduleResolver.getPackageName(specifier);
|
|
74
|
+
const packageId = `Package:${packageName}`;
|
|
75
|
+
if (!this.ctx.graph.getNode(packageId)) {
|
|
76
|
+
const packageNode = this.ctx.nodeFactory.package(packageName, packageName);
|
|
77
|
+
this.ctx.graph.addNode(packageNode);
|
|
78
|
+
}
|
|
79
|
+
return packageId;
|
|
80
|
+
}
|
|
81
|
+
const resolved = this.ctx.moduleResolver.resolveImport(specifier, vctx.sourceFile.fileName, vctx.program);
|
|
82
|
+
if (resolved) {
|
|
83
|
+
return ensureFileNode(this.ctx, resolved);
|
|
84
|
+
}
|
|
85
|
+
const moduleId = `Module:${specifier}`;
|
|
86
|
+
if (!this.ctx.graph.getNode(moduleId)) {
|
|
87
|
+
this.ctx.graph.addNode(this.ctx.nodeFactory.create({
|
|
88
|
+
kind: NodeKind.Module,
|
|
89
|
+
label: specifier,
|
|
90
|
+
idOverride: moduleId,
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
return moduleId;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=ImportVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImportVisitor.js","sourceRoot":"","sources":["../../../src/parser/visitors/ImportVisitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ASTVisitor, VisitorContext } from '../ASTWalker.js';
|
|
3
|
+
import type { GraphBuildContext } from './context.js';
|
|
4
|
+
/** Captures interface declarations and generic constraints. */
|
|
5
|
+
export declare class InterfaceVisitor implements ASTVisitor {
|
|
6
|
+
private readonly ctx;
|
|
7
|
+
readonly name = "InterfaceVisitor";
|
|
8
|
+
constructor(ctx: GraphBuildContext);
|
|
9
|
+
visit(node: ts.Node, vctx: VisitorContext): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=InterfaceVisitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterfaceVisitor.d.ts","sourceRoot":"","sources":["../../../src/parser/visitors/InterfaceVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,+DAA+D;AAC/D,qBAAa,gBAAiB,YAAW,UAAU;IAGrC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,QAAQ,CAAC,IAAI,sBAAsB;gBAEN,GAAG,EAAE,iBAAiB;IAEnD,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;CAgBjD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { NodeKind } from '../../model/NodeKind.js';
|
|
3
|
+
import { registerSymbolNode } from './context.js';
|
|
4
|
+
/** Captures interface declarations and generic constraints. */
|
|
5
|
+
export class InterfaceVisitor {
|
|
6
|
+
ctx;
|
|
7
|
+
name = 'InterfaceVisitor';
|
|
8
|
+
constructor(ctx) {
|
|
9
|
+
this.ctx = ctx;
|
|
10
|
+
}
|
|
11
|
+
visit(node, vctx) {
|
|
12
|
+
if (ts.isInterfaceDeclaration(node) && node.name) {
|
|
13
|
+
const typeParams = node.typeParameters?.map((tp) => tp.name.text) ?? [];
|
|
14
|
+
const id = registerSymbolNode(this.ctx, {
|
|
15
|
+
kind: NodeKind.Interface,
|
|
16
|
+
name: node.name.text,
|
|
17
|
+
node,
|
|
18
|
+
sourceFile: vctx.sourceFile,
|
|
19
|
+
metadata: {
|
|
20
|
+
typeParameters: typeParams,
|
|
21
|
+
exported: ts.canHaveModifiers(node) && !!(ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Export),
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
this.ctx.symbolNodeMap.set(`${vctx.sourceFile.fileName}:${node.name.text}`, id);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=InterfaceVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterfaceVisitor.js","sourceRoot":"","sources":["../../../src/parser/visitors/InterfaceVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,+DAA+D;AAC/D,MAAM,OAAO,gBAAgB;IAGE;IAFpB,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YAA6B,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;IAAG,CAAC;IAEvD,KAAK,CAAC,IAAa,EAAE,IAAoB;QACvC,IAAI,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE;gBACtC,IAAI,EAAE,QAAQ,CAAC,SAAS;gBACxB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;gBACpB,IAAI;gBACJ,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE;oBACR,cAAc,EAAE,UAAU;oBAC1B,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC;iBACvG;aACF,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ASTVisitor, VisitorContext } from '../ASTWalker.js';
|
|
3
|
+
import type { GraphBuildContext } from './context.js';
|
|
4
|
+
/** Captures method declarations on classes and object literals. */
|
|
5
|
+
export declare class MethodVisitor implements ASTVisitor {
|
|
6
|
+
private readonly ctx;
|
|
7
|
+
readonly name = "MethodVisitor";
|
|
8
|
+
constructor(ctx: GraphBuildContext);
|
|
9
|
+
visit(node: ts.Node, vctx: VisitorContext): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=MethodVisitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MethodVisitor.d.ts","sourceRoot":"","sources":["../../../src/parser/visitors/MethodVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,mEAAmE;AACnE,qBAAa,aAAc,YAAW,UAAU;IAGlC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,QAAQ,CAAC,IAAI,mBAAmB;gBAEH,GAAG,EAAE,iBAAiB;IAEnD,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;CAkBjD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { NodeKind } from '../../model/NodeKind.js';
|
|
3
|
+
import { registerSymbolNode } from './context.js';
|
|
4
|
+
/** Captures method declarations on classes and object literals. */
|
|
5
|
+
export class MethodVisitor {
|
|
6
|
+
ctx;
|
|
7
|
+
name = 'MethodVisitor';
|
|
8
|
+
constructor(ctx) {
|
|
9
|
+
this.ctx = ctx;
|
|
10
|
+
}
|
|
11
|
+
visit(node, vctx) {
|
|
12
|
+
if (ts.isMethodDeclaration(node) && node.name && ts.isIdentifier(node.name)) {
|
|
13
|
+
const parent = node.parent;
|
|
14
|
+
let prefix = '';
|
|
15
|
+
if (ts.isClassDeclaration(parent) && parent.name) {
|
|
16
|
+
prefix = `${parent.name.text}.`;
|
|
17
|
+
}
|
|
18
|
+
registerSymbolNode(this.ctx, {
|
|
19
|
+
kind: NodeKind.Method,
|
|
20
|
+
name: `${prefix}${node.name.text}`,
|
|
21
|
+
node,
|
|
22
|
+
sourceFile: vctx.sourceFile,
|
|
23
|
+
metadata: {
|
|
24
|
+
async: !!(node.modifiers && node.modifiers.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)),
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=MethodVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MethodVisitor.js","sourceRoot":"","sources":["../../../src/parser/visitors/MethodVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,mEAAmE;AACnE,MAAM,OAAO,aAAa;IAGK;IAFpB,IAAI,GAAG,eAAe,CAAC;IAEhC,YAA6B,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;IAAG,CAAC;IAEvD,KAAK,CAAC,IAAa,EAAE,IAAoB;QACvC,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;YAClC,CAAC;YACD,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC3B,IAAI,EAAE,QAAQ,CAAC,MAAM;gBACrB,IAAI,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAClC,IAAI;gBACJ,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE;oBACR,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;iBAC/F;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ASTVisitor, VisitorContext } from '../ASTWalker.js';
|
|
3
|
+
import type { GraphBuildContext } from './context.js';
|
|
4
|
+
/** Captures type references in signatures and type annotations. */
|
|
5
|
+
export declare class TypeReferenceVisitor implements ASTVisitor {
|
|
6
|
+
private readonly ctx;
|
|
7
|
+
readonly name = "TypeReferenceVisitor";
|
|
8
|
+
constructor(ctx: GraphBuildContext);
|
|
9
|
+
visit(node: ts.Node, vctx: VisitorContext): void;
|
|
10
|
+
private handleTypeReference;
|
|
11
|
+
private inferTypeKind;
|
|
12
|
+
private inferEnclosingKind;
|
|
13
|
+
private getEnclosingName;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=TypeReferenceVisitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeReferenceVisitor.d.ts","sourceRoot":"","sources":["../../../src/parser/visitors/TypeReferenceVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,mEAAmE;AACnE,qBAAa,oBAAqB,YAAW,UAAU;IAGzC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,QAAQ,CAAC,IAAI,0BAA0B;gBAEV,GAAG,EAAE,iBAAiB;IAEnD,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAMhD,OAAO,CAAC,mBAAmB;IAwC3B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;CAUzB"}
|