@optave/codegraph 3.11.2 → 3.12.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 (167) hide show
  1. package/README.md +8 -8
  2. package/dist/db/migrations.d.ts.map +1 -1
  3. package/dist/db/migrations.js +7 -0
  4. package/dist/db/migrations.js.map +1 -1
  5. package/dist/domain/analysis/module-map.d.ts +2 -0
  6. package/dist/domain/analysis/module-map.d.ts.map +1 -1
  7. package/dist/domain/analysis/module-map.js +24 -2
  8. package/dist/domain/analysis/module-map.js.map +1 -1
  9. package/dist/domain/graph/builder/call-resolver.d.ts +4 -2
  10. package/dist/domain/graph/builder/call-resolver.d.ts.map +1 -1
  11. package/dist/domain/graph/builder/call-resolver.js +170 -8
  12. package/dist/domain/graph/builder/call-resolver.js.map +1 -1
  13. package/dist/domain/graph/builder/cha.d.ts +61 -0
  14. package/dist/domain/graph/builder/cha.d.ts.map +1 -0
  15. package/dist/domain/graph/builder/cha.js +143 -0
  16. package/dist/domain/graph/builder/cha.js.map +1 -0
  17. package/dist/domain/graph/builder/context.d.ts +3 -0
  18. package/dist/domain/graph/builder/context.d.ts.map +1 -1
  19. package/dist/domain/graph/builder/context.js +2 -0
  20. package/dist/domain/graph/builder/context.js.map +1 -1
  21. package/dist/domain/graph/builder/helpers.d.ts +17 -1
  22. package/dist/domain/graph/builder/helpers.d.ts.map +1 -1
  23. package/dist/domain/graph/builder/helpers.js +159 -5
  24. package/dist/domain/graph/builder/helpers.js.map +1 -1
  25. package/dist/domain/graph/builder/incremental.d.ts.map +1 -1
  26. package/dist/domain/graph/builder/incremental.js +73 -1
  27. package/dist/domain/graph/builder/incremental.js.map +1 -1
  28. package/dist/domain/graph/builder/stages/build-edges.d.ts +2 -0
  29. package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
  30. package/dist/domain/graph/builder/stages/build-edges.js +926 -26
  31. package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
  32. package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
  33. package/dist/domain/graph/builder/stages/detect-changes.js +2 -1
  34. package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
  35. package/dist/domain/graph/builder/stages/native-orchestrator.d.ts.map +1 -1
  36. package/dist/domain/graph/builder/stages/native-orchestrator.js +501 -14
  37. package/dist/domain/graph/builder/stages/native-orchestrator.js.map +1 -1
  38. package/dist/domain/graph/builder/stages/resolve-imports.d.ts +1 -0
  39. package/dist/domain/graph/builder/stages/resolve-imports.d.ts.map +1 -1
  40. package/dist/domain/graph/builder/stages/resolve-imports.js +9 -0
  41. package/dist/domain/graph/builder/stages/resolve-imports.js.map +1 -1
  42. package/dist/domain/graph/journal.js +1 -1
  43. package/dist/domain/graph/journal.js.map +1 -1
  44. package/dist/domain/graph/resolver/points-to.d.ts +53 -0
  45. package/dist/domain/graph/resolver/points-to.d.ts.map +1 -0
  46. package/dist/domain/graph/resolver/points-to.js +213 -0
  47. package/dist/domain/graph/resolver/points-to.js.map +1 -0
  48. package/dist/domain/graph/resolver/ts-resolver.d.ts +9 -0
  49. package/dist/domain/graph/resolver/ts-resolver.d.ts.map +1 -0
  50. package/dist/domain/graph/resolver/ts-resolver.js +476 -0
  51. package/dist/domain/graph/resolver/ts-resolver.js.map +1 -0
  52. package/dist/domain/parser.d.ts +10 -1
  53. package/dist/domain/parser.d.ts.map +1 -1
  54. package/dist/domain/parser.js +39 -7
  55. package/dist/domain/parser.js.map +1 -1
  56. package/dist/domain/wasm-worker-entry.js +25 -0
  57. package/dist/domain/wasm-worker-entry.js.map +1 -1
  58. package/dist/domain/wasm-worker-pool.d.ts.map +1 -1
  59. package/dist/domain/wasm-worker-pool.js +32 -0
  60. package/dist/domain/wasm-worker-pool.js.map +1 -1
  61. package/dist/domain/wasm-worker-protocol.d.ts +14 -1
  62. package/dist/domain/wasm-worker-protocol.d.ts.map +1 -1
  63. package/dist/extractors/c.js +3 -3
  64. package/dist/extractors/c.js.map +1 -1
  65. package/dist/extractors/clojure.js +1 -1
  66. package/dist/extractors/clojure.js.map +1 -1
  67. package/dist/extractors/cpp.js +3 -3
  68. package/dist/extractors/cpp.js.map +1 -1
  69. package/dist/extractors/csharp.d.ts.map +1 -1
  70. package/dist/extractors/csharp.js +37 -8
  71. package/dist/extractors/csharp.js.map +1 -1
  72. package/dist/extractors/cuda.js +3 -3
  73. package/dist/extractors/cuda.js.map +1 -1
  74. package/dist/extractors/elixir.js +6 -6
  75. package/dist/extractors/elixir.js.map +1 -1
  76. package/dist/extractors/fsharp.js +1 -1
  77. package/dist/extractors/fsharp.js.map +1 -1
  78. package/dist/extractors/go.js +5 -5
  79. package/dist/extractors/go.js.map +1 -1
  80. package/dist/extractors/haskell.js +1 -1
  81. package/dist/extractors/haskell.js.map +1 -1
  82. package/dist/extractors/java.js +2 -2
  83. package/dist/extractors/java.js.map +1 -1
  84. package/dist/extractors/javascript.d.ts +2 -0
  85. package/dist/extractors/javascript.d.ts.map +1 -1
  86. package/dist/extractors/javascript.js +1674 -64
  87. package/dist/extractors/javascript.js.map +1 -1
  88. package/dist/extractors/kotlin.js +5 -5
  89. package/dist/extractors/kotlin.js.map +1 -1
  90. package/dist/extractors/lua.js +1 -1
  91. package/dist/extractors/lua.js.map +1 -1
  92. package/dist/extractors/objc.js +3 -3
  93. package/dist/extractors/objc.js.map +1 -1
  94. package/dist/extractors/ocaml.js +1 -1
  95. package/dist/extractors/ocaml.js.map +1 -1
  96. package/dist/extractors/php.js +2 -2
  97. package/dist/extractors/php.js.map +1 -1
  98. package/dist/extractors/python.js +7 -7
  99. package/dist/extractors/python.js.map +1 -1
  100. package/dist/extractors/ruby.js +2 -2
  101. package/dist/extractors/ruby.js.map +1 -1
  102. package/dist/extractors/scala.js +1 -1
  103. package/dist/extractors/scala.js.map +1 -1
  104. package/dist/extractors/solidity.js +1 -1
  105. package/dist/extractors/solidity.js.map +1 -1
  106. package/dist/extractors/swift.js +4 -4
  107. package/dist/extractors/swift.js.map +1 -1
  108. package/dist/extractors/zig.js +4 -4
  109. package/dist/extractors/zig.js.map +1 -1
  110. package/dist/infrastructure/config.d.ts +10 -0
  111. package/dist/infrastructure/config.d.ts.map +1 -1
  112. package/dist/infrastructure/config.js +15 -0
  113. package/dist/infrastructure/config.js.map +1 -1
  114. package/dist/infrastructure/native.d.ts +11 -0
  115. package/dist/infrastructure/native.d.ts.map +1 -1
  116. package/dist/infrastructure/native.js +78 -5
  117. package/dist/infrastructure/native.js.map +1 -1
  118. package/dist/presentation/queries-cli/overview.d.ts.map +1 -1
  119. package/dist/presentation/queries-cli/overview.js +5 -0
  120. package/dist/presentation/queries-cli/overview.js.map +1 -1
  121. package/dist/types.d.ts +184 -0
  122. package/dist/types.d.ts.map +1 -1
  123. package/package.json +7 -7
  124. package/src/db/migrations.ts +7 -0
  125. package/src/domain/analysis/module-map.ts +29 -1
  126. package/src/domain/graph/builder/call-resolver.ts +177 -7
  127. package/src/domain/graph/builder/cha.ts +175 -0
  128. package/src/domain/graph/builder/context.ts +3 -0
  129. package/src/domain/graph/builder/helpers.ts +175 -5
  130. package/src/domain/graph/builder/incremental.ts +79 -1
  131. package/src/domain/graph/builder/stages/build-edges.ts +1128 -24
  132. package/src/domain/graph/builder/stages/detect-changes.ts +3 -1
  133. package/src/domain/graph/builder/stages/native-orchestrator.ts +583 -20
  134. package/src/domain/graph/builder/stages/resolve-imports.ts +14 -0
  135. package/src/domain/graph/journal.ts +1 -1
  136. package/src/domain/graph/resolver/points-to.ts +254 -0
  137. package/src/domain/graph/resolver/ts-resolver.ts +536 -0
  138. package/src/domain/parser.ts +43 -5
  139. package/src/domain/wasm-worker-entry.ts +25 -0
  140. package/src/domain/wasm-worker-pool.ts +21 -0
  141. package/src/domain/wasm-worker-protocol.ts +14 -0
  142. package/src/extractors/c.ts +3 -3
  143. package/src/extractors/clojure.ts +1 -1
  144. package/src/extractors/cpp.ts +3 -3
  145. package/src/extractors/csharp.ts +33 -9
  146. package/src/extractors/cuda.ts +3 -3
  147. package/src/extractors/elixir.ts +6 -6
  148. package/src/extractors/fsharp.ts +1 -1
  149. package/src/extractors/go.ts +5 -5
  150. package/src/extractors/haskell.ts +1 -1
  151. package/src/extractors/java.ts +2 -2
  152. package/src/extractors/javascript.ts +1802 -66
  153. package/src/extractors/kotlin.ts +5 -5
  154. package/src/extractors/lua.ts +1 -1
  155. package/src/extractors/objc.ts +3 -3
  156. package/src/extractors/ocaml.ts +1 -1
  157. package/src/extractors/php.ts +2 -2
  158. package/src/extractors/python.ts +7 -7
  159. package/src/extractors/ruby.ts +2 -2
  160. package/src/extractors/scala.ts +1 -1
  161. package/src/extractors/solidity.ts +1 -1
  162. package/src/extractors/swift.ts +4 -4
  163. package/src/extractors/zig.ts +4 -4
  164. package/src/infrastructure/config.ts +15 -0
  165. package/src/infrastructure/native.ts +87 -5
  166. package/src/presentation/queries-cli/overview.ts +15 -1
  167. package/src/types.ts +194 -0
package/src/types.ts CHANGED
@@ -523,6 +523,125 @@ export interface TypeMapEntry {
523
523
  confidence: number;
524
524
  }
525
525
 
526
+ /**
527
+ * A variable assignment from a call expression, recorded during extraction for
528
+ * cross-file return-type propagation (Phase 8.2).
529
+ */
530
+ export interface CallAssignment {
531
+ /** Variable being assigned to. */
532
+ varName: string;
533
+ /** Name of the function or method being called. */
534
+ calleeName: string;
535
+ /** Resolved receiver type, if the call is a method call (e.g. service.getRepo()). */
536
+ receiverTypeName?: string;
537
+ }
538
+
539
+ /**
540
+ * A function-reference binding recorded during extraction for points-to analysis (Phase 8.3).
541
+ * Captures `const fn = handler` or `const fn = obj.method` patterns where the right-hand
542
+ * side is a named function reference (not a call expression or literal).
543
+ */
544
+ export interface FnRefBinding {
545
+ /** Variable being assigned (the left-hand side identifier). */
546
+ lhs: string;
547
+ /** Named function/property on the right-hand side. */
548
+ rhs: string;
549
+ /** If rhs is a member expression (obj.method), the receiver object name. */
550
+ rhsReceiver?: string;
551
+ }
552
+
553
+ /**
554
+ * An argument-to-parameter binding at a call site, recorded for parameter-flow
555
+ * points-to analysis (Phase 8.3c). Captures `f(x)` where `x` is an identifier
556
+ * that may carry a function reference into `f`'s parameter.
557
+ */
558
+ export interface ParamBinding {
559
+ /** The function being called at the call site. */
560
+ callee: string;
561
+ /** Zero-based index of the argument. */
562
+ argIndex: number;
563
+ /** Identifier name of the argument being passed. */
564
+ argName: string;
565
+ }
566
+
567
+ /**
568
+ * A this-context binding recorded when `fn.call(namedCtx, ...)` or
569
+ * `fn.apply(namedCtx, ...)` is seen. Seeds `fn::this → namedCtx` in the
570
+ * points-to map so that `this()` calls inside `fn` resolve to `namedCtx`.
571
+ */
572
+ export interface ThisCallBinding {
573
+ /** The function being invoked via .call() or .apply(). */
574
+ callee: string;
575
+ /** The identifier passed as the `this` context (first argument). */
576
+ thisArg: string;
577
+ }
578
+
579
+ /**
580
+ * An array-element binding: `const arr = [fn1, fn2]` records each named function
581
+ * stored at a specific index. Phase 8.3e: array-element pts tracking.
582
+ */
583
+ export interface ArrayElemBinding {
584
+ arrayName: string;
585
+ index: number;
586
+ elemName: string;
587
+ }
588
+
589
+ /**
590
+ * A spread-argument binding: `f(...arr)` records that `arr` is spread into `f`'s
591
+ * parameter list starting at `startIndex`. Phase 8.3e.
592
+ */
593
+ export interface SpreadArgBinding {
594
+ callee: string;
595
+ arrayName: string;
596
+ startIndex: number;
597
+ }
598
+
599
+ /**
600
+ * A for-of iteration binding: `for (const x of arr)` records that `x` receives
601
+ * each element of `arr` within `enclosingFunc`. Phase 8.3e.
602
+ */
603
+ export interface ForOfBinding {
604
+ varName: string;
605
+ sourceName: string;
606
+ enclosingFunc: string;
607
+ }
608
+
609
+ /**
610
+ * An array-callback binding: `Array.from(arr, cb)` records that `cb`'s first
611
+ * parameter receives each element of `arr`. Phase 8.3e.
612
+ */
613
+ export interface ArrayCallbackBinding {
614
+ sourceName: string;
615
+ calleeName: string;
616
+ }
617
+
618
+ /**
619
+ * An object-rest parameter binding: `function f({ a, ...rest })` records that
620
+ * `rest` is the rest of the object passed as argument `argIndex` to `f`.
621
+ * Phase 8.3f: object destructuring rest dispatch.
622
+ */
623
+ export interface ObjectRestParamBinding {
624
+ /** Function that owns this rest parameter, e.g. "f3" */
625
+ callee: string;
626
+ /** Name of the rest binding, e.g. "eerest" */
627
+ restName: string;
628
+ /** Zero-based index of the argument whose rest is bound, e.g. 0 */
629
+ argIndex: number;
630
+ }
631
+
632
+ /**
633
+ * An object-property binding: `const obj = { e4 }` or `const obj = { e4: fn }` records
634
+ * that `obj.e4` points to the named function `fn`. Phase 8.3f.
635
+ */
636
+ export interface ObjectPropBinding {
637
+ /** Variable holding the object, e.g. "obj" */
638
+ objectName: string;
639
+ /** Property name, e.g. "e4" */
640
+ propName: string;
641
+ /** Named function value, e.g. "e4" or "fn" */
642
+ valueName: string;
643
+ }
644
+
526
645
  /** The normalized output shape returned by every language extractor. */
527
646
  export interface ExtractorOutput {
528
647
  definitions: Definition[];
@@ -531,6 +650,63 @@ export interface ExtractorOutput {
531
650
  classes: ClassRelation[];
532
651
  exports: Export[];
533
652
  typeMap: Map<string, TypeMapEntry>;
653
+ /**
654
+ * Maps function/method names to their declared or inferred return types.
655
+ * Keys: plain name (e.g. "createUser") or qualified name (e.g. "UserService.getUser").
656
+ * Populated by JS/TS extractor; used for inter-procedural type propagation (Phase 8.2).
657
+ */
658
+ returnTypeMap?: Map<string, TypeMapEntry>;
659
+ /**
660
+ * Variable assignments from call expressions that could not be resolved from the
661
+ * per-file returnTypeMap. Consumed by build-edges.ts to propagate cross-file return types.
662
+ */
663
+ callAssignments?: CallAssignment[];
664
+ /**
665
+ * Function-reference bindings for points-to analysis (Phase 8.3).
666
+ * Records `const fn = handler` and `const fn = obj.method` patterns so the
667
+ * edge builder can follow aliases when a call target has no direct definition.
668
+ */
669
+ fnRefBindings?: FnRefBinding[];
670
+ /**
671
+ * Argument-to-parameter bindings for parameter-flow points-to analysis (Phase 8.3c).
672
+ * Records `f(x)` call sites where `x` is an identifier, enabling the pts solver
673
+ * to propagate function references through function parameters.
674
+ */
675
+ paramBindings?: ParamBinding[];
676
+ /** Phase 8.3e: array-element bindings from `const arr = [fn1, fn2]` patterns. */
677
+ arrayElemBindings?: ArrayElemBinding[];
678
+ /** Phase 8.3e: spread-argument bindings from `f(...arr)` call sites. */
679
+ spreadArgBindings?: SpreadArgBinding[];
680
+ /** Phase 8.3e: for-of iteration variable bindings. */
681
+ forOfBindings?: ForOfBinding[];
682
+ /** Phase 8.3e: array callback bindings from Array.from/forEach/etc. */
683
+ arrayCallbackBindings?: ArrayCallbackBinding[];
684
+ /** Phase 8.3f: object-rest parameter bindings from `function f({ ...rest })` patterns. */
685
+ objectRestParamBindings?: ObjectRestParamBinding[];
686
+ /** Phase 8.3f: object-property bindings from `const obj = { fn }` patterns. */
687
+ objectPropBindings?: ObjectPropBinding[];
688
+ /**
689
+ * This-context bindings from `fn.call(namedCtx, ...)` / `fn.apply(namedCtx, ...)`.
690
+ * Seeds `fn::this → namedCtx` in the points-to map so that `this()` calls inside
691
+ * `fn` resolve to `namedCtx` when `fn` is invoked via `.call()`/`.apply()`.
692
+ */
693
+ thisCallBindings?: ThisCallBinding[];
694
+ /**
695
+ * Phase 8.5 (RTA): constructor names from all `new X()` expressions in the file,
696
+ * including unassigned ones (e.g. `doSomething(new Foo())`). Used to build the
697
+ * project-wide instantiated-types set for Rapid Type Analysis filtering.
698
+ */
699
+ newExpressions?: readonly string[];
700
+ /**
701
+ * Object.defineProperty receiver bindings: maps function name → target object name.
702
+ * Records `Object.defineProperty(obj, "bar", { get: getter })` so the edge builder
703
+ * can resolve `this.X()` calls inside `getter` as `obj.X()` (this === obj when the
704
+ * accessor is invoked through the property).
705
+ *
706
+ * Example: `Object.defineProperty(obj, "bar", { get: getter })` emits
707
+ * `definePropertyReceivers.set("getter", "obj")`.
708
+ */
709
+ definePropertyReceivers?: Map<string, string>;
534
710
  /** WASM tree retained for downstream analysis (complexity, CFG, dataflow). */
535
711
  _tree?: TreeSitterTree;
536
712
  /** Language identifier. */
@@ -1092,6 +1268,8 @@ export interface BuildResult {
1092
1268
  edgesMs: number;
1093
1269
  structureMs: number;
1094
1270
  rolesMs: number;
1271
+ /** Wall-clock time for the this/super dispatch WASM post-pass (native path only). */
1272
+ thisDispatchMs?: number;
1095
1273
  astMs: number;
1096
1274
  complexityMs: number;
1097
1275
  cfgMs: number;
@@ -1119,6 +1297,14 @@ export interface CodegraphConfig {
1119
1297
  dbPath: string;
1120
1298
  driftThreshold: number;
1121
1299
  smallFilesThreshold: number;
1300
+ /**
1301
+ * Use the TypeScript compiler API to enrich typeMap for .ts/.tsx files.
1302
+ * Improves method-call edge accuracy for patterns like `const svc = container.get<MyService>()`.
1303
+ * Disabled by default because `ts.createProgram` adds ~1s overhead per build;
1304
+ * enable in `.codegraphrc.json` when you need accurate type-resolved call edges.
1305
+ * Default: false.
1306
+ */
1307
+ typescriptResolver: boolean;
1122
1308
  };
1123
1309
 
1124
1310
  query: {
@@ -1189,6 +1375,14 @@ export interface CodegraphConfig {
1189
1375
  briefImporterDepth: number;
1190
1376
  briefHighRiskCallers: number;
1191
1377
  briefMediumRiskCallers: number;
1378
+ /** Maximum chain depth for inter-procedural return-type propagation (Phase 8.2). */
1379
+ typePropagationDepth: number;
1380
+ /**
1381
+ * Maximum fixed-point iterations for the Phase 8.3 points-to solver.
1382
+ * @reserved — currently not wired to either solver; both use a hardcoded
1383
+ * constant of 50. See TODO in `src/infrastructure/config.ts`.
1384
+ */
1385
+ pointsToMaxIterations: number;
1192
1386
  };
1193
1387
 
1194
1388
  community: {