@grafema/util 0.3.22 → 0.3.24

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 (60) hide show
  1. package/dist/config/ConfigLoader.d.ts +7 -3
  2. package/dist/config/ConfigLoader.d.ts.map +1 -1
  3. package/dist/config/ConfigLoader.js +23 -9
  4. package/dist/config/ConfigLoader.js.map +1 -1
  5. package/dist/index.d.ts +5 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/manifest/generator.d.ts +4 -0
  10. package/dist/manifest/generator.d.ts.map +1 -1
  11. package/dist/manifest/generator.js +27 -7
  12. package/dist/manifest/generator.js.map +1 -1
  13. package/dist/manifest/types.d.ts +1 -1
  14. package/dist/manifest/types.d.ts.map +1 -1
  15. package/dist/notation/archetypes.d.ts.map +1 -1
  16. package/dist/notation/archetypes.js +1 -0
  17. package/dist/notation/archetypes.js.map +1 -1
  18. package/dist/queries/findCallsInFunction.d.ts +2 -1
  19. package/dist/queries/findCallsInFunction.d.ts.map +1 -1
  20. package/dist/queries/findCallsInFunction.js +11 -5
  21. package/dist/queries/findCallsInFunction.js.map +1 -1
  22. package/dist/queries/getShape.d.ts +65 -0
  23. package/dist/queries/getShape.d.ts.map +1 -0
  24. package/dist/queries/getShape.js +170 -0
  25. package/dist/queries/getShape.js.map +1 -0
  26. package/dist/queries/index.d.ts +3 -0
  27. package/dist/queries/index.d.ts.map +1 -1
  28. package/dist/queries/index.js +2 -0
  29. package/dist/queries/index.js.map +1 -1
  30. package/dist/queries/traceCallChain.d.ts +77 -0
  31. package/dist/queries/traceCallChain.d.ts.map +1 -0
  32. package/dist/queries/traceCallChain.js +235 -0
  33. package/dist/queries/traceCallChain.js.map +1 -0
  34. package/dist/queries/types.d.ts +2 -0
  35. package/dist/queries/types.d.ts.map +1 -1
  36. package/dist/storage/backends/RFDBServerBackend.d.ts +5 -0
  37. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  38. package/dist/storage/backends/RFDBServerBackend.js +31 -2
  39. package/dist/storage/backends/RFDBServerBackend.js.map +1 -1
  40. package/dist/utils/lazyDownload.d.ts.map +1 -1
  41. package/dist/utils/lazyDownload.js +4 -0
  42. package/dist/utils/lazyDownload.js.map +1 -1
  43. package/dist/version.d.ts +22 -0
  44. package/dist/version.d.ts.map +1 -1
  45. package/dist/version.js +34 -0
  46. package/dist/version.js.map +1 -1
  47. package/package.json +3 -3
  48. package/src/config/ConfigLoader.ts +28 -9
  49. package/src/index.ts +5 -1
  50. package/src/manifest/generator.ts +46 -10
  51. package/src/manifest/types.ts +2 -1
  52. package/src/notation/archetypes.ts +1 -0
  53. package/src/queries/findCallsInFunction.ts +15 -7
  54. package/src/queries/getShape.ts +241 -0
  55. package/src/queries/index.ts +3 -0
  56. package/src/queries/traceCallChain.ts +341 -0
  57. package/src/queries/types.ts +2 -0
  58. package/src/storage/backends/RFDBServerBackend.ts +29 -2
  59. package/src/utils/lazyDownload.ts +4 -0
  60. package/src/version.ts +39 -0
@@ -1 +1 @@
1
- {"version":3,"file":"findCallsInFunction.js","sourceRoot":"","sources":["../../src/queries/findCallsInFunction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAsBH;;;;;;GAMG;AACH,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAqB,EACrB,UAAkB,EAClB,UAA4B,EAAE;IAE9B,MAAM,EACJ,QAAQ,GAAG,uBAAuB,EAClC,UAAU,GAAG,KAAK,EAClB,eAAe,GAAG,CAAC,GACpB,GAAG,OAAO,CAAC;IAEZ,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC,uCAAuC;IAE9E,wEAAwE;IACxE,IAAI,UAAU,EAAE,CAAC;QACf,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,sDAAsD;IACtD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAEhF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,oCAAoC;QACpC,MAAM,KAAK,GAAyC,EAAE,CAAC;QAEvD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAErC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,QAAQ;gBAAE,SAAS;YAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAEvE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,CAAC,KAAK;oBAAE,SAAS;gBAErB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAC1D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;oBACxD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAErB,IAAI,UAAU,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACvD,MAAM,sBAAsB,CAC1B,OAAO,EACP,QAAQ,CAAC,MAAM,CAAC,EAAE,EAClB,CAAC,EACD,eAAe,EACf,KAAK,EACL,WAAW,CACZ,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,qEAAqE;gBACrE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,iEAAiE;QACjE,yEAAyE;QACzE,oEAAoE;QACpE,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAErE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC1D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBACxD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAErB,IAAI,UAAU,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACvD,MAAM,sBAAsB,CAC1B,OAAO,EACP,QAAQ,CAAC,MAAM,CAAC,EAAE,EAClB,CAAC,EACD,eAAe,EACf,KAAK,EACL,WAAW,CACZ,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,OAAqB,EACrB,QAAoG,EACpG,KAAa;IAEb,yCAAyC;IACzC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzC,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5D,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,GAAG;gBACP,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,aAAa;gBACtC,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,IAAI,EAAE,UAAU,CAAC,IAAI;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,WAAW;QAClC,IAAI,EAAE,QAAQ,CAAC,IAA8B;QAC7C,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,UAAU;QACpB,MAAM;QACN,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,sBAAsB,CACnC,OAAqB,EACrB,UAAkB,EAClB,YAAoB,EACpB,kBAA0B,EAC1B,KAAiB,EACjB,WAAwB;IAExB,yCAAyC;IACzC,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,YAAY,GAAG,kBAAkB,EAAE,CAAC;QACrE,OAAO;IACT,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE5B,kEAAkE;IAClE,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE;QAChE,QAAQ,EAAE,uBAAuB;QACjC,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,yBAAyB;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAE7C,oCAAoC;QACpC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,sBAAsB,CAC1B,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,EAAE,EACd,YAAY,GAAG,CAAC,EAChB,kBAAkB,EAClB,KAAK,EACL,WAAW,CACZ,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"findCallsInFunction.js","sourceRoot":"","sources":["../../src/queries/findCallsInFunction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shape Query Engine
3
+ *
4
+ * Computes the "shape" of a CLASS, INTERFACE, or typed VARIABLE:
5
+ * the set of methods and properties it has, including inherited ones.
6
+ *
7
+ * Shape = { members: ShapeMember[], extends: string[], implementedBy: string[] }
8
+ *
9
+ * For CLASS: own HAS_METHOD + HAS_PROPERTY + walk EXTENDS chain for inherited
10
+ * For INTERFACE: own HAS_METHOD + HAS_PROPERTY (METHOD_SIGNATURE + PROPERTY_SIGNATURE)
11
+ * For VARIABLE: follow INSTANCE_OF → CLASS/INTERFACE → shape
12
+ *
13
+ * @module queries/getShape
14
+ */
15
+ export interface ShapeMember {
16
+ name: string;
17
+ kind: 'method' | 'property' | 'method_signature' | 'property_signature';
18
+ from: string;
19
+ file?: string;
20
+ line?: number;
21
+ nodeId: string;
22
+ }
23
+ export interface ShapeResult {
24
+ name: string;
25
+ nodeId: string;
26
+ nodeType: string;
27
+ file?: string;
28
+ members: ShapeMember[];
29
+ extends: string[];
30
+ implements: string[];
31
+ implementedBy: string[];
32
+ confidence: 'high' | 'medium' | 'low';
33
+ }
34
+ interface GraphBackend {
35
+ getNode(id: string): Promise<{
36
+ id: string | number;
37
+ type?: string;
38
+ nodeType?: string;
39
+ name?: string;
40
+ file?: string;
41
+ line?: number;
42
+ metadata?: string | Record<string, unknown>;
43
+ semanticId?: string;
44
+ } | null>;
45
+ getOutgoingEdges(nodeId: string, edgeTypes?: string[] | null): Promise<Array<{
46
+ src: string;
47
+ dst: string;
48
+ type: string;
49
+ metadata?: string;
50
+ }>>;
51
+ getIncomingEdges(nodeId: string, edgeTypes?: string[] | null): Promise<Array<{
52
+ src: string;
53
+ dst: string;
54
+ type: string;
55
+ }>>;
56
+ }
57
+ /** Index mapping class/interface name → node ID for EXTENDS chain walking */
58
+ export type ClassIndex = Map<string, string>;
59
+ /**
60
+ * Get the shape of a CLASS, INTERFACE, or VARIABLE.
61
+ * @param classIndex — optional name→ID index for resolving EXTENDS/IMPLEMENTS targets
62
+ */
63
+ export declare function getShape(backend: GraphBackend, targetId: string, classIndex?: ClassIndex): Promise<ShapeResult | null>;
64
+ export {};
65
+ //# sourceMappingURL=getShape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getShape.d.ts","sourceRoot":"","sources":["../../src/queries/getShape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI,CAAC,CAAC;IACV,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,GAC1B,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACjF,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,GAC1B,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC/D;AAcD,6EAA6E;AAC7E,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAmC7B"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Shape Query Engine
3
+ *
4
+ * Computes the "shape" of a CLASS, INTERFACE, or typed VARIABLE:
5
+ * the set of methods and properties it has, including inherited ones.
6
+ *
7
+ * Shape = { members: ShapeMember[], extends: string[], implementedBy: string[] }
8
+ *
9
+ * For CLASS: own HAS_METHOD + HAS_PROPERTY + walk EXTENDS chain for inherited
10
+ * For INTERFACE: own HAS_METHOD + HAS_PROPERTY (METHOD_SIGNATURE + PROPERTY_SIGNATURE)
11
+ * For VARIABLE: follow INSTANCE_OF → CLASS/INTERFACE → shape
12
+ *
13
+ * @module queries/getShape
14
+ */
15
+ function nodeType(node) {
16
+ return node.nodeType ?? node.type ?? 'UNKNOWN';
17
+ }
18
+ function parseMeta(node) {
19
+ if (!node.metadata)
20
+ return {};
21
+ if (typeof node.metadata === 'string') {
22
+ try {
23
+ return JSON.parse(node.metadata);
24
+ }
25
+ catch {
26
+ return {};
27
+ }
28
+ }
29
+ return node.metadata;
30
+ }
31
+ /**
32
+ * Get the shape of a CLASS, INTERFACE, or VARIABLE.
33
+ * @param classIndex — optional name→ID index for resolving EXTENDS/IMPLEMENTS targets
34
+ */
35
+ export async function getShape(backend, targetId, classIndex) {
36
+ const node = await backend.getNode(targetId);
37
+ if (!node)
38
+ return null;
39
+ const nType = nodeType(node);
40
+ const nId = String(node.id);
41
+ if (nType === 'CLASS' || nType === 'INTERFACE') {
42
+ return getClassShape(backend, nId, node.name ?? '<unknown>', nType, node.file, classIndex);
43
+ }
44
+ if (nType === 'VARIABLE' || nType === 'CONSTANT' || nType === 'PARAMETER') {
45
+ // Follow INSTANCE_OF to find the class/interface
46
+ const edges = await backend.getOutgoingEdges(nId);
47
+ const instanceOf = edges.find(e => e.type === 'INSTANCE_OF');
48
+ if (!instanceOf)
49
+ return null;
50
+ const classNode = await backend.getNode(instanceOf.dst);
51
+ if (!classNode)
52
+ return null;
53
+ const shape = await getClassShape(backend, String(classNode.id), classNode.name ?? '<unknown>', nodeType(classNode), classNode.file, classIndex);
54
+ if (shape) {
55
+ shape.confidence = 'medium'; // inferred, not direct
56
+ }
57
+ return shape;
58
+ }
59
+ return null;
60
+ }
61
+ /**
62
+ * Get shape for a CLASS or INTERFACE, including inherited members.
63
+ */
64
+ async function getClassShape(backend, classId, className, classType, classFile, classIndex) {
65
+ const members = [];
66
+ const extendsChain = [];
67
+ const implementsList = [];
68
+ const implementedBy = [];
69
+ const visited = new Set();
70
+ // Collect own + inherited members via BFS through EXTENDS
71
+ const queue = [{ id: classId, name: className }];
72
+ while (queue.length > 0) {
73
+ const current = queue.shift();
74
+ if (visited.has(current.id))
75
+ continue;
76
+ visited.add(current.id);
77
+ // Collect HAS_METHOD edges
78
+ const edges = await backend.getOutgoingEdges(current.id);
79
+ for (const edge of edges) {
80
+ if (edge.type === 'HAS_METHOD') {
81
+ const member = await backend.getNode(edge.dst);
82
+ if (member) {
83
+ members.push({
84
+ name: member.name ?? '<unknown>',
85
+ kind: nodeType(member) === 'METHOD_SIGNATURE' ? 'method_signature' : 'method',
86
+ from: current.name,
87
+ file: member.file,
88
+ line: member.line,
89
+ nodeId: String(member.id),
90
+ });
91
+ }
92
+ }
93
+ if (edge.type === 'HAS_PROPERTY') {
94
+ const member = await backend.getNode(edge.dst);
95
+ if (member) {
96
+ const mType = nodeType(member);
97
+ // Skip if it's actually a METHOD_SIGNATURE that was incorrectly HAS_PROPERTY
98
+ // (this handles legacy data before the fix)
99
+ const kind = mType === 'PROPERTY_SIGNATURE' ? 'property_signature'
100
+ : mType === 'METHOD_SIGNATURE' ? 'method_signature'
101
+ : 'property';
102
+ members.push({
103
+ name: member.name ?? '<unknown>',
104
+ kind,
105
+ from: current.name,
106
+ file: member.file,
107
+ line: member.line,
108
+ nodeId: String(member.id),
109
+ });
110
+ }
111
+ }
112
+ }
113
+ // Follow EXTENDS chain
114
+ const meta = await getNodeMeta(backend, current.id);
115
+ const superClass = meta.superClass;
116
+ if (superClass && current.id !== classId) {
117
+ extendsChain.push(superClass);
118
+ }
119
+ else if (superClass && current.id === classId) {
120
+ extendsChain.push(superClass);
121
+ }
122
+ if (superClass) {
123
+ // Find the superclass node
124
+ const superNode = await findClassByName(backend, superClass, classIndex);
125
+ if (superNode) {
126
+ queue.push({ id: String(superNode.id), name: superNode.name ?? superClass });
127
+ }
128
+ }
129
+ // Collect implements
130
+ const implementsStr = meta.implements;
131
+ if (implementsStr && current.id === classId) {
132
+ implementsList.push(...implementsStr.split(',').map(s => s.trim()).filter(Boolean));
133
+ // Also collect members from implemented interfaces
134
+ for (const ifaceName of implementsList) {
135
+ const ifaceNode = await findClassByName(backend, ifaceName, classIndex);
136
+ if (ifaceNode) {
137
+ queue.push({ id: String(ifaceNode.id), name: ifaceNode.name ?? ifaceName });
138
+ }
139
+ }
140
+ }
141
+ }
142
+ // Find implementedBy (classes that have INSTANCE_OF → this class, or metadata implements)
143
+ // Skip for now — expensive reverse lookup
144
+ return {
145
+ name: className,
146
+ nodeId: classId,
147
+ nodeType: classType,
148
+ file: classFile,
149
+ members,
150
+ extends: extendsChain,
151
+ implements: implementsList,
152
+ implementedBy,
153
+ confidence: 'high',
154
+ };
155
+ }
156
+ async function getNodeMeta(backend, nodeId) {
157
+ const node = await backend.getNode(nodeId);
158
+ if (!node)
159
+ return {};
160
+ return parseMeta(node);
161
+ }
162
+ async function findClassByName(_backend, name, classIndex) {
163
+ if (!classIndex)
164
+ return null;
165
+ const id = classIndex.get(name);
166
+ if (!id)
167
+ return null;
168
+ return { id, name };
169
+ }
170
+ //# sourceMappingURL=getShape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getShape.js","sourceRoot":"","sources":["../../src/queries/getShape.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,9 @@ export { findCallsInFunction } from './findCallsInFunction.js';
10
10
  export { findContainingFunction } from './findContainingFunction.js';
11
11
  export { traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS } from './traceValues.js';
12
12
  export { traceDataflow, traceForwardBFS, traceBackwardBFS } from './traceDataflow.js';
13
+ export { traceCallChain } from './traceCallChain.js';
14
+ export { getShape } from './getShape.js';
15
+ export type { ShapeResult, ShapeMember, ClassIndex } from './getShape.js';
13
16
  export { buildNodeContext, getNodeDisplayName, formatEdgeMetadata, STRUCTURAL_EDGE_TYPES, } from './NodeContext.js';
14
17
  export type { CallInfo, CallerInfo, FindCallsOptions } from './types.js';
15
18
  export type { EdgeWithNode, EdgeGroup, SourcePreview, NodeContext, BuildNodeContextOptions, } from './NodeContext.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACrH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,WAAW,EACX,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACrH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,WAAW,EACX,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC"}
@@ -10,5 +10,7 @@ export { findCallsInFunction } from './findCallsInFunction.js';
10
10
  export { findContainingFunction } from './findContainingFunction.js';
11
11
  export { traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS } from './traceValues.js';
12
12
  export { traceDataflow, traceForwardBFS, traceBackwardBFS } from './traceDataflow.js';
13
+ export { traceCallChain } from './traceCallChain.js';
14
+ export { getShape } from './getShape.js';
13
15
  export { buildNodeContext, getNodeDisplayName, formatEdgeMetadata, STRUCTURAL_EDGE_TYPES, } from './NodeContext.js';
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACrH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACrH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Transitive call-chain traversal.
3
+ *
4
+ * Forward: from a function, follow CALLS/CALLS_REMOTE edges transitively
5
+ * to show what the function eventually calls (including cross-language hops).
6
+ *
7
+ * Backward: from a function, follow incoming CALLS/CALLS_REMOTE edges
8
+ * to show who eventually calls this function.
9
+ *
10
+ * Uses findCallsInFunction for forward traversal (handles both Layout A
11
+ * and Layout B edge patterns). Backward traversal uses incoming edge BFS.
12
+ *
13
+ * @module queries/traceCallChain
14
+ */
15
+ /**
16
+ * Graph backend interface.
17
+ * Accepts nodes with either `type` or `nodeType` field (RFDB uses `nodeType`).
18
+ */
19
+ interface GraphBackend {
20
+ getNode(id: string): Promise<{
21
+ id: string;
22
+ type?: string;
23
+ nodeType?: string;
24
+ name?: string;
25
+ file?: string;
26
+ line?: number;
27
+ endLine?: number;
28
+ } | null>;
29
+ getOutgoingEdges(nodeId: string, edgeTypes: string[] | null): Promise<Array<{
30
+ src: string;
31
+ dst: string;
32
+ type: string;
33
+ }>>;
34
+ getIncomingEdges(nodeId: string, edgeTypes: string[] | null): Promise<Array<{
35
+ src: string;
36
+ dst: string;
37
+ type: string;
38
+ }>>;
39
+ }
40
+ export interface CallChainHop {
41
+ /** The function/method being called */
42
+ name: string;
43
+ /** Semantic ID */
44
+ id: string;
45
+ /** File path */
46
+ file?: string;
47
+ /** Line number */
48
+ line?: number;
49
+ /** Depth in chain (0 = direct) */
50
+ depth: number;
51
+ /** Crosses process/language boundary */
52
+ remote: boolean;
53
+ /** Call was resolved to a target */
54
+ resolved: boolean;
55
+ }
56
+ export interface TraceCallChainResult {
57
+ direction: 'forward' | 'backward';
58
+ startNode: {
59
+ id: string;
60
+ name: string;
61
+ file?: string;
62
+ line?: number;
63
+ };
64
+ chain: CallChainHop[];
65
+ totalFound: number;
66
+ }
67
+ export interface TraceCallChainOptions {
68
+ direction?: 'forward' | 'backward' | 'both';
69
+ maxDepth?: number;
70
+ limit?: number;
71
+ }
72
+ /**
73
+ * Trace call chain from a function forward or backward.
74
+ */
75
+ export declare function traceCallChain(backend: GraphBackend, startId: string, options?: TraceCallChainOptions): Promise<TraceCallChainResult[]>;
76
+ export {};
77
+ //# sourceMappingURL=traceCallChain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceCallChain.d.ts","sourceRoot":"","sources":["../../src/queries/traceCallChain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH;;;GAGG;AACH,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC,CAAC;IACV,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,GACzB,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC9D,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,GACzB,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC/D;AAOD,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;IAClC,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA8BjC"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Transitive call-chain traversal.
3
+ *
4
+ * Forward: from a function, follow CALLS/CALLS_REMOTE edges transitively
5
+ * to show what the function eventually calls (including cross-language hops).
6
+ *
7
+ * Backward: from a function, follow incoming CALLS/CALLS_REMOTE edges
8
+ * to show who eventually calls this function.
9
+ *
10
+ * Uses findCallsInFunction for forward traversal (handles both Layout A
11
+ * and Layout B edge patterns). Backward traversal uses incoming edge BFS.
12
+ *
13
+ * @module queries/traceCallChain
14
+ */
15
+ import { findCallsInFunction } from './findCallsInFunction.js';
16
+ /** Normalize node type field (RFDB uses nodeType, some backends use type) */
17
+ function nodeType(node) {
18
+ return node.nodeType ?? node.type ?? 'UNKNOWN';
19
+ }
20
+ const CALL_EDGE_TYPES = ['CALLS', 'CALLS_REMOTE'];
21
+ const FUNCTION_TYPES = new Set(['FUNCTION', 'METHOD', 'CONSTRUCTOR', 'LAMBDA']);
22
+ /**
23
+ * Trace call chain from a function forward or backward.
24
+ */
25
+ export async function traceCallChain(backend, startId, options = {}) {
26
+ const { direction = 'forward', maxDepth = 10, limit = 100, } = options;
27
+ const startNode = await backend.getNode(startId);
28
+ if (!startNode)
29
+ return [];
30
+ const start = {
31
+ id: startNode.id,
32
+ name: startNode.name ?? '<unknown>',
33
+ file: startNode.file,
34
+ line: startNode.line,
35
+ };
36
+ const results = [];
37
+ if (direction === 'forward' || direction === 'both') {
38
+ const chain = await traceForward(backend, startId, maxDepth, limit);
39
+ results.push({ direction: 'forward', startNode: start, chain, totalFound: chain.length });
40
+ }
41
+ if (direction === 'backward' || direction === 'both') {
42
+ const chain = await traceBackward(backend, startId, maxDepth, limit);
43
+ results.push({ direction: 'backward', startNode: start, chain, totalFound: chain.length });
44
+ }
45
+ return results;
46
+ }
47
+ /**
48
+ * Forward: what does this function call (transitively)?
49
+ * Uses findCallsInFunction with transitive mode + follows CALLS_REMOTE.
50
+ * Falls back to line-range matching when METHOD nodes have no outgoing edges.
51
+ */
52
+ async function traceForward(backend, startId, maxDepth, limit) {
53
+ let calls = await findCallsInFunction(backend, startId, {
54
+ transitive: true,
55
+ transitiveDepth: maxDepth,
56
+ });
57
+ // Fallback: if no calls found via scope chain, try line-range matching
58
+ // (METHOD nodes often have no outgoing edges — calls are found by position)
59
+ if (calls.length === 0) {
60
+ calls = await findCallsByLineRange(backend, startId, maxDepth);
61
+ }
62
+ // Also check if any resolved target METHOD/FUNCTION has CALLS_REMOTE outgoing
63
+ const chain = [];
64
+ const visited = new Set();
65
+ for (const call of calls) {
66
+ if (chain.length >= limit)
67
+ break;
68
+ chain.push({
69
+ name: call.name,
70
+ id: call.target?.id ?? call.id,
71
+ file: call.target?.file ?? call.file,
72
+ line: call.target?.line ?? call.line,
73
+ depth: call.depth ?? 0,
74
+ remote: call.remote ?? false,
75
+ resolved: call.resolved,
76
+ });
77
+ // If the target has CALLS_REMOTE outgoing, follow it
78
+ if (call.target && !visited.has(call.target.id)) {
79
+ visited.add(call.target.id);
80
+ const remoteEdges = await backend.getOutgoingEdges(call.target.id, ['CALLS_REMOTE']);
81
+ for (const re of remoteEdges) {
82
+ if (chain.length >= limit)
83
+ break;
84
+ const remoteTarget = await backend.getNode(re.dst);
85
+ if (!remoteTarget)
86
+ continue;
87
+ chain.push({
88
+ name: remoteTarget.name ?? '<unknown>',
89
+ id: remoteTarget.id,
90
+ file: remoteTarget.file,
91
+ line: remoteTarget.line,
92
+ depth: (call.depth ?? 0) + 1,
93
+ remote: true,
94
+ resolved: true,
95
+ });
96
+ // Recurse into the remote target's calls
97
+ if (!visited.has(remoteTarget.id)) {
98
+ visited.add(remoteTarget.id);
99
+ const remoteCalls = await findCallsInFunction(backend, remoteTarget.id, {
100
+ transitive: true,
101
+ transitiveDepth: Math.max(1, maxDepth - (call.depth ?? 0) - 1),
102
+ });
103
+ for (const rc of remoteCalls) {
104
+ if (chain.length >= limit)
105
+ break;
106
+ chain.push({
107
+ name: rc.name,
108
+ id: rc.target?.id ?? rc.id,
109
+ file: rc.target?.file ?? rc.file,
110
+ line: rc.target?.line ?? rc.line,
111
+ depth: (call.depth ?? 0) + 2 + (rc.depth ?? 0),
112
+ remote: rc.remote ?? false,
113
+ resolved: rc.resolved,
114
+ });
115
+ }
116
+ }
117
+ }
118
+ }
119
+ }
120
+ return chain;
121
+ }
122
+ /**
123
+ * Backward: who calls this function (transitively)?
124
+ * BFS over incoming CALLS/CALLS_REMOTE edges, resolving containing functions.
125
+ */
126
+ async function traceBackward(backend, startId, maxDepth, limit) {
127
+ const chain = [];
128
+ const visited = new Set();
129
+ visited.add(startId);
130
+ const queue = [{ functionId: startId, depth: 0, remote: false }];
131
+ while (queue.length > 0 && chain.length < limit) {
132
+ const { functionId, depth } = queue.shift();
133
+ if (depth > maxDepth)
134
+ continue;
135
+ // Find all CALL/METHOD_CALL nodes that have CALLS/CALLS_REMOTE → this function
136
+ const incomingCalls = await backend.getIncomingEdges(functionId, CALL_EDGE_TYPES);
137
+ for (const edge of incomingCalls) {
138
+ if (chain.length >= limit)
139
+ break;
140
+ const callNode = await backend.getNode(edge.src);
141
+ if (!callNode)
142
+ continue;
143
+ const isRemote = edge.type === 'CALLS_REMOTE';
144
+ // Find the containing function of this CALL node
145
+ const containingFn = await findContainingFunction(backend, callNode.id);
146
+ if (!containingFn) {
147
+ // Can't determine caller — add the call node itself
148
+ chain.push({
149
+ name: callNode.name ?? '<unknown>',
150
+ id: callNode.id,
151
+ file: callNode.file,
152
+ line: callNode.line,
153
+ depth,
154
+ remote: isRemote,
155
+ resolved: true,
156
+ });
157
+ continue;
158
+ }
159
+ if (visited.has(containingFn.id))
160
+ continue;
161
+ visited.add(containingFn.id);
162
+ chain.push({
163
+ name: containingFn.name ?? '<unknown>',
164
+ id: containingFn.id,
165
+ file: containingFn.file,
166
+ line: containingFn.line,
167
+ depth,
168
+ remote: isRemote,
169
+ resolved: true,
170
+ });
171
+ // Continue BFS from the containing function
172
+ queue.push({ functionId: containingFn.id, depth: depth + 1, remote: isRemote });
173
+ }
174
+ }
175
+ return chain;
176
+ }
177
+ /**
178
+ * Walk up CONTAINS edges to find the enclosing FUNCTION/METHOD.
179
+ */
180
+ async function findContainingFunction(backend, nodeId) {
181
+ let currentId = nodeId;
182
+ const seen = new Set();
183
+ for (let i = 0; i < 10; i++) {
184
+ if (seen.has(currentId))
185
+ return null;
186
+ seen.add(currentId);
187
+ const incoming = await backend.getIncomingEdges(currentId, ['CONTAINS', 'HAS_SCOPE']);
188
+ if (incoming.length === 0)
189
+ return null;
190
+ for (const edge of incoming) {
191
+ const parent = await backend.getNode(edge.src);
192
+ if (!parent)
193
+ continue;
194
+ if (FUNCTION_TYPES.has(nodeType(parent))) {
195
+ return { id: parent.id, name: parent.name, file: parent.file, line: parent.line };
196
+ }
197
+ // Continue climbing from the parent
198
+ currentId = parent.id;
199
+ break;
200
+ }
201
+ }
202
+ return null;
203
+ }
204
+ /**
205
+ * Line-range fallback: find CALL nodes in the same file within the function's line range.
206
+ * Used when METHOD nodes have no outgoing edges (common for JS analyzer methods).
207
+ */
208
+ async function findCallsByLineRange(backend, functionId, _maxDepth) {
209
+ const fn = await backend.getNode(functionId);
210
+ if (!fn || !fn.file || !fn.line)
211
+ return [];
212
+ // Query all CALL/METHOD_CALL nodes in the same file
213
+ // We use getIncomingEdges on the MODULE to find CONTAINS → CALL pattern
214
+ // But simpler: iterate all outgoing CALLS_REMOTE from this node directly
215
+ const directRemote = await backend.getOutgoingEdges(functionId, ['CALLS_REMOTE']);
216
+ const calls = [];
217
+ for (const edge of directRemote) {
218
+ const target = await backend.getNode(edge.dst);
219
+ if (!target)
220
+ continue;
221
+ calls.push({
222
+ id: functionId,
223
+ name: target.name ?? '<unknown>',
224
+ type: 'CALL',
225
+ resolved: true,
226
+ target: { id: target.id, name: target.name ?? '<unknown>', file: target.file, line: target.line },
227
+ file: fn.file,
228
+ line: fn.line,
229
+ depth: 0,
230
+ remote: true,
231
+ });
232
+ }
233
+ return calls;
234
+ }
235
+ //# sourceMappingURL=traceCallChain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceCallChain.js","sourceRoot":"","sources":["../../src/queries/traceCallChain.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,8 @@ export interface CallInfo {
33
33
  line?: number;
34
34
  /** Depth in transitive call chain (0 = direct call) */
35
35
  depth?: number;
36
+ /** Whether this call crosses a process/language boundary (CALLS_REMOTE) */
37
+ remote?: boolean;
36
38
  }
37
39
  /**
38
40
  * Information about a function that calls another function