grepmind-core 0.1.0-alpha

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 (370) hide show
  1. package/LICENSE +190 -0
  2. package/dist/config/types.d.ts +174 -0
  3. package/dist/config/types.d.ts.map +1 -0
  4. package/dist/config/types.js +137 -0
  5. package/dist/config/types.js.map +1 -0
  6. package/dist/git.d.ts +98 -0
  7. package/dist/git.d.ts.map +1 -0
  8. package/dist/git.js +298 -0
  9. package/dist/git.js.map +1 -0
  10. package/dist/git.test.d.ts +7 -0
  11. package/dist/git.test.d.ts.map +1 -0
  12. package/dist/git.test.js +242 -0
  13. package/dist/git.test.js.map +1 -0
  14. package/dist/index.d.ts +44 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +67 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/indexer/branch.d.ts +121 -0
  19. package/dist/indexer/branch.d.ts.map +1 -0
  20. package/dist/indexer/branch.js +451 -0
  21. package/dist/indexer/branch.js.map +1 -0
  22. package/dist/indexer/chunker.d.ts +9 -0
  23. package/dist/indexer/chunker.d.ts.map +1 -0
  24. package/dist/indexer/chunker.js +70 -0
  25. package/dist/indexer/chunker.js.map +1 -0
  26. package/dist/indexer/chunker.test.d.ts +2 -0
  27. package/dist/indexer/chunker.test.d.ts.map +1 -0
  28. package/dist/indexer/chunker.test.js +180 -0
  29. package/dist/indexer/chunker.test.js.map +1 -0
  30. package/dist/indexer/code/branch.d.ts +155 -0
  31. package/dist/indexer/code/branch.d.ts.map +1 -0
  32. package/dist/indexer/code/branch.js +550 -0
  33. package/dist/indexer/code/branch.js.map +1 -0
  34. package/dist/indexer/code/branch.test.d.ts +7 -0
  35. package/dist/indexer/code/branch.test.d.ts.map +1 -0
  36. package/dist/indexer/code/branch.test.js +241 -0
  37. package/dist/indexer/code/branch.test.js.map +1 -0
  38. package/dist/indexer/code/chunker.d.ts +61 -0
  39. package/dist/indexer/code/chunker.d.ts.map +1 -0
  40. package/dist/indexer/code/chunker.js +311 -0
  41. package/dist/indexer/code/chunker.js.map +1 -0
  42. package/dist/indexer/code/chunker.test.d.ts +2 -0
  43. package/dist/indexer/code/chunker.test.d.ts.map +1 -0
  44. package/dist/indexer/code/chunker.test.js +552 -0
  45. package/dist/indexer/code/chunker.test.js.map +1 -0
  46. package/dist/indexer/code/fts.test.d.ts +2 -0
  47. package/dist/indexer/code/fts.test.d.ts.map +1 -0
  48. package/dist/indexer/code/fts.test.js +14 -0
  49. package/dist/indexer/code/fts.test.js.map +1 -0
  50. package/dist/indexer/code/graph/embedded.d.ts +11 -0
  51. package/dist/indexer/code/graph/embedded.d.ts.map +1 -0
  52. package/dist/indexer/code/graph/embedded.js +152 -0
  53. package/dist/indexer/code/graph/embedded.js.map +1 -0
  54. package/dist/indexer/code/graph/embedded.test.d.ts +2 -0
  55. package/dist/indexer/code/graph/embedded.test.d.ts.map +1 -0
  56. package/dist/indexer/code/graph/embedded.test.js +105 -0
  57. package/dist/indexer/code/graph/embedded.test.js.map +1 -0
  58. package/dist/indexer/code/graph/facts.d.ts +11 -0
  59. package/dist/indexer/code/graph/facts.d.ts.map +1 -0
  60. package/dist/indexer/code/graph/facts.js +456 -0
  61. package/dist/indexer/code/graph/facts.js.map +1 -0
  62. package/dist/indexer/code/graph/facts.test.d.ts +2 -0
  63. package/dist/indexer/code/graph/facts.test.d.ts.map +1 -0
  64. package/dist/indexer/code/graph/facts.test.js +181 -0
  65. package/dist/indexer/code/graph/facts.test.js.map +1 -0
  66. package/dist/indexer/code/graph/id.d.ts +14 -0
  67. package/dist/indexer/code/graph/id.d.ts.map +1 -0
  68. package/dist/indexer/code/graph/id.js +40 -0
  69. package/dist/indexer/code/graph/id.js.map +1 -0
  70. package/dist/indexer/code/graph/id.test.d.ts +2 -0
  71. package/dist/indexer/code/graph/id.test.d.ts.map +1 -0
  72. package/dist/indexer/code/graph/id.test.js +86 -0
  73. package/dist/indexer/code/graph/id.test.js.map +1 -0
  74. package/dist/indexer/code/graph/index.d.ts +133 -0
  75. package/dist/indexer/code/graph/index.d.ts.map +1 -0
  76. package/dist/indexer/code/graph/index.js +1876 -0
  77. package/dist/indexer/code/graph/index.js.map +1 -0
  78. package/dist/indexer/code/graph/index.test.d.ts +2 -0
  79. package/dist/indexer/code/graph/index.test.d.ts.map +1 -0
  80. package/dist/indexer/code/graph/index.test.js +210 -0
  81. package/dist/indexer/code/graph/index.test.js.map +1 -0
  82. package/dist/indexer/code/graph/queries.d.ts +22 -0
  83. package/dist/indexer/code/graph/queries.d.ts.map +1 -0
  84. package/dist/indexer/code/graph/queries.js +79 -0
  85. package/dist/indexer/code/graph/queries.js.map +1 -0
  86. package/dist/indexer/code/graph/queries.test.d.ts +2 -0
  87. package/dist/indexer/code/graph/queries.test.d.ts.map +1 -0
  88. package/dist/indexer/code/graph/queries.test.js +108 -0
  89. package/dist/indexer/code/graph/queries.test.js.map +1 -0
  90. package/dist/indexer/code/graph/resolver.d.ts +136 -0
  91. package/dist/indexer/code/graph/resolver.d.ts.map +1 -0
  92. package/dist/indexer/code/graph/resolver.js +839 -0
  93. package/dist/indexer/code/graph/resolver.js.map +1 -0
  94. package/dist/indexer/code/graph/resolver.test.d.ts +2 -0
  95. package/dist/indexer/code/graph/resolver.test.d.ts.map +1 -0
  96. package/dist/indexer/code/graph/resolver.test.js +482 -0
  97. package/dist/indexer/code/graph/resolver.test.js.map +1 -0
  98. package/dist/indexer/code/graph/semantic.d.ts +33 -0
  99. package/dist/indexer/code/graph/semantic.d.ts.map +1 -0
  100. package/dist/indexer/code/graph/semantic.js +279 -0
  101. package/dist/indexer/code/graph/semantic.js.map +1 -0
  102. package/dist/indexer/code/graph/semantic.test.d.ts +2 -0
  103. package/dist/indexer/code/graph/semantic.test.d.ts.map +1 -0
  104. package/dist/indexer/code/graph/semantic.test.js +127 -0
  105. package/dist/indexer/code/graph/semantic.test.js.map +1 -0
  106. package/dist/indexer/code/index.d.ts +404 -0
  107. package/dist/indexer/code/index.d.ts.map +1 -0
  108. package/dist/indexer/code/index.js +2070 -0
  109. package/dist/indexer/code/index.js.map +1 -0
  110. package/dist/indexer/code/languages/bash.d.ts +14 -0
  111. package/dist/indexer/code/languages/bash.d.ts.map +1 -0
  112. package/dist/indexer/code/languages/bash.js +125 -0
  113. package/dist/indexer/code/languages/bash.js.map +1 -0
  114. package/dist/indexer/code/languages/css.d.ts +16 -0
  115. package/dist/indexer/code/languages/css.d.ts.map +1 -0
  116. package/dist/indexer/code/languages/css.js +204 -0
  117. package/dist/indexer/code/languages/css.js.map +1 -0
  118. package/dist/indexer/code/languages/generic.d.ts +61 -0
  119. package/dist/indexer/code/languages/generic.d.ts.map +1 -0
  120. package/dist/indexer/code/languages/generic.js +150 -0
  121. package/dist/indexer/code/languages/generic.js.map +1 -0
  122. package/dist/indexer/code/languages/graphql.d.ts +13 -0
  123. package/dist/indexer/code/languages/graphql.d.ts.map +1 -0
  124. package/dist/indexer/code/languages/graphql.js +180 -0
  125. package/dist/indexer/code/languages/graphql.js.map +1 -0
  126. package/dist/indexer/code/languages/html.d.ts +16 -0
  127. package/dist/indexer/code/languages/html.d.ts.map +1 -0
  128. package/dist/indexer/code/languages/html.js +138 -0
  129. package/dist/indexer/code/languages/html.js.map +1 -0
  130. package/dist/indexer/code/languages/index.d.ts +9 -0
  131. package/dist/indexer/code/languages/index.d.ts.map +1 -0
  132. package/dist/indexer/code/languages/index.js +12 -0
  133. package/dist/indexer/code/languages/index.js.map +1 -0
  134. package/dist/indexer/code/languages/json.d.ts +12 -0
  135. package/dist/indexer/code/languages/json.d.ts.map +1 -0
  136. package/dist/indexer/code/languages/json.js +66 -0
  137. package/dist/indexer/code/languages/json.js.map +1 -0
  138. package/dist/indexer/code/languages/registry.d.ts +78 -0
  139. package/dist/indexer/code/languages/registry.d.ts.map +1 -0
  140. package/dist/indexer/code/languages/registry.js +72 -0
  141. package/dist/indexer/code/languages/registry.js.map +1 -0
  142. package/dist/indexer/code/languages/typescript.d.ts +39 -0
  143. package/dist/indexer/code/languages/typescript.d.ts.map +1 -0
  144. package/dist/indexer/code/languages/typescript.js +300 -0
  145. package/dist/indexer/code/languages/typescript.js.map +1 -0
  146. package/dist/indexer/code/languages/yaml.d.ts +13 -0
  147. package/dist/indexer/code/languages/yaml.d.ts.map +1 -0
  148. package/dist/indexer/code/languages/yaml.js +90 -0
  149. package/dist/indexer/code/languages/yaml.js.map +1 -0
  150. package/dist/indexer/code/parser.d.ts +26 -0
  151. package/dist/indexer/code/parser.d.ts.map +1 -0
  152. package/dist/indexer/code/parser.js +332 -0
  153. package/dist/indexer/code/parser.js.map +1 -0
  154. package/dist/indexer/code/retry.d.ts +58 -0
  155. package/dist/indexer/code/retry.d.ts.map +1 -0
  156. package/dist/indexer/code/retry.js +192 -0
  157. package/dist/indexer/code/retry.js.map +1 -0
  158. package/dist/indexer/code/tree/builder.d.ts +30 -0
  159. package/dist/indexer/code/tree/builder.d.ts.map +1 -0
  160. package/dist/indexer/code/tree/builder.js +132 -0
  161. package/dist/indexer/code/tree/builder.js.map +1 -0
  162. package/dist/indexer/code/tree/builder.test.d.ts +2 -0
  163. package/dist/indexer/code/tree/builder.test.d.ts.map +1 -0
  164. package/dist/indexer/code/tree/builder.test.js +31 -0
  165. package/dist/indexer/code/tree/builder.test.js.map +1 -0
  166. package/dist/indexer/code/tree/cache.d.ts +22 -0
  167. package/dist/indexer/code/tree/cache.d.ts.map +1 -0
  168. package/dist/indexer/code/tree/cache.js +85 -0
  169. package/dist/indexer/code/tree/cache.js.map +1 -0
  170. package/dist/indexer/code/tree/context.d.ts +32 -0
  171. package/dist/indexer/code/tree/context.d.ts.map +1 -0
  172. package/dist/indexer/code/tree/context.js +78 -0
  173. package/dist/indexer/code/tree/context.js.map +1 -0
  174. package/dist/indexer/code/tree/embedding.d.ts +9 -0
  175. package/dist/indexer/code/tree/embedding.d.ts.map +1 -0
  176. package/dist/indexer/code/tree/embedding.js +53 -0
  177. package/dist/indexer/code/tree/embedding.js.map +1 -0
  178. package/dist/indexer/code/tree/embedding.test.d.ts +2 -0
  179. package/dist/indexer/code/tree/embedding.test.d.ts.map +1 -0
  180. package/dist/indexer/code/tree/embedding.test.js +57 -0
  181. package/dist/indexer/code/tree/embedding.test.js.map +1 -0
  182. package/dist/indexer/code/tree/id.d.ts +3 -0
  183. package/dist/indexer/code/tree/id.d.ts.map +1 -0
  184. package/dist/indexer/code/tree/id.js +8 -0
  185. package/dist/indexer/code/tree/id.js.map +1 -0
  186. package/dist/indexer/code/tree/index.d.ts +113 -0
  187. package/dist/indexer/code/tree/index.d.ts.map +1 -0
  188. package/dist/indexer/code/tree/index.js +1146 -0
  189. package/dist/indexer/code/tree/index.js.map +1 -0
  190. package/dist/indexer/code/tree/rename.d.ts +13 -0
  191. package/dist/indexer/code/tree/rename.d.ts.map +1 -0
  192. package/dist/indexer/code/tree/rename.js +46 -0
  193. package/dist/indexer/code/tree/rename.js.map +1 -0
  194. package/dist/indexer/code/tree/repomap.d.ts +29 -0
  195. package/dist/indexer/code/tree/repomap.d.ts.map +1 -0
  196. package/dist/indexer/code/tree/repomap.js +95 -0
  197. package/dist/indexer/code/tree/repomap.js.map +1 -0
  198. package/dist/indexer/code/tree/repomap.test.d.ts +2 -0
  199. package/dist/indexer/code/tree/repomap.test.d.ts.map +1 -0
  200. package/dist/indexer/code/tree/repomap.test.js +93 -0
  201. package/dist/indexer/code/tree/repomap.test.js.map +1 -0
  202. package/dist/indexer/code/tree/stats.d.ts +26 -0
  203. package/dist/indexer/code/tree/stats.d.ts.map +1 -0
  204. package/dist/indexer/code/tree/stats.js +49 -0
  205. package/dist/indexer/code/tree/stats.js.map +1 -0
  206. package/dist/indexer/code/tree/types.d.ts +186 -0
  207. package/dist/indexer/code/tree/types.d.ts.map +1 -0
  208. package/dist/indexer/code/tree/types.js +10 -0
  209. package/dist/indexer/code/tree/types.js.map +1 -0
  210. package/dist/indexer/code/wal.d.ts +144 -0
  211. package/dist/indexer/code/wal.d.ts.map +1 -0
  212. package/dist/indexer/code/wal.js +283 -0
  213. package/dist/indexer/code/wal.js.map +1 -0
  214. package/dist/indexer/embeddings.d.ts +113 -0
  215. package/dist/indexer/embeddings.d.ts.map +1 -0
  216. package/dist/indexer/embeddings.js +477 -0
  217. package/dist/indexer/embeddings.js.map +1 -0
  218. package/dist/indexer/git-sync.d.ts +117 -0
  219. package/dist/indexer/git-sync.d.ts.map +1 -0
  220. package/dist/indexer/git-sync.js +398 -0
  221. package/dist/indexer/git-sync.js.map +1 -0
  222. package/dist/indexer/index.d.ts +175 -0
  223. package/dist/indexer/index.d.ts.map +1 -0
  224. package/dist/indexer/index.js +1096 -0
  225. package/dist/indexer/index.js.map +1 -0
  226. package/dist/indexer/mocks/mock-reranker.d.ts +12 -0
  227. package/dist/indexer/mocks/mock-reranker.d.ts.map +1 -0
  228. package/dist/indexer/mocks/mock-reranker.js +26 -0
  229. package/dist/indexer/mocks/mock-reranker.js.map +1 -0
  230. package/dist/indexer/parser.d.ts +8 -0
  231. package/dist/indexer/parser.d.ts.map +1 -0
  232. package/dist/indexer/parser.js +44 -0
  233. package/dist/indexer/parser.js.map +1 -0
  234. package/dist/indexer/parser.test.d.ts +2 -0
  235. package/dist/indexer/parser.test.d.ts.map +1 -0
  236. package/dist/indexer/parser.test.js +197 -0
  237. package/dist/indexer/parser.test.js.map +1 -0
  238. package/dist/indexer/reranking.d.ts +71 -0
  239. package/dist/indexer/reranking.d.ts.map +1 -0
  240. package/dist/indexer/reranking.integration.test.d.ts +2 -0
  241. package/dist/indexer/reranking.integration.test.d.ts.map +1 -0
  242. package/dist/indexer/reranking.integration.test.js +104 -0
  243. package/dist/indexer/reranking.integration.test.js.map +1 -0
  244. package/dist/indexer/reranking.js +256 -0
  245. package/dist/indexer/reranking.js.map +1 -0
  246. package/dist/indexer/reranking.test.d.ts +2 -0
  247. package/dist/indexer/reranking.test.d.ts.map +1 -0
  248. package/dist/indexer/reranking.test.js +130 -0
  249. package/dist/indexer/reranking.test.js.map +1 -0
  250. package/dist/indexer/wal/file-storage.d.ts +60 -0
  251. package/dist/indexer/wal/file-storage.d.ts.map +1 -0
  252. package/dist/indexer/wal/file-storage.js +277 -0
  253. package/dist/indexer/wal/file-storage.js.map +1 -0
  254. package/dist/indexer/wal/file-storage.test.d.ts +8 -0
  255. package/dist/indexer/wal/file-storage.test.d.ts.map +1 -0
  256. package/dist/indexer/wal/file-storage.test.js +444 -0
  257. package/dist/indexer/wal/file-storage.test.js.map +1 -0
  258. package/dist/indexer/wal/index.d.ts +41 -0
  259. package/dist/indexer/wal/index.d.ts.map +1 -0
  260. package/dist/indexer/wal/index.js +61 -0
  261. package/dist/indexer/wal/index.js.map +1 -0
  262. package/dist/indexer/wal/integration.test.d.ts +11 -0
  263. package/dist/indexer/wal/integration.test.d.ts.map +1 -0
  264. package/dist/indexer/wal/integration.test.js +378 -0
  265. package/dist/indexer/wal/integration.test.js.map +1 -0
  266. package/dist/indexer/wal/lancedb-storage.d.ts +72 -0
  267. package/dist/indexer/wal/lancedb-storage.d.ts.map +1 -0
  268. package/dist/indexer/wal/lancedb-storage.js +462 -0
  269. package/dist/indexer/wal/lancedb-storage.js.map +1 -0
  270. package/dist/indexer/wal/lancedb-storage.test.d.ts +8 -0
  271. package/dist/indexer/wal/lancedb-storage.test.d.ts.map +1 -0
  272. package/dist/indexer/wal/lancedb-storage.test.js +415 -0
  273. package/dist/indexer/wal/lancedb-storage.test.js.map +1 -0
  274. package/dist/indexer/wal/sync-wal.d.ts +144 -0
  275. package/dist/indexer/wal/sync-wal.d.ts.map +1 -0
  276. package/dist/indexer/wal/sync-wal.js +863 -0
  277. package/dist/indexer/wal/sync-wal.js.map +1 -0
  278. package/dist/indexer/wal/sync-wal.test.d.ts +8 -0
  279. package/dist/indexer/wal/sync-wal.test.d.ts.map +1 -0
  280. package/dist/indexer/wal/sync-wal.test.js +752 -0
  281. package/dist/indexer/wal/sync-wal.test.js.map +1 -0
  282. package/dist/indexer/wal/types.d.ts +167 -0
  283. package/dist/indexer/wal/types.d.ts.map +1 -0
  284. package/dist/indexer/wal/types.js +12 -0
  285. package/dist/indexer/wal/types.js.map +1 -0
  286. package/dist/indexer/watcher.d.ts +36 -0
  287. package/dist/indexer/watcher.d.ts.map +1 -0
  288. package/dist/indexer/watcher.js +110 -0
  289. package/dist/indexer/watcher.js.map +1 -0
  290. package/dist/search/explore.d.ts +62 -0
  291. package/dist/search/explore.d.ts.map +1 -0
  292. package/dist/search/explore.js +111 -0
  293. package/dist/search/explore.js.map +1 -0
  294. package/dist/search/fts.d.ts +23 -0
  295. package/dist/search/fts.d.ts.map +1 -0
  296. package/dist/search/fts.js +64 -0
  297. package/dist/search/fts.js.map +1 -0
  298. package/dist/search/fts.test.d.ts +2 -0
  299. package/dist/search/fts.test.d.ts.map +1 -0
  300. package/dist/search/fts.test.js +27 -0
  301. package/dist/search/fts.test.js.map +1 -0
  302. package/dist/search/grep.d.ts +75 -0
  303. package/dist/search/grep.d.ts.map +1 -0
  304. package/dist/search/grep.js +96 -0
  305. package/dist/search/grep.js.map +1 -0
  306. package/dist/search/grep.test.d.ts +2 -0
  307. package/dist/search/grep.test.d.ts.map +1 -0
  308. package/dist/search/grep.test.js +178 -0
  309. package/dist/search/grep.test.js.map +1 -0
  310. package/dist/search/hybrid-grep.d.ts +43 -0
  311. package/dist/search/hybrid-grep.d.ts.map +1 -0
  312. package/dist/search/hybrid-grep.js +130 -0
  313. package/dist/search/hybrid-grep.js.map +1 -0
  314. package/dist/search/hybrid-grep.test.d.ts +2 -0
  315. package/dist/search/hybrid-grep.test.d.ts.map +1 -0
  316. package/dist/search/hybrid-grep.test.js +133 -0
  317. package/dist/search/hybrid-grep.test.js.map +1 -0
  318. package/dist/search/rg-executor.d.ts +63 -0
  319. package/dist/search/rg-executor.d.ts.map +1 -0
  320. package/dist/search/rg-executor.js +146 -0
  321. package/dist/search/rg-executor.js.map +1 -0
  322. package/dist/search/rg-executor.test.d.ts +2 -0
  323. package/dist/search/rg-executor.test.d.ts.map +1 -0
  324. package/dist/search/rg-executor.test.js +104 -0
  325. package/dist/search/rg-executor.test.js.map +1 -0
  326. package/dist/search/rg-parser/extractor.d.ts +14 -0
  327. package/dist/search/rg-parser/extractor.d.ts.map +1 -0
  328. package/dist/search/rg-parser/extractor.js +82 -0
  329. package/dist/search/rg-parser/extractor.js.map +1 -0
  330. package/dist/search/rg-parser/extractor.test.d.ts +2 -0
  331. package/dist/search/rg-parser/extractor.test.d.ts.map +1 -0
  332. package/dist/search/rg-parser/extractor.test.js +35 -0
  333. package/dist/search/rg-parser/extractor.test.js.map +1 -0
  334. package/dist/search/rg-parser/fts-builder.d.ts +7 -0
  335. package/dist/search/rg-parser/fts-builder.d.ts.map +1 -0
  336. package/dist/search/rg-parser/fts-builder.js +18 -0
  337. package/dist/search/rg-parser/fts-builder.js.map +1 -0
  338. package/dist/search/rg-parser/fts-builder.test.d.ts +2 -0
  339. package/dist/search/rg-parser/fts-builder.test.d.ts.map +1 -0
  340. package/dist/search/rg-parser/fts-builder.test.js +26 -0
  341. package/dist/search/rg-parser/fts-builder.test.js.map +1 -0
  342. package/dist/search/rg-parser/index.d.ts +36 -0
  343. package/dist/search/rg-parser/index.d.ts.map +1 -0
  344. package/dist/search/rg-parser/index.js +83 -0
  345. package/dist/search/rg-parser/index.js.map +1 -0
  346. package/dist/search/rg-parser/index.test.d.ts +2 -0
  347. package/dist/search/rg-parser/index.test.d.ts.map +1 -0
  348. package/dist/search/rg-parser/index.test.js +34 -0
  349. package/dist/search/rg-parser/index.test.js.map +1 -0
  350. package/dist/search/rg-parser/strategy.d.ts +14 -0
  351. package/dist/search/rg-parser/strategy.d.ts.map +1 -0
  352. package/dist/search/rg-parser/strategy.js +31 -0
  353. package/dist/search/rg-parser/strategy.js.map +1 -0
  354. package/dist/search/rg-parser/strategy.test.d.ts +2 -0
  355. package/dist/search/rg-parser/strategy.test.d.ts.map +1 -0
  356. package/dist/search/rg-parser/strategy.test.js +29 -0
  357. package/dist/search/rg-parser/strategy.test.js.map +1 -0
  358. package/dist/types.d.ts +345 -0
  359. package/dist/types.d.ts.map +1 -0
  360. package/dist/types.js +7 -0
  361. package/dist/types.js.map +1 -0
  362. package/dist/utils/vault.d.ts +84 -0
  363. package/dist/utils/vault.d.ts.map +1 -0
  364. package/dist/utils/vault.js +138 -0
  365. package/dist/utils/vault.js.map +1 -0
  366. package/dist/utils/vault.test.d.ts +2 -0
  367. package/dist/utils/vault.test.d.ts.map +1 -0
  368. package/dist/utils/vault.test.js +153 -0
  369. package/dist/utils/vault.test.js.map +1 -0
  370. package/package.json +69 -0
@@ -0,0 +1,456 @@
1
+ const KEYWORDS = new Set([
2
+ 'as',
3
+ 'async',
4
+ 'await',
5
+ 'break',
6
+ 'case',
7
+ 'catch',
8
+ 'class',
9
+ 'const',
10
+ 'continue',
11
+ 'debugger',
12
+ 'default',
13
+ 'delete',
14
+ 'do',
15
+ 'else',
16
+ 'enum',
17
+ 'export',
18
+ 'extends',
19
+ 'false',
20
+ 'finally',
21
+ 'for',
22
+ 'function',
23
+ 'if',
24
+ 'implements',
25
+ 'import',
26
+ 'in',
27
+ 'instanceof',
28
+ 'interface',
29
+ 'let',
30
+ 'new',
31
+ 'null',
32
+ 'package',
33
+ 'private',
34
+ 'protected',
35
+ 'public',
36
+ 'return',
37
+ 'static',
38
+ 'super',
39
+ 'switch',
40
+ 'this',
41
+ 'throw',
42
+ 'true',
43
+ 'try',
44
+ 'type',
45
+ 'typeof',
46
+ 'undefined',
47
+ 'var',
48
+ 'void',
49
+ 'while',
50
+ 'with',
51
+ 'yield',
52
+ ]);
53
+ const IDENTIFIER_RE = /\b[$A-Za-z_][$0-9A-Za-z_]*\b/g;
54
+ export const IMPORT_QUERY = `
55
+ ;; import { x, y } from 'module'
56
+ (import_statement
57
+ source: (string) @source
58
+ (import_clause
59
+ (named_imports
60
+ (import_specifier
61
+ name: (identifier) @imported_name
62
+ alias: (identifier)? @alias)))) @named_import
63
+ `;
64
+ export const EXPORT_QUERY = `
65
+ ;; export function foo() {}
66
+ (export_statement
67
+ declaration: (function_declaration
68
+ name: (identifier) @name)) @export_func
69
+ `;
70
+ function offsetToLineColumn(content, offset) {
71
+ const before = content.slice(0, offset);
72
+ const lines = before.split('\n');
73
+ return {
74
+ line: lines.length,
75
+ column: lines[lines.length - 1]?.length ?? 0,
76
+ };
77
+ }
78
+ function escapeRegExp(value) {
79
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
80
+ }
81
+ function normalizeImportSpec(value) {
82
+ return value.replace(/^['"`]|['"`]$/g, '').trim();
83
+ }
84
+ function parseNamedSpecifiers(value) {
85
+ return value
86
+ .split(',')
87
+ .map((part) => part.trim())
88
+ .filter(Boolean)
89
+ .map((part) => {
90
+ // Strip 'type' keyword from type-only imports: type Foo, type Bar as Baz
91
+ const stripped = part.replace(/^type\s+/, '');
92
+ const match = stripped.match(/^([$A-Za-z_][$\w]*)\s+as\s+([$A-Za-z_][$\w]*)$/);
93
+ if (match) {
94
+ return { imported: match[1], local: match[2] };
95
+ }
96
+ return { imported: stripped, local: stripped };
97
+ });
98
+ }
99
+ function buildDefinitionsFromChunks(fileId, chunks) {
100
+ const defs = [];
101
+ const symbolChunks = chunks
102
+ .filter((chunk) => chunk.symbolType !== 'file' && chunk.path === fileId)
103
+ .sort((a, b) => a.startLine - b.startLine || a.endLine - b.endLine);
104
+ for (const chunk of symbolChunks) {
105
+ defs.push({
106
+ symbolId: chunk.id,
107
+ name: chunk.symbolName,
108
+ kind: chunk.symbolType,
109
+ exported: false,
110
+ line: chunk.startLine,
111
+ endLine: chunk.endLine,
112
+ });
113
+ }
114
+ return defs;
115
+ }
116
+ function fallbackDefinitionsFromText(fileId, fileContent) {
117
+ const defs = [];
118
+ const lines = fileContent.split('\n');
119
+ const declarationMatchers = [
120
+ { re: /^\s*(?:export\s+)?(?:async\s+)?function\s+([$A-Za-z_][$\w]*)\s*\(/, kind: 'function' },
121
+ { re: /^\s*(?:export\s+)?class\s+([$A-Za-z_][$\w]*)\b/, kind: 'class' },
122
+ { re: /^\s*(?:export\s+)?interface\s+([$A-Za-z_][$\w]*)\b/, kind: 'interface' },
123
+ { re: /^\s*(?:export\s+)?type\s+([$A-Za-z_][$\w]*)\b/, kind: 'type' },
124
+ { re: /^\s*(?:export\s+)?(?:const|let|var)\s+([$A-Za-z_][$\w]*)\b/, kind: 'variable' },
125
+ ];
126
+ for (let i = 0; i < lines.length; i++) {
127
+ const line = lines[i];
128
+ for (const matcher of declarationMatchers) {
129
+ const match = line.match(matcher.re);
130
+ if (!match)
131
+ continue;
132
+ const name = match[1];
133
+ const symbolId = `${fileId}#${name}#${matcher.kind}#${i + 1}`;
134
+ defs.push({
135
+ symbolId,
136
+ name,
137
+ kind: matcher.kind,
138
+ exported: false,
139
+ line: i + 1,
140
+ endLine: i + 1,
141
+ });
142
+ break;
143
+ }
144
+ }
145
+ return defs;
146
+ }
147
+ function extractImports(fileContent) {
148
+ const imports = [];
149
+ // Match all import statements including multiline ones
150
+ // Regex: import ... from 'module' or import 'module'
151
+ const importStatementRe = /\bimport\s+([\s\S]*?)\s+from\s+(['"`][^'"`]+['"`])|^import\s+(['"`][^'"`]+['"`])/gm;
152
+ for (const match of fileContent.matchAll(importStatementRe)) {
153
+ const line = offsetToLineColumn(fileContent, match.index ?? 0).line;
154
+ // Side-effect import: import 'module'
155
+ if (match[3]) {
156
+ imports.push({
157
+ spec: normalizeImportSpec(match[3]),
158
+ kind: 'side-effect',
159
+ names: [],
160
+ alias: null,
161
+ line,
162
+ isDynamic: false,
163
+ });
164
+ continue;
165
+ }
166
+ // Regular import with clause
167
+ const clause = match[1].replace(/\s+/g, ' ').trim();
168
+ const spec = normalizeImportSpec(match[2]);
169
+ // Namespace import: import * as foo from 'module'
170
+ if (clause.startsWith('* as ')) {
171
+ const alias = clause.slice(5).trim();
172
+ imports.push({
173
+ spec,
174
+ kind: 'namespace',
175
+ names: [],
176
+ alias: alias || null,
177
+ line,
178
+ isDynamic: false,
179
+ });
180
+ continue;
181
+ }
182
+ // Default + named: import foo, { bar, baz } from 'module'
183
+ const defaultAndNamed = clause.match(/^([$A-Za-z_][$\w]*)\s*,\s*\{(.+)\}$/);
184
+ if (defaultAndNamed) {
185
+ imports.push({
186
+ spec,
187
+ kind: 'default',
188
+ names: [defaultAndNamed[1]],
189
+ alias: null,
190
+ line,
191
+ isDynamic: false,
192
+ });
193
+ const specifiers = parseNamedSpecifiers(defaultAndNamed[2]);
194
+ imports.push({
195
+ spec,
196
+ kind: 'named',
197
+ names: specifiers.map((s) => s.imported),
198
+ alias: null,
199
+ line,
200
+ isDynamic: false,
201
+ });
202
+ continue;
203
+ }
204
+ // Named imports: import { foo, bar } from 'module'
205
+ if (clause.startsWith('{') && clause.endsWith('}')) {
206
+ const specifiers = parseNamedSpecifiers(clause.slice(1, -1));
207
+ imports.push({
208
+ spec,
209
+ kind: 'named',
210
+ names: specifiers.map((s) => s.imported),
211
+ alias: null,
212
+ line,
213
+ isDynamic: false,
214
+ });
215
+ continue;
216
+ }
217
+ // Default import: import foo from 'module'
218
+ imports.push({
219
+ spec,
220
+ kind: 'default',
221
+ names: [clause],
222
+ alias: null,
223
+ line,
224
+ isDynamic: false,
225
+ });
226
+ }
227
+ const dynamicImportRe = /\bimport\s*\(\s*(['"`][^'"`]+['"`])\s*\)/g;
228
+ for (const match of fileContent.matchAll(dynamicImportRe)) {
229
+ const location = offsetToLineColumn(fileContent, match.index ?? 0);
230
+ imports.push({
231
+ spec: normalizeImportSpec(match[1]),
232
+ kind: 'side-effect',
233
+ names: [],
234
+ alias: null,
235
+ line: location.line,
236
+ isDynamic: true,
237
+ });
238
+ }
239
+ const requireDeclRe = /\b(?:const|let|var)\s+([$A-Za-z_][$\w]*)\s*=\s*require\s*\(\s*(['"`][^'"`]+['"`])\s*\)/g;
240
+ for (const match of fileContent.matchAll(requireDeclRe)) {
241
+ const location = offsetToLineColumn(fileContent, match.index ?? 0);
242
+ imports.push({
243
+ spec: normalizeImportSpec(match[2]),
244
+ kind: 'default',
245
+ names: [match[1]],
246
+ alias: null,
247
+ line: location.line,
248
+ isDynamic: false,
249
+ });
250
+ }
251
+ const bareRequireRe = /\brequire\s*\(\s*(['"`][^'"`]+['"`])\s*\)/g;
252
+ for (const match of fileContent.matchAll(bareRequireRe)) {
253
+ const location = offsetToLineColumn(fileContent, match.index ?? 0);
254
+ imports.push({
255
+ spec: normalizeImportSpec(match[1]),
256
+ kind: 'side-effect',
257
+ names: [],
258
+ alias: null,
259
+ line: location.line,
260
+ isDynamic: false,
261
+ });
262
+ }
263
+ return imports;
264
+ }
265
+ function findDefinitionByName(definitions, name, lineHint) {
266
+ const candidates = definitions.filter((d) => d.name === name);
267
+ if (candidates.length === 0)
268
+ return null;
269
+ if (!lineHint)
270
+ return candidates[0];
271
+ const atLine = candidates.find((d) => d.line === lineHint);
272
+ if (atLine)
273
+ return atLine;
274
+ return candidates.sort((a, b) => Math.abs(a.line - lineHint) - Math.abs(b.line - lineHint))[0];
275
+ }
276
+ function extractExports(fileContent, definitions) {
277
+ const exports = [];
278
+ const lines = fileContent.split('\n');
279
+ for (let i = 0; i < lines.length; i++) {
280
+ const raw = lines[i];
281
+ const line = raw.trim();
282
+ if (!line.startsWith('export'))
283
+ continue;
284
+ const declaration = line.match(/^export\s+(?:async\s+)?(function|class|const|let|var|interface|type|enum)\s+([$A-Za-z_][$\w]*)/);
285
+ if (declaration) {
286
+ const name = declaration[2];
287
+ const def = findDefinitionByName(definitions, name, i + 1);
288
+ exports.push({
289
+ name,
290
+ kind: 'named',
291
+ localName: name,
292
+ fromSpec: null,
293
+ symbolId: def?.symbolId ?? `${name}#${i + 1}`,
294
+ line: i + 1,
295
+ });
296
+ continue;
297
+ }
298
+ const defaultFuncOrClass = line.match(/^export\s+default\s+(?:async\s+)?(function|class)\s*([$A-Za-z_][$\w]*)?/);
299
+ if (defaultFuncOrClass) {
300
+ const localName = defaultFuncOrClass[2] ?? 'default';
301
+ const def = findDefinitionByName(definitions, localName, i + 1);
302
+ exports.push({
303
+ name: 'default',
304
+ kind: 'default',
305
+ localName: localName === 'default' ? null : localName,
306
+ fromSpec: null,
307
+ symbolId: def?.symbolId ?? `default#${i + 1}`,
308
+ line: i + 1,
309
+ });
310
+ continue;
311
+ }
312
+ if (line.startsWith('export default')) {
313
+ exports.push({
314
+ name: 'default',
315
+ kind: 'default',
316
+ localName: null,
317
+ fromSpec: null,
318
+ symbolId: `default#${i + 1}`,
319
+ line: i + 1,
320
+ });
321
+ continue;
322
+ }
323
+ const exportNamed = line.match(/^export\s*\{([^}]+)\}\s*(?:from\s+(['"`][^'"`]+['"`]))?/);
324
+ if (exportNamed) {
325
+ const source = exportNamed[2] ? normalizeImportSpec(exportNamed[2]) : null;
326
+ const specifiers = exportNamed[1]
327
+ .split(',')
328
+ .map((part) => part.trim())
329
+ .filter(Boolean);
330
+ for (const specifier of specifiers) {
331
+ const asMatch = specifier.match(/^([$A-Za-z_][$\w]*)\s+as\s+([$A-Za-z_][$\w]*)$/);
332
+ const local = asMatch ? asMatch[1] : specifier;
333
+ const exported = asMatch ? asMatch[2] : specifier;
334
+ const def = source ? null : findDefinitionByName(definitions, local, i + 1);
335
+ exports.push({
336
+ name: exported,
337
+ kind: source ? 'reexport' : 'named',
338
+ localName: local,
339
+ fromSpec: source,
340
+ symbolId: def?.symbolId ?? `${local}#${i + 1}`,
341
+ line: i + 1,
342
+ });
343
+ }
344
+ continue;
345
+ }
346
+ const exportAll = line.match(/^export\s+\*\s*(?:as\s+([$A-Za-z_][$\w]*))?\s+from\s+(['"`][^'"`]+['"`])/);
347
+ if (exportAll) {
348
+ const alias = exportAll[1] ?? '*';
349
+ exports.push({
350
+ name: alias,
351
+ kind: 'reexport',
352
+ localName: null,
353
+ fromSpec: normalizeImportSpec(exportAll[2]),
354
+ symbolId: `${alias}#${i + 1}`,
355
+ line: i + 1,
356
+ });
357
+ }
358
+ }
359
+ return exports;
360
+ }
361
+ function extractUses(fileContent) {
362
+ const uses = [];
363
+ const lines = fileContent.split('\n');
364
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
365
+ const line = lines[lineIndex];
366
+ for (const match of line.matchAll(IDENTIFIER_RE)) {
367
+ const identifier = match[0];
368
+ if (KEYWORDS.has(identifier))
369
+ continue;
370
+ const start = match.index ?? 0;
371
+ const end = start + identifier.length;
372
+ const before = line[start - 1] ?? '';
373
+ const after = line[end] ?? '';
374
+ const afterSlice = line.slice(end);
375
+ const beforeSlice = line.slice(0, start);
376
+ let context = 'reference';
377
+ if (/^\s*\(/.test(afterSlice)) {
378
+ context = 'call';
379
+ }
380
+ else if (before === '.') {
381
+ context = 'property';
382
+ }
383
+ else if (beforeSlice.trimEnd().endsWith(':') || /\bas\s+$/.test(beforeSlice)) {
384
+ context = 'type';
385
+ }
386
+ uses.push({
387
+ identifier,
388
+ line: lineIndex + 1,
389
+ column: start + 1,
390
+ context,
391
+ });
392
+ }
393
+ }
394
+ return uses;
395
+ }
396
+ function markExportedDefinitions(definitions, exports) {
397
+ for (const exp of exports) {
398
+ const byId = definitions.find((d) => d.symbolId === exp.symbolId);
399
+ if (byId) {
400
+ byId.exported = true;
401
+ continue;
402
+ }
403
+ if (!exp.localName)
404
+ continue;
405
+ const escaped = escapeRegExp(exp.localName);
406
+ const byName = definitions.find((d) => new RegExp(`^${escaped}$`).test(d.name));
407
+ if (byName) {
408
+ byName.exported = true;
409
+ }
410
+ }
411
+ }
412
+ async function collectDiagnostics(fileContent, language, parser) {
413
+ if (!parser || !language)
414
+ return [];
415
+ try {
416
+ const tree = await parser.parse(fileContent, language);
417
+ const diagnostics = [];
418
+ if (tree.rootNode.hasError) {
419
+ diagnostics.push({
420
+ code: 'PARSE_ERROR',
421
+ message: 'Tree-sitter detected syntax errors in file',
422
+ line: 1,
423
+ column: 1,
424
+ });
425
+ }
426
+ parser.deleteTree(tree);
427
+ return diagnostics;
428
+ }
429
+ catch (error) {
430
+ return [{
431
+ code: 'PARSE_ERROR',
432
+ message: error instanceof Error ? error.message : String(error),
433
+ line: 1,
434
+ column: 1,
435
+ }];
436
+ }
437
+ }
438
+ export async function extractFacts(fileContent, filePath, options) {
439
+ const definitions = options.chunks && options.chunks.length > 0
440
+ ? buildDefinitionsFromChunks(filePath, options.chunks)
441
+ : fallbackDefinitionsFromText(filePath, fileContent);
442
+ const imports = extractImports(fileContent);
443
+ const exports = extractExports(fileContent, definitions);
444
+ markExportedDefinitions(definitions, exports);
445
+ const uses = extractUses(fileContent);
446
+ const diagnostics = await collectDiagnostics(fileContent, options.language, options.parser);
447
+ return {
448
+ fileId: filePath,
449
+ imports,
450
+ exports,
451
+ definitions,
452
+ uses,
453
+ diagnostics,
454
+ };
455
+ }
456
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../../../src/indexer/code/graph/facts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=facts.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.test.d.ts","sourceRoot":"","sources":["../../../../src/indexer/code/graph/facts.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,181 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { extractFacts } from './facts.js';
3
+ function makeChunk(overrides) {
4
+ return {
5
+ id: overrides.id ?? 'chunk-id',
6
+ path: overrides.path ?? 'src/file.ts',
7
+ language: overrides.language ?? 'typescript',
8
+ symbolType: overrides.symbolType ?? 'function',
9
+ symbolName: overrides.symbolName ?? 'sym',
10
+ signature: overrides.signature ?? null,
11
+ parentSymbol: overrides.parentSymbol ?? null,
12
+ scope: overrides.scope ?? [],
13
+ content: overrides.content ?? '',
14
+ startLine: overrides.startLine ?? 1,
15
+ endLine: overrides.endLine ?? 1,
16
+ docstring: overrides.docstring ?? null,
17
+ modified: overrides.modified ?? 1,
18
+ contentHash: overrides.contentHash ?? 'h',
19
+ };
20
+ }
21
+ describe('graph/facts', () => {
22
+ it('extracts imports from static, dynamic, and require forms', async () => {
23
+ const content = [
24
+ "import foo, { bar as baz, qux } from './mod';",
25
+ "import * as ns from 'node:path';",
26
+ "import './side';",
27
+ "const lazy = import('./dynamic');",
28
+ "const req = require('lodash');",
29
+ "require('fs');",
30
+ ].join('\n');
31
+ const facts = await extractFacts(content, 'src/main.ts', { language: null });
32
+ const imports = facts.imports;
33
+ expect(imports).toEqual(expect.arrayContaining([
34
+ expect.objectContaining({
35
+ spec: './mod',
36
+ kind: 'default',
37
+ names: ['foo'],
38
+ isDynamic: false,
39
+ }),
40
+ expect.objectContaining({
41
+ spec: './mod',
42
+ kind: 'named',
43
+ names: ['bar', 'qux'],
44
+ isDynamic: false,
45
+ }),
46
+ expect.objectContaining({
47
+ spec: 'node:path',
48
+ kind: 'namespace',
49
+ alias: 'ns',
50
+ }),
51
+ expect.objectContaining({
52
+ spec: './side',
53
+ kind: 'side-effect',
54
+ isDynamic: false,
55
+ }),
56
+ expect.objectContaining({
57
+ spec: './dynamic',
58
+ kind: 'side-effect',
59
+ isDynamic: true,
60
+ }),
61
+ expect.objectContaining({
62
+ spec: 'lodash',
63
+ kind: 'default',
64
+ names: ['req'],
65
+ }),
66
+ expect.objectContaining({
67
+ spec: 'fs',
68
+ kind: 'side-effect',
69
+ isDynamic: false,
70
+ }),
71
+ ]));
72
+ });
73
+ it('extracts definitions and exports using fallback parser', async () => {
74
+ const content = [
75
+ 'export function f() {}',
76
+ 'const local = 1;',
77
+ 'export { local as renamed };',
78
+ 'export default class D {}',
79
+ "export * from './other';",
80
+ ].join('\n');
81
+ const facts = await extractFacts(content, 'src/file.ts', { language: null });
82
+ expect(facts.exports).toEqual(expect.arrayContaining([
83
+ expect.objectContaining({ name: 'f', kind: 'named', fromSpec: null }),
84
+ expect.objectContaining({ name: 'renamed', kind: 'named', localName: 'local' }),
85
+ expect.objectContaining({ name: 'default', kind: 'default' }),
86
+ expect.objectContaining({ name: '*', kind: 'reexport', fromSpec: './other' }),
87
+ ]));
88
+ const fDef = facts.definitions.find((d) => d.name === 'f');
89
+ const localDef = facts.definitions.find((d) => d.name === 'local');
90
+ expect(fDef?.exported).toBe(true);
91
+ expect(localDef?.exported).toBe(true);
92
+ });
93
+ it('uses chunk-based definitions when chunks are provided', async () => {
94
+ const chunks = [
95
+ makeChunk({
96
+ id: 'sym-foo',
97
+ path: 'src/file.ts',
98
+ symbolType: 'class',
99
+ symbolName: 'Foo',
100
+ startLine: 1,
101
+ }),
102
+ makeChunk({
103
+ id: 'file-chunk',
104
+ path: 'src/file.ts',
105
+ symbolType: 'file',
106
+ symbolName: 'file.ts',
107
+ startLine: 1,
108
+ }),
109
+ makeChunk({
110
+ id: 'other-file',
111
+ path: 'src/other.ts',
112
+ symbolType: 'class',
113
+ symbolName: 'Foo',
114
+ startLine: 1,
115
+ }),
116
+ ];
117
+ const facts = await extractFacts('export { Foo };', 'src/file.ts', {
118
+ language: null,
119
+ chunks,
120
+ });
121
+ expect(facts.definitions).toEqual([
122
+ expect.objectContaining({
123
+ symbolId: 'sym-foo',
124
+ name: 'Foo',
125
+ kind: 'class',
126
+ exported: true,
127
+ }),
128
+ ]);
129
+ expect(facts.exports[0]?.symbolId).toBe('sym-foo');
130
+ });
131
+ it('classifies use contexts as call/property/type/reference', async () => {
132
+ const content = [
133
+ 'foo();',
134
+ 'obj.prop;',
135
+ 'const x: Type = foo;',
136
+ 'const y = value;',
137
+ ].join('\n');
138
+ const facts = await extractFacts(content, 'src/use.ts', { language: null });
139
+ expect(facts.uses).toEqual(expect.arrayContaining([
140
+ expect.objectContaining({ identifier: 'foo', line: 1, context: 'call' }),
141
+ expect.objectContaining({ identifier: 'prop', line: 2, context: 'property' }),
142
+ expect.objectContaining({ identifier: 'Type', line: 3, context: 'type' }),
143
+ expect.objectContaining({ identifier: 'value', line: 4, context: 'reference' }),
144
+ ]));
145
+ });
146
+ it('returns diagnostics when parser reports syntax errors', async () => {
147
+ const tree = { rootNode: { hasError: true } };
148
+ const parser = {
149
+ parse: vi.fn().mockResolvedValue(tree),
150
+ deleteTree: vi.fn(),
151
+ };
152
+ const facts = await extractFacts('const a =', 'src/file.ts', {
153
+ language: 'typescript',
154
+ parser,
155
+ });
156
+ expect(facts.diagnostics).toEqual([
157
+ expect.objectContaining({
158
+ code: 'PARSE_ERROR',
159
+ }),
160
+ ]);
161
+ expect(parser.parse).toHaveBeenCalledOnce();
162
+ expect(parser.deleteTree).toHaveBeenCalledWith(tree);
163
+ });
164
+ it('returns parser exception as diagnostic', async () => {
165
+ const parser = {
166
+ parse: vi.fn().mockRejectedValue(new Error('parser failed')),
167
+ deleteTree: vi.fn(),
168
+ };
169
+ const facts = await extractFacts('const a = 1;', 'src/file.ts', {
170
+ language: 'typescript',
171
+ parser,
172
+ });
173
+ expect(facts.diagnostics).toEqual([
174
+ expect.objectContaining({
175
+ code: 'PARSE_ERROR',
176
+ message: 'parser failed',
177
+ }),
178
+ ]);
179
+ });
180
+ });
181
+ //# sourceMappingURL=facts.test.js.map