ts-knowledge-graph 0.1.2 → 0.1.4
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 +74 -34
- package/contribs/web_visualisation/README.md +28 -0
- package/contribs/web_visualisation/web/css/style.css +104 -0
- package/contribs/web_visualisation/web/data/.gitignore +1 -0
- package/contribs/web_visualisation/web/data/kind_descriptions.js +38 -0
- package/contribs/web_visualisation/web/index.html +20 -4
- package/contribs/web_visualisation/web/js/app.js +581 -35
- package/contribs/web_visualisation/web/tsconfig.json +18 -0
- package/contribs/web_visualisation/web/types/app_globals.d.ts +146 -0
- package/dist/benchmark/benchmark_stats.d.ts +41 -0
- package/dist/benchmark/benchmark_stats.d.ts.map +1 -0
- package/dist/benchmark/benchmark_stats.js +61 -0
- package/dist/benchmark/benchmark_stats.js.map +1 -0
- package/dist/benchmark/node_benchmark.d.ts +78 -0
- package/dist/benchmark/node_benchmark.d.ts.map +1 -0
- package/dist/benchmark/node_benchmark.js +112 -0
- package/dist/benchmark/node_benchmark.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/benchmark_command.d.ts +11 -0
- package/dist/commands/benchmark_command.d.ts.map +1 -0
- package/dist/commands/benchmark_command.js +91 -0
- package/dist/commands/benchmark_command.js.map +1 -0
- package/dist/commands/blast_radius_command.js +1 -1
- package/dist/commands/blast_radius_command.js.map +1 -1
- package/dist/commands/cost_command.d.ts +13 -0
- package/dist/commands/cost_command.d.ts.map +1 -0
- package/dist/commands/cost_command.js +122 -0
- package/dist/commands/cost_command.js.map +1 -0
- package/dist/commands/{load.d.ts → enrich_command.d.ts} +3 -2
- package/dist/commands/enrich_command.d.ts.map +1 -0
- package/dist/commands/enrich_command.js +62 -0
- package/dist/commands/enrich_command.js.map +1 -0
- package/dist/commands/hotspots_command.d.ts +7 -0
- package/dist/commands/hotspots_command.d.ts.map +1 -0
- package/dist/commands/hotspots_command.js +67 -0
- package/dist/commands/hotspots_command.js.map +1 -0
- package/dist/commands/install_command.d.ts +2 -3
- package/dist/commands/install_command.d.ts.map +1 -1
- package/dist/commands/install_command.js +7 -8
- package/dist/commands/install_command.js.map +1 -1
- package/dist/commands/load_command.d.ts.map +1 -1
- package/dist/commands/load_command.js +2 -0
- package/dist/commands/load_command.js.map +1 -1
- package/dist/commands/verify_command.d.ts +8 -0
- package/dist/commands/verify_command.d.ts.map +1 -0
- package/dist/commands/verify_command.js +57 -0
- package/dist/commands/verify_command.js.map +1 -0
- package/dist/commands/web_command.d.ts +27 -0
- package/dist/commands/web_command.d.ts.map +1 -1
- package/dist/commands/web_command.js +109 -3
- package/dist/commands/web_command.js.map +1 -1
- package/dist/enrich/cpu_profile.d.ts +127 -0
- package/dist/enrich/cpu_profile.d.ts.map +1 -0
- package/dist/enrich/cpu_profile.js +97 -0
- package/dist/enrich/cpu_profile.js.map +1 -0
- package/dist/enrich/runtime_enricher.d.ts +56 -0
- package/dist/enrich/runtime_enricher.d.ts.map +1 -0
- package/dist/enrich/runtime_enricher.js +80 -0
- package/dist/enrich/runtime_enricher.js.map +1 -0
- package/dist/enrich/runtime_join.d.ts +100 -0
- package/dist/enrich/runtime_join.d.ts.map +1 -0
- package/dist/enrich/runtime_join.js +227 -0
- package/dist/enrich/runtime_join.js.map +1 -0
- package/dist/extract/api_extractor.d.ts +24 -0
- package/dist/extract/api_extractor.d.ts.map +1 -0
- package/dist/extract/api_extractor.js +71 -0
- package/dist/extract/api_extractor.js.map +1 -0
- package/dist/extract/config_extractor.d.ts +22 -0
- package/dist/extract/config_extractor.d.ts.map +1 -0
- package/dist/extract/config_extractor.js +61 -0
- package/dist/extract/config_extractor.js.map +1 -0
- package/dist/extract/endpoint_extractor.d.ts +36 -0
- package/dist/extract/endpoint_extractor.d.ts.map +1 -0
- package/dist/extract/endpoint_extractor.js +117 -0
- package/dist/extract/endpoint_extractor.js.map +1 -0
- package/dist/extract/graph_builder.d.ts +8 -0
- package/dist/extract/graph_builder.d.ts.map +1 -1
- package/dist/extract/graph_builder.js +23 -1
- package/dist/extract/graph_builder.js.map +1 -1
- package/dist/extract/node_id.d.ts +16 -0
- package/dist/extract/node_id.d.ts.map +1 -1
- package/dist/extract/node_id.js +22 -0
- package/dist/extract/node_id.js.map +1 -1
- package/dist/extract/scope_resolver.d.ts +22 -0
- package/dist/extract/scope_resolver.d.ts.map +1 -0
- package/dist/extract/scope_resolver.js +53 -0
- package/dist/extract/scope_resolver.js.map +1 -0
- package/dist/extract/semantic_extractor.d.ts +25 -0
- package/dist/extract/semantic_extractor.d.ts.map +1 -1
- package/dist/extract/semantic_extractor.js +96 -2
- package/dist/extract/semantic_extractor.js.map +1 -1
- package/dist/extract/structural_extractor.d.ts +6 -0
- package/dist/extract/structural_extractor.d.ts.map +1 -1
- package/dist/extract/structural_extractor.js +22 -12
- package/dist/extract/structural_extractor.js.map +1 -1
- package/dist/project_root.d.ts +7 -0
- package/dist/project_root.d.ts.map +1 -0
- package/dist/project_root.js +9 -0
- package/dist/project_root.js.map +1 -0
- package/dist/query/graph_query.d.ts +234 -0
- package/dist/query/graph_query.d.ts.map +1 -1
- package/dist/query/graph_query.js +522 -11
- package/dist/query/graph_query.js.map +1 -1
- package/dist/schema/edge.d.ts +40 -5
- package/dist/schema/edge.d.ts.map +1 -1
- package/dist/schema/edge.js +70 -0
- package/dist/schema/edge.js.map +1 -1
- package/dist/schema/node.d.ts +20 -5
- package/dist/schema/node.d.ts.map +1 -1
- package/dist/schema/node.js +36 -0
- package/dist/schema/node.js.map +1 -1
- package/dist/schema/runtime_manifest.d.ts +36 -0
- package/dist/schema/runtime_manifest.d.ts.map +1 -0
- package/dist/schema/runtime_manifest.js +23 -0
- package/dist/schema/runtime_manifest.js.map +1 -0
- package/dist/store/kuzu_store.d.ts +46 -0
- package/dist/store/kuzu_store.d.ts.map +1 -1
- package/dist/store/kuzu_store.js +95 -5
- package/dist/store/kuzu_store.js.map +1 -1
- package/dist/verify/project_verifier.d.ts +85 -0
- package/dist/verify/project_verifier.d.ts.map +1 -0
- package/dist/verify/project_verifier.js +138 -0
- package/dist/verify/project_verifier.js.map +1 -0
- package/{skills/ts-knowledge-graph → dotclaude_folder/skills/code-graph-query}/SKILL.md +2 -2
- package/package.json +86 -7
- package/.env-sample +0 -34
- package/dist/agent/agent-tools.d.ts +0 -13
- package/dist/agent/agent-tools.d.ts.map +0 -1
- package/dist/agent/agent-tools.js +0 -153
- package/dist/agent/agent-tools.js.map +0 -1
- package/dist/agent/agent_tools.d.ts +0 -13
- package/dist/agent/agent_tools.d.ts.map +0 -1
- package/dist/agent/agent_tools.js +0 -153
- package/dist/agent/agent_tools.js.map +0 -1
- package/dist/agent/code-editor.d.ts +0 -18
- package/dist/agent/code-editor.d.ts.map +0 -1
- package/dist/agent/code-editor.js +0 -43
- package/dist/agent/code-editor.js.map +0 -1
- package/dist/agent/code_editor.d.ts +0 -18
- package/dist/agent/code_editor.d.ts.map +0 -1
- package/dist/agent/code_editor.js +0 -43
- package/dist/agent/code_editor.js.map +0 -1
- package/dist/agent/optimizer-agent.d.ts +0 -30
- package/dist/agent/optimizer-agent.d.ts.map +0 -1
- package/dist/agent/optimizer-agent.js +0 -97
- package/dist/agent/optimizer-agent.js.map +0 -1
- package/dist/agent/optimizer_agent.d.ts +0 -30
- package/dist/agent/optimizer_agent.d.ts.map +0 -1
- package/dist/agent/optimizer_agent.js +0 -97
- package/dist/agent/optimizer_agent.js.map +0 -1
- package/dist/agent/verifier.d.ts +0 -9
- package/dist/agent/verifier.d.ts.map +0 -1
- package/dist/agent/verifier.js +0 -19
- package/dist/agent/verifier.js.map +0 -1
- package/dist/commands/blast-radius.d.ts +0 -5
- package/dist/commands/blast-radius.d.ts.map +0 -1
- package/dist/commands/blast-radius.js +0 -18
- package/dist/commands/blast-radius.js.map +0 -1
- package/dist/commands/blast_radius.d.ts +0 -5
- package/dist/commands/blast_radius.d.ts.map +0 -1
- package/dist/commands/blast_radius.js +0 -18
- package/dist/commands/blast_radius.js.map +0 -1
- package/dist/commands/calls.d.ts +0 -5
- package/dist/commands/calls.d.ts.map +0 -1
- package/dist/commands/calls.js +0 -7
- package/dist/commands/calls.js.map +0 -1
- package/dist/commands/command-helpers.d.ts +0 -15
- package/dist/commands/command-helpers.d.ts.map +0 -1
- package/dist/commands/command-helpers.js +0 -61
- package/dist/commands/command-helpers.js.map +0 -1
- package/dist/commands/dead-exports.d.ts +0 -5
- package/dist/commands/dead-exports.d.ts.map +0 -1
- package/dist/commands/dead-exports.js +0 -7
- package/dist/commands/dead-exports.js.map +0 -1
- package/dist/commands/dead_exports.d.ts +0 -5
- package/dist/commands/dead_exports.d.ts.map +0 -1
- package/dist/commands/dead_exports.js +0 -7
- package/dist/commands/dead_exports.js.map +0 -1
- package/dist/commands/extract.d.ts +0 -8
- package/dist/commands/extract.d.ts.map +0 -1
- package/dist/commands/extract.js +0 -49
- package/dist/commands/extract.js.map +0 -1
- package/dist/commands/find.d.ts +0 -5
- package/dist/commands/find.d.ts.map +0 -1
- package/dist/commands/find.js +0 -7
- package/dist/commands/find.js.map +0 -1
- package/dist/commands/load.d.ts.map +0 -1
- package/dist/commands/load.js +0 -28
- package/dist/commands/load.js.map +0 -1
- package/dist/commands/neighbors.d.ts +0 -5
- package/dist/commands/neighbors.d.ts.map +0 -1
- package/dist/commands/neighbors.js +0 -17
- package/dist/commands/neighbors.js.map +0 -1
- package/dist/commands/optimize.d.ts +0 -6
- package/dist/commands/optimize.d.ts.map +0 -1
- package/dist/commands/optimize.js +0 -59
- package/dist/commands/optimize.js.map +0 -1
- package/dist/commands/optimize_command.d.ts +0 -6
- package/dist/commands/optimize_command.d.ts.map +0 -1
- package/dist/commands/optimize_command.js +0 -59
- package/dist/commands/optimize_command.js.map +0 -1
- package/dist/commands/references.d.ts +0 -5
- package/dist/commands/references.d.ts.map +0 -1
- package/dist/commands/references.js +0 -17
- package/dist/commands/references.js.map +0 -1
- package/dist/commands/web.d.ts +0 -19
- package/dist/commands/web.d.ts.map +0 -1
- package/dist/commands/web.js +0 -120
- package/dist/commands/web.js.map +0 -1
- package/dist/commands/who-calls.d.ts +0 -5
- package/dist/commands/who-calls.d.ts.map +0 -1
- package/dist/commands/who-calls.js +0 -7
- package/dist/commands/who-calls.js.map +0 -1
- package/dist/commands/who_calls.d.ts +0 -5
- package/dist/commands/who_calls.d.ts.map +0 -1
- package/dist/commands/who_calls.js +0 -7
- package/dist/commands/who_calls.js.map +0 -1
- package/dist/extract/graph-builder.d.ts +0 -16
- package/dist/extract/graph-builder.d.ts.map +0 -1
- package/dist/extract/graph-builder.js +0 -39
- package/dist/extract/graph-builder.js.map +0 -1
- package/dist/extract/node-id.d.ts +0 -8
- package/dist/extract/node-id.d.ts.map +0 -1
- package/dist/extract/node-id.js +0 -22
- package/dist/extract/node-id.js.map +0 -1
- package/dist/extract/project-loader.d.ts +0 -5
- package/dist/extract/project-loader.d.ts.map +0 -1
- package/dist/extract/project-loader.js +0 -19
- package/dist/extract/project-loader.js.map +0 -1
- package/dist/extract/semantic-extractor.d.ts +0 -22
- package/dist/extract/semantic-extractor.d.ts.map +0 -1
- package/dist/extract/semantic-extractor.js +0 -254
- package/dist/extract/semantic-extractor.js.map +0 -1
- package/dist/extract/structural-extractor.d.ts +0 -18
- package/dist/extract/structural-extractor.d.ts.map +0 -1
- package/dist/extract/structural-extractor.js +0 -97
- package/dist/extract/structural-extractor.js.map +0 -1
- package/dist/query/graph-query.d.ts +0 -28
- package/dist/query/graph-query.d.ts.map +0 -1
- package/dist/query/graph-query.js +0 -93
- package/dist/query/graph-query.js.map +0 -1
- package/dist/store/jsonl-reader.d.ts +0 -11
- package/dist/store/jsonl-reader.d.ts.map +0 -1
- package/dist/store/jsonl-reader.js +0 -19
- package/dist/store/jsonl-reader.js.map +0 -1
- package/dist/store/jsonl-store.d.ts +0 -7
- package/dist/store/jsonl-store.d.ts.map +0 -1
- package/dist/store/jsonl-store.js +0 -13
- package/dist/store/jsonl-store.js.map +0 -1
- package/dist/store/kuzu-store.d.ts +0 -14
- package/dist/store/kuzu-store.d.ts.map +0 -1
- package/dist/store/kuzu-store.js +0 -52
- package/dist/store/kuzu-store.js.map +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { relative } from 'node:path';
|
|
2
|
+
import { Node, SyntaxKind } from 'ts-morph';
|
|
3
|
+
import { NodeId } from './node_id.js';
|
|
4
|
+
import { ScopeResolver } from './scope_resolver.js';
|
|
5
|
+
/** HTTP-verb method names that register a route on an Express/Fastify app or router. */
|
|
6
|
+
const HTTP_METHODS = new Set(['get', 'post', 'put', 'delete', 'patch', 'options', 'head', 'all']);
|
|
7
|
+
/**
|
|
8
|
+
* Detects HTTP route registrations in the Express/Fastify style —
|
|
9
|
+
* `app.get('/path', handler)`, `router.post('/path', mw, handler)` — and emits an
|
|
10
|
+
* `Endpoint` node (keyed by method + path) plus a `HANDLES` edge from the endpoint
|
|
11
|
+
* to the function that handles it.
|
|
12
|
+
*
|
|
13
|
+
* A route is recognised syntactically: the callee is `<obj>.<verb>` for an HTTP
|
|
14
|
+
* verb, the first argument is a string-literal path, and the last argument is a
|
|
15
|
+
* handler — an inline function, or a name/member that resolves to an in-project
|
|
16
|
+
* callable. Resolving the named handler is why this runs in the semantic pass; an
|
|
17
|
+
* inline handler yields the `Endpoint` node alone (it has no declaration to point
|
|
18
|
+
* at).
|
|
19
|
+
*
|
|
20
|
+
* The match is a heuristic (it does not prove `obj` is an Express app), but the
|
|
21
|
+
* verb + string path + resolvable-handler combination is specific, so a project
|
|
22
|
+
* with no such call sites is unchanged. Other routers (Nest decorators, …) are out
|
|
23
|
+
* of scope for now — Express/Fastify first (#31 Part 3).
|
|
24
|
+
*/
|
|
25
|
+
export class EndpointExtractor {
|
|
26
|
+
static extract(sourceFile, rootPath) {
|
|
27
|
+
const nodes = [];
|
|
28
|
+
const edges = [];
|
|
29
|
+
for (const call of sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {
|
|
30
|
+
EndpointExtractor.extractRoute(call, rootPath, nodes, edges);
|
|
31
|
+
}
|
|
32
|
+
return { nodes, edges };
|
|
33
|
+
}
|
|
34
|
+
static extractRoute(call, rootPath, nodes, edges) {
|
|
35
|
+
const callee = call.getExpression().asKind(SyntaxKind.PropertyAccessExpression);
|
|
36
|
+
if (callee === undefined || HTTP_METHODS.has(callee.getName()) === false) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const args = call.getArguments();
|
|
40
|
+
if (args.length < 2) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const pathLiteral = args[0].asKind(SyntaxKind.StringLiteral);
|
|
44
|
+
if (pathLiteral === undefined) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const handler = EndpointExtractor.classifyHandler(args[args.length - 1], rootPath);
|
|
48
|
+
if (handler.valid === false) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const method = callee.getName().toUpperCase();
|
|
52
|
+
const endpointId = NodeId.forEndpoint(method, pathLiteral.getLiteralText());
|
|
53
|
+
nodes.push({
|
|
54
|
+
id: endpointId,
|
|
55
|
+
kind: 'Endpoint',
|
|
56
|
+
name: `${method} ${pathLiteral.getLiteralText()}`,
|
|
57
|
+
filePath: relative(rootPath, call.getSourceFile().getFilePath()),
|
|
58
|
+
range: {
|
|
59
|
+
startLine: call.getStartLineNumber(),
|
|
60
|
+
startColumn: 0,
|
|
61
|
+
endLine: call.getEndLineNumber(),
|
|
62
|
+
endColumn: 0,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
if (handler.id !== undefined) {
|
|
66
|
+
edges.push({ id: `HANDLES:${endpointId}->${handler.id}`, kind: 'HANDLES', from: endpointId, to: handler.id });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Classifies the last argument of a route call. An inline function is a valid
|
|
71
|
+
* handler with no node to point at; a name/member that resolves to an in-project
|
|
72
|
+
* callable is a valid handler whose emitted declaration becomes the `HANDLES`
|
|
73
|
+
* target; anything else means this is not a route.
|
|
74
|
+
*/
|
|
75
|
+
static classifyHandler(handler, rootPath) {
|
|
76
|
+
if (Node.isArrowFunction(handler) === true || Node.isFunctionExpression(handler) === true) {
|
|
77
|
+
return { valid: true };
|
|
78
|
+
}
|
|
79
|
+
const declaration = EndpointExtractor.resolveCallable(handler);
|
|
80
|
+
if (declaration === undefined) {
|
|
81
|
+
return { valid: false };
|
|
82
|
+
}
|
|
83
|
+
if (ScopeResolver.isEmitted(declaration) === true) {
|
|
84
|
+
return { valid: true, id: NodeId.forDeclaration(declaration, rootPath) };
|
|
85
|
+
}
|
|
86
|
+
return { valid: true };
|
|
87
|
+
}
|
|
88
|
+
/** Resolves a handler name/member to the in-project function, method, or function-valued variable it refers to. */
|
|
89
|
+
static resolveCallable(node) {
|
|
90
|
+
const declaration = EndpointExtractor.resolve(node);
|
|
91
|
+
if (declaration === undefined || EndpointExtractor.inProject(declaration) === false) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
const kind = declaration.getKind();
|
|
95
|
+
if (kind === SyntaxKind.FunctionDeclaration || kind === SyntaxKind.MethodDeclaration) {
|
|
96
|
+
return declaration;
|
|
97
|
+
}
|
|
98
|
+
if (kind === SyntaxKind.VariableDeclaration) {
|
|
99
|
+
const initializer = declaration.asKind(SyntaxKind.VariableDeclaration)?.getInitializer();
|
|
100
|
+
if (initializer !== undefined && (Node.isArrowFunction(initializer) === true || Node.isFunctionExpression(initializer) === true)) {
|
|
101
|
+
return declaration;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
static resolve(node) {
|
|
107
|
+
const symbol = node.getSymbol();
|
|
108
|
+
const resolved = symbol?.getAliasedSymbol() ?? symbol;
|
|
109
|
+
return resolved?.getDeclarations()[0];
|
|
110
|
+
}
|
|
111
|
+
static inProject(node) {
|
|
112
|
+
const sourceFile = node.getSourceFile();
|
|
113
|
+
return sourceFile.getFilePath().includes('/node_modules/') === false
|
|
114
|
+
&& sourceFile.isDeclarationFile() === false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=endpoint_extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint_extractor.js","sourceRoot":"","sources":["../../src/extract/endpoint_extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAkB,IAAI,EAAc,UAAU,EAAE,MAAM,UAAU,CAAC;AAGxE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,wFAAwF;AACxF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAKlG;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,iBAAiB;IAC7B,MAAM,CAAC,OAAO,CAAC,UAAsB,EAAE,QAAgB;QACtD,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/E,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,IAAoB,EAAE,QAAgB,EAAE,KAAkB,EAAE,KAAkB;QACzG,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAChF,IAAI,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;YAC1E,OAAO;QACR,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO;QACR,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO;QACR,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnF,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;QACR,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5E,KAAK,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,GAAG,MAAM,IAAI,WAAW,CAAC,cAAc,EAAE,EAAE;YACjD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC;YAChE,KAAK,EAAE;gBACN,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBACpC,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;gBAChC,SAAS,EAAE,CAAC;aACZ;SACD,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,UAAU,KAAK,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/G,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,eAAe,CAAC,OAAa,EAAE,QAAgB;QAC7D,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3F,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;YACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,mHAAmH;IAC3G,MAAM,CAAC,eAAe,CAAC,IAAU;QACxC,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,WAAW,KAAK,SAAS,IAAI,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,KAAK,EAAE,CAAC;YACrF,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,IAAI,KAAK,UAAU,CAAC,mBAAmB,IAAI,IAAI,KAAK,UAAU,CAAC,iBAAiB,EAAE,CAAC;YACtF,OAAO,WAAW,CAAC;QACpB,CAAC;QACD,IAAI,IAAI,KAAK,UAAU,CAAC,mBAAmB,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,cAAc,EAAE,CAAC;YACzF,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;gBAClI,OAAO,WAAW,CAAC;YACpB,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,OAAO,CAAC,IAAU;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,EAAE,gBAAgB,EAAE,IAAI,MAAM,CAAC;QACtD,OAAO,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,IAAU;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,KAAK;eAChE,UAAU,CAAC,iBAAiB,EAAE,KAAK,KAAK,CAAC;IAC9C,CAAC;CACD"}
|
|
@@ -11,6 +11,14 @@ export declare class GraphBuilder {
|
|
|
11
11
|
getNodes(): GraphNode[];
|
|
12
12
|
getEdges(): GraphEdge[];
|
|
13
13
|
private merge;
|
|
14
|
+
/**
|
|
15
|
+
* Adds an edge, collapsing duplicates by id while counting how many times the
|
|
16
|
+
* relationship occurs in source. The first occurrence is stored with
|
|
17
|
+
* `metadata.count = 1`; each later occurrence increments that count instead of
|
|
18
|
+
* overwriting the edge. Any pre-existing metadata (such as the `specifier` on
|
|
19
|
+
* an `IMPORTS` edge) is preserved.
|
|
20
|
+
*/
|
|
21
|
+
private addEdge;
|
|
14
22
|
private static isProjectFile;
|
|
15
23
|
}
|
|
16
24
|
//# sourceMappingURL=graph_builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_builder.d.ts","sourceRoot":"","sources":["../../src/extract/graph_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"graph_builder.d.ts","sourceRoot":"","sources":["../../src/extract/graph_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAO9C,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IAEtD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAkBtE,QAAQ,IAAI,SAAS,EAAE;IAIvB,QAAQ,IAAI,SAAS,EAAE;IAIvB,OAAO,CAAC,KAAK;IASb;;;;;;OAMG;IACH,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,MAAM,CAAC,aAAa;CAG5B"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { ApiExtractor } from './api_extractor.js';
|
|
2
|
+
import { ConfigExtractor } from './config_extractor.js';
|
|
3
|
+
import { EndpointExtractor } from './endpoint_extractor.js';
|
|
1
4
|
import { SemanticExtractor } from './semantic_extractor.js';
|
|
2
5
|
import { StructuralExtractor } from './structural_extractor.js';
|
|
3
6
|
export class GraphBuilder {
|
|
@@ -11,10 +14,13 @@ export class GraphBuilder {
|
|
|
11
14
|
.filter((file) => GraphBuilder.isProjectFile(file.getFilePath()));
|
|
12
15
|
for (const sourceFile of sourceFiles) {
|
|
13
16
|
this.merge(StructuralExtractor.extract(sourceFile, rootPath));
|
|
17
|
+
this.merge(ConfigExtractor.extract(sourceFile, rootPath));
|
|
18
|
+
this.merge(ApiExtractor.extract(sourceFile, rootPath));
|
|
14
19
|
}
|
|
15
20
|
if (options.semantic === true) {
|
|
16
21
|
for (const sourceFile of sourceFiles) {
|
|
17
22
|
this.merge(SemanticExtractor.extract(sourceFile, rootPath));
|
|
23
|
+
this.merge(EndpointExtractor.extract(sourceFile, rootPath));
|
|
18
24
|
}
|
|
19
25
|
}
|
|
20
26
|
}
|
|
@@ -29,9 +35,25 @@ export class GraphBuilder {
|
|
|
29
35
|
this.nodes.set(node.id, node);
|
|
30
36
|
}
|
|
31
37
|
for (const edge of extraction.edges) {
|
|
32
|
-
this.
|
|
38
|
+
this.addEdge(edge);
|
|
33
39
|
}
|
|
34
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Adds an edge, collapsing duplicates by id while counting how many times the
|
|
43
|
+
* relationship occurs in source. The first occurrence is stored with
|
|
44
|
+
* `metadata.count = 1`; each later occurrence increments that count instead of
|
|
45
|
+
* overwriting the edge. Any pre-existing metadata (such as the `specifier` on
|
|
46
|
+
* an `IMPORTS` edge) is preserved.
|
|
47
|
+
*/
|
|
48
|
+
addEdge(edge) {
|
|
49
|
+
const existing = this.edges.get(edge.id);
|
|
50
|
+
if (existing === undefined) {
|
|
51
|
+
this.edges.set(edge.id, { ...edge, metadata: { ...edge.metadata, count: 1 } });
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const current = typeof existing.metadata?.count === 'number' ? existing.metadata.count : 1;
|
|
55
|
+
existing.metadata = { ...existing.metadata, count: current + 1 };
|
|
56
|
+
}
|
|
35
57
|
static isProjectFile(filePath) {
|
|
36
58
|
return filePath.includes('/node_modules/') === false && filePath.endsWith('.d.ts') === false;
|
|
37
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_builder.js","sourceRoot":"","sources":["../../src/extract/graph_builder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAc,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAM5E,MAAM,OAAO,YAAY;IAAzB;QACkB,UAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;QACrC,UAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"graph_builder.js","sourceRoot":"","sources":["../../src/extract/graph_builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,22 @@ export declare class NodeId {
|
|
|
3
3
|
static forModule(filePath: string, rootPath: string): string;
|
|
4
4
|
static forDeclaration(node: Node, rootPath: string): string;
|
|
5
5
|
static forExternalModule(specifier: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* A graph-wide id for a configuration variable (e.g. `process.env.PORT`), keyed
|
|
8
|
+
* by name so the same variable read across many files collapses to one node.
|
|
9
|
+
*/
|
|
10
|
+
static forConfigFlag(name: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* A graph-wide id for an external HTTP target, keyed by host (e.g. the
|
|
13
|
+
* `api.example.com` of a `fetch('https://api.example.com/…')`) so every call to
|
|
14
|
+
* the same service collapses to one node.
|
|
15
|
+
*/
|
|
16
|
+
static forExternalApi(host: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* A graph-wide id for an HTTP endpoint, keyed by method and route path (e.g.
|
|
19
|
+
* `Endpoint:GET /users/:id`) so a route registered once is one node.
|
|
20
|
+
*/
|
|
21
|
+
static forEndpoint(method: string, path: string): string;
|
|
6
22
|
static nameOf(node: Node): string;
|
|
7
23
|
}
|
|
8
24
|
//# sourceMappingURL=node_id.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node_id.d.ts","sourceRoot":"","sources":["../../src/extract/node_id.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,qBAAa,MAAM;IAClB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI5D,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK3D,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAInD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;CAQjC"}
|
|
1
|
+
{"version":3,"file":"node_id.d.ts","sourceRoot":"","sources":["../../src/extract/node_id.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,qBAAa,MAAM;IAClB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI5D,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK3D,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAInD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1C;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3C;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAIxD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;CAQjC"}
|
package/dist/extract/node_id.js
CHANGED
|
@@ -10,6 +10,28 @@ export class NodeId {
|
|
|
10
10
|
static forExternalModule(specifier) {
|
|
11
11
|
return `External:${specifier}`;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* A graph-wide id for a configuration variable (e.g. `process.env.PORT`), keyed
|
|
15
|
+
* by name so the same variable read across many files collapses to one node.
|
|
16
|
+
*/
|
|
17
|
+
static forConfigFlag(name) {
|
|
18
|
+
return `Config:${name}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A graph-wide id for an external HTTP target, keyed by host (e.g. the
|
|
22
|
+
* `api.example.com` of a `fetch('https://api.example.com/…')`) so every call to
|
|
23
|
+
* the same service collapses to one node.
|
|
24
|
+
*/
|
|
25
|
+
static forExternalApi(host) {
|
|
26
|
+
return `Api:${host}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A graph-wide id for an HTTP endpoint, keyed by method and route path (e.g.
|
|
30
|
+
* `Endpoint:GET /users/:id`) so a route registered once is one node.
|
|
31
|
+
*/
|
|
32
|
+
static forEndpoint(method, path) {
|
|
33
|
+
return `Endpoint:${method} ${path}`;
|
|
34
|
+
}
|
|
13
35
|
static nameOf(node) {
|
|
14
36
|
const probe = node;
|
|
15
37
|
if (typeof probe.getName !== 'function') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node_id.js","sourceRoot":"","sources":["../../src/extract/node_id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,MAAM,OAAO,MAAM;IAClB,MAAM,CAAC,SAAS,CAAC,QAAgB,EAAE,QAAgB;QAClD,OAAO,UAAU,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAU,EAAE,QAAgB;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAChG,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,SAAiB;QACzC,OAAO,YAAY,SAAS,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAU;QACvB,MAAM,KAAK,GAAG,IAA8C,CAAC;QAC7D,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACzC,OAAO,WAAW,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;CACD"}
|
|
1
|
+
{"version":3,"file":"node_id.js","sourceRoot":"","sources":["../../src/extract/node_id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,MAAM,OAAO,MAAM;IAClB,MAAM,CAAC,SAAS,CAAC,QAAgB,EAAE,QAAgB;QAClD,OAAO,UAAU,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAU,EAAE,QAAgB;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAChG,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,SAAiB;QACzC,OAAO,YAAY,SAAS,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,IAAY;QAChC,OAAO,UAAU,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,IAAY;QACjC,OAAO,OAAO,IAAI,EAAE,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,MAAc,EAAE,IAAY;QAC9C,OAAO,YAAY,MAAM,IAAI,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAU;QACvB,MAAM,KAAK,GAAG,IAA8C,CAAC;QAC7D,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACzC,OAAO,WAAW,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;CACD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Node } from 'ts-morph';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the graph node a free-standing expression (a `process.env` read, a
|
|
4
|
+
* `fetch` call) should be attributed to: the id of the nearest enclosing
|
|
5
|
+
* declaration the structural extractor actually emits, falling back to the module.
|
|
6
|
+
*
|
|
7
|
+
* Because a node nested inside a function (a local, a nested function, an arrow) is
|
|
8
|
+
* not itself a graph node, the walk skips past it to the enclosing top-level
|
|
9
|
+
* function/variable/class or class member — so the returned id always exists in the
|
|
10
|
+
* graph and the edge built from it is never dropped at load.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ScopeResolver {
|
|
13
|
+
static enclosingId(node: Node, moduleId: string, rootPath: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Whether the structural extractor emits this declaration as a graph node — a
|
|
16
|
+
* class/interface member, or a top-level function/variable/class/etc. Used both
|
|
17
|
+
* to find an enclosing scope and to check that a resolved handler is a real node
|
|
18
|
+
* before pointing an edge at it.
|
|
19
|
+
*/
|
|
20
|
+
static isEmitted(node: Node): boolean;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=scope_resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope_resolver.d.ts","sourceRoot":"","sources":["../../src/extract/scope_resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAc,MAAM,UAAU,CAAC;AAkB5C;;;;;;;;;GASG;AACH,qBAAa,aAAa;IACzB,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK1E;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;CAcrC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { SyntaxKind } from 'ts-morph';
|
|
2
|
+
import { NodeId } from './node_id.js';
|
|
3
|
+
/**
|
|
4
|
+
* Top-level declaration kinds the structural extractor emits as nodes. Used to
|
|
5
|
+
* attribute a free-standing expression to an *emitted* scope: a node nested inside
|
|
6
|
+
* a function (a local, a nested function) is not a graph node, so the walk skips
|
|
7
|
+
* past it to the nearest enclosing emitted declaration.
|
|
8
|
+
*/
|
|
9
|
+
const TOP_LEVEL_SCOPE_KINDS = new Set([
|
|
10
|
+
SyntaxKind.FunctionDeclaration,
|
|
11
|
+
SyntaxKind.VariableDeclaration,
|
|
12
|
+
SyntaxKind.ClassDeclaration,
|
|
13
|
+
SyntaxKind.InterfaceDeclaration,
|
|
14
|
+
SyntaxKind.EnumDeclaration,
|
|
15
|
+
SyntaxKind.TypeAliasDeclaration,
|
|
16
|
+
]);
|
|
17
|
+
/**
|
|
18
|
+
* Resolves the graph node a free-standing expression (a `process.env` read, a
|
|
19
|
+
* `fetch` call) should be attributed to: the id of the nearest enclosing
|
|
20
|
+
* declaration the structural extractor actually emits, falling back to the module.
|
|
21
|
+
*
|
|
22
|
+
* Because a node nested inside a function (a local, a nested function, an arrow) is
|
|
23
|
+
* not itself a graph node, the walk skips past it to the enclosing top-level
|
|
24
|
+
* function/variable/class or class member — so the returned id always exists in the
|
|
25
|
+
* graph and the edge built from it is never dropped at load.
|
|
26
|
+
*/
|
|
27
|
+
export class ScopeResolver {
|
|
28
|
+
static enclosingId(node, moduleId, rootPath) {
|
|
29
|
+
const scope = node.getFirstAncestor((ancestor) => ScopeResolver.isEmitted(ancestor));
|
|
30
|
+
return scope === undefined ? moduleId : NodeId.forDeclaration(scope, rootPath);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Whether the structural extractor emits this declaration as a graph node — a
|
|
34
|
+
* class/interface member, or a top-level function/variable/class/etc. Used both
|
|
35
|
+
* to find an enclosing scope and to check that a resolved handler is a real node
|
|
36
|
+
* before pointing an edge at it.
|
|
37
|
+
*/
|
|
38
|
+
static isEmitted(node) {
|
|
39
|
+
const kind = node.getKind();
|
|
40
|
+
if (kind === SyntaxKind.MethodDeclaration || kind === SyntaxKind.PropertyDeclaration) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
if (TOP_LEVEL_SCOPE_KINDS.has(kind) === false) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if (kind === SyntaxKind.VariableDeclaration) {
|
|
47
|
+
const statement = node.asKind(SyntaxKind.VariableDeclaration)?.getVariableStatement();
|
|
48
|
+
return statement?.getParent()?.getKind() === SyntaxKind.SourceFile;
|
|
49
|
+
}
|
|
50
|
+
return node.getParent()?.getKind() === SyntaxKind.SourceFile;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=scope_resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope_resolver.js","sourceRoot":"","sources":["../../src/extract/scope_resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAa;IACjD,UAAU,CAAC,mBAAmB;IAC9B,UAAU,CAAC,mBAAmB;IAC9B,UAAU,CAAC,gBAAgB;IAC3B,UAAU,CAAC,oBAAoB;IAC/B,UAAU,CAAC,eAAe;IAC1B,UAAU,CAAC,oBAAoB;CAC/B,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IACzB,MAAM,CAAC,WAAW,CAAC,IAAU,EAAE,QAAgB,EAAE,QAAgB;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrF,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChF,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,IAAU;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,KAAK,UAAU,CAAC,iBAAiB,IAAI,IAAI,KAAK,UAAU,CAAC,mBAAmB,EAAE,CAAC;YACtF,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,IAAI,KAAK,UAAU,CAAC,mBAAmB,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,oBAAoB,EAAE,CAAC;YACtF,OAAO,SAAS,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC,UAAU,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC,UAAU,CAAC;IAC9D,CAAC;CACD"}
|
|
@@ -3,6 +3,14 @@ import { Extraction } from './structural_extractor.js';
|
|
|
3
3
|
export declare class SemanticExtractor {
|
|
4
4
|
static extract(sourceFile: SourceFile, rootPath: string): Extraction;
|
|
5
5
|
private static extractClass;
|
|
6
|
+
/**
|
|
7
|
+
* Emit an `OVERRIDES` edge from a class method to the member it overrides:
|
|
8
|
+
* the nearest base-class method of the same name, and any implemented
|
|
9
|
+
* interface method of the same name. The target id is computed with
|
|
10
|
+
* {@link NodeId.forDeclaration} on the resolved declaration, so it matches
|
|
11
|
+
* the node the structural extractor already emitted for that member.
|
|
12
|
+
*/
|
|
13
|
+
private static extractOverrides;
|
|
6
14
|
private static extractInterface;
|
|
7
15
|
private static extractSignature;
|
|
8
16
|
private static addTypeEdges;
|
|
@@ -10,7 +18,24 @@ export declare class SemanticExtractor {
|
|
|
10
18
|
private static extractCalls;
|
|
11
19
|
private static extractInstantiations;
|
|
12
20
|
private static extractReads;
|
|
21
|
+
private static extractWrites;
|
|
22
|
+
/**
|
|
23
|
+
* Emits a value-access edge from the enclosing scope to each in-project,
|
|
24
|
+
* module-level value declaration an identifier touches. `accesses` selects the
|
|
25
|
+
* identifiers (a read or a write) and `kind` is the edge emitted; the rest — the
|
|
26
|
+
* target must be an emitted top-level value declaration, a declaration's own name
|
|
27
|
+
* is skipped, self-edges are dropped — is shared by both. Repeated accesses
|
|
28
|
+
* collapse into one counted edge in {@link GraphBuilder}.
|
|
29
|
+
*/
|
|
30
|
+
private static extractValueAccess;
|
|
13
31
|
private static isValueRead;
|
|
32
|
+
/**
|
|
33
|
+
* Whether an identifier is written: the left-hand side of an assignment
|
|
34
|
+
* (`x = …`, `x += …`) or the operand of a `++`/`--`. A compound assignment and an
|
|
35
|
+
* increment also read the old value, so {@link isValueRead} reports those
|
|
36
|
+
* identifiers too; a plain `x = …` is a write only.
|
|
37
|
+
*/
|
|
38
|
+
private static isValueWrite;
|
|
14
39
|
private static isDeclarationName;
|
|
15
40
|
private static isEmittedTarget;
|
|
16
41
|
private static readerScope;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic_extractor.d.ts","sourceRoot":"","sources":["../../src/extract/semantic_extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAON,UAAU,EAGV,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"semantic_extractor.d.ts","sourceRoot":"","sources":["../../src/extract/semantic_extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAON,UAAU,EAGV,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAyDvD,qBAAa,iBAAiB;IAC7B,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAwBpE,OAAO,CAAC,MAAM,CAAC,YAAY;IAqB3B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAkC/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAe/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B,OAAO,CAAC,MAAM,CAAC,YAAY;IAkB3B,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,OAAO,CAAC,MAAM,CAAC,YAAY;IAqB3B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAqBpC,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B,OAAO,CAAC,MAAM,CAAC,aAAa;IAI5B;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiCjC,OAAO,CAAC,MAAM,CAAC,WAAW;IAiC1B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAiB3B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAKhC,OAAO,CAAC,MAAM,CAAC,eAAe;IAQ9B,OAAO,CAAC,MAAM,CAAC,WAAW;IAW1B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAOnC,OAAO,CAAC,MAAM,CAAC,OAAO;IAUtB,OAAO,CAAC,MAAM,CAAC,SAAS;IAMxB,OAAO,CAAC,MAAM,CAAC,IAAI;CAGnB"}
|
|
@@ -29,6 +29,25 @@ const SCOPE_KINDS = new Set([
|
|
|
29
29
|
SyntaxKind.ClassDeclaration,
|
|
30
30
|
SyntaxKind.InterfaceDeclaration,
|
|
31
31
|
]);
|
|
32
|
+
/** Binary-expression operators that assign to their left-hand side: `=` plus every compound form (`+=`, `&&=`, …). */
|
|
33
|
+
const ASSIGNMENT_OPERATORS = new Set([
|
|
34
|
+
SyntaxKind.EqualsToken,
|
|
35
|
+
SyntaxKind.PlusEqualsToken,
|
|
36
|
+
SyntaxKind.MinusEqualsToken,
|
|
37
|
+
SyntaxKind.AsteriskEqualsToken,
|
|
38
|
+
SyntaxKind.AsteriskAsteriskEqualsToken,
|
|
39
|
+
SyntaxKind.SlashEqualsToken,
|
|
40
|
+
SyntaxKind.PercentEqualsToken,
|
|
41
|
+
SyntaxKind.LessThanLessThanEqualsToken,
|
|
42
|
+
SyntaxKind.GreaterThanGreaterThanEqualsToken,
|
|
43
|
+
SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,
|
|
44
|
+
SyntaxKind.AmpersandEqualsToken,
|
|
45
|
+
SyntaxKind.BarEqualsToken,
|
|
46
|
+
SyntaxKind.CaretEqualsToken,
|
|
47
|
+
SyntaxKind.AmpersandAmpersandEqualsToken,
|
|
48
|
+
SyntaxKind.BarBarEqualsToken,
|
|
49
|
+
SyntaxKind.QuestionQuestionEqualsToken,
|
|
50
|
+
]);
|
|
32
51
|
export class SemanticExtractor {
|
|
33
52
|
static extract(sourceFile, rootPath) {
|
|
34
53
|
const edges = [];
|
|
@@ -50,6 +69,7 @@ export class SemanticExtractor {
|
|
|
50
69
|
SemanticExtractor.extractCalls(sourceFile, rootPath, edges);
|
|
51
70
|
SemanticExtractor.extractInstantiations(sourceFile, rootPath, edges);
|
|
52
71
|
SemanticExtractor.extractReads(sourceFile, rootPath, edges);
|
|
72
|
+
SemanticExtractor.extractWrites(sourceFile, rootPath, edges);
|
|
53
73
|
return { nodes: [], edges };
|
|
54
74
|
}
|
|
55
75
|
static extractClass(cls, rootPath, edges) {
|
|
@@ -66,11 +86,45 @@ export class SemanticExtractor {
|
|
|
66
86
|
}
|
|
67
87
|
for (const method of cls.getMethods()) {
|
|
68
88
|
SemanticExtractor.extractSignature(method, rootPath, edges);
|
|
89
|
+
SemanticExtractor.extractOverrides(cls, method, rootPath, edges);
|
|
69
90
|
}
|
|
70
91
|
for (const property of cls.getProperties()) {
|
|
71
92
|
SemanticExtractor.addTypeEdges(NodeId.forDeclaration(property, rootPath), property.getTypeNode(), 'USES_TYPE', rootPath, edges);
|
|
72
93
|
}
|
|
73
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Emit an `OVERRIDES` edge from a class method to the member it overrides:
|
|
97
|
+
* the nearest base-class method of the same name, and any implemented
|
|
98
|
+
* interface method of the same name. The target id is computed with
|
|
99
|
+
* {@link NodeId.forDeclaration} on the resolved declaration, so it matches
|
|
100
|
+
* the node the structural extractor already emitted for that member.
|
|
101
|
+
*/
|
|
102
|
+
static extractOverrides(cls, method, rootPath, edges) {
|
|
103
|
+
const name = method.getName();
|
|
104
|
+
const fromId = NodeId.forDeclaration(method, rootPath);
|
|
105
|
+
let base = cls.getBaseClass();
|
|
106
|
+
while (base !== undefined) {
|
|
107
|
+
const overridden = base.getMethod(name);
|
|
108
|
+
if (overridden !== undefined) {
|
|
109
|
+
if (SemanticExtractor.inProject(overridden) === true) {
|
|
110
|
+
edges.push(SemanticExtractor.edge('OVERRIDES', fromId, NodeId.forDeclaration(overridden, rootPath)));
|
|
111
|
+
}
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
base = base.getBaseClass();
|
|
115
|
+
}
|
|
116
|
+
for (const impl of cls.getImplements()) {
|
|
117
|
+
const decl = SemanticExtractor.resolve(impl.getExpression());
|
|
118
|
+
const iface = decl?.asKind(SyntaxKind.InterfaceDeclaration);
|
|
119
|
+
if (iface === undefined || SemanticExtractor.inProject(iface) === false) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const signature = iface.getMethod(name);
|
|
123
|
+
if (signature !== undefined) {
|
|
124
|
+
edges.push(SemanticExtractor.edge('OVERRIDES', fromId, NodeId.forDeclaration(signature, rootPath)));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
74
128
|
static extractInterface(iface, rootPath, edges) {
|
|
75
129
|
const ifaceId = NodeId.forDeclaration(iface, rootPath);
|
|
76
130
|
for (const base of iface.getBaseDeclarations()) {
|
|
@@ -153,8 +207,22 @@ export class SemanticExtractor {
|
|
|
153
207
|
}
|
|
154
208
|
}
|
|
155
209
|
static extractReads(sourceFile, rootPath, edges) {
|
|
210
|
+
SemanticExtractor.extractValueAccess(sourceFile, rootPath, edges, 'READS', (identifier) => SemanticExtractor.isValueRead(identifier));
|
|
211
|
+
}
|
|
212
|
+
static extractWrites(sourceFile, rootPath, edges) {
|
|
213
|
+
SemanticExtractor.extractValueAccess(sourceFile, rootPath, edges, 'WRITES', (identifier) => SemanticExtractor.isValueWrite(identifier));
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Emits a value-access edge from the enclosing scope to each in-project,
|
|
217
|
+
* module-level value declaration an identifier touches. `accesses` selects the
|
|
218
|
+
* identifiers (a read or a write) and `kind` is the edge emitted; the rest — the
|
|
219
|
+
* target must be an emitted top-level value declaration, a declaration's own name
|
|
220
|
+
* is skipped, self-edges are dropped — is shared by both. Repeated accesses
|
|
221
|
+
* collapse into one counted edge in {@link GraphBuilder}.
|
|
222
|
+
*/
|
|
223
|
+
static extractValueAccess(sourceFile, rootPath, edges, kind, accesses) {
|
|
156
224
|
for (const identifier of sourceFile.getDescendantsOfKind(SyntaxKind.Identifier)) {
|
|
157
|
-
if (
|
|
225
|
+
if (accesses(identifier) === false) {
|
|
158
226
|
continue;
|
|
159
227
|
}
|
|
160
228
|
const target = SemanticExtractor.resolve(identifier);
|
|
@@ -174,7 +242,7 @@ export class SemanticExtractor {
|
|
|
174
242
|
const fromId = NodeId.forDeclaration(scope, rootPath);
|
|
175
243
|
const toId = NodeId.forDeclaration(target, rootPath);
|
|
176
244
|
if (fromId !== toId) {
|
|
177
|
-
edges.push(SemanticExtractor.edge(
|
|
245
|
+
edges.push(SemanticExtractor.edge(kind, fromId, toId));
|
|
178
246
|
}
|
|
179
247
|
}
|
|
180
248
|
}
|
|
@@ -201,11 +269,37 @@ export class SemanticExtractor {
|
|
|
201
269
|
if (Node.isPropertyAssignment(parent)) {
|
|
202
270
|
return parent.getNameNode() !== identifier;
|
|
203
271
|
}
|
|
272
|
+
if (Node.isBinaryExpression(parent)) {
|
|
273
|
+
return parent.getLeft() !== identifier
|
|
274
|
+
|| parent.getOperatorToken().getKind() !== SyntaxKind.EqualsToken;
|
|
275
|
+
}
|
|
204
276
|
if (Node.isTypeReference(parent) || Node.isPropertySignature(parent) || Node.isPropertyDeclaration(parent) || Node.isBindingElement(parent)) {
|
|
205
277
|
return false;
|
|
206
278
|
}
|
|
207
279
|
return true;
|
|
208
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* Whether an identifier is written: the left-hand side of an assignment
|
|
283
|
+
* (`x = …`, `x += …`) or the operand of a `++`/`--`. A compound assignment and an
|
|
284
|
+
* increment also read the old value, so {@link isValueRead} reports those
|
|
285
|
+
* identifiers too; a plain `x = …` is a write only.
|
|
286
|
+
*/
|
|
287
|
+
static isValueWrite(identifier) {
|
|
288
|
+
const parent = identifier.getParent();
|
|
289
|
+
if (parent === undefined) {
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
if (Node.isBinaryExpression(parent)) {
|
|
293
|
+
return parent.getLeft() === identifier
|
|
294
|
+
&& ASSIGNMENT_OPERATORS.has(parent.getOperatorToken().getKind());
|
|
295
|
+
}
|
|
296
|
+
if (Node.isPrefixUnaryExpression(parent) || Node.isPostfixUnaryExpression(parent)) {
|
|
297
|
+
const operator = parent.getOperatorToken();
|
|
298
|
+
return parent.getOperand() === identifier
|
|
299
|
+
&& (operator === SyntaxKind.PlusPlusToken || operator === SyntaxKind.MinusMinusToken);
|
|
300
|
+
}
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
209
303
|
static isDeclarationName(identifier, declaration) {
|
|
210
304
|
const named = declaration;
|
|
211
305
|
return typeof named.getNameNode === 'function' && named.getNameNode() === identifier;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic_extractor.js","sourceRoot":"","sources":["../../src/extract/semantic_extractor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"semantic_extractor.js","sourceRoot":"","sources":["../../src/extract/semantic_extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,12 @@ export declare class StructuralExtractor {
|
|
|
10
10
|
private static extractImports;
|
|
11
11
|
private static extractClass;
|
|
12
12
|
private static extractInterface;
|
|
13
|
+
/**
|
|
14
|
+
* Pushes a declaration node, its `CONTAINS` edge from `parentId`, and — when the
|
|
15
|
+
* declaration is exported — an `EXPORTS` edge from `moduleId`. Only top-level
|
|
16
|
+
* declarations are ever exported, so `EXPORTS` always originates at the module;
|
|
17
|
+
* nested members (methods, properties) carry `exported === false` and get none.
|
|
18
|
+
*/
|
|
13
19
|
private static push;
|
|
14
20
|
private static isInternal;
|
|
15
21
|
private static isExported;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural_extractor.d.ts","sourceRoot":"","sources":["../../src/extract/structural_extractor.ts"],"names":[],"mappings":"AACA,OAAO,EAIN,UAAU,EACV,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAY,MAAM,mBAAmB,CAAC;AAGxD,MAAM,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACnB,CAAC;AAEF,qBAAa,mBAAmB;IAC/B,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAgCpE,OAAO,CAAC,MAAM,CAAC,cAAc;IAqB7B,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgB/B,OAAO,CAAC,MAAM,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"structural_extractor.d.ts","sourceRoot":"","sources":["../../src/extract/structural_extractor.ts"],"names":[],"mappings":"AACA,OAAO,EAIN,UAAU,EACV,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAY,MAAM,mBAAmB,CAAC;AAGxD,MAAM,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACnB,CAAC;AAEF,qBAAa,mBAAmB;IAC/B,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAgCpE,OAAO,CAAC,MAAM,CAAC,cAAc;IAqB7B,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgB/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,IAAI;IA+BnB,OAAO,CAAC,MAAM,CAAC,UAAU;IAKzB,OAAO,CAAC,MAAM,CAAC,UAAU;IAKzB,OAAO,CAAC,MAAM,CAAC,IAAI;CAYnB"}
|