codegraph-java 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (866) hide show
  1. package/README.md +131 -0
  2. package/dist/base-graph/index.d.ts +57 -0
  3. package/dist/base-graph/index.d.ts.map +1 -0
  4. package/dist/base-graph/index.js +175 -0
  5. package/dist/base-graph/index.js.map +1 -0
  6. package/dist/bin/codegraph.d.ts +28 -0
  7. package/dist/bin/codegraph.d.ts.map +1 -0
  8. package/dist/bin/codegraph.js +2615 -0
  9. package/dist/bin/codegraph.js.map +1 -0
  10. package/dist/bin/command-supervision.d.ts +49 -0
  11. package/dist/bin/command-supervision.d.ts.map +1 -0
  12. package/dist/bin/command-supervision.js +95 -0
  13. package/dist/bin/command-supervision.js.map +1 -0
  14. package/dist/bin/fatal-handler.d.ts +20 -0
  15. package/dist/bin/fatal-handler.d.ts.map +1 -0
  16. package/dist/bin/fatal-handler.js +118 -0
  17. package/dist/bin/fatal-handler.js.map +1 -0
  18. package/dist/bin/node-version-check.d.ts +45 -0
  19. package/dist/bin/node-version-check.d.ts.map +1 -0
  20. package/dist/bin/node-version-check.js +98 -0
  21. package/dist/bin/node-version-check.js.map +1 -0
  22. package/dist/bin/uninstall.d.ts +14 -0
  23. package/dist/bin/uninstall.d.ts.map +1 -0
  24. package/dist/bin/uninstall.js +36 -0
  25. package/dist/bin/uninstall.js.map +1 -0
  26. package/dist/context/formatter.d.ts +36 -0
  27. package/dist/context/formatter.d.ts.map +1 -0
  28. package/dist/context/formatter.js +269 -0
  29. package/dist/context/formatter.js.map +1 -0
  30. package/dist/context/index.d.ts +131 -0
  31. package/dist/context/index.d.ts.map +1 -0
  32. package/dist/context/index.js +1378 -0
  33. package/dist/context/index.js.map +1 -0
  34. package/dist/context/markers.d.ts +19 -0
  35. package/dist/context/markers.d.ts.map +1 -0
  36. package/dist/context/markers.js +22 -0
  37. package/dist/context/markers.js.map +1 -0
  38. package/dist/db/index.d.ts +380 -0
  39. package/dist/db/index.d.ts.map +1 -0
  40. package/dist/db/index.js +854 -0
  41. package/dist/db/index.js.map +1 -0
  42. package/dist/db/migrations.d.ts +44 -0
  43. package/dist/db/migrations.d.ts.map +1 -0
  44. package/dist/db/migrations.js +255 -0
  45. package/dist/db/migrations.js.map +1 -0
  46. package/dist/db/queries.d.ts +1060 -0
  47. package/dist/db/queries.d.ts.map +1 -0
  48. package/dist/db/queries.js +3191 -0
  49. package/dist/db/queries.js.map +1 -0
  50. package/dist/db/schema.sql +209 -0
  51. package/dist/db/sqlite-adapter.d.ts +55 -0
  52. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  53. package/dist/db/sqlite-adapter.js +135 -0
  54. package/dist/db/sqlite-adapter.js.map +1 -0
  55. package/dist/db/wal-valve.d.ts +119 -0
  56. package/dist/db/wal-valve.d.ts.map +1 -0
  57. package/dist/db/wal-valve.js +290 -0
  58. package/dist/db/wal-valve.js.map +1 -0
  59. package/dist/directory.d.ts +213 -0
  60. package/dist/directory.d.ts.map +1 -0
  61. package/dist/directory.js +781 -0
  62. package/dist/directory.js.map +1 -0
  63. package/dist/errors.d.ts +150 -0
  64. package/dist/errors.d.ts.map +1 -0
  65. package/dist/errors.js +234 -0
  66. package/dist/errors.js.map +1 -0
  67. package/dist/extraction/extraction-version.d.ts +25 -0
  68. package/dist/extraction/extraction-version.d.ts.map +1 -0
  69. package/dist/extraction/extraction-version.js +28 -0
  70. package/dist/extraction/extraction-version.js.map +1 -0
  71. package/dist/extraction/function-ref.d.ts +118 -0
  72. package/dist/extraction/function-ref.d.ts.map +1 -0
  73. package/dist/extraction/function-ref.js +746 -0
  74. package/dist/extraction/function-ref.js.map +1 -0
  75. package/dist/extraction/generated-detection.d.ts +66 -0
  76. package/dist/extraction/generated-detection.d.ts.map +1 -0
  77. package/dist/extraction/generated-detection.js +248 -0
  78. package/dist/extraction/generated-detection.js.map +1 -0
  79. package/dist/extraction/grammars.d.ts +148 -0
  80. package/dist/extraction/grammars.d.ts.map +1 -0
  81. package/dist/extraction/grammars.js +558 -0
  82. package/dist/extraction/grammars.js.map +1 -0
  83. package/dist/extraction/index.d.ts +367 -0
  84. package/dist/extraction/index.d.ts.map +1 -0
  85. package/dist/extraction/index.js +2833 -0
  86. package/dist/extraction/index.js.map +1 -0
  87. package/dist/extraction/kernel/decode.d.ts +9 -0
  88. package/dist/extraction/kernel/decode.d.ts.map +1 -0
  89. package/dist/extraction/kernel/decode.js +162 -0
  90. package/dist/extraction/kernel/decode.js.map +1 -0
  91. package/dist/extraction/kernel/index.d.ts +64 -0
  92. package/dist/extraction/kernel/index.d.ts.map +1 -0
  93. package/dist/extraction/kernel/index.js +204 -0
  94. package/dist/extraction/kernel/index.js.map +1 -0
  95. package/dist/extraction/kernel/layout.d.ts +101 -0
  96. package/dist/extraction/kernel/layout.d.ts.map +1 -0
  97. package/dist/extraction/kernel/layout.js +104 -0
  98. package/dist/extraction/kernel/layout.js.map +1 -0
  99. package/dist/extraction/kernel/loader.d.ts +103 -0
  100. package/dist/extraction/kernel/loader.d.ts.map +1 -0
  101. package/dist/extraction/kernel/loader.js +146 -0
  102. package/dist/extraction/kernel/loader.js.map +1 -0
  103. package/dist/extraction/languages/c-cpp.d.ts +124 -0
  104. package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
  105. package/dist/extraction/languages/c-cpp.js +1689 -0
  106. package/dist/extraction/languages/c-cpp.js.map +1 -0
  107. package/dist/extraction/languages/index.d.ts +11 -0
  108. package/dist/extraction/languages/index.d.ts.map +1 -0
  109. package/dist/extraction/languages/index.js +15 -0
  110. package/dist/extraction/languages/index.js.map +1 -0
  111. package/dist/extraction/languages/java.d.ts +3 -0
  112. package/dist/extraction/languages/java.d.ts.map +1 -0
  113. package/dist/extraction/languages/java.js +315 -0
  114. package/dist/extraction/languages/java.js.map +1 -0
  115. package/dist/extraction/languages/rust.d.ts +23 -0
  116. package/dist/extraction/languages/rust.d.ts.map +1 -0
  117. package/dist/extraction/languages/rust.js +169 -0
  118. package/dist/extraction/languages/rust.js.map +1 -0
  119. package/dist/extraction/parse-pool.d.ts +167 -0
  120. package/dist/extraction/parse-pool.d.ts.map +1 -0
  121. package/dist/extraction/parse-pool.js +421 -0
  122. package/dist/extraction/parse-pool.js.map +1 -0
  123. package/dist/extraction/parse-worker.d.ts +8 -0
  124. package/dist/extraction/parse-worker.d.ts.map +1 -0
  125. package/dist/extraction/parse-worker.js +138 -0
  126. package/dist/extraction/parse-worker.js.map +1 -0
  127. package/dist/extraction/store-worker.d.ts +24 -0
  128. package/dist/extraction/store-worker.d.ts.map +1 -0
  129. package/dist/extraction/store-worker.js +139 -0
  130. package/dist/extraction/store-worker.js.map +1 -0
  131. package/dist/extraction/store-writer.d.ts +63 -0
  132. package/dist/extraction/store-writer.d.ts.map +1 -0
  133. package/dist/extraction/store-writer.js +174 -0
  134. package/dist/extraction/store-writer.js.map +1 -0
  135. package/dist/extraction/syntax-tokens.d.ts +103 -0
  136. package/dist/extraction/syntax-tokens.d.ts.map +1 -0
  137. package/dist/extraction/syntax-tokens.js +381 -0
  138. package/dist/extraction/syntax-tokens.js.map +1 -0
  139. package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
  140. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
  141. package/dist/extraction/tree-sitter-helpers.js +153 -0
  142. package/dist/extraction/tree-sitter-helpers.js.map +1 -0
  143. package/dist/extraction/tree-sitter-types.d.ts +260 -0
  144. package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
  145. package/dist/extraction/tree-sitter-types.js +10 -0
  146. package/dist/extraction/tree-sitter-types.js.map +1 -0
  147. package/dist/extraction/tree-sitter.d.ts +745 -0
  148. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  149. package/dist/extraction/tree-sitter.js +6725 -0
  150. package/dist/extraction/tree-sitter.js.map +1 -0
  151. package/dist/extraction/wasm/tree-sitter-java.wasm +0 -0
  152. package/dist/extraction/wasm-runtime-flags.d.ts +53 -0
  153. package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -0
  154. package/dist/extraction/wasm-runtime-flags.js +130 -0
  155. package/dist/extraction/wasm-runtime-flags.js.map +1 -0
  156. package/dist/graph/branch-guards.d.ts +248 -0
  157. package/dist/graph/branch-guards.d.ts.map +1 -0
  158. package/dist/graph/branch-guards.js +2231 -0
  159. package/dist/graph/branch-guards.js.map +1 -0
  160. package/dist/graph/dead-code.d.ts +251 -0
  161. package/dist/graph/dead-code.d.ts.map +1 -0
  162. package/dist/graph/dead-code.js +756 -0
  163. package/dist/graph/dead-code.js.map +1 -0
  164. package/dist/graph/dynamic-boundary-report.d.ts +121 -0
  165. package/dist/graph/dynamic-boundary-report.d.ts.map +1 -0
  166. package/dist/graph/dynamic-boundary-report.js +283 -0
  167. package/dist/graph/dynamic-boundary-report.js.map +1 -0
  168. package/dist/graph/index.d.ts +12 -0
  169. package/dist/graph/index.d.ts.map +1 -0
  170. package/dist/graph/index.js +28 -0
  171. package/dist/graph/index.js.map +1 -0
  172. package/dist/graph/named-symbol-flow.d.ts +153 -0
  173. package/dist/graph/named-symbol-flow.d.ts.map +1 -0
  174. package/dist/graph/named-symbol-flow.js +609 -0
  175. package/dist/graph/named-symbol-flow.js.map +1 -0
  176. package/dist/graph/queries.d.ts +106 -0
  177. package/dist/graph/queries.d.ts.map +1 -0
  178. package/dist/graph/queries.js +341 -0
  179. package/dist/graph/queries.js.map +1 -0
  180. package/dist/graph/traversal.d.ts +127 -0
  181. package/dist/graph/traversal.d.ts.map +1 -0
  182. package/dist/graph/traversal.js +599 -0
  183. package/dist/graph/traversal.js.map +1 -0
  184. package/dist/graph/type-hierarchy.d.ts +155 -0
  185. package/dist/graph/type-hierarchy.d.ts.map +1 -0
  186. package/dist/graph/type-hierarchy.js +382 -0
  187. package/dist/graph/type-hierarchy.js.map +1 -0
  188. package/dist/index.d.ts +886 -0
  189. package/dist/index.d.ts.map +1 -0
  190. package/dist/index.js +2019 -0
  191. package/dist/index.js.map +1 -0
  192. package/dist/installer/beta-signup.d.ts +54 -0
  193. package/dist/installer/beta-signup.d.ts.map +1 -0
  194. package/dist/installer/beta-signup.js +178 -0
  195. package/dist/installer/beta-signup.js.map +1 -0
  196. package/dist/installer/config-writer.d.ts +28 -0
  197. package/dist/installer/config-writer.d.ts.map +1 -0
  198. package/dist/installer/config-writer.js +91 -0
  199. package/dist/installer/config-writer.js.map +1 -0
  200. package/dist/installer/index.d.ts +143 -0
  201. package/dist/installer/index.d.ts.map +1 -0
  202. package/dist/installer/index.js +632 -0
  203. package/dist/installer/index.js.map +1 -0
  204. package/dist/installer/instructions-template.d.ts +41 -0
  205. package/dist/installer/instructions-template.d.ts.map +1 -0
  206. package/dist/installer/instructions-template.js +53 -0
  207. package/dist/installer/instructions-template.js.map +1 -0
  208. package/dist/installer/targets/antigravity.d.ts +57 -0
  209. package/dist/installer/targets/antigravity.d.ts.map +1 -0
  210. package/dist/installer/targets/antigravity.js +308 -0
  211. package/dist/installer/targets/antigravity.js.map +1 -0
  212. package/dist/installer/targets/claude.d.ts +62 -0
  213. package/dist/installer/targets/claude.d.ts.map +1 -0
  214. package/dist/installer/targets/claude.js +486 -0
  215. package/dist/installer/targets/claude.js.map +1 -0
  216. package/dist/installer/targets/codex.d.ts +32 -0
  217. package/dist/installer/targets/codex.d.ts.map +1 -0
  218. package/dist/installer/targets/codex.js +202 -0
  219. package/dist/installer/targets/codex.js.map +1 -0
  220. package/dist/installer/targets/copilot-cli.d.ts +32 -0
  221. package/dist/installer/targets/copilot-cli.d.ts.map +1 -0
  222. package/dist/installer/targets/copilot-cli.js +209 -0
  223. package/dist/installer/targets/copilot-cli.js.map +1 -0
  224. package/dist/installer/targets/copilot-jetbrains.d.ts +42 -0
  225. package/dist/installer/targets/copilot-jetbrains.d.ts.map +1 -0
  226. package/dist/installer/targets/copilot-jetbrains.js +238 -0
  227. package/dist/installer/targets/copilot-jetbrains.js.map +1 -0
  228. package/dist/installer/targets/copilot-vscode.d.ts +47 -0
  229. package/dist/installer/targets/copilot-vscode.d.ts.map +1 -0
  230. package/dist/installer/targets/copilot-vscode.js +219 -0
  231. package/dist/installer/targets/copilot-vscode.js.map +1 -0
  232. package/dist/installer/targets/cursor.d.ts +35 -0
  233. package/dist/installer/targets/cursor.d.ts.map +1 -0
  234. package/dist/installer/targets/cursor.js +254 -0
  235. package/dist/installer/targets/cursor.js.map +1 -0
  236. package/dist/installer/targets/gemini.d.ts +26 -0
  237. package/dist/installer/targets/gemini.d.ts.map +1 -0
  238. package/dist/installer/targets/gemini.js +165 -0
  239. package/dist/installer/targets/gemini.js.map +1 -0
  240. package/dist/installer/targets/hermes.d.ts +18 -0
  241. package/dist/installer/targets/hermes.d.ts.map +1 -0
  242. package/dist/installer/targets/hermes.js +359 -0
  243. package/dist/installer/targets/hermes.js.map +1 -0
  244. package/dist/installer/targets/kiro.d.ts +27 -0
  245. package/dist/installer/targets/kiro.d.ts.map +1 -0
  246. package/dist/installer/targets/kiro.js +178 -0
  247. package/dist/installer/targets/kiro.js.map +1 -0
  248. package/dist/installer/targets/opencode.d.ts +38 -0
  249. package/dist/installer/targets/opencode.d.ts.map +1 -0
  250. package/dist/installer/targets/opencode.js +288 -0
  251. package/dist/installer/targets/opencode.js.map +1 -0
  252. package/dist/installer/targets/registry.d.ts +35 -0
  253. package/dist/installer/targets/registry.d.ts.map +1 -0
  254. package/dist/installer/targets/registry.js +101 -0
  255. package/dist/installer/targets/registry.js.map +1 -0
  256. package/dist/installer/targets/shared.d.ts +101 -0
  257. package/dist/installer/targets/shared.d.ts.map +1 -0
  258. package/dist/installer/targets/shared.js +264 -0
  259. package/dist/installer/targets/shared.js.map +1 -0
  260. package/dist/installer/targets/toml.d.ts +53 -0
  261. package/dist/installer/targets/toml.d.ts.map +1 -0
  262. package/dist/installer/targets/toml.js +226 -0
  263. package/dist/installer/targets/toml.js.map +1 -0
  264. package/dist/installer/targets/trae.d.ts +30 -0
  265. package/dist/installer/targets/trae.d.ts.map +1 -0
  266. package/dist/installer/targets/trae.js +164 -0
  267. package/dist/installer/targets/trae.js.map +1 -0
  268. package/dist/installer/targets/types.d.ts +108 -0
  269. package/dist/installer/targets/types.d.ts.map +1 -0
  270. package/dist/installer/targets/types.js +16 -0
  271. package/dist/installer/targets/types.js.map +1 -0
  272. package/dist/installer/targets/workbuddy.d.ts +29 -0
  273. package/dist/installer/targets/workbuddy.d.ts.map +1 -0
  274. package/dist/installer/targets/workbuddy.js +163 -0
  275. package/dist/installer/targets/workbuddy.js.map +1 -0
  276. package/dist/mcp/daemon-manager.d.ts +42 -0
  277. package/dist/mcp/daemon-manager.d.ts.map +1 -0
  278. package/dist/mcp/daemon-manager.js +129 -0
  279. package/dist/mcp/daemon-manager.js.map +1 -0
  280. package/dist/mcp/daemon-paths.d.ts +79 -0
  281. package/dist/mcp/daemon-paths.d.ts.map +1 -0
  282. package/dist/mcp/daemon-paths.js +219 -0
  283. package/dist/mcp/daemon-paths.js.map +1 -0
  284. package/dist/mcp/daemon-registry.d.ts +57 -0
  285. package/dist/mcp/daemon-registry.d.ts.map +1 -0
  286. package/dist/mcp/daemon-registry.js +281 -0
  287. package/dist/mcp/daemon-registry.js.map +1 -0
  288. package/dist/mcp/daemon.d.ts +293 -0
  289. package/dist/mcp/daemon.d.ts.map +1 -0
  290. package/dist/mcp/daemon.js +864 -0
  291. package/dist/mcp/daemon.js.map +1 -0
  292. package/dist/mcp/dynamic-boundaries.d.ts +41 -0
  293. package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
  294. package/dist/mcp/dynamic-boundaries.js +360 -0
  295. package/dist/mcp/dynamic-boundaries.js.map +1 -0
  296. package/dist/mcp/early-ppid.d.ts +26 -0
  297. package/dist/mcp/early-ppid.d.ts.map +1 -0
  298. package/dist/mcp/early-ppid.js +29 -0
  299. package/dist/mcp/early-ppid.js.map +1 -0
  300. package/dist/mcp/engine.d.ts +125 -0
  301. package/dist/mcp/engine.d.ts.map +1 -0
  302. package/dist/mcp/engine.js +392 -0
  303. package/dist/mcp/engine.js.map +1 -0
  304. package/dist/mcp/explore-dedup.d.ts +137 -0
  305. package/dist/mcp/explore-dedup.d.ts.map +1 -0
  306. package/dist/mcp/explore-dedup.js +236 -0
  307. package/dist/mcp/explore-dedup.js.map +1 -0
  308. package/dist/mcp/explore-diagnostics.d.ts +289 -0
  309. package/dist/mcp/explore-diagnostics.d.ts.map +1 -0
  310. package/dist/mcp/explore-diagnostics.js +558 -0
  311. package/dist/mcp/explore-diagnostics.js.map +1 -0
  312. package/dist/mcp/explore-session-state.d.ts +217 -0
  313. package/dist/mcp/explore-session-state.d.ts.map +1 -0
  314. package/dist/mcp/explore-session-state.js +322 -0
  315. package/dist/mcp/explore-session-state.js.map +1 -0
  316. package/dist/mcp/index.d.ts +137 -0
  317. package/dist/mcp/index.d.ts.map +1 -0
  318. package/dist/mcp/index.js +567 -0
  319. package/dist/mcp/index.js.map +1 -0
  320. package/dist/mcp/liveness-watchdog.d.ts +35 -0
  321. package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
  322. package/dist/mcp/liveness-watchdog.js +269 -0
  323. package/dist/mcp/liveness-watchdog.js.map +1 -0
  324. package/dist/mcp/ppid-watchdog.d.ts +62 -0
  325. package/dist/mcp/ppid-watchdog.d.ts.map +1 -0
  326. package/dist/mcp/ppid-watchdog.js +64 -0
  327. package/dist/mcp/ppid-watchdog.js.map +1 -0
  328. package/dist/mcp/proxy.d.ts +87 -0
  329. package/dist/mcp/proxy.d.ts.map +1 -0
  330. package/dist/mcp/proxy.js +672 -0
  331. package/dist/mcp/proxy.js.map +1 -0
  332. package/dist/mcp/query-pool.d.ts +108 -0
  333. package/dist/mcp/query-pool.d.ts.map +1 -0
  334. package/dist/mcp/query-pool.js +315 -0
  335. package/dist/mcp/query-pool.js.map +1 -0
  336. package/dist/mcp/query-worker.d.ts +24 -0
  337. package/dist/mcp/query-worker.d.ts.map +1 -0
  338. package/dist/mcp/query-worker.js +87 -0
  339. package/dist/mcp/query-worker.js.map +1 -0
  340. package/dist/mcp/server-instructions.d.ts +34 -0
  341. package/dist/mcp/server-instructions.d.ts.map +1 -0
  342. package/dist/mcp/server-instructions.js +111 -0
  343. package/dist/mcp/server-instructions.js.map +1 -0
  344. package/dist/mcp/session.d.ts +109 -0
  345. package/dist/mcp/session.d.ts.map +1 -0
  346. package/dist/mcp/session.js +380 -0
  347. package/dist/mcp/session.js.map +1 -0
  348. package/dist/mcp/startup-handshake.d.ts +44 -0
  349. package/dist/mcp/startup-handshake.d.ts.map +1 -0
  350. package/dist/mcp/startup-handshake.js +73 -0
  351. package/dist/mcp/startup-handshake.js.map +1 -0
  352. package/dist/mcp/stdin-teardown.d.ts +27 -0
  353. package/dist/mcp/stdin-teardown.d.ts.map +1 -0
  354. package/dist/mcp/stdin-teardown.js +49 -0
  355. package/dist/mcp/stdin-teardown.js.map +1 -0
  356. package/dist/mcp/tools.d.ts +877 -0
  357. package/dist/mcp/tools.d.ts.map +1 -0
  358. package/dist/mcp/tools.js +6371 -0
  359. package/dist/mcp/tools.js.map +1 -0
  360. package/dist/mcp/transport.d.ts +188 -0
  361. package/dist/mcp/transport.d.ts.map +1 -0
  362. package/dist/mcp/transport.js +377 -0
  363. package/dist/mcp/transport.js.map +1 -0
  364. package/dist/mcp/version.d.ts +19 -0
  365. package/dist/mcp/version.d.ts.map +1 -0
  366. package/dist/mcp/version.js +71 -0
  367. package/dist/mcp/version.js.map +1 -0
  368. package/dist/project-config.d.ts +158 -0
  369. package/dist/project-config.d.ts.map +1 -0
  370. package/dist/project-config.js +489 -0
  371. package/dist/project-config.js.map +1 -0
  372. package/dist/resolution/c-fnptr-synthesizer.d.ts +6 -0
  373. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
  374. package/dist/resolution/c-fnptr-synthesizer.js +1506 -0
  375. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
  376. package/dist/resolution/callback-synthesizer.d.ts +59 -0
  377. package/dist/resolution/callback-synthesizer.d.ts.map +1 -0
  378. package/dist/resolution/callback-synthesizer.js +4066 -0
  379. package/dist/resolution/callback-synthesizer.js.map +1 -0
  380. package/dist/resolution/cooperative-yield.d.ts +40 -0
  381. package/dist/resolution/cooperative-yield.d.ts.map +1 -0
  382. package/dist/resolution/cooperative-yield.js +44 -0
  383. package/dist/resolution/cooperative-yield.js.map +1 -0
  384. package/dist/resolution/expo-router-synthesizer.d.ts +32 -0
  385. package/dist/resolution/expo-router-synthesizer.d.ts.map +1 -0
  386. package/dist/resolution/expo-router-synthesizer.js +189 -0
  387. package/dist/resolution/expo-router-synthesizer.js.map +1 -0
  388. package/dist/resolution/frameworks/astro.d.ts +9 -0
  389. package/dist/resolution/frameworks/astro.d.ts.map +1 -0
  390. package/dist/resolution/frameworks/astro.js +169 -0
  391. package/dist/resolution/frameworks/astro.js.map +1 -0
  392. package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
  393. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
  394. package/dist/resolution/frameworks/cargo-workspace.js +225 -0
  395. package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
  396. package/dist/resolution/frameworks/cics.d.ts +20 -0
  397. package/dist/resolution/frameworks/cics.d.ts.map +1 -0
  398. package/dist/resolution/frameworks/cics.js +90 -0
  399. package/dist/resolution/frameworks/cics.js.map +1 -0
  400. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  401. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  402. package/dist/resolution/frameworks/csharp.js +335 -0
  403. package/dist/resolution/frameworks/csharp.js.map +1 -0
  404. package/dist/resolution/frameworks/drupal.d.ts +51 -0
  405. package/dist/resolution/frameworks/drupal.d.ts.map +1 -0
  406. package/dist/resolution/frameworks/drupal.js +367 -0
  407. package/dist/resolution/frameworks/drupal.js.map +1 -0
  408. package/dist/resolution/frameworks/expo-modules.d.ts +3 -0
  409. package/dist/resolution/frameworks/expo-modules.d.ts.map +1 -0
  410. package/dist/resolution/frameworks/expo-modules.js +148 -0
  411. package/dist/resolution/frameworks/expo-modules.js.map +1 -0
  412. package/dist/resolution/frameworks/expo-router.d.ts +189 -0
  413. package/dist/resolution/frameworks/expo-router.d.ts.map +1 -0
  414. package/dist/resolution/frameworks/expo-router.js +785 -0
  415. package/dist/resolution/frameworks/expo-router.js.map +1 -0
  416. package/dist/resolution/frameworks/express.d.ts +8 -0
  417. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  418. package/dist/resolution/frameworks/express.js +540 -0
  419. package/dist/resolution/frameworks/express.js.map +1 -0
  420. package/dist/resolution/frameworks/fabric.d.ts +3 -0
  421. package/dist/resolution/frameworks/fabric.d.ts.map +1 -0
  422. package/dist/resolution/frameworks/fabric.js +354 -0
  423. package/dist/resolution/frameworks/fabric.js.map +1 -0
  424. package/dist/resolution/frameworks/go.d.ts +8 -0
  425. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  426. package/dist/resolution/frameworks/go.js +184 -0
  427. package/dist/resolution/frameworks/go.js.map +1 -0
  428. package/dist/resolution/frameworks/goframe.d.ts +41 -0
  429. package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
  430. package/dist/resolution/frameworks/goframe.js +112 -0
  431. package/dist/resolution/frameworks/goframe.js.map +1 -0
  432. package/dist/resolution/frameworks/index.d.ts +30 -0
  433. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  434. package/dist/resolution/frameworks/index.js +72 -0
  435. package/dist/resolution/frameworks/index.js.map +1 -0
  436. package/dist/resolution/frameworks/java.d.ts +8 -0
  437. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  438. package/dist/resolution/frameworks/java.js +517 -0
  439. package/dist/resolution/frameworks/java.js.map +1 -0
  440. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  441. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  442. package/dist/resolution/frameworks/laravel.js +257 -0
  443. package/dist/resolution/frameworks/laravel.js.map +1 -0
  444. package/dist/resolution/frameworks/nestjs.d.ts +26 -0
  445. package/dist/resolution/frameworks/nestjs.d.ts.map +1 -0
  446. package/dist/resolution/frameworks/nestjs.js +690 -0
  447. package/dist/resolution/frameworks/nestjs.js.map +1 -0
  448. package/dist/resolution/frameworks/nextjs.d.ts +76 -0
  449. package/dist/resolution/frameworks/nextjs.d.ts.map +1 -0
  450. package/dist/resolution/frameworks/nextjs.js +328 -0
  451. package/dist/resolution/frameworks/nextjs.js.map +1 -0
  452. package/dist/resolution/frameworks/object-literal.d.ts +32 -0
  453. package/dist/resolution/frameworks/object-literal.d.ts.map +1 -0
  454. package/dist/resolution/frameworks/object-literal.js +139 -0
  455. package/dist/resolution/frameworks/object-literal.js.map +1 -0
  456. package/dist/resolution/frameworks/package-deps.d.ts +14 -0
  457. package/dist/resolution/frameworks/package-deps.d.ts.map +1 -0
  458. package/dist/resolution/frameworks/package-deps.js +78 -0
  459. package/dist/resolution/frameworks/package-deps.js.map +1 -0
  460. package/dist/resolution/frameworks/play.d.ts +19 -0
  461. package/dist/resolution/frameworks/play.d.ts.map +1 -0
  462. package/dist/resolution/frameworks/play.js +111 -0
  463. package/dist/resolution/frameworks/play.js.map +1 -0
  464. package/dist/resolution/frameworks/python.d.ts +10 -0
  465. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  466. package/dist/resolution/frameworks/python.js +566 -0
  467. package/dist/resolution/frameworks/python.js.map +1 -0
  468. package/dist/resolution/frameworks/react-native.d.ts +29 -0
  469. package/dist/resolution/frameworks/react-native.d.ts.map +1 -0
  470. package/dist/resolution/frameworks/react-native.js +549 -0
  471. package/dist/resolution/frameworks/react-native.js.map +1 -0
  472. package/dist/resolution/frameworks/react-router.d.ts +46 -0
  473. package/dist/resolution/frameworks/react-router.d.ts.map +1 -0
  474. package/dist/resolution/frameworks/react-router.js +187 -0
  475. package/dist/resolution/frameworks/react-router.js.map +1 -0
  476. package/dist/resolution/frameworks/react.d.ts +9 -0
  477. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  478. package/dist/resolution/frameworks/react.js +257 -0
  479. package/dist/resolution/frameworks/react.js.map +1 -0
  480. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  481. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  482. package/dist/resolution/frameworks/ruby.js +302 -0
  483. package/dist/resolution/frameworks/ruby.js.map +1 -0
  484. package/dist/resolution/frameworks/rust.d.ts +8 -0
  485. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  486. package/dist/resolution/frameworks/rust.js +304 -0
  487. package/dist/resolution/frameworks/rust.js.map +1 -0
  488. package/dist/resolution/frameworks/svelte.d.ts +9 -0
  489. package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
  490. package/dist/resolution/frameworks/svelte.js +258 -0
  491. package/dist/resolution/frameworks/svelte.js.map +1 -0
  492. package/dist/resolution/frameworks/sveltekit-router.d.ts +36 -0
  493. package/dist/resolution/frameworks/sveltekit-router.d.ts.map +1 -0
  494. package/dist/resolution/frameworks/sveltekit-router.js +156 -0
  495. package/dist/resolution/frameworks/sveltekit-router.js.map +1 -0
  496. package/dist/resolution/frameworks/swift-objc.d.ts +37 -0
  497. package/dist/resolution/frameworks/swift-objc.d.ts.map +1 -0
  498. package/dist/resolution/frameworks/swift-objc.js +252 -0
  499. package/dist/resolution/frameworks/swift-objc.js.map +1 -0
  500. package/dist/resolution/frameworks/swift.d.ts +10 -0
  501. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  502. package/dist/resolution/frameworks/swift.js +410 -0
  503. package/dist/resolution/frameworks/swift.js.map +1 -0
  504. package/dist/resolution/frameworks/tanstack-router.d.ts +84 -0
  505. package/dist/resolution/frameworks/tanstack-router.d.ts.map +1 -0
  506. package/dist/resolution/frameworks/tanstack-router.js +437 -0
  507. package/dist/resolution/frameworks/tanstack-router.js.map +1 -0
  508. package/dist/resolution/frameworks/terraform.d.ts +38 -0
  509. package/dist/resolution/frameworks/terraform.d.ts.map +1 -0
  510. package/dist/resolution/frameworks/terraform.js +277 -0
  511. package/dist/resolution/frameworks/terraform.js.map +1 -0
  512. package/dist/resolution/frameworks/vue-router.d.ts +82 -0
  513. package/dist/resolution/frameworks/vue-router.d.ts.map +1 -0
  514. package/dist/resolution/frameworks/vue-router.js +377 -0
  515. package/dist/resolution/frameworks/vue-router.js.map +1 -0
  516. package/dist/resolution/frameworks/vue.d.ts +9 -0
  517. package/dist/resolution/frameworks/vue.d.ts.map +1 -0
  518. package/dist/resolution/frameworks/vue.js +303 -0
  519. package/dist/resolution/frameworks/vue.js.map +1 -0
  520. package/dist/resolution/go-module.d.ts +26 -0
  521. package/dist/resolution/go-module.d.ts.map +1 -0
  522. package/dist/resolution/go-module.js +78 -0
  523. package/dist/resolution/go-module.js.map +1 -0
  524. package/dist/resolution/goframe-synthesizer.d.ts +29 -0
  525. package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
  526. package/dist/resolution/goframe-synthesizer.js +163 -0
  527. package/dist/resolution/goframe-synthesizer.js.map +1 -0
  528. package/dist/resolution/import-resolver.d.ts +84 -0
  529. package/dist/resolution/import-resolver.d.ts.map +1 -0
  530. package/dist/resolution/import-resolver.js +2240 -0
  531. package/dist/resolution/import-resolver.js.map +1 -0
  532. package/dist/resolution/index.d.ts +343 -0
  533. package/dist/resolution/index.d.ts.map +1 -0
  534. package/dist/resolution/index.js +2352 -0
  535. package/dist/resolution/index.js.map +1 -0
  536. package/dist/resolution/lru-cache.d.ts +24 -0
  537. package/dist/resolution/lru-cache.d.ts.map +1 -0
  538. package/dist/resolution/lru-cache.js +62 -0
  539. package/dist/resolution/lru-cache.js.map +1 -0
  540. package/dist/resolution/memory-budget.d.ts +48 -0
  541. package/dist/resolution/memory-budget.d.ts.map +1 -0
  542. package/dist/resolution/memory-budget.js +162 -0
  543. package/dist/resolution/memory-budget.js.map +1 -0
  544. package/dist/resolution/name-matcher.d.ts +153 -0
  545. package/dist/resolution/name-matcher.d.ts.map +1 -0
  546. package/dist/resolution/name-matcher.js +2412 -0
  547. package/dist/resolution/name-matcher.js.map +1 -0
  548. package/dist/resolution/next-router-synthesizer.d.ts +27 -0
  549. package/dist/resolution/next-router-synthesizer.d.ts.map +1 -0
  550. package/dist/resolution/next-router-synthesizer.js +113 -0
  551. package/dist/resolution/next-router-synthesizer.js.map +1 -0
  552. package/dist/resolution/path-aliases.d.ts +70 -0
  553. package/dist/resolution/path-aliases.d.ts.map +1 -0
  554. package/dist/resolution/path-aliases.js +346 -0
  555. package/dist/resolution/path-aliases.js.map +1 -0
  556. package/dist/resolution/react-router-synthesizer.d.ts +33 -0
  557. package/dist/resolution/react-router-synthesizer.d.ts.map +1 -0
  558. package/dist/resolution/react-router-synthesizer.js +126 -0
  559. package/dist/resolution/react-router-synthesizer.js.map +1 -0
  560. package/dist/resolution/resolver-pool.d.ts +106 -0
  561. package/dist/resolution/resolver-pool.d.ts.map +1 -0
  562. package/dist/resolution/resolver-pool.js +344 -0
  563. package/dist/resolution/resolver-pool.js.map +1 -0
  564. package/dist/resolution/resolver-worker.d.ts +17 -0
  565. package/dist/resolution/resolver-worker.d.ts.map +1 -0
  566. package/dist/resolution/resolver-worker.js +141 -0
  567. package/dist/resolution/resolver-worker.js.map +1 -0
  568. package/dist/resolution/strip-comments.d.ts +27 -0
  569. package/dist/resolution/strip-comments.d.ts.map +1 -0
  570. package/dist/resolution/strip-comments.js +492 -0
  571. package/dist/resolution/strip-comments.js.map +1 -0
  572. package/dist/resolution/sveltekit-synthesizer.d.ts +58 -0
  573. package/dist/resolution/sveltekit-synthesizer.d.ts.map +1 -0
  574. package/dist/resolution/sveltekit-synthesizer.js +173 -0
  575. package/dist/resolution/sveltekit-synthesizer.js.map +1 -0
  576. package/dist/resolution/swift-objc-bridge.d.ts +134 -0
  577. package/dist/resolution/swift-objc-bridge.d.ts.map +1 -0
  578. package/dist/resolution/swift-objc-bridge.js +256 -0
  579. package/dist/resolution/swift-objc-bridge.js.map +1 -0
  580. package/dist/resolution/synth-utils.d.ts +26 -0
  581. package/dist/resolution/synth-utils.d.ts.map +1 -0
  582. package/dist/resolution/synth-utils.js +75 -0
  583. package/dist/resolution/synth-utils.js.map +1 -0
  584. package/dist/resolution/tanstack-router-synthesizer.d.ts +31 -0
  585. package/dist/resolution/tanstack-router-synthesizer.d.ts.map +1 -0
  586. package/dist/resolution/tanstack-router-synthesizer.js +114 -0
  587. package/dist/resolution/tanstack-router-synthesizer.js.map +1 -0
  588. package/dist/resolution/tier-synthesizer.d.ts +48 -0
  589. package/dist/resolution/tier-synthesizer.d.ts.map +1 -0
  590. package/dist/resolution/tier-synthesizer.js +907 -0
  591. package/dist/resolution/tier-synthesizer.js.map +1 -0
  592. package/dist/resolution/types.d.ts +290 -0
  593. package/dist/resolution/types.d.ts.map +1 -0
  594. package/dist/resolution/types.js +8 -0
  595. package/dist/resolution/types.js.map +1 -0
  596. package/dist/resolution/vue-router-synthesizer.d.ts +30 -0
  597. package/dist/resolution/vue-router-synthesizer.d.ts.map +1 -0
  598. package/dist/resolution/vue-router-synthesizer.js +115 -0
  599. package/dist/resolution/vue-router-synthesizer.js.map +1 -0
  600. package/dist/resolution/workspace-packages.d.ts +58 -0
  601. package/dist/resolution/workspace-packages.d.ts.map +1 -0
  602. package/dist/resolution/workspace-packages.js +346 -0
  603. package/dist/resolution/workspace-packages.js.map +1 -0
  604. package/dist/search/identifier-segments.d.ts +70 -0
  605. package/dist/search/identifier-segments.d.ts.map +1 -0
  606. package/dist/search/identifier-segments.js +205 -0
  607. package/dist/search/identifier-segments.js.map +1 -0
  608. package/dist/search/query-parser.d.ts +57 -0
  609. package/dist/search/query-parser.d.ts.map +1 -0
  610. package/dist/search/query-parser.js +177 -0
  611. package/dist/search/query-parser.js.map +1 -0
  612. package/dist/search/query-paths.d.ts +57 -0
  613. package/dist/search/query-paths.d.ts.map +1 -0
  614. package/dist/search/query-paths.js +298 -0
  615. package/dist/search/query-paths.js.map +1 -0
  616. package/dist/search/query-utils.d.ts +102 -0
  617. package/dist/search/query-utils.d.ts.map +1 -0
  618. package/dist/search/query-utils.js +487 -0
  619. package/dist/search/query-utils.js.map +1 -0
  620. package/dist/sync/git-hooks.d.ts +45 -0
  621. package/dist/sync/git-hooks.d.ts.map +1 -0
  622. package/dist/sync/git-hooks.js +227 -0
  623. package/dist/sync/git-hooks.js.map +1 -0
  624. package/dist/sync/index.d.ts +19 -0
  625. package/dist/sync/index.d.ts.map +1 -0
  626. package/dist/sync/index.js +35 -0
  627. package/dist/sync/index.js.map +1 -0
  628. package/dist/sync/watch-policy.d.ts +48 -0
  629. package/dist/sync/watch-policy.d.ts.map +1 -0
  630. package/dist/sync/watch-policy.js +124 -0
  631. package/dist/sync/watch-policy.js.map +1 -0
  632. package/dist/sync/watcher.d.ts +401 -0
  633. package/dist/sync/watcher.d.ts.map +1 -0
  634. package/dist/sync/watcher.js +967 -0
  635. package/dist/sync/watcher.js.map +1 -0
  636. package/dist/sync/worktree.d.ts +63 -0
  637. package/dist/sync/worktree.d.ts.map +1 -0
  638. package/dist/sync/worktree.js +182 -0
  639. package/dist/sync/worktree.js.map +1 -0
  640. package/dist/telemetry/index.d.ts +143 -0
  641. package/dist/telemetry/index.d.ts.map +1 -0
  642. package/dist/telemetry/index.js +541 -0
  643. package/dist/telemetry/index.js.map +1 -0
  644. package/dist/types.d.ts +486 -0
  645. package/dist/types.d.ts.map +1 -0
  646. package/dist/types.js +118 -0
  647. package/dist/types.js.map +1 -0
  648. package/dist/ui/color.d.ts +21 -0
  649. package/dist/ui/color.d.ts.map +1 -0
  650. package/dist/ui/color.js +42 -0
  651. package/dist/ui/color.js.map +1 -0
  652. package/dist/ui/glyphs.d.ts +67 -0
  653. package/dist/ui/glyphs.d.ts.map +1 -0
  654. package/dist/ui/glyphs.js +125 -0
  655. package/dist/ui/glyphs.js.map +1 -0
  656. package/dist/ui/shimmer-progress.d.ts +11 -0
  657. package/dist/ui/shimmer-progress.d.ts.map +1 -0
  658. package/dist/ui/shimmer-progress.js +164 -0
  659. package/dist/ui/shimmer-progress.js.map +1 -0
  660. package/dist/ui/shimmer-worker.d.ts +2 -0
  661. package/dist/ui/shimmer-worker.d.ts.map +1 -0
  662. package/dist/ui/shimmer-worker.js +126 -0
  663. package/dist/ui/shimmer-worker.js.map +1 -0
  664. package/dist/ui/types.d.ts +15 -0
  665. package/dist/ui/types.d.ts.map +1 -0
  666. package/dist/ui/types.js +3 -0
  667. package/dist/ui/types.js.map +1 -0
  668. package/dist/ui-server/api/deadcode.d.ts +84 -0
  669. package/dist/ui-server/api/deadcode.d.ts.map +1 -0
  670. package/dist/ui-server/api/deadcode.js +136 -0
  671. package/dist/ui-server/api/deadcode.js.map +1 -0
  672. package/dist/ui-server/api/effects.d.ts +87 -0
  673. package/dist/ui-server/api/effects.d.ts.map +1 -0
  674. package/dist/ui-server/api/effects.js +499 -0
  675. package/dist/ui-server/api/effects.js.map +1 -0
  676. package/dist/ui-server/api/entrypoints.d.ts +86 -0
  677. package/dist/ui-server/api/entrypoints.d.ts.map +1 -0
  678. package/dist/ui-server/api/entrypoints.js +279 -0
  679. package/dist/ui-server/api/entrypoints.js.map +1 -0
  680. package/dist/ui-server/api/events.d.ts +183 -0
  681. package/dist/ui-server/api/events.d.ts.map +1 -0
  682. package/dist/ui-server/api/events.js +430 -0
  683. package/dist/ui-server/api/events.js.map +1 -0
  684. package/dist/ui-server/api/file.d.ts +66 -0
  685. package/dist/ui-server/api/file.d.ts.map +1 -0
  686. package/dist/ui-server/api/file.js +222 -0
  687. package/dist/ui-server/api/file.js.map +1 -0
  688. package/dist/ui-server/api/filecode.d.ts +126 -0
  689. package/dist/ui-server/api/filecode.d.ts.map +1 -0
  690. package/dist/ui-server/api/filecode.js +205 -0
  691. package/dist/ui-server/api/filecode.js.map +1 -0
  692. package/dist/ui-server/api/flow.d.ts +226 -0
  693. package/dist/ui-server/api/flow.d.ts.map +1 -0
  694. package/dist/ui-server/api/flow.js +611 -0
  695. package/dist/ui-server/api/flow.js.map +1 -0
  696. package/dist/ui-server/api/hierarchy.d.ts +81 -0
  697. package/dist/ui-server/api/hierarchy.d.ts.map +1 -0
  698. package/dist/ui-server/api/hierarchy.js +92 -0
  699. package/dist/ui-server/api/hierarchy.js.map +1 -0
  700. package/dist/ui-server/api/index.d.ts +90 -0
  701. package/dist/ui-server/api/index.d.ts.map +1 -0
  702. package/dist/ui-server/api/index.js +332 -0
  703. package/dist/ui-server/api/index.js.map +1 -0
  704. package/dist/ui-server/api/map.d.ts +187 -0
  705. package/dist/ui-server/api/map.d.ts.map +1 -0
  706. package/dist/ui-server/api/map.js +498 -0
  707. package/dist/ui-server/api/map.js.map +1 -0
  708. package/dist/ui-server/api/node.d.ts +81 -0
  709. package/dist/ui-server/api/node.d.ts.map +1 -0
  710. package/dist/ui-server/api/node.js +388 -0
  711. package/dist/ui-server/api/node.js.map +1 -0
  712. package/dist/ui-server/api/nodes.d.ts +25 -0
  713. package/dist/ui-server/api/nodes.d.ts.map +1 -0
  714. package/dist/ui-server/api/nodes.js +45 -0
  715. package/dist/ui-server/api/nodes.js.map +1 -0
  716. package/dist/ui-server/api/program.d.ts +139 -0
  717. package/dist/ui-server/api/program.d.ts.map +1 -0
  718. package/dist/ui-server/api/program.js +315 -0
  719. package/dist/ui-server/api/program.js.map +1 -0
  720. package/dist/ui-server/api/respond.d.ts +76 -0
  721. package/dist/ui-server/api/respond.d.ts.map +1 -0
  722. package/dist/ui-server/api/respond.js +186 -0
  723. package/dist/ui-server/api/respond.js.map +1 -0
  724. package/dist/ui-server/api/route-roots.d.ts +39 -0
  725. package/dist/ui-server/api/route-roots.d.ts.map +1 -0
  726. package/dist/ui-server/api/route-roots.js +96 -0
  727. package/dist/ui-server/api/route-roots.js.map +1 -0
  728. package/dist/ui-server/api/routes.d.ts +59 -0
  729. package/dist/ui-server/api/routes.d.ts.map +1 -0
  730. package/dist/ui-server/api/routes.js +112 -0
  731. package/dist/ui-server/api/routes.js.map +1 -0
  732. package/dist/ui-server/api/screens.d.ts +117 -0
  733. package/dist/ui-server/api/screens.d.ts.map +1 -0
  734. package/dist/ui-server/api/screens.js +611 -0
  735. package/dist/ui-server/api/screens.js.map +1 -0
  736. package/dist/ui-server/api/search.d.ts +29 -0
  737. package/dist/ui-server/api/search.d.ts.map +1 -0
  738. package/dist/ui-server/api/search.js +232 -0
  739. package/dist/ui-server/api/search.js.map +1 -0
  740. package/dist/ui-server/api/session.d.ts +52 -0
  741. package/dist/ui-server/api/session.d.ts.map +1 -0
  742. package/dist/ui-server/api/session.js +196 -0
  743. package/dist/ui-server/api/session.js.map +1 -0
  744. package/dist/ui-server/api/source.d.ts +200 -0
  745. package/dist/ui-server/api/source.d.ts.map +1 -0
  746. package/dist/ui-server/api/source.js +419 -0
  747. package/dist/ui-server/api/source.js.map +1 -0
  748. package/dist/ui-server/api/stats.d.ts +27 -0
  749. package/dist/ui-server/api/stats.d.ts.map +1 -0
  750. package/dist/ui-server/api/stats.js +164 -0
  751. package/dist/ui-server/api/stats.js.map +1 -0
  752. package/dist/ui-server/api/steps.d.ts +274 -0
  753. package/dist/ui-server/api/steps.d.ts.map +1 -0
  754. package/dist/ui-server/api/steps.js +1446 -0
  755. package/dist/ui-server/api/steps.js.map +1 -0
  756. package/dist/ui-server/api/trail-store.d.ts +142 -0
  757. package/dist/ui-server/api/trail-store.d.ts.map +1 -0
  758. package/dist/ui-server/api/trail-store.js +323 -0
  759. package/dist/ui-server/api/trail-store.js.map +1 -0
  760. package/dist/ui-server/api/trails.d.ts +163 -0
  761. package/dist/ui-server/api/trails.d.ts.map +1 -0
  762. package/dist/ui-server/api/trails.js +369 -0
  763. package/dist/ui-server/api/trails.js.map +1 -0
  764. package/dist/ui-server/api/when.d.ts +125 -0
  765. package/dist/ui-server/api/when.d.ts.map +1 -0
  766. package/dist/ui-server/api/when.js +251 -0
  767. package/dist/ui-server/api/when.js.map +1 -0
  768. package/dist/ui-server/api/wire.d.ts +179 -0
  769. package/dist/ui-server/api/wire.d.ts.map +1 -0
  770. package/dist/ui-server/api/wire.js +231 -0
  771. package/dist/ui-server/api/wire.js.map +1 -0
  772. package/dist/ui-server/assets.d.ts +40 -0
  773. package/dist/ui-server/assets.d.ts.map +1 -0
  774. package/dist/ui-server/assets.js +110 -0
  775. package/dist/ui-server/assets.js.map +1 -0
  776. package/dist/ui-server/constants.d.ts +32 -0
  777. package/dist/ui-server/constants.d.ts.map +1 -0
  778. package/dist/ui-server/constants.js +35 -0
  779. package/dist/ui-server/constants.js.map +1 -0
  780. package/dist/ui-server/highlight/index.d.ts +113 -0
  781. package/dist/ui-server/highlight/index.d.ts.map +1 -0
  782. package/dist/ui-server/highlight/index.js +307 -0
  783. package/dist/ui-server/highlight/index.js.map +1 -0
  784. package/dist/ui-server/highlight/languages.d.ts +36 -0
  785. package/dist/ui-server/highlight/languages.d.ts.map +1 -0
  786. package/dist/ui-server/highlight/languages.js +50 -0
  787. package/dist/ui-server/highlight/languages.js.map +1 -0
  788. package/dist/ui-server/index.d.ts +92 -0
  789. package/dist/ui-server/index.d.ts.map +1 -0
  790. package/dist/ui-server/index.js +399 -0
  791. package/dist/ui-server/index.js.map +1 -0
  792. package/dist/ui-server/open-browser.d.ts +31 -0
  793. package/dist/ui-server/open-browser.d.ts.map +1 -0
  794. package/dist/ui-server/open-browser.js +79 -0
  795. package/dist/ui-server/open-browser.js.map +1 -0
  796. package/dist/ui-server/security.d.ts +127 -0
  797. package/dist/ui-server/security.d.ts.map +1 -0
  798. package/dist/ui-server/security.js +332 -0
  799. package/dist/ui-server/security.js.map +1 -0
  800. package/dist/ui-server/static.d.ts +45 -0
  801. package/dist/ui-server/static.d.ts.map +1 -0
  802. package/dist/ui-server/static.js +165 -0
  803. package/dist/ui-server/static.js.map +1 -0
  804. package/dist/upgrade/index.d.ts +177 -0
  805. package/dist/upgrade/index.d.ts.map +1 -0
  806. package/dist/upgrade/index.js +665 -0
  807. package/dist/upgrade/index.js.map +1 -0
  808. package/dist/upgrade/remove-binary.d.ts +87 -0
  809. package/dist/upgrade/remove-binary.d.ts.map +1 -0
  810. package/dist/upgrade/remove-binary.js +289 -0
  811. package/dist/upgrade/remove-binary.js.map +1 -0
  812. package/dist/upgrade/update-check.d.ts +92 -0
  813. package/dist/upgrade/update-check.d.ts.map +1 -0
  814. package/dist/upgrade/update-check.js +258 -0
  815. package/dist/upgrade/update-check.js.map +1 -0
  816. package/dist/utils.d.ts +224 -0
  817. package/dist/utils.d.ts.map +1 -0
  818. package/dist/utils.js +583 -0
  819. package/dist/utils.js.map +1 -0
  820. package/dist/viewer/assets/archivo-latin-ext-wght-normal-C4zznr8T.woff2 +0 -0
  821. package/dist/viewer/assets/archivo-latin-wght-normal-E0tuGl4L.woff2 +0 -0
  822. package/dist/viewer/assets/archivo-vietnamese-wght-normal-XAtsl5Q_.woff2 +0 -0
  823. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-italic-2syK4fUT.woff +0 -0
  824. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-italic-CBJ8pzag.woff2 +0 -0
  825. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  826. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  827. package/dist/viewer/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff +0 -0
  828. package/dist/viewer/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2 +0 -0
  829. package/dist/viewer/assets/ibm-plex-mono-cyrillic-600-normal-CTOM6hUh.woff2 +0 -0
  830. package/dist/viewer/assets/ibm-plex-mono-cyrillic-600-normal-fLZuRloM.woff +0 -0
  831. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-italic-B4oTjJdl.woff +0 -0
  832. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-italic-CBjNughH.woff2 +0 -0
  833. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  834. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  835. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff +0 -0
  836. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2 +0 -0
  837. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-600-normal-9HEixskS.woff +0 -0
  838. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-600-normal-V-xxqcpd.woff2 +0 -0
  839. package/dist/viewer/assets/ibm-plex-mono-latin-400-italic-66oory27.woff +0 -0
  840. package/dist/viewer/assets/ibm-plex-mono-latin-400-italic-BqAiT5Ww.woff2 +0 -0
  841. package/dist/viewer/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  842. package/dist/viewer/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  843. package/dist/viewer/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  844. package/dist/viewer/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  845. package/dist/viewer/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  846. package/dist/viewer/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  847. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-italic-B7_fu1kp.woff2 +0 -0
  848. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-italic-Bg0ZHwF4.woff +0 -0
  849. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  850. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  851. package/dist/viewer/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2 +0 -0
  852. package/dist/viewer/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff +0 -0
  853. package/dist/viewer/assets/ibm-plex-mono-latin-ext-600-normal-D38SheWl.woff2 +0 -0
  854. package/dist/viewer/assets/ibm-plex-mono-latin-ext-600-normal-DmB0ttJJ.woff +0 -0
  855. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-italic-D6eaYXMU.woff +0 -0
  856. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-italic-DRuN92E5.woff2 +0 -0
  857. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  858. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  859. package/dist/viewer/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff +0 -0
  860. package/dist/viewer/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2 +0 -0
  861. package/dist/viewer/assets/ibm-plex-mono-vietnamese-600-normal-D2EvbN8M.woff2 +0 -0
  862. package/dist/viewer/assets/ibm-plex-mono-vietnamese-600-normal-iLQfcSjf.woff +0 -0
  863. package/dist/viewer/assets/index-2IPslW5t.js +13 -0
  864. package/dist/viewer/assets/index-DSwi2Seu.css +1 -0
  865. package/dist/viewer/index.html +16 -0
  866. package/package.json +67 -0
@@ -0,0 +1,907 @@
1
+ "use strict";
2
+ /**
3
+ * Cross-tier channels — the web's equivalent of the React Native bridge.
4
+ *
5
+ * A web app is two programs that talk over a wire the graph cannot see: the
6
+ * page calls `fetch('/api/users', { method: 'POST' })` and the API's
7
+ * `app.post('/api/users', createUser)` answers; a service puts `'welcome'` on
8
+ * the `email` queue and a `@Process('welcome')` method picks it up; a
9
+ * gateway's `this.server.emit('message')` lands in the component that wrote
10
+ * `socket.on('message', …)`. Each hop is a string on both sides, which is the
11
+ * evidence that lets a synthesizer close it — exactly as the RN event channel
12
+ * pairs `sendEvent(withName: "x")` with `addListener('x')`.
13
+ *
14
+ * Three channels, one scan:
15
+ *
16
+ * 1. **`http-client`** — a literal path in a client call (`fetch`, `axios.post`,
17
+ * `ky`, `got`, `$fetch`, `useFetch`, `useSWR`, or a project instance made by
18
+ * `axios.create(…)` / `ky.extend(…)`) → the ONE route node `METHOD path` it
19
+ * denotes. Template holes match a `:param`; a hole in front of the path
20
+ * (`${API_URL}/users`) matches a route by its tail; a variable url, a path
21
+ * no route serves, or a path two routes serve alike produce nothing.
22
+ * Edge: enclosing function → route, `tier: 'client→server'`.
23
+ * 2. **`queue-job`** — `queue.add('job', …)` where the queue is named (`new
24
+ * Queue('email')`, `@InjectQueue('email')`) → the `@Process('job')` method
25
+ * of the `@Processor('email')` class, a WorkerHost's `process`, a
26
+ * `new Worker('email', handler)`, or Bull's `queue.process('job', handler)`.
27
+ * 3. **`event-bus`** — `eventEmitter.emit('user.created')` → `@OnEvent('user.created')`
28
+ * (globs honoured); and sockets in both directions: a client's
29
+ * `socket.emit('x')` → the server's `@SubscribeMessage('x')` / `socket.on('x')`
30
+ * (`tier: 'client→server'`), the server's `server.emit('x')` → the client's
31
+ * `socket.on('x', …)` (`tier: 'server→client'`). The in-process
32
+ * `.on('x', fn)` ↔ `.emit('x')` pairing stays the emitter pass's.
33
+ *
34
+ * Every edge is `kind: 'calls'`, `provenance: 'heuristic'`, and carries
35
+ * `synthesizedBy`, `channel` (`http` | `queue` | `event` | `socket`), the
36
+ * `tier` when the direction is known, the `event` / `queue` / `method` /
37
+ * `href` it was paired on, and `registeredAt` — the route registration, the
38
+ * decorator, the `.on` — so a reader can check the pairing. Fan-out is capped
39
+ * per event as the emitter pass caps it; an HTTP pairing needs no cap because
40
+ * it is exact. Test suites and generated files are never sources: a supertest
41
+ * call is the test's story, and forty of them would make the route a hub.
42
+ */
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.TIER_SERVER_TO_CLIENT = exports.TIER_CLIENT_TO_SERVER = void 0;
45
+ exports.crossTierEdges = crossTierEdges;
46
+ const strip_comments_1 = require("./strip-comments");
47
+ const import_resolver_1 = require("./import-resolver");
48
+ const generated_detection_1 = require("../extraction/generated-detection");
49
+ const query_utils_1 = require("../search/query-utils");
50
+ const expo_router_1 = require("./frameworks/expo-router");
51
+ const synth_utils_1 = require("./synth-utils");
52
+ const JS_FILE = /\.(?:[cm]?[jt]sx?)$/;
53
+ /** Events with more handlers or dispatchers than this are too generic to pair without type information. */
54
+ const EVENT_FANOUT_CAP = 6;
55
+ const HTTP_VERBS = new Set(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS', 'ALL', 'ANY']);
56
+ exports.TIER_CLIENT_TO_SERVER = 'client→server';
57
+ exports.TIER_SERVER_TO_CLIENT = 'server→client';
58
+ // =============================================================================
59
+ // Source reading
60
+ // =============================================================================
61
+ /** Index just past the `)` that closes the `(` at `open`, skipping strings; -1 if unbalanced. */
62
+ function closeParen(s, open) {
63
+ let depth = 0;
64
+ for (let i = open; i < s.length; i++) {
65
+ const ch = s[i];
66
+ if (ch === '"' || ch === "'") {
67
+ const q = ch;
68
+ i++;
69
+ while (i < s.length && s[i] !== q) {
70
+ if (s[i] === '\\')
71
+ i++;
72
+ i++;
73
+ }
74
+ continue;
75
+ }
76
+ if (ch === '`') {
77
+ i = templateEnd(s, i);
78
+ continue;
79
+ }
80
+ if (ch === '(')
81
+ depth++;
82
+ else if (ch === ')') {
83
+ depth--;
84
+ if (depth === 0)
85
+ return i;
86
+ }
87
+ }
88
+ return -1;
89
+ }
90
+ /** Index of the backtick closing the template opening at `open`. */
91
+ function templateEnd(s, open) {
92
+ let i = open + 1;
93
+ while (i < s.length) {
94
+ const ch = s[i];
95
+ if (ch === '\\') {
96
+ i += 2;
97
+ continue;
98
+ }
99
+ if (ch === '`')
100
+ return i;
101
+ if (ch === '$' && s[i + 1] === '{') {
102
+ let depth = 0;
103
+ for (i = i + 1; i < s.length; i++) {
104
+ if (s[i] === '{')
105
+ depth++;
106
+ else if (s[i] === '}') {
107
+ depth--;
108
+ if (depth === 0)
109
+ break;
110
+ }
111
+ else if (s[i] === '`')
112
+ i = templateEnd(s, i);
113
+ }
114
+ }
115
+ i++;
116
+ }
117
+ return s.length;
118
+ }
119
+ /** The arguments of the call whose `(` is at `open`, split at depth-0 commas. */
120
+ function argumentsAt(s, open) {
121
+ const close = closeParen(s, open);
122
+ if (close < 0)
123
+ return null;
124
+ const inner = s.slice(open + 1, close);
125
+ const out = [];
126
+ let depth = 0;
127
+ let start = 0;
128
+ for (let i = 0; i < inner.length; i++) {
129
+ const c = inner[i];
130
+ if (c === '"' || c === "'") {
131
+ const q = c;
132
+ i++;
133
+ while (i < inner.length && inner[i] !== q) {
134
+ if (inner[i] === '\\')
135
+ i++;
136
+ i++;
137
+ }
138
+ continue;
139
+ }
140
+ if (c === '`') {
141
+ i = templateEnd(inner, i);
142
+ continue;
143
+ }
144
+ if (c === '(' || c === '[' || c === '{')
145
+ depth++;
146
+ else if (c === ')' || c === ']' || c === '}')
147
+ depth--;
148
+ else if (c === ',' && depth === 0) {
149
+ out.push(inner.slice(start, i));
150
+ start = i + 1;
151
+ }
152
+ }
153
+ out.push(inner.slice(start));
154
+ return out.map((a) => a.trim()).filter((a, i) => a.length > 0 || i === 0);
155
+ }
156
+ /** The first string literal in `text`, holes kept; null when it opens with anything else. */
157
+ function leadingString(text) {
158
+ const t = text.trim().replace(/^\(\s*/, '');
159
+ // `new URL('/x', base)` — the path is the first argument of the URL.
160
+ const url = /^new\s+URL\s*\(/.exec(t);
161
+ if (url) {
162
+ const args = argumentsAt(t, url[0].length - 1);
163
+ return args && args[0] ? leadingString(args[0]) : null;
164
+ }
165
+ if (t[0] === '"' || t[0] === "'" || t[0] === '`')
166
+ return (0, expo_router_1.readStringAt)(t, 0);
167
+ return null;
168
+ }
169
+ /** `method: 'POST'` inside an options object / config, upper-cased; null when absent or computed. */
170
+ function methodIn(text) {
171
+ const m = /\bmethod\s*:\s*(['"`])([A-Za-z]+)\1/.exec(text);
172
+ return m ? m[2].toUpperCase() : null;
173
+ }
174
+ /** The first string literal anywhere in a decorator's arguments (`'x'`, `{ name: 'x' }`). */
175
+ function firstLiteral(args) {
176
+ const m = /(['"`])([^'"`]+)\1/.exec(args);
177
+ return m ? m[2] : null;
178
+ }
179
+ /** Every string literal in a decorator's arguments, for `@OnEvent(['a', 'b'])`. */
180
+ function allLiterals(args) {
181
+ const out = [];
182
+ const re = /(['"`])([^'"`]+)\1/g;
183
+ let m;
184
+ while ((m = re.exec(args)) !== null)
185
+ out.push(m[2]);
186
+ return out;
187
+ }
188
+ /**
189
+ * The name of the method a decorator sits on: skip further stacked decorators
190
+ * and modifiers after the decorator's `)`, then take the identifier before `(`.
191
+ */
192
+ function methodNameAfter(safe, from) {
193
+ let i = from;
194
+ const ws = /\s*/y;
195
+ const deco = /@[\w.]+/y;
196
+ const modifier = /(?:public|private|protected|async|static|readonly|override)\b/y;
197
+ const ident = /([A-Za-z_$][\w$]*)\s*[<(]/y;
198
+ const eat = () => {
199
+ ws.lastIndex = i;
200
+ if (ws.exec(safe))
201
+ i = ws.lastIndex;
202
+ };
203
+ for (;;) {
204
+ eat();
205
+ if (safe[i] !== '@')
206
+ break;
207
+ deco.lastIndex = i;
208
+ if (!deco.exec(safe))
209
+ break;
210
+ i = deco.lastIndex;
211
+ eat();
212
+ if (safe[i] === '(') {
213
+ const close = closeParen(safe, i);
214
+ if (close < 0)
215
+ return null;
216
+ i = close + 1;
217
+ }
218
+ }
219
+ for (;;) {
220
+ eat();
221
+ modifier.lastIndex = i;
222
+ if (modifier.exec(safe) && modifier.lastIndex > i) {
223
+ i = modifier.lastIndex;
224
+ continue;
225
+ }
226
+ break;
227
+ }
228
+ eat();
229
+ ident.lastIndex = i;
230
+ const m = ident.exec(safe);
231
+ return m ? { name: m[1], index: i } : null;
232
+ }
233
+ /** Every `@Name(` decorator in `safe` with its arguments and where it ends. */
234
+ function decorators(safe, name) {
235
+ const out = [];
236
+ const re = new RegExp(`@${name}\\s*\\(`, 'g');
237
+ let m;
238
+ while ((m = re.exec(safe)) !== null) {
239
+ const open = m.index + m[0].length - 1;
240
+ const close = closeParen(safe, open);
241
+ if (close < 0)
242
+ continue;
243
+ out.push({ args: safe.slice(open + 1, close), index: m.index, end: close + 1 });
244
+ re.lastIndex = close + 1;
245
+ }
246
+ return out;
247
+ }
248
+ const CLIENT_FACTORY = /\b(?:export\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*(?::[^=;]*?)?=\s*(?:await\s+)?(?:(?:axios|ky|got|ofetch|\$fetch|wretch|redaxios)\s*\.\s*(?:create|extend)|new\s+Axios|wretch)\s*\(/g;
249
+ const DEFAULT_CLIENT_FACTORY = /\bexport\s+default\s+(?:(?:axios|ky|got|ofetch|\$fetch|wretch|redaxios)\s*\.\s*(?:create|extend)|new\s+Axios|wretch)\s*\(/;
250
+ const QUEUE_BINDING = /\b(?:export\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*(?::[^=;]*?)?=\s*(?:new\s+)?(?:Queue|Bull|BullQueue)\s*(?:<[^>]*>)?\s*\(\s*(['"`])([^'"`]+)\2/g;
251
+ const INJECT_QUEUE = /@InjectQueue\s*\(\s*(['"`])([^'"`]+)\1\s*\)\s*(?:(?:private|public|protected|readonly)\s+)*([A-Za-z_$][\w$]*)/g;
252
+ const SOCKET_SERVER_FILE = /@WebSocketGateway\s*\(|@SubscribeMessage\s*\(|@WebSocketServer\s*\(|\bnew\s+(?:Server|SocketIOServer|WebSocketServer|WebSocket\.Server|WSServer)\b|\.on\s*\(\s*['"]connection['"]/;
253
+ function baseUrlIn(safe, open) {
254
+ const args = argumentsAt(safe, open);
255
+ const config = args?.[0] ?? '';
256
+ const m = /\b(?:baseURL|baseUrl|prefixUrl|baseURI)\s*:\s*/.exec(config);
257
+ if (!m)
258
+ return null;
259
+ return (0, expo_router_1.readStringAt)(config, m.index + m[0].length);
260
+ }
261
+ function readFacts(ctx, file) {
262
+ const content = ctx.readFile(file);
263
+ if (!content)
264
+ return null;
265
+ const safe = (0, strip_comments_1.stripCommentsForRegex)(content, 'typescript');
266
+ const nodes = ctx.getNodesInFile(file);
267
+ const routeLines = new Set();
268
+ for (const n of nodes)
269
+ if (n.kind === 'route')
270
+ routeLines.add(n.startLine);
271
+ const clients = new Map();
272
+ CLIENT_FACTORY.lastIndex = 0;
273
+ let m;
274
+ while ((m = CLIENT_FACTORY.exec(safe)) !== null) {
275
+ clients.set(m[1], { baseURL: baseUrlIn(safe, m.index + m[0].length - 1) });
276
+ }
277
+ const dm = DEFAULT_CLIENT_FACTORY.exec(safe);
278
+ const defaultClient = dm ? { baseURL: baseUrlIn(safe, dm.index + dm[0].length - 1) } : null;
279
+ const queues = new Map();
280
+ QUEUE_BINDING.lastIndex = 0;
281
+ while ((m = QUEUE_BINDING.exec(safe)) !== null)
282
+ queues.set(m[1], m[3]);
283
+ INJECT_QUEUE.lastIndex = 0;
284
+ while ((m = INJECT_QUEUE.exec(safe)) !== null)
285
+ queues.set(m[3], m[2]);
286
+ return {
287
+ file,
288
+ safe,
289
+ nodes,
290
+ lineOf: (0, synth_utils_1.makeLineAt)(safe, 1),
291
+ columnOf: (idx) => idx - (safe.lastIndexOf('\n', idx - 1) + 1),
292
+ routeLines,
293
+ clients,
294
+ defaultClient,
295
+ queues,
296
+ socketServer: SOCKET_SERVER_FILE.test(safe),
297
+ };
298
+ }
299
+ /** Facts for the file a local name is imported from, when the import resolves to a project file. */
300
+ function importedFacts(ctx, facts, localName, cache) {
301
+ const lang = facts.file.endsWith('x') ? 'tsx' : 'typescript';
302
+ const im = ctx.getImportMappings(facts.file, lang).find((i) => i.localName === localName);
303
+ if (!im)
304
+ return null;
305
+ // The mappings name the module as written; the file it is comes from the
306
+ // same resolution the import resolver uses (aliases, extensions, index files).
307
+ const resolved = im.resolvedPath ?? (0, import_resolver_1.resolveImportPath)(im.source, facts.file, lang, ctx);
308
+ if (!resolved)
309
+ return null;
310
+ let target = cache.get(resolved);
311
+ if (target === undefined) {
312
+ target = JS_FILE.test(resolved) ? readFacts(ctx, resolved) : null;
313
+ cache.set(resolved, target);
314
+ }
315
+ return target ? { facts: target, exportedName: im.exportedName, isDefault: im.isDefault } : null;
316
+ }
317
+ // =============================================================================
318
+ // 1. HTTP client → route
319
+ // =============================================================================
320
+ /** A receiver that is an HTTP client by name alone. */
321
+ const CLIENT_NAMES = /^(?:axios|ky|got|superagent|http|https|httpClient|httpService|api|apiClient|client|restClient|request|agent|fetcher|instance|\$api|\$http|\$axios|axiosInstance|Axios|HttpClient|backend|server)$/;
322
+ /** A receiver that registers routes, never a client — unless it was made by a client factory. */
323
+ const SERVER_NAMES = /^(?:app|router|route|routes|express|fastify|koa|hono|elysia|apiRouter|v1|v2|r)$/;
324
+ /** A type argument between the callee and its `(` — `useSWR<TeamData>('/api/team')`, `ky.get<User>('/x')`. */
325
+ const GENERIC = String.raw `(?:<[^()<>]*(?:<[^()<>]*>[^()<>]*)*>)?`;
326
+ const BARE_CLIENT_CALL = new RegExp(String.raw `(?:(?:window|globalThis|global)\s*\.\s*)?\b(fetch|\$fetch|ofetch|axios|ky|got|useFetch|useSWR)\s*${GENERIC}\s*\(`, 'g');
327
+ const MEMBER_CLIENT_CALL = new RegExp(String.raw `((?:this\s*\.\s*)?[A-Za-z_$][\w$]*(?:\s*\.\s*[A-Za-z_$][\w$]*)*)\s*\.\s*(get|post|put|patch|delete|head|options|request|\$get|\$post|\$put|\$patch|\$delete)\s*${GENERIC}\s*\(`, 'g');
328
+ function httpRoutes(ctx) {
329
+ const out = [];
330
+ for (const node of ctx.getNodesByKind('route')) {
331
+ const space = node.name.indexOf(' ');
332
+ if (space <= 0)
333
+ continue;
334
+ const method = node.name.slice(0, space).toUpperCase();
335
+ if (!HTTP_VERBS.has(method))
336
+ continue;
337
+ const path = node.name.slice(space + 1).trim();
338
+ if (!path.startsWith('/'))
339
+ continue;
340
+ out.push({ node, method, segs: path.split('/').filter((s) => s.length > 0) });
341
+ }
342
+ return out;
343
+ }
344
+ const PARAM_SEG = /^(?::|\{|\[|<|\*)|\?$/;
345
+ const CATCH_ALL = /^(?:\*|\[\.\.\.|\{\*|:[\w$]+\*$|\{[\w$]+:\*\}|\*[\w$]*$)/;
346
+ /** How well the client's segments match a route's; null when they do not. A literal match beats a parameter's. */
347
+ function scorePath(client, route) {
348
+ let score = 0;
349
+ let i = 0;
350
+ for (let r = 0; r < route.length; r++) {
351
+ const seg = route[r];
352
+ if (CATCH_ALL.test(seg)) {
353
+ if (i >= client.length)
354
+ return null;
355
+ score += client.length - i;
356
+ i = client.length;
357
+ continue;
358
+ }
359
+ if (i >= client.length)
360
+ return null;
361
+ const c = client[i];
362
+ // A hole (`${id}`) fills a route's parameter; it never stands in for a
363
+ // literal segment — `/api/products/${id}` is not `/api/products/top`.
364
+ if (PARAM_SEG.test(seg))
365
+ score += 2;
366
+ else if (c === seg)
367
+ score += 3;
368
+ else
369
+ return null;
370
+ i++;
371
+ }
372
+ return i === client.length ? score : null;
373
+ }
374
+ function matchHttp(site, routes) {
375
+ let best = null;
376
+ let bestScore = -1;
377
+ let tied = false;
378
+ for (const r of routes) {
379
+ if (r.method !== 'ALL' && r.method !== 'ANY' && r.method !== site.method)
380
+ continue;
381
+ let score;
382
+ if (site.suffix) {
383
+ // A base URL hides a prefix the route may spell out (`${API}/users` for
384
+ // `GET /api/users`) — but a one-segment tail names half the routes in
385
+ // an index, and a long hidden prefix is a different API. Two segments
386
+ // of tail at least, two of prefix at most.
387
+ if (site.segs.length < 2 || r.segs.length < site.segs.length || r.segs.length - site.segs.length > 2)
388
+ continue;
389
+ score = scorePath(site.segs, r.segs.slice(r.segs.length - site.segs.length));
390
+ }
391
+ else
392
+ score = scorePath(site.segs, r.segs);
393
+ if (score === null)
394
+ continue;
395
+ if (score > bestScore) {
396
+ best = r;
397
+ bestScore = score;
398
+ tied = false;
399
+ }
400
+ else if (score === bestScore)
401
+ tied = true;
402
+ }
403
+ return tied ? null : best;
404
+ }
405
+ /**
406
+ * The path a client call names, as segments, with `${…}` as `*`; `suffix`
407
+ * when a base URL came first. Null when the path is not literal enough: a
408
+ * relative path with no base, or nothing but holes.
409
+ */
410
+ function clientPath(raw, baseURL) {
411
+ let p = raw;
412
+ const cut = p.search(/[?#]/);
413
+ if (cut >= 0)
414
+ p = p.slice(0, cut);
415
+ let suffix = false;
416
+ const absolute = /^(?:[a-z][a-z0-9+.-]*:)?\/\/[^/]*(\/.*)?$/i.exec(p);
417
+ if (absolute)
418
+ p = absolute[1] ?? '/';
419
+ else if (!p.startsWith('/')) {
420
+ if (p.startsWith(expo_router_1.HOLE)) {
421
+ const rest = p.slice(1);
422
+ if (!rest.startsWith('/'))
423
+ return null;
424
+ p = rest;
425
+ suffix = true;
426
+ }
427
+ else if (baseURL !== null) {
428
+ const base = clientPath(baseURL, null);
429
+ if (!base) {
430
+ // A base that is itself a hole: match by the tail.
431
+ if (!baseURL.includes(expo_router_1.HOLE))
432
+ return null;
433
+ suffix = true;
434
+ p = '/' + p;
435
+ }
436
+ else {
437
+ suffix = base.suffix;
438
+ p = '/' + [...base.segs, ...p.split('/')].filter(Boolean).join('/');
439
+ }
440
+ }
441
+ else
442
+ return null;
443
+ }
444
+ else if (baseURL !== null) {
445
+ // An instance with a literal path base: axios joins `baseURL + url`.
446
+ const base = clientPath(baseURL, null);
447
+ if (base && base.segs.length > 0) {
448
+ suffix = base.suffix;
449
+ p = '/' + [...base.segs, ...p.split('/')].filter(Boolean).join('/');
450
+ }
451
+ else if (!base && baseURL.includes(expo_router_1.HOLE))
452
+ suffix = true;
453
+ }
454
+ const segs = p
455
+ .split('/')
456
+ .filter((s) => s.length > 0)
457
+ .map((s) => (s.includes(expo_router_1.HOLE) ? '*' : s));
458
+ if (segs.length > 0 && segs.every((s) => s === '*'))
459
+ return null;
460
+ return { segs, suffix, display: '/' + segs.map((s) => (s === '*' ? '${…}' : s)).join('/') };
461
+ }
462
+ /** What a member-call receiver is: a client (with its base URL), or nothing. */
463
+ function clientFor(ctx, facts, receiver, cache) {
464
+ const chain = receiver.replace(/\s+/g, '').replace(/^this\./, '').split('.');
465
+ const head = chain[0];
466
+ const last = chain[chain.length - 1];
467
+ const local = facts.clients.get(head);
468
+ if (local)
469
+ return local;
470
+ const imported = importedFacts(ctx, facts, head, cache);
471
+ if (imported) {
472
+ const bound = imported.isDefault ? imported.facts.defaultClient : imported.facts.clients.get(imported.exportedName) ?? null;
473
+ if (bound)
474
+ return bound;
475
+ }
476
+ if (SERVER_NAMES.test(last) || SERVER_NAMES.test(head))
477
+ return null;
478
+ if (CLIENT_NAMES.test(last))
479
+ return { baseURL: null };
480
+ return null;
481
+ }
482
+ function collectHttpSites(ctx, facts, sites, cache) {
483
+ const { safe, nodes, lineOf } = facts;
484
+ const add = (index, open, verb, baseURL) => {
485
+ const line = lineOf(index);
486
+ const callee = safe.slice(index, open).replace(/\s+/g, '').replace(/<.*>$/, '');
487
+ if (facts.routeLines.has(line))
488
+ return; // a registration the resolver already read
489
+ const fn = (0, synth_utils_1.enclosingFn)(nodes, line);
490
+ if (!fn)
491
+ return;
492
+ const args = argumentsAt(safe, open);
493
+ if (!args || !args[0])
494
+ return;
495
+ let first = args[0];
496
+ let method = verb;
497
+ // `axios({ url, method })`, `.request({ url, method })`, `ky(url, { method })`.
498
+ if (first.trimStart().startsWith('{')) {
499
+ const url = /\burl\s*:\s*/.exec(first);
500
+ if (!url)
501
+ return;
502
+ method = method ?? methodIn(first) ?? 'GET';
503
+ first = first.slice(url.index + url[0].length);
504
+ }
505
+ else if (method === null) {
506
+ method = methodIn(args.slice(1).join(',')) ?? 'GET';
507
+ }
508
+ const literal = leadingString(first);
509
+ if (literal === null)
510
+ return;
511
+ const path = clientPath(literal, baseURL);
512
+ if (!path)
513
+ return;
514
+ sites.push({ fn, file: facts.file, line, column: facts.columnOf(index), callee, method, segs: path.segs, suffix: path.suffix, display: path.display });
515
+ };
516
+ BARE_CLIENT_CALL.lastIndex = 0;
517
+ let m;
518
+ while ((m = BARE_CLIENT_CALL.exec(safe)) !== null) {
519
+ // `this.fetch(…)` / `repo.fetch(…)` is a project method, not the platform's.
520
+ const before = safe[m.index - 1];
521
+ if (before === '.' && !/^(?:window|globalThis|global)\s*\./.test(m[0]))
522
+ continue;
523
+ add(m.index, m.index + m[0].length - 1, null, null);
524
+ }
525
+ MEMBER_CLIENT_CALL.lastIndex = 0;
526
+ while ((m = MEMBER_CLIENT_CALL.exec(safe)) !== null) {
527
+ const client = clientFor(ctx, facts, m[1], cache);
528
+ if (!client)
529
+ continue;
530
+ const verb = m[2].replace(/^\$/, '').toUpperCase();
531
+ add(m.index, m.index + m[0].length - 1, verb === 'REQUEST' ? null : verb, client.baseURL);
532
+ }
533
+ }
534
+ // =============================================================================
535
+ // 2. Queue job → consumer
536
+ // =============================================================================
537
+ const QUEUE_ADD = /((?:this\s*\.\s*)?[A-Za-z_$][\w$]*(?:\s*\.\s*[A-Za-z_$][\w$]*)*)\s*\.\s*add\s*\(\s*(['"`])([^'"`]+)\2/g;
538
+ const QUEUE_SHAPED = /queue|jobs?$|worker|bull|flow|producer/i;
539
+ const NEW_WORKER = /\bnew\s+Worker\s*(?:<[^>]*>)?\s*\(\s*(['"`])([^'"`]+)\1\s*,\s*/g;
540
+ const QUEUE_PROCESS = /((?:this\s*\.\s*)?[A-Za-z_$][\w$]*(?:\s*\.\s*[A-Za-z_$][\w$]*)*)\s*\.\s*process\s*\(\s*(?:(['"`])([^'"`]+)\2\s*,\s*)?(?:\d+\s*,\s*)?/g;
541
+ /** A handler argument: a named function (group 1), or an inline function. */
542
+ const HANDLER_ARG = /^(?:(?:async\s+)?([A-Za-z_$][\w$.]*)\s*(?:[,)]|$)|(?:async\s*)?(?:\(|function\b|[A-Za-z_$][\w$]*\s*=>))/;
543
+ /** The queue a receiver is bound to, by its binding in this file or the file it is imported from. */
544
+ function queueFor(ctx, facts, receiver, cache) {
545
+ const chain = receiver.replace(/\s+/g, '').replace(/^this\./, '').split('.');
546
+ const head = chain[0];
547
+ const own = facts.queues.get(head);
548
+ if (own)
549
+ return own;
550
+ const imported = importedFacts(ctx, facts, head, cache);
551
+ if (imported) {
552
+ const bound = imported.facts.queues.get(imported.exportedName);
553
+ if (bound)
554
+ return bound;
555
+ }
556
+ return null;
557
+ }
558
+ /** The function a handler argument names or encloses; null when it is neither. */
559
+ function handlerNode(ctx, facts, text, line, cache) {
560
+ const m = HANDLER_ARG.exec(text.trimStart());
561
+ if (!m)
562
+ return null;
563
+ if (m[1]) {
564
+ const name = m[1].split('.').pop();
565
+ const candidates = ctx.getNodesByName(name).filter((n) => n.kind === 'function' || n.kind === 'method');
566
+ const local = candidates.filter((n) => n.filePath === facts.file);
567
+ if (local.length === 1)
568
+ return local[0];
569
+ if (local.length > 1)
570
+ return null;
571
+ const imported = importedFacts(ctx, facts, m[1].split('.')[0], cache);
572
+ if (imported) {
573
+ const viaImport = candidates.filter((n) => n.filePath === imported.facts.file);
574
+ if (viaImport.length === 1)
575
+ return viaImport[0];
576
+ }
577
+ return candidates.length === 1 ? candidates[0] : null;
578
+ }
579
+ return (0, synth_utils_1.enclosingFn)(facts.nodes, line) ?? (0, synth_utils_1.enclosingValue)(facts.nodes, line);
580
+ }
581
+ /** The nearest class declared at or after `index`, as its node. */
582
+ function classAfter(facts, index) {
583
+ const m = /\bclass\s+([A-Za-z_$][\w$]*)/g;
584
+ m.lastIndex = index;
585
+ const hit = m.exec(facts.safe);
586
+ if (!hit)
587
+ return null;
588
+ const line = facts.lineOf(hit.index);
589
+ return facts.nodes.find((n) => n.kind === 'class' && n.name === hit[1] && n.startLine >= line - 2) ?? null;
590
+ }
591
+ /** The method node a decorator at `end` sits on, inside `cls` when given. */
592
+ function decoratedMethod(facts, end, cls) {
593
+ const named = methodNameAfter(facts.safe, end);
594
+ if (!named)
595
+ return null;
596
+ const line = facts.lineOf(named.index);
597
+ return (facts.nodes.find((n) => (n.kind === 'method' || n.kind === 'function') &&
598
+ n.name === named.name &&
599
+ n.startLine >= line - 1 &&
600
+ n.startLine <= line + 1 &&
601
+ (!cls || (n.startLine >= cls.startLine && n.endLine <= cls.endLine))) ?? null);
602
+ }
603
+ function collectQueue(ctx, facts, producers, consumers, cache) {
604
+ const { safe, nodes, lineOf } = facts;
605
+ let m;
606
+ QUEUE_ADD.lastIndex = 0;
607
+ while ((m = QUEUE_ADD.exec(safe)) !== null) {
608
+ const receiver = m[1];
609
+ const queue = queueFor(ctx, facts, receiver, cache);
610
+ const last = receiver.replace(/\s+/g, '').split('.').pop();
611
+ if (queue === null && !QUEUE_SHAPED.test(last))
612
+ continue;
613
+ const line = lineOf(m.index);
614
+ const fn = (0, synth_utils_1.enclosingFn)(nodes, line);
615
+ if (!fn)
616
+ continue;
617
+ producers.push({ fn, file: facts.file, line, column: facts.columnOf(m.index), callee: `${receiver.replace(/\s+/g, '')}.add`, queue, job: m[3] });
618
+ }
619
+ // Nest: `@Processor('email')` on a class; `@Process('welcome')` on its methods,
620
+ // or a WorkerHost's `process(job)`.
621
+ for (const proc of decorators(safe, 'Processor')) {
622
+ const queue = firstLiteral(proc.args);
623
+ const cls = classAfter(facts, proc.end);
624
+ if (!cls)
625
+ continue;
626
+ let any = false;
627
+ for (const job of decorators(safe, 'Process')) {
628
+ const line = lineOf(job.index);
629
+ if (line < cls.startLine || line > cls.endLine)
630
+ continue;
631
+ const method = decoratedMethod(facts, job.end, cls);
632
+ if (!method)
633
+ continue;
634
+ any = true;
635
+ consumers.push({ node: method, file: facts.file, line, queue, job: firstLiteral(job.args) });
636
+ }
637
+ if (!any) {
638
+ const process = nodes.find((n) => n.kind === 'method' && n.name === 'process' && n.startLine >= cls.startLine && n.endLine <= cls.endLine);
639
+ if (process)
640
+ consumers.push({ node: process, file: facts.file, line: process.startLine, queue, job: null });
641
+ }
642
+ }
643
+ // BullMQ: `new Worker('email', handler)`.
644
+ NEW_WORKER.lastIndex = 0;
645
+ while ((m = NEW_WORKER.exec(safe)) !== null) {
646
+ const line = lineOf(m.index);
647
+ const node = handlerNode(ctx, facts, safe.slice(m.index + m[0].length, m.index + m[0].length + 200), line, cache);
648
+ if (!node)
649
+ continue;
650
+ consumers.push({ node, file: facts.file, line, queue: m[2], job: null });
651
+ }
652
+ // Bull: `queue.process('welcome', handler)` / `queue.process(handler)`.
653
+ QUEUE_PROCESS.lastIndex = 0;
654
+ while ((m = QUEUE_PROCESS.exec(safe)) !== null) {
655
+ const receiver = m[1];
656
+ const queue = queueFor(ctx, facts, receiver, cache);
657
+ const last = receiver.replace(/\s+/g, '').split('.').pop();
658
+ if (queue === null && !QUEUE_SHAPED.test(last))
659
+ continue;
660
+ const line = lineOf(m.index);
661
+ const node = handlerNode(ctx, facts, safe.slice(m.index + m[0].length, m.index + m[0].length + 200), line, cache);
662
+ if (!node)
663
+ continue;
664
+ consumers.push({ node, file: facts.file, line, queue, job: m[3] ?? null });
665
+ }
666
+ }
667
+ function pairQueue(producers, consumers, edges, seen) {
668
+ for (const p of producers) {
669
+ let candidates = consumers.filter((c) => (p.queue === null || c.queue === null || c.queue === p.queue) && (c.job === null || c.job === p.job));
670
+ // The most specific pairing wins: the job by name on the named queue,
671
+ // then the job by name, then the queue's default consumer.
672
+ const exact = candidates.filter((c) => c.job === p.job && c.queue === p.queue && p.queue !== null);
673
+ if (exact.length > 0)
674
+ candidates = exact;
675
+ else {
676
+ const byJob = candidates.filter((c) => c.job === p.job);
677
+ if (byJob.length > 0)
678
+ candidates = byJob;
679
+ else if (p.queue === null)
680
+ continue; // an unnamed queue and no consumer naming the job: a guess
681
+ else
682
+ candidates = candidates.filter((c) => c.queue === p.queue);
683
+ }
684
+ if (candidates.length === 0 || candidates.length > EVENT_FANOUT_CAP)
685
+ continue;
686
+ for (const c of candidates) {
687
+ if (c.node.id === p.fn.id)
688
+ continue;
689
+ const key = `${p.fn.id}>${c.node.id}`;
690
+ if (seen.has(key))
691
+ continue;
692
+ seen.add(key);
693
+ edges.push({
694
+ source: p.fn.id,
695
+ target: c.node.id,
696
+ kind: 'calls',
697
+ line: p.line,
698
+ column: p.column,
699
+ provenance: 'heuristic',
700
+ metadata: {
701
+ synthesizedBy: 'queue-job',
702
+ channel: 'queue',
703
+ callee: p.callee,
704
+ event: p.job,
705
+ ...(p.queue ?? c.queue ? { queue: p.queue ?? c.queue } : {}),
706
+ registeredAt: `${c.file}:${c.line}`,
707
+ },
708
+ });
709
+ }
710
+ }
711
+ }
712
+ // =============================================================================
713
+ // 3. Events: a bus, and sockets both ways
714
+ // =============================================================================
715
+ const EMIT = /((?:[\w$]+(?:\([^()]*\))?\s*\.\s*)*[\w$]+)\s*\.\s*(emit|emitAsync)\s*\(\s*(['"`])([^'"`\n]+)\3/g;
716
+ const SOCKET_ON = /((?:[\w$]+(?:\([^()]*\))?\s*\.\s*)*[\w$]+)\s*\.\s*(?:on|once)\s*\(\s*(['"`])([^'"`\n]+)\2\s*,\s*/g;
717
+ const SOCKET_WORDS = /^(?:socket|io|ws|wss|client|server|namespace|nsp|conn|connection|gateway|broadcast|to|in|of|except|volatile|local|sockets|socketServer|wsServer|room|channel|pusher|ably|ioClient|socketClient|sock)$/;
718
+ const BUS_WORDS = /^(?:eventEmitter|emitter|events|eventBus|bus|dispatcher|pubsub|publisher|eventPublisher|ee|hub|mediator|broker|messageBus|appEvents|domainEvents|eventsService|eventService)$/;
719
+ /** The transport's own events — every socket emits and handles them; pairing them says nothing. */
720
+ const GENERIC_EVENT = /^(?:error|connect|connect_error|connect_failed|connection|disconnect|disconnecting|reconnect|reconnect_attempt|reconnecting|reconnect_error|reconnect_failed|close|open|end|data|ready|drain|finish|pipe|unpipe|listening|timeout|ping|pong|upgrade|newListener|removeListener)$/;
721
+ function shapeOf(receiver) {
722
+ const segs = receiver.replace(/\([^()]*\)/g, '').replace(/\s+/g, '').split('.').filter((s) => s !== 'this');
723
+ if (segs.some((s) => SOCKET_WORDS.test(s)))
724
+ return 'socket';
725
+ if (segs.some((s) => BUS_WORDS.test(s)))
726
+ return 'bus';
727
+ return null;
728
+ }
729
+ function collectEvents(ctx, facts, dispatches, handlers, cache) {
730
+ const { safe, nodes, lineOf } = facts;
731
+ const side = facts.socketServer ? 'server' : 'client';
732
+ let m;
733
+ EMIT.lastIndex = 0;
734
+ while ((m = EMIT.exec(safe)) !== null) {
735
+ const shape = shapeOf(m[1]);
736
+ if (!shape || GENERIC_EVENT.test(m[4]))
737
+ continue;
738
+ const line = lineOf(m.index);
739
+ const fn = (0, synth_utils_1.enclosingFn)(nodes, line);
740
+ if (!fn)
741
+ continue;
742
+ dispatches.push({ fn, file: facts.file, line, column: facts.columnOf(m.index), callee: `${m[1].replace(/\s+/g, '')}.${m[2]}`, event: m[4], shape, side });
743
+ }
744
+ for (const d of decorators(safe, 'OnEvent')) {
745
+ const method = decoratedMethod(facts, d.end, null);
746
+ if (!method)
747
+ continue;
748
+ const patterns = d.args.trimStart().startsWith('[') ? allLiterals(d.args) : [firstLiteral(d.args)].filter((x) => x !== null);
749
+ for (const pattern of patterns)
750
+ handlers.push({ node: method, file: facts.file, line: lineOf(d.index), pattern, kind: 'bus', side });
751
+ }
752
+ for (const d of decorators(safe, 'SubscribeMessage')) {
753
+ const method = decoratedMethod(facts, d.end, null);
754
+ const event = firstLiteral(d.args);
755
+ if (!method || event === null)
756
+ continue;
757
+ handlers.push({ node: method, file: facts.file, line: lineOf(d.index), pattern: event, kind: 'socket', side: 'server' });
758
+ }
759
+ SOCKET_ON.lastIndex = 0;
760
+ while ((m = SOCKET_ON.exec(safe)) !== null) {
761
+ if (shapeOf(m[1]) !== 'socket' || GENERIC_EVENT.test(m[3]))
762
+ continue;
763
+ const line = lineOf(m.index);
764
+ const node = handlerNode(ctx, facts, safe.slice(m.index + m[0].length, m.index + m[0].length + 200), line, cache);
765
+ if (!node)
766
+ continue;
767
+ handlers.push({ node, file: facts.file, line, pattern: m[3], kind: 'socket', side });
768
+ }
769
+ }
770
+ /** `user.*` matches one segment, `**` any; anything else is exact. */
771
+ function eventMatches(pattern, event) {
772
+ if (pattern === event)
773
+ return true;
774
+ if (!pattern.includes('*'))
775
+ return false;
776
+ const re = new RegExp('^' + pattern.split('**').map((part) => part.split('*').map(escapeRe).join('[^.]+')).join('.*') + '$');
777
+ return re.test(event);
778
+ }
779
+ function escapeRe(s) {
780
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
781
+ }
782
+ function pairEvents(dispatches, handlers, edges, seen) {
783
+ // Fan-out is judged per event name on each side, as the emitter pass does.
784
+ const dispatchesByEvent = new Map();
785
+ for (const d of dispatches)
786
+ dispatchesByEvent.set(`${d.shape}:${d.event}`, [...(dispatchesByEvent.get(`${d.shape}:${d.event}`) ?? []), d]);
787
+ for (const [, group] of dispatchesByEvent) {
788
+ if (group.length > EVENT_FANOUT_CAP)
789
+ continue;
790
+ for (const d of group) {
791
+ let matched;
792
+ let tier = null;
793
+ if (d.shape === 'bus')
794
+ matched = handlers.filter((h) => h.kind === 'bus' && eventMatches(h.pattern, d.event));
795
+ else if (d.side === 'client') {
796
+ matched = handlers.filter((h) => h.kind === 'socket' && h.side === 'server' && h.pattern === d.event);
797
+ tier = exports.TIER_CLIENT_TO_SERVER;
798
+ }
799
+ else {
800
+ matched = handlers.filter((h) => h.kind === 'socket' && h.side === 'client' && h.pattern === d.event);
801
+ tier = exports.TIER_SERVER_TO_CLIENT;
802
+ }
803
+ if (matched.length === 0 || matched.length > EVENT_FANOUT_CAP)
804
+ continue;
805
+ for (const h of matched) {
806
+ if (h.node.id === d.fn.id)
807
+ continue;
808
+ const key = `${d.fn.id}>${h.node.id}`;
809
+ if (seen.has(key))
810
+ continue;
811
+ seen.add(key);
812
+ edges.push({
813
+ source: d.fn.id,
814
+ target: h.node.id,
815
+ kind: 'calls',
816
+ line: d.line,
817
+ column: d.column,
818
+ provenance: 'heuristic',
819
+ metadata: {
820
+ synthesizedBy: 'event-bus',
821
+ channel: d.shape === 'bus' ? 'event' : 'socket',
822
+ callee: d.callee,
823
+ event: d.event,
824
+ ...(tier ? { tier } : {}),
825
+ registeredAt: `${h.file}:${h.line}`,
826
+ },
827
+ });
828
+ }
829
+ }
830
+ }
831
+ }
832
+ // =============================================================================
833
+ // The pass
834
+ // =============================================================================
835
+ const HTTP_GATE = /\b(?:fetch|\$fetch|ofetch|axios|ky|got|useFetch|useSWR)\b|\.\s*(?:get|post|put|patch|delete|head|options|request|\$get|\$post)\s*[<(]/;
836
+ const QUEUE_GATE = /\.\s*add\s*\(|@Processor\s*\(|\bnew\s+Worker\s*[<(]|\.\s*process\s*\(/;
837
+ const EVENT_GATE = /\.\s*(?:emit|emitAsync|on|once)\s*\(|@OnEvent\s*\(|@SubscribeMessage\s*\(/;
838
+ async function crossTierEdges(ctx, onYield) {
839
+ const routes = httpRoutes(ctx);
840
+ const httpSites = [];
841
+ const producers = [];
842
+ const consumers = [];
843
+ const dispatches = [];
844
+ const handlers = [];
845
+ const cache = new Map();
846
+ let scanned = 0;
847
+ for (const file of ctx.getAllFiles()) {
848
+ if (!JS_FILE.test(file) || (0, query_utils_1.isTestPath)(file) || (0, generated_detection_1.isGeneratedFile)(file))
849
+ continue;
850
+ if ((++scanned & 63) === 0)
851
+ await onYield();
852
+ const content = ctx.readFile(file);
853
+ if (!content)
854
+ continue;
855
+ const wantsHttp = routes.length > 0 && HTTP_GATE.test(content);
856
+ const wantsQueue = QUEUE_GATE.test(content);
857
+ const wantsEvents = EVENT_GATE.test(content);
858
+ if (!wantsHttp && !wantsQueue && !wantsEvents)
859
+ continue;
860
+ let facts = cache.get(file);
861
+ if (facts === undefined) {
862
+ facts = readFacts(ctx, file);
863
+ cache.set(file, facts);
864
+ }
865
+ if (!facts)
866
+ continue;
867
+ if (wantsHttp)
868
+ collectHttpSites(ctx, facts, httpSites, cache);
869
+ if (wantsQueue)
870
+ collectQueue(ctx, facts, producers, consumers, cache);
871
+ if (wantsEvents)
872
+ collectEvents(ctx, facts, dispatches, handlers, cache);
873
+ }
874
+ const edges = [];
875
+ const seen = new Set();
876
+ for (const site of httpSites) {
877
+ const route = matchHttp(site, routes);
878
+ if (!route || route.node.id === site.fn.id)
879
+ continue;
880
+ const key = `${site.fn.id}>${route.node.id}`;
881
+ if (seen.has(key))
882
+ continue;
883
+ seen.add(key);
884
+ edges.push({
885
+ source: site.fn.id,
886
+ target: route.node.id,
887
+ kind: 'calls',
888
+ line: site.line,
889
+ column: site.column,
890
+ provenance: 'heuristic',
891
+ metadata: {
892
+ synthesizedBy: 'http-client',
893
+ channel: 'http',
894
+ callee: site.callee,
895
+ tier: exports.TIER_CLIENT_TO_SERVER,
896
+ method: site.method,
897
+ href: site.display,
898
+ registeredAt: `${route.node.filePath}:${route.node.startLine}`,
899
+ },
900
+ });
901
+ }
902
+ await onYield();
903
+ pairQueue(producers, consumers, edges, seen);
904
+ pairEvents(dispatches, handlers, edges, seen);
905
+ return edges;
906
+ }
907
+ //# sourceMappingURL=tier-synthesizer.js.map