@stupidloud/codegraph 0.7.7

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 (340) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +482 -0
  3. package/dist/bin/codegraph.d.ts +21 -0
  4. package/dist/bin/codegraph.d.ts.map +1 -0
  5. package/dist/bin/codegraph.js +1296 -0
  6. package/dist/bin/codegraph.js.map +1 -0
  7. package/dist/bin/node-version-check.d.ts +17 -0
  8. package/dist/bin/node-version-check.d.ts.map +1 -0
  9. package/dist/bin/node-version-check.js +39 -0
  10. package/dist/bin/node-version-check.js.map +1 -0
  11. package/dist/bin/uninstall.d.ts +14 -0
  12. package/dist/bin/uninstall.d.ts.map +1 -0
  13. package/dist/bin/uninstall.js +148 -0
  14. package/dist/bin/uninstall.js.map +1 -0
  15. package/dist/config.d.ts +51 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +342 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/context/formatter.d.ts +30 -0
  20. package/dist/context/formatter.d.ts.map +1 -0
  21. package/dist/context/formatter.js +244 -0
  22. package/dist/context/formatter.js.map +1 -0
  23. package/dist/context/index.d.ts +99 -0
  24. package/dist/context/index.d.ts.map +1 -0
  25. package/dist/context/index.js +1075 -0
  26. package/dist/context/index.js.map +1 -0
  27. package/dist/db/index.d.ts +72 -0
  28. package/dist/db/index.d.ts.map +1 -0
  29. package/dist/db/index.js +200 -0
  30. package/dist/db/index.js.map +1 -0
  31. package/dist/db/migrations.d.ts +44 -0
  32. package/dist/db/migrations.d.ts.map +1 -0
  33. package/dist/db/migrations.js +160 -0
  34. package/dist/db/migrations.js.map +1 -0
  35. package/dist/db/queries.d.ts +253 -0
  36. package/dist/db/queries.d.ts.map +1 -0
  37. package/dist/db/queries.js +1202 -0
  38. package/dist/db/queries.js.map +1 -0
  39. package/dist/db/schema.sql +169 -0
  40. package/dist/db/sqlite-adapter.d.ts +52 -0
  41. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  42. package/dist/db/sqlite-adapter.js +237 -0
  43. package/dist/db/sqlite-adapter.js.map +1 -0
  44. package/dist/directory.d.ts +57 -0
  45. package/dist/directory.d.ts.map +1 -0
  46. package/dist/directory.js +264 -0
  47. package/dist/directory.js.map +1 -0
  48. package/dist/errors.d.ts +136 -0
  49. package/dist/errors.d.ts.map +1 -0
  50. package/dist/errors.js +219 -0
  51. package/dist/errors.js.map +1 -0
  52. package/dist/extraction/dfm-extractor.d.ts +31 -0
  53. package/dist/extraction/dfm-extractor.d.ts.map +1 -0
  54. package/dist/extraction/dfm-extractor.js +151 -0
  55. package/dist/extraction/dfm-extractor.js.map +1 -0
  56. package/dist/extraction/grammars.d.ts +78 -0
  57. package/dist/extraction/grammars.d.ts.map +1 -0
  58. package/dist/extraction/grammars.js +322 -0
  59. package/dist/extraction/grammars.js.map +1 -0
  60. package/dist/extraction/index.d.ts +130 -0
  61. package/dist/extraction/index.d.ts.map +1 -0
  62. package/dist/extraction/index.js +1279 -0
  63. package/dist/extraction/index.js.map +1 -0
  64. package/dist/extraction/languages/c-cpp.d.ts +4 -0
  65. package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
  66. package/dist/extraction/languages/c-cpp.js +126 -0
  67. package/dist/extraction/languages/c-cpp.js.map +1 -0
  68. package/dist/extraction/languages/csharp.d.ts +3 -0
  69. package/dist/extraction/languages/csharp.d.ts.map +1 -0
  70. package/dist/extraction/languages/csharp.js +72 -0
  71. package/dist/extraction/languages/csharp.js.map +1 -0
  72. package/dist/extraction/languages/dart.d.ts +3 -0
  73. package/dist/extraction/languages/dart.d.ts.map +1 -0
  74. package/dist/extraction/languages/dart.js +192 -0
  75. package/dist/extraction/languages/dart.js.map +1 -0
  76. package/dist/extraction/languages/go.d.ts +3 -0
  77. package/dist/extraction/languages/go.d.ts.map +1 -0
  78. package/dist/extraction/languages/go.js +58 -0
  79. package/dist/extraction/languages/go.js.map +1 -0
  80. package/dist/extraction/languages/index.d.ts +10 -0
  81. package/dist/extraction/languages/index.d.ts.map +1 -0
  82. package/dist/extraction/languages/index.js +45 -0
  83. package/dist/extraction/languages/index.js.map +1 -0
  84. package/dist/extraction/languages/java.d.ts +3 -0
  85. package/dist/extraction/languages/java.d.ts.map +1 -0
  86. package/dist/extraction/languages/java.js +64 -0
  87. package/dist/extraction/languages/java.js.map +1 -0
  88. package/dist/extraction/languages/javascript.d.ts +3 -0
  89. package/dist/extraction/languages/javascript.d.ts.map +1 -0
  90. package/dist/extraction/languages/javascript.js +90 -0
  91. package/dist/extraction/languages/javascript.js.map +1 -0
  92. package/dist/extraction/languages/kotlin.d.ts +3 -0
  93. package/dist/extraction/languages/kotlin.d.ts.map +1 -0
  94. package/dist/extraction/languages/kotlin.js +253 -0
  95. package/dist/extraction/languages/kotlin.js.map +1 -0
  96. package/dist/extraction/languages/pascal.d.ts +3 -0
  97. package/dist/extraction/languages/pascal.d.ts.map +1 -0
  98. package/dist/extraction/languages/pascal.js +66 -0
  99. package/dist/extraction/languages/pascal.js.map +1 -0
  100. package/dist/extraction/languages/php.d.ts +3 -0
  101. package/dist/extraction/languages/php.d.ts.map +1 -0
  102. package/dist/extraction/languages/php.js +107 -0
  103. package/dist/extraction/languages/php.js.map +1 -0
  104. package/dist/extraction/languages/python.d.ts +3 -0
  105. package/dist/extraction/languages/python.d.ts.map +1 -0
  106. package/dist/extraction/languages/python.js +56 -0
  107. package/dist/extraction/languages/python.js.map +1 -0
  108. package/dist/extraction/languages/ruby.d.ts +3 -0
  109. package/dist/extraction/languages/ruby.d.ts.map +1 -0
  110. package/dist/extraction/languages/ruby.js +114 -0
  111. package/dist/extraction/languages/ruby.js.map +1 -0
  112. package/dist/extraction/languages/rust.d.ts +3 -0
  113. package/dist/extraction/languages/rust.d.ts.map +1 -0
  114. package/dist/extraction/languages/rust.js +109 -0
  115. package/dist/extraction/languages/rust.js.map +1 -0
  116. package/dist/extraction/languages/scala.d.ts +3 -0
  117. package/dist/extraction/languages/scala.d.ts.map +1 -0
  118. package/dist/extraction/languages/scala.js +139 -0
  119. package/dist/extraction/languages/scala.js.map +1 -0
  120. package/dist/extraction/languages/swift.d.ts +3 -0
  121. package/dist/extraction/languages/swift.d.ts.map +1 -0
  122. package/dist/extraction/languages/swift.js +91 -0
  123. package/dist/extraction/languages/swift.js.map +1 -0
  124. package/dist/extraction/languages/typescript.d.ts +3 -0
  125. package/dist/extraction/languages/typescript.d.ts.map +1 -0
  126. package/dist/extraction/languages/typescript.js +129 -0
  127. package/dist/extraction/languages/typescript.js.map +1 -0
  128. package/dist/extraction/liquid-extractor.d.ts +52 -0
  129. package/dist/extraction/liquid-extractor.d.ts.map +1 -0
  130. package/dist/extraction/liquid-extractor.js +313 -0
  131. package/dist/extraction/liquid-extractor.js.map +1 -0
  132. package/dist/extraction/parse-worker.d.ts +8 -0
  133. package/dist/extraction/parse-worker.d.ts.map +1 -0
  134. package/dist/extraction/parse-worker.js +94 -0
  135. package/dist/extraction/parse-worker.js.map +1 -0
  136. package/dist/extraction/svelte-extractor.d.ts +56 -0
  137. package/dist/extraction/svelte-extractor.d.ts.map +1 -0
  138. package/dist/extraction/svelte-extractor.js +272 -0
  139. package/dist/extraction/svelte-extractor.js.map +1 -0
  140. package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
  141. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
  142. package/dist/extraction/tree-sitter-helpers.js +103 -0
  143. package/dist/extraction/tree-sitter-helpers.js.map +1 -0
  144. package/dist/extraction/tree-sitter-types.d.ts +179 -0
  145. package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
  146. package/dist/extraction/tree-sitter-types.js +10 -0
  147. package/dist/extraction/tree-sitter-types.js.map +1 -0
  148. package/dist/extraction/tree-sitter.d.ts +233 -0
  149. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  150. package/dist/extraction/tree-sitter.js +2393 -0
  151. package/dist/extraction/tree-sitter.js.map +1 -0
  152. package/dist/extraction/vue-extractor.d.ts +36 -0
  153. package/dist/extraction/vue-extractor.d.ts.map +1 -0
  154. package/dist/extraction/vue-extractor.js +163 -0
  155. package/dist/extraction/vue-extractor.js.map +1 -0
  156. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  157. package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
  158. package/dist/graph/index.d.ts +8 -0
  159. package/dist/graph/index.d.ts.map +1 -0
  160. package/dist/graph/index.js +13 -0
  161. package/dist/graph/index.js.map +1 -0
  162. package/dist/graph/queries.d.ts +106 -0
  163. package/dist/graph/queries.d.ts.map +1 -0
  164. package/dist/graph/queries.js +366 -0
  165. package/dist/graph/queries.js.map +1 -0
  166. package/dist/graph/traversal.d.ts +127 -0
  167. package/dist/graph/traversal.d.ts.map +1 -0
  168. package/dist/graph/traversal.js +493 -0
  169. package/dist/graph/traversal.js.map +1 -0
  170. package/dist/index.d.ts +504 -0
  171. package/dist/index.d.ts.map +1 -0
  172. package/dist/index.js +982 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/installer/claude-md-template.d.ts +10 -0
  175. package/dist/installer/claude-md-template.d.ts.map +1 -0
  176. package/dist/installer/claude-md-template.js +46 -0
  177. package/dist/installer/claude-md-template.js.map +1 -0
  178. package/dist/installer/config-writer.d.ts +36 -0
  179. package/dist/installer/config-writer.d.ts.map +1 -0
  180. package/dist/installer/config-writer.js +304 -0
  181. package/dist/installer/config-writer.js.map +1 -0
  182. package/dist/installer/index.d.ts +12 -0
  183. package/dist/installer/index.d.ts.map +1 -0
  184. package/dist/installer/index.js +201 -0
  185. package/dist/installer/index.js.map +1 -0
  186. package/dist/mcp/index.d.ts +82 -0
  187. package/dist/mcp/index.d.ts.map +1 -0
  188. package/dist/mcp/index.js +330 -0
  189. package/dist/mcp/index.js.map +1 -0
  190. package/dist/mcp/server-instructions.d.ts +19 -0
  191. package/dist/mcp/server-instructions.d.ts.map +1 -0
  192. package/dist/mcp/server-instructions.js +59 -0
  193. package/dist/mcp/server-instructions.js.map +1 -0
  194. package/dist/mcp/tools.d.ts +187 -0
  195. package/dist/mcp/tools.d.ts.map +1 -0
  196. package/dist/mcp/tools.js +1250 -0
  197. package/dist/mcp/tools.js.map +1 -0
  198. package/dist/mcp/transport.d.ts +89 -0
  199. package/dist/mcp/transport.d.ts.map +1 -0
  200. package/dist/mcp/transport.js +170 -0
  201. package/dist/mcp/transport.js.map +1 -0
  202. package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
  203. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
  204. package/dist/resolution/frameworks/cargo-workspace.js +225 -0
  205. package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
  206. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  207. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  208. package/dist/resolution/frameworks/csharp.js +213 -0
  209. package/dist/resolution/frameworks/csharp.js.map +1 -0
  210. package/dist/resolution/frameworks/express.d.ts +8 -0
  211. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  212. package/dist/resolution/frameworks/express.js +225 -0
  213. package/dist/resolution/frameworks/express.js.map +1 -0
  214. package/dist/resolution/frameworks/go.d.ts +8 -0
  215. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  216. package/dist/resolution/frameworks/go.js +158 -0
  217. package/dist/resolution/frameworks/go.js.map +1 -0
  218. package/dist/resolution/frameworks/index.d.ts +41 -0
  219. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  220. package/dist/resolution/frameworks/index.js +129 -0
  221. package/dist/resolution/frameworks/index.js.map +1 -0
  222. package/dist/resolution/frameworks/java.d.ts +8 -0
  223. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  224. package/dist/resolution/frameworks/java.js +177 -0
  225. package/dist/resolution/frameworks/java.js.map +1 -0
  226. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  227. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  228. package/dist/resolution/frameworks/laravel.js +248 -0
  229. package/dist/resolution/frameworks/laravel.js.map +1 -0
  230. package/dist/resolution/frameworks/python.d.ts +10 -0
  231. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  232. package/dist/resolution/frameworks/python.js +278 -0
  233. package/dist/resolution/frameworks/python.js.map +1 -0
  234. package/dist/resolution/frameworks/react.d.ts +8 -0
  235. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  236. package/dist/resolution/frameworks/react.js +272 -0
  237. package/dist/resolution/frameworks/react.js.map +1 -0
  238. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  239. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  240. package/dist/resolution/frameworks/ruby.js +198 -0
  241. package/dist/resolution/frameworks/ruby.js.map +1 -0
  242. package/dist/resolution/frameworks/rust.d.ts +8 -0
  243. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  244. package/dist/resolution/frameworks/rust.js +207 -0
  245. package/dist/resolution/frameworks/rust.js.map +1 -0
  246. package/dist/resolution/frameworks/svelte.d.ts +9 -0
  247. package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
  248. package/dist/resolution/frameworks/svelte.js +249 -0
  249. package/dist/resolution/frameworks/svelte.js.map +1 -0
  250. package/dist/resolution/frameworks/swift.d.ts +10 -0
  251. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  252. package/dist/resolution/frameworks/swift.js +376 -0
  253. package/dist/resolution/frameworks/swift.js.map +1 -0
  254. package/dist/resolution/frameworks/vue.d.ts +9 -0
  255. package/dist/resolution/frameworks/vue.d.ts.map +1 -0
  256. package/dist/resolution/frameworks/vue.js +306 -0
  257. package/dist/resolution/frameworks/vue.js.map +1 -0
  258. package/dist/resolution/import-resolver.d.ts +40 -0
  259. package/dist/resolution/import-resolver.d.ts.map +1 -0
  260. package/dist/resolution/import-resolver.js +663 -0
  261. package/dist/resolution/import-resolver.js.map +1 -0
  262. package/dist/resolution/index.d.ts +106 -0
  263. package/dist/resolution/index.d.ts.map +1 -0
  264. package/dist/resolution/index.js +709 -0
  265. package/dist/resolution/index.js.map +1 -0
  266. package/dist/resolution/name-matcher.d.ts +32 -0
  267. package/dist/resolution/name-matcher.d.ts.map +1 -0
  268. package/dist/resolution/name-matcher.js +384 -0
  269. package/dist/resolution/name-matcher.js.map +1 -0
  270. package/dist/resolution/path-aliases.d.ts +68 -0
  271. package/dist/resolution/path-aliases.d.ts.map +1 -0
  272. package/dist/resolution/path-aliases.js +238 -0
  273. package/dist/resolution/path-aliases.js.map +1 -0
  274. package/dist/resolution/strip-comments.d.ts +27 -0
  275. package/dist/resolution/strip-comments.d.ts.map +1 -0
  276. package/dist/resolution/strip-comments.js +441 -0
  277. package/dist/resolution/strip-comments.js.map +1 -0
  278. package/dist/resolution/types.d.ts +172 -0
  279. package/dist/resolution/types.d.ts.map +1 -0
  280. package/dist/resolution/types.js +8 -0
  281. package/dist/resolution/types.js.map +1 -0
  282. package/dist/search/query-parser.d.ts +57 -0
  283. package/dist/search/query-parser.d.ts.map +1 -0
  284. package/dist/search/query-parser.js +177 -0
  285. package/dist/search/query-parser.js.map +1 -0
  286. package/dist/search/query-utils.d.ts +53 -0
  287. package/dist/search/query-utils.d.ts.map +1 -0
  288. package/dist/search/query-utils.js +347 -0
  289. package/dist/search/query-utils.js.map +1 -0
  290. package/dist/sync/index.d.ts +13 -0
  291. package/dist/sync/index.d.ts.map +1 -0
  292. package/dist/sync/index.js +17 -0
  293. package/dist/sync/index.js.map +1 -0
  294. package/dist/sync/watcher.d.ts +81 -0
  295. package/dist/sync/watcher.d.ts.map +1 -0
  296. package/dist/sync/watcher.js +184 -0
  297. package/dist/sync/watcher.js.map +1 -0
  298. package/dist/types.d.ts +438 -0
  299. package/dist/types.d.ts.map +1 -0
  300. package/dist/types.js +263 -0
  301. package/dist/types.js.map +1 -0
  302. package/dist/ui/shimmer-progress.d.ts +11 -0
  303. package/dist/ui/shimmer-progress.d.ts.map +1 -0
  304. package/dist/ui/shimmer-progress.js +90 -0
  305. package/dist/ui/shimmer-progress.js.map +1 -0
  306. package/dist/ui/shimmer-worker.d.ts +2 -0
  307. package/dist/ui/shimmer-worker.d.ts.map +1 -0
  308. package/dist/ui/shimmer-worker.js +112 -0
  309. package/dist/ui/shimmer-worker.js.map +1 -0
  310. package/dist/ui/types.d.ts +17 -0
  311. package/dist/ui/types.d.ts.map +1 -0
  312. package/dist/ui/types.js +3 -0
  313. package/dist/ui/types.js.map +1 -0
  314. package/dist/utils.d.ts +205 -0
  315. package/dist/utils.d.ts.map +1 -0
  316. package/dist/utils.js +549 -0
  317. package/dist/utils.js.map +1 -0
  318. package/dist/vectors/embedder.d.ts +121 -0
  319. package/dist/vectors/embedder.d.ts.map +1 -0
  320. package/dist/vectors/embedder.js +237 -0
  321. package/dist/vectors/embedder.js.map +1 -0
  322. package/dist/vectors/index.d.ts +9 -0
  323. package/dist/vectors/index.d.ts.map +1 -0
  324. package/dist/vectors/index.js +20 -0
  325. package/dist/vectors/index.js.map +1 -0
  326. package/dist/vectors/manager.d.ts +124 -0
  327. package/dist/vectors/manager.d.ts.map +1 -0
  328. package/dist/vectors/manager.js +322 -0
  329. package/dist/vectors/manager.js.map +1 -0
  330. package/dist/vectors/search.d.ts +143 -0
  331. package/dist/vectors/search.d.ts.map +1 -0
  332. package/dist/vectors/search.js +460 -0
  333. package/dist/vectors/search.js.map +1 -0
  334. package/dist/visualizer/public/index.html +1994 -0
  335. package/dist/visualizer/server.d.ts +46 -0
  336. package/dist/visualizer/server.d.ts.map +1 -0
  337. package/dist/visualizer/server.js +491 -0
  338. package/dist/visualizer/server.js.map +1 -0
  339. package/package.json +60 -0
  340. package/scripts/patch-tree-sitter-dart.js +112 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Framework Resolver Registry
3
+ *
4
+ * Manages framework-specific resolvers.
5
+ */
6
+ import { FrameworkResolver, ResolutionContext } from '../types';
7
+ import type { Language } from '../../types';
8
+ /**
9
+ * Get all framework resolvers
10
+ */
11
+ export declare function getAllFrameworkResolvers(): FrameworkResolver[];
12
+ /**
13
+ * Get a resolver by name
14
+ */
15
+ export declare function getFrameworkResolver(name: string): FrameworkResolver | undefined;
16
+ /**
17
+ * Detect which frameworks are used in a project
18
+ */
19
+ export declare function detectFrameworks(context: ResolutionContext): FrameworkResolver[];
20
+ /**
21
+ * Filter a list of detected frameworks down to ones that apply to a given language.
22
+ * Frameworks without an explicit `languages` list are treated as universal.
23
+ */
24
+ export declare function getApplicableFrameworks(detected: FrameworkResolver[], language: Language): FrameworkResolver[];
25
+ /**
26
+ * Register a custom framework resolver
27
+ */
28
+ export declare function registerFrameworkResolver(resolver: FrameworkResolver): void;
29
+ export { laravelResolver, FACADE_MAPPINGS } from './laravel';
30
+ export { expressResolver } from './express';
31
+ export { reactResolver } from './react';
32
+ export { svelteResolver } from './svelte';
33
+ export { vueResolver } from './vue';
34
+ export { djangoResolver, flaskResolver, fastapiResolver } from './python';
35
+ export { railsResolver } from './ruby';
36
+ export { springResolver } from './java';
37
+ export { goResolver } from './go';
38
+ export { rustResolver } from './rust';
39
+ export { aspnetResolver } from './csharp';
40
+ export { swiftUIResolver, uikitResolver, vaporResolver } from './swift';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA6C5C;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,EAAE,CAE9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAQhF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,QAAQ,EAAE,QAAQ,GACjB,iBAAiB,EAAE,CAIrB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAO3E;AAGD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * Framework Resolver Registry
4
+ *
5
+ * Manages framework-specific resolvers.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.vaporResolver = exports.uikitResolver = exports.swiftUIResolver = exports.aspnetResolver = exports.rustResolver = exports.goResolver = exports.springResolver = exports.railsResolver = exports.fastapiResolver = exports.flaskResolver = exports.djangoResolver = exports.vueResolver = exports.svelteResolver = exports.reactResolver = exports.expressResolver = exports.FACADE_MAPPINGS = exports.laravelResolver = void 0;
9
+ exports.getAllFrameworkResolvers = getAllFrameworkResolvers;
10
+ exports.getFrameworkResolver = getFrameworkResolver;
11
+ exports.detectFrameworks = detectFrameworks;
12
+ exports.getApplicableFrameworks = getApplicableFrameworks;
13
+ exports.registerFrameworkResolver = registerFrameworkResolver;
14
+ const laravel_1 = require("./laravel");
15
+ const express_1 = require("./express");
16
+ const react_1 = require("./react");
17
+ const svelte_1 = require("./svelte");
18
+ const vue_1 = require("./vue");
19
+ const python_1 = require("./python");
20
+ const ruby_1 = require("./ruby");
21
+ const java_1 = require("./java");
22
+ const go_1 = require("./go");
23
+ const rust_1 = require("./rust");
24
+ const csharp_1 = require("./csharp");
25
+ const swift_1 = require("./swift");
26
+ /**
27
+ * All registered framework resolvers
28
+ */
29
+ const FRAMEWORK_RESOLVERS = [
30
+ // PHP
31
+ laravel_1.laravelResolver,
32
+ // JavaScript/TypeScript
33
+ express_1.expressResolver,
34
+ react_1.reactResolver,
35
+ svelte_1.svelteResolver,
36
+ vue_1.vueResolver,
37
+ // Python
38
+ python_1.djangoResolver,
39
+ python_1.flaskResolver,
40
+ python_1.fastapiResolver,
41
+ // Ruby
42
+ ruby_1.railsResolver,
43
+ // Java
44
+ java_1.springResolver,
45
+ // Go
46
+ go_1.goResolver,
47
+ // Rust
48
+ rust_1.rustResolver,
49
+ // C#
50
+ csharp_1.aspnetResolver,
51
+ // Swift
52
+ swift_1.swiftUIResolver,
53
+ swift_1.uikitResolver,
54
+ swift_1.vaporResolver,
55
+ ];
56
+ /**
57
+ * Get all framework resolvers
58
+ */
59
+ function getAllFrameworkResolvers() {
60
+ return FRAMEWORK_RESOLVERS;
61
+ }
62
+ /**
63
+ * Get a resolver by name
64
+ */
65
+ function getFrameworkResolver(name) {
66
+ return FRAMEWORK_RESOLVERS.find((r) => r.name === name);
67
+ }
68
+ /**
69
+ * Detect which frameworks are used in a project
70
+ */
71
+ function detectFrameworks(context) {
72
+ return FRAMEWORK_RESOLVERS.filter((resolver) => {
73
+ try {
74
+ return resolver.detect(context);
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ });
80
+ }
81
+ /**
82
+ * Filter a list of detected frameworks down to ones that apply to a given language.
83
+ * Frameworks without an explicit `languages` list are treated as universal.
84
+ */
85
+ function getApplicableFrameworks(detected, language) {
86
+ return detected.filter((fw) => !fw.languages || fw.languages.includes(language));
87
+ }
88
+ /**
89
+ * Register a custom framework resolver
90
+ */
91
+ function registerFrameworkResolver(resolver) {
92
+ // Remove existing resolver with same name
93
+ const index = FRAMEWORK_RESOLVERS.findIndex((r) => r.name === resolver.name);
94
+ if (index !== -1) {
95
+ FRAMEWORK_RESOLVERS.splice(index, 1);
96
+ }
97
+ FRAMEWORK_RESOLVERS.push(resolver);
98
+ }
99
+ // Re-export framework resolvers
100
+ var laravel_2 = require("./laravel");
101
+ Object.defineProperty(exports, "laravelResolver", { enumerable: true, get: function () { return laravel_2.laravelResolver; } });
102
+ Object.defineProperty(exports, "FACADE_MAPPINGS", { enumerable: true, get: function () { return laravel_2.FACADE_MAPPINGS; } });
103
+ var express_2 = require("./express");
104
+ Object.defineProperty(exports, "expressResolver", { enumerable: true, get: function () { return express_2.expressResolver; } });
105
+ var react_2 = require("./react");
106
+ Object.defineProperty(exports, "reactResolver", { enumerable: true, get: function () { return react_2.reactResolver; } });
107
+ var svelte_2 = require("./svelte");
108
+ Object.defineProperty(exports, "svelteResolver", { enumerable: true, get: function () { return svelte_2.svelteResolver; } });
109
+ var vue_2 = require("./vue");
110
+ Object.defineProperty(exports, "vueResolver", { enumerable: true, get: function () { return vue_2.vueResolver; } });
111
+ var python_2 = require("./python");
112
+ Object.defineProperty(exports, "djangoResolver", { enumerable: true, get: function () { return python_2.djangoResolver; } });
113
+ Object.defineProperty(exports, "flaskResolver", { enumerable: true, get: function () { return python_2.flaskResolver; } });
114
+ Object.defineProperty(exports, "fastapiResolver", { enumerable: true, get: function () { return python_2.fastapiResolver; } });
115
+ var ruby_2 = require("./ruby");
116
+ Object.defineProperty(exports, "railsResolver", { enumerable: true, get: function () { return ruby_2.railsResolver; } });
117
+ var java_2 = require("./java");
118
+ Object.defineProperty(exports, "springResolver", { enumerable: true, get: function () { return java_2.springResolver; } });
119
+ var go_2 = require("./go");
120
+ Object.defineProperty(exports, "goResolver", { enumerable: true, get: function () { return go_2.goResolver; } });
121
+ var rust_2 = require("./rust");
122
+ Object.defineProperty(exports, "rustResolver", { enumerable: true, get: function () { return rust_2.rustResolver; } });
123
+ var csharp_2 = require("./csharp");
124
+ Object.defineProperty(exports, "aspnetResolver", { enumerable: true, get: function () { return csharp_2.aspnetResolver; } });
125
+ var swift_2 = require("./swift");
126
+ Object.defineProperty(exports, "swiftUIResolver", { enumerable: true, get: function () { return swift_2.swiftUIResolver; } });
127
+ Object.defineProperty(exports, "uikitResolver", { enumerable: true, get: function () { return swift_2.uikitResolver; } });
128
+ Object.defineProperty(exports, "vaporResolver", { enumerable: true, get: function () { return swift_2.vaporResolver; } });
129
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/resolution/frameworks/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Java Framework Resolver
3
+ *
4
+ * Handles Spring Boot and general Java patterns.
5
+ */
6
+ import { FrameworkResolver } from '../types';
7
+ export declare const springResolver: FrameworkResolver;
8
+ //# sourceMappingURL=java.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/java.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAiD,MAAM,UAAU,CAAC;AAG5F,eAAO,MAAM,cAAc,EAAE,iBA+J5B,CAAC"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ /**
3
+ * Java Framework Resolver
4
+ *
5
+ * Handles Spring Boot and general Java patterns.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.springResolver = void 0;
9
+ const strip_comments_1 = require("../strip-comments");
10
+ exports.springResolver = {
11
+ name: 'spring',
12
+ languages: ['java'],
13
+ detect(context) {
14
+ // Check for pom.xml with Spring
15
+ const pomXml = context.readFile('pom.xml');
16
+ if (pomXml && (pomXml.includes('spring-boot') || pomXml.includes('springframework'))) {
17
+ return true;
18
+ }
19
+ // Check for build.gradle with Spring
20
+ const buildGradle = context.readFile('build.gradle');
21
+ if (buildGradle && (buildGradle.includes('spring-boot') || buildGradle.includes('springframework'))) {
22
+ return true;
23
+ }
24
+ const buildGradleKts = context.readFile('build.gradle.kts');
25
+ if (buildGradleKts && (buildGradleKts.includes('spring-boot') || buildGradleKts.includes('springframework'))) {
26
+ return true;
27
+ }
28
+ // Check for Spring annotations in Java files
29
+ const allFiles = context.getAllFiles();
30
+ for (const file of allFiles) {
31
+ if (file.endsWith('.java')) {
32
+ const content = context.readFile(file);
33
+ if (content && (content.includes('@SpringBootApplication') ||
34
+ content.includes('@RestController') ||
35
+ content.includes('@Service') ||
36
+ content.includes('@Repository'))) {
37
+ return true;
38
+ }
39
+ }
40
+ }
41
+ return false;
42
+ },
43
+ resolve(ref, context) {
44
+ // Pattern 1: Service references (dependency injection)
45
+ if (ref.referenceName.endsWith('Service')) {
46
+ const result = resolveByNameAndKind(ref.referenceName, SERVICE_KINDS, SERVICE_DIRS, context);
47
+ if (result) {
48
+ return {
49
+ original: ref,
50
+ targetNodeId: result,
51
+ confidence: 0.85,
52
+ resolvedBy: 'framework',
53
+ };
54
+ }
55
+ }
56
+ // Pattern 2: Repository references
57
+ if (ref.referenceName.endsWith('Repository')) {
58
+ const result = resolveByNameAndKind(ref.referenceName, SERVICE_KINDS, REPO_DIRS, context);
59
+ if (result) {
60
+ return {
61
+ original: ref,
62
+ targetNodeId: result,
63
+ confidence: 0.85,
64
+ resolvedBy: 'framework',
65
+ };
66
+ }
67
+ }
68
+ // Pattern 3: Controller references
69
+ if (ref.referenceName.endsWith('Controller')) {
70
+ const result = resolveByNameAndKind(ref.referenceName, CLASS_KINDS, CONTROLLER_DIRS, context);
71
+ if (result) {
72
+ return {
73
+ original: ref,
74
+ targetNodeId: result,
75
+ confidence: 0.85,
76
+ resolvedBy: 'framework',
77
+ };
78
+ }
79
+ }
80
+ // Pattern 4: Entity/Model references
81
+ if (/^[A-Z][a-zA-Z]+$/.test(ref.referenceName)) {
82
+ const result = resolveByNameAndKind(ref.referenceName, CLASS_KINDS, ENTITY_DIRS, context);
83
+ if (result) {
84
+ return {
85
+ original: ref,
86
+ targetNodeId: result,
87
+ confidence: 0.7,
88
+ resolvedBy: 'framework',
89
+ };
90
+ }
91
+ }
92
+ // Pattern 5: Component references
93
+ if (ref.referenceName.endsWith('Component') || ref.referenceName.endsWith('Config')) {
94
+ const result = resolveByNameAndKind(ref.referenceName, CLASS_KINDS, COMPONENT_DIRS, context);
95
+ if (result) {
96
+ return {
97
+ original: ref,
98
+ targetNodeId: result,
99
+ confidence: 0.8,
100
+ resolvedBy: 'framework',
101
+ };
102
+ }
103
+ }
104
+ return null;
105
+ },
106
+ extract(filePath, content) {
107
+ if (!filePath.endsWith('.java'))
108
+ return { nodes: [], references: [] };
109
+ const nodes = [];
110
+ const references = [];
111
+ const now = Date.now();
112
+ const safe = (0, strip_comments_1.stripCommentsForRegex)(content, 'java');
113
+ // @GetMapping("/path"), @PostMapping(value = "/path"), @RequestMapping("/path")
114
+ const mappingRegex = /@(GetMapping|PostMapping|PutMapping|PatchMapping|DeleteMapping|RequestMapping)\s*\(\s*(?:value\s*=\s*|path\s*=\s*)?["']([^"']+)["'][^)]*\)/g;
115
+ let match;
116
+ while ((match = mappingRegex.exec(safe)) !== null) {
117
+ const [, mappingName, routePath] = match;
118
+ const line = safe.slice(0, match.index).split('\n').length;
119
+ const method = mappingName === 'RequestMapping' ? 'ANY' : mappingName.replace(/Mapping$/, '').toUpperCase();
120
+ const routeNode = {
121
+ id: `route:${filePath}:${line}:${method}:${routePath}`,
122
+ kind: 'route',
123
+ name: `${method} ${routePath}`,
124
+ qualifiedName: `${filePath}::route:${routePath}`,
125
+ filePath,
126
+ startLine: line,
127
+ endLine: line,
128
+ startColumn: 0,
129
+ endColumn: match[0].length,
130
+ language: 'java',
131
+ updatedAt: now,
132
+ };
133
+ nodes.push(routeNode);
134
+ // Look for the next public/private/protected method after the annotation
135
+ const tail = safe.slice(match.index + match[0].length);
136
+ const methodMatch = tail.match(/\b(?:public|private|protected)\s+[^;{]*?\s+(\w+)\s*\(/);
137
+ if (methodMatch) {
138
+ references.push({
139
+ fromNodeId: routeNode.id,
140
+ referenceName: methodMatch[1],
141
+ referenceKind: 'references',
142
+ line,
143
+ column: 0,
144
+ filePath,
145
+ language: 'java',
146
+ });
147
+ }
148
+ }
149
+ return { nodes, references };
150
+ },
151
+ };
152
+ // Directory patterns
153
+ const SERVICE_DIRS = ['/service/', '/services/'];
154
+ const REPO_DIRS = ['/repository/', '/repositories/'];
155
+ const CONTROLLER_DIRS = ['/controller/', '/controllers/'];
156
+ const ENTITY_DIRS = ['/entity/', '/entities/', '/model/', '/models/', '/domain/'];
157
+ const COMPONENT_DIRS = ['/component/', '/components/', '/config/'];
158
+ const CLASS_KINDS = new Set(['class']);
159
+ const SERVICE_KINDS = new Set(['class', 'interface']);
160
+ /**
161
+ * Resolve a symbol by name using indexed queries instead of scanning all files.
162
+ */
163
+ function resolveByNameAndKind(name, kinds, preferredDirPatterns, context) {
164
+ const candidates = context.getNodesByName(name);
165
+ if (candidates.length === 0)
166
+ return null;
167
+ const kindFiltered = candidates.filter((n) => kinds.has(n.kind));
168
+ if (kindFiltered.length === 0)
169
+ return null;
170
+ // Prefer candidates in framework-conventional directories
171
+ const preferred = kindFiltered.filter((n) => preferredDirPatterns.some((d) => n.filePath.includes(d)));
172
+ if (preferred.length > 0)
173
+ return preferred[0].id;
174
+ // Fall back to any match
175
+ return kindFiltered[0].id;
176
+ }
177
+ //# sourceMappingURL=java.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java.js","sourceRoot":"","sources":["../../../src/resolution/frameworks/java.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Laravel Framework Resolver
3
+ *
4
+ * Handles Laravel-specific patterns for reference resolution.
5
+ */
6
+ import { FrameworkResolver } from '../types';
7
+ /**
8
+ * Laravel facade mappings to underlying classes
9
+ * Exported for potential use in facade resolution
10
+ */
11
+ export declare const FACADE_MAPPINGS: Record<string, string>;
12
+ export declare const laravelResolver: FrameworkResolver;
13
+ //# sourceMappingURL=laravel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"laravel.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/laravel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAiD,MAAM,UAAU,CAAC;AAG5F;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqBlD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,iBA2I7B,CAAC"}
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ /**
3
+ * Laravel Framework Resolver
4
+ *
5
+ * Handles Laravel-specific patterns for reference resolution.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.laravelResolver = exports.FACADE_MAPPINGS = void 0;
9
+ const strip_comments_1 = require("../strip-comments");
10
+ /**
11
+ * Laravel facade mappings to underlying classes
12
+ * Exported for potential use in facade resolution
13
+ */
14
+ exports.FACADE_MAPPINGS = {
15
+ Auth: 'Illuminate\\Auth\\AuthManager',
16
+ Cache: 'Illuminate\\Cache\\CacheManager',
17
+ Config: 'Illuminate\\Config\\Repository',
18
+ DB: 'Illuminate\\Database\\DatabaseManager',
19
+ Event: 'Illuminate\\Events\\Dispatcher',
20
+ File: 'Illuminate\\Filesystem\\Filesystem',
21
+ Gate: 'Illuminate\\Auth\\Access\\Gate',
22
+ Hash: 'Illuminate\\Hashing\\HashManager',
23
+ Log: 'Illuminate\\Log\\LogManager',
24
+ Mail: 'Illuminate\\Mail\\Mailer',
25
+ Queue: 'Illuminate\\Queue\\QueueManager',
26
+ Redis: 'Illuminate\\Redis\\RedisManager',
27
+ Request: 'Illuminate\\Http\\Request',
28
+ Response: 'Illuminate\\Http\\Response',
29
+ Route: 'Illuminate\\Routing\\Router',
30
+ Session: 'Illuminate\\Session\\SessionManager',
31
+ Storage: 'Illuminate\\Filesystem\\FilesystemManager',
32
+ URL: 'Illuminate\\Routing\\UrlGenerator',
33
+ Validator: 'Illuminate\\Validation\\Factory',
34
+ View: 'Illuminate\\View\\Factory',
35
+ };
36
+ exports.laravelResolver = {
37
+ name: 'laravel',
38
+ languages: ['php'],
39
+ detect(context) {
40
+ // Check for artisan file (Laravel signature)
41
+ return context.fileExists('artisan') || context.fileExists('app/Http/Kernel.php');
42
+ },
43
+ resolve(ref, context) {
44
+ // Pattern 1: Model::method() - Eloquent static calls
45
+ const modelMatch = ref.referenceName.match(/^([A-Z][a-zA-Z]+)::(\w+)$/);
46
+ if (modelMatch) {
47
+ const [, className, methodName] = modelMatch;
48
+ const result = resolveModelCall(className, methodName, context);
49
+ if (result) {
50
+ return {
51
+ original: ref,
52
+ targetNodeId: result,
53
+ confidence: 0.85,
54
+ resolvedBy: 'framework',
55
+ };
56
+ }
57
+ }
58
+ // Pattern 2: Facade calls - Auth::user(), Cache::get()
59
+ const facadeMatch = ref.referenceName.match(/^(Auth|Cache|DB|Log|Mail|Queue|Session|Storage|Validator|Route|Request|Response)::(\w+)$/);
60
+ if (facadeMatch) {
61
+ // Facades typically resolve to external Laravel code
62
+ // Mark as external but note the facade
63
+ return null; // External, can't resolve to local node
64
+ }
65
+ // Pattern 3: Helper function calls - route(), view(), config()
66
+ if (['route', 'view', 'config', 'env', 'app', 'abort', 'redirect', 'response', 'request', 'session', 'url', 'asset', 'mix'].includes(ref.referenceName)) {
67
+ // These are Laravel helpers - external
68
+ return null;
69
+ }
70
+ // Pattern 4: Controller method references
71
+ const controllerMatch = ref.referenceName.match(/^([A-Z][a-zA-Z]+Controller)@(\w+)$/);
72
+ if (controllerMatch) {
73
+ const [, controller, method] = controllerMatch;
74
+ const result = resolveControllerMethod(controller, method, context);
75
+ if (result) {
76
+ return {
77
+ original: ref,
78
+ targetNodeId: result,
79
+ confidence: 0.9,
80
+ resolvedBy: 'framework',
81
+ };
82
+ }
83
+ }
84
+ return null;
85
+ },
86
+ extract(filePath, content) {
87
+ if (!filePath.endsWith('.php'))
88
+ return { nodes: [], references: [] };
89
+ const nodes = [];
90
+ const references = [];
91
+ const now = Date.now();
92
+ const safe = (0, strip_comments_1.stripCommentsForRegex)(content, 'php');
93
+ // Route::METHOD('/path', handler-expr)
94
+ // handler-expr can be: [Class::class, 'method'] | 'Controller@method' | Closure | Class::class
95
+ const routeRegex = /Route::(get|post|put|patch|delete|options|any)\s*\(\s*['"]([^'"]+)['"]\s*,\s*([^)]+)\)/g;
96
+ let match;
97
+ while ((match = routeRegex.exec(safe)) !== null) {
98
+ const [, method, routePath, handlerExpr] = match;
99
+ const line = safe.slice(0, match.index).split('\n').length;
100
+ const upper = method.toUpperCase();
101
+ const routeNode = {
102
+ id: `route:${filePath}:${line}:${upper}:${routePath}`,
103
+ kind: 'route',
104
+ name: `${upper} ${routePath}`,
105
+ qualifiedName: `${filePath}::route:${routePath}`,
106
+ filePath,
107
+ startLine: line,
108
+ endLine: line,
109
+ startColumn: 0,
110
+ endColumn: match[0].length,
111
+ language: 'php',
112
+ updatedAt: now,
113
+ };
114
+ nodes.push(routeNode);
115
+ const handlerName = extractLaravelHandler(handlerExpr);
116
+ if (handlerName) {
117
+ references.push({
118
+ fromNodeId: routeNode.id,
119
+ referenceName: handlerName,
120
+ referenceKind: 'references',
121
+ line,
122
+ column: 0,
123
+ filePath,
124
+ language: 'php',
125
+ });
126
+ }
127
+ }
128
+ // Route::resource('name', Controller::class) / Route::apiResource('name', Controller::class)
129
+ const resourceRegex = /Route::(resource|apiResource)\s*\(\s*['"]([^'"]+)['"]\s*(?:,\s*([^)]+))?\)/g;
130
+ while ((match = resourceRegex.exec(safe)) !== null) {
131
+ const [, _fn, resourceName, handlerExpr] = match;
132
+ const line = safe.slice(0, match.index).split('\n').length;
133
+ const routeNode = {
134
+ id: `route:${filePath}:${line}:RESOURCE:${resourceName}`,
135
+ kind: 'route',
136
+ name: `resource:${resourceName}`,
137
+ qualifiedName: `${filePath}::route:${resourceName}`,
138
+ filePath,
139
+ startLine: line,
140
+ endLine: line,
141
+ startColumn: 0,
142
+ endColumn: match[0].length,
143
+ language: 'php',
144
+ updatedAt: now,
145
+ };
146
+ nodes.push(routeNode);
147
+ if (handlerExpr) {
148
+ const controllerName = extractLaravelHandler(handlerExpr);
149
+ if (controllerName) {
150
+ references.push({
151
+ fromNodeId: routeNode.id,
152
+ referenceName: controllerName,
153
+ referenceKind: 'imports',
154
+ line,
155
+ column: 0,
156
+ filePath,
157
+ language: 'php',
158
+ });
159
+ }
160
+ }
161
+ }
162
+ return { nodes, references };
163
+ },
164
+ };
165
+ /**
166
+ * Parse a Laravel route handler expression and return the symbol to link.
167
+ * - `[Class::class, 'method']` -> `method`
168
+ * - `'Controller@method'` -> `method`
169
+ * - `Class::class` -> `Class`
170
+ * - anything else (closure etc) -> null
171
+ */
172
+ function extractLaravelHandler(expr) {
173
+ const trimmed = expr.trim();
174
+ // [Class::class, 'method'] — grab the string literal
175
+ const tupleMatch = trimmed.match(/^\[\s*[^,]+,\s*['"]([^'"]+)['"]\s*\]/);
176
+ if (tupleMatch)
177
+ return tupleMatch[1];
178
+ // 'Controller@method'
179
+ const atMatch = trimmed.match(/^['"]([^'"@]+)@([^'"]+)['"]$/);
180
+ if (atMatch)
181
+ return atMatch[2];
182
+ // Controller::class
183
+ const classMatch = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)::class/);
184
+ if (classMatch)
185
+ return classMatch[1];
186
+ return null;
187
+ }
188
+ /**
189
+ * Resolve a Model::method() call
190
+ */
191
+ function resolveModelCall(className, methodName, context) {
192
+ // Try app/Models/ first (Laravel 8+)
193
+ let modelPath = `app/Models/${className}.php`;
194
+ if (context.fileExists(modelPath)) {
195
+ const nodes = context.getNodesInFile(modelPath);
196
+ // Look for the method in this class
197
+ const methodNode = nodes.find((n) => n.kind === 'method' && n.name === methodName);
198
+ if (methodNode) {
199
+ return methodNode.id;
200
+ }
201
+ // Return the class itself if method not found
202
+ const classNode = nodes.find((n) => n.kind === 'class' && n.name === className);
203
+ if (classNode) {
204
+ return classNode.id;
205
+ }
206
+ }
207
+ // Try app/ (Laravel 7 and below)
208
+ modelPath = `app/${className}.php`;
209
+ if (context.fileExists(modelPath)) {
210
+ const nodes = context.getNodesInFile(modelPath);
211
+ const methodNode = nodes.find((n) => n.kind === 'method' && n.name === methodName);
212
+ if (methodNode) {
213
+ return methodNode.id;
214
+ }
215
+ const classNode = nodes.find((n) => n.kind === 'class' && n.name === className);
216
+ if (classNode) {
217
+ return classNode.id;
218
+ }
219
+ }
220
+ return null;
221
+ }
222
+ /**
223
+ * Resolve a Controller@method reference
224
+ */
225
+ function resolveControllerMethod(controller, method, context) {
226
+ // Try app/Http/Controllers/
227
+ const controllerPath = `app/Http/Controllers/${controller}.php`;
228
+ if (context.fileExists(controllerPath)) {
229
+ const nodes = context.getNodesInFile(controllerPath);
230
+ const methodNode = nodes.find((n) => n.kind === 'method' && n.name === method);
231
+ if (methodNode) {
232
+ return methodNode.id;
233
+ }
234
+ }
235
+ // Try name-based lookup for namespaced controllers
236
+ const controllerCandidates = context.getNodesByName(controller);
237
+ for (const ctrl of controllerCandidates) {
238
+ if (ctrl.kind === 'class' && ctrl.filePath.includes('Controllers')) {
239
+ const nodesInFile = context.getNodesInFile(ctrl.filePath);
240
+ const methodNode = nodesInFile.find((n) => n.kind === 'method' && n.name === method);
241
+ if (methodNode) {
242
+ return methodNode.id;
243
+ }
244
+ }
245
+ }
246
+ return null;
247
+ }
248
+ //# sourceMappingURL=laravel.js.map