homegraph 1.4.1 → 1.5.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 (332) hide show
  1. package/README.md +48 -11
  2. package/dist/bin/homegraph.js +295 -72
  3. package/dist/bin/homegraph.js.map +1 -1
  4. package/dist/context/index.d.ts.map +1 -1
  5. package/dist/context/index.js +32 -11
  6. package/dist/context/index.js.map +1 -1
  7. package/dist/db/index.d.ts +143 -1
  8. package/dist/db/index.d.ts.map +1 -1
  9. package/dist/db/index.js +293 -16
  10. package/dist/db/index.js.map +1 -1
  11. package/dist/db/queries.d.ts +43 -4
  12. package/dist/db/queries.d.ts.map +1 -1
  13. package/dist/db/queries.js +138 -14
  14. package/dist/db/queries.js.map +1 -1
  15. package/dist/db/sqlite-adapter.d.ts +24 -17
  16. package/dist/db/sqlite-adapter.d.ts.map +1 -1
  17. package/dist/db/sqlite-adapter.js +292 -36
  18. package/dist/db/sqlite-adapter.js.map +1 -1
  19. package/dist/db/wal-valve.d.ts +15 -2
  20. package/dist/db/wal-valve.d.ts.map +1 -1
  21. package/dist/db/wal-valve.js +88 -6
  22. package/dist/db/wal-valve.js.map +1 -1
  23. package/dist/extraction/arkts-batch-worker.js +3 -2
  24. package/dist/extraction/arkts-batch-worker.js.map +1 -1
  25. package/dist/extraction/default-ignore.d.ts +39 -0
  26. package/dist/extraction/default-ignore.d.ts.map +1 -0
  27. package/dist/extraction/default-ignore.js +221 -0
  28. package/dist/extraction/default-ignore.js.map +1 -0
  29. package/dist/extraction/index.d.ts +9 -10
  30. package/dist/extraction/index.d.ts.map +1 -1
  31. package/dist/extraction/index.js +227 -323
  32. package/dist/extraction/index.js.map +1 -1
  33. package/dist/extraction/languages/arkts.d.ts +90 -6
  34. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  35. package/dist/extraction/languages/arkts.js +1579 -128
  36. package/dist/extraction/languages/arkts.js.map +1 -1
  37. package/dist/extraction/store-worker.d.ts +20 -0
  38. package/dist/extraction/store-worker.d.ts.map +1 -0
  39. package/dist/extraction/store-worker.js +102 -0
  40. package/dist/extraction/store-worker.js.map +1 -0
  41. package/dist/extraction/store-writer.d.ts +48 -0
  42. package/dist/extraction/store-writer.d.ts.map +1 -0
  43. package/dist/extraction/store-writer.js +167 -0
  44. package/dist/extraction/store-writer.js.map +1 -0
  45. package/dist/extraction/tree-sitter.d.ts.map +1 -1
  46. package/dist/extraction/tree-sitter.js +47 -0
  47. package/dist/extraction/tree-sitter.js.map +1 -1
  48. package/dist/extraction/wasm-runtime-flags.d.ts +14 -4
  49. package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -1
  50. package/dist/extraction/wasm-runtime-flags.js +55 -7
  51. package/dist/extraction/wasm-runtime-flags.js.map +1 -1
  52. package/dist/index.d.ts +16 -5
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +135 -97
  55. package/dist/index.js.map +1 -1
  56. package/dist/mcp/query-worker.d.ts +2 -2
  57. package/dist/mcp/query-worker.js +2 -2
  58. package/dist/mcp/tools.d.ts.map +1 -1
  59. package/dist/mcp/tools.js +42 -26
  60. package/dist/mcp/tools.js.map +1 -1
  61. package/dist/resolution/callback-synthesizer.d.ts +52 -16
  62. package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  63. package/dist/resolution/callback-synthesizer.js +234 -180
  64. package/dist/resolution/callback-synthesizer.js.map +1 -1
  65. package/dist/resolution/cooperative-yield.d.ts +10 -2
  66. package/dist/resolution/cooperative-yield.d.ts.map +1 -1
  67. package/dist/resolution/cooperative-yield.js +6 -4
  68. package/dist/resolution/cooperative-yield.js.map +1 -1
  69. package/dist/resolution/frameworks/go.d.ts.map +1 -1
  70. package/dist/resolution/frameworks/go.js +29 -6
  71. package/dist/resolution/frameworks/go.js.map +1 -1
  72. package/dist/resolution/import-resolver.d.ts +2 -3
  73. package/dist/resolution/import-resolver.d.ts.map +1 -1
  74. package/dist/resolution/import-resolver.js +166 -7
  75. package/dist/resolution/import-resolver.js.map +1 -1
  76. package/dist/resolution/index.d.ts +87 -2
  77. package/dist/resolution/index.d.ts.map +1 -1
  78. package/dist/resolution/index.js +739 -131
  79. package/dist/resolution/index.js.map +1 -1
  80. package/dist/resolution/memory-budget.d.ts +48 -0
  81. package/dist/resolution/memory-budget.d.ts.map +1 -0
  82. package/dist/resolution/memory-budget.js +162 -0
  83. package/dist/resolution/memory-budget.js.map +1 -0
  84. package/dist/resolution/name-matcher.d.ts +12 -1
  85. package/dist/resolution/name-matcher.d.ts.map +1 -1
  86. package/dist/resolution/name-matcher.js +439 -97
  87. package/dist/resolution/name-matcher.js.map +1 -1
  88. package/dist/resolution/resolver-pool.d.ts +106 -0
  89. package/dist/resolution/resolver-pool.d.ts.map +1 -0
  90. package/dist/resolution/resolver-pool.js +344 -0
  91. package/dist/resolution/resolver-pool.js.map +1 -0
  92. package/dist/resolution/resolver-worker.d.ts +17 -0
  93. package/dist/resolution/resolver-worker.d.ts.map +1 -0
  94. package/dist/resolution/resolver-worker.js +141 -0
  95. package/dist/resolution/resolver-worker.js.map +1 -0
  96. package/dist/resolution/types.d.ts +3 -0
  97. package/dist/resolution/types.d.ts.map +1 -1
  98. package/dist/spec/build/diff-parser.d.ts +55 -0
  99. package/dist/spec/build/diff-parser.d.ts.map +1 -0
  100. package/dist/spec/build/diff-parser.js +205 -0
  101. package/dist/spec/build/diff-parser.js.map +1 -0
  102. package/dist/spec/build/git-scanner.d.ts +93 -0
  103. package/dist/spec/build/git-scanner.d.ts.map +1 -0
  104. package/dist/spec/build/git-scanner.js +254 -0
  105. package/dist/spec/build/git-scanner.js.map +1 -0
  106. package/dist/spec/build/pipeline.d.ts +54 -0
  107. package/dist/spec/build/pipeline.d.ts.map +1 -0
  108. package/dist/spec/build/pipeline.js +170 -0
  109. package/dist/spec/build/pipeline.js.map +1 -0
  110. package/dist/spec/build/scan.d.ts +48 -0
  111. package/dist/spec/build/scan.d.ts.map +1 -0
  112. package/dist/spec/build/scan.js +89 -0
  113. package/dist/spec/build/scan.js.map +1 -0
  114. package/dist/spec/build/scope-resolver.d.ts +50 -0
  115. package/dist/spec/build/scope-resolver.d.ts.map +1 -0
  116. package/dist/spec/build/scope-resolver.js +105 -0
  117. package/dist/spec/build/scope-resolver.js.map +1 -0
  118. package/dist/spec/build/spec-extractor.d.ts +74 -0
  119. package/dist/spec/build/spec-extractor.d.ts.map +1 -0
  120. package/dist/spec/build/spec-extractor.js +344 -0
  121. package/dist/spec/build/spec-extractor.js.map +1 -0
  122. package/dist/spec/config.d.ts +35 -1
  123. package/dist/spec/config.d.ts.map +1 -1
  124. package/dist/spec/config.js +30 -5
  125. package/dist/spec/config.js.map +1 -1
  126. package/dist/spec/db/fts.d.ts.map +1 -1
  127. package/dist/spec/db/fts.js +19 -50
  128. package/dist/spec/db/fts.js.map +1 -1
  129. package/dist/spec/db/index.d.ts +5 -3
  130. package/dist/spec/db/index.d.ts.map +1 -1
  131. package/dist/spec/db/index.js +16 -1
  132. package/dist/spec/db/index.js.map +1 -1
  133. package/dist/spec/db/persist.d.ts +45 -0
  134. package/dist/spec/db/persist.d.ts.map +1 -0
  135. package/dist/spec/db/persist.js +66 -0
  136. package/dist/spec/db/persist.js.map +1 -0
  137. package/dist/spec/db/relations.d.ts +80 -1
  138. package/dist/spec/db/relations.d.ts.map +1 -1
  139. package/dist/spec/db/relations.js +175 -4
  140. package/dist/spec/db/relations.js.map +1 -1
  141. package/dist/spec/db/schema.d.ts +4 -0
  142. package/dist/spec/db/schema.d.ts.map +1 -1
  143. package/dist/spec/db/schema.js +4 -0
  144. package/dist/spec/db/schema.js.map +1 -1
  145. package/dist/spec/db/schema.sql +5 -1
  146. package/dist/spec/db/spec-node.d.ts +5 -0
  147. package/dist/spec/db/spec-node.d.ts.map +1 -1
  148. package/dist/spec/db/spec-node.js +11 -5
  149. package/dist/spec/db/spec-node.js.map +1 -1
  150. package/dist/spec/db/sql-utils.d.ts +11 -0
  151. package/dist/spec/db/sql-utils.d.ts.map +1 -0
  152. package/dist/spec/db/sql-utils.js +19 -0
  153. package/dist/spec/db/sql-utils.js.map +1 -0
  154. package/dist/spec/evolve/cluster-context.d.ts +30 -0
  155. package/dist/spec/evolve/cluster-context.d.ts.map +1 -0
  156. package/dist/spec/evolve/cluster-context.js +78 -0
  157. package/dist/spec/evolve/cluster-context.js.map +1 -0
  158. package/dist/spec/evolve/commit-spec-analyzer.d.ts +51 -0
  159. package/dist/spec/evolve/commit-spec-analyzer.d.ts.map +1 -0
  160. package/dist/spec/evolve/commit-spec-analyzer.js +88 -0
  161. package/dist/spec/evolve/commit-spec-analyzer.js.map +1 -0
  162. package/dist/spec/evolve/commit-spec-persister.d.ts +53 -0
  163. package/dist/spec/evolve/commit-spec-persister.d.ts.map +1 -0
  164. package/dist/spec/evolve/commit-spec-persister.js +93 -0
  165. package/dist/spec/evolve/commit-spec-persister.js.map +1 -0
  166. package/dist/spec/evolve/impact-locator.d.ts +23 -7
  167. package/dist/spec/evolve/impact-locator.d.ts.map +1 -1
  168. package/dist/spec/evolve/impact-locator.js +58 -14
  169. package/dist/spec/evolve/impact-locator.js.map +1 -1
  170. package/dist/spec/evolve/pipeline.d.ts +62 -25
  171. package/dist/spec/evolve/pipeline.d.ts.map +1 -1
  172. package/dist/spec/evolve/pipeline.js +436 -457
  173. package/dist/spec/evolve/pipeline.js.map +1 -1
  174. package/dist/spec/evolve/spec-rewriter.d.ts +13 -13
  175. package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -1
  176. package/dist/spec/evolve/spec-rewriter.js +45 -45
  177. package/dist/spec/evolve/spec-rewriter.js.map +1 -1
  178. package/dist/spec/git/commits.d.ts +85 -0
  179. package/dist/spec/git/commits.d.ts.map +1 -0
  180. package/dist/spec/git/commits.js +218 -0
  181. package/dist/spec/git/commits.js.map +1 -0
  182. package/dist/spec/git/exec.d.ts +13 -0
  183. package/dist/spec/git/exec.d.ts.map +1 -0
  184. package/dist/spec/git/exec.js +19 -0
  185. package/dist/spec/git/exec.js.map +1 -0
  186. package/dist/spec/git/index.d.ts +9 -0
  187. package/dist/spec/git/index.d.ts.map +1 -0
  188. package/dist/spec/git/index.js +22 -0
  189. package/dist/spec/git/index.js.map +1 -0
  190. package/dist/spec/git-utils.d.ts +8 -0
  191. package/dist/spec/git-utils.d.ts.map +1 -0
  192. package/dist/spec/git-utils.js +14 -0
  193. package/dist/spec/git-utils.js.map +1 -0
  194. package/dist/spec/graph/index.d.ts +8 -0
  195. package/dist/spec/graph/index.d.ts.map +1 -0
  196. package/dist/spec/graph/index.js +17 -0
  197. package/dist/spec/graph/index.js.map +1 -0
  198. package/dist/spec/graph/queries.d.ts +6 -35
  199. package/dist/spec/graph/queries.d.ts.map +1 -1
  200. package/dist/spec/graph/queries.js +71 -248
  201. package/dist/spec/graph/queries.js.map +1 -1
  202. package/dist/spec/llm/agent-client.d.ts +59 -0
  203. package/dist/spec/llm/agent-client.d.ts.map +1 -0
  204. package/dist/spec/llm/agent-client.js +213 -0
  205. package/dist/spec/llm/agent-client.js.map +1 -0
  206. package/dist/spec/llm/agents/claude-code.d.ts +32 -0
  207. package/dist/spec/llm/agents/claude-code.d.ts.map +1 -0
  208. package/dist/spec/llm/agents/claude-code.js +125 -0
  209. package/dist/spec/llm/agents/claude-code.js.map +1 -0
  210. package/dist/spec/llm/agents/codex.d.ts +32 -0
  211. package/dist/spec/llm/agents/codex.d.ts.map +1 -0
  212. package/dist/spec/llm/agents/codex.js +145 -0
  213. package/dist/spec/llm/agents/codex.js.map +1 -0
  214. package/dist/spec/llm/agents/detect-utils.d.ts +28 -0
  215. package/dist/spec/llm/agents/detect-utils.d.ts.map +1 -0
  216. package/dist/spec/llm/agents/detect-utils.js +91 -0
  217. package/dist/spec/llm/agents/detect-utils.js.map +1 -0
  218. package/dist/spec/llm/agents/deveco-code.d.ts +33 -0
  219. package/dist/spec/llm/agents/deveco-code.d.ts.map +1 -0
  220. package/dist/spec/llm/agents/deveco-code.js +165 -0
  221. package/dist/spec/llm/agents/deveco-code.js.map +1 -0
  222. package/dist/spec/llm/agents/index.d.ts +31 -0
  223. package/dist/spec/llm/agents/index.d.ts.map +1 -0
  224. package/dist/spec/llm/agents/index.js +65 -0
  225. package/dist/spec/llm/agents/index.js.map +1 -0
  226. package/dist/spec/llm/agents/types.d.ts +76 -0
  227. package/dist/spec/llm/agents/types.d.ts.map +1 -0
  228. package/dist/spec/llm/agents/types.js +15 -0
  229. package/dist/spec/llm/agents/types.js.map +1 -0
  230. package/dist/spec/llm/client.d.ts +31 -11
  231. package/dist/spec/llm/client.d.ts.map +1 -1
  232. package/dist/spec/llm/client.js +143 -81
  233. package/dist/spec/llm/client.js.map +1 -1
  234. package/dist/spec/llm/factory.d.ts +41 -0
  235. package/dist/spec/llm/factory.d.ts.map +1 -0
  236. package/dist/spec/llm/factory.js +80 -0
  237. package/dist/spec/llm/factory.js.map +1 -0
  238. package/dist/spec/llm/prompts.d.ts +24 -8
  239. package/dist/spec/llm/prompts.d.ts.map +1 -1
  240. package/dist/spec/llm/prompts.js +100 -50
  241. package/dist/spec/llm/prompts.js.map +1 -1
  242. package/dist/spec/llm/retry.d.ts +53 -0
  243. package/dist/spec/llm/retry.d.ts.map +1 -0
  244. package/dist/spec/llm/retry.js +153 -0
  245. package/dist/spec/llm/retry.js.map +1 -0
  246. package/dist/spec/mine/clusterer.d.ts +63 -0
  247. package/dist/spec/mine/clusterer.d.ts.map +1 -0
  248. package/dist/spec/mine/clusterer.js +904 -0
  249. package/dist/spec/mine/clusterer.js.map +1 -0
  250. package/dist/spec/mine/clustering/features.d.ts +38 -0
  251. package/dist/spec/mine/clustering/features.d.ts.map +1 -0
  252. package/dist/spec/mine/clustering/features.js +108 -0
  253. package/dist/spec/mine/clustering/features.js.map +1 -0
  254. package/dist/spec/mine/clustering/index.d.ts +62 -0
  255. package/dist/spec/mine/clustering/index.d.ts.map +1 -0
  256. package/dist/spec/mine/clustering/index.js +259 -0
  257. package/dist/spec/mine/clustering/index.js.map +1 -0
  258. package/dist/spec/mine/clustering/leiden.d.ts +61 -0
  259. package/dist/spec/mine/clustering/leiden.d.ts.map +1 -0
  260. package/dist/spec/mine/clustering/leiden.js +489 -0
  261. package/dist/spec/mine/clustering/leiden.js.map +1 -0
  262. package/dist/spec/mine/clustering/text-similarity.d.ts +22 -0
  263. package/dist/spec/mine/clustering/text-similarity.d.ts.map +1 -0
  264. package/dist/spec/mine/clustering/text-similarity.js +98 -0
  265. package/dist/spec/mine/clustering/text-similarity.js.map +1 -0
  266. package/dist/spec/mine/generator.d.ts +54 -0
  267. package/dist/spec/mine/generator.d.ts.map +1 -0
  268. package/dist/spec/mine/generator.js +267 -0
  269. package/dist/spec/mine/generator.js.map +1 -0
  270. package/dist/spec/mine/persist.d.ts +37 -0
  271. package/dist/spec/mine/persist.d.ts.map +1 -0
  272. package/dist/spec/mine/persist.js +170 -0
  273. package/dist/spec/mine/persist.js.map +1 -0
  274. package/dist/spec/mine/pipeline.d.ts +41 -0
  275. package/dist/spec/mine/pipeline.d.ts.map +1 -0
  276. package/dist/spec/mine/pipeline.js +236 -0
  277. package/dist/spec/mine/pipeline.js.map +1 -0
  278. package/dist/spec/mine/progress-handler.d.ts +22 -0
  279. package/dist/spec/mine/progress-handler.d.ts.map +1 -0
  280. package/dist/spec/mine/progress-handler.js +108 -0
  281. package/dist/spec/mine/progress-handler.js.map +1 -0
  282. package/dist/spec/mine/progress.d.ts +23 -0
  283. package/dist/spec/mine/progress.d.ts.map +1 -0
  284. package/dist/spec/mine/progress.js +12 -0
  285. package/dist/spec/mine/progress.js.map +1 -0
  286. package/dist/spec/mine/scanner.d.ts +59 -0
  287. package/dist/spec/mine/scanner.d.ts.map +1 -0
  288. package/dist/spec/mine/scanner.js +383 -0
  289. package/dist/spec/mine/scanner.js.map +1 -0
  290. package/dist/spec/types.d.ts +32 -0
  291. package/dist/spec/types.d.ts.map +1 -1
  292. package/dist/spec/ui/index.d.ts +9 -0
  293. package/dist/spec/ui/index.d.ts.map +1 -0
  294. package/dist/spec/ui/index.js +16 -0
  295. package/dist/spec/ui/index.js.map +1 -0
  296. package/dist/spec/ui/progress-handler.d.ts +33 -0
  297. package/dist/spec/ui/progress-handler.d.ts.map +1 -0
  298. package/dist/spec/ui/progress-handler.js +132 -0
  299. package/dist/spec/ui/progress-handler.js.map +1 -0
  300. package/dist/spec/ui/progress.d.ts +24 -0
  301. package/dist/spec/ui/progress.d.ts.map +1 -0
  302. package/dist/spec/ui/progress.js +13 -0
  303. package/dist/spec/ui/progress.js.map +1 -0
  304. package/dist/spec/utils/fs.d.ts +45 -0
  305. package/dist/spec/utils/fs.d.ts.map +1 -0
  306. package/dist/spec/utils/fs.js +163 -0
  307. package/dist/spec/utils/fs.js.map +1 -0
  308. package/dist/spec/utils/index.d.ts +12 -0
  309. package/dist/spec/utils/index.d.ts.map +1 -0
  310. package/dist/spec/utils/index.js +26 -0
  311. package/dist/spec/utils/index.js.map +1 -0
  312. package/dist/spec/utils/meta.d.ts +32 -0
  313. package/dist/spec/utils/meta.d.ts.map +1 -0
  314. package/dist/spec/utils/meta.js +122 -0
  315. package/dist/spec/utils/meta.js.map +1 -0
  316. package/dist/spec/utils/truncate.d.ts +86 -0
  317. package/dist/spec/utils/truncate.d.ts.map +1 -0
  318. package/dist/spec/utils/truncate.js +172 -0
  319. package/dist/spec/utils/truncate.js.map +1 -0
  320. package/dist/spec/utils.d.ts +4 -16
  321. package/dist/spec/utils.d.ts.map +1 -1
  322. package/dist/spec/utils.js +6 -58
  323. package/dist/spec/utils.js.map +1 -1
  324. package/dist/sync/watcher.d.ts +25 -1
  325. package/dist/sync/watcher.d.ts.map +1 -1
  326. package/dist/sync/watcher.js +76 -3
  327. package/dist/sync/watcher.js.map +1 -1
  328. package/dist/telemetry/index.js +3 -3
  329. package/dist/telemetry/index.js.map +1 -1
  330. package/dist/types.d.ts +3 -0
  331. package/dist/types.d.ts.map +1 -1
  332. package/package.json +7 -3
@@ -23,8 +23,16 @@
23
23
  * yield point, so the heartbeat still stops and the SIGKILL still fires. We only
24
24
  * stop killing work that is demonstrably making progress.
25
25
  */
26
- /** Yield when more than `budgetMs` of wall-clock has passed since the last yield. */
27
- export type MaybeYield = () => Promise<void>;
26
+ /**
27
+ * Yield when more than `budgetMs` of wall-clock has passed since the last
28
+ * yield. Returns `undefined` on the (overwhelmingly common) not-due path so a
29
+ * hot loop can skip the await entirely — `await`ing an async no-op costs a
30
+ * promise allocation + microtask hop, which at hundreds of thousands of calls
31
+ * per index is real time. Callers may either `await maybeYield()` (works for
32
+ * both return shapes) or use the fast form:
33
+ * `const y = maybeYield(); if (y) await y;`
34
+ */
35
+ export type MaybeYield = () => Promise<void> | undefined;
28
36
  /** Default budget: well under the watchdog's minimum heartbeat cadence (~1s), so
29
37
  * a heartbeat byte always has a chance to land between yields. */
30
38
  export declare const DEFAULT_YIELD_BUDGET_MS = 250;
@@ -1 +1 @@
1
- {"version":3,"file":"cooperative-yield.d.ts","sourceRoot":"","sources":["../../src/resolution/cooperative-yield.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,qFAAqF;AACrF,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7C;kEACkE;AAClE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAAgC,GAAG,UAAU,CAOpF"}
1
+ {"version":3,"file":"cooperative-yield.d.ts","sourceRoot":"","sources":["../../src/resolution/cooperative-yield.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAEzD;kEACkE;AAClE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAAgC,GAAG,UAAU,CAWpF"}
@@ -32,11 +32,13 @@ exports.createYielder = createYielder;
32
32
  exports.DEFAULT_YIELD_BUDGET_MS = 250;
33
33
  function createYielder(budgetMs = exports.DEFAULT_YIELD_BUDGET_MS) {
34
34
  let last = Date.now();
35
- return async function maybeYield() {
35
+ return function maybeYield() {
36
36
  if (Date.now() - last < budgetMs)
37
- return;
38
- await new Promise((resolve) => setImmediate(resolve));
39
- last = Date.now();
37
+ return undefined;
38
+ return new Promise((resolve) => setImmediate(() => {
39
+ last = Date.now();
40
+ resolve();
41
+ }));
40
42
  };
41
43
  }
42
44
  //# sourceMappingURL=cooperative-yield.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cooperative-yield.js","sourceRoot":"","sources":["../../src/resolution/cooperative-yield.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;AASH,sCAOC;AAXD;kEACkE;AACrD,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C,SAAgB,aAAa,CAAC,WAAmB,+BAAuB;IACtE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,OAAO,KAAK,UAAU,UAAU;QAC9B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,QAAQ;YAAE,OAAO;QACzC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cooperative-yield.js","sourceRoot":"","sources":["../../src/resolution/cooperative-yield.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;AAiBH,sCAWC;AAfD;kEACkE;AACrD,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C,SAAgB,aAAa,CAAC,WAAmB,+BAAuB;IACtE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,OAAO,SAAS,UAAU;QACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,QAAQ;YAAE,OAAO,SAAS,CAAC;QACnD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CACnC,YAAY,CAAC,GAAG,EAAE;YAChB,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/go.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAiD,MAAM,UAAU,CAAC;AAG5F,eAAO,MAAM,UAAU,EAAE,iBA6HxB,CAAC"}
1
+ {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/go.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAiD,MAAM,UAAU,CAAC;AAG5F,eAAO,MAAM,UAAU,EAAE,iBAyIxB,CAAC"}
@@ -87,15 +87,27 @@ exports.goResolver = {
87
87
  let match;
88
88
  while ((match = routeRegex.exec(safe)) !== null) {
89
89
  const [, rawMethod, routePath, handlerExpr] = match;
90
+ // The first argument must be URL-shaped, or this is just a method that
91
+ // happens to share a verb name — `cache.Put("key", val)`, `store.Get(...)`,
92
+ // `bus.Handle("user.created", h)` all polluted the route index (#1259).
93
+ // Real registrations use "/path" (every router), or net/http's Go 1.22
94
+ // "METHOD /path" patterns on Handle/HandleFunc.
95
+ const methodPrefix = matchGo122MethodPattern(routePath, rawMethod);
96
+ if (!routePath.startsWith('/') && !methodPrefix)
97
+ continue;
90
98
  const line = safe.slice(0, match.index).split('\n').length;
91
- const method = rawMethod === 'Handle' || rawMethod === 'HandleFunc'
92
- ? 'ANY'
93
- : rawMethod.toUpperCase();
99
+ // "GET /users/{id}" -> method GET, path /users/{id}
100
+ const path = methodPrefix ? routePath.slice(methodPrefix.length).trimStart() : routePath;
101
+ const method = methodPrefix
102
+ ? methodPrefix
103
+ : rawMethod === 'Handle' || rawMethod === 'HandleFunc'
104
+ ? 'ANY'
105
+ : rawMethod.toUpperCase();
94
106
  const routeNode = {
95
- id: `route:${filePath}:${line}:${method}:${routePath}`,
107
+ id: `route:${filePath}:${line}:${method}:${path}`,
96
108
  kind: 'route',
97
- name: `${method} ${routePath}`,
98
- qualifiedName: `${filePath}::route:${routePath}`,
109
+ name: `${method} ${path}`,
110
+ qualifiedName: `${filePath}::route:${path}`,
99
111
  filePath,
100
112
  startLine: line,
101
113
  endLine: line,
@@ -121,6 +133,17 @@ exports.goResolver = {
121
133
  return { nodes, references };
122
134
  },
123
135
  };
136
+ /**
137
+ * Go 1.22 net/http mux patterns: `mux.HandleFunc("GET /users/{id}", h)`.
138
+ * Returns the HTTP method when the pattern starts with one, null otherwise.
139
+ * Only Handle/HandleFunc take these — Gin/Chi verb methods take a bare path.
140
+ */
141
+ function matchGo122MethodPattern(routePath, rawMethod) {
142
+ if (rawMethod !== 'Handle' && rawMethod !== 'HandleFunc')
143
+ return null;
144
+ const m = routePath.match(/^(GET|POST|PUT|PATCH|DELETE|OPTIONS|HEAD|CONNECT|TRACE)\s+\S/);
145
+ return m ? m[1] : null;
146
+ }
124
147
  /** Extract the last identifier from an expression like `pkg.Sub.handler` or `handler`. */
125
148
  function extractGoTailIdent(expr) {
126
149
  const cleaned = expr.trim().replace(/\s+/g, '').replace(/\(\)$/, '');
@@ -1 +1 @@
1
- {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/resolution/frameworks/go.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/resolution/frameworks/go.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,8 @@
6
6
  import { Language } from '../types';
7
7
  import { UnresolvedRef, ResolvedRef, ResolutionContext, ImportMapping, ReExport } from './types';
8
8
  export declare function isNixPathImportRef(ref: UnresolvedRef): boolean;
9
- /**
10
- * Resolve an import path to an actual file
11
- */
9
+ /** Drop the per-context memo tables (see ReferenceResolver.clearCaches). */
10
+ export declare function clearImportResolverMemos(context: ResolutionContext): void;
12
11
  export declare function resolveImportPath(importPath: string, fromFile: string, language: Language, context: ResolutionContext): string | null;
13
12
  /**
14
13
  * Clear the C/C++ include directory cache (call between indexing runs)
@@ -1 +1 @@
1
- {"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../src/resolution/import-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAQ,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAoCjG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAO9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,iBAAiB,GACzB,MAAM,GAAG,IAAI,CAqCf;AAiTD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAShE;AA6KD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAM/D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAE9D;AA0BD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,aAAa,EAAE,CA6BjB;AAmTD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C;AAqDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAsDhF;AAED;;GAEG;AACH;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CA6BpB;AAiCD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CA4PpB"}
1
+ {"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../src/resolution/import-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAQ,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAyCjG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAO9D;AA8CD,4EAA4E;AAC5E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAMzE;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,iBAAiB,GACzB,MAAM,GAAG,IAAI,CAYf;AAuXD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAShE;AA6KD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAM/D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAE9D;AA0BD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,aAAa,EAAE,CA6BjB;AAmTD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C;AAqDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAsDhF;AAED;;GAEG;AACH;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CA6BpB;AAiCD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAwQpB"}
@@ -39,6 +39,7 @@ var __importStar = (this && this.__importStar) || (function () {
39
39
  })();
40
40
  Object.defineProperty(exports, "__esModule", { value: true });
41
41
  exports.isNixPathImportRef = isNixPathImportRef;
42
+ exports.clearImportResolverMemos = clearImportResolverMemos;
42
43
  exports.resolveImportPath = resolveImportPath;
43
44
  exports.clearCppIncludeDirCache = clearCppIncludeDirCache;
44
45
  exports.loadCppIncludeDirs = loadCppIncludeDirs;
@@ -53,6 +54,7 @@ const fs = __importStar(require("fs"));
53
54
  const path = __importStar(require("path"));
54
55
  const path_aliases_1 = require("./path-aliases");
55
56
  const workspace_packages_1 = require("./workspace-packages");
57
+ const name_matcher_1 = require("./name-matcher");
56
58
  /**
57
59
  * Extension resolution order by language
58
60
  */
@@ -93,7 +95,60 @@ function isNixPathImportRef(ref) {
93
95
  /**
94
96
  * Resolve an import path to an actual file
95
97
  */
98
+ // Per-context memos for the two hottest pure lookups on the resolution path:
99
+ // import-specifier → file resolution and exported-symbol lookup. Both are pure
100
+ // given a stable file set + node table, which is exactly the window between
101
+ // ReferenceResolver.clearCaches() calls — clearImportResolverMemos() is invoked
102
+ // there, so the staleness discipline matches the resolver's own caches.
103
+ const importPathMemos = new WeakMap();
104
+ const exportedSymbolMemos = new WeakMap();
105
+ const fileExportIndexes = new WeakMap();
106
+ function getFileExportIndex(filePath, context) {
107
+ let perFile = fileExportIndexes.get(context);
108
+ if (!perFile) {
109
+ perFile = new Map();
110
+ fileExportIndexes.set(context, perFile);
111
+ }
112
+ let idx = perFile.get(filePath);
113
+ if (!idx) {
114
+ idx = { byName: new Map(), defaultComponent: undefined, defaultFnClass: undefined };
115
+ for (const n of context.getNodesInFile(filePath)) {
116
+ if (!n.isExported)
117
+ continue;
118
+ if (!idx.byName.has(n.name))
119
+ idx.byName.set(n.name, n);
120
+ if (idx.defaultComponent === undefined && n.kind === 'component')
121
+ idx.defaultComponent = n;
122
+ if (idx.defaultFnClass === undefined && (n.kind === 'function' || n.kind === 'class'))
123
+ idx.defaultFnClass = n;
124
+ }
125
+ perFile.set(filePath, idx);
126
+ }
127
+ return idx;
128
+ }
129
+ /** Drop the per-context memo tables (see ReferenceResolver.clearCaches). */
130
+ function clearImportResolverMemos(context) {
131
+ importPathMemos.delete(context);
132
+ exportedSymbolMemos.delete(context);
133
+ fileExportIndexes.delete(context);
134
+ luaFileBasenameIndexes.delete(context);
135
+ cobolCopybookIndexes.delete(context);
136
+ }
96
137
  function resolveImportPath(importPath, fromFile, language, context) {
138
+ let memo = importPathMemos.get(context);
139
+ if (!memo) {
140
+ memo = new Map();
141
+ importPathMemos.set(context, memo);
142
+ }
143
+ const key = `${language}\0${fromFile}\0${importPath}`;
144
+ const hit = memo.get(key);
145
+ if (hit !== undefined || memo.has(key))
146
+ return hit ?? null;
147
+ const resolved = resolveImportPathUncached(importPath, fromFile, language, context);
148
+ memo.set(key, resolved);
149
+ return resolved;
150
+ }
151
+ function resolveImportPathUncached(importPath, fromFile, language, context) {
97
152
  // COBOL COPY/EXEC SQL INCLUDE names a copybook member, not a path — the
98
153
  // compiler searches a library, so we match against indexed file basenames.
99
154
  // Must run before isExternalImport: a bare member name would otherwise be
@@ -135,6 +190,32 @@ function resolveImportPath(importPath, fromFile, language, context) {
135
190
  * file node would go quadratic on copybook-heavy repos).
136
191
  */
137
192
  const cobolCopybookIndexes = new WeakMap();
193
+ /**
194
+ * Per-context basename → file-paths index for Lua/Luau require resolution
195
+ * (cobolCopybookIndexes pattern). resolveLuaRequire previously ran
196
+ * `getAllFiles().filter(endsWith)` FOUR times per require ref — ~7.5k string
197
+ * suffix scans each, measured at ~0.9ms/ref (2.7s combined on kong's 3k
198
+ * requires). Buckets preserve getAllFiles() iteration order so the per-suffix
199
+ * candidate list filters to exactly the array the full scan produced —
200
+ * identical matches, identical stable sort, identical winner.
201
+ */
202
+ const luaFileBasenameIndexes = new WeakMap();
203
+ function luaBasenameIndex(context) {
204
+ let index = luaFileBasenameIndexes.get(context);
205
+ if (!index) {
206
+ index = new Map();
207
+ for (const f of context.getAllFiles()) {
208
+ const base = f.split('/').pop() ?? '';
209
+ const paths = index.get(base);
210
+ if (paths)
211
+ paths.push(f);
212
+ else
213
+ index.set(base, [f]);
214
+ }
215
+ luaFileBasenameIndexes.set(context, index);
216
+ }
217
+ return index;
218
+ }
138
219
  function resolveCobolCopybook(member, fromFile, context) {
139
220
  let index = cobolCopybookIndexes.get(context);
140
221
  if (!index) {
@@ -1386,6 +1467,19 @@ function resolveViaImport(ref, context) {
1386
1467
  resolvedBy: 'import',
1387
1468
  };
1388
1469
  }
1470
+ // An imported VALUE (singleton constant / shared instance) called
1471
+ // through a member: `reproStore.notifyJoinGuildStatus()` after
1472
+ // `import { reproStore } from './store'`. findExportedSymbol
1473
+ // resolved the CONSTANT itself; linking the CALL there hides the
1474
+ // real callee — callers of the method miss every cross-file use
1475
+ // and the method can look unused (#1292). Infer the value's type
1476
+ // from its own declaration in the exporting file and resolve the
1477
+ // member on that type. resolveMethodOnType VALIDATES the type
1478
+ // declares the method, so a mis-inference falls through to the
1479
+ // constant edge below rather than fabricating a wrong one.
1480
+ const instanceMember = resolveImportedInstanceMember(targetNode, ref, imp.localName, context);
1481
+ if (instanceMember)
1482
+ return instanceMember;
1389
1483
  }
1390
1484
  return {
1391
1485
  original: ref,
@@ -1494,7 +1588,7 @@ function resolveLuaRequire(ref, context) {
1494
1588
  return null;
1495
1589
  const base = name.includes('.') ? name.replace(/\./g, '/') : name;
1496
1590
  const suffixes = [`${base}.lua`, `${base}.luau`, `${base}/init.lua`, `${base}/init.luau`];
1497
- const files = context.getAllFiles();
1591
+ const byBasename = luaBasenameIndex(context);
1498
1592
  const shared = (a, b) => {
1499
1593
  let i = 0;
1500
1594
  while (i < a.length && i < b.length && a[i] === b[i])
@@ -1502,7 +1596,11 @@ function resolveLuaRequire(ref, context) {
1502
1596
  return i;
1503
1597
  };
1504
1598
  for (const suffix of suffixes) {
1505
- const matches = files.filter((f) => f === suffix || f.endsWith('/' + suffix));
1599
+ // Only files sharing the suffix's basename can match — the bucket is in
1600
+ // getAllFiles() order, so this filter yields exactly what the full-list
1601
+ // scan did.
1602
+ const candidates = byBasename.get(suffix.split('/').pop() ?? '') ?? [];
1603
+ const matches = candidates.filter((f) => f === suffix || f.endsWith('/' + suffix));
1506
1604
  if (matches.length === 0)
1507
1605
  continue;
1508
1606
  matches.sort((x, y) => shared(y, ref.filePath) - shared(x, ref.filePath));
@@ -1867,12 +1965,33 @@ const REEXPORT_MAX_DEPTH = 8;
1867
1965
  * resolved file, not declarations the file forwarded.
1868
1966
  */
1869
1967
  function findExportedSymbol(filePath, want, language, context, visited, depth = 0) {
1968
+ // Memoize fresh (top-level) lookups only: recursive re-export steps carry a
1969
+ // populated `visited` set, whose contents change the reachable answer.
1970
+ // Every ref to the same imported symbol repeats this exact walk, so the
1971
+ // top-level memo removes the re-export chase + per-file linear scans from
1972
+ // all but the first occurrence.
1973
+ if (depth === 0 && visited.size === 0) {
1974
+ let memo = exportedSymbolMemos.get(context);
1975
+ if (!memo) {
1976
+ memo = new Map();
1977
+ exportedSymbolMemos.set(context, memo);
1978
+ }
1979
+ const key = `${filePath}\0${want.isDefault ? 1 : 0}${want.isNamespace ? 1 : 0}\0${want.exportedName}\0${want.memberName ?? ''}\0${language}`;
1980
+ if (memo.has(key))
1981
+ return memo.get(key);
1982
+ const result = findExportedSymbolWalk(filePath, want, language, context, visited, depth);
1983
+ memo.set(key, result);
1984
+ return result;
1985
+ }
1986
+ return findExportedSymbolWalk(filePath, want, language, context, visited, depth);
1987
+ }
1988
+ function findExportedSymbolWalk(filePath, want, language, context, visited, depth) {
1870
1989
  if (depth > REEXPORT_MAX_DEPTH)
1871
1990
  return undefined;
1872
1991
  if (visited.has(filePath))
1873
1992
  return undefined;
1874
1993
  visited.add(filePath);
1875
- const nodesInFile = context.getNodesInFile(filePath);
1994
+ const exportIndex = getFileExportIndex(filePath, context);
1876
1995
  // 1. Direct hit: the symbol is declared in this file.
1877
1996
  if (want.isDefault) {
1878
1997
  // Svelte/Vue single-file components ARE the module's default export,
@@ -1881,18 +2000,17 @@ function findExportedSymbol(filePath, want, language, context, visited, depth =
1881
2000
  // `.ts`/`.tsx` `export default fn`/`class` case. Without the component
1882
2001
  // branch, an `export { default as X } from './X.svelte'` barrel never
1883
2002
  // resolves and the component shows a false 0 callers (#629).
1884
- const direct = nodesInFile.find((n) => n.isExported && n.kind === 'component') ??
1885
- nodesInFile.find((n) => n.isExported && (n.kind === 'function' || n.kind === 'class'));
2003
+ const direct = exportIndex.defaultComponent ?? exportIndex.defaultFnClass;
1886
2004
  if (direct)
1887
2005
  return direct;
1888
2006
  }
1889
2007
  else if (want.isNamespace && want.memberName) {
1890
- const direct = nodesInFile.find((n) => n.name === want.memberName && n.isExported);
2008
+ const direct = exportIndex.byName.get(want.memberName);
1891
2009
  if (direct)
1892
2010
  return direct;
1893
2011
  }
1894
2012
  else {
1895
- const direct = nodesInFile.find((n) => n.name === want.exportedName && n.isExported);
2013
+ const direct = exportIndex.byName.get(want.exportedName);
1896
2014
  if (direct)
1897
2015
  return direct;
1898
2016
  }
@@ -1950,6 +2068,47 @@ const STATIC_MEMBER_CONTAINERS = new Set([
1950
2068
  * languages whose members aren't `::`-qualified, and genuine class references,
1951
2069
  * are unaffected. See #825.
1952
2070
  */
2071
+ /**
2072
+ * Resolve a CALL through an imported value to the method on the value's own
2073
+ * type: `reproStore.notifyJoinGuildStatus()` where `reproStore` is
2074
+ * `export const reproStore = new ReproStore()` in the imported file (#1292).
2075
+ * The same-file form of this call already resolves via local-variable
2076
+ * receiver inference (#1108); this is the cross-file/import half. The type is
2077
+ * recovered from the VALUE'S OWN declaration lines in the exporting file
2078
+ * (initializer `= new T(...)` or a type annotation, per the shared #1108
2079
+ * pattern table), then the member is resolved AND VALIDATED on that type by
2080
+ * resolveMethodOnType — a failed inference or validation returns null so the
2081
+ * caller keeps its existing constant-edge behavior.
2082
+ */
2083
+ function resolveImportedInstanceMember(value, ref, localName, context) {
2084
+ if (ref.referenceKind !== 'calls')
2085
+ return null;
2086
+ if (value.kind !== 'constant' && value.kind !== 'variable')
2087
+ return null;
2088
+ const member = ref.referenceName.slice(localName.length + 1).split('.')[0];
2089
+ if (!member)
2090
+ return null;
2091
+ const source = context.readFile(value.filePath);
2092
+ if (!source)
2093
+ return null;
2094
+ // Only the value's own declaration lines — never the whole file, so a
2095
+ // same-named identifier elsewhere can't donate a type.
2096
+ const lines = source.split('\n');
2097
+ const declSlice = lines.slice(Math.max(0, value.startLine - 1), value.endLine).join('\n');
2098
+ const receiver = value.name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
2099
+ for (const pattern of (0, name_matcher_1.localReceiverTypePatterns)(value.language, receiver)) {
2100
+ const m = declSlice.match(pattern);
2101
+ if (!m || !m[1])
2102
+ continue;
2103
+ const typeName = (0, name_matcher_1.normalizeInferredTypeName)(m[1]);
2104
+ if (!typeName)
2105
+ continue;
2106
+ const resolved = (0, name_matcher_1.resolveMethodOnType)(typeName, member, ref, context, 0.85, 'instance-method');
2107
+ if (resolved)
2108
+ return resolved;
2109
+ }
2110
+ return null;
2111
+ }
1953
2112
  function resolveStaticMember(container, ref, localName, context) {
1954
2113
  if (!STATIC_MEMBER_CONTAINERS.has(container.kind))
1955
2114
  return undefined;