ts-knowledge-graph 0.1.1 → 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 +104 -43
- package/contribs/web_visualisation/README.md +83 -0
- package/contribs/web_visualisation/web/css/style.css +219 -0
- package/contribs/web_visualisation/web/data/.gitignore +3 -0
- package/contribs/web_visualisation/web/data/kind_descriptions.js +38 -0
- package/contribs/web_visualisation/web/index.html +74 -0
- package/contribs/web_visualisation/web/js/app.js +910 -0
- 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 +0 -9
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +32 -208
- 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.d.ts +5 -0
- package/dist/commands/blast_radius_command.d.ts.map +1 -0
- package/dist/commands/blast_radius_command.js +18 -0
- package/dist/commands/blast_radius_command.js.map +1 -0
- package/dist/commands/calls_command.d.ts +5 -0
- package/dist/commands/calls_command.d.ts.map +1 -0
- package/dist/commands/calls_command.js +7 -0
- package/dist/commands/calls_command.js.map +1 -0
- package/dist/commands/command_helpers.d.ts +15 -0
- package/dist/commands/command_helpers.d.ts.map +1 -0
- package/dist/commands/command_helpers.js +61 -0
- package/dist/commands/command_helpers.js.map +1 -0
- 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/dead_exports_command.d.ts +5 -0
- package/dist/commands/dead_exports_command.d.ts.map +1 -0
- package/dist/commands/dead_exports_command.js +7 -0
- package/dist/commands/dead_exports_command.js.map +1 -0
- package/dist/commands/enrich_command.d.ts +7 -0
- 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/extract_command.d.ts +8 -0
- package/dist/commands/extract_command.d.ts.map +1 -0
- package/dist/commands/extract_command.js +49 -0
- package/dist/commands/extract_command.js.map +1 -0
- package/dist/commands/find_command.d.ts +5 -0
- package/dist/commands/find_command.d.ts.map +1 -0
- package/dist/commands/find_command.js +7 -0
- package/dist/commands/find_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 +15 -0
- package/dist/commands/install_command.d.ts.map +1 -0
- package/dist/commands/install_command.js +41 -0
- package/dist/commands/install_command.js.map +1 -0
- package/dist/commands/load_command.d.ts +6 -0
- package/dist/commands/load_command.d.ts.map +1 -0
- package/dist/commands/load_command.js +30 -0
- package/dist/commands/load_command.js.map +1 -0
- package/dist/commands/neighbors_command.d.ts +5 -0
- package/dist/commands/neighbors_command.d.ts.map +1 -0
- package/dist/commands/neighbors_command.js +17 -0
- package/dist/commands/neighbors_command.js.map +1 -0
- package/dist/commands/references_command.d.ts +5 -0
- package/dist/commands/references_command.d.ts.map +1 -0
- package/dist/commands/references_command.js +17 -0
- package/dist/commands/references_command.js.map +1 -0
- 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 +46 -0
- package/dist/commands/web_command.d.ts.map +1 -0
- package/dist/commands/web_command.js +226 -0
- package/dist/commands/web_command.js.map +1 -0
- package/dist/commands/who_calls_command.d.ts +5 -0
- package/dist/commands/who_calls_command.d.ts.map +1 -0
- package/dist/commands/who_calls_command.js +7 -0
- package/dist/commands/who_calls_command.js.map +1 -0
- 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 → graph_builder.d.ts} +9 -1
- package/dist/extract/graph_builder.d.ts.map +1 -0
- package/dist/extract/graph_builder.js +61 -0
- package/dist/extract/graph_builder.js.map +1 -0
- package/dist/extract/node_id.d.ts +24 -0
- package/dist/extract/node_id.d.ts.map +1 -0
- package/dist/extract/node_id.js +44 -0
- package/dist/extract/node_id.js.map +1 -0
- package/dist/extract/{project-loader.d.ts → project_loader.d.ts} +1 -1
- package/dist/extract/project_loader.d.ts.map +1 -0
- package/dist/extract/{project-loader.js → project_loader.js} +1 -1
- package/dist/extract/{project-loader.js.map → project_loader.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 +47 -0
- package/dist/extract/semantic_extractor.d.ts.map +1 -0
- package/dist/extract/{semantic-extractor.js → semantic_extractor.js} +98 -4
- package/dist/extract/semantic_extractor.js.map +1 -0
- package/dist/extract/{structural-extractor.d.ts → structural_extractor.d.ts} +7 -1
- package/dist/extract/{structural-extractor.d.ts.map → structural_extractor.d.ts.map} +1 -1
- package/dist/extract/{structural-extractor.js → structural_extractor.js} +24 -14
- package/dist/extract/structural_extractor.js.map +1 -0
- 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 +262 -0
- package/dist/query/graph_query.d.ts.map +1 -0
- package/dist/query/graph_query.js +604 -0
- package/dist/query/graph_query.js.map +1 -0
- 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/{jsonl-reader.d.ts → jsonl_reader.d.ts} +1 -1
- package/dist/store/{jsonl-reader.d.ts.map → jsonl_reader.d.ts.map} +1 -1
- package/dist/store/{jsonl-reader.js → jsonl_reader.js} +1 -1
- package/dist/store/{jsonl-reader.js.map → jsonl_reader.js.map} +1 -1
- package/dist/store/{jsonl-store.d.ts → jsonl_store.d.ts} +1 -1
- package/dist/store/{jsonl-store.d.ts.map → jsonl_store.d.ts.map} +1 -1
- package/dist/store/{jsonl-store.js → jsonl_store.js} +1 -1
- package/dist/store/{jsonl-store.js.map → jsonl_store.js.map} +1 -1
- package/dist/store/kuzu_store.d.ts +66 -0
- package/dist/store/kuzu_store.d.ts.map +1 -0
- package/dist/store/kuzu_store.js +156 -0
- package/dist/store/kuzu_store.js.map +1 -0
- 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/dotclaude_folder/skills/code-graph-query/SKILL.md +91 -0
- package/package.json +88 -5
- 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/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/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/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.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.map +0 -1
- 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/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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Node, SyntaxKind, } from 'ts-morph';
|
|
2
|
-
import { NodeId } from './
|
|
2
|
+
import { NodeId } from './node_id.js';
|
|
3
3
|
const CALLABLE_TARGET_KINDS = new Set([
|
|
4
4
|
SyntaxKind.FunctionDeclaration,
|
|
5
5
|
SyntaxKind.MethodDeclaration,
|
|
@@ -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;
|
|
@@ -251,4 +345,4 @@ export class SemanticExtractor {
|
|
|
251
345
|
return { id: `${kind}:${from}->${to}`, kind, from, to };
|
|
252
346
|
}
|
|
253
347
|
}
|
|
254
|
-
//# sourceMappingURL=
|
|
348
|
+
//# sourceMappingURL=semantic_extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic_extractor.js","sourceRoot":"","sources":["../../src/extract/semantic_extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,9 +10,15 @@ 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;
|
|
16
22
|
private static edge;
|
|
17
23
|
}
|
|
18
|
-
//# sourceMappingURL=
|
|
24
|
+
//# sourceMappingURL=structural_extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { relative } from 'node:path';
|
|
2
|
-
import { NodeId } from './
|
|
2
|
+
import { NodeId } from './node_id.js';
|
|
3
3
|
export class StructuralExtractor {
|
|
4
4
|
static extract(sourceFile, rootPath) {
|
|
5
5
|
const nodes = [];
|
|
@@ -15,16 +15,16 @@ export class StructuralExtractor {
|
|
|
15
15
|
StructuralExtractor.extractInterface(iface, moduleId, rootPath, nodes, edges);
|
|
16
16
|
}
|
|
17
17
|
for (const alias of sourceFile.getTypeAliases()) {
|
|
18
|
-
StructuralExtractor.push(alias, 'TypeAlias', moduleId, rootPath, nodes, edges);
|
|
18
|
+
StructuralExtractor.push(alias, 'TypeAlias', moduleId, moduleId, rootPath, nodes, edges);
|
|
19
19
|
}
|
|
20
20
|
for (const en of sourceFile.getEnums()) {
|
|
21
|
-
StructuralExtractor.push(en, 'Enum', moduleId, rootPath, nodes, edges);
|
|
21
|
+
StructuralExtractor.push(en, 'Enum', moduleId, moduleId, rootPath, nodes, edges);
|
|
22
22
|
}
|
|
23
23
|
for (const fn of sourceFile.getFunctions()) {
|
|
24
|
-
StructuralExtractor.push(fn, 'Function', moduleId, rootPath, nodes, edges);
|
|
24
|
+
StructuralExtractor.push(fn, 'Function', moduleId, moduleId, rootPath, nodes, edges);
|
|
25
25
|
}
|
|
26
26
|
for (const variable of sourceFile.getVariableDeclarations()) {
|
|
27
|
-
StructuralExtractor.push(variable, 'Variable', moduleId, rootPath, nodes, edges);
|
|
27
|
+
StructuralExtractor.push(variable, 'Variable', moduleId, moduleId, rootPath, nodes, edges);
|
|
28
28
|
}
|
|
29
29
|
return { nodes, edges };
|
|
30
30
|
}
|
|
@@ -43,25 +43,32 @@ export class StructuralExtractor {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
static extractClass(cls, moduleId, rootPath, nodes, edges) {
|
|
46
|
-
const classId = StructuralExtractor.push(cls, 'Class', moduleId, rootPath, nodes, edges);
|
|
46
|
+
const classId = StructuralExtractor.push(cls, 'Class', moduleId, moduleId, rootPath, nodes, edges);
|
|
47
47
|
for (const method of cls.getMethods()) {
|
|
48
|
-
StructuralExtractor.push(method, 'Method', classId, rootPath, nodes, edges);
|
|
48
|
+
StructuralExtractor.push(method, 'Method', classId, moduleId, rootPath, nodes, edges);
|
|
49
49
|
}
|
|
50
50
|
for (const property of cls.getProperties()) {
|
|
51
|
-
StructuralExtractor.push(property, 'Property', classId, rootPath, nodes, edges);
|
|
51
|
+
StructuralExtractor.push(property, 'Property', classId, moduleId, rootPath, nodes, edges);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
static extractInterface(iface, moduleId, rootPath, nodes, edges) {
|
|
55
|
-
const ifaceId = StructuralExtractor.push(iface, 'Interface', moduleId, rootPath, nodes, edges);
|
|
55
|
+
const ifaceId = StructuralExtractor.push(iface, 'Interface', moduleId, moduleId, rootPath, nodes, edges);
|
|
56
56
|
for (const method of iface.getMethods()) {
|
|
57
|
-
StructuralExtractor.push(method, 'Method', ifaceId, rootPath, nodes, edges);
|
|
57
|
+
StructuralExtractor.push(method, 'Method', ifaceId, moduleId, rootPath, nodes, edges);
|
|
58
58
|
}
|
|
59
59
|
for (const property of iface.getProperties()) {
|
|
60
|
-
StructuralExtractor.push(property, 'Property', ifaceId, rootPath, nodes, edges);
|
|
60
|
+
StructuralExtractor.push(property, 'Property', ifaceId, moduleId, rootPath, nodes, edges);
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Pushes a declaration node, its `CONTAINS` edge from `parentId`, and — when the
|
|
65
|
+
* declaration is exported — an `EXPORTS` edge from `moduleId`. Only top-level
|
|
66
|
+
* declarations are ever exported, so `EXPORTS` always originates at the module;
|
|
67
|
+
* nested members (methods, properties) carry `exported === false` and get none.
|
|
68
|
+
*/
|
|
69
|
+
static push(node, kind, parentId, moduleId, rootPath, nodes, edges) {
|
|
64
70
|
const id = NodeId.forDeclaration(node, rootPath);
|
|
71
|
+
const exported = StructuralExtractor.isExported(node);
|
|
65
72
|
nodes.push({
|
|
66
73
|
id,
|
|
67
74
|
kind,
|
|
@@ -73,9 +80,12 @@ export class StructuralExtractor {
|
|
|
73
80
|
endLine: node.getEndLineNumber(),
|
|
74
81
|
endColumn: 0,
|
|
75
82
|
},
|
|
76
|
-
exported
|
|
83
|
+
exported,
|
|
77
84
|
});
|
|
78
85
|
edges.push(StructuralExtractor.edge('CONTAINS', parentId, id));
|
|
86
|
+
if (exported === true) {
|
|
87
|
+
edges.push(StructuralExtractor.edge('EXPORTS', moduleId, id));
|
|
88
|
+
}
|
|
79
89
|
return id;
|
|
80
90
|
}
|
|
81
91
|
static isInternal(sourceFile) {
|
|
@@ -94,4 +104,4 @@ export class StructuralExtractor {
|
|
|
94
104
|
return edge;
|
|
95
105
|
}
|
|
96
106
|
}
|
|
97
|
-
//# sourceMappingURL=
|
|
107
|
+
//# sourceMappingURL=structural_extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural_extractor.js","sourceRoot":"","sources":["../../src/extract/structural_extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Absolute path to the package root. This module sits at the top of `src`
|
|
3
|
+
* (and of the built `dist`), so a single `..` hop reaches the package root
|
|
4
|
+
* whether running via tsx from `src` or from the compiled `dist` output.
|
|
5
|
+
*/
|
|
6
|
+
export declare const PROJECT_ROOT: string;
|
|
7
|
+
//# sourceMappingURL=project_root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_root.d.ts","sourceRoot":"","sources":["../src/project_root.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAyD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { dirname, resolve } from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
/**
|
|
4
|
+
* Absolute path to the package root. This module sits at the top of `src`
|
|
5
|
+
* (and of the built `dist`), so a single `..` hop reaches the package root
|
|
6
|
+
* whether running via tsx from `src` or from the compiled `dist` output.
|
|
7
|
+
*/
|
|
8
|
+
export const PROJECT_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
9
|
+
//# sourceMappingURL=project_root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_root.js","sourceRoot":"","sources":["../src/project_root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { KuzuStore } from '../store/kuzu_store.js';
|
|
2
|
+
export type SymbolRef = {
|
|
3
|
+
id: string;
|
|
4
|
+
kind: string;
|
|
5
|
+
name: string;
|
|
6
|
+
filePath: string;
|
|
7
|
+
startLine: number;
|
|
8
|
+
metadata: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
export type NeighborRef = SymbolRef & {
|
|
11
|
+
edgeKind: string;
|
|
12
|
+
edgeMetadata: Record<string, unknown>;
|
|
13
|
+
direction: 'in' | 'out';
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The metric a {@link GraphQuery.hotspots} ranking is computed against.
|
|
17
|
+
*
|
|
18
|
+
* - `self-time` / `samples` — measured runtime from `metadata.runtime`, present
|
|
19
|
+
* only after `enrich`.
|
|
20
|
+
* - `callers` — inbound `CALLS` edge count (static fan-in / centrality).
|
|
21
|
+
* - `call-count` — sum of inbound `CALLS` edge `metadata.count` (how often a
|
|
22
|
+
* symbol is actually invoked across all call sites in source).
|
|
23
|
+
* - `blast-radius` — transitive inbound `CALLS` size (change-risk / centrality).
|
|
24
|
+
*/
|
|
25
|
+
export type HotspotMetric = 'self-time' | 'samples' | 'callers' | 'call-count' | 'blast-radius';
|
|
26
|
+
/** A ranked node, carrying the score it earned and the metric it was scored by. */
|
|
27
|
+
export type HotspotRef = SymbolRef & {
|
|
28
|
+
score: number;
|
|
29
|
+
metric: HotspotMetric;
|
|
30
|
+
};
|
|
31
|
+
export type HotspotOptions = {
|
|
32
|
+
/** Metric to rank by. Defaults to `self-time` when the graph is enriched, `callers` otherwise. */
|
|
33
|
+
by?: HotspotMetric;
|
|
34
|
+
/** Maximum number of hotspots to return. Defaults to 20, clamped to [1, 1000]. */
|
|
35
|
+
limit?: number;
|
|
36
|
+
/** Restrict ranking to nodes that carry `metadata.runtime`. */
|
|
37
|
+
measuredOnly?: boolean;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* The result of a hotspot ranking: the top-N nodes plus the context needed to
|
|
41
|
+
* interpret them — the metric actually used, what was requested, and whether a
|
|
42
|
+
* runtime metric fell back to a static one because the graph is un-enriched.
|
|
43
|
+
*/
|
|
44
|
+
export type HotspotReport = {
|
|
45
|
+
/** The metric actually used to rank (differs from `requested` only after a fallback). */
|
|
46
|
+
metric: HotspotMetric;
|
|
47
|
+
/** The metric the caller asked for, or the resolved default when none was given. */
|
|
48
|
+
requested: HotspotMetric;
|
|
49
|
+
/** Whether any node in the graph carries `metadata.runtime`. */
|
|
50
|
+
enriched: boolean;
|
|
51
|
+
/** True when a runtime metric was requested on an un-enriched graph, so `metric` fell back to `callers`. */
|
|
52
|
+
fellBack: boolean;
|
|
53
|
+
/** Whether ranking was restricted to measured nodes. */
|
|
54
|
+
measuredOnly: boolean;
|
|
55
|
+
/** Top-N nodes by `metric`, descending, each carrying its `score`. */
|
|
56
|
+
hotspots: HotspotRef[];
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* The measured weight {@link GraphQuery.costRanking} and
|
|
60
|
+
* {@link GraphQuery.costAttribution} propagate along `CALLS` edges. Both read
|
|
61
|
+
* `metadata.runtime`, present only after `enrich`:
|
|
62
|
+
* - `self-time` — `metadata.runtime.selfMs`.
|
|
63
|
+
* - `samples` — `metadata.runtime.samples`.
|
|
64
|
+
*/
|
|
65
|
+
export type CostMetric = 'self-time' | 'samples';
|
|
66
|
+
/**
|
|
67
|
+
* A node carrying its propagated cost. `selfCost` is the measured *exclusive*
|
|
68
|
+
* cost (time in the node itself); `inclusiveCost` adds the cost attributed from
|
|
69
|
+
* everything it transitively calls; `shareOfTotal` is `inclusiveCost` as a
|
|
70
|
+
* fraction of the graph's total self cost — the "responsible for X% of total"
|
|
71
|
+
* number. `cyclic`/`cycleSize` flag membership in a call cycle, whose members
|
|
72
|
+
* share the cycle's total inclusive cost.
|
|
73
|
+
*/
|
|
74
|
+
export type CostRef = SymbolRef & {
|
|
75
|
+
selfCost: number;
|
|
76
|
+
inclusiveCost: number;
|
|
77
|
+
shareOfTotal: number;
|
|
78
|
+
cyclic: boolean;
|
|
79
|
+
cycleSize: number;
|
|
80
|
+
};
|
|
81
|
+
export type CostOptions = {
|
|
82
|
+
/** Metric to propagate. Defaults to `self-time`. */
|
|
83
|
+
by?: CostMetric;
|
|
84
|
+
/** Maximum number of ranked nodes to return. Defaults to 20, clamped to [1, 1000]. */
|
|
85
|
+
limit?: number;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* A ranking of nodes by inclusive cost, with the context needed to read it: the
|
|
89
|
+
* metric propagated, whether the graph is enriched at all, and the total self
|
|
90
|
+
* cost that `shareOfTotal` is a fraction of.
|
|
91
|
+
*/
|
|
92
|
+
export type CostReport = {
|
|
93
|
+
/** The metric propagated. */
|
|
94
|
+
metric: CostMetric;
|
|
95
|
+
/** Whether any node in the graph carries `metadata.runtime`. */
|
|
96
|
+
enriched: boolean;
|
|
97
|
+
/** Σ self cost over every node — the denominator behind `shareOfTotal`. */
|
|
98
|
+
totalSelf: number;
|
|
99
|
+
/** Count of nodes that carry runtime metrics. */
|
|
100
|
+
measuredNodes: number;
|
|
101
|
+
/**
|
|
102
|
+
* Fraction of the profiled cost (in `metric`) that the join attributed to graph
|
|
103
|
+
* nodes, from the `enrich` manifest — the share of total measured cost this
|
|
104
|
+
* attribution actually accounts for. `null` when the graph carries no manifest
|
|
105
|
+
* (never enriched, or enriched before manifests were recorded).
|
|
106
|
+
*/
|
|
107
|
+
coverage: number | null;
|
|
108
|
+
/** Nodes by `inclusiveCost`, descending, top-N, zero-cost nodes omitted. */
|
|
109
|
+
nodes: CostRef[];
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* One edge of a {@link CostAttribution}: a caller or callee of the focal node,
|
|
113
|
+
* carrying the cost attributed across that edge and its share of the focal
|
|
114
|
+
* node's inclusive cost.
|
|
115
|
+
*/
|
|
116
|
+
export type CostFlow = SymbolRef & {
|
|
117
|
+
/** Cost attributed along this edge, in the report's metric. */
|
|
118
|
+
amount: number;
|
|
119
|
+
/** `amount` as a fraction of the focal node's inclusive cost, in [0, 1]. */
|
|
120
|
+
share: number;
|
|
121
|
+
/** The `CALLS` edge's call-site count — the propagation weight. */
|
|
122
|
+
callCount: number;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* A per-node causal breakdown. `callees` is where the focal node's inclusive
|
|
126
|
+
* cost goes (the cost each callee's subtree contributes); `callers` is who is
|
|
127
|
+
* responsible for the focal node's cost (how it is attributed upward). `node` is
|
|
128
|
+
* null when the id resolves to no graph node.
|
|
129
|
+
*/
|
|
130
|
+
export type CostAttribution = {
|
|
131
|
+
metric: CostMetric;
|
|
132
|
+
enriched: boolean;
|
|
133
|
+
totalSelf: number;
|
|
134
|
+
/** Fraction of profiled cost attributed to graph nodes, or `null` without a manifest (see {@link CostReport.coverage}). */
|
|
135
|
+
coverage: number | null;
|
|
136
|
+
node: CostRef | null;
|
|
137
|
+
callees: CostFlow[];
|
|
138
|
+
callers: CostFlow[];
|
|
139
|
+
};
|
|
140
|
+
export declare class GraphQuery {
|
|
141
|
+
private readonly store;
|
|
142
|
+
constructor(store: KuzuStore);
|
|
143
|
+
whoCalls(id: string): Promise<SymbolRef[]>;
|
|
144
|
+
calls(id: string): Promise<SymbolRef[]>;
|
|
145
|
+
blastRadius(id: string, depth: number): Promise<SymbolRef[]>;
|
|
146
|
+
deadExports(): Promise<SymbolRef[]>;
|
|
147
|
+
references(id: string): Promise<NeighborRef[]>;
|
|
148
|
+
neighborhood(id: string): Promise<NeighborRef[]>;
|
|
149
|
+
/**
|
|
150
|
+
* Resolves a search pattern to nodes, matching either a substring of the node
|
|
151
|
+
* name or an exact (case-insensitive) node kind. The kind match makes the
|
|
152
|
+
* system-level kinds discoverable as a set — `find Endpoint`, `find ConfigFlag`,
|
|
153
|
+
* `find ExternalAPI` — since their names are values (a route path, a host) rather
|
|
154
|
+
* than the kind itself. `Module` nodes are always excluded.
|
|
155
|
+
*/
|
|
156
|
+
find(pattern: string): Promise<SymbolRef[]>;
|
|
157
|
+
/**
|
|
158
|
+
* Ranks nodes by optimization leverage, returning the top-N for a chosen
|
|
159
|
+
* metric alongside the context needed to read the result.
|
|
160
|
+
*
|
|
161
|
+
* Runtime metrics (`self-time`, `samples`) read `metadata.runtime`; static
|
|
162
|
+
* metrics (`callers`, `call-count`, `blast-radius`) are derived from the
|
|
163
|
+
* inbound `CALLS` graph. The whole graph is read once (nodes, and the call
|
|
164
|
+
* edges when a static metric is used) and ranked in memory rather than per
|
|
165
|
+
* node, so `blast-radius` does not fan out into one traversal per node.
|
|
166
|
+
*
|
|
167
|
+
* The default metric is `self-time` on an enriched graph and `callers`
|
|
168
|
+
* otherwise. Asking for a runtime metric on an un-enriched graph does not
|
|
169
|
+
* return empty: it falls back to `callers` and flags `fellBack` so the caller
|
|
170
|
+
* can say so. Nodes that score zero on the chosen metric are omitted — a
|
|
171
|
+
* symbol nothing calls is not a fan-in hotspot.
|
|
172
|
+
*/
|
|
173
|
+
hotspots(options?: HotspotOptions): Promise<HotspotReport>;
|
|
174
|
+
/**
|
|
175
|
+
* Ranks nodes by **inclusive cost** — self cost plus the cost attributed from
|
|
176
|
+
* everything a node transitively calls — and reports each node's share of the
|
|
177
|
+
* graph's total self cost. This is the causal counterpart to {@link hotspots}'
|
|
178
|
+
* `self-time` ranking: where hotspots asks "where is time spent?", this asks
|
|
179
|
+
* "who is *responsible* for the time spent?".
|
|
180
|
+
*
|
|
181
|
+
* Cost propagates along `CALLS` edges, each callee's inclusive cost partitioned
|
|
182
|
+
* among its callers in proportion to call-site `count`, so cost is conserved (a
|
|
183
|
+
* diamond is not double-counted) and `shareOfTotal` is a true fraction. Call
|
|
184
|
+
* cycles are collapsed and their members share the cycle's total. The whole
|
|
185
|
+
* graph is read once and propagated in memory.
|
|
186
|
+
*
|
|
187
|
+
* Cost is inherently a runtime quantity: on an un-enriched graph there is no
|
|
188
|
+
* self cost to propagate, so `nodes` is empty and `enriched` is false — there is
|
|
189
|
+
* no static fallback (unlike {@link hotspots}).
|
|
190
|
+
*/
|
|
191
|
+
costRanking(options?: CostOptions): Promise<CostReport>;
|
|
192
|
+
/**
|
|
193
|
+
* Breaks one node's cost down causally: where its inclusive cost goes
|
|
194
|
+
* (`callees`, each carrying the cost its subtree contributes) and who is
|
|
195
|
+
* responsible for it (`callers`, how the node's cost is attributed upward by
|
|
196
|
+
* call-count share). Both are derived from the same propagation
|
|
197
|
+
* {@link costRanking} uses. Returns `node: null` when the id resolves to no node.
|
|
198
|
+
*/
|
|
199
|
+
costAttribution(id: string, options?: CostOptions): Promise<CostAttribution>;
|
|
200
|
+
/**
|
|
201
|
+
* Reads the runtime ingest manifest `enrich` records at the graph level, or
|
|
202
|
+
* null when the graph carries none (never enriched, or enriched before manifests
|
|
203
|
+
* were recorded). A stored value that fails validation is treated as absent.
|
|
204
|
+
*/
|
|
205
|
+
private readRuntimeManifest;
|
|
206
|
+
/** Builds a node-id → score map for the chosen metric, reading call edges only when a static metric needs them. */
|
|
207
|
+
private scoreNodes;
|
|
208
|
+
/** Reads every `CALLS` edge with its call-site `count` decoded from edge metadata. */
|
|
209
|
+
private readCallEdges;
|
|
210
|
+
/** Sums a per-edge weight onto each edge's target, yielding inbound fan-in (`weight = 1`) or call-count (`weight = count`). */
|
|
211
|
+
private static sumInbound;
|
|
212
|
+
/** Computes, for every node, the number of distinct nodes that transitively reach it through inbound `CALLS`. */
|
|
213
|
+
private static blastRadiusSizes;
|
|
214
|
+
/** Counts the distinct ancestors of `start` over the reverse-call adjacency, cycle-safe and excluding `start` itself. */
|
|
215
|
+
private static reachableCount;
|
|
216
|
+
/**
|
|
217
|
+
* Propagates self cost into inclusive cost over the whole graph in one pass.
|
|
218
|
+
*
|
|
219
|
+
* Self-edges and edges touching unknown nodes are dropped. Strongly-connected
|
|
220
|
+
* components (call cycles) are collapsed with Tarjan's algorithm, which numbers
|
|
221
|
+
* them in reverse-topological order (a callee's component before its caller's);
|
|
222
|
+
* processing components in that order lets each caller read its callees'
|
|
223
|
+
* already-computed inclusive cost. A callee's inclusive cost is partitioned
|
|
224
|
+
* among its callers by call-site `count` over the inbound weight from *outside*
|
|
225
|
+
* its component, so cost is conserved on the acyclic part and a cycle's members
|
|
226
|
+
* share the cycle's total.
|
|
227
|
+
*/
|
|
228
|
+
private static computeCostModel;
|
|
229
|
+
/**
|
|
230
|
+
* Tarjan's strongly-connected components over the index-based successor lists,
|
|
231
|
+
* iterative so a deep call chain cannot overflow the stack. Components are
|
|
232
|
+
* numbered in the order they are finalized, which is reverse-topological: every
|
|
233
|
+
* cross-component edge runs from a higher-numbered component to a lower one.
|
|
234
|
+
*/
|
|
235
|
+
private static stronglyConnectedComponents;
|
|
236
|
+
private static toCostRef;
|
|
237
|
+
private static symbolOf;
|
|
238
|
+
/**
|
|
239
|
+
* The fraction of profiled cost (in `metric`) the join attributed to graph
|
|
240
|
+
* nodes, from the manifest: matched ÷ total. Null when there is no manifest or
|
|
241
|
+
* the profile measured nothing in that metric.
|
|
242
|
+
*/
|
|
243
|
+
private static coverageFor;
|
|
244
|
+
private static toHotspot;
|
|
245
|
+
private static isRuntimeMetric;
|
|
246
|
+
/** Reads a numeric metric out of `metadata.runtime`, defaulting to 0 when absent or non-numeric. */
|
|
247
|
+
private static runtimeValue;
|
|
248
|
+
private static hasRuntime;
|
|
249
|
+
/** Decodes an edge's call-site `count`, defaulting to 1 (the minimum the builder records). */
|
|
250
|
+
private static callCount;
|
|
251
|
+
private static clampLimit;
|
|
252
|
+
private static toRefs;
|
|
253
|
+
private static toRef;
|
|
254
|
+
private static toNeighbor;
|
|
255
|
+
/**
|
|
256
|
+
* Decodes the JSON `metadata` column back into a record. A missing, empty, or
|
|
257
|
+
* malformed value decodes to an empty object so callers always receive a record.
|
|
258
|
+
*/
|
|
259
|
+
private static parseMetadata;
|
|
260
|
+
private static clampDepth;
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=graph_query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_query.d.ts","sourceRoot":"","sources":["../../src/query/graph_query.ts"],"names":[],"mappings":"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"}
|