@lzehrung/codegraph 2.3.20 → 2.3.22

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 (1386) hide show
  1. package/README.md +6 -5
  2. package/THIRD_PARTY_NOTICES +4 -4
  3. package/codegraph-skill/codegraph/SKILL.md +97 -281
  4. package/dist/agent/call-hierarchy.d.ts +28 -0
  5. package/dist/agent/call-hierarchy.d.ts.map +1 -0
  6. package/dist/agent/call-hierarchy.js +82 -0
  7. package/dist/agent/call-hierarchy.js.map +1 -0
  8. package/dist/agent/candidate-tests.d.ts +12 -0
  9. package/dist/agent/candidate-tests.d.ts.map +1 -0
  10. package/dist/agent/candidate-tests.js +17 -0
  11. package/dist/agent/candidate-tests.js.map +1 -0
  12. package/dist/agent/explain.d.ts +8 -2
  13. package/dist/agent/explain.d.ts.map +1 -1
  14. package/dist/agent/explain.js +17 -3
  15. package/dist/agent/explain.js.map +1 -1
  16. package/dist/agent/explore.d.ts +3 -3
  17. package/dist/agent/explore.d.ts.map +1 -1
  18. package/dist/agent/explore.js +2 -2
  19. package/dist/agent/explore.js.map +1 -1
  20. package/dist/agent/file-view.d.ts +55 -0
  21. package/dist/agent/file-view.d.ts.map +1 -0
  22. package/dist/agent/file-view.js +521 -0
  23. package/dist/agent/file-view.js.map +1 -0
  24. package/dist/agent/follow-ups.d.ts +10 -0
  25. package/dist/agent/follow-ups.d.ts.map +1 -0
  26. package/dist/agent/follow-ups.js +175 -0
  27. package/dist/agent/follow-ups.js.map +1 -0
  28. package/dist/agent/normalize.d.ts +1 -1
  29. package/dist/agent/normalize.d.ts.map +1 -1
  30. package/dist/agent/normalize.js +2 -2
  31. package/dist/agent/normalize.js.map +1 -1
  32. package/dist/agent/orient.d.ts +1 -1
  33. package/dist/agent/orient.d.ts.map +1 -1
  34. package/dist/agent/orient.js +2 -2
  35. package/dist/agent/orient.js.map +1 -1
  36. package/dist/agent/packet.d.ts +1 -1
  37. package/dist/agent/packet.d.ts.map +1 -1
  38. package/dist/agent/packet.js +1 -1
  39. package/dist/agent/packet.js.map +1 -1
  40. package/dist/agent/query-index/candidates.d.ts +8 -2
  41. package/dist/agent/query-index/candidates.d.ts.map +1 -1
  42. package/dist/agent/query-index/candidates.js +12 -5
  43. package/dist/agent/query-index/candidates.js.map +1 -1
  44. package/dist/agent/query-index/content.js +2 -2
  45. package/dist/agent/query-index/content.js.map +1 -1
  46. package/dist/agent/query-index/query-index-worker.d.ts +8 -0
  47. package/dist/agent/query-index/query-index-worker.d.ts.map +1 -0
  48. package/dist/agent/query-index/query-index-worker.js +11 -0
  49. package/dist/agent/query-index/query-index-worker.js.map +1 -0
  50. package/dist/agent/query-index/session-store.d.ts +5 -0
  51. package/dist/agent/query-index/session-store.d.ts.map +1 -0
  52. package/dist/agent/query-index/session-store.js +69 -0
  53. package/dist/agent/query-index/session-store.js.map +1 -0
  54. package/dist/agent/query-index/source-identity.d.ts +3 -0
  55. package/dist/agent/query-index/source-identity.d.ts.map +1 -0
  56. package/dist/agent/query-index/source-identity.js +12 -0
  57. package/dist/agent/query-index/source-identity.js.map +1 -0
  58. package/dist/agent/query-index/store.d.ts +5 -1
  59. package/dist/agent/query-index/store.d.ts.map +1 -1
  60. package/dist/agent/query-index/store.js +98 -31
  61. package/dist/agent/query-index/store.js.map +1 -1
  62. package/dist/agent/query-index/update.js +3 -3
  63. package/dist/agent/query-index/update.js.map +1 -1
  64. package/dist/agent/query-index/worker-pool.d.ts +27 -0
  65. package/dist/agent/query-index/worker-pool.d.ts.map +1 -0
  66. package/dist/agent/query-index/worker-pool.js +114 -0
  67. package/dist/agent/query-index/worker-pool.js.map +1 -0
  68. package/dist/agent/refactor-plan.d.ts +40 -0
  69. package/dist/agent/refactor-plan.d.ts.map +1 -0
  70. package/dist/agent/refactor-plan.js +226 -0
  71. package/dist/agent/refactor-plan.js.map +1 -0
  72. package/dist/agent/rename-preview.d.ts +57 -0
  73. package/dist/agent/rename-preview.d.ts.map +1 -0
  74. package/dist/agent/rename-preview.js +1062 -0
  75. package/dist/agent/rename-preview.js.map +1 -0
  76. package/dist/agent/search.d.ts +8 -2
  77. package/dist/agent/search.d.ts.map +1 -1
  78. package/dist/agent/search.js +26 -9
  79. package/dist/agent/search.js.map +1 -1
  80. package/dist/agent/semantic-symbols.d.ts +16 -0
  81. package/dist/agent/semantic-symbols.d.ts.map +1 -0
  82. package/dist/agent/semantic-symbols.js +97 -0
  83. package/dist/agent/semantic-symbols.js.map +1 -0
  84. package/dist/agent/semantic.d.ts +1 -1
  85. package/dist/agent/semantic.d.ts.map +1 -1
  86. package/dist/agent/session-lifecycle.d.ts +5 -0
  87. package/dist/agent/session-lifecycle.d.ts.map +1 -0
  88. package/dist/agent/session-lifecycle.js +18 -0
  89. package/dist/agent/session-lifecycle.js.map +1 -0
  90. package/dist/agent/session.d.ts +3 -3
  91. package/dist/agent/session.d.ts.map +1 -1
  92. package/dist/agent/session.js +73 -26
  93. package/dist/agent/session.js.map +1 -1
  94. package/dist/agent/symbol-lookup.d.ts +12 -0
  95. package/dist/agent/symbol-lookup.d.ts.map +1 -0
  96. package/dist/agent/symbol-lookup.js +26 -0
  97. package/dist/agent/symbol-lookup.js.map +1 -0
  98. package/dist/agent/type-hierarchy.d.ts +39 -0
  99. package/dist/agent/type-hierarchy.d.ts.map +1 -0
  100. package/dist/agent/type-hierarchy.js +125 -0
  101. package/dist/agent/type-hierarchy.js.map +1 -0
  102. package/dist/agent/workspace-symbols.d.ts +18 -0
  103. package/dist/agent/workspace-symbols.d.ts.map +1 -0
  104. package/dist/agent/workspace-symbols.js +75 -0
  105. package/dist/agent/workspace-symbols.js.map +1 -0
  106. package/dist/agent-tools.d.ts +6 -6
  107. package/dist/agent-tools.d.ts.map +1 -1
  108. package/dist/agent-tools.js +6 -6
  109. package/dist/agent-tools.js.map +1 -1
  110. package/dist/agent.d.ts +18 -18
  111. package/dist/agent.d.ts.map +1 -1
  112. package/dist/agent.js +10 -10
  113. package/dist/agent.js.map +1 -1
  114. package/dist/analysis-summary.d.ts +19 -0
  115. package/dist/analysis-summary.d.ts.map +1 -0
  116. package/dist/analysis-summary.js +80 -0
  117. package/dist/analysis-summary.js.map +1 -0
  118. package/dist/bin/cli.js +37347 -36812
  119. package/dist/bin/query-index-worker.js +4382 -0
  120. package/dist/bin/raw-query-worker.js +383 -0
  121. package/dist/bootstrap/tree-sitter-languages.d.ts +5 -0
  122. package/dist/bootstrap/tree-sitter-languages.d.ts.map +1 -0
  123. package/dist/bootstrap/tree-sitter-languages.js +41 -0
  124. package/dist/bootstrap/tree-sitter-languages.js.map +1 -0
  125. package/dist/chunking/chunk-blocks.d.ts +9 -0
  126. package/dist/chunking/chunk-blocks.d.ts.map +1 -0
  127. package/dist/chunking/chunk-blocks.js +60 -0
  128. package/dist/chunking/chunk-blocks.js.map +1 -0
  129. package/dist/chunking/chunk-file.d.ts +39 -0
  130. package/dist/chunking/chunk-file.d.ts.map +1 -0
  131. package/dist/chunking/chunk-file.js +152 -0
  132. package/dist/chunking/chunk-file.js.map +1 -0
  133. package/dist/chunking/chunk-id.d.ts +7 -0
  134. package/dist/chunking/chunk-id.d.ts.map +1 -0
  135. package/dist/chunking/chunk-id.js +30 -0
  136. package/dist/chunking/chunk-id.js.map +1 -0
  137. package/dist/chunking/chunk-matches.d.ts +4 -0
  138. package/dist/chunking/chunk-matches.d.ts.map +1 -0
  139. package/dist/chunking/chunk-matches.js +65 -0
  140. package/dist/chunking/chunk-matches.js.map +1 -0
  141. package/dist/chunking/chunk-merge.d.ts +4 -0
  142. package/dist/chunking/chunk-merge.d.ts.map +1 -0
  143. package/dist/chunking/chunk-merge.js +144 -0
  144. package/dist/chunking/chunk-merge.js.map +1 -0
  145. package/dist/chunking/chunk-sfc.d.ts +18 -0
  146. package/dist/chunking/chunk-sfc.d.ts.map +1 -0
  147. package/dist/chunking/chunk-sfc.js +165 -0
  148. package/dist/chunking/chunk-sfc.js.map +1 -0
  149. package/dist/chunking/chunk-split.d.ts +6 -0
  150. package/dist/chunking/chunk-split.d.ts.map +1 -0
  151. package/dist/chunking/chunk-split.js +155 -0
  152. package/dist/chunking/chunk-split.js.map +1 -0
  153. package/dist/chunking/chunk-text-file.d.ts +28 -0
  154. package/dist/chunking/chunk-text-file.d.ts.map +1 -0
  155. package/dist/chunking/chunk-text-file.js +107 -0
  156. package/dist/chunking/chunk-text-file.js.map +1 -0
  157. package/dist/chunking/language-config.d.ts +35 -0
  158. package/dist/chunking/language-config.d.ts.map +1 -0
  159. package/dist/chunking/language-config.js +24 -0
  160. package/dist/chunking/language-config.js.map +1 -0
  161. package/dist/cli/affected.js +1 -1
  162. package/dist/cli/affected.js.map +1 -1
  163. package/dist/cli/call-hierarchy.d.ts +6 -0
  164. package/dist/cli/call-hierarchy.d.ts.map +1 -0
  165. package/dist/cli/call-hierarchy.js +72 -0
  166. package/dist/cli/call-hierarchy.js.map +1 -0
  167. package/dist/cli/chunk.js +5 -5
  168. package/dist/cli/chunk.js.map +1 -1
  169. package/dist/cli/command-catalog.d.ts +14 -0
  170. package/dist/cli/command-catalog.d.ts.map +1 -0
  171. package/dist/cli/command-catalog.js +118 -0
  172. package/dist/cli/command-catalog.js.map +1 -0
  173. package/dist/cli/command-table.d.ts +16 -0
  174. package/dist/cli/command-table.d.ts.map +1 -0
  175. package/dist/cli/command-table.js +758 -0
  176. package/dist/cli/command-table.js.map +1 -0
  177. package/dist/cli/compile-cache.d.ts +22 -0
  178. package/dist/cli/compile-cache.d.ts.map +1 -0
  179. package/dist/cli/compile-cache.js +81 -0
  180. package/dist/cli/compile-cache.js.map +1 -0
  181. package/dist/cli/discovery-globs.d.ts +11 -0
  182. package/dist/cli/discovery-globs.d.ts.map +1 -0
  183. package/dist/cli/discovery-globs.js +74 -0
  184. package/dist/cli/discovery-globs.js.map +1 -0
  185. package/dist/cli/doctor.d.ts +1 -1
  186. package/dist/cli/doctor.d.ts.map +1 -1
  187. package/dist/cli/doctor.js +3 -3
  188. package/dist/cli/doctor.js.map +1 -1
  189. package/dist/cli/drift.d.ts +1 -1
  190. package/dist/cli/drift.d.ts.map +1 -1
  191. package/dist/cli/duplicate-similarity.d.ts +10 -0
  192. package/dist/cli/duplicate-similarity.d.ts.map +1 -0
  193. package/dist/cli/duplicate-similarity.js +20 -0
  194. package/dist/cli/duplicate-similarity.js.map +1 -0
  195. package/dist/cli/file.js +2 -2
  196. package/dist/cli/file.js.map +1 -1
  197. package/dist/cli/graph-delta.d.ts +25 -0
  198. package/dist/cli/graph-delta.d.ts.map +1 -0
  199. package/dist/cli/graph-delta.js +80 -0
  200. package/dist/cli/graph-delta.js.map +1 -0
  201. package/dist/cli/graph-queries.d.ts +23 -0
  202. package/dist/cli/graph-queries.d.ts.map +1 -0
  203. package/dist/cli/graph-queries.js +265 -0
  204. package/dist/cli/graph-queries.js.map +1 -0
  205. package/dist/cli/graph.d.ts +2 -2
  206. package/dist/cli/graph.d.ts.map +1 -1
  207. package/dist/cli/graph.js +2 -2
  208. package/dist/cli/graph.js.map +1 -1
  209. package/dist/cli/grep.d.ts +1 -1
  210. package/dist/cli/grep.d.ts.map +1 -1
  211. package/dist/cli/grep.js +1 -1
  212. package/dist/cli/grep.js.map +1 -1
  213. package/dist/cli/help.d.ts +1 -1
  214. package/dist/cli/help.d.ts.map +1 -1
  215. package/dist/cli/help.js +2 -2
  216. package/dist/cli/help.js.map +1 -1
  217. package/dist/cli/impact.d.ts +2 -2
  218. package/dist/cli/impact.d.ts.map +1 -1
  219. package/dist/cli/impact.js +4 -4
  220. package/dist/cli/impact.js.map +1 -1
  221. package/dist/cli/index-policy.d.ts +36 -0
  222. package/dist/cli/index-policy.d.ts.map +1 -0
  223. package/dist/cli/index-policy.js +169 -0
  224. package/dist/cli/index-policy.js.map +1 -0
  225. package/dist/cli/index.d.ts +2 -2
  226. package/dist/cli/index.d.ts.map +1 -1
  227. package/dist/cli/index.js +1 -1
  228. package/dist/cli/index.js.map +1 -1
  229. package/dist/cli/inspect.d.ts +2 -2
  230. package/dist/cli/inspect.d.ts.map +1 -1
  231. package/dist/cli/inspect.js +2 -2
  232. package/dist/cli/inspect.js.map +1 -1
  233. package/dist/cli/invocation-context.d.ts +77 -0
  234. package/dist/cli/invocation-context.d.ts.map +1 -0
  235. package/dist/cli/invocation-context.js +423 -0
  236. package/dist/cli/invocation-context.js.map +1 -0
  237. package/dist/cli/links.d.ts +2 -2
  238. package/dist/cli/links.d.ts.map +1 -1
  239. package/dist/cli/links.js +1 -1
  240. package/dist/cli/links.js.map +1 -1
  241. package/dist/cli/location.d.ts +1 -1
  242. package/dist/cli/location.d.ts.map +1 -1
  243. package/dist/cli/location.js +1 -1
  244. package/dist/cli/location.js.map +1 -1
  245. package/dist/cli/navigation.d.ts +2 -2
  246. package/dist/cli/navigation.d.ts.map +1 -1
  247. package/dist/cli/navigation.js +2 -2
  248. package/dist/cli/navigation.js.map +1 -1
  249. package/dist/cli/packet.js +1 -1
  250. package/dist/cli/packet.js.map +1 -1
  251. package/dist/cli/project-file.d.ts +13 -0
  252. package/dist/cli/project-file.d.ts.map +1 -0
  253. package/dist/cli/project-file.js +23 -0
  254. package/dist/cli/project-file.js.map +1 -0
  255. package/dist/cli/refactor-plan.d.ts +6 -0
  256. package/dist/cli/refactor-plan.d.ts.map +1 -0
  257. package/dist/cli/refactor-plan.js +84 -0
  258. package/dist/cli/refactor-plan.js.map +1 -0
  259. package/dist/cli/rename-preview.d.ts +4 -0
  260. package/dist/cli/rename-preview.d.ts.map +1 -0
  261. package/dist/cli/rename-preview.js +92 -0
  262. package/dist/cli/rename-preview.js.map +1 -0
  263. package/dist/cli/review.d.ts +2 -2
  264. package/dist/cli/review.d.ts.map +1 -1
  265. package/dist/cli/review.js +4 -4
  266. package/dist/cli/review.js.map +1 -1
  267. package/dist/cli/root-policy.d.ts +53 -0
  268. package/dist/cli/root-policy.d.ts.map +1 -0
  269. package/dist/cli/root-policy.js +221 -0
  270. package/dist/cli/root-policy.js.map +1 -0
  271. package/dist/cli/server.js +5 -5
  272. package/dist/cli/server.js.map +1 -1
  273. package/dist/cli/skill.js +1 -1
  274. package/dist/cli/skill.js.map +1 -1
  275. package/dist/cli/symbols.js +1 -1
  276. package/dist/cli/symbols.js.map +1 -1
  277. package/dist/cli/type-hierarchy.d.ts +6 -0
  278. package/dist/cli/type-hierarchy.d.ts.map +1 -0
  279. package/dist/cli/type-hierarchy.js +90 -0
  280. package/dist/cli/type-hierarchy.js.map +1 -0
  281. package/dist/cli/viewer.js +2 -2
  282. package/dist/cli/viewer.js.map +1 -1
  283. package/dist/cli-bootstrap.d.ts +3 -0
  284. package/dist/cli-bootstrap.d.ts.map +1 -0
  285. package/dist/cli-bootstrap.js +10 -0
  286. package/dist/cli-bootstrap.js.map +1 -0
  287. package/dist/cli.d.ts +1 -1
  288. package/dist/cli.d.ts.map +1 -1
  289. package/dist/cli.js +5 -5
  290. package/dist/cli.js.map +1 -1
  291. package/dist/config.d.ts +1 -1
  292. package/dist/config.d.ts.map +1 -1
  293. package/dist/config.js +0 -1
  294. package/dist/config.js.map +1 -1
  295. package/dist/document-links/asciidoc.d.ts.map +1 -0
  296. package/dist/document-links/asciidoc.js.map +1 -0
  297. package/dist/document-links/check.d.ts +32 -0
  298. package/dist/document-links/check.d.ts.map +1 -0
  299. package/dist/document-links/check.js +286 -0
  300. package/dist/document-links/check.js.map +1 -0
  301. package/dist/document-links/html.d.ts.map +1 -0
  302. package/dist/document-links/html.js.map +1 -0
  303. package/dist/document-links/markdown.d.ts.map +1 -0
  304. package/dist/document-links/markdown.js.map +1 -0
  305. package/dist/document-links/rst.d.ts.map +1 -0
  306. package/dist/document-links/rst.js.map +1 -0
  307. package/dist/document-links/sfc.d.ts.map +1 -0
  308. package/dist/document-links/sfc.js.map +1 -0
  309. package/dist/document-links/shared.d.ts.map +1 -0
  310. package/dist/document-links/shared.js.map +1 -0
  311. package/dist/document-links.d.ts +12 -0
  312. package/dist/document-links.d.ts.map +1 -0
  313. package/dist/document-links.js +49 -0
  314. package/dist/document-links.js.map +1 -0
  315. package/dist/drift/snapshot.js +2 -2
  316. package/dist/drift/snapshot.js.map +1 -1
  317. package/dist/drift/types.d.ts +2 -2
  318. package/dist/drift/types.d.ts.map +1 -1
  319. package/dist/duplicates/unit-cache.d.ts +46 -0
  320. package/dist/duplicates/unit-cache.d.ts.map +1 -0
  321. package/dist/duplicates/unit-cache.js +512 -0
  322. package/dist/duplicates/unit-cache.js.map +1 -0
  323. package/dist/duplicates/units.d.ts +1 -1
  324. package/dist/duplicates/units.d.ts.map +1 -1
  325. package/dist/duplicates/units.js +6 -6
  326. package/dist/duplicates/units.js.map +1 -1
  327. package/dist/duplicates-leads.d.ts +39 -0
  328. package/dist/duplicates-leads.d.ts.map +1 -0
  329. package/dist/duplicates-leads.js +112 -0
  330. package/dist/duplicates-leads.js.map +1 -0
  331. package/dist/duplicates.d.ts +1 -1
  332. package/dist/duplicates.d.ts.map +1 -1
  333. package/dist/duplicates.js +2 -2
  334. package/dist/duplicates.js.map +1 -1
  335. package/dist/graph-builder.d.ts +1 -1
  336. package/dist/graph-builder.d.ts.map +1 -1
  337. package/dist/graph-builder.js +4 -4
  338. package/dist/graph-builder.js.map +1 -1
  339. package/dist/graph-edge-collector.d.ts +3 -3
  340. package/dist/graph-edge-collector.d.ts.map +1 -1
  341. package/dist/graph-edge-collector.js +6 -6
  342. package/dist/graph-edge-collector.js.map +1 -1
  343. package/dist/graphs/cycles.js +1 -1
  344. package/dist/graphs/cycles.js.map +1 -1
  345. package/dist/graphs/edge-resolution.d.ts +25 -0
  346. package/dist/graphs/edge-resolution.d.ts.map +1 -0
  347. package/dist/graphs/edge-resolution.js +97 -0
  348. package/dist/graphs/edge-resolution.js.map +1 -0
  349. package/dist/graphs/grep.d.ts +1 -1
  350. package/dist/graphs/grep.d.ts.map +1 -1
  351. package/dist/graphs/grep.js +4 -4
  352. package/dist/graphs/grep.js.map +1 -1
  353. package/dist/graphs/specifiers.d.ts +1 -1
  354. package/dist/graphs/specifiers.d.ts.map +1 -1
  355. package/dist/graphs/specifiers.js +5 -5
  356. package/dist/graphs/specifiers.js.map +1 -1
  357. package/dist/graphs/symbol-graph-detailed/ast.d.ts +0 -1
  358. package/dist/graphs/symbol-graph-detailed/ast.d.ts.map +1 -1
  359. package/dist/graphs/symbol-graph-detailed/ast.js +1 -8
  360. package/dist/graphs/symbol-graph-detailed/ast.js.map +1 -1
  361. package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts +35 -0
  362. package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts.map +1 -0
  363. package/dist/graphs/symbol-graph-detailed/edge-passes.js +676 -0
  364. package/dist/graphs/symbol-graph-detailed/edge-passes.js.map +1 -0
  365. package/dist/graphs/symbol-graph-detailed/import-aliases.d.ts +10 -0
  366. package/dist/graphs/symbol-graph-detailed/import-aliases.d.ts.map +1 -0
  367. package/dist/graphs/symbol-graph-detailed/import-aliases.js +44 -0
  368. package/dist/graphs/symbol-graph-detailed/import-aliases.js.map +1 -0
  369. package/dist/graphs/symbol-graph-detailed/member-chains.d.ts +17 -0
  370. package/dist/graphs/symbol-graph-detailed/member-chains.d.ts.map +1 -0
  371. package/dist/graphs/symbol-graph-detailed/member-chains.js +30 -0
  372. package/dist/graphs/symbol-graph-detailed/member-chains.js.map +1 -0
  373. package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts +69 -0
  374. package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts.map +1 -0
  375. package/dist/graphs/symbol-graph-detailed/receiver-calls.js +408 -0
  376. package/dist/graphs/symbol-graph-detailed/receiver-calls.js.map +1 -0
  377. package/dist/graphs/symbol-graph-detailed.d.ts.map +1 -1
  378. package/dist/graphs/symbol-graph-detailed.js +22 -12
  379. package/dist/graphs/symbol-graph-detailed.js.map +1 -1
  380. package/dist/graphs/types.d.ts +1 -1
  381. package/dist/graphs/types.d.ts.map +1 -1
  382. package/dist/graphs/unresolved.js +1 -1
  383. package/dist/graphs/unresolved.js.map +1 -1
  384. package/dist/impact/analyzer.js +4 -4
  385. package/dist/impact/analyzer.js.map +1 -1
  386. package/dist/impact/call-compatibility/text-scanner.d.ts +23 -0
  387. package/dist/impact/call-compatibility/text-scanner.d.ts.map +1 -0
  388. package/dist/impact/call-compatibility/text-scanner.js +615 -0
  389. package/dist/impact/call-compatibility/text-scanner.js.map +1 -0
  390. package/dist/impact/call-compatibility.d.ts +24 -0
  391. package/dist/impact/call-compatibility.d.ts.map +1 -0
  392. package/dist/impact/call-compatibility.js +1023 -0
  393. package/dist/impact/call-compatibility.js.map +1 -0
  394. package/dist/impact/context.js +1 -1
  395. package/dist/impact/context.js.map +1 -1
  396. package/dist/impact/direct.d.ts +1 -1
  397. package/dist/impact/direct.d.ts.map +1 -1
  398. package/dist/impact/index.d.ts +1 -1
  399. package/dist/impact/index.d.ts.map +1 -1
  400. package/dist/impact/index.js +1 -1
  401. package/dist/impact/index.js.map +1 -1
  402. package/dist/impact/map.js +1 -1
  403. package/dist/impact/map.js.map +1 -1
  404. package/dist/impact/member-resolution-coverage.d.ts +14 -0
  405. package/dist/impact/member-resolution-coverage.d.ts.map +1 -0
  406. package/dist/impact/member-resolution-coverage.js +42 -0
  407. package/dist/impact/member-resolution-coverage.js.map +1 -0
  408. package/dist/impact/reference-cache.d.ts +12 -0
  409. package/dist/impact/reference-cache.d.ts.map +1 -0
  410. package/dist/impact/reference-cache.js +101 -0
  411. package/dist/impact/reference-cache.js.map +1 -0
  412. package/dist/impact/report-compact.d.ts +8 -0
  413. package/dist/impact/report-compact.d.ts.map +1 -0
  414. package/dist/impact/report-compact.js +153 -0
  415. package/dist/impact/report-compact.js.map +1 -0
  416. package/dist/impact/report-full.d.ts +10 -0
  417. package/dist/impact/report-full.d.ts.map +1 -0
  418. package/dist/impact/report-full.js +67 -0
  419. package/dist/impact/report-full.js.map +1 -0
  420. package/dist/impact/report-parts.d.ts +51 -0
  421. package/dist/impact/report-parts.d.ts.map +1 -0
  422. package/dist/impact/report-parts.js +2 -0
  423. package/dist/impact/report-parts.js.map +1 -0
  424. package/dist/impact/report-shared.d.ts +76 -0
  425. package/dist/impact/report-shared.d.ts.map +1 -0
  426. package/dist/impact/report-shared.js +130 -0
  427. package/dist/impact/report-shared.js.map +1 -0
  428. package/dist/impact/report-suggestions.js +2 -2
  429. package/dist/impact/report-suggestions.js.map +1 -1
  430. package/dist/impact/report.js +5 -5
  431. package/dist/impact/report.js.map +1 -1
  432. package/dist/impact/streaming.d.ts +1 -1
  433. package/dist/impact/streaming.d.ts.map +1 -1
  434. package/dist/impact/streaming.js +2 -2
  435. package/dist/impact/streaming.js.map +1 -1
  436. package/dist/impact/test-patterns.d.ts +6 -0
  437. package/dist/impact/test-patterns.d.ts.map +1 -0
  438. package/dist/impact/test-patterns.js +65 -0
  439. package/dist/impact/test-patterns.js.map +1 -0
  440. package/dist/impact/transitive.js +1 -1
  441. package/dist/impact/transitive.js.map +1 -1
  442. package/dist/impact/types.d.ts +3 -3
  443. package/dist/impact/types.d.ts.map +1 -1
  444. package/dist/impact/types.js +1 -1
  445. package/dist/impact/types.js.map +1 -1
  446. package/dist/index.d.ts +10 -10
  447. package/dist/index.d.ts.map +1 -1
  448. package/dist/index.js +9 -9
  449. package/dist/index.js.map +1 -1
  450. package/dist/indexer/build-cache/manifest.d.ts +4 -4
  451. package/dist/indexer/build-cache/manifest.d.ts.map +1 -1
  452. package/dist/indexer/build-cache/manifest.js +9 -34
  453. package/dist/indexer/build-cache/manifest.js.map +1 -1
  454. package/dist/indexer/build-cache/module-cache.d.ts +1 -1
  455. package/dist/indexer/build-cache/module-cache.d.ts.map +1 -1
  456. package/dist/indexer/build-cache/module-cache.js +4 -4
  457. package/dist/indexer/build-cache/module-cache.js.map +1 -1
  458. package/dist/indexer/build-cache/options.d.ts +6 -4
  459. package/dist/indexer/build-cache/options.d.ts.map +1 -1
  460. package/dist/indexer/build-cache/options.js +9 -7
  461. package/dist/indexer/build-cache/options.js.map +1 -1
  462. package/dist/indexer/build-cache/project-snapshot.d.ts +1 -1
  463. package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
  464. package/dist/indexer/build-cache/project-snapshot.js +16 -19
  465. package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
  466. package/dist/indexer/build-cache/reports.js +1 -1
  467. package/dist/indexer/build-cache/reports.js.map +1 -1
  468. package/dist/indexer/build-cache/resolver-environment.d.ts +6 -2
  469. package/dist/indexer/build-cache/resolver-environment.d.ts.map +1 -1
  470. package/dist/indexer/build-cache/resolver-environment.js +41 -5
  471. package/dist/indexer/build-cache/resolver-environment.js.map +1 -1
  472. package/dist/indexer/build-index.d.ts.map +1 -1
  473. package/dist/indexer/build-index.js +63 -29
  474. package/dist/indexer/build-index.js.map +1 -1
  475. package/dist/indexer/build-manifest.d.ts +3 -0
  476. package/dist/indexer/build-manifest.d.ts.map +1 -1
  477. package/dist/indexer/build-manifest.js +1 -1
  478. package/dist/indexer/build-manifest.js.map +1 -1
  479. package/dist/indexer/build-workers.d.ts +1 -1
  480. package/dist/indexer/build-workers.d.ts.map +1 -1
  481. package/dist/indexer/build-workers.js +6 -6
  482. package/dist/indexer/build-workers.js.map +1 -1
  483. package/dist/indexer/finalize.d.ts +3 -2
  484. package/dist/indexer/finalize.d.ts.map +1 -1
  485. package/dist/indexer/finalize.js +2 -1
  486. package/dist/indexer/finalize.js.map +1 -1
  487. package/dist/indexer/imports/graph-only.d.ts +13 -0
  488. package/dist/indexer/imports/graph-only.d.ts.map +1 -0
  489. package/dist/indexer/imports/graph-only.js +40 -0
  490. package/dist/indexer/imports/graph-only.js.map +1 -0
  491. package/dist/indexer/imports/js-text-imports.d.ts +9 -0
  492. package/dist/indexer/imports/js-text-imports.d.ts.map +1 -0
  493. package/dist/indexer/imports/js-text-imports.js +181 -0
  494. package/dist/indexer/imports/js-text-imports.js.map +1 -0
  495. package/dist/indexer/imports/language-specific.d.ts +26 -0
  496. package/dist/indexer/imports/language-specific.d.ts.map +1 -0
  497. package/dist/indexer/imports/language-specific.js +449 -0
  498. package/dist/indexer/imports/language-specific.js.map +1 -0
  499. package/dist/indexer/imports/native-captures.d.ts +16 -0
  500. package/dist/indexer/imports/native-captures.d.ts.map +1 -0
  501. package/dist/indexer/imports/native-captures.js +142 -0
  502. package/dist/indexer/imports/native-captures.js.map +1 -0
  503. package/dist/indexer/imports.d.ts +1 -1
  504. package/dist/indexer/imports.d.ts.map +1 -1
  505. package/dist/indexer/imports.js +7 -7
  506. package/dist/indexer/imports.js.map +1 -1
  507. package/dist/indexer/incremental-plan.d.ts +4 -3
  508. package/dist/indexer/incremental-plan.d.ts.map +1 -1
  509. package/dist/indexer/incremental-plan.js +9 -5
  510. package/dist/indexer/incremental-plan.js.map +1 -1
  511. package/dist/indexer/locals-and-exports.d.ts +1 -1
  512. package/dist/indexer/locals-and-exports.d.ts.map +1 -1
  513. package/dist/indexer/locals-and-exports.js +5 -5
  514. package/dist/indexer/locals-and-exports.js.map +1 -1
  515. package/dist/indexer/navigation-goto.js +1 -1
  516. package/dist/indexer/navigation-goto.js.map +1 -1
  517. package/dist/indexer/navigation-local.d.ts +2 -1
  518. package/dist/indexer/navigation-local.d.ts.map +1 -1
  519. package/dist/indexer/navigation-local.js +26 -21
  520. package/dist/indexer/navigation-local.js.map +1 -1
  521. package/dist/indexer/navigation.js +1 -1
  522. package/dist/indexer/navigation.js.map +1 -1
  523. package/dist/indexer/parse-context.d.ts +2 -2
  524. package/dist/indexer/parse-context.d.ts.map +1 -1
  525. package/dist/indexer/parse-context.js +5 -5
  526. package/dist/indexer/parse-context.js.map +1 -1
  527. package/dist/indexer/scope.d.ts +1 -1
  528. package/dist/indexer/scope.d.ts.map +1 -1
  529. package/dist/indexer/scope.js +2 -2
  530. package/dist/indexer/scope.js.map +1 -1
  531. package/dist/indexer/shared.d.ts +1 -1
  532. package/dist/indexer/shared.d.ts.map +1 -1
  533. package/dist/indexer/shared.js +1 -1
  534. package/dist/indexer/shared.js.map +1 -1
  535. package/dist/indexer/symbols.js +1 -1
  536. package/dist/indexer/symbols.js.map +1 -1
  537. package/dist/indexer/types.d.ts +4 -2
  538. package/dist/indexer/types.d.ts.map +1 -1
  539. package/dist/indexer.d.ts +2 -2
  540. package/dist/indexer.d.ts.map +1 -1
  541. package/dist/installer/locks.js +1 -1
  542. package/dist/installer/locks.js.map +1 -1
  543. package/dist/installer/registry.js +1 -1
  544. package/dist/installer/registry.js.map +1 -1
  545. package/dist/languages/definitions/adoc.js +1 -1
  546. package/dist/languages/definitions/adoc.js.map +1 -1
  547. package/dist/languages/definitions/astro.js +1 -1
  548. package/dist/languages/definitions/astro.js.map +1 -1
  549. package/dist/languages/definitions/c-family.d.ts +34 -0
  550. package/dist/languages/definitions/c-family.d.ts.map +1 -0
  551. package/dist/languages/definitions/c-family.js +177 -0
  552. package/dist/languages/definitions/c-family.js.map +1 -0
  553. package/dist/languages/definitions/c.js +1 -1
  554. package/dist/languages/definitions/c.js.map +1 -1
  555. package/dist/languages/definitions/cpp.js +1 -1
  556. package/dist/languages/definitions/cpp.js.map +1 -1
  557. package/dist/languages/definitions/css-like.d.ts +5 -0
  558. package/dist/languages/definitions/css-like.d.ts.map +1 -0
  559. package/dist/languages/definitions/css-like.js +32 -0
  560. package/dist/languages/definitions/css-like.js.map +1 -0
  561. package/dist/languages/definitions/css.js +1 -1
  562. package/dist/languages/definitions/css.js.map +1 -1
  563. package/dist/languages/definitions/hbs.js +1 -1
  564. package/dist/languages/definitions/hbs.js.map +1 -1
  565. package/dist/languages/definitions/html-stub.d.ts +18 -0
  566. package/dist/languages/definitions/html-stub.d.ts.map +1 -0
  567. package/dist/languages/definitions/html-stub.js +36 -0
  568. package/dist/languages/definitions/html-stub.js.map +1 -0
  569. package/dist/languages/definitions/javascript.js +1 -1
  570. package/dist/languages/definitions/javascript.js.map +1 -1
  571. package/dist/languages/definitions/js-family.d.ts +5 -0
  572. package/dist/languages/definitions/js-family.d.ts.map +1 -0
  573. package/dist/languages/definitions/js-family.js +75 -0
  574. package/dist/languages/definitions/js-family.js.map +1 -0
  575. package/dist/languages/definitions/less.js +1 -1
  576. package/dist/languages/definitions/less.js.map +1 -1
  577. package/dist/languages/definitions/markdown.js +1 -1
  578. package/dist/languages/definitions/markdown.js.map +1 -1
  579. package/dist/languages/definitions/mdx.js +1 -1
  580. package/dist/languages/definitions/mdx.js.map +1 -1
  581. package/dist/languages/definitions/rst.js +1 -1
  582. package/dist/languages/definitions/rst.js.map +1 -1
  583. package/dist/languages/definitions/typescript.js +1 -1
  584. package/dist/languages/definitions/typescript.js.map +1 -1
  585. package/dist/languages/file-prep.d.ts +36 -0
  586. package/dist/languages/file-prep.d.ts.map +1 -0
  587. package/dist/languages/file-prep.js +76 -0
  588. package/dist/languages/file-prep.js.map +1 -0
  589. package/dist/languages/import-statement-parsers.d.ts +57 -0
  590. package/dist/languages/import-statement-parsers.d.ts.map +1 -0
  591. package/dist/languages/import-statement-parsers.js +383 -0
  592. package/dist/languages/import-statement-parsers.js.map +1 -0
  593. package/dist/languages/query-generator.d.ts +6 -0
  594. package/dist/languages/query-generator.d.ts.map +1 -0
  595. package/dist/languages/query-generator.js +46 -0
  596. package/dist/languages/query-generator.js.map +1 -0
  597. package/dist/lifecycle/manifest.d.ts +1 -1
  598. package/dist/lifecycle/manifest.d.ts.map +1 -1
  599. package/dist/lifecycle/manifest.js +6 -4
  600. package/dist/lifecycle/manifest.js.map +1 -1
  601. package/dist/mcp/handlers.d.ts +7 -7
  602. package/dist/mcp/handlers.d.ts.map +1 -1
  603. package/dist/mcp/handlers.js +12 -15
  604. package/dist/mcp/handlers.js.map +1 -1
  605. package/dist/mcp/http-transport.d.ts +14 -0
  606. package/dist/mcp/http-transport.d.ts.map +1 -0
  607. package/dist/mcp/http-transport.js +185 -0
  608. package/dist/mcp/http-transport.js.map +1 -0
  609. package/dist/mcp/legacy-sessions.d.ts +38 -0
  610. package/dist/mcp/legacy-sessions.d.ts.map +1 -0
  611. package/dist/mcp/legacy-sessions.js +264 -0
  612. package/dist/mcp/legacy-sessions.js.map +1 -0
  613. package/dist/mcp/lifecycle-health.d.ts +12 -0
  614. package/dist/mcp/lifecycle-health.d.ts.map +1 -0
  615. package/dist/mcp/lifecycle-health.js +37 -0
  616. package/dist/mcp/lifecycle-health.js.map +1 -0
  617. package/dist/mcp/protocol.d.ts +1 -1
  618. package/dist/mcp/protocol.d.ts.map +1 -1
  619. package/dist/mcp/protocol.js +3 -3
  620. package/dist/mcp/protocol.js.map +1 -1
  621. package/dist/mcp/security.js +1 -1
  622. package/dist/mcp/security.js.map +1 -1
  623. package/dist/mcp/server.d.ts +4 -4
  624. package/dist/mcp/server.d.ts.map +1 -1
  625. package/dist/mcp/server.js +6 -6
  626. package/dist/mcp/server.js.map +1 -1
  627. package/dist/mcp/sqlite-guard.d.ts +3 -0
  628. package/dist/mcp/sqlite-guard.d.ts.map +1 -0
  629. package/dist/mcp/sqlite-guard.js +35 -0
  630. package/dist/mcp/sqlite-guard.js.map +1 -0
  631. package/dist/mcp/stdio-lifecycle.d.ts +23 -0
  632. package/dist/mcp/stdio-lifecycle.d.ts.map +1 -0
  633. package/dist/mcp/stdio-lifecycle.js +83 -0
  634. package/dist/mcp/stdio-lifecycle.js.map +1 -0
  635. package/dist/mcp/tools.js +2 -2
  636. package/dist/mcp/tools.js.map +1 -1
  637. package/dist/native/binding-loader.d.ts +51 -0
  638. package/dist/native/binding-loader.d.ts.map +1 -0
  639. package/dist/native/binding-loader.js +223 -0
  640. package/dist/native/binding-loader.js.map +1 -0
  641. package/dist/native/byte-index.d.ts +26 -0
  642. package/dist/native/byte-index.d.ts.map +1 -0
  643. package/dist/native/byte-index.js +70 -0
  644. package/dist/native/byte-index.js.map +1 -0
  645. package/dist/native/execution.js +1 -1
  646. package/dist/native/execution.js.map +1 -1
  647. package/dist/native/js-bridge.d.ts +7 -0
  648. package/dist/native/js-bridge.d.ts.map +1 -0
  649. package/dist/native/js-bridge.js +20 -0
  650. package/dist/native/js-bridge.js.map +1 -0
  651. package/dist/native/native-backend-report.d.ts +22 -0
  652. package/dist/native/native-backend-report.d.ts.map +1 -0
  653. package/dist/native/native-backend-report.js +102 -0
  654. package/dist/native/native-backend-report.js.map +1 -0
  655. package/dist/native/projected-tree.d.ts +53 -0
  656. package/dist/native/projected-tree.d.ts.map +1 -0
  657. package/dist/native/projected-tree.js +180 -0
  658. package/dist/native/projected-tree.js.map +1 -0
  659. package/dist/native/query-results.d.ts +12 -0
  660. package/dist/native/query-results.d.ts.map +1 -0
  661. package/dist/native/query-results.js +34 -0
  662. package/dist/native/query-results.js.map +1 -0
  663. package/dist/native/runtime-cache.d.ts +128 -0
  664. package/dist/native/runtime-cache.d.ts.map +1 -0
  665. package/dist/native/runtime-cache.js +667 -0
  666. package/dist/native/runtime-cache.js.map +1 -0
  667. package/dist/native/runtime.js +3 -3
  668. package/dist/native/runtime.js.map +1 -1
  669. package/dist/native/tree-shape.d.ts +21 -0
  670. package/dist/native/tree-shape.d.ts.map +1 -0
  671. package/dist/native/tree-shape.js +28 -0
  672. package/dist/native/tree-shape.js.map +1 -0
  673. package/dist/native/tree-sitter-native.d.ts +6 -0
  674. package/dist/native/tree-sitter-native.d.ts.map +1 -0
  675. package/dist/native/tree-sitter-native.js +5 -0
  676. package/dist/native/tree-sitter-native.js.map +1 -0
  677. package/dist/review/deleted.js +2 -2
  678. package/dist/review/deleted.js.map +1 -1
  679. package/dist/review/report.d.ts +3 -3
  680. package/dist/review/report.d.ts.map +1 -1
  681. package/dist/review/report.js +2 -2
  682. package/dist/review/report.js.map +1 -1
  683. package/dist/review/summaries.js +3 -3
  684. package/dist/review/summaries.js.map +1 -1
  685. package/dist/review/types.d.ts +3 -3
  686. package/dist/review/types.d.ts.map +1 -1
  687. package/dist/review.js +3 -3
  688. package/dist/review.js.map +1 -1
  689. package/dist/runtime-identity.d.ts +27 -0
  690. package/dist/runtime-identity.d.ts.map +1 -0
  691. package/dist/runtime-identity.js +75 -0
  692. package/dist/runtime-identity.js.map +1 -0
  693. package/dist/session.js +1 -1
  694. package/dist/session.js.map +1 -1
  695. package/dist/sql/classify-sql-file.d.ts +3 -0
  696. package/dist/sql/classify-sql-file.d.ts.map +1 -0
  697. package/dist/sql/classify-sql-file.js +42 -0
  698. package/dist/sql/classify-sql-file.js.map +1 -0
  699. package/dist/sql/extract-facts.d.ts +4 -0
  700. package/dist/sql/extract-facts.d.ts.map +1 -0
  701. package/dist/sql/extract-facts.js +511 -0
  702. package/dist/sql/extract-facts.js.map +1 -0
  703. package/dist/sql/graph.js +1 -1
  704. package/dist/sql/graph.js.map +1 -1
  705. package/dist/sql/index.d.ts +2 -2
  706. package/dist/sql/index.d.ts.map +1 -1
  707. package/dist/sql/index.js +2 -2
  708. package/dist/sql/index.js.map +1 -1
  709. package/dist/sql/navigation.js +1 -1
  710. package/dist/sql/navigation.js.map +1 -1
  711. package/dist/sql/review.js +2 -2
  712. package/dist/sql/review.js.map +1 -1
  713. package/dist/sql/source-graph.d.ts +19 -0
  714. package/dist/sql/source-graph.d.ts.map +1 -0
  715. package/dist/sql/source-graph.js +195 -0
  716. package/dist/sql/source-graph.js.map +1 -0
  717. package/dist/sqlite/query.d.ts +2 -2
  718. package/dist/sqlite/query.d.ts.map +1 -1
  719. package/dist/sqlite/query.js +3 -3
  720. package/dist/sqlite/query.js.map +1 -1
  721. package/dist/sqlite/raw-query-worker-pool.d.ts +66 -0
  722. package/dist/sqlite/raw-query-worker-pool.d.ts.map +1 -0
  723. package/dist/sqlite/raw-query-worker-pool.js +146 -0
  724. package/dist/sqlite/raw-query-worker-pool.js.map +1 -0
  725. package/dist/sqlite/raw-query-worker.d.ts +22 -0
  726. package/dist/sqlite/raw-query-worker.d.ts.map +1 -0
  727. package/dist/sqlite/raw-query-worker.js +31 -0
  728. package/dist/sqlite/raw-query-worker.js.map +1 -0
  729. package/dist/sqlite/row-bounds.d.ts +24 -0
  730. package/dist/sqlite/row-bounds.d.ts.map +1 -0
  731. package/dist/sqlite/row-bounds.js +95 -0
  732. package/dist/sqlite/row-bounds.js.map +1 -0
  733. package/dist/sqlite-driver.js +1 -1
  734. package/dist/sqlite-driver.js.map +1 -1
  735. package/dist/util/bloom-filter.d.ts +100 -0
  736. package/dist/util/bloom-filter.d.ts.map +1 -0
  737. package/dist/util/bloom-filter.js +206 -0
  738. package/dist/util/bloom-filter.js.map +1 -0
  739. package/dist/util/confined-file.d.ts +48 -0
  740. package/dist/util/confined-file.d.ts.map +1 -0
  741. package/dist/util/confined-file.js +164 -0
  742. package/dist/util/confined-file.js.map +1 -0
  743. package/dist/util/discovery-path.d.ts +3 -0
  744. package/dist/util/discovery-path.d.ts.map +1 -0
  745. package/dist/util/discovery-path.js +19 -0
  746. package/dist/util/discovery-path.js.map +1 -0
  747. package/dist/util/git.d.ts +13 -10
  748. package/dist/util/git.d.ts.map +1 -1
  749. package/dist/util/git.js +29 -25
  750. package/dist/util/git.js.map +1 -1
  751. package/dist/util/graph-edges.d.ts +5 -0
  752. package/dist/util/graph-edges.d.ts.map +1 -0
  753. package/dist/util/graph-edges.js +42 -0
  754. package/dist/util/graph-edges.js.map +1 -0
  755. package/dist/util/graph-only-extensions.d.ts +5 -0
  756. package/dist/util/graph-only-extensions.d.ts.map +1 -0
  757. package/dist/util/graph-only-extensions.js +12 -0
  758. package/dist/util/graph-only-extensions.js.map +1 -0
  759. package/dist/util/include-roots.d.ts +6 -0
  760. package/dist/util/include-roots.d.ts.map +1 -0
  761. package/dist/util/include-roots.js +53 -0
  762. package/dist/util/include-roots.js.map +1 -0
  763. package/dist/util/lazy-symbols.d.ts +166 -0
  764. package/dist/util/lazy-symbols.d.ts.map +1 -0
  765. package/dist/util/lazy-symbols.js +365 -0
  766. package/dist/util/lazy-symbols.js.map +1 -0
  767. package/dist/util/lru-map.d.ts +3 -0
  768. package/dist/util/lru-map.d.ts.map +1 -0
  769. package/dist/util/lru-map.js +22 -0
  770. package/dist/util/lru-map.js.map +1 -0
  771. package/dist/util/member-access.d.ts +26 -0
  772. package/dist/util/member-access.d.ts.map +1 -0
  773. package/dist/util/member-access.js +185 -0
  774. package/dist/util/member-access.js.map +1 -0
  775. package/dist/util/package-exports.d.ts +25 -0
  776. package/dist/util/package-exports.d.ts.map +1 -0
  777. package/dist/util/package-exports.js +79 -0
  778. package/dist/util/package-exports.js.map +1 -0
  779. package/dist/util/package-info.d.ts +12 -0
  780. package/dist/util/package-info.d.ts.map +1 -0
  781. package/dist/util/package-info.js +57 -0
  782. package/dist/util/package-info.js.map +1 -0
  783. package/dist/util/partial-results.d.ts +81 -0
  784. package/dist/util/partial-results.d.ts.map +1 -0
  785. package/dist/util/partial-results.js +290 -0
  786. package/dist/util/partial-results.js.map +1 -0
  787. package/dist/util/project-files/definitions.d.ts +40 -0
  788. package/dist/util/project-files/definitions.d.ts.map +1 -0
  789. package/dist/util/project-files/definitions.js.map +1 -0
  790. package/dist/util/project-files/parsers.d.ts.map +1 -0
  791. package/dist/util/project-files/parsers.js.map +1 -0
  792. package/dist/util/project-files.d.ts +153 -0
  793. package/dist/util/project-files.d.ts.map +1 -0
  794. package/dist/util/project-files.js +1460 -0
  795. package/dist/util/project-files.js.map +1 -0
  796. package/dist/util/resolution/find-first-existing.d.ts +2 -0
  797. package/dist/util/resolution/find-first-existing.d.ts.map +1 -0
  798. package/dist/util/resolution/find-first-existing.js +13 -0
  799. package/dist/util/resolution/find-first-existing.js.map +1 -0
  800. package/dist/util/resolution/jvm.js +1 -1
  801. package/dist/util/resolution/jvm.js.map +1 -1
  802. package/dist/util/resolution/node.d.ts +1 -1
  803. package/dist/util/resolution/node.d.ts.map +1 -1
  804. package/dist/util/resolution/node.js +2 -2
  805. package/dist/util/resolution/node.js.map +1 -1
  806. package/dist/util/resolution/php-composer.d.ts +17 -0
  807. package/dist/util/resolution/php-composer.d.ts.map +1 -0
  808. package/dist/util/resolution/php-composer.js +269 -0
  809. package/dist/util/resolution/php-composer.js.map +1 -0
  810. package/dist/util/resolution/php.d.ts +1 -1
  811. package/dist/util/resolution/php.d.ts.map +1 -1
  812. package/dist/util/resolution/php.js +4 -4
  813. package/dist/util/resolution/php.js.map +1 -1
  814. package/dist/util/resolution/project-symbols.d.ts +14 -0
  815. package/dist/util/resolution/project-symbols.d.ts.map +1 -0
  816. package/dist/util/resolution/project-symbols.js +70 -0
  817. package/dist/util/resolution/project-symbols.js.map +1 -0
  818. package/dist/util/resolution/tsconfig.d.ts +7 -0
  819. package/dist/util/resolution/tsconfig.d.ts.map +1 -1
  820. package/dist/util/resolution/tsconfig.js +23 -8
  821. package/dist/util/resolution/tsconfig.js.map +1 -1
  822. package/dist/util/resolution-candidates.d.ts +5 -0
  823. package/dist/util/resolution-candidates.d.ts.map +1 -0
  824. package/dist/util/resolution-candidates.js +70 -0
  825. package/dist/util/resolution-candidates.js.map +1 -0
  826. package/dist/util/resolution.d.ts +2 -2
  827. package/dist/util/resolution.d.ts.map +1 -1
  828. package/dist/util/resolution.js +6 -6
  829. package/dist/util/resolution.js.map +1 -1
  830. package/dist/util/rust-test-modules.d.ts +3 -0
  831. package/dist/util/rust-test-modules.d.ts.map +1 -0
  832. package/dist/util/rust-test-modules.js +71 -0
  833. package/dist/util/rust-test-modules.js.map +1 -0
  834. package/dist/util/source-location.d.ts +8 -0
  835. package/dist/util/source-location.d.ts.map +1 -0
  836. package/dist/util/source-location.js +19 -0
  837. package/dist/util/source-location.js.map +1 -0
  838. package/dist/util/sqlite-schema.d.ts +28 -0
  839. package/dist/util/sqlite-schema.d.ts.map +1 -0
  840. package/dist/util/sqlite-schema.js +75 -0
  841. package/dist/util/sqlite-schema.js.map +1 -0
  842. package/dist/util/symbol-hash.d.ts +59 -0
  843. package/dist/util/symbol-hash.d.ts.map +1 -0
  844. package/dist/util/symbol-hash.js +84 -0
  845. package/dist/util/symbol-hash.js.map +1 -0
  846. package/dist/util/windows-process-drain.d.ts +23 -0
  847. package/dist/util/windows-process-drain.d.ts.map +1 -0
  848. package/dist/util/windows-process-drain.js +51 -0
  849. package/dist/util/windows-process-drain.js.map +1 -0
  850. package/dist/util/worker-threads.d.ts +12 -0
  851. package/dist/util/worker-threads.d.ts.map +1 -0
  852. package/dist/util/worker-threads.js +19 -0
  853. package/dist/util/worker-threads.js.map +1 -0
  854. package/dist/util/workspace.d.ts +1 -1
  855. package/dist/util/workspace.d.ts.map +1 -1
  856. package/dist/util/workspace.js +2 -2
  857. package/dist/util/workspace.js.map +1 -1
  858. package/dist/util.d.ts +2 -2
  859. package/dist/util.d.ts.map +1 -1
  860. package/dist/util.js +1 -1
  861. package/dist/util.js.map +1 -1
  862. package/dist/worker/native-extract-worker.d.ts +77 -0
  863. package/dist/worker/native-extract-worker.d.ts.map +1 -0
  864. package/dist/worker/native-extract-worker.js +272 -0
  865. package/dist/worker/native-extract-worker.js.map +1 -0
  866. package/dist/worker/native-worker-pool.d.ts +16 -0
  867. package/dist/worker/native-worker-pool.d.ts.map +1 -0
  868. package/dist/worker/native-worker-pool.js +54 -0
  869. package/dist/worker/native-worker-pool.js.map +1 -0
  870. package/docs/mcp.md +2 -2
  871. package/package.json +4 -4
  872. package/dist/agent/callHierarchy.d.ts +0 -28
  873. package/dist/agent/callHierarchy.d.ts.map +0 -1
  874. package/dist/agent/callHierarchy.js +0 -82
  875. package/dist/agent/callHierarchy.js.map +0 -1
  876. package/dist/agent/candidateTests.d.ts +0 -12
  877. package/dist/agent/candidateTests.d.ts.map +0 -1
  878. package/dist/agent/candidateTests.js +0 -17
  879. package/dist/agent/candidateTests.js.map +0 -1
  880. package/dist/agent/fileView.d.ts +0 -55
  881. package/dist/agent/fileView.d.ts.map +0 -1
  882. package/dist/agent/fileView.js +0 -521
  883. package/dist/agent/fileView.js.map +0 -1
  884. package/dist/agent/followUps.d.ts +0 -10
  885. package/dist/agent/followUps.d.ts.map +0 -1
  886. package/dist/agent/followUps.js +0 -175
  887. package/dist/agent/followUps.js.map +0 -1
  888. package/dist/agent/query-index/queryIndexWorker.d.ts +0 -8
  889. package/dist/agent/query-index/queryIndexWorker.d.ts.map +0 -1
  890. package/dist/agent/query-index/queryIndexWorker.js +0 -11
  891. package/dist/agent/query-index/queryIndexWorker.js.map +0 -1
  892. package/dist/agent/query-index/sessionStore.d.ts +0 -5
  893. package/dist/agent/query-index/sessionStore.d.ts.map +0 -1
  894. package/dist/agent/query-index/sessionStore.js +0 -69
  895. package/dist/agent/query-index/sessionStore.js.map +0 -1
  896. package/dist/agent/query-index/sourceIdentity.d.ts +0 -3
  897. package/dist/agent/query-index/sourceIdentity.d.ts.map +0 -1
  898. package/dist/agent/query-index/sourceIdentity.js +0 -12
  899. package/dist/agent/query-index/sourceIdentity.js.map +0 -1
  900. package/dist/agent/query-index/workerPool.d.ts +0 -27
  901. package/dist/agent/query-index/workerPool.d.ts.map +0 -1
  902. package/dist/agent/query-index/workerPool.js +0 -114
  903. package/dist/agent/query-index/workerPool.js.map +0 -1
  904. package/dist/agent/refactorPlan.d.ts +0 -40
  905. package/dist/agent/refactorPlan.d.ts.map +0 -1
  906. package/dist/agent/refactorPlan.js +0 -226
  907. package/dist/agent/refactorPlan.js.map +0 -1
  908. package/dist/agent/renamePreview.d.ts +0 -57
  909. package/dist/agent/renamePreview.d.ts.map +0 -1
  910. package/dist/agent/renamePreview.js +0 -1062
  911. package/dist/agent/renamePreview.js.map +0 -1
  912. package/dist/agent/semanticSymbols.d.ts +0 -16
  913. package/dist/agent/semanticSymbols.d.ts.map +0 -1
  914. package/dist/agent/semanticSymbols.js +0 -97
  915. package/dist/agent/semanticSymbols.js.map +0 -1
  916. package/dist/agent/sessionLifecycle.d.ts +0 -5
  917. package/dist/agent/sessionLifecycle.d.ts.map +0 -1
  918. package/dist/agent/sessionLifecycle.js +0 -18
  919. package/dist/agent/sessionLifecycle.js.map +0 -1
  920. package/dist/agent/symbolLookup.d.ts +0 -12
  921. package/dist/agent/symbolLookup.d.ts.map +0 -1
  922. package/dist/agent/symbolLookup.js +0 -26
  923. package/dist/agent/symbolLookup.js.map +0 -1
  924. package/dist/agent/typeHierarchy.d.ts +0 -39
  925. package/dist/agent/typeHierarchy.d.ts.map +0 -1
  926. package/dist/agent/typeHierarchy.js +0 -125
  927. package/dist/agent/typeHierarchy.js.map +0 -1
  928. package/dist/agent/workspaceSymbols.d.ts +0 -18
  929. package/dist/agent/workspaceSymbols.d.ts.map +0 -1
  930. package/dist/agent/workspaceSymbols.js +0 -75
  931. package/dist/agent/workspaceSymbols.js.map +0 -1
  932. package/dist/analysisSummary.d.ts +0 -19
  933. package/dist/analysisSummary.d.ts.map +0 -1
  934. package/dist/analysisSummary.js +0 -80
  935. package/dist/analysisSummary.js.map +0 -1
  936. package/dist/bin/queryIndexWorker.js +0 -4382
  937. package/dist/bin/rawQueryWorker.js +0 -383
  938. package/dist/bootstrap/treeSitterLanguages.d.ts +0 -5
  939. package/dist/bootstrap/treeSitterLanguages.d.ts.map +0 -1
  940. package/dist/bootstrap/treeSitterLanguages.js +0 -41
  941. package/dist/bootstrap/treeSitterLanguages.js.map +0 -1
  942. package/dist/chunking/chunkBlocks.d.ts +0 -9
  943. package/dist/chunking/chunkBlocks.d.ts.map +0 -1
  944. package/dist/chunking/chunkBlocks.js +0 -60
  945. package/dist/chunking/chunkBlocks.js.map +0 -1
  946. package/dist/chunking/chunkFile.d.ts +0 -39
  947. package/dist/chunking/chunkFile.d.ts.map +0 -1
  948. package/dist/chunking/chunkFile.js +0 -152
  949. package/dist/chunking/chunkFile.js.map +0 -1
  950. package/dist/chunking/chunkId.d.ts +0 -7
  951. package/dist/chunking/chunkId.d.ts.map +0 -1
  952. package/dist/chunking/chunkId.js +0 -30
  953. package/dist/chunking/chunkId.js.map +0 -1
  954. package/dist/chunking/chunkMatches.d.ts +0 -4
  955. package/dist/chunking/chunkMatches.d.ts.map +0 -1
  956. package/dist/chunking/chunkMatches.js +0 -65
  957. package/dist/chunking/chunkMatches.js.map +0 -1
  958. package/dist/chunking/chunkMerge.d.ts +0 -4
  959. package/dist/chunking/chunkMerge.d.ts.map +0 -1
  960. package/dist/chunking/chunkMerge.js +0 -144
  961. package/dist/chunking/chunkMerge.js.map +0 -1
  962. package/dist/chunking/chunkSFC.d.ts +0 -18
  963. package/dist/chunking/chunkSFC.d.ts.map +0 -1
  964. package/dist/chunking/chunkSFC.js +0 -165
  965. package/dist/chunking/chunkSFC.js.map +0 -1
  966. package/dist/chunking/chunkSplit.d.ts +0 -6
  967. package/dist/chunking/chunkSplit.d.ts.map +0 -1
  968. package/dist/chunking/chunkSplit.js +0 -155
  969. package/dist/chunking/chunkSplit.js.map +0 -1
  970. package/dist/chunking/chunkTextFile.d.ts +0 -28
  971. package/dist/chunking/chunkTextFile.d.ts.map +0 -1
  972. package/dist/chunking/chunkTextFile.js +0 -107
  973. package/dist/chunking/chunkTextFile.js.map +0 -1
  974. package/dist/chunking/languageConfig.d.ts +0 -35
  975. package/dist/chunking/languageConfig.d.ts.map +0 -1
  976. package/dist/chunking/languageConfig.js +0 -24
  977. package/dist/chunking/languageConfig.js.map +0 -1
  978. package/dist/cli/callHierarchy.d.ts +0 -6
  979. package/dist/cli/callHierarchy.d.ts.map +0 -1
  980. package/dist/cli/callHierarchy.js +0 -72
  981. package/dist/cli/callHierarchy.js.map +0 -1
  982. package/dist/cli/commandCatalog.d.ts +0 -14
  983. package/dist/cli/commandCatalog.d.ts.map +0 -1
  984. package/dist/cli/commandCatalog.js +0 -118
  985. package/dist/cli/commandCatalog.js.map +0 -1
  986. package/dist/cli/commandTable.d.ts +0 -16
  987. package/dist/cli/commandTable.d.ts.map +0 -1
  988. package/dist/cli/commandTable.js +0 -758
  989. package/dist/cli/commandTable.js.map +0 -1
  990. package/dist/cli/compileCache.d.ts +0 -22
  991. package/dist/cli/compileCache.d.ts.map +0 -1
  992. package/dist/cli/compileCache.js +0 -81
  993. package/dist/cli/compileCache.js.map +0 -1
  994. package/dist/cli/discoveryGlobs.d.ts +0 -11
  995. package/dist/cli/discoveryGlobs.d.ts.map +0 -1
  996. package/dist/cli/discoveryGlobs.js +0 -74
  997. package/dist/cli/discoveryGlobs.js.map +0 -1
  998. package/dist/cli/duplicateSimilarity.d.ts +0 -10
  999. package/dist/cli/duplicateSimilarity.d.ts.map +0 -1
  1000. package/dist/cli/duplicateSimilarity.js +0 -20
  1001. package/dist/cli/duplicateSimilarity.js.map +0 -1
  1002. package/dist/cli/graphDelta.d.ts +0 -25
  1003. package/dist/cli/graphDelta.d.ts.map +0 -1
  1004. package/dist/cli/graphDelta.js +0 -80
  1005. package/dist/cli/graphDelta.js.map +0 -1
  1006. package/dist/cli/graphQueries.d.ts +0 -23
  1007. package/dist/cli/graphQueries.d.ts.map +0 -1
  1008. package/dist/cli/graphQueries.js +0 -265
  1009. package/dist/cli/graphQueries.js.map +0 -1
  1010. package/dist/cli/indexPolicy.d.ts +0 -36
  1011. package/dist/cli/indexPolicy.d.ts.map +0 -1
  1012. package/dist/cli/indexPolicy.js +0 -169
  1013. package/dist/cli/indexPolicy.js.map +0 -1
  1014. package/dist/cli/invocationContext.d.ts +0 -77
  1015. package/dist/cli/invocationContext.d.ts.map +0 -1
  1016. package/dist/cli/invocationContext.js +0 -423
  1017. package/dist/cli/invocationContext.js.map +0 -1
  1018. package/dist/cli/projectFile.d.ts +0 -13
  1019. package/dist/cli/projectFile.d.ts.map +0 -1
  1020. package/dist/cli/projectFile.js +0 -23
  1021. package/dist/cli/projectFile.js.map +0 -1
  1022. package/dist/cli/refactorPlan.d.ts +0 -6
  1023. package/dist/cli/refactorPlan.d.ts.map +0 -1
  1024. package/dist/cli/refactorPlan.js +0 -84
  1025. package/dist/cli/refactorPlan.js.map +0 -1
  1026. package/dist/cli/renamePreview.d.ts +0 -4
  1027. package/dist/cli/renamePreview.d.ts.map +0 -1
  1028. package/dist/cli/renamePreview.js +0 -92
  1029. package/dist/cli/renamePreview.js.map +0 -1
  1030. package/dist/cli/rootPolicy.d.ts +0 -53
  1031. package/dist/cli/rootPolicy.d.ts.map +0 -1
  1032. package/dist/cli/rootPolicy.js +0 -221
  1033. package/dist/cli/rootPolicy.js.map +0 -1
  1034. package/dist/cli/typeHierarchy.d.ts +0 -6
  1035. package/dist/cli/typeHierarchy.d.ts.map +0 -1
  1036. package/dist/cli/typeHierarchy.js +0 -90
  1037. package/dist/cli/typeHierarchy.js.map +0 -1
  1038. package/dist/cliBootstrap.d.ts +0 -3
  1039. package/dist/cliBootstrap.d.ts.map +0 -1
  1040. package/dist/cliBootstrap.js +0 -10
  1041. package/dist/cliBootstrap.js.map +0 -1
  1042. package/dist/documentLinks/asciidoc.d.ts.map +0 -1
  1043. package/dist/documentLinks/asciidoc.js.map +0 -1
  1044. package/dist/documentLinks/check.d.ts +0 -32
  1045. package/dist/documentLinks/check.d.ts.map +0 -1
  1046. package/dist/documentLinks/check.js +0 -286
  1047. package/dist/documentLinks/check.js.map +0 -1
  1048. package/dist/documentLinks/html.d.ts.map +0 -1
  1049. package/dist/documentLinks/html.js.map +0 -1
  1050. package/dist/documentLinks/markdown.d.ts.map +0 -1
  1051. package/dist/documentLinks/markdown.js.map +0 -1
  1052. package/dist/documentLinks/rst.d.ts.map +0 -1
  1053. package/dist/documentLinks/rst.js.map +0 -1
  1054. package/dist/documentLinks/sfc.d.ts.map +0 -1
  1055. package/dist/documentLinks/sfc.js.map +0 -1
  1056. package/dist/documentLinks/shared.d.ts.map +0 -1
  1057. package/dist/documentLinks/shared.js.map +0 -1
  1058. package/dist/documentLinks.d.ts +0 -12
  1059. package/dist/documentLinks.d.ts.map +0 -1
  1060. package/dist/documentLinks.js +0 -49
  1061. package/dist/documentLinks.js.map +0 -1
  1062. package/dist/duplicates/unitCache.d.ts +0 -46
  1063. package/dist/duplicates/unitCache.d.ts.map +0 -1
  1064. package/dist/duplicates/unitCache.js +0 -512
  1065. package/dist/duplicates/unitCache.js.map +0 -1
  1066. package/dist/duplicatesLeads.d.ts +0 -39
  1067. package/dist/duplicatesLeads.d.ts.map +0 -1
  1068. package/dist/duplicatesLeads.js +0 -112
  1069. package/dist/duplicatesLeads.js.map +0 -1
  1070. package/dist/graphs/edgeResolution.d.ts +0 -25
  1071. package/dist/graphs/edgeResolution.d.ts.map +0 -1
  1072. package/dist/graphs/edgeResolution.js +0 -97
  1073. package/dist/graphs/edgeResolution.js.map +0 -1
  1074. package/dist/graphs/symbol-graph-detailed/edgePasses.d.ts +0 -35
  1075. package/dist/graphs/symbol-graph-detailed/edgePasses.d.ts.map +0 -1
  1076. package/dist/graphs/symbol-graph-detailed/edgePasses.js +0 -586
  1077. package/dist/graphs/symbol-graph-detailed/edgePasses.js.map +0 -1
  1078. package/dist/graphs/symbol-graph-detailed/importAliases.d.ts +0 -10
  1079. package/dist/graphs/symbol-graph-detailed/importAliases.d.ts.map +0 -1
  1080. package/dist/graphs/symbol-graph-detailed/importAliases.js +0 -44
  1081. package/dist/graphs/symbol-graph-detailed/importAliases.js.map +0 -1
  1082. package/dist/graphs/symbol-graph-detailed/memberChains.d.ts +0 -17
  1083. package/dist/graphs/symbol-graph-detailed/memberChains.d.ts.map +0 -1
  1084. package/dist/graphs/symbol-graph-detailed/memberChains.js +0 -30
  1085. package/dist/graphs/symbol-graph-detailed/memberChains.js.map +0 -1
  1086. package/dist/graphs/symbol-graph-detailed/receiverCalls.d.ts +0 -69
  1087. package/dist/graphs/symbol-graph-detailed/receiverCalls.d.ts.map +0 -1
  1088. package/dist/graphs/symbol-graph-detailed/receiverCalls.js +0 -408
  1089. package/dist/graphs/symbol-graph-detailed/receiverCalls.js.map +0 -1
  1090. package/dist/impact/call-compatibility/textScanner.d.ts +0 -23
  1091. package/dist/impact/call-compatibility/textScanner.d.ts.map +0 -1
  1092. package/dist/impact/call-compatibility/textScanner.js +0 -615
  1093. package/dist/impact/call-compatibility/textScanner.js.map +0 -1
  1094. package/dist/impact/callCompatibility.d.ts +0 -24
  1095. package/dist/impact/callCompatibility.d.ts.map +0 -1
  1096. package/dist/impact/callCompatibility.js +0 -1023
  1097. package/dist/impact/callCompatibility.js.map +0 -1
  1098. package/dist/impact/memberResolutionCoverage.d.ts +0 -14
  1099. package/dist/impact/memberResolutionCoverage.d.ts.map +0 -1
  1100. package/dist/impact/memberResolutionCoverage.js +0 -42
  1101. package/dist/impact/memberResolutionCoverage.js.map +0 -1
  1102. package/dist/impact/referenceCache.d.ts +0 -12
  1103. package/dist/impact/referenceCache.d.ts.map +0 -1
  1104. package/dist/impact/referenceCache.js +0 -101
  1105. package/dist/impact/referenceCache.js.map +0 -1
  1106. package/dist/impact/reportCompact.d.ts +0 -8
  1107. package/dist/impact/reportCompact.d.ts.map +0 -1
  1108. package/dist/impact/reportCompact.js +0 -153
  1109. package/dist/impact/reportCompact.js.map +0 -1
  1110. package/dist/impact/reportFull.d.ts +0 -10
  1111. package/dist/impact/reportFull.d.ts.map +0 -1
  1112. package/dist/impact/reportFull.js +0 -67
  1113. package/dist/impact/reportFull.js.map +0 -1
  1114. package/dist/impact/reportParts.d.ts +0 -51
  1115. package/dist/impact/reportParts.d.ts.map +0 -1
  1116. package/dist/impact/reportParts.js +0 -2
  1117. package/dist/impact/reportParts.js.map +0 -1
  1118. package/dist/impact/reportShared.d.ts +0 -76
  1119. package/dist/impact/reportShared.d.ts.map +0 -1
  1120. package/dist/impact/reportShared.js +0 -130
  1121. package/dist/impact/reportShared.js.map +0 -1
  1122. package/dist/impact/testPatterns.d.ts +0 -6
  1123. package/dist/impact/testPatterns.d.ts.map +0 -1
  1124. package/dist/impact/testPatterns.js +0 -65
  1125. package/dist/impact/testPatterns.js.map +0 -1
  1126. package/dist/indexer/imports/graphOnly.d.ts +0 -13
  1127. package/dist/indexer/imports/graphOnly.d.ts.map +0 -1
  1128. package/dist/indexer/imports/graphOnly.js +0 -40
  1129. package/dist/indexer/imports/graphOnly.js.map +0 -1
  1130. package/dist/indexer/imports/jsTextImports.d.ts +0 -9
  1131. package/dist/indexer/imports/jsTextImports.d.ts.map +0 -1
  1132. package/dist/indexer/imports/jsTextImports.js +0 -181
  1133. package/dist/indexer/imports/jsTextImports.js.map +0 -1
  1134. package/dist/indexer/imports/languageSpecific.d.ts +0 -26
  1135. package/dist/indexer/imports/languageSpecific.d.ts.map +0 -1
  1136. package/dist/indexer/imports/languageSpecific.js +0 -449
  1137. package/dist/indexer/imports/languageSpecific.js.map +0 -1
  1138. package/dist/indexer/imports/nativeCaptures.d.ts +0 -16
  1139. package/dist/indexer/imports/nativeCaptures.d.ts.map +0 -1
  1140. package/dist/indexer/imports/nativeCaptures.js +0 -142
  1141. package/dist/indexer/imports/nativeCaptures.js.map +0 -1
  1142. package/dist/languages/definitions/cFamily.d.ts +0 -34
  1143. package/dist/languages/definitions/cFamily.d.ts.map +0 -1
  1144. package/dist/languages/definitions/cFamily.js +0 -177
  1145. package/dist/languages/definitions/cFamily.js.map +0 -1
  1146. package/dist/languages/definitions/cssLike.d.ts +0 -5
  1147. package/dist/languages/definitions/cssLike.d.ts.map +0 -1
  1148. package/dist/languages/definitions/cssLike.js +0 -32
  1149. package/dist/languages/definitions/cssLike.js.map +0 -1
  1150. package/dist/languages/definitions/htmlStub.d.ts +0 -18
  1151. package/dist/languages/definitions/htmlStub.d.ts.map +0 -1
  1152. package/dist/languages/definitions/htmlStub.js +0 -36
  1153. package/dist/languages/definitions/htmlStub.js.map +0 -1
  1154. package/dist/languages/definitions/jsFamily.d.ts +0 -5
  1155. package/dist/languages/definitions/jsFamily.d.ts.map +0 -1
  1156. package/dist/languages/definitions/jsFamily.js +0 -75
  1157. package/dist/languages/definitions/jsFamily.js.map +0 -1
  1158. package/dist/languages/filePrep.d.ts +0 -36
  1159. package/dist/languages/filePrep.d.ts.map +0 -1
  1160. package/dist/languages/filePrep.js +0 -76
  1161. package/dist/languages/filePrep.js.map +0 -1
  1162. package/dist/languages/importStatementParsers.d.ts +0 -57
  1163. package/dist/languages/importStatementParsers.d.ts.map +0 -1
  1164. package/dist/languages/importStatementParsers.js +0 -383
  1165. package/dist/languages/importStatementParsers.js.map +0 -1
  1166. package/dist/languages/queryGenerator.d.ts +0 -6
  1167. package/dist/languages/queryGenerator.d.ts.map +0 -1
  1168. package/dist/languages/queryGenerator.js +0 -46
  1169. package/dist/languages/queryGenerator.js.map +0 -1
  1170. package/dist/mcp/httpTransport.d.ts +0 -14
  1171. package/dist/mcp/httpTransport.d.ts.map +0 -1
  1172. package/dist/mcp/httpTransport.js +0 -185
  1173. package/dist/mcp/httpTransport.js.map +0 -1
  1174. package/dist/mcp/legacySessions.d.ts +0 -38
  1175. package/dist/mcp/legacySessions.d.ts.map +0 -1
  1176. package/dist/mcp/legacySessions.js +0 -264
  1177. package/dist/mcp/legacySessions.js.map +0 -1
  1178. package/dist/mcp/lifecycleHealth.d.ts +0 -12
  1179. package/dist/mcp/lifecycleHealth.d.ts.map +0 -1
  1180. package/dist/mcp/lifecycleHealth.js +0 -37
  1181. package/dist/mcp/lifecycleHealth.js.map +0 -1
  1182. package/dist/mcp/sqliteGuard.d.ts +0 -3
  1183. package/dist/mcp/sqliteGuard.d.ts.map +0 -1
  1184. package/dist/mcp/sqliteGuard.js +0 -35
  1185. package/dist/mcp/sqliteGuard.js.map +0 -1
  1186. package/dist/mcp/stdioLifecycle.d.ts +0 -23
  1187. package/dist/mcp/stdioLifecycle.d.ts.map +0 -1
  1188. package/dist/mcp/stdioLifecycle.js +0 -83
  1189. package/dist/mcp/stdioLifecycle.js.map +0 -1
  1190. package/dist/native/bindingLoader.d.ts +0 -51
  1191. package/dist/native/bindingLoader.d.ts.map +0 -1
  1192. package/dist/native/bindingLoader.js +0 -223
  1193. package/dist/native/bindingLoader.js.map +0 -1
  1194. package/dist/native/byteIndex.d.ts +0 -26
  1195. package/dist/native/byteIndex.d.ts.map +0 -1
  1196. package/dist/native/byteIndex.js +0 -70
  1197. package/dist/native/byteIndex.js.map +0 -1
  1198. package/dist/native/jsBridge.d.ts +0 -7
  1199. package/dist/native/jsBridge.d.ts.map +0 -1
  1200. package/dist/native/jsBridge.js +0 -25
  1201. package/dist/native/jsBridge.js.map +0 -1
  1202. package/dist/native/nativeBackendReport.d.ts +0 -22
  1203. package/dist/native/nativeBackendReport.d.ts.map +0 -1
  1204. package/dist/native/nativeBackendReport.js +0 -102
  1205. package/dist/native/nativeBackendReport.js.map +0 -1
  1206. package/dist/native/projectedTree.d.ts +0 -53
  1207. package/dist/native/projectedTree.d.ts.map +0 -1
  1208. package/dist/native/projectedTree.js +0 -180
  1209. package/dist/native/projectedTree.js.map +0 -1
  1210. package/dist/native/queryResults.d.ts +0 -12
  1211. package/dist/native/queryResults.d.ts.map +0 -1
  1212. package/dist/native/queryResults.js +0 -34
  1213. package/dist/native/queryResults.js.map +0 -1
  1214. package/dist/native/runtimeCache.d.ts +0 -128
  1215. package/dist/native/runtimeCache.d.ts.map +0 -1
  1216. package/dist/native/runtimeCache.js +0 -667
  1217. package/dist/native/runtimeCache.js.map +0 -1
  1218. package/dist/native/treeShape.d.ts +0 -21
  1219. package/dist/native/treeShape.d.ts.map +0 -1
  1220. package/dist/native/treeShape.js +0 -28
  1221. package/dist/native/treeShape.js.map +0 -1
  1222. package/dist/native/treeSitterNative.d.ts +0 -6
  1223. package/dist/native/treeSitterNative.d.ts.map +0 -1
  1224. package/dist/native/treeSitterNative.js +0 -5
  1225. package/dist/native/treeSitterNative.js.map +0 -1
  1226. package/dist/runtimeIdentity.d.ts +0 -27
  1227. package/dist/runtimeIdentity.d.ts.map +0 -1
  1228. package/dist/runtimeIdentity.js +0 -75
  1229. package/dist/runtimeIdentity.js.map +0 -1
  1230. package/dist/sql/classifySqlFile.d.ts +0 -3
  1231. package/dist/sql/classifySqlFile.d.ts.map +0 -1
  1232. package/dist/sql/classifySqlFile.js +0 -42
  1233. package/dist/sql/classifySqlFile.js.map +0 -1
  1234. package/dist/sql/extractFacts.d.ts +0 -4
  1235. package/dist/sql/extractFacts.d.ts.map +0 -1
  1236. package/dist/sql/extractFacts.js +0 -511
  1237. package/dist/sql/extractFacts.js.map +0 -1
  1238. package/dist/sql/sourceGraph.d.ts +0 -19
  1239. package/dist/sql/sourceGraph.d.ts.map +0 -1
  1240. package/dist/sql/sourceGraph.js +0 -195
  1241. package/dist/sql/sourceGraph.js.map +0 -1
  1242. package/dist/sqlite/rawQueryWorker.d.ts +0 -22
  1243. package/dist/sqlite/rawQueryWorker.d.ts.map +0 -1
  1244. package/dist/sqlite/rawQueryWorker.js +0 -31
  1245. package/dist/sqlite/rawQueryWorker.js.map +0 -1
  1246. package/dist/sqlite/rawQueryWorkerPool.d.ts +0 -66
  1247. package/dist/sqlite/rawQueryWorkerPool.d.ts.map +0 -1
  1248. package/dist/sqlite/rawQueryWorkerPool.js +0 -146
  1249. package/dist/sqlite/rawQueryWorkerPool.js.map +0 -1
  1250. package/dist/sqlite/rowBounds.d.ts +0 -24
  1251. package/dist/sqlite/rowBounds.d.ts.map +0 -1
  1252. package/dist/sqlite/rowBounds.js +0 -95
  1253. package/dist/sqlite/rowBounds.js.map +0 -1
  1254. package/dist/util/bloomFilter.d.ts +0 -100
  1255. package/dist/util/bloomFilter.d.ts.map +0 -1
  1256. package/dist/util/bloomFilter.js +0 -206
  1257. package/dist/util/bloomFilter.js.map +0 -1
  1258. package/dist/util/confinedFile.d.ts +0 -48
  1259. package/dist/util/confinedFile.d.ts.map +0 -1
  1260. package/dist/util/confinedFile.js +0 -164
  1261. package/dist/util/confinedFile.js.map +0 -1
  1262. package/dist/util/discoveryPath.d.ts +0 -3
  1263. package/dist/util/discoveryPath.d.ts.map +0 -1
  1264. package/dist/util/discoveryPath.js +0 -19
  1265. package/dist/util/discoveryPath.js.map +0 -1
  1266. package/dist/util/graphEdges.d.ts +0 -5
  1267. package/dist/util/graphEdges.d.ts.map +0 -1
  1268. package/dist/util/graphEdges.js +0 -42
  1269. package/dist/util/graphEdges.js.map +0 -1
  1270. package/dist/util/graphOnlyExtensions.d.ts +0 -5
  1271. package/dist/util/graphOnlyExtensions.d.ts.map +0 -1
  1272. package/dist/util/graphOnlyExtensions.js +0 -12
  1273. package/dist/util/graphOnlyExtensions.js.map +0 -1
  1274. package/dist/util/includeRoots.d.ts +0 -6
  1275. package/dist/util/includeRoots.d.ts.map +0 -1
  1276. package/dist/util/includeRoots.js +0 -53
  1277. package/dist/util/includeRoots.js.map +0 -1
  1278. package/dist/util/lazySymbols.d.ts +0 -166
  1279. package/dist/util/lazySymbols.d.ts.map +0 -1
  1280. package/dist/util/lazySymbols.js +0 -365
  1281. package/dist/util/lazySymbols.js.map +0 -1
  1282. package/dist/util/lruMap.d.ts +0 -3
  1283. package/dist/util/lruMap.d.ts.map +0 -1
  1284. package/dist/util/lruMap.js +0 -22
  1285. package/dist/util/lruMap.js.map +0 -1
  1286. package/dist/util/memberAccess.d.ts +0 -26
  1287. package/dist/util/memberAccess.d.ts.map +0 -1
  1288. package/dist/util/memberAccess.js +0 -185
  1289. package/dist/util/memberAccess.js.map +0 -1
  1290. package/dist/util/packageExports.d.ts +0 -25
  1291. package/dist/util/packageExports.d.ts.map +0 -1
  1292. package/dist/util/packageExports.js +0 -79
  1293. package/dist/util/packageExports.js.map +0 -1
  1294. package/dist/util/packageInfo.d.ts +0 -12
  1295. package/dist/util/packageInfo.d.ts.map +0 -1
  1296. package/dist/util/packageInfo.js +0 -57
  1297. package/dist/util/packageInfo.js.map +0 -1
  1298. package/dist/util/partialResults.d.ts +0 -81
  1299. package/dist/util/partialResults.d.ts.map +0 -1
  1300. package/dist/util/partialResults.js +0 -290
  1301. package/dist/util/partialResults.js.map +0 -1
  1302. package/dist/util/projectFiles/definitions.d.ts +0 -21
  1303. package/dist/util/projectFiles/definitions.d.ts.map +0 -1
  1304. package/dist/util/projectFiles/definitions.js.map +0 -1
  1305. package/dist/util/projectFiles/parsers.d.ts.map +0 -1
  1306. package/dist/util/projectFiles/parsers.js.map +0 -1
  1307. package/dist/util/projectFiles.d.ts +0 -102
  1308. package/dist/util/projectFiles.d.ts.map +0 -1
  1309. package/dist/util/projectFiles.js +0 -1209
  1310. package/dist/util/projectFiles.js.map +0 -1
  1311. package/dist/util/resolution/findFirstExisting.d.ts +0 -2
  1312. package/dist/util/resolution/findFirstExisting.d.ts.map +0 -1
  1313. package/dist/util/resolution/findFirstExisting.js +0 -13
  1314. package/dist/util/resolution/findFirstExisting.js.map +0 -1
  1315. package/dist/util/resolution/phpComposer.d.ts +0 -17
  1316. package/dist/util/resolution/phpComposer.d.ts.map +0 -1
  1317. package/dist/util/resolution/phpComposer.js +0 -269
  1318. package/dist/util/resolution/phpComposer.js.map +0 -1
  1319. package/dist/util/resolution/projectSymbols.d.ts +0 -14
  1320. package/dist/util/resolution/projectSymbols.d.ts.map +0 -1
  1321. package/dist/util/resolution/projectSymbols.js +0 -70
  1322. package/dist/util/resolution/projectSymbols.js.map +0 -1
  1323. package/dist/util/resolutionCandidates.d.ts +0 -5
  1324. package/dist/util/resolutionCandidates.d.ts.map +0 -1
  1325. package/dist/util/resolutionCandidates.js +0 -70
  1326. package/dist/util/resolutionCandidates.js.map +0 -1
  1327. package/dist/util/rustTestModules.d.ts +0 -3
  1328. package/dist/util/rustTestModules.d.ts.map +0 -1
  1329. package/dist/util/rustTestModules.js +0 -71
  1330. package/dist/util/rustTestModules.js.map +0 -1
  1331. package/dist/util/sourceLocation.d.ts +0 -8
  1332. package/dist/util/sourceLocation.d.ts.map +0 -1
  1333. package/dist/util/sourceLocation.js +0 -19
  1334. package/dist/util/sourceLocation.js.map +0 -1
  1335. package/dist/util/sqliteSchema.d.ts +0 -28
  1336. package/dist/util/sqliteSchema.d.ts.map +0 -1
  1337. package/dist/util/sqliteSchema.js +0 -75
  1338. package/dist/util/sqliteSchema.js.map +0 -1
  1339. package/dist/util/symbolHash.d.ts +0 -59
  1340. package/dist/util/symbolHash.d.ts.map +0 -1
  1341. package/dist/util/symbolHash.js +0 -84
  1342. package/dist/util/symbolHash.js.map +0 -1
  1343. package/dist/util/windowsProcessDrain.d.ts +0 -23
  1344. package/dist/util/windowsProcessDrain.d.ts.map +0 -1
  1345. package/dist/util/windowsProcessDrain.js +0 -51
  1346. package/dist/util/windowsProcessDrain.js.map +0 -1
  1347. package/dist/util/workerThreads.d.ts +0 -12
  1348. package/dist/util/workerThreads.d.ts.map +0 -1
  1349. package/dist/util/workerThreads.js +0 -16
  1350. package/dist/util/workerThreads.js.map +0 -1
  1351. package/dist/worker/nativeExtractWorker.d.ts +0 -77
  1352. package/dist/worker/nativeExtractWorker.d.ts.map +0 -1
  1353. package/dist/worker/nativeExtractWorker.js +0 -272
  1354. package/dist/worker/nativeExtractWorker.js.map +0 -1
  1355. package/dist/worker/nativeWorkerPool.d.ts +0 -16
  1356. package/dist/worker/nativeWorkerPool.d.ts.map +0 -1
  1357. package/dist/worker/nativeWorkerPool.js +0 -54
  1358. package/dist/worker/nativeWorkerPool.js.map +0 -1
  1359. package/docs/graph-visualization/viewer-selected-node.webp +0 -0
  1360. /package/dist/{documentLinks → document-links}/asciidoc.d.ts +0 -0
  1361. /package/dist/{documentLinks → document-links}/asciidoc.js +0 -0
  1362. /package/dist/{documentLinks → document-links}/html.d.ts +0 -0
  1363. /package/dist/{documentLinks → document-links}/html.js +0 -0
  1364. /package/dist/{documentLinks → document-links}/markdown.d.ts +0 -0
  1365. /package/dist/{documentLinks → document-links}/markdown.js +0 -0
  1366. /package/dist/{documentLinks → document-links}/rst.d.ts +0 -0
  1367. /package/dist/{documentLinks → document-links}/rst.js +0 -0
  1368. /package/dist/{documentLinks → document-links}/sfc.d.ts +0 -0
  1369. /package/dist/{documentLinks → document-links}/sfc.js +0 -0
  1370. /package/dist/{documentLinks → document-links}/shared.d.ts +0 -0
  1371. /package/dist/{documentLinks → document-links}/shared.js +0 -0
  1372. /package/dist/util/{projectFiles → project-files}/definitions.js +0 -0
  1373. /package/dist/util/{projectFiles → project-files}/parsers.d.ts +0 -0
  1374. /package/dist/util/{projectFiles → project-files}/parsers.js +0 -0
  1375. /package/{docs/graph-visualization → src/viewer}/app.js +0 -0
  1376. /package/{docs/graph-visualization → src/viewer}/file-tree-filters.js +0 -0
  1377. /package/{docs/graph-visualization → src/viewer}/file-tree-model.js +0 -0
  1378. /package/{docs/graph-visualization → src/viewer}/graph-builder.js +0 -0
  1379. /package/{docs/graph-visualization → src/viewer}/index.html +0 -0
  1380. /package/{docs/graph-visualization → src/viewer}/styles.css +0 -0
  1381. /package/{docs/graph-visualization → src/viewer}/vendor/LICENSE.graphology-layout-forceatlas2.txt +0 -0
  1382. /package/{docs/graph-visualization → src/viewer}/vendor/LICENSE.graphology.txt +0 -0
  1383. /package/{docs/graph-visualization → src/viewer}/vendor/LICENSE.sigma.txt +0 -0
  1384. /package/{docs/graph-visualization → src/viewer}/vendor/graphology-layout-forceatlas2.js +0 -0
  1385. /package/{docs/graph-visualization → src/viewer}/vendor/graphology.js +0 -0
  1386. /package/{docs/graph-visualization → src/viewer}/vendor/sigma.js +0 -0
@@ -1,1209 +0,0 @@
1
- import fs from "node:fs";
2
- import fsp from "node:fs/promises";
3
- import path from "node:path";
4
- import fg from "fast-glob";
5
- import picomatch from "picomatch";
6
- import { performance } from "node:perf_hooks";
7
- import { logWithLevel } from "../logging.js";
8
- import { stringifyUnknown } from "./ast.js";
9
- import { fileIdentityKey, isFilePathWithinRoot, normalizePath } from "./paths.js";
10
- import { isRelativePathInside, matchesDiscoveryGlob } from "./discoveryPath.js";
11
- export { isRelativePathInside, matchesDiscoveryGlob } from "./discoveryPath.js";
12
- import { PROJECT_FILE_DEFINITIONS, } from "./projectFiles/definitions.js";
13
- import { trimToNull } from "./projectFiles/parsers.js";
14
- import { mapLimitSemaphore } from "./concurrency.js";
15
- import { getGitRepositoryRoot, isGitProjectRootIgnored, isGitRepo, isGitTimeoutError, listGitExcludeFiles, listGitStageSpecialPaths, listTrackedFiles, listUntrackedFiles, } from "./git.js";
16
- export const DEFAULT_PROJECT_FILE_IGNORES = [
17
- "**/node_modules/**",
18
- "**/.git/**",
19
- // Never treat Codegraph's own on-disk state as project input. `.codegraph/` contains
20
- // lifecycle metadata and the indexer disk cache. Keep the legacy cache ignore so
21
- // pre-migration checkouts stay excluded from discovery.
22
- "**/.codegraph/**",
23
- "**/.codegraph-cache/**",
24
- "**/dist/**",
25
- "**/build/**",
26
- "**/target/**",
27
- "**/.venv/**",
28
- "**/venv/**",
29
- "**/site-packages/**",
30
- "**/__pycache__/**",
31
- "**/vendor/bundle/**",
32
- "**/.build/**",
33
- "**/Pods/**",
34
- ];
35
- export const DEFAULT_PROJECT_MANIFESTS = [
36
- "package.json",
37
- "package-lock.json",
38
- "pnpm-lock.yaml",
39
- "yarn.lock",
40
- "bun.lockb",
41
- "pnpm-workspace.yaml",
42
- "lerna.json",
43
- "nx.json",
44
- "turbo.json",
45
- "tsconfig.json",
46
- "jsconfig.json",
47
- "requirements.txt",
48
- "requirements.in",
49
- "pyproject.toml",
50
- "Pipfile",
51
- "Pipfile.lock",
52
- "poetry.lock",
53
- "setup.py",
54
- "setup.cfg",
55
- "Cargo.toml",
56
- "Cargo.lock",
57
- "rust-toolchain",
58
- "rust-toolchain.toml",
59
- "go.mod",
60
- "go.sum",
61
- "go.work",
62
- "Gemfile",
63
- "Gemfile.lock",
64
- "*.gemspec",
65
- "pom.xml",
66
- "mvnw",
67
- "build.gradle",
68
- "build.gradle.kts",
69
- "settings.gradle",
70
- "settings.gradle.kts",
71
- "gradle.properties",
72
- "gradlew",
73
- "*.csproj",
74
- "*.fsproj",
75
- "*.vbproj",
76
- "*.sln",
77
- "Directory.Build.props",
78
- "Directory.Build.targets",
79
- "global.json",
80
- "composer.json",
81
- "composer.lock",
82
- "Package.swift",
83
- "Package.resolved",
84
- "CMakeLists.txt",
85
- "CMakePresets.json",
86
- "CMakeUserPresets.json",
87
- "Makefile",
88
- "makefile",
89
- "GNUmakefile",
90
- "configure.ac",
91
- "configure.in",
92
- "meson.build",
93
- "meson_options.txt",
94
- "conanfile.txt",
95
- "conanfile.py",
96
- "vcpkg.json",
97
- ];
98
- export const DEFAULT_PROJECT_PATTERNS = [
99
- "**/*.{ts,tsx,js,jsx,mts,cts,mjs,cjs,py,pyi,php,vue,svelte,astro,hbs,handlebars,md,mdx,rst,adoc,asciidoc,go,java,cs,rb,rs,html,htm,css,scss,less,kt,kts,swift,zig,c,h,cc,cpp,cxx,c++,hpp,hh,hxx,ipp,tpp,inl,sql}",
100
- ...DEFAULT_PROJECT_MANIFESTS.map((name) => `**/${name}`),
101
- ];
102
- const REALPATH_FILTER_CONCURRENCY = 64;
103
- function emitDiscoveryActivity(report, activity, current = 0, total = 0) {
104
- report?.({ activity, current, total });
105
- }
106
- function emitDiscoveryTiming(record, name, startedAt) {
107
- record?.({ name, ms: Math.round(performance.now() - startedAt) });
108
- }
109
- function createPathCheckProgressReporter(total, onProgress) {
110
- onProgress?.(0, total);
111
- let completed = 0;
112
- return () => {
113
- completed += 1;
114
- if (completed === total || completed % 100 === 0)
115
- onProgress?.(completed, total);
116
- };
117
- }
118
- function isPresent(value) {
119
- return value !== undefined;
120
- }
121
- function normalizeGlobPattern(globPattern) {
122
- return globPattern.trim().replace(/\\/g, "/");
123
- }
124
- const DIRECTORY_METADATA_EXTENSIONS = new Set();
125
- const DIRECTORY_METADATA_BASENAMES = new Set();
126
- for (const definition of PROJECT_FILE_DEFINITIONS) {
127
- if (definition.kind !== "dir")
128
- continue;
129
- for (const pattern of definition.patterns) {
130
- if (!pattern.includes("*") && !pattern.includes("?")) {
131
- DIRECTORY_METADATA_BASENAMES.add(pattern.toLowerCase());
132
- continue;
133
- }
134
- const trimmed = pattern.replaceAll("*", "").replaceAll("?", "");
135
- const lastDot = trimmed.lastIndexOf(".");
136
- if (lastDot < 0)
137
- continue;
138
- DIRECTORY_METADATA_EXTENSIONS.add(trimmed.slice(lastDot).toLowerCase());
139
- }
140
- }
141
- /**
142
- * Git lists files, not directories. A directory symlink still appears as one path.
143
- * Ordinary data files (`row.json`) are not directory links, so probing every Git
144
- * candidate spent one lstat per JSON/CSV. Tracked symlinks are identified by Git
145
- * mode 120000 regardless of extension. Untracked paths and Windows checkouts that
146
- * do not record 120000 still need this name heuristic: no extension, a bundle
147
- * directory marker such as `App.xcodeproj`, or a literal directory name such as `.idea`.
148
- */
149
- function couldBeDirectorySymlink(filePath) {
150
- const basename = path.posix.basename(normalizePath(filePath));
151
- if (DIRECTORY_METADATA_BASENAMES.has(basename.toLowerCase()))
152
- return true;
153
- const extension = path.posix.extname(basename);
154
- if (!extension)
155
- return true;
156
- return DIRECTORY_METADATA_EXTENSIONS.has(extension.toLowerCase());
157
- }
158
- function isProjectMetadataDirectoryName(dirPath) {
159
- const basename = path.posix.basename(normalizePath(dirPath));
160
- if (DIRECTORY_METADATA_BASENAMES.has(basename.toLowerCase()))
161
- return true;
162
- const extension = path.posix.extname(basename);
163
- return Boolean(extension) && DIRECTORY_METADATA_EXTENSIONS.has(extension.toLowerCase());
164
- }
165
- function globLiteralPrefix(globPattern) {
166
- const prefix = [];
167
- let seenLiteral = false;
168
- for (const segment of globPattern.split("/")) {
169
- if (!segment)
170
- continue;
171
- if (!seenLiteral && segment === "**")
172
- continue;
173
- if (segment.includes("*") || segment.includes("?"))
174
- break;
175
- seenLiteral = true;
176
- prefix.push(segment);
177
- }
178
- return prefix;
179
- }
180
- function isSegmentPrefix(prefix, pathSegments) {
181
- if (!prefix.length || prefix.length > pathSegments.length)
182
- return false;
183
- return prefix.every((segment, index) => pathSegments[index] === segment);
184
- }
185
- /**
186
- * Whether an include glob explicitly re-opens a default-ignored root, so a default ignore
187
- * should stay active for every OTHER root the includes never mention. A parent include
188
- * such as vendor/ re-opens a nested ignore such as vendor/bundle. Compares
189
- * literal path segments rather than attempting general glob-vs-glob intersection.
190
- */
191
- function isIgnoreGlobReopenedByIncludes(ignoreGlob, includeGlobs) {
192
- const ignoreLiterals = ignoreGlob.split("/").filter((segment) => segment && !segment.includes("*"));
193
- if (!ignoreLiterals.length)
194
- return false;
195
- return includeGlobs.some((includeGlob) => {
196
- const includeSegments = includeGlob.split("/");
197
- if (ignoreLiterals.every((segment) => includeSegments.includes(segment)))
198
- return true;
199
- const includePrefix = globLiteralPrefix(includeGlob);
200
- return isSegmentPrefix(includePrefix, ignoreLiterals) || isSegmentPrefix(ignoreLiterals, includePrefix);
201
- });
202
- }
203
- function isLocationIndependentGlob(globPattern) {
204
- return globPattern.startsWith("**/");
205
- }
206
- export function translateGlobRootIgnoreGlobsForScanRoot(scanRoot, globRoot, ignoreGlobs) {
207
- const relativeScanRoot = normalizePath(path.relative(globRoot, scanRoot));
208
- if (!relativeScanRoot || !isRelativePathInside(relativeScanRoot)) {
209
- return ignoreGlobs.map(normalizeGlobPattern).filter(Boolean);
210
- }
211
- const rootPrefix = `${relativeScanRoot}/`;
212
- return ignoreGlobs
213
- .map(normalizeGlobPattern)
214
- .filter(Boolean)
215
- .map((globPattern) => {
216
- const rootRelativePattern = globPattern.startsWith("/") ? globPattern.slice(1) : globPattern;
217
- if (isLocationIndependentGlob(rootRelativePattern))
218
- return rootRelativePattern;
219
- if (rootRelativePattern === relativeScanRoot || rootRelativePattern === `${relativeScanRoot}/**`)
220
- return "**";
221
- if (rootRelativePattern.startsWith(rootPrefix))
222
- return rootRelativePattern.slice(rootPrefix.length) || "**";
223
- return undefined;
224
- })
225
- .filter(isPresent);
226
- }
227
- function stripGitignoreTrailingSpaces(line) {
228
- let end = line.length;
229
- while (end > 0 && line[end - 1] === " ") {
230
- let slashCount = 0;
231
- for (let i = end - 2; i >= 0 && line[i] === "\\"; i -= 1) {
232
- slashCount += 1;
233
- }
234
- if (slashCount % 2 === 1) {
235
- break;
236
- }
237
- end -= 1;
238
- }
239
- return line.slice(0, end);
240
- }
241
- function parseGitignoreRule(baseDir, rawLine) {
242
- const trimmedLine = stripGitignoreTrailingSpaces(rawLine);
243
- if (!trimmedLine)
244
- return null;
245
- if (trimmedLine.startsWith("#"))
246
- return null;
247
- const negated = trimmedLine.startsWith("!");
248
- let pattern = negated ? trimmedLine.slice(1) : trimmedLine;
249
- if (!pattern || pattern === "/")
250
- return null;
251
- const dirOnly = pattern.endsWith("/");
252
- if (dirOnly) {
253
- pattern = pattern.slice(0, -1);
254
- }
255
- if (pattern.startsWith("/")) {
256
- pattern = pattern.slice(1);
257
- }
258
- pattern = pattern.replace(/^\\([#!])/, "$1").replace(/\\/g, "/");
259
- if (!pattern)
260
- return null;
261
- const anchored = trimmedLine.startsWith("/") || (negated && trimmedLine.startsWith("!/"));
262
- const baseMatcherPattern = anchored || pattern.includes("/") ? pattern : `**/${pattern}`;
263
- const matcherPattern = dirOnly ? `${baseMatcherPattern}/**` : [baseMatcherPattern, `${baseMatcherPattern}/**`];
264
- const matches = picomatch(matcherPattern, { dot: true });
265
- return {
266
- baseDir: normalizePath(baseDir),
267
- negated,
268
- dirOnly,
269
- matches,
270
- };
271
- }
272
- const EMPTY_GITIGNORE_INDEX = {
273
- hasRules: false,
274
- repositoryRoots: [],
275
- repositoryAliases: [],
276
- byBaseDir: new Map(),
277
- };
278
- /**
279
- * Parse `.gitignore` rules from an already-discovered set of `.gitignore` files.
280
- *
281
- * Ordered by path depth, not lexically: a directory segment collating before `.` (for
282
- * example `-vendor` or `!keep`) would otherwise place a child's rule file ahead of its
283
- * parent's, so a parent could no longer suppress a child whose rules it ignores, and a
284
- * child negation could re-include files. Depth-first ordering also keeps the "last match
285
- * wins" order deeper files depend on, and drops the locale sensitivity of `localeCompare`.
286
- */
287
- async function buildGitignoreIndex(sources, repositoryRoots = [], repositoryAliases = []) {
288
- const sorted = [...sources]
289
- .map(({ file, baseDir, repositoryRoot, priority }) => ({
290
- file: normalizePath(file),
291
- baseDir: normalizePath(baseDir),
292
- priority: priority ?? 2,
293
- ...(repositoryRoot === undefined ? {} : { repositoryRoot: normalizePath(repositoryRoot) }),
294
- }))
295
- .sort((left, right) => {
296
- const baseDepthDelta = left.baseDir.split("/").length - right.baseDir.split("/").length;
297
- if (baseDepthDelta !== 0)
298
- return baseDepthDelta;
299
- const priorityDelta = left.priority - right.priority;
300
- if (priorityDelta !== 0)
301
- return priorityDelta;
302
- if (left.file < right.file)
303
- return -1;
304
- return left.file > right.file ? 1 : 0;
305
- });
306
- const gitignoreIndex = {
307
- hasRules: false,
308
- repositoryRoots: Array.from(new Set(repositoryRoots.map(normalizePath))).sort((left, right) => right.length - left.length),
309
- repositoryAliases: Array.from(new Map(repositoryAliases.map(({ path: aliasPath, repositoryRoot }) => [
310
- fileIdentityKey(aliasPath),
311
- { path: normalizePath(aliasPath), repositoryRoot: normalizePath(repositoryRoot) },
312
- ])).values()).sort((left, right) => right.path.length - left.path.length),
313
- byBaseDir: new Map(),
314
- };
315
- for (const { file, baseDir, repositoryRoot } of sorted) {
316
- if (isIgnoredByGitignore(path.dirname(file), gitignoreIndex, true)) {
317
- continue;
318
- }
319
- let raw;
320
- try {
321
- raw = await fsp.readFile(file, "utf8");
322
- }
323
- catch {
324
- continue;
325
- }
326
- const baseKey = fileIdentityKey(baseDir);
327
- for (const line of raw.split(/\r?\n/)) {
328
- const rule = parseGitignoreRule(baseDir, line);
329
- if (!rule)
330
- continue;
331
- const existing = gitignoreIndex.byBaseDir.get(baseKey);
332
- if (existing)
333
- existing.rules.push(rule);
334
- else
335
- gitignoreIndex.byBaseDir.set(baseKey, { baseDir, repositoryRoot, rules: [rule] });
336
- gitignoreIndex.hasRules = true;
337
- }
338
- }
339
- return gitignoreIndex;
340
- }
341
- async function findGitignoreFiles(projectRoot) {
342
- return await fg(["**/.gitignore"], {
343
- cwd: projectRoot,
344
- absolute: true,
345
- dot: true,
346
- followSymbolicLinks: false,
347
- ignore: DEFAULT_PROJECT_FILE_IGNORES,
348
- });
349
- }
350
- async function loadGitignoreIndexForRootAliases(projectRoot) {
351
- const roots = [projectRoot];
352
- const realRoot = await fsp.realpath(projectRoot);
353
- if (normalizePath(realRoot) !== normalizePath(projectRoot)) {
354
- roots.push(realRoot);
355
- }
356
- const sources = [];
357
- for (const root of roots) {
358
- for (const file of await findGitignoreFiles(root)) {
359
- sources.push({ file, baseDir: path.dirname(file) });
360
- }
361
- }
362
- return await buildGitignoreIndex(sources);
363
- }
364
- /**
365
- * Whether `.gitignore` rules ignore `absolutePath`.
366
- *
367
- * Only a `.gitignore` on the path's own ancestor chain can match it, so this walks that
368
- * chain rather than testing every rule in the project. The skipped rules are exactly the
369
- * ones whose relative-path check would have rejected them, and applying the chain
370
- * shallowest-first reproduces the flat list's ordering, so the answer is unchanged.
371
- * Testing every rule cost O(files x rules): on an Unreal project that meant 55,983
372
- * candidates against 2,266 rules from 173 `.gitignore` files, or 253.7M evaluations and
373
- * roughly 21.7s of a 26.1s discovery.
374
- *
375
- * The relative path is computed once per declaring directory rather than once per rule.
376
- * Every rule in a group shares that directory, so the per-rule form repeated identical
377
- * `path.relative` and normalization work; on the same project that repetition was the
378
- * dominant remaining cost, at 2.6s of a 3.8s discovery.
379
- */
380
- function isIgnoredByGitignore(absolutePath, gitignoreIndex, isDirectory = false) {
381
- if (!gitignoreIndex.hasRules)
382
- return false;
383
- const owningRepositoryRoot = gitignoreIndex.repositoryRoots.find((root) => isFilePathWithinRoot(root, absolutePath)) ??
384
- gitignoreIndex.repositoryAliases.find(({ path: aliasPath }) => isFilePathWithinRoot(aliasPath, absolutePath))
385
- ?.repositoryRoot;
386
- const chain = [];
387
- let current = normalizePath(path.dirname(absolutePath));
388
- for (;;) {
389
- const group = gitignoreIndex.byBaseDir.get(fileIdentityKey(current));
390
- if (group)
391
- chain.push(group);
392
- const parent = normalizePath(path.dirname(current));
393
- if (parent === current)
394
- break;
395
- current = parent;
396
- }
397
- let ignored = false;
398
- for (let depth = chain.length - 1; depth >= 0; depth -= 1) {
399
- const group = chain[depth];
400
- if (group.repositoryRoot !== undefined &&
401
- owningRepositoryRoot !== undefined &&
402
- fileIdentityKey(group.repositoryRoot) !== fileIdentityKey(owningRepositoryRoot)) {
403
- continue;
404
- }
405
- const relativePath = path.relative(group.baseDir, absolutePath);
406
- if (!isRelativePathInside(relativePath)) {
407
- continue;
408
- }
409
- const normalizedRelativePath = normalizePath(relativePath);
410
- const hasSeparator = normalizedRelativePath.includes("/");
411
- for (const rule of group.rules) {
412
- if (rule.dirOnly && !hasSeparator && !isDirectory) {
413
- continue;
414
- }
415
- const matchesDirectory = isDirectory && rule.dirOnly && rule.matches(`${normalizedRelativePath}/.directory`);
416
- if (rule.matches(normalizedRelativePath) || matchesDirectory) {
417
- ignored = !rule.negated;
418
- }
419
- }
420
- }
421
- return ignored;
422
- }
423
- async function ensureDirectoryReadable(directoryPath, label) {
424
- const resolvedPath = path.resolve(directoryPath);
425
- let stats;
426
- try {
427
- stats = await fsp.stat(resolvedPath);
428
- }
429
- catch (error) {
430
- throw new Error(`${label} does not exist or is not readable: ${resolvedPath} (${stringifyUnknown(error)})`);
431
- }
432
- if (!stats.isDirectory()) {
433
- throw new Error(`${label} is not a directory: ${resolvedPath}`);
434
- }
435
- return resolvedPath;
436
- }
437
- /**
438
- * Every directory on the ancestor chain of `files`, up to and including `root`.
439
- *
440
- * The ignore matcher only consults rules declared at a path's own ancestors, so this is
441
- * exactly the set of directories whose `.gitignore` can affect a candidate.
442
- */
443
- function collectCandidateAncestorDirectories(root, files) {
444
- const rootKey = fileIdentityKey(root);
445
- const seen = new Set([rootKey]);
446
- const directories = [normalizePath(root)];
447
- for (const file of files) {
448
- let current = normalizePath(path.dirname(file));
449
- while (fileIdentityKey(current) !== rootKey) {
450
- if (seen.has(fileIdentityKey(current)))
451
- break;
452
- seen.add(fileIdentityKey(current));
453
- directories.push(current);
454
- const parent = normalizePath(path.dirname(current));
455
- if (parent === current)
456
- break;
457
- current = parent;
458
- }
459
- }
460
- return directories;
461
- }
462
- export function owningGitIgnoreSourceRoot(file, roots, realpathMemo) {
463
- const normalized = normalizePath(file);
464
- let owning;
465
- for (const root of roots) {
466
- if (!isFilePathWithinRoot(root.path, normalized, realpathMemo) &&
467
- !isFilePathWithinRoot(root.repositoryRoot, normalized, realpathMemo)) {
468
- continue;
469
- }
470
- if (!owning || root.repositoryRoot.length > owning.repositoryRoot.length) {
471
- owning = root;
472
- }
473
- }
474
- return owning;
475
- }
476
- /**
477
- * Ownership is pure path containment, so every candidate in the same parent directory
478
- * shares one answer. The lookup and its realpath memo live only for this discovery pass,
479
- * so a long-lived process cannot serve a stale owner after the tree changes.
480
- */
481
- export function createGitIgnoreSourceOwnershipLookup(roots, realpathMemo) {
482
- const ownershipByDirectory = new Map();
483
- return (file) => {
484
- const directory = normalizePath(path.dirname(file));
485
- const key = fileIdentityKey(directory);
486
- if (ownershipByDirectory.has(key)) {
487
- return ownershipByDirectory.get(key);
488
- }
489
- const owning = owningGitIgnoreSourceRoot(directory, roots, realpathMemo);
490
- ownershipByDirectory.set(key, owning);
491
- return owning;
492
- };
493
- }
494
- async function gitignoreFileIfPresent(directory) {
495
- const file = normalizePath(path.join(directory, ".gitignore"));
496
- try {
497
- const stat = await fsp.stat(file);
498
- return stat.isFile() ? file : undefined;
499
- }
500
- catch {
501
- return undefined;
502
- }
503
- }
504
- /**
505
- * Locate the `.gitignore` files that can affect the Git candidates, plus Git's
506
- * other ignore sources.
507
- *
508
- * A `.gitignore` only applies beneath its directory. After Git has listed tracked
509
- * and untracked candidates, the ignore files that can affect those paths live on
510
- * their ancestor chains up to the owning repository root, including parents of a
511
- * nested scan root, and at each source root. Stopping at the scan root would miss
512
- * `packages/.gitignore` when listing `packages/app`. Asking Git for ignored
513
- * `.gitignore` files walks every gitignored tree looking for them, which times
514
- * out on a large ignored data directory even after file listing already finished.
515
- */
516
- async function findGitIgnoreSources(sourceRoots, candidateFiles) {
517
- const roots = Array.from(new Map(sourceRoots.map(({ path: sourceRoot, repositoryRoot }) => [
518
- fileIdentityKey(sourceRoot),
519
- { path: normalizePath(sourceRoot), repositoryRoot: normalizePath(repositoryRoot) },
520
- ])).values());
521
- const directories = new Map();
522
- const walkedDirectoryKeys = new Set();
523
- const addDirectory = (directory, repositoryRoot) => {
524
- const dir = normalizePath(directory);
525
- const key = fileIdentityKey(dir);
526
- if (!directories.has(key))
527
- directories.set(key, { dir, repositoryRoot: normalizePath(repositoryRoot) });
528
- };
529
- for (const { path: sourceRoot, repositoryRoot } of roots) {
530
- addDirectory(sourceRoot, repositoryRoot);
531
- }
532
- const realpathMemo = new Map();
533
- const owningOf = createGitIgnoreSourceOwnershipLookup(roots, realpathMemo);
534
- for (const file of candidateFiles) {
535
- const owning = owningOf(file);
536
- if (!owning)
537
- continue;
538
- let dir = normalizePath(path.dirname(file));
539
- const stopKey = fileIdentityKey(owning.repositoryRoot);
540
- while (true) {
541
- const dirKey = fileIdentityKey(dir);
542
- const walkKey = `${dirKey}\0${stopKey}`;
543
- if (walkedDirectoryKeys.has(walkKey))
544
- break;
545
- addDirectory(dir, owning.repositoryRoot);
546
- walkedDirectoryKeys.add(walkKey);
547
- if (dirKey === stopKey)
548
- break;
549
- const parent = normalizePath(path.dirname(dir));
550
- if (parent === dir ||
551
- (!isFilePathWithinRoot(owning.path, parent, realpathMemo) &&
552
- !isFilePathWithinRoot(owning.repositoryRoot, parent, realpathMemo))) {
553
- break;
554
- }
555
- dir = parent;
556
- }
557
- }
558
- const uniqueRepositoryRoots = Array.from(new Set(roots.map((root) => root.repositoryRoot)));
559
- const [gitignoreHits, excludeLists] = await Promise.all([
560
- mapLimitSemaphore(Array.from(directories.values()), REALPATH_FILTER_CONCURRENCY, async ({ dir, repositoryRoot }) => {
561
- const file = await gitignoreFileIfPresent(dir);
562
- return file ? [{ file, baseDir: dir, repositoryRoot, priority: 2 }] : [];
563
- }),
564
- Promise.all(uniqueRepositoryRoots.map((repositoryRoot) => listGitExcludeFiles(repositoryRoot))),
565
- ]);
566
- return [
567
- ...gitignoreHits.flat(),
568
- ...excludeLists.flat().map((source) => ({
569
- ...source,
570
- repositoryRoot: source.baseDir,
571
- })),
572
- ];
573
- }
574
- /**
575
- * Enumerate candidate project files through Git, or `null` when Git cannot answer.
576
- *
577
- * Tracked plus untracked-but-not-ignored files are Git candidates. Submodule files retain
578
- * their own repository boundary, and source roots cover logical and physical aliases.
579
- */
580
- async function listGitCandidateFiles(root, logLevel, opts) {
581
- let gitListStart;
582
- let gitIgnoreStart;
583
- try {
584
- const realRoot = normalizePath(await fsp.realpath(root));
585
- const gitRoot = (await isGitRepo(root)) ? root : realRoot;
586
- if (!(await isGitRepo(gitRoot)))
587
- return null;
588
- if (await isGitProjectRootIgnored(realRoot))
589
- return null;
590
- const gitRepositoryRoot = await getGitRepositoryRoot(gitRoot);
591
- if (!gitRepositoryRoot)
592
- return null;
593
- emitDiscoveryActivity(opts?.onDiscoveryProgress, "Listing Git files");
594
- const listStartedAt = performance.now();
595
- gitListStart = listStartedAt;
596
- const [tracked, untracked, stageSpecial] = await Promise.all([
597
- listTrackedFiles(gitRoot, { recurseSubmodules: true, ...(logLevel === undefined ? {} : { logLevel }) }),
598
- listUntrackedFiles(gitRoot, { respectGitignore: true }),
599
- listGitStageSpecialPaths(gitRoot, { recurse: true }),
600
- ]);
601
- const submoduleDirectories = stageSpecial.gitlinks;
602
- const submoduleRoots = await Promise.all(submoduleDirectories.map(async (logicalPath) => ({
603
- logicalPath: normalizePath(logicalPath),
604
- physicalPath: normalizePath(await fsp.realpath(logicalPath).catch(() => logicalPath)),
605
- })));
606
- const submoduleUntracked = await Promise.all(submoduleRoots.map(async ({ physicalPath }) => await listUntrackedFiles(physicalPath, { respectGitignore: true })));
607
- const rawFiles = Array.from(new Set([...tracked, ...untracked, ...submoduleUntracked.flat()])).sort();
608
- const needsLogicalRemap = normalizePath(gitRoot) !== normalizePath(root);
609
- const files = Array.from(new Set(rawFiles.map((file) => needsLogicalRemap && isFilePathWithinRoot(realRoot, file)
610
- ? normalizePath(path.resolve(root, path.relative(realRoot, file)))
611
- : normalizePath(file)))).sort();
612
- const remapGitPath = (file) => needsLogicalRemap && isFilePathWithinRoot(realRoot, file)
613
- ? normalizePath(path.resolve(root, path.relative(realRoot, file)))
614
- : normalizePath(file);
615
- const symlinkCandidatePaths = Array.from(new Set([...stageSpecial.symlinks.map(remapGitPath), ...files.filter((file) => couldBeDirectorySymlink(file))])).sort();
616
- const gitignoreRoots = [gitRepositoryRoot, ...submoduleRoots.map(({ physicalPath }) => physicalPath)].map(normalizePath);
617
- const sourceRoots = [
618
- { path: root, repositoryRoot: gitRepositoryRoot },
619
- { path: realRoot, repositoryRoot: gitRepositoryRoot },
620
- { path: gitRepositoryRoot, repositoryRoot: gitRepositoryRoot },
621
- ...submoduleRoots.flatMap(({ logicalPath, physicalPath }) => [
622
- { path: logicalPath, repositoryRoot: physicalPath },
623
- { path: physicalPath, repositoryRoot: physicalPath },
624
- ]),
625
- ];
626
- emitDiscoveryTiming(opts?.onDiscoveryTiming, "git-list", listStartedAt);
627
- gitListStart = undefined;
628
- emitDiscoveryActivity(opts?.onDiscoveryProgress, "Listing Git files", files.length, files.length);
629
- emitDiscoveryActivity(opts?.onDiscoveryProgress, "Listing Git ignore files");
630
- const ignoreStartedAt = performance.now();
631
- gitIgnoreStart = ignoreStartedAt;
632
- const gitignoreFiles = await findGitIgnoreSources(sourceRoots, files);
633
- emitDiscoveryTiming(opts?.onDiscoveryTiming, "git-ignore", ignoreStartedAt);
634
- gitIgnoreStart = undefined;
635
- emitDiscoveryActivity(opts?.onDiscoveryProgress, "Listing Git ignore files", gitignoreFiles.length, gitignoreFiles.length);
636
- return {
637
- files,
638
- symlinkCandidatePaths,
639
- gitignoreFiles,
640
- gitignoreRoots,
641
- gitignoreAliases: sourceRoots,
642
- };
643
- }
644
- catch (error) {
645
- const listingTimedOut = isGitTimeoutError(error) && (gitIgnoreStart !== undefined || gitListStart !== undefined);
646
- if (gitIgnoreStart !== undefined) {
647
- emitDiscoveryTiming(opts?.onDiscoveryTiming, "git-ignore", gitIgnoreStart);
648
- }
649
- else if (gitListStart !== undefined) {
650
- emitDiscoveryTiming(opts?.onDiscoveryTiming, "git-list", gitListStart);
651
- }
652
- if (listingTimedOut) {
653
- logWithLevel(logLevel, "warn", "Warning: Git listing timed out; scanning the filesystem instead. Ignore large untracked trees in .gitignore to keep discovery fast.");
654
- }
655
- else {
656
- logWithLevel(logLevel, "debug", `Git discovery unavailable for ${root}: ${stringifyUnknown(error)}`);
657
- }
658
- return null;
659
- }
660
- }
661
- export async function listProjectFiles(projectRoot, patterns = DEFAULT_PROJECT_PATTERNS, options) {
662
- return await listProjectFilesInternal(projectRoot, patterns, options);
663
- }
664
- export async function listProjectFilesWithGitCandidates(projectRoot, patterns = DEFAULT_PROJECT_PATTERNS, options) {
665
- return await listProjectFilesInternal(projectRoot, patterns, options);
666
- }
667
- async function listProjectFilesInternal(projectRoot, patterns = DEFAULT_PROJECT_PATTERNS, options) {
668
- const root = await ensureDirectoryReadable(projectRoot, "Project root");
669
- const globRoot = options?.globRoot ? await ensureDirectoryReadable(options.globRoot, "Glob root") : root;
670
- const includeGlobs = (options?.includeGlobs ?? []).map(normalizeGlobPattern).filter(Boolean);
671
- const includeMatchers = includeGlobs.map((globPattern) => picomatch(globPattern, { dot: true }));
672
- const userIgnoreGlobs = (options?.ignoreGlobs ?? []).map(normalizeGlobPattern).filter(Boolean);
673
- const userIgnoreMatchers = userIgnoreGlobs.map((globPattern) => picomatch(globPattern, { dot: true }));
674
- const defaultIgnoreMatchers = DEFAULT_PROJECT_FILE_IGNORES.map((globPattern) => picomatch(globPattern, { dot: true }));
675
- const patternMatchers = patterns.map((pattern) => picomatch(normalizeGlobPattern(pattern), { dot: true }));
676
- const translatedUserIgnoreGlobs = translateGlobRootIgnoreGlobsForScanRoot(root, globRoot, userIgnoreGlobs);
677
- const fastGlobIgnoreGlobs = [...DEFAULT_PROJECT_FILE_IGNORES, ...translatedUserIgnoreGlobs];
678
- // Include globs are an explicit request to re-open otherwise ignored roots. Probe
679
- // those roots for safe directory links before the later filter reapplies the default
680
- // ignores, so an included link is not lost before it can be traversed. Default ignores
681
- // an include never mentions (e.g. node_modules when only src/** is included) stay
682
- // active, so the probe does not walk unrelated large ignored trees.
683
- const symlinkProbeIgnoreGlobs = includeGlobs.length
684
- ? [
685
- ...translatedUserIgnoreGlobs,
686
- ...DEFAULT_PROJECT_FILE_IGNORES.filter((ignoreGlob) => !isIgnoreGlobReopenedByIncludes(ignoreGlob, includeGlobs)),
687
- ]
688
- : fastGlobIgnoreGlobs;
689
- try {
690
- const useGitignore = options?.useGitignore ?? true;
691
- const realRoot = await fsp.realpath(root);
692
- // Enumerate through Git when Git's ignore rules are the ones this call wants anyway.
693
- // Git applies them while walking, so ignored trees are never descended into and never
694
- // reach the realpath and gitignore checks below. Scanning instead costs O(files on
695
- // disk): on an Unreal project holding 100,168 files (818 tracked) the scan produced
696
- // 55,983 pattern-matching candidates, nearly all generated sources under a gitignored
697
- // `Intermediate/` tree, and discovery took 26.1s. Git lists 4,010 in about 111ms.
698
- // An aliased root or a gitignore-root override that points elsewhere means Git's notion
699
- // of the project is not this call's, so those fall back to the scan. Passing
700
- // `gitignoreRoot` equal to the scan root (the CLI's historical whole-project form) still
701
- // wants this repository's ignore rules, so keep the Git candidate path. On a 501-file
702
- // Git repo with a 20,000-file gitignored tree, `gitignoreRoot: scanRoot` otherwise
703
- // forced a filesystem scan plus a full-tree symlink probe (~403ms) instead of Git
704
- // listing (~66ms) of the 502 tracked paths.
705
- // Compare by identity key, not slash normalization: on a case-insensitive filesystem a
706
- // casing or drive-letter difference still names the same directory, and calling that a
707
- // mismatch would silently drop back to the slow scan this fast path exists to avoid.
708
- const scanRootKey = fileIdentityKey(root);
709
- const gitignoreRootMatchesScanRoot = options?.gitignoreRoot === undefined || fileIdentityKey(options.gitignoreRoot) === scanRootKey;
710
- const attemptedGitCandidates = useGitignore && gitignoreRootMatchesScanRoot && fileIdentityKey(realRoot) === scanRootKey;
711
- const gitDiscoveryCallbacks = {
712
- ...(options?.onDiscoveryProgress ? { onDiscoveryProgress: options.onDiscoveryProgress } : {}),
713
- ...(options?.onDiscoveryTiming ? { onDiscoveryTiming: options.onDiscoveryTiming } : {}),
714
- };
715
- const gitCandidates = attemptedGitCandidates
716
- ? await listGitCandidateFiles(root, options?.logLevel, gitDiscoveryCallbacks)
717
- : null;
718
- // Report only when this call actually asked Git, including a null result. Callers that
719
- // already enumerated candidates (build-index) can hand the same set to metadata discovery
720
- // and skip a second Git spawn; omitting the callback keeps prior caller behavior.
721
- if (attemptedGitCandidates) {
722
- options?.onGitCandidatesDiscovered?.(gitCandidates);
723
- }
724
- let gitignoreIndex = EMPTY_GITIGNORE_INDEX;
725
- if (useGitignore && gitCandidates) {
726
- gitignoreIndex = await buildGitignoreIndex(gitCandidates.gitignoreFiles, gitCandidates.gitignoreRoots, gitCandidates.gitignoreAliases);
727
- }
728
- else if (useGitignore) {
729
- const gitignoreRoot = options?.gitignoreRoot
730
- ? await ensureDirectoryReadable(options.gitignoreRoot, "Gitignore root")
731
- : root;
732
- gitignoreIndex = await loadGitignoreIndexForRootAliases(gitignoreRoot);
733
- }
734
- // Git returns a candidate set, not a filtered result: the pattern, include,
735
- // default-ignore, and gitignore checks below still decide what is indexable.
736
- let files;
737
- if (gitCandidates) {
738
- files = gitCandidates.files;
739
- }
740
- else {
741
- emitDiscoveryActivity(options?.onDiscoveryProgress, "Scanning project files");
742
- const scanStart = performance.now();
743
- files = await fg(patterns, {
744
- cwd: root,
745
- absolute: true,
746
- dot: true,
747
- followSymbolicLinks: false,
748
- ignore: fastGlobIgnoreGlobs,
749
- });
750
- emitDiscoveryTiming(options?.onDiscoveryTiming, "filesystem-scan", scanStart);
751
- emitDiscoveryActivity(options?.onDiscoveryProgress, "Scanning project files", files.length, files.length);
752
- }
753
- // Explicit includeGlobs may re-open default-ignored trees (for example vendored
754
- // dependency dirs). Scan those include patterns without default ignores, then keep
755
- // only paths that still match the project patterns and include globs below.
756
- //
757
- // Only needed on the scan path. Git never applied this project's default ignores, so
758
- // its listing already contains those files and the include globs below re-open them.
759
- // Running the scan anyway would also re-add paths Git excluded through its own
760
- // exclude files, contradicting the rule that Git's ignores still win here.
761
- const includedOverrideFiles = includeGlobs.length && !gitCandidates
762
- ? await fg(translateGlobRootIgnoreGlobsForScanRoot(root, globRoot, includeGlobs), {
763
- cwd: root,
764
- absolute: true,
765
- dot: true,
766
- followSymbolicLinks: false,
767
- ignore: translatedUserIgnoreGlobs,
768
- })
769
- : [];
770
- const reportSourceSymlinkChecks = options?.onDiscoveryProgress
771
- ? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking source symlinks", current, total })
772
- : undefined;
773
- const reportSourcePathChecks = options?.onDiscoveryProgress
774
- ? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking source file paths", current, total })
775
- : undefined;
776
- const symlinkOptions = {
777
- globRoot,
778
- ...(gitCandidates ? { candidatePaths: gitCandidates.symlinkCandidatePaths } : {}),
779
- ...(options?.knownSymlinkDirectories !== undefined
780
- ? { knownSymlinkDirectories: options.knownSymlinkDirectories }
781
- : {}),
782
- ...(options?.onSymlinkDirectoriesDiscovered
783
- ? { onSymlinkDirectoriesDiscovered: options.onSymlinkDirectoriesDiscovered }
784
- : {}),
785
- ...(reportSourceSymlinkChecks ? { onPathCheckProgress: reportSourceSymlinkChecks } : {}),
786
- };
787
- const safeSymlinkDirectories = await resolveSafeSymlinkDirectories(root, realRoot, symlinkProbeIgnoreGlobs, symlinkOptions);
788
- const linkedFiles = await listEntriesFromSafeSymlinkDirectories(root, realRoot, patterns, fastGlobIgnoreGlobs, {
789
- ...symlinkOptions,
790
- filterIgnoreGlobs: [...DEFAULT_PROJECT_FILE_IGNORES, ...userIgnoreGlobs],
791
- resolvedSafeSymlinkDirectories: safeSymlinkDirectories,
792
- });
793
- const linkedOverrideFiles = includeGlobs.length === 0
794
- ? []
795
- : await listEntriesFromSafeSymlinkDirectories(root, realRoot, patterns, translatedUserIgnoreGlobs, {
796
- globRoot,
797
- filterIgnoreGlobs: userIgnoreGlobs,
798
- resolvedSafeSymlinkDirectories: safeSymlinkDirectories,
799
- });
800
- // Cheap path predicates run before the realpath confinement probe. Git enumerates
801
- // every tracked and untracked file it knows about, including trees this project
802
- // always ignores (virtualenvs, build output, caches), so probing first spent one
803
- // realpath syscall per ignored candidate: a Python project with a 20k-file untracked
804
- // virtualenv took 1.0s of syscalls to return 7 files. Only candidates that can still
805
- // become project files need their physical path resolved.
806
- const candidatePaths = [...files, ...includedOverrideFiles, ...linkedFiles, ...linkedOverrideFiles];
807
- const seen = new Set();
808
- const indexableCandidates = [];
809
- for (const candidatePath of candidatePaths) {
810
- const filePath = normalizePath(candidatePath);
811
- if (seen.has(filePath))
812
- continue;
813
- seen.add(filePath);
814
- const rootRelative = normalizePath(path.relative(root, filePath));
815
- if (!isRelativePathInside(rootRelative))
816
- continue;
817
- if (!patternMatchers.some((matcher) => matcher(rootRelative)))
818
- continue;
819
- if (includeMatchers.length &&
820
- !includeMatchers.some((matcher) => matchesDiscoveryGlob(filePath, globRoot, matcher))) {
821
- continue;
822
- }
823
- if (userIgnoreMatchers.some((matcher) => matchesDiscoveryGlob(filePath, globRoot, matcher)))
824
- continue;
825
- // Explicit include globs are a deliberate request to re-open default-ignored trees.
826
- if (!includeMatchers.length && defaultIgnoreMatchers.some((matcher) => matcher(rootRelative)))
827
- continue;
828
- if (isIgnoredByGitignore(filePath, gitignoreIndex))
829
- continue;
830
- indexableCandidates.push(filePath);
831
- }
832
- const rootSafeFiles = await filterRealPathsWithinRootEntries(indexableCandidates, realRoot, reportSourcePathChecks);
833
- return rootSafeFiles
834
- .filter(({ path: filePath, realPath }) =>
835
- // The real path only differs when the entry was reached through a symlink, so
836
- // testing it again for every ordinary file doubled the matcher work for nothing.
837
- normalizePath(realPath) === filePath || !isIgnoredByGitignore(realPath, gitignoreIndex))
838
- .map(({ path: filePath }) => filePath);
839
- }
840
- catch (error) {
841
- logWithLevel(options?.logLevel, "debug", `listProjectFiles failed for ${root}: ${stringifyUnknown(error)}`);
842
- throw new Error(`Failed to list files in ${root}: ${stringifyUnknown(error)}`);
843
- }
844
- }
845
- /**
846
- * Build a predicate that answers "does this absolute path belong in the project file
847
- * set" without walking the filesystem. Mirrors the pattern/ignore-glob filtering that
848
- * `listProjectFiles()` applies during its scan, so it can be reused to test candidate
849
- * paths sourced elsewhere (e.g. `git ls-files --others`) against the same discovery
850
- * rules. Does not evaluate `.gitignore`; callers sourcing candidates from Git already
851
- * get gitignore-aware filtering for free and should not reuse this for arbitrary,
852
- * non-Git-sourced candidate paths without also checking gitignore separately.
853
- */
854
- export function createDiscoveredFileMatcher(root, globRoot, patterns, options) {
855
- const patternMatchers = patterns.map((pattern) => picomatch(normalizeGlobPattern(pattern), { dot: true }));
856
- const defaultIgnoreMatchers = DEFAULT_PROJECT_FILE_IGNORES.map((pattern) => picomatch(normalizeGlobPattern(pattern), { dot: true }));
857
- const includeMatchers = (options?.includeGlobs ?? [])
858
- .map(normalizeGlobPattern)
859
- .filter(Boolean)
860
- .map((pattern) => picomatch(pattern, { dot: true }));
861
- const userIgnoreMatchers = (options?.ignoreGlobs ?? [])
862
- .map(normalizeGlobPattern)
863
- .filter(Boolean)
864
- .map((pattern) => picomatch(pattern, { dot: true }));
865
- return (absolutePath) => {
866
- const rootRelative = path.relative(root, absolutePath);
867
- if (!isRelativePathInside(rootRelative))
868
- return false;
869
- const normalizedRootRelative = normalizePath(rootRelative);
870
- if (!patternMatchers.some((matcher) => matcher(normalizedRootRelative)))
871
- return false;
872
- const matchesInclude = !includeMatchers.length ||
873
- includeMatchers.some((matcher) => matchesDiscoveryGlob(absolutePath, globRoot, matcher));
874
- if (!matchesInclude)
875
- return false;
876
- if (defaultIgnoreMatchers.some((matcher) => matcher(normalizedRootRelative))) {
877
- if (!(includeMatchers.length > 0 && matchesInclude))
878
- return false;
879
- }
880
- return !userIgnoreMatchers.some((matcher) => matchesDiscoveryGlob(absolutePath, globRoot, matcher));
881
- };
882
- }
883
- /**
884
- * Whether `linkPath` is a directory symlink that is safe to crawl for project files.
885
- *
886
- * `lstat` runs before `realpath` and `stat` so a candidate that is not a symlink costs
887
- * one syscall rather than three. That matters for callers screening a broad candidate
888
- * list, where nearly every entry is an ordinary file, and costs nothing for callers
889
- * passing entries a walk already identified as links.
890
- */
891
- async function isSafeSymlinkDirectory(root, linkPath, realRoot) {
892
- try {
893
- if (!isRelativePathInside(path.relative(root, linkPath)))
894
- return false;
895
- if (!(await fsp.lstat(linkPath)).isSymbolicLink())
896
- return false;
897
- const [realPath, targetStats] = await Promise.all([fsp.realpath(linkPath), fsp.stat(linkPath)]);
898
- if (!targetStats.isDirectory())
899
- return false;
900
- if (!isFilePathWithinRoot(realRoot, realPath))
901
- return false;
902
- return normalizePath(realPath) !== normalizePath(realRoot);
903
- }
904
- catch {
905
- return false;
906
- }
907
- }
908
- async function verifySafeSymlinkDirectories(root, realRoot, paths, onPathCheckProgress) {
909
- const reportPathCheck = createPathCheckProgressReporter(paths.length, onPathCheckProgress);
910
- const verified = await mapLimitSemaphore(Array.from(paths), REALPATH_FILTER_CONCURRENCY, async (linkPath) => {
911
- try {
912
- return (await isSafeSymlinkDirectory(root, linkPath, realRoot)) ? linkPath : null;
913
- }
914
- finally {
915
- reportPathCheck();
916
- }
917
- });
918
- return verified.filter((entry) => entry !== null);
919
- }
920
- /**
921
- * Resolve the symlinked directories under `root` that are safe to crawl.
922
- *
923
- * When `knownSymlinkDirectories` is provided, this re-verifies each previously
924
- * discovered path directly. Otherwise a Git-derived `candidatePaths` list avoids a
925
- * separate full-tree scan: Git already enumerated every tracked and non-ignored
926
- * untracked entry, including symlinks. Callers pass `symlinkCandidatePaths` so ordinary
927
- * data files are not lstat'd, while Git mode 120000 still screens extension-bearing
928
- * directory links. Non-Git discovery retains the existing
929
- * `fg(["**\/*"])` fallback. Every path still passes the same lstat, target-directory,
930
- * and realpath-confinement checks before it can be crawled.
931
- */
932
- async function resolveSafeSymlinkDirectories(root, realRoot, ignore, options) {
933
- if (options.knownSymlinkDirectories !== undefined) {
934
- const resolved = await verifySafeSymlinkDirectories(root, realRoot, Array.from(new Set(options.knownSymlinkDirectories)), options.onPathCheckProgress);
935
- options.onSymlinkDirectoriesDiscovered?.(resolved, "known");
936
- return resolved;
937
- }
938
- if (options.candidatePaths !== undefined) {
939
- const ignoreMatchers = ignore
940
- .map(normalizeGlobPattern)
941
- .filter(Boolean)
942
- .map((pattern) => picomatch(pattern, { dot: true }));
943
- const candidatePaths = Array.from(new Set(options.candidatePaths)).filter((candidatePath) => {
944
- const relativePath = normalizePath(path.relative(root, candidatePath));
945
- if (!isRelativePathInside(relativePath))
946
- return false;
947
- if (ignoreMatchers.some((matcher) => matcher(relativePath)))
948
- return false;
949
- return true;
950
- });
951
- const discovered = await verifySafeSymlinkDirectories(root, realRoot, candidatePaths, options.onPathCheckProgress);
952
- options.onSymlinkDirectoriesDiscovered?.(discovered, "git-candidates");
953
- return discovered;
954
- }
955
- const entries = (await fg(["**/*"], {
956
- cwd: root,
957
- absolute: true,
958
- dot: true,
959
- onlyFiles: false,
960
- followSymbolicLinks: false,
961
- objectMode: true,
962
- ignore,
963
- }));
964
- const discovered = await verifySafeSymlinkDirectories(root, realRoot, entries.filter((entry) => entry.dirent.isSymbolicLink()).map((entry) => entry.path), options.onPathCheckProgress);
965
- options.onSymlinkDirectoriesDiscovered?.(discovered, "filesystem");
966
- return discovered;
967
- }
968
- async function listEntriesFromSafeSymlinkDirectories(root, realRoot, patterns, ignore, options = {}) {
969
- const globRoot = options.globRoot ?? root;
970
- const filterIgnoreGlobs = options.filterIgnoreGlobs ?? ignore;
971
- const rootRelativeIgnoreMatchers = filterIgnoreGlobs
972
- .map(normalizeGlobPattern)
973
- .filter(Boolean)
974
- .map((globPattern) => picomatch(globPattern, { dot: true }));
975
- const locationIndependentIgnores = ignore.map(normalizeGlobPattern).filter(isLocationIndependentGlob);
976
- const safeSymlinkDirectories = options.resolvedSafeSymlinkDirectories ?? (await resolveSafeSymlinkDirectories(root, realRoot, ignore, options));
977
- if (!safeSymlinkDirectories.length)
978
- return [];
979
- const filesByPath = new Map();
980
- const filesByDirectory = await mapLimitSemaphore(Array.from(safeSymlinkDirectories), REALPATH_FILTER_CONCURRENCY, async (directory) => (await fg(patterns, {
981
- cwd: directory,
982
- absolute: true,
983
- dot: true,
984
- followSymbolicLinks: false,
985
- ignore: locationIndependentIgnores,
986
- ...(options.onlyFiles !== undefined ? { onlyFiles: options.onlyFiles } : {}),
987
- ...(options.markDirectories !== undefined ? { markDirectories: options.markDirectories } : {}),
988
- })).filter((filePath) => {
989
- const cleanPath = filePath.endsWith("/") ? filePath.slice(0, -1) : filePath;
990
- return !rootRelativeIgnoreMatchers.some((matcher) => matchesDiscoveryGlob(cleanPath, globRoot, matcher));
991
- }));
992
- for (const files of filesByDirectory) {
993
- for (const file of files) {
994
- filesByPath.set(normalizePath(file), file);
995
- }
996
- }
997
- return [...filesByPath.values()];
998
- }
999
- async function filterRealPathsWithinRootEntries(paths, realRoot, onPathCheckProgress) {
1000
- const reportPathCheck = createPathCheckProgressReporter(paths.length, onPathCheckProgress);
1001
- const filtered = await mapLimitSemaphore(paths, REALPATH_FILTER_CONCURRENCY, async (filePath) => {
1002
- try {
1003
- const realPath = await fsp.realpath(filePath);
1004
- return isFilePathWithinRoot(realRoot, realPath) ? { path: filePath, realPath } : null;
1005
- }
1006
- catch {
1007
- return null;
1008
- }
1009
- finally {
1010
- reportPathCheck();
1011
- }
1012
- });
1013
- return filtered.filter((entry) => entry !== null);
1014
- }
1015
- export async function filterRealPathsWithinRoot(paths, realRoot, onPathCheckProgress) {
1016
- const entries = await filterRealPathsWithinRootEntries(paths, realRoot, onPathCheckProgress);
1017
- return entries.map((entry) => entry.path);
1018
- }
1019
- function toProjectGlob(pattern) {
1020
- return pattern.startsWith("**/") ? pattern : `**/${pattern}`;
1021
- }
1022
- async function buildProjectFileInfo(def, filePath) {
1023
- const normalizedPath = normalizePath(filePath);
1024
- const projectRoot = normalizePath(path.dirname(filePath));
1025
- let name = null;
1026
- if (def.parseName && def.kind === "file") {
1027
- try {
1028
- const raw = await fsp.readFile(filePath, "utf8");
1029
- name = def.parseName(raw, filePath);
1030
- }
1031
- catch {
1032
- name = null;
1033
- }
1034
- }
1035
- if (!name && def.nameFromPath) {
1036
- if (def.nameFromPath === "file") {
1037
- name = trimToNull(path.basename(filePath, path.extname(filePath)));
1038
- }
1039
- else {
1040
- name = trimToNull(path.basename(projectRoot));
1041
- }
1042
- }
1043
- return {
1044
- path: normalizedPath,
1045
- kind: def.kind,
1046
- type: def.type,
1047
- role: def.role,
1048
- projectRoot,
1049
- ...(name ? { name } : {}),
1050
- };
1051
- }
1052
- export async function discoverProjectFiles(projectRoot, options) {
1053
- return await discoverProjectFilesInternal(projectRoot, options);
1054
- }
1055
- export async function discoverProjectFilesWithGitCandidates(projectRoot, options) {
1056
- return await discoverProjectFilesInternal(projectRoot, options);
1057
- }
1058
- async function discoverProjectFilesInternal(projectRoot, options) {
1059
- const root = await ensureDirectoryReadable(projectRoot, "Project root");
1060
- try {
1061
- const realRoot = await fsp.realpath(root);
1062
- const projectFileDefinitionMatchers = PROJECT_FILE_DEFINITIONS.map((definition) => definition.patterns.map((pattern) => pattern.includes("*") || pattern.includes("?")
1063
- ? new RegExp("^" + pattern.replace(/\./g, "\\.").replace(/\*/g, ".*") + "$")
1064
- : undefined));
1065
- const matchesDefinition = (fileName, definitionIndex) => {
1066
- const definition = PROJECT_FILE_DEFINITIONS[definitionIndex];
1067
- return definition.patterns.some((pattern, patternIndex) => {
1068
- const matcher = projectFileDefinitionMatchers[definitionIndex][patternIndex];
1069
- return matcher ? matcher.test(fileName) : pattern === fileName;
1070
- });
1071
- };
1072
- let gitCandidates;
1073
- if (options?.knownGitCandidates !== undefined) {
1074
- gitCandidates = options.knownGitCandidates;
1075
- }
1076
- else {
1077
- gitCandidates = await listGitCandidateFiles(root, options?.logLevel, {
1078
- ...(options?.onDiscoveryProgress ? { onDiscoveryProgress: options.onDiscoveryProgress } : {}),
1079
- ...(options?.onDiscoveryTiming ? { onDiscoveryTiming: options.onDiscoveryTiming } : {}),
1080
- });
1081
- }
1082
- options?.onGitCandidatesDiscovered?.(gitCandidates);
1083
- const reportMetadataSymlinkChecks = options?.onDiscoveryProgress
1084
- ? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking project metadata symlinks", current, total })
1085
- : undefined;
1086
- const reportMetadataFileChecks = options?.onDiscoveryProgress
1087
- ? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking project metadata files", current, total })
1088
- : undefined;
1089
- const reportMetadataDirectoryChecks = options?.onDiscoveryProgress
1090
- ? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking project metadata directories", current, total })
1091
- : undefined;
1092
- let rootSafeMatches;
1093
- if (gitCandidates) {
1094
- const gitignoreIndex = await buildGitignoreIndex(gitCandidates.gitignoreFiles, gitCandidates.gitignoreRoots, gitCandidates.gitignoreAliases);
1095
- const defaultIgnoreMatchers = DEFAULT_PROJECT_FILE_IGNORES.map((globPattern) => picomatch(globPattern, { dot: true }));
1096
- const filterGitIgnoredEntries = (entries, directoryKeys = new Set()) => entries
1097
- .map(({ path: filePath, realPath }) => ({ filePath: normalizePath(filePath), realPath }))
1098
- .filter(({ filePath, realPath }) => {
1099
- const isDirectory = directoryKeys.has(fileIdentityKey(filePath));
1100
- const rootRelative = normalizePath(path.relative(root, filePath));
1101
- if (!isRelativePathInside(rootRelative))
1102
- return false;
1103
- if (defaultIgnoreMatchers.some((matcher) => matcher(rootRelative)))
1104
- return false;
1105
- if (isIgnoredByGitignore(filePath, gitignoreIndex, isDirectory))
1106
- return false;
1107
- return normalizePath(realPath) === filePath || !isIgnoredByGitignore(realPath, gitignoreIndex, isDirectory);
1108
- })
1109
- .map(({ filePath }) => filePath);
1110
- const symlinkOptions = {
1111
- candidatePaths: gitCandidates.symlinkCandidatePaths,
1112
- ...(options?.knownSymlinkDirectories !== undefined
1113
- ? { knownSymlinkDirectories: options.knownSymlinkDirectories }
1114
- : {}),
1115
- ...(options?.onSymlinkDirectoriesDiscovered
1116
- ? { onSymlinkDirectoriesDiscovered: options.onSymlinkDirectoriesDiscovered }
1117
- : {}),
1118
- ...(reportMetadataSymlinkChecks ? { onPathCheckProgress: reportMetadataSymlinkChecks } : {}),
1119
- };
1120
- const safeSymlinkDirectories = await resolveSafeSymlinkDirectories(root, realRoot, DEFAULT_PROJECT_FILE_IGNORES, symlinkOptions);
1121
- const allPatterns = PROJECT_FILE_DEFINITIONS.flatMap((definition) => definition.patterns.map(toProjectGlob));
1122
- const linkedMatches = await listEntriesFromSafeSymlinkDirectories(root, realRoot, allPatterns, DEFAULT_PROJECT_FILE_IGNORES, {
1123
- markDirectories: true,
1124
- onlyFiles: false,
1125
- resolvedSafeSymlinkDirectories: safeSymlinkDirectories,
1126
- });
1127
- const candidateFiles = Array.from(new Set(gitCandidates.files.map(normalizePath)));
1128
- // Only a candidate whose basename can name a manifest becomes a metadata entry, so
1129
- // resolve physical paths for those alone. Probing every Git candidate first cost a
1130
- // realpath syscall per ignored file: the same 20k-file untracked virtualenv spent
1131
- // 0.6s here. Ancestor directories come from the candidate paths themselves and are
1132
- // confined by their own realpath check below.
1133
- const metadataCandidates = candidateFiles.filter((file) => PROJECT_FILE_DEFINITIONS.some((definition, definitionIndex) => definition.kind === "file" && matchesDefinition(path.basename(file), definitionIndex)));
1134
- const fileMatches = filterGitIgnoredEntries(await filterRealPathsWithinRootEntries(metadataCandidates, realRoot, reportMetadataFileChecks));
1135
- // Directory metadata is identified by the directory name (.idea, App.xcodeproj).
1136
- // Walking every Git-listed JSON or CSV still produced one realpath per data folder.
1137
- const rawCandidateDirectories = collectCandidateAncestorDirectories(root, candidateFiles).filter(isProjectMetadataDirectoryName);
1138
- const candidateDirectoryKeys = new Set(rawCandidateDirectories.map(fileIdentityKey));
1139
- const safeSymlinkDirectoryKeys = new Set(safeSymlinkDirectories.map(fileIdentityKey));
1140
- const directoryMatches = [
1141
- ...filterGitIgnoredEntries(await filterRealPathsWithinRootEntries(rawCandidateDirectories, realRoot, reportMetadataDirectoryChecks), candidateDirectoryKeys),
1142
- ...filterGitIgnoredEntries(await filterRealPathsWithinRootEntries(safeSymlinkDirectories, realRoot, reportMetadataDirectoryChecks), safeSymlinkDirectoryKeys),
1143
- ].filter((directory) => PROJECT_FILE_DEFINITIONS.some((definition, definitionIndex) => definition.kind === "dir" && matchesDefinition(path.basename(directory), definitionIndex)));
1144
- const linkedDirectoryKeys = new Set(linkedMatches.filter((match) => match.endsWith("/")).map((match) => fileIdentityKey(match.slice(0, -1))));
1145
- const rootSafeLinked = filterGitIgnoredEntries(await filterRealPathsWithinRootEntries(linkedMatches.map((match) => (match.endsWith("/") ? match.slice(0, -1) : match)), realRoot, reportMetadataFileChecks), linkedDirectoryKeys);
1146
- rootSafeMatches = [...fileMatches, ...directoryMatches, ...rootSafeLinked];
1147
- }
1148
- else {
1149
- const allPatterns = PROJECT_FILE_DEFINITIONS.flatMap((definition) => definition.patterns.map(toProjectGlob));
1150
- const matches = await fg(allPatterns, {
1151
- cwd: root,
1152
- absolute: true,
1153
- dot: true,
1154
- followSymbolicLinks: false,
1155
- ignore: DEFAULT_PROJECT_FILE_IGNORES,
1156
- markDirectories: true,
1157
- onlyFiles: false,
1158
- });
1159
- const linkedMatches = await listEntriesFromSafeSymlinkDirectories(root, realRoot, allPatterns, DEFAULT_PROJECT_FILE_IGNORES, {
1160
- markDirectories: true,
1161
- onlyFiles: false,
1162
- ...(options?.knownSymlinkDirectories !== undefined
1163
- ? { knownSymlinkDirectories: options.knownSymlinkDirectories }
1164
- : {}),
1165
- ...(options?.onSymlinkDirectoriesDiscovered
1166
- ? { onSymlinkDirectoriesDiscovered: options.onSymlinkDirectoriesDiscovered }
1167
- : {}),
1168
- ...(reportMetadataSymlinkChecks ? { onPathCheckProgress: reportMetadataSymlinkChecks } : {}),
1169
- });
1170
- rootSafeMatches = await filterRealPathsWithinRoot([...matches, ...linkedMatches].map((match) => (match.endsWith("/") ? match.slice(0, -1) : match)), realRoot, reportMetadataFileChecks);
1171
- }
1172
- const entries = [];
1173
- const matchTasks = rootSafeMatches.map(async (cleanMatch) => {
1174
- const stats = await fsp.stat(cleanMatch);
1175
- const isDir = stats.isDirectory();
1176
- const fileName = path.basename(cleanMatch);
1177
- for (let definitionIndex = 0; definitionIndex < PROJECT_FILE_DEFINITIONS.length; definitionIndex++) {
1178
- const def = PROJECT_FILE_DEFINITIONS[definitionIndex];
1179
- if (isDir && def.kind !== "dir")
1180
- continue;
1181
- if (!isDir && def.kind !== "file")
1182
- continue;
1183
- const matchesPattern = matchesDefinition(fileName, definitionIndex);
1184
- if (matchesPattern) {
1185
- entries.push(await buildProjectFileInfo(def, cleanMatch));
1186
- }
1187
- }
1188
- });
1189
- await Promise.all(matchTasks);
1190
- const byKey = new Map();
1191
- for (const entry of entries) {
1192
- const key = `${entry.path}::${entry.type}::${entry.role}`;
1193
- const existing = byKey.get(key);
1194
- if (!existing || (!existing.name && entry.name)) {
1195
- byKey.set(key, entry);
1196
- }
1197
- }
1198
- return Array.from(byKey.values()).sort((a, b) => {
1199
- if (a.path === b.path)
1200
- return a.type.localeCompare(b.type);
1201
- return a.path.localeCompare(b.path);
1202
- });
1203
- }
1204
- catch (error) {
1205
- logWithLevel(options?.logLevel, "debug", `discoverProjectFiles failed for ${root}: ${stringifyUnknown(error)}`);
1206
- throw new Error(`Failed to discover project files in ${root}: ${stringifyUnknown(error)}`);
1207
- }
1208
- }
1209
- //# sourceMappingURL=projectFiles.js.map