@angular-modernizer/api 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/index.d.ts +4 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/investigation/call-graph-builder.d.ts +95 -8
  6. package/dist/investigation/call-graph-builder.d.ts.map +1 -1
  7. package/dist/investigation/call-graph-builder.js +424 -81
  8. package/dist/investigation/call-graph-builder.js.map +1 -1
  9. package/dist/investigation/codebase-searcher.d.ts +68 -0
  10. package/dist/investigation/codebase-searcher.d.ts.map +1 -1
  11. package/dist/investigation/codebase-searcher.js +154 -10
  12. package/dist/investigation/codebase-searcher.js.map +1 -1
  13. package/dist/investigation/template-usage-finder.d.ts +64 -0
  14. package/dist/investigation/template-usage-finder.d.ts.map +1 -0
  15. package/dist/investigation/template-usage-finder.js +279 -0
  16. package/dist/investigation/template-usage-finder.js.map +1 -0
  17. package/dist/investigation/template-usage-scanner.d.ts +69 -0
  18. package/dist/investigation/template-usage-scanner.d.ts.map +1 -0
  19. package/dist/investigation/template-usage-scanner.js +375 -0
  20. package/dist/investigation/template-usage-scanner.js.map +1 -0
  21. package/dist/investigation/usage-finder.d.ts +51 -5
  22. package/dist/investigation/usage-finder.d.ts.map +1 -1
  23. package/dist/investigation/usage-finder.js +129 -36
  24. package/dist/investigation/usage-finder.js.map +1 -1
  25. package/package.json +1 -1
  26. package/src/index.ts +16 -0
  27. package/src/investigation/call-graph-builder.ts +528 -103
  28. package/src/investigation/codebase-searcher.ts +240 -11
  29. package/src/investigation/template-usage-finder.ts +389 -0
  30. package/src/investigation/template-usage-scanner.ts +529 -0
  31. package/src/investigation/usage-finder.ts +194 -54
@@ -1,13 +1,36 @@
1
1
  /**
2
2
  * @angular-modernizer/api - Call Graph Builder
3
3
  *
4
- * Builds a call graph for a named method or function within a ts-morph Project.
4
+ * Builds a call graph for a named callable within a ts-morph Project.
5
5
  * Supports traversal upward (callers) and downward (callees) with configurable depth.
6
6
  *
7
+ * Supported targets (and graph nodes):
8
+ * - class methods and top-level functions
9
+ * - constructors (`'constructor'` or `'ClassName.constructor'`); a class
10
+ * without an explicit constructor is represented by its field initializers
11
+ * - get/set accessors
12
+ * - properties and top-level variables initialized with an arrow function or
13
+ * function expression
14
+ *
15
+ * Callees include:
16
+ * - call expressions (resolved via the type checker, name-based fallback
17
+ * only when the symbol cannot be resolved)
18
+ * - `new X()` (edge to X's constructor, including X's field initializers)
19
+ * - `super(...)` (edge to the base class constructor)
20
+ * - property reads/writes that resolve to a getter/setter
21
+ * - for constructors: instance field initializers (they run during
22
+ * construction)
23
+ *
24
+ * Callers are the enclosing callable of each reference: method, function,
25
+ * constructor, accessor, arrow-function property, or (for references in a
26
+ * field initializer) the owning class constructor. Callers of a constructor
27
+ * are the `new X()` sites and the constructors of subclasses.
28
+ *
7
29
  * @remarks
8
30
  * Used in bug investigation to understand how an error propagates through the
9
31
  * codebase. Combine with `find-usages` to trace the full call path from the
10
- * entry point to the failing code.
32
+ * entry point to the failing code, e.g. "what runs transitively while an
33
+ * interceptor is constructed" (ctor -> helper getter -> static config read).
11
34
  *
12
35
  * @example
13
36
  * ```typescript
@@ -18,11 +41,19 @@
18
41
  * });
19
42
  * // graph.callers → who calls getUser
20
43
  * // graph.callees → what getUser calls
44
+ *
45
+ * const ctorGraph = builder.buildCallGraph(
46
+ * 'AuthInterceptor.constructor',
47
+ * '/src/app/auth.interceptor.ts',
48
+ * { direction: 'down', depth: 3 },
49
+ * );
21
50
  * ```
22
51
  */
23
- import { SyntaxKind } from 'ts-morph';
52
+ import { Node, SyntaxKind, } from 'ts-morph';
53
+ const CONSTRUCTOR_NAME = 'constructor';
24
54
  /**
25
- * Builds caller/callee graphs for methods and functions across a ts-morph Project.
55
+ * Builds caller/callee graphs for methods, functions, constructors,
56
+ * accessors and arrow-function properties across a ts-morph Project.
26
57
  */
27
58
  export class CallGraphBuilder {
28
59
  project;
@@ -33,10 +64,13 @@ export class CallGraphBuilder {
33
64
  this.project = project;
34
65
  }
35
66
  /**
36
- * Builds a call graph rooted at the named method or function.
67
+ * Builds a call graph rooted at the named callable.
37
68
  *
38
- * @param method - Name of the method or function to analyse.
39
- * @param file - Absolute path of the source file containing the method.
69
+ * @param method - Name of the callable to analyse. Accepts a method,
70
+ * function, accessor or arrow-function property name, `'constructor'`,
71
+ * or a class-qualified name such as `'AuthInterceptor.constructor'` or
72
+ * `'AuthInterceptor.headers'`.
73
+ * @param file - Absolute path of the source file containing the callable.
40
74
  * @param options - Traversal direction and depth. Defaults to `both` / depth `2`.
41
75
  * @returns A `CallGraphResult` with the target and its caller/callee trees.
42
76
  */
@@ -50,127 +84,423 @@ export class CallGraphBuilder {
50
84
  const targetInfo = {
51
85
  name: method,
52
86
  file,
53
- line: target.getStartLineNumber(),
87
+ line: target.node.getStartLineNumber(),
88
+ kind: target.kind,
89
+ ...(target.className ? { className: target.className } : {}),
54
90
  };
91
+ const rootKey = this.keyOf(target);
55
92
  const callers = direction === 'down'
56
93
  ? []
57
- : this.buildCallers(target, depth, new Set([`${file}:${method}`]));
94
+ : this.buildCallers(target, depth, new Set([rootKey]));
58
95
  const callees = direction === 'up'
59
96
  ? []
60
- : this.buildCallees(target, depth, new Set([`${file}:${method}`]));
97
+ : this.buildCallees(target, depth, new Set([rootKey]));
61
98
  return { target: targetInfo, callers, callees };
62
99
  }
100
+ // ---------------------------------------------------------------------------
101
+ // Target resolution
102
+ // ---------------------------------------------------------------------------
63
103
  resolveTarget(name, file) {
64
104
  const sourceFile = this.project.getSourceFile(file);
65
105
  if (!sourceFile) {
66
106
  return null;
67
107
  }
68
- // Search class methods
69
- for (const cls of sourceFile.getClasses()) {
70
- const method = cls.getMethod(name);
71
- if (method) {
72
- return method;
108
+ const dotIndex = name.lastIndexOf('.');
109
+ const className = dotIndex > 0 ? name.slice(0, dotIndex) : undefined;
110
+ const memberName = dotIndex > 0 ? name.slice(dotIndex + 1) : name;
111
+ const classes = sourceFile
112
+ .getClasses()
113
+ .filter((cls) => !className || cls.getName() === className);
114
+ for (const cls of classes) {
115
+ const member = this.findClassMember(cls, memberName);
116
+ if (member) {
117
+ return member;
73
118
  }
74
119
  }
75
- // Search top-level functions
76
- const fn = sourceFile.getFunction(name);
120
+ if (className) {
121
+ return null;
122
+ }
123
+ const fn = sourceFile.getFunction(memberName);
77
124
  if (fn) {
78
- return fn;
125
+ return this.toCallable(fn);
126
+ }
127
+ const variable = sourceFile.getVariableDeclaration(memberName);
128
+ if (variable) {
129
+ return this.toCallable(variable);
130
+ }
131
+ return null;
132
+ }
133
+ findClassMember(cls, memberName) {
134
+ if (memberName === CONSTRUCTOR_NAME) {
135
+ return this.constructorOf(cls);
136
+ }
137
+ const candidates = [
138
+ cls.getMethod(memberName),
139
+ cls.getGetAccessor(memberName),
140
+ cls.getSetAccessor(memberName),
141
+ cls.getProperty(memberName),
142
+ ];
143
+ for (const candidate of candidates) {
144
+ const callable = candidate ? this.toCallable(candidate) : null;
145
+ if (callable) {
146
+ return callable;
147
+ }
148
+ }
149
+ return null;
150
+ }
151
+ // ---------------------------------------------------------------------------
152
+ // Callable construction
153
+ // ---------------------------------------------------------------------------
154
+ /**
155
+ * Converts a declaration node into a `Callable`, or `null` when the node
156
+ * cannot run code (e.g. a plain data property or an interface member).
157
+ */
158
+ toCallable(node) {
159
+ if (Node.isConstructorDeclaration(node)) {
160
+ const cls = node.getParent();
161
+ return Node.isClassDeclaration(cls) ? this.constructorOf(cls) : null;
162
+ }
163
+ if (Node.isMethodDeclaration(node)) {
164
+ return {
165
+ node,
166
+ name: node.getName(),
167
+ kind: 'method',
168
+ bodies: this.compact([node.getBody()]),
169
+ nameNode: node.getNameNode(),
170
+ className: this.classNameOf(node),
171
+ };
172
+ }
173
+ if (Node.isFunctionDeclaration(node)) {
174
+ const name = node.getName();
175
+ if (!name) {
176
+ return null;
177
+ }
178
+ return {
179
+ node,
180
+ name,
181
+ kind: 'function',
182
+ bodies: this.compact([node.getBody()]),
183
+ nameNode: node.getNameNode(),
184
+ };
185
+ }
186
+ if (Node.isGetAccessorDeclaration(node) || Node.isSetAccessorDeclaration(node)) {
187
+ return {
188
+ node,
189
+ name: node.getName(),
190
+ kind: Node.isGetAccessorDeclaration(node) ? 'getter' : 'setter',
191
+ bodies: this.compact([node.getBody()]),
192
+ nameNode: node.getNameNode(),
193
+ className: this.classNameOf(node),
194
+ };
195
+ }
196
+ if (Node.isPropertyDeclaration(node) || Node.isVariableDeclaration(node)) {
197
+ const fnBody = this.functionInitializerBody(node.getInitializer());
198
+ if (!fnBody) {
199
+ return null;
200
+ }
201
+ return {
202
+ node,
203
+ name: node.getName(),
204
+ kind: Node.isPropertyDeclaration(node) ? 'property' : 'variable',
205
+ bodies: [fnBody],
206
+ nameNode: node.getNameNode(),
207
+ className: Node.isPropertyDeclaration(node)
208
+ ? this.classNameOf(node)
209
+ : undefined,
210
+ };
211
+ }
212
+ return null;
213
+ }
214
+ /**
215
+ * Constructor callable for a class: the explicit constructor body (if any)
216
+ * plus all non-static, non-function field initializers.
217
+ */
218
+ constructorOf(cls) {
219
+ const explicit = cls
220
+ .getConstructors()
221
+ .find((ctor) => ctor.getBody() !== undefined);
222
+ const fieldInitializers = cls
223
+ .getProperties()
224
+ .filter((prop) => !prop.isStatic())
225
+ .map((prop) => prop.getInitializer())
226
+ .filter((init) => init !== undefined && !this.functionInitializerBody(init));
227
+ return {
228
+ node: explicit ?? cls,
229
+ name: CONSTRUCTOR_NAME,
230
+ kind: 'constructor',
231
+ bodies: [...this.compact([explicit?.getBody()]), ...fieldInitializers],
232
+ nameNode: cls.getNameNode(),
233
+ className: cls.getName(),
234
+ };
235
+ }
236
+ functionInitializerBody(initializer) {
237
+ if (initializer &&
238
+ (Node.isArrowFunction(initializer) ||
239
+ Node.isFunctionExpression(initializer))) {
240
+ return initializer.getBody();
79
241
  }
80
242
  return null;
81
243
  }
244
+ classNameOf(node) {
245
+ const cls = node.getParent();
246
+ return Node.isClassDeclaration(cls) ? cls.getName() : undefined;
247
+ }
248
+ compact(nodes) {
249
+ return nodes.filter((n) => n !== undefined);
250
+ }
251
+ // ---------------------------------------------------------------------------
252
+ // Callees
253
+ // ---------------------------------------------------------------------------
82
254
  buildCallees(callable, depth, visited) {
83
255
  if (depth <= 0) {
84
256
  return [];
85
257
  }
86
258
  const callees = [];
87
- const body = callable.getBody();
88
- if (!body) {
89
- return [];
90
- }
91
- body.forEachDescendant((node) => {
92
- if (node.getKind() !== SyntaxKind.CallExpression) {
93
- return;
94
- }
95
- const callExpr = node.asKindOrThrow(SyntaxKind.CallExpression);
96
- const expr = callExpr.getExpression();
97
- const calleeName = this.extractCallName(expr.getText());
98
- if (!calleeName) {
99
- return;
100
- }
101
- const targetDecl = this.findDeclarationInProject(calleeName);
102
- if (!targetDecl) {
103
- return;
104
- }
105
- const targetFile = targetDecl.getSourceFile().getFilePath();
106
- const key = `${targetFile}:${calleeName}`;
259
+ for (const target of this.collectCalleeCallables(callable)) {
260
+ const key = this.keyOf(target);
107
261
  if (visited.has(key)) {
108
- return;
262
+ continue;
109
263
  }
110
264
  visited.add(key);
111
- const children = this.buildCallees(targetDecl, depth - 1, new Set(visited));
112
- callees.push({
113
- name: calleeName,
114
- file: targetFile,
115
- line: targetDecl.getStartLineNumber(),
116
- children,
117
- });
118
- });
265
+ const children = this.buildCallees(target, depth - 1, new Set(visited));
266
+ callees.push(this.toCallNode(target, children));
267
+ }
119
268
  return this.deduplicateNodes(callees);
120
269
  }
270
+ collectCalleeCallables(callable) {
271
+ const result = [];
272
+ for (const body of callable.bodies) {
273
+ for (const node of [body, ...body.getDescendants()]) {
274
+ result.push(...this.calleesAt(node));
275
+ }
276
+ }
277
+ return result;
278
+ }
279
+ calleesAt(node) {
280
+ if (Node.isCallExpression(node)) {
281
+ const expr = node.getExpression();
282
+ if (expr.getKind() === SyntaxKind.SuperKeyword) {
283
+ return this.superConstructor(node);
284
+ }
285
+ return this.resolveCallExpressionTarget(expr);
286
+ }
287
+ if (Node.isNewExpression(node)) {
288
+ return this.resolveNewExpressionTarget(node.getExpression());
289
+ }
290
+ if (Node.isPropertyAccessExpression(node)) {
291
+ return this.resolveAccessorTarget(node);
292
+ }
293
+ return [];
294
+ }
295
+ resolveCallExpressionTarget(expr) {
296
+ const resolved = this.resolveSymbolDeclarations(expr);
297
+ if (resolved) {
298
+ return this.pickCallables(resolved);
299
+ }
300
+ // Fallback: name-based lookup when the checker cannot resolve the symbol
301
+ const calleeName = this.extractCallName(expr.getText());
302
+ if (!calleeName) {
303
+ return [];
304
+ }
305
+ const fallback = this.findDeclarationInProject(calleeName);
306
+ return fallback ? [fallback] : [];
307
+ }
308
+ resolveNewExpressionTarget(expr) {
309
+ const declarations = this.resolveSymbolDeclarations(expr);
310
+ const classes = (declarations ?? []).filter((d) => Node.isClassDeclaration(d));
311
+ if (classes.length > 0) {
312
+ return classes.map((cls) => this.constructorOf(cls));
313
+ }
314
+ if (declarations) {
315
+ return [];
316
+ }
317
+ const className = this.extractCallName(expr.getText());
318
+ const cls = className ? this.findClassInProject(className) : null;
319
+ return cls ? [this.constructorOf(cls)] : [];
320
+ }
321
+ resolveAccessorTarget(access) {
322
+ if (!Node.isPropertyAccessExpression(access)) {
323
+ return [];
324
+ }
325
+ const parent = access.getParent();
326
+ // Calls are handled by the CallExpression branch
327
+ if (Node.isCallExpression(parent) && parent.getExpression() === access) {
328
+ return [];
329
+ }
330
+ const declarations = this.resolveSymbolDeclarations(access);
331
+ if (!declarations) {
332
+ return [];
333
+ }
334
+ const isWrite = Node.isBinaryExpression(parent) &&
335
+ parent.getLeft() === access &&
336
+ parent.getOperatorToken().getKind() === SyntaxKind.EqualsToken;
337
+ return declarations
338
+ .filter((d) => isWrite
339
+ ? Node.isSetAccessorDeclaration(d)
340
+ : Node.isGetAccessorDeclaration(d))
341
+ .map((d) => this.toCallable(d))
342
+ .filter((c) => c !== null);
343
+ }
344
+ superConstructor(call) {
345
+ const cls = call.getFirstAncestorByKind(SyntaxKind.ClassDeclaration);
346
+ const base = cls?.getBaseClass();
347
+ return base ? [this.constructorOf(base)] : [];
348
+ }
349
+ /**
350
+ * Resolves the declarations behind an expression via the type checker.
351
+ * Returns `undefined` when no symbol can be resolved (caller may fall back
352
+ * to name-based lookup) and an empty array when the symbol resolves to
353
+ * declarations that cannot be represented.
354
+ */
355
+ resolveSymbolDeclarations(expr) {
356
+ const target = Node.isPropertyAccessExpression(expr)
357
+ ? expr.getNameNode()
358
+ : expr;
359
+ let symbol = target.getSymbol();
360
+ if (!symbol) {
361
+ return undefined;
362
+ }
363
+ if (symbol.isAlias()) {
364
+ symbol = symbol.getAliasedSymbol() ?? symbol;
365
+ }
366
+ return symbol.getDeclarations();
367
+ }
368
+ /**
369
+ * Maps declarations to callables, preferring implementations (with body)
370
+ * over overload signatures and skipping ambient (.d.ts) declarations.
371
+ */
372
+ pickCallables(declarations) {
373
+ const callables = declarations
374
+ .filter((d) => !d.getSourceFile().isDeclarationFile())
375
+ .map((d) => this.toCallable(d))
376
+ .filter((c) => c !== null);
377
+ const withBody = callables.filter((c) => c.bodies.length > 0);
378
+ return withBody.length > 0 ? withBody : callables;
379
+ }
380
+ // ---------------------------------------------------------------------------
381
+ // Callers
382
+ // ---------------------------------------------------------------------------
121
383
  buildCallers(callable, depth, visited) {
122
- if (depth <= 0) {
384
+ if (depth <= 0 || !callable.nameNode) {
123
385
  return [];
124
386
  }
125
387
  const callers = [];
126
- const name = callable.getName();
127
- if (!name) {
388
+ for (const refNode of this.referenceNodes(callable)) {
389
+ const caller = this.callerForReference(callable, refNode);
390
+ if (!caller) {
391
+ continue;
392
+ }
393
+ const key = this.keyOf(caller);
394
+ if (visited.has(key)) {
395
+ continue;
396
+ }
397
+ visited.add(key);
398
+ const children = this.buildCallers(caller, depth - 1, new Set(visited));
399
+ callers.push(this.toCallNode(caller, children));
400
+ }
401
+ return this.deduplicateNodes(callers);
402
+ }
403
+ referenceNodes(callable) {
404
+ if (!callable.nameNode) {
128
405
  return [];
129
406
  }
130
- const refs = this.project.getLanguageService().findReferences(callable);
131
- for (const refSymbol of refs) {
132
- for (const ref of refSymbol.getReferences()) {
133
- if (ref.isDefinition()) {
134
- continue;
135
- }
136
- const refNode = ref.getNode();
137
- const parentMethod = refNode.getFirstAncestor((n) => n.getKind() === SyntaxKind.MethodDeclaration ||
138
- n.getKind() === SyntaxKind.FunctionDeclaration);
139
- if (!parentMethod) {
140
- continue;
141
- }
142
- const callerName = parentMethod.getName();
143
- if (!callerName) {
144
- continue;
407
+ try {
408
+ const refs = this.project
409
+ .getLanguageService()
410
+ .findReferences(callable.nameNode);
411
+ const nodes = [];
412
+ for (const refSymbol of refs) {
413
+ for (const ref of refSymbol.getReferences()) {
414
+ if (!ref.isDefinition()) {
415
+ nodes.push(ref.getNode());
416
+ }
145
417
  }
146
- const callerFile = parentMethod.getSourceFile().getFilePath();
147
- const key = `${callerFile}:${callerName}`;
148
- if (visited.has(key)) {
149
- continue;
418
+ }
419
+ return nodes;
420
+ }
421
+ catch {
422
+ return [];
423
+ }
424
+ }
425
+ /**
426
+ * Maps a reference to the callable that performs the call. For
427
+ * constructor targets only `new X()` sites and subclass constructors
428
+ * (implicit or explicit `super()` calls) count.
429
+ */
430
+ callerForReference(target, refNode) {
431
+ if (target.kind === 'constructor') {
432
+ const parent = refNode.getParent();
433
+ if (Node.isNewExpression(parent) && parent.getExpression() === refNode) {
434
+ return this.enclosingCallable(refNode);
435
+ }
436
+ const heritage = refNode.getFirstAncestorByKind(SyntaxKind.HeritageClause);
437
+ const subclass = heritage?.getParent();
438
+ if (heritage?.getToken() === SyntaxKind.ExtendsKeyword &&
439
+ Node.isClassDeclaration(subclass)) {
440
+ return this.constructorOf(subclass);
441
+ }
442
+ return null;
443
+ }
444
+ return this.enclosingCallable(refNode);
445
+ }
446
+ /**
447
+ * Finds the callable that contains `node`. Anonymous callbacks are
448
+ * attributed to their enclosing named callable; references inside a
449
+ * non-function field initializer are attributed to the class constructor.
450
+ */
451
+ enclosingCallable(node) {
452
+ for (let current = node.getParent(); current !== undefined; current = current.getParent()) {
453
+ if (Node.isMethodDeclaration(current) ||
454
+ Node.isFunctionDeclaration(current) ||
455
+ Node.isConstructorDeclaration(current) ||
456
+ Node.isGetAccessorDeclaration(current) ||
457
+ Node.isSetAccessorDeclaration(current)) {
458
+ return this.toCallable(current);
459
+ }
460
+ if (Node.isArrowFunction(current) || Node.isFunctionExpression(current)) {
461
+ const owner = current.getParent();
462
+ const isNamedOwner = (Node.isPropertyDeclaration(owner) ||
463
+ Node.isVariableDeclaration(owner)) &&
464
+ owner.getInitializer() === current;
465
+ if (isNamedOwner) {
466
+ return this.toCallable(owner);
150
467
  }
151
- visited.add(key);
152
- const children = this.buildCallers(parentMethod, depth - 1, new Set(visited));
153
- callers.push({
154
- name: callerName,
155
- file: callerFile,
156
- line: parentMethod.getStartLineNumber(),
157
- children,
158
- });
468
+ continue;
469
+ }
470
+ if (Node.isPropertyDeclaration(current)) {
471
+ const cls = current.getParent();
472
+ const runsInConstructor = !current.isStatic() && Node.isClassDeclaration(cls);
473
+ return runsInConstructor ? this.constructorOf(cls) : null;
474
+ }
475
+ if (Node.isClassDeclaration(current) || Node.isSourceFile(current)) {
476
+ return null;
159
477
  }
160
478
  }
161
- return this.deduplicateNodes(callers);
479
+ return null;
162
480
  }
481
+ // ---------------------------------------------------------------------------
482
+ // Name-based fallback and helpers
483
+ // ---------------------------------------------------------------------------
163
484
  findDeclarationInProject(name) {
164
485
  for (const sourceFile of this.project.getSourceFiles()) {
165
486
  for (const cls of sourceFile.getClasses()) {
166
487
  const method = cls.getMethod(name);
167
488
  if (method) {
168
- return method;
489
+ return this.toCallable(method);
169
490
  }
170
491
  }
171
492
  const fn = sourceFile.getFunction(name);
172
493
  if (fn) {
173
- return fn;
494
+ return this.toCallable(fn);
495
+ }
496
+ }
497
+ return null;
498
+ }
499
+ findClassInProject(name) {
500
+ for (const sourceFile of this.project.getSourceFiles()) {
501
+ const cls = sourceFile.getClass(name);
502
+ if (cls) {
503
+ return cls;
174
504
  }
175
505
  }
176
506
  return null;
@@ -181,10 +511,23 @@ export class CallGraphBuilder {
181
511
  const last = parts.at(-1);
182
512
  return last && /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(last) ? last : null;
183
513
  }
514
+ keyOf(callable) {
515
+ return `${callable.node.getSourceFile().getFilePath()}:${callable.node.getStartLineNumber()}:${callable.name}`;
516
+ }
517
+ toCallNode(callable, children) {
518
+ return {
519
+ name: callable.name,
520
+ file: callable.node.getSourceFile().getFilePath(),
521
+ line: callable.node.getStartLineNumber(),
522
+ kind: callable.kind,
523
+ ...(callable.className ? { className: callable.className } : {}),
524
+ children,
525
+ };
526
+ }
184
527
  deduplicateNodes(nodes) {
185
528
  const seen = new Set();
186
529
  return nodes.filter((n) => {
187
- const key = `${n.file}:${n.name}`;
530
+ const key = `${n.file}:${n.line}:${n.name}`;
188
531
  if (seen.has(key)) {
189
532
  return false;
190
533
  }
@@ -1 +1 @@
1
- {"version":3,"file":"call-graph-builder.js","sourceRoot":"","sources":["../../src/investigation/call-graph-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call-graph-builder.js","sourceRoot":"","sources":["../../src/investigation/call-graph-builder.ts"],"names":[],"mappings":"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"}