gitnexus 1.6.10-rc.99 → 1.6.10

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 (775) hide show
  1. package/README.md +177 -18
  2. package/dist/_shared/graph/types.d.ts +21 -2
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +3 -3
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +1 -1
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  9. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  10. package/dist/_shared/integrations/resilient-fetch.d.ts +16 -0
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +19 -7
  13. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  14. package/dist/_shared/language-detection.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  16. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  17. package/dist/_shared/lbug/schema-constants.js +3 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  20. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
  21. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  22. package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
  23. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  24. package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
  25. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  27. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  28. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  29. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  30. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  31. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  33. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  34. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  35. package/dist/_shared/scope-resolution/types.d.ts +278 -3
  36. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  37. package/dist/cli/ai-context.d.ts +3 -2
  38. package/dist/cli/ai-context.js +71 -16
  39. package/dist/cli/analyze-config.d.ts +1 -1
  40. package/dist/cli/analyze-options.d.ts +131 -0
  41. package/dist/cli/analyze-options.js +1 -0
  42. package/dist/cli/analyze.d.ts +21 -113
  43. package/dist/cli/analyze.js +172 -29
  44. package/dist/cli/cli-message.d.ts +1 -1
  45. package/dist/cli/detect-changes-format.js +19 -2
  46. package/dist/cli/doctor.d.ts +12 -0
  47. package/dist/cli/doctor.js +32 -5
  48. package/dist/cli/editor-targets.js +6 -0
  49. package/dist/cli/eval-server.js +2 -1
  50. package/dist/cli/format-symbol.d.ts +15 -0
  51. package/dist/cli/format-symbol.js +17 -0
  52. package/dist/cli/generated-skill.d.ts +17 -0
  53. package/dist/cli/generated-skill.js +1 -0
  54. package/dist/cli/group.js +229 -21
  55. package/dist/cli/help-i18n.js +1 -2
  56. package/dist/cli/i18n/en.d.ts +11 -9
  57. package/dist/cli/i18n/en.js +13 -9
  58. package/dist/cli/i18n/resources.d.ts +15 -11
  59. package/dist/cli/i18n/zh-CN.d.ts +4 -2
  60. package/dist/cli/i18n/zh-CN.js +11 -9
  61. package/dist/cli/index.js +8 -4
  62. package/dist/cli/resolve-invocation.d.ts +7 -3
  63. package/dist/cli/resolve-invocation.js +7 -3
  64. package/dist/cli/setup.js +4 -3
  65. package/dist/cli/skill-gen.d.ts +1 -6
  66. package/dist/cli/tool.d.ts +1 -0
  67. package/dist/cli/tool.js +74 -17
  68. package/dist/cli/wiki.js +53 -10
  69. package/dist/config/ignore-service.d.ts +2 -0
  70. package/dist/config/ignore-service.js +54 -13
  71. package/dist/core/analyzer-identity.d.ts +80 -0
  72. package/dist/core/analyzer-identity.js +364 -26
  73. package/dist/core/augmentation/engine.js +86 -71
  74. package/dist/core/embedding-checkpoint.d.ts +143 -0
  75. package/dist/core/embedding-checkpoint.js +221 -0
  76. package/dist/core/embedding-count.d.ts +61 -0
  77. package/dist/core/embedding-count.js +69 -0
  78. package/dist/core/embeddings/ast-utils.js +9 -1
  79. package/dist/core/embeddings/embedding-pipeline.d.ts +8 -0
  80. package/dist/core/embeddings/embedding-pipeline.js +253 -14
  81. package/dist/core/embeddings/http-client.d.ts +5 -0
  82. package/dist/core/embeddings/http-client.js +142 -27
  83. package/dist/core/graph/graph.js +3 -0
  84. package/dist/core/graph/import-cycles.d.ts +194 -3
  85. package/dist/core/graph/import-cycles.js +522 -73
  86. package/dist/core/graph/types.d.ts +18 -0
  87. package/dist/core/group/bridge-db.d.ts +204 -1
  88. package/dist/core/group/bridge-db.js +401 -28
  89. package/dist/core/group/completeness.d.ts +130 -0
  90. package/dist/core/group/completeness.js +83 -0
  91. package/dist/core/group/config-parser.js +0 -5
  92. package/dist/core/group/cross-impact.d.ts +46 -1
  93. package/dist/core/group/cross-impact.js +220 -19
  94. package/dist/core/group/cross-trace.d.ts +32 -11
  95. package/dist/core/group/cross-trace.js +114 -20
  96. package/dist/core/group/extractors/http-patterns/java.js +278 -22
  97. package/dist/core/group/extractors/http-patterns/node.js +332 -216
  98. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  99. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  100. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  101. package/dist/core/group/extractors/include-extractor.js +20 -2
  102. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  103. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  104. package/dist/core/group/extractors/python-workspace-extractor.js +5 -2
  105. package/dist/core/group/group-lock.d.ts +31 -0
  106. package/dist/core/group/group-lock.js +166 -0
  107. package/dist/core/group/service.js +297 -16
  108. package/dist/core/group/storage.d.ts +3 -0
  109. package/dist/core/group/storage.js +7 -39
  110. package/dist/core/group/sync.d.ts +49 -3
  111. package/dist/core/group/sync.js +0 -0
  112. package/dist/core/group/types.d.ts +183 -8
  113. package/dist/core/group/types.js +28 -1
  114. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  115. package/dist/core/incremental/subgraph-extract.js +33 -10
  116. package/dist/core/index-freshness.d.ts +77 -2
  117. package/dist/core/index-freshness.js +109 -2
  118. package/dist/core/ingestion/call-processor.d.ts +13 -1
  119. package/dist/core/ingestion/call-processor.js +110 -3
  120. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  121. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  122. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  123. package/dist/core/ingestion/cfg/emit.js +9 -23
  124. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  125. package/dist/core/ingestion/cluster-enricher.js +8 -4
  126. package/dist/core/ingestion/community-processor.d.ts +21 -3
  127. package/dist/core/ingestion/community-processor.js +81 -82
  128. package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
  129. package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
  130. package/dist/core/ingestion/di-extractors/spring.js +8 -1
  131. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  132. package/dist/core/ingestion/di-extractors/types.js +15 -0
  133. package/dist/core/ingestion/filesystem-walker.js +30 -14
  134. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  135. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
  136. package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
  137. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  138. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  139. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  140. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  141. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  142. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  143. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  144. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  145. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
  146. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  147. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  148. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  149. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  150. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
  151. package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
  152. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  153. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  154. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  155. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  156. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  157. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  158. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  159. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  160. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  161. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  162. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  163. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  164. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
  165. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  166. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  167. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  168. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  169. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  170. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  171. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  172. package/dist/core/ingestion/import-resolvers/php.js +65 -19
  173. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  174. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  175. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  176. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  177. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  178. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  179. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  180. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  181. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  182. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  183. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  184. package/dist/core/ingestion/language-config.d.ts +29 -1
  185. package/dist/core/ingestion/language-config.js +110 -35
  186. package/dist/core/ingestion/language-provider.d.ts +209 -7
  187. package/dist/core/ingestion/language-provider.js +37 -0
  188. package/dist/core/ingestion/languages/c/captures.js +7 -0
  189. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  190. package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
  191. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  192. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  193. package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
  194. package/dist/core/ingestion/languages/cobol.js +13 -0
  195. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  196. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  197. package/dist/core/ingestion/languages/cpp/captures.js +14 -2
  198. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  199. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  200. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  201. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  202. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  203. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  204. package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
  205. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  206. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  207. package/dist/core/ingestion/languages/csharp/captures.js +19 -0
  208. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  209. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  210. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  211. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  212. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  213. package/dist/core/ingestion/languages/dart/captures.js +598 -16
  214. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  215. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  216. package/dist/core/ingestion/languages/dart/index.js +1 -1
  217. package/dist/core/ingestion/languages/dart/query.js +98 -1
  218. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  219. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  220. package/dist/core/ingestion/languages/dart.js +6 -1
  221. package/dist/core/ingestion/languages/go/captures.js +108 -3
  222. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  223. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  224. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  225. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  226. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  227. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  228. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  229. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  231. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  232. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  233. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  234. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  235. package/dist/core/ingestion/languages/go/query.js +56 -3
  236. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  237. package/dist/core/ingestion/languages/go.js +9 -0
  238. package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
  239. package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
  240. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
  241. package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
  242. package/dist/core/ingestion/languages/java/captures.js +77 -32
  243. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  244. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  245. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  246. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  247. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  248. package/dist/core/ingestion/languages/java/query.js +15 -3
  249. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  250. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  251. package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
  252. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  253. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  254. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  255. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  256. package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
  257. package/dist/core/ingestion/languages/java/spring-di.js +41 -9
  258. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  259. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  260. package/dist/core/ingestion/languages/java.js +94 -3
  261. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  262. package/dist/core/ingestion/languages/javascript/captures.js +262 -4
  263. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  264. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  265. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  266. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  267. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  268. package/dist/core/ingestion/languages/javascript/query.js +211 -5
  269. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  270. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  271. package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
  272. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
  273. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
  274. package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
  275. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  276. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  277. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  278. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  279. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  280. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  281. package/dist/core/ingestion/languages/kotlin/query.js +28 -2
  282. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
  283. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  284. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  285. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  286. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  287. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
  288. package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
  289. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  290. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  291. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  292. package/dist/core/ingestion/languages/php/captures.js +319 -51
  293. package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
  294. package/dist/core/ingestion/languages/php/import-target.js +192 -62
  295. package/dist/core/ingestion/languages/php/query.js +31 -0
  296. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  297. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  298. package/dist/core/ingestion/languages/python/captures.js +29 -0
  299. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  300. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  301. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  302. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  303. package/dist/core/ingestion/languages/python/index.js +1 -1
  304. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  305. package/dist/core/ingestion/languages/python/interpret.js +249 -7
  306. package/dist/core/ingestion/languages/python/query.js +9 -0
  307. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
  308. package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
  309. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  310. package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
  311. package/dist/core/ingestion/languages/python.js +13 -0
  312. package/dist/core/ingestion/languages/ruby/captures.js +158 -0
  313. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  314. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  315. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  316. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  317. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  318. package/dist/core/ingestion/languages/rust/captures.js +39 -1
  319. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  320. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  321. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  322. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  323. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  324. package/dist/core/ingestion/languages/rust/query.js +39 -6
  325. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  326. package/dist/core/ingestion/languages/rust.js +17 -0
  327. package/dist/core/ingestion/languages/swift/captures.js +87 -3
  328. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  329. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  330. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  331. package/dist/core/ingestion/languages/swift/query.js +17 -0
  332. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  333. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  334. package/dist/core/ingestion/languages/swift.js +2 -0
  335. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  336. package/dist/core/ingestion/languages/typescript/captures.js +267 -5
  337. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  338. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  339. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  340. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  341. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
  342. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
  343. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  344. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  345. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  346. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  347. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  348. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  349. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  350. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  351. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  352. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  353. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  354. package/dist/core/ingestion/languages/typescript/query.js +303 -14
  355. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  356. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  357. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  358. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  359. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  360. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  361. package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
  362. package/dist/core/ingestion/languages/typescript.js +93 -2
  363. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  364. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  365. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  366. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  367. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  368. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  369. package/dist/core/ingestion/method-types.d.ts +16 -0
  370. package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
  371. package/dist/core/ingestion/pipeline-phases/di.js +136 -21
  372. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  373. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  374. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  375. package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
  376. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  377. package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
  378. package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
  379. package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
  380. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  381. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  382. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  383. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  384. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  385. package/dist/core/ingestion/pipeline.d.ts +26 -2
  386. package/dist/core/ingestion/pipeline.js +60 -11
  387. package/dist/core/ingestion/process-processor.d.ts +109 -2
  388. package/dist/core/ingestion/process-processor.js +464 -52
  389. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  390. package/dist/core/ingestion/resolve-references.js +66 -6
  391. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
  392. package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
  393. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
  394. package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
  395. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  396. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  397. package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
  398. package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
  399. package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
  400. package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
  401. package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
  402. package/dist/core/ingestion/route-extractors/nest.js +523 -0
  403. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  404. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  405. package/dist/core/ingestion/route-extractors/spring.js +214 -29
  406. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  407. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  408. package/dist/core/ingestion/scope-extractor.js +309 -15
  409. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
  410. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  411. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
  412. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
  413. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  414. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
  415. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  416. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  417. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
  418. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
  419. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  420. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
  421. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
  422. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
  423. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  424. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  425. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
  426. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
  427. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  428. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  429. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
  430. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
  431. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
  432. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  433. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  434. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  435. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  436. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  437. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
  438. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
  439. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
  440. package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
  441. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  442. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  443. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  444. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  445. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  446. package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
  447. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  448. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  449. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  450. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  451. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  452. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  453. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  454. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  455. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  456. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  457. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  458. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  459. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  460. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  461. package/dist/core/ingestion/tree-sitter-queries.js +678 -4
  462. package/dist/core/ingestion/type-env.js +11 -7
  463. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  464. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  465. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  466. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  467. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  468. package/dist/core/ingestion/utils/ast-helpers.d.ts +297 -15
  469. package/dist/core/ingestion/utils/ast-helpers.js +578 -46
  470. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  471. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  472. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
  473. package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
  474. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  475. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  476. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  477. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  478. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  479. package/dist/core/ingestion/utils/line-base.js +14 -0
  480. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  481. package/dist/core/ingestion/utils/method-props.js +29 -4
  482. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  483. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  484. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  485. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  486. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  487. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  488. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  489. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  490. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  491. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  492. package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
  493. package/dist/core/ingestion/workers/callable-id.js +125 -0
  494. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  495. package/dist/core/ingestion/workers/parse-worker.js +493 -54
  496. package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
  497. package/dist/core/ingestion/workers/worker-pool.js +91 -3
  498. package/dist/core/lbug/csv-generator.d.ts +27 -0
  499. package/dist/core/lbug/csv-generator.js +72 -17
  500. package/dist/core/lbug/extension-load-error.js +13 -2
  501. package/dist/core/lbug/extension-loader.d.ts +29 -0
  502. package/dist/core/lbug/extension-loader.js +31 -6
  503. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  504. package/dist/core/lbug/graph-emit-sink.js +581 -0
  505. package/dist/core/lbug/lbug-adapter.d.ts +290 -11
  506. package/dist/core/lbug/lbug-adapter.js +652 -69
  507. package/dist/core/lbug/native-check.d.ts +21 -0
  508. package/dist/core/lbug/native-check.js +248 -32
  509. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  510. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  511. package/dist/core/lbug/pool-adapter.d.ts +9 -0
  512. package/dist/core/lbug/pool-adapter.js +164 -14
  513. package/dist/core/lbug/query-batch.d.ts +75 -0
  514. package/dist/core/lbug/query-batch.js +102 -0
  515. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  516. package/dist/core/lbug/rel-pair-routing.js +228 -10
  517. package/dist/core/lbug/schema.d.ts +163 -4
  518. package/dist/core/lbug/schema.js +404 -159
  519. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  520. package/dist/core/lbug/sync-csv-writer.js +108 -0
  521. package/dist/core/run-analyze.d.ts +147 -0
  522. package/dist/core/run-analyze.js +1215 -179
  523. package/dist/core/search/bm25-index.d.ts +11 -0
  524. package/dist/core/search/bm25-index.js +60 -26
  525. package/dist/core/search/fts-indexes.d.ts +150 -9
  526. package/dist/core/search/fts-indexes.js +241 -23
  527. package/dist/core/wiki/graph-queries.js +145 -112
  528. package/dist/core/wiki/llm-client.d.ts +29 -3
  529. package/dist/core/wiki/llm-client.js +47 -12
  530. package/dist/core/wiki/prompts.d.ts +19 -0
  531. package/dist/core/wiki/prompts.js +20 -1
  532. package/dist/lib/utils.d.ts +113 -0
  533. package/dist/lib/utils.js +185 -0
  534. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  535. package/dist/mcp/local/aop-metadata.js +227 -0
  536. package/dist/mcp/local/bean-metadata.d.ts +2 -1
  537. package/dist/mcp/local/bean-metadata.js +22 -1
  538. package/dist/mcp/local/convex-metadata.d.ts +8 -0
  539. package/dist/mcp/local/convex-metadata.js +45 -0
  540. package/dist/mcp/local/local-backend.d.ts +174 -11
  541. package/dist/mcp/local/local-backend.js +1678 -331
  542. package/dist/mcp/local/path-predicate.d.ts +19 -0
  543. package/dist/mcp/local/path-predicate.js +21 -0
  544. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  545. package/dist/mcp/local/pdg-impact.js +391 -98
  546. package/dist/mcp/repository-policy.d.ts +1 -0
  547. package/dist/mcp/repository-policy.js +5 -0
  548. package/dist/mcp/resources.js +26 -4
  549. package/dist/mcp/server.js +23 -13
  550. package/dist/mcp/tools.d.ts +8 -0
  551. package/dist/mcp/tools.js +76 -23
  552. package/dist/server/analyze-job.d.ts +37 -2
  553. package/dist/server/analyze-job.js +13 -2
  554. package/dist/server/analyze-launch.d.ts +1 -1
  555. package/dist/server/analyze-launch.js +79 -10
  556. package/dist/server/analyze-worker-core.d.ts +1 -1
  557. package/dist/server/analyze-worker-core.js +10 -1
  558. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  559. package/dist/server/analyze-worker-ipc.js +4 -0
  560. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  561. package/dist/server/analyze-worker-protocol.js +1 -0
  562. package/dist/server/analyze-worker.d.ts +1 -17
  563. package/dist/server/api.d.ts +2 -11
  564. package/dist/server/api.js +164 -163
  565. package/dist/server/embed-run-outcome.d.ts +89 -0
  566. package/dist/server/embed-run-outcome.js +88 -0
  567. package/dist/server/git-clone.js +6 -2
  568. package/dist/server/middleware.d.ts +116 -9
  569. package/dist/server/middleware.js +291 -22
  570. package/dist/server/sse-progress.d.ts +41 -0
  571. package/dist/server/sse-progress.js +125 -0
  572. package/dist/storage/branch-index.d.ts +11 -6
  573. package/dist/storage/branch-index.js +15 -7
  574. package/dist/storage/file-hash.js +2 -2
  575. package/dist/storage/fs-atomic.d.ts +25 -0
  576. package/dist/storage/fs-atomic.js +42 -0
  577. package/dist/storage/git.d.ts +131 -0
  578. package/dist/storage/git.js +236 -2
  579. package/dist/storage/index-lock.d.ts +102 -0
  580. package/dist/storage/index-lock.js +660 -0
  581. package/dist/storage/parse-cache.js +588 -6
  582. package/dist/storage/parsedfile-store.js +76 -6
  583. package/dist/storage/repo-manager.d.ts +54 -441
  584. package/dist/storage/repo-manager.js +312 -221
  585. package/dist/storage/repo-meta.d.ts +530 -0
  586. package/dist/storage/repo-meta.js +100 -0
  587. package/dist/types/pipeline.d.ts +37 -0
  588. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  589. package/hooks/claude/gitnexus-hook.cjs +1 -1
  590. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  591. package/package.json +11 -2
  592. package/scripts/cross-platform-shard.ts +153 -0
  593. package/scripts/cross-platform-tests.ts +122 -0
  594. package/scripts/run-cross-platform.ts +16 -5
  595. package/skills/gitnexus-cli.md +3 -3
  596. package/skills/gitnexus-debugging.md +37 -7
  597. package/skills/gitnexus-exploring.md +26 -4
  598. package/skills/gitnexus-impact-analysis.md +71 -10
  599. package/skills/gitnexus-plan/README.md +11 -6
  600. package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
  601. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
  602. package/skills/gitnexus-refactoring.md +48 -5
  603. package/skills/gitnexus-review/SKILL.md +12 -6
  604. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
  605. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
  606. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
  607. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
  608. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
  609. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
  610. package/skills/gitnexus-taint-analysis.md +13 -7
  611. package/skills/gitnexus-work/SKILL.md +4 -1
  612. package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
  613. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
  614. package/vendor/leiden/utils.cjs +28 -1
  615. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  616. package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
  617. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  618. package/web/assets/agent-Dr4l5EOp.js +662 -0
  619. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  620. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  621. package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
  622. package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
  623. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  624. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  625. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  626. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  627. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  628. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  629. package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
  630. package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
  631. package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
  632. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  633. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  634. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  635. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  636. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  637. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  638. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  639. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  640. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  641. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  642. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  643. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  644. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  645. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  646. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  647. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  648. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  649. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  650. package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
  651. package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
  652. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  653. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  654. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  655. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  656. package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
  657. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  658. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  659. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  660. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  661. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  662. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  663. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  664. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  665. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  666. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  667. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  668. package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
  669. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  670. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  671. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  672. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  673. package/web/assets/error-D9MtuG9s.js +1 -0
  674. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  675. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  676. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  677. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  678. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  679. package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
  680. package/web/assets/index-CJDpyH-n.css +2 -0
  681. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  682. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  683. package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
  684. package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
  685. package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
  686. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  687. package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
  688. package/web/assets/node.browser-U-KyT5AW.js +1 -0
  689. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  690. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  691. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  692. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  693. package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
  694. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  695. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  696. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  697. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  698. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  699. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  700. package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
  701. package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
  702. package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
  703. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  704. package/web/assets/src-C5sx_gMp.js +1 -0
  705. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  706. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  707. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  708. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  709. package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
  710. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  711. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  712. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  713. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  714. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  715. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  716. package/web/index.html +16 -15
  717. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  718. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  719. package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
  720. package/web/assets/agent-Ds-lkZjX.js +0 -626
  721. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  722. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
  723. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
  724. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  725. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  726. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  727. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
  728. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
  729. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  730. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  731. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  732. package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
  733. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  734. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  735. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
  736. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  737. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  738. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
  739. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  740. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  741. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
  742. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
  743. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
  744. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
  745. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
  746. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
  747. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
  748. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
  749. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
  750. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
  751. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  752. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
  753. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
  754. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  755. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
  756. package/web/assets/index-CX_fADmQ.css +0 -2
  757. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  758. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
  759. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  760. package/web/assets/node-Ct_zna8U.js +0 -8
  761. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  762. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  763. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
  764. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  765. package/web/assets/sdk-CzHHH8tD.js +0 -37
  766. package/web/assets/src-Cv1eWg0o.js +0 -1
  767. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
  768. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
  769. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  770. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  771. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
  772. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  773. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
  774. package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
  775. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -0,0 +1,53 @@
1
+ /**
2
+ * NestJS decorator routes for the indexer.
3
+ *
4
+ * A NestJS endpoint is declared across two decorators: `@Controller('venues')`
5
+ * on the class supplies the prefix, and `@Get('search')` on a method supplies
6
+ * the verb and the remainder. Neither half is a route on its own, which is why
7
+ * a pattern that only looks at one of them finds nothing.
8
+ *
9
+ * Until this existed, TypeScript's `extractDecoratorRoutes` hook was dispatch
10
+ * guards plus static data route tables only, so a NestJS repo produced
11
+ * essentially no `Route` nodes. That is not a quiet gap: `route_map`,
12
+ * `api_impact` and `shape_check` all read `Route` nodes and answer "no routes
13
+ * matching …" when there are none — so `api_impact`, whose documented job is to
14
+ * be run BEFORE modifying a route handler, reported every live endpoint as
15
+ * non-existent, and a not-found reads as a safe change (#3009).
16
+ *
17
+ * The extraction mirrors `spring.ts`, which solves the identical shape for
18
+ * `@RequestMapping` + `@GetMapping`: collect class-level prefixes keyed by class
19
+ * node id, then walk method decorators and attach the prefix of their enclosing
20
+ * class. As there, the prefix travels on `ExtractedDecoratorRoute.prefix` and
21
+ * the routes phase performs the join via `normalizeExtractedRoutePath`, so
22
+ * NestJS routes are keyed identically to every other framework's.
23
+ *
24
+ * The multi-path form `@Get(['a', 'b'])` mounts the handler at BOTH paths, so
25
+ * it emits both routes: N paths is N elements of the returned
26
+ * `ExtractedDecoratorRoute[]`, which is already how this layer spells N routes
27
+ * — the same representation `spring.ts` reaches for `@GetMapping({"/a","/b"})`,
28
+ * and the reason neither needs a special case downstream. The CLASS-level array
29
+ * (`@Controller(['a', 'b'])`) is DECLINED rather than cross-multiplied over the
30
+ * class's methods, again matching `spring.ts`: there an array-form class prefix
31
+ * only ever suppresses the class, with the cross-product tracked in #2280.
32
+ *
33
+ * Known limitation: the URLs produced here are CONTROLLER-RELATIVE. A global
34
+ * prefix (`app.setGlobalPrefix('api')`) and URI versioning are applied by the
35
+ * bootstrap file, not by any decorator this file can see, so neither is
36
+ * reflected — a route served at `/api/v1/venues/search` is stored as
37
+ * `/venues/search`. The module's "drop rather than guess" floor is unavailable
38
+ * for it: the evidence lives in a different file, so honouring it would mean
39
+ * dropping every Nest route in every repo. `spring.ts` has the same hole for
40
+ * `server.servlet.context-path`; `ExtractedDecoratorRoute.prefix` is the
41
+ * channel a cross-file follow-up would use, the way FastAPI resolves its mount.
42
+ */
43
+ import type Parser from 'tree-sitter';
44
+ import type { ExtractedDecoratorRoute } from '../workers/parse-worker.js';
45
+ /**
46
+ * Extract NestJS routes from one parsed TypeScript/JavaScript file.
47
+ *
48
+ * A method decorator is only believed when its enclosing class carries a
49
+ * `@Controller`. `@Get`/`@Post`/`@Delete` are common identifiers, and without
50
+ * that requirement any unrelated library using the same decorator names would
51
+ * mint phantom endpoints.
52
+ */
53
+ export declare function extractNestRoutes(tree: Parser.Tree, filePath: string, lineOffset?: number): ExtractedDecoratorRoute[];
@@ -0,0 +1,523 @@
1
+ /**
2
+ * NestJS decorator routes for the indexer.
3
+ *
4
+ * A NestJS endpoint is declared across two decorators: `@Controller('venues')`
5
+ * on the class supplies the prefix, and `@Get('search')` on a method supplies
6
+ * the verb and the remainder. Neither half is a route on its own, which is why
7
+ * a pattern that only looks at one of them finds nothing.
8
+ *
9
+ * Until this existed, TypeScript's `extractDecoratorRoutes` hook was dispatch
10
+ * guards plus static data route tables only, so a NestJS repo produced
11
+ * essentially no `Route` nodes. That is not a quiet gap: `route_map`,
12
+ * `api_impact` and `shape_check` all read `Route` nodes and answer "no routes
13
+ * matching …" when there are none — so `api_impact`, whose documented job is to
14
+ * be run BEFORE modifying a route handler, reported every live endpoint as
15
+ * non-existent, and a not-found reads as a safe change (#3009).
16
+ *
17
+ * The extraction mirrors `spring.ts`, which solves the identical shape for
18
+ * `@RequestMapping` + `@GetMapping`: collect class-level prefixes keyed by class
19
+ * node id, then walk method decorators and attach the prefix of their enclosing
20
+ * class. As there, the prefix travels on `ExtractedDecoratorRoute.prefix` and
21
+ * the routes phase performs the join via `normalizeExtractedRoutePath`, so
22
+ * NestJS routes are keyed identically to every other framework's.
23
+ *
24
+ * The multi-path form `@Get(['a', 'b'])` mounts the handler at BOTH paths, so
25
+ * it emits both routes: N paths is N elements of the returned
26
+ * `ExtractedDecoratorRoute[]`, which is already how this layer spells N routes
27
+ * — the same representation `spring.ts` reaches for `@GetMapping({"/a","/b"})`,
28
+ * and the reason neither needs a special case downstream. The CLASS-level array
29
+ * (`@Controller(['a', 'b'])`) is DECLINED rather than cross-multiplied over the
30
+ * class's methods, again matching `spring.ts`: there an array-form class prefix
31
+ * only ever suppresses the class, with the cross-product tracked in #2280.
32
+ *
33
+ * Known limitation: the URLs produced here are CONTROLLER-RELATIVE. A global
34
+ * prefix (`app.setGlobalPrefix('api')`) and URI versioning are applied by the
35
+ * bootstrap file, not by any decorator this file can see, so neither is
36
+ * reflected — a route served at `/api/v1/venues/search` is stored as
37
+ * `/venues/search`. The module's "drop rather than guess" floor is unavailable
38
+ * for it: the evidence lives in a different file, so honouring it would mean
39
+ * dropping every Nest route in every repo. `spring.ts` has the same hole for
40
+ * `server.servlet.context-path`; `ExtractedDecoratorRoute.prefix` is the
41
+ * channel a cross-file follow-up would use, the way FastAPI resolves its mount.
42
+ */
43
+ import { plainString, propertyName } from './data-route-table.js';
44
+ import { isDev } from '../utils/env.js';
45
+ import { logger } from '../../logger.js';
46
+ /**
47
+ * NestJS method decorators → HTTP verb. A Map rather than an object literal
48
+ * because the lookup key is an arbitrary decorator name read out of source: a
49
+ * plain object answers `@toString()` with `Object.prototype.toString`, which is
50
+ * truthy and would be emitted verbatim as the route's httpMethod.
51
+ */
52
+ const NEST_METHOD_DECORATORS = new Map([
53
+ ['Get', 'GET'],
54
+ ['Post', 'POST'],
55
+ ['Put', 'PUT'],
56
+ ['Patch', 'PATCH'],
57
+ ['Delete', 'DELETE'],
58
+ ['Head', 'HEAD'],
59
+ ['Options', 'OPTIONS'],
60
+ ['All', '*'],
61
+ // `@Sse` mounts a real GET endpoint that streams; it is as much a route as
62
+ // `@Get`. `@Search` is deliberately absent — `normalizeRouteMethod` rejects
63
+ // SEARCH as non-standard and would key the route by URL alone, colliding
64
+ // with every other verb on that path.
65
+ ['Sse', 'GET'],
66
+ ]);
67
+ /**
68
+ * Class node types that can carry a `@Controller`. `export abstract class C`
69
+ * parses as `abstract_class_declaration`, a DIFFERENT node type — and a
70
+ * decorated abstract base sharing CRUD routes with its subclasses is ordinary
71
+ * Nest, so matching `class_declaration` alone silently drops the whole
72
+ * controller rather than one route.
73
+ */
74
+ const CLASS_DECLARATION_TYPES = new Set([
75
+ 'class_declaration',
76
+ 'abstract_class_declaration',
77
+ ]);
78
+ /**
79
+ * Cheap parse-free gate. Every JS/TS file in every repo reaches this hook, so
80
+ * skip the walk unless the file could plausibly declare a controller. A file
81
+ * without the substring cannot produce a route here, because a `@Controller`
82
+ * decorator is REQUIRED before any method decorator is believed (see below).
83
+ */
84
+ const CONTROLLER_HINT = '@Controller';
85
+ /** The decorator's name — `Controller` for `@Controller('x')`, `Get` for `@Get()`. */
86
+ function decoratorName(decorator) {
87
+ const inner = decorator.namedChild(0);
88
+ if (!inner)
89
+ return null;
90
+ // `@Get()` is a call_expression; a bare `@Injectable` is a plain identifier.
91
+ if (inner.type === 'identifier')
92
+ return inner.text;
93
+ if (inner.type === 'call_expression') {
94
+ const fn = inner.childForFieldName('function');
95
+ return fn?.type === 'identifier' ? fn.text : null;
96
+ }
97
+ return null;
98
+ }
99
+ /**
100
+ * The literal path(s) a decorator call mounts, one entry per path — or `['']`
101
+ * when the decorator takes no argument (`@Controller()` / `@Get()` — both legal
102
+ * and both meaning "no path segment of my own").
103
+ *
104
+ * A list rather than a single string because `@Get(['a', 'b'])` mounts the
105
+ * handler at two URLs, and two routes is what the caller's output contract
106
+ * already says that in: `ExtractedDecoratorRoute[]`. No new field, and no
107
+ * special case at the emit site — the same shape `spring.ts` gets for free from
108
+ * a query that matches one element at a time.
109
+ *
110
+ * Returns `null` when an argument IS present but is not a readable literal.
111
+ * That is deliberately distinct from `['']`: a computed prefix
112
+ * (`@Controller(ROUTES.VENUES)`) whose value we cannot read must drop the route
113
+ * rather than silently mount it at the wrong URL. `route_map` presents its
114
+ * output as fact, and a wrong path is worse than a missing one. `[]` is a third
115
+ * answer and means neither of those: `@Get([])` is legal, knowably mounts
116
+ * nothing, and so emits nothing — it must never be read as the unknowable case,
117
+ * which is the one that suppresses a whole controller.
118
+ *
119
+ * Reading one literal is delegated to `plainString`, the same judge the
120
+ * data-route-table extractor uses, so both agree on what is readable. Filtering
121
+ * `string_fragment` children and joining them looks equivalent and is not:
122
+ * tree-sitter SPLITS a literal around each `escape_sequence`, and the join then
123
+ * DELETES the escape rather than decoding it. `@Get(':id(\\d+)')` — the ordinary
124
+ * spelling of a Nest regex param, whose value is `:id(\d+)` — came out as
125
+ * `:id(d+)`, and `@Get('/v\u0069ews')` came out as `/vews`. Both are paths the
126
+ * app never serves, i.e. the wrong-URL outcome the paragraph above forbids.
127
+ */
128
+ function decoratorLiteralPaths(decorator) {
129
+ const call = decorator.namedChild(0);
130
+ // A Nest route decorator is a FACTORY: `@Get()` invokes it and returns the
131
+ // decorator that registers the route. A BARE `@Get` is the factory itself,
132
+ // never applied, so Nest registers nothing — emitting a route for it would
133
+ // publish a URL the app does not serve. The same holds one level up for a
134
+ // bare `@Controller`, which registers no controller.
135
+ //
136
+ // `@Get()` with no ARGUMENT is different and still a real pathless route:
137
+ // what distinguishes them is the call, not the argument list. That case falls
138
+ // through to the `!first` branch below.
139
+ if (call?.type !== 'call_expression')
140
+ return null;
141
+ const first = call.childForFieldName('arguments')?.namedChild(0);
142
+ if (!first)
143
+ return [''];
144
+ // The object form belongs to `@Controller` alone — a verb decorator takes
145
+ // `string | string[]`, so Nest mounts nothing for `@Get({ path: 'a' })`.
146
+ // Reading it as a route would mint a URL the app never serves, which is the
147
+ // invented fact this module refuses; an unreadable shape drops instead.
148
+ if (first.type === 'object' && decoratorName(decorator) !== 'Controller')
149
+ return null;
150
+ return literalPaths(first);
151
+ }
152
+ /**
153
+ * The paths carried by one decorator ARGUMENT node, split out from
154
+ * {@link decoratorLiteralPaths} only so the object form can re-enter it: Nest
155
+ * accepts an array inside `{ path: … }` as well, and reusing the same judge is
156
+ * what keeps `@Controller({ path: ['a', 'b'] })` from being read by a second,
157
+ * laxer set of rules that has drifted from this one.
158
+ */
159
+ function literalPaths(node) {
160
+ // `@Controller({ path: 'cats', version: '1' })` is the documented form for
161
+ // URI/header versioning, and its path is a plain literal sitting right there.
162
+ // Worth reading rather than dropping, because the asymmetry is severe: an
163
+ // unreadable METHOD path costs one route, an unreadable PREFIX costs every
164
+ // route on the class.
165
+ if (node.type === 'object') {
166
+ // But a `path` pair only PROVES the mount when nothing else in the object
167
+ // can replace it, and the first match proves nothing on its own:
168
+ // `{ path: 'cats', ...options }` mounts wherever `options.path` says, and
169
+ // `{ path: 'cats', path: 'dogs' }` mounts at `dogs` — last write wins in
170
+ // both. Either one publishes `/cats`, a URL the app never serves, and it
171
+ // looks exactly like a correct one, which is the wrong-answer-dressed-as-
172
+ // fact this module refuses. So the object is read only when EVERY member is
173
+ // a named, non-repeated pair. That whole-entry fail-closed walk is the
174
+ // shape `routeFromObject` uses in `data-route-table.ts`.
175
+ const values = new Map();
176
+ for (const child of node.namedChildren) {
177
+ // Skipped FIRST. A comment between two pairs is ordinary formatting; run
178
+ // through the not-a-pair test below it would refuse the object and cost
179
+ // the class every route it has, over a comment.
180
+ if (child.type === 'comment')
181
+ continue;
182
+ // `spread_element` (`{ ...options }`), `shorthand_property_identifier`
183
+ // (`{ path }`) and `method_definition` (`{ getFoo() {} }`) all land here
184
+ // — probed and identical across the three grammars this extractor runs
185
+ // under. None offers a key/value this file can read, and the first can
186
+ // introduce or overwrite `path` from a value declared elsewhere.
187
+ if (child.type !== 'pair')
188
+ return null;
189
+ const key = child.childForFieldName('key');
190
+ const value = child.childForFieldName('value');
191
+ if (key === null || value === null)
192
+ return null;
193
+ // Compared through `propertyName`, the same judge used to READ the key —
194
+ // so `{ path: … }` and `{ 'path': … }` are one key and collide as
195
+ // duplicates. Comparing raw key text instead makes them two distinct
196
+ // keys, and `{ path: 'cats', 'path': 'dogs' }` silently mounts the loser.
197
+ const name = propertyName(key);
198
+ // No readable name means a computed key (`{ [dynamicKey]: 'b' }`), which
199
+ // could evaluate to `path` and take the mount with it — refused, not
200
+ // ignored. A repeated key is refused wherever it appears, not only on
201
+ // `path`: a duplicate anywhere is evidence the object is not the fixed
202
+ // literal it reads as, and cost is one controller against a wrong URL.
203
+ if (name === null || values.has(name))
204
+ return null;
205
+ values.set(name, value);
206
+ }
207
+ // Deliberately NOT `containsExecutingExpression` (data-route-table.ts): that
208
+ // guards whole-entry declarativeness for a static route table, a different
209
+ // invariant. Here only `path` has to be provable, so a non-literal value on
210
+ // an unrelated key — `{ path: 'a', scope: Scope.REQUEST }`, ordinary Nest —
211
+ // stays benign and keeps its controller.
212
+ const path = values.get('path');
213
+ // A missing `path` keeps the existing drop and must never read as `''`:
214
+ // `@Controller({ version: '1' })` mounts at a prefix this decorator does
215
+ // not state, and `''` would publish every one of its methods at the root.
216
+ return path === undefined ? null : literalPaths(path);
217
+ }
218
+ // `array` is the node type in all three grammars this extractor runs under —
219
+ // tree-sitter-typescript's `typescript` and `tsx`, and tree-sitter-javascript
220
+ // — probed rather than assumed, because a name that differs in one of them
221
+ // would silently restore the old drop for that grammar alone.
222
+ if (node.type === 'array') {
223
+ const paths = [];
224
+ for (const element of node.namedChildren) {
225
+ const value = plainString(element);
226
+ // One unreadable element poisons the whole array. Emitting the readable
227
+ // ones would present a partial mapping as a complete one — the endpoint
228
+ // behind `ROUTES.ADMIN` would be missing from a controller that otherwise
229
+ // looks fully covered, which is the same wrong-answer-dressed-as-fact this
230
+ // module refuses above, only harder to notice.
231
+ if (value === null)
232
+ return null;
233
+ paths.push(value);
234
+ }
235
+ return paths;
236
+ }
237
+ const value = plainString(node);
238
+ return value === null ? null : [value];
239
+ }
240
+ /**
241
+ * Decorators that immediately precede `node` among its parent's named children.
242
+ * In tree-sitter-typescript a decorator is a SIBLING placed before the thing it
243
+ * decorates — at `export_statement`/`program` level for a class — and
244
+ * decorators stack.
245
+ *
246
+ * Walks the sibling chain rather than indexing into `parent.namedChildren`,
247
+ * which is the same uncached-getter trap {@link collectClassRoutes} documents:
248
+ * a class's parent is usually `program`, so reading the list marshals every
249
+ * top-level statement in the file, once per class. That is quadratic in
250
+ * top-level statements — measured 200ms for a file of 800 classes, against
251
+ * 0.9ms for this form.
252
+ */
253
+ function precedingDecorators(node) {
254
+ const out = [];
255
+ for (let sibling = node.previousNamedSibling; sibling; sibling = sibling.previousNamedSibling) {
256
+ // A comment between the decorators and the thing they decorate is ordinary
257
+ // (`@Post('x')` then a JSDoc block then the method) and must not terminate
258
+ // the stack — doing so makes the whole decorated route invisible.
259
+ if (sibling.type === 'comment')
260
+ continue;
261
+ if (sibling.type !== 'decorator')
262
+ break;
263
+ out.push(sibling);
264
+ }
265
+ return out;
266
+ }
267
+ /**
268
+ * Leading `decorator` children of a node, stopping at the first child that is
269
+ * neither a decorator nor a comment. Comments are skipped for the same reason
270
+ * as in {@link precedingDecorators}: a doc block sitting between `@Controller`
271
+ * and the class must not hide the decorator.
272
+ */
273
+ function leadingDecorators(node) {
274
+ const out = [];
275
+ for (const child of node.namedChildren) {
276
+ if (child.type === 'comment')
277
+ continue;
278
+ if (child.type !== 'decorator')
279
+ break;
280
+ out.push(child);
281
+ }
282
+ return out;
283
+ }
284
+ /**
285
+ * Cap on the decorator text quoted in the dropped-controller log. Long enough
286
+ * to identify the shape, short enough not to dump a wrapped multi-line
287
+ * decorator into the operator's terminal.
288
+ */
289
+ const DROPPED_CONTROLLER_LOG_LIMIT = 160;
290
+ /**
291
+ * Every decorator attached to a class, across the two shapes the grammar
292
+ * produces — which differ by whether the class is exported:
293
+ *
294
+ * `@Controller('a') class A {}` → decorator is a CHILD of class_declaration
295
+ * `@Controller('a') export class A {}` → decorator is a child of export_statement,
296
+ * i.e. a SIBLING of the class_declaration
297
+ *
298
+ * Checking only one of them silently drops half of all controllers, so collect
299
+ * from both, plus the sibling position for the class itself. There is no fourth
300
+ * source: both grammars fold a class's decorators INTO the `export_statement`
301
+ * production, so an `export_statement` never has one as a preceding sibling.
302
+ */
303
+ function classDecorators(classNode) {
304
+ const out = [...leadingDecorators(classNode), ...precedingDecorators(classNode)];
305
+ const wrapper = classNode.parent;
306
+ if (wrapper?.type === 'export_statement')
307
+ out.push(...leadingDecorators(wrapper));
308
+ return out;
309
+ }
310
+ /**
311
+ * The `@Controller(...)` prefix for a class, or undefined when it has none.
312
+ * One string, not a list: a class-level array (`@Controller(['a', 'b'])`) is
313
+ * DECLINED here, exactly as `spring.ts` declines an array-form
314
+ * `@RequestMapping` — it detects the shape only to suppress the class, leaving
315
+ * the prefix × method cross-product to #2280. Collapsing to `null` is that
316
+ * suppression, and this parity is deliberate, not an oversight: the two
317
+ * extractors solve the same shape and should not disagree about which half of
318
+ * it is supported.
319
+ */
320
+ function controllerPrefix(classNode, filePath) {
321
+ for (const decorator of classDecorators(classNode)) {
322
+ if (decoratorName(decorator) !== 'Controller')
323
+ continue;
324
+ const paths = decoratorLiteralPaths(decorator);
325
+ // `@Controller([])` lands here too and needs no answer of its own: a
326
+ // controller mounted at no path serves no route, so "emit nothing for this
327
+ // class" is what both readings of it come to.
328
+ if (paths === null || paths.length !== 1) {
329
+ // The single funnel for EVERY whole-controller drop — an unreadable
330
+ // constant (`@Controller(ROUTES.VENUES)`), a multi-path array, an
331
+ // unreadable array element, and an options object whose `path` another
332
+ // member could override all return null here. Reporting at the refusal
333
+ // sites instead would make the rarest cause the loudest, and leave the
334
+ // motivating one from this module's own header silent.
335
+ //
336
+ // `isDev` at `info`, not `debug`: the logger's base level IS `info`, so
337
+ // an isDev-gated `debug` is gated twice and stays silent in exactly the
338
+ // dev run it exists for. Same shape the routes phase uses.
339
+ if (isDev) {
340
+ const shape = decorator.text.replace(/\s+/g, ' ');
341
+ logger.info(`🗺️ NestJS: dropped @Controller in ${filePath} — its prefix is not provable: ${shape.length > DROPPED_CONTROLLER_LOG_LIMIT
342
+ ? `${shape.slice(0, DROPPED_CONTROLLER_LOG_LIMIT)}…`
343
+ : shape}`);
344
+ }
345
+ return null;
346
+ }
347
+ return paths[0];
348
+ }
349
+ return undefined;
350
+ }
351
+ /**
352
+ * Extract NestJS routes from one parsed TypeScript/JavaScript file.
353
+ *
354
+ * A method decorator is only believed when its enclosing class carries a
355
+ * `@Controller`. `@Get`/`@Post`/`@Delete` are common identifiers, and without
356
+ * that requirement any unrelated library using the same decorator names would
357
+ * mint phantom endpoints.
358
+ */
359
+ export function extractNestRoutes(tree, filePath, lineOffset = 0) {
360
+ if (!tree.rootNode.text.includes(CONTROLLER_HINT))
361
+ return [];
362
+ const out = [];
363
+ const visit = (node) => {
364
+ if (CLASS_DECLARATION_TYPES.has(node.type)) {
365
+ const prefix = controllerPrefix(node, filePath);
366
+ // `undefined` — not a controller at all. `null` — a controller whose
367
+ // prefix could not be read, so its routes' URLs are unknowable.
368
+ if (prefix !== undefined) {
369
+ if (prefix !== null)
370
+ collectClassRoutes(node, prefix, filePath, lineOffset, out);
371
+ return; // a controller's methods are handled here; don't re-walk them
372
+ }
373
+ }
374
+ for (const child of node.namedChildren)
375
+ visit(child);
376
+ };
377
+ visit(tree.rootNode);
378
+ return out;
379
+ }
380
+ /**
381
+ * Modifiers that take a `method_definition` out of Nest's handler set.
382
+ *
383
+ * Nest's `RequestMapping` writes the handler onto the class PROTOTYPE's
384
+ * `descriptor.value`, and `RouterExplorer` scans prototype instance methods for
385
+ * that metadata. A `static` method lives on the constructor and is never
386
+ * scanned; an accessor's descriptor carries `get`/`set` and no `value` to
387
+ * register. A verb decorator on any of the three therefore mounts NOTHING, so a
388
+ * route minted from one is a URL the app does not serve — the invented fact
389
+ * this module refuses everywhere else.
390
+ */
391
+ const NON_HANDLER_MODIFIERS = new Set(['static', 'get', 'set']);
392
+ /** Longest entry above — the cheap gate that keeps `.trim()` off a method body. */
393
+ const LONGEST_NON_HANDLER_MODIFIER = 6;
394
+ /**
395
+ * Whether Nest could register this `method_definition` as a request handler.
396
+ *
397
+ * Reads `children`, NOT `namedChildren`, and that is the whole difficulty:
398
+ * `static`, `get` and `set` are ANONYMOUS tokens in all three grammars this
399
+ * extractor runs under, so they never appear among named children. A static
400
+ * method, a getter, a setter and a plain method expose the IDENTICAL
401
+ * `namedChildren` (`property_identifier`, `formal_parameters`,
402
+ * `statement_block`) — probed, not assumed — so the module's usual
403
+ * `namedChildren` idiom cannot see the modifier at all and every one of the
404
+ * three reads as an ordinary handler.
405
+ *
406
+ * Matches on child TEXT, not node type, and skips the `name` field — the same
407
+ * two rules `hasKeyword` in `field-extractors/configs/helpers.ts` applies, and
408
+ * that the TS/JS captures and method extractor already use for this question.
409
+ * The text rule is load-bearing: `static` reaches the tree as an anonymous
410
+ * token in some grammar versions and a keyword node in others, so a
411
+ * `child.type === 'static'` test silently stops firing on a grammar bump — here
412
+ * that would readmit exactly the phantom routes this function removes, with the
413
+ * suite still green. Skipping `name` is what keeps a method literally called
414
+ * `get()` or `static()` from reading as a modifier.
415
+ *
416
+ * Open-coded rather than calling `hasKeyword` three times, which was measured
417
+ * at 13.96us per method against 4.30us here: that helper takes ONE keyword, so
418
+ * three keywords is three full passes, and it calls `.text.trim()` on every
419
+ * child including `statement_block` — the whole method body. `.some()` does not
420
+ * rescue it, since a real handler matches nothing and pays all three. The
421
+ * length guard keeps `.trim()` off a multi-KB body; no modifier exceeds it.
422
+ *
423
+ * The scan is bounded by one method's own children (a handful), so it is not
424
+ * the uncached-getter trap {@link collectClassRoutes} documents — that one bites
425
+ * when a PARENT's child list is re-marshalled once per member.
426
+ */
427
+ function isRequestHandler(member) {
428
+ const nameNode = member.childForFieldName('name');
429
+ for (const child of member.children) {
430
+ if (child === nameNode)
431
+ continue;
432
+ const text = child.text;
433
+ if (text.length <= LONGEST_NON_HANDLER_MODIFIER && NON_HANDLER_MODIFIERS.has(text.trim())) {
434
+ return false;
435
+ }
436
+ }
437
+ return true;
438
+ }
439
+ function collectClassRoutes(classNode, prefix, filePath, lineOffset, out) {
440
+ const body = classNode.childForFieldName('body');
441
+ if (!body)
442
+ return;
443
+ // ONE forward pass over the body, accumulating the decorator run and flushing
444
+ // it at each method. Calling `precedingDecorators` per method instead is
445
+ // quadratic in methods-per-controller for a reason that is invisible in the
446
+ // source: `namedChildren` is an UNCACHED getter in node-tree-sitter, so every
447
+ // call re-marshals the entire class body into fresh JS objects before the
448
+ // `findIndex`. Measured here, 800 methods cost 362ms (450us/method, up from
449
+ // 42us/method at 50); a single pass is flat. `spring.ts` never had this
450
+ // because a Java annotation is a child of the declaration it annotates.
451
+ const pending = [];
452
+ for (const member of body.namedChildren) {
453
+ if (member.type === 'decorator') {
454
+ pending.push(member);
455
+ continue;
456
+ }
457
+ // Same reason as in `precedingDecorators`: a JSDoc block between a
458
+ // decorator stack and its method must not hide the route (a real
459
+ // controller shape, pinned by the suite). Known limitation of that skip: a
460
+ // decorator ORPHANED by a commented-out handler is then absorbed onto the
461
+ // NEXT method, minting a phantom route with the wrong handler. There is no
462
+ // AST fix — an orphan followed by a comment is indistinguishable from a
463
+ // stack whose method happens to be documented — and losing every
464
+ // documented route is the worse trade, so it is made deliberately.
465
+ if (member.type === 'comment')
466
+ continue;
467
+ // tree-sitter-javascript makes a method decorator a CHILD of the
468
+ // `method_definition`, not a preceding sibling as in tree-sitter-typescript
469
+ // — and this extractor is registered on the JavaScript provider too, which
470
+ // already advertises `framework: 'nestjs'`. Reading only siblings meant
471
+ // every `.js` Nest controller emitted nothing. On TypeScript the first
472
+ // named child is the method name, so `leadingDecorators` contributes
473
+ // nothing there and no route is collected twice.
474
+ //
475
+ // A static member, a getter and a setter are decorated exactly like a
476
+ // handler and registered as none, so they contribute no decorators (see
477
+ // `isRequestHandler`). They still fall THROUGH to the `pending.length = 0`
478
+ // below rather than `continue` past it: skipping the clear would hand their
479
+ // decorator run to the next method, trading a phantom route for a
480
+ // misattributed one — the strictly worse of the two, since it corrupts a
481
+ // route that is otherwise correct.
482
+ const decorators = member.type === 'method_definition' && isRequestHandler(member)
483
+ ? [...pending, ...leadingDecorators(member)]
484
+ : [];
485
+ for (const decorator of decorators) {
486
+ const name = decoratorName(decorator);
487
+ if (name === null)
488
+ continue;
489
+ const httpMethod = NEST_METHOD_DECORATORS.get(name);
490
+ if (httpMethod === undefined)
491
+ continue;
492
+ const routePaths = decoratorLiteralPaths(decorator);
493
+ if (routePaths === null)
494
+ continue; // unreadable → skip
495
+ const handlerName = member.childForFieldName('name')?.text;
496
+ // One route per path. `@Get(['a', 'b'])` mounts the handler at both, and
497
+ // everything else about the two is identical — same verb, same handler,
498
+ // same line — so the loop is the whole of the multi-path support. An
499
+ // empty array falls out as zero iterations without a special case.
500
+ for (const routePath of routePaths) {
501
+ out.push({
502
+ filePath,
503
+ // A pathless `@Get()` is the controller's index route and carries no
504
+ // segment of its own. Emit '/' rather than '': `claim()` in
505
+ // call-processor short-circuits on a falsy routePath, so an empty
506
+ // string would still produce the Route node but silently lose its
507
+ // handler symbol — the route would exist with nothing attached to it.
508
+ // Both spellings normalize to the same URL against the prefix.
509
+ routePath: routePath === '' ? '/' : routePath,
510
+ httpMethod,
511
+ decoratorName: name,
512
+ lineNumber: member.startPosition.row + 1 + lineOffset,
513
+ prefix: prefix === '' ? null : prefix,
514
+ ...(handlerName === undefined ? {} : { handlerName }),
515
+ });
516
+ }
517
+ }
518
+ // Anything that is not a decorator or a comment ends the run — including
519
+ // the method that just consumed it, so a decorated FIELD's stack is never
520
+ // absorbed onto the method after it.
521
+ pending.length = 0;
522
+ }
523
+ }
@@ -25,6 +25,17 @@ import type Parser from 'tree-sitter';
25
25
  * separately.
26
26
  */
27
27
  export declare const METHOD_ANNOTATION_TO_HTTP: Record<string, string>;
28
+ /**
29
+ * Resolve a method-level Spring mapping annotation to its HTTP method(s).
30
+ *
31
+ * Shortcut annotations have one implicit verb. `@RequestMapping` may declare
32
+ * one or more static `RequestMethod.X` values; when its `method` member is
33
+ * absent or an empty array, `'*'` preserves Spring's method-agnostic semantics.
34
+ * A present but non-static method expression yields no methods (fail closed).
35
+ */
36
+ export declare function springAnnotationHttpMethods(annotationName: string, annotationText: string): readonly string[];
37
+ /** Intersect class- and method-level Spring mapping constraints. */
38
+ export declare function intersectSpringHttpMethods(classMethods: readonly string[], methodMethods: readonly string[]): readonly string[];
28
39
  /**
29
40
  * A named annotation argument contributes a route only when its member key is
30
41
  * `path` or `value`; a positional argument (no key node) always qualifies.