@cstart/coldstart 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/README.md +236 -0
  2. package/dist/cache/disk-cache.d.ts +14 -0
  3. package/dist/cache/disk-cache.d.ts.map +1 -0
  4. package/dist/cache/disk-cache.js +371 -0
  5. package/dist/cache/disk-cache.js.map +1 -0
  6. package/dist/cli.d.ts +18 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +206 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/constants.d.ts +8 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +111 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/daemon-lock.d.ts +63 -0
  15. package/dist/daemon-lock.d.ts.map +1 -0
  16. package/dist/daemon-lock.js +218 -0
  17. package/dist/daemon-lock.js.map +1 -0
  18. package/dist/daemon-log.d.ts +26 -0
  19. package/dist/daemon-log.d.ts.map +1 -0
  20. package/dist/daemon-log.js +110 -0
  21. package/dist/daemon-log.js.map +1 -0
  22. package/dist/index-manager.d.ts +103 -0
  23. package/dist/index-manager.d.ts.map +1 -0
  24. package/dist/index-manager.js +361 -0
  25. package/dist/index-manager.js.map +1 -0
  26. package/dist/index.d.ts +4 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +724 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/indexer/content-tokens.d.ts +74 -0
  31. package/dist/indexer/content-tokens.d.ts.map +1 -0
  32. package/dist/indexer/content-tokens.js +406 -0
  33. package/dist/indexer/content-tokens.js.map +1 -0
  34. package/dist/indexer/cpp-include-roots.d.ts +7 -0
  35. package/dist/indexer/cpp-include-roots.d.ts.map +1 -0
  36. package/dist/indexer/cpp-include-roots.js +166 -0
  37. package/dist/indexer/cpp-include-roots.js.map +1 -0
  38. package/dist/indexer/csharp-synthetic.d.ts +9 -0
  39. package/dist/indexer/csharp-synthetic.d.ts.map +1 -0
  40. package/dist/indexer/csharp-synthetic.js +51 -0
  41. package/dist/indexer/csharp-synthetic.js.map +1 -0
  42. package/dist/indexer/django-synthetic.d.ts +12 -0
  43. package/dist/indexer/django-synthetic.d.ts.map +1 -0
  44. package/dist/indexer/django-synthetic.js +49 -0
  45. package/dist/indexer/django-synthetic.js.map +1 -0
  46. package/dist/indexer/extractors/angularjs.d.ts +16 -0
  47. package/dist/indexer/extractors/angularjs.d.ts.map +1 -0
  48. package/dist/indexer/extractors/angularjs.js +49 -0
  49. package/dist/indexer/extractors/angularjs.js.map +1 -0
  50. package/dist/indexer/extractors/cpp.d.ts +9 -0
  51. package/dist/indexer/extractors/cpp.d.ts.map +1 -0
  52. package/dist/indexer/extractors/cpp.js +254 -0
  53. package/dist/indexer/extractors/cpp.js.map +1 -0
  54. package/dist/indexer/extractors/csharp.d.ts +19 -0
  55. package/dist/indexer/extractors/csharp.d.ts.map +1 -0
  56. package/dist/indexer/extractors/csharp.js +327 -0
  57. package/dist/indexer/extractors/csharp.js.map +1 -0
  58. package/dist/indexer/extractors/env.d.ts +9 -0
  59. package/dist/indexer/extractors/env.d.ts.map +1 -0
  60. package/dist/indexer/extractors/env.js +43 -0
  61. package/dist/indexer/extractors/env.js.map +1 -0
  62. package/dist/indexer/extractors/go.d.ts +9 -0
  63. package/dist/indexer/extractors/go.d.ts.map +1 -0
  64. package/dist/indexer/extractors/go.js +227 -0
  65. package/dist/indexer/extractors/go.js.map +1 -0
  66. package/dist/indexer/extractors/graphql.d.ts +22 -0
  67. package/dist/indexer/extractors/graphql.d.ts.map +1 -0
  68. package/dist/indexer/extractors/graphql.js +88 -0
  69. package/dist/indexer/extractors/graphql.js.map +1 -0
  70. package/dist/indexer/extractors/groovy.d.ts +9 -0
  71. package/dist/indexer/extractors/groovy.d.ts.map +1 -0
  72. package/dist/indexer/extractors/groovy.js +356 -0
  73. package/dist/indexer/extractors/groovy.js.map +1 -0
  74. package/dist/indexer/extractors/java.d.ts +10 -0
  75. package/dist/indexer/extractors/java.d.ts.map +1 -0
  76. package/dist/indexer/extractors/java.js +586 -0
  77. package/dist/indexer/extractors/java.js.map +1 -0
  78. package/dist/indexer/extractors/kotlin.d.ts +10 -0
  79. package/dist/indexer/extractors/kotlin.d.ts.map +1 -0
  80. package/dist/indexer/extractors/kotlin.js +398 -0
  81. package/dist/indexer/extractors/kotlin.js.map +1 -0
  82. package/dist/indexer/extractors/node-helpers.d.ts +13 -0
  83. package/dist/indexer/extractors/node-helpers.d.ts.map +1 -0
  84. package/dist/indexer/extractors/node-helpers.js +17 -0
  85. package/dist/indexer/extractors/node-helpers.js.map +1 -0
  86. package/dist/indexer/extractors/parser-factory.d.ts +4 -0
  87. package/dist/indexer/extractors/parser-factory.d.ts.map +1 -0
  88. package/dist/indexer/extractors/parser-factory.js +28 -0
  89. package/dist/indexer/extractors/parser-factory.js.map +1 -0
  90. package/dist/indexer/extractors/php.d.ts +17 -0
  91. package/dist/indexer/extractors/php.d.ts.map +1 -0
  92. package/dist/indexer/extractors/php.js +363 -0
  93. package/dist/indexer/extractors/php.js.map +1 -0
  94. package/dist/indexer/extractors/python.d.ts +14 -0
  95. package/dist/indexer/extractors/python.d.ts.map +1 -0
  96. package/dist/indexer/extractors/python.js +449 -0
  97. package/dist/indexer/extractors/python.js.map +1 -0
  98. package/dist/indexer/extractors/ruby.d.ts +10 -0
  99. package/dist/indexer/extractors/ruby.d.ts.map +1 -0
  100. package/dist/indexer/extractors/ruby.js +996 -0
  101. package/dist/indexer/extractors/ruby.js.map +1 -0
  102. package/dist/indexer/extractors/rust.d.ts +9 -0
  103. package/dist/indexer/extractors/rust.d.ts.map +1 -0
  104. package/dist/indexer/extractors/rust.js +322 -0
  105. package/dist/indexer/extractors/rust.js.map +1 -0
  106. package/dist/indexer/extractors/toml.d.ts +9 -0
  107. package/dist/indexer/extractors/toml.d.ts.map +1 -0
  108. package/dist/indexer/extractors/toml.js +84 -0
  109. package/dist/indexer/extractors/toml.js.map +1 -0
  110. package/dist/indexer/extractors/xml.d.ts +9 -0
  111. package/dist/indexer/extractors/xml.d.ts.map +1 -0
  112. package/dist/indexer/extractors/xml.js +163 -0
  113. package/dist/indexer/extractors/xml.js.map +1 -0
  114. package/dist/indexer/extractors/yaml.d.ts +9 -0
  115. package/dist/indexer/extractors/yaml.d.ts.map +1 -0
  116. package/dist/indexer/extractors/yaml.js +117 -0
  117. package/dist/indexer/extractors/yaml.js.map +1 -0
  118. package/dist/indexer/git.d.ts +19 -0
  119. package/dist/indexer/git.d.ts.map +1 -0
  120. package/dist/indexer/git.js +55 -0
  121. package/dist/indexer/git.js.map +1 -0
  122. package/dist/indexer/graph.d.ts +7 -0
  123. package/dist/indexer/graph.d.ts.map +1 -0
  124. package/dist/indexer/graph.js +20 -0
  125. package/dist/indexer/graph.js.map +1 -0
  126. package/dist/indexer/indexed-file.d.ts +15 -0
  127. package/dist/indexer/indexed-file.d.ts.map +1 -0
  128. package/dist/indexer/indexed-file.js +50 -0
  129. package/dist/indexer/indexed-file.js.map +1 -0
  130. package/dist/indexer/invariants.d.ts +15 -0
  131. package/dist/indexer/invariants.d.ts.map +1 -0
  132. package/dist/indexer/invariants.js +96 -0
  133. package/dist/indexer/invariants.js.map +1 -0
  134. package/dist/indexer/laravel-synthetic.d.ts +10 -0
  135. package/dist/indexer/laravel-synthetic.d.ts.map +1 -0
  136. package/dist/indexer/laravel-synthetic.js +78 -0
  137. package/dist/indexer/laravel-synthetic.js.map +1 -0
  138. package/dist/indexer/parser.d.ts +4 -0
  139. package/dist/indexer/parser.d.ts.map +1 -0
  140. package/dist/indexer/parser.js +499 -0
  141. package/dist/indexer/parser.js.map +1 -0
  142. package/dist/indexer/patch.d.ts +3 -0
  143. package/dist/indexer/patch.d.ts.map +1 -0
  144. package/dist/indexer/patch.js +291 -0
  145. package/dist/indexer/patch.js.map +1 -0
  146. package/dist/indexer/rails-synthetic.d.ts +11 -0
  147. package/dist/indexer/rails-synthetic.d.ts.map +1 -0
  148. package/dist/indexer/rails-synthetic.js +80 -0
  149. package/dist/indexer/rails-synthetic.js.map +1 -0
  150. package/dist/indexer/reconcile.d.ts +9 -0
  151. package/dist/indexer/reconcile.d.ts.map +1 -0
  152. package/dist/indexer/reconcile.js +96 -0
  153. package/dist/indexer/reconcile.js.map +1 -0
  154. package/dist/indexer/resolvers/cpp.d.ts +15 -0
  155. package/dist/indexer/resolvers/cpp.d.ts.map +1 -0
  156. package/dist/indexer/resolvers/cpp.js +35 -0
  157. package/dist/indexer/resolvers/cpp.js.map +1 -0
  158. package/dist/indexer/resolvers/csharp.d.ts +2 -0
  159. package/dist/indexer/resolvers/csharp.d.ts.map +1 -0
  160. package/dist/indexer/resolvers/csharp.js +89 -0
  161. package/dist/indexer/resolvers/csharp.js.map +1 -0
  162. package/dist/indexer/resolvers/generic.d.ts +10 -0
  163. package/dist/indexer/resolvers/generic.d.ts.map +1 -0
  164. package/dist/indexer/resolvers/generic.js +35 -0
  165. package/dist/indexer/resolvers/generic.js.map +1 -0
  166. package/dist/indexer/resolvers/go.d.ts +2 -0
  167. package/dist/indexer/resolvers/go.d.ts.map +1 -0
  168. package/dist/indexer/resolvers/go.js +171 -0
  169. package/dist/indexer/resolvers/go.js.map +1 -0
  170. package/dist/indexer/resolvers/index.d.ts +26 -0
  171. package/dist/indexer/resolvers/index.d.ts.map +1 -0
  172. package/dist/indexer/resolvers/index.js +301 -0
  173. package/dist/indexer/resolvers/index.js.map +1 -0
  174. package/dist/indexer/resolvers/java.d.ts +17 -0
  175. package/dist/indexer/resolvers/java.d.ts.map +1 -0
  176. package/dist/indexer/resolvers/java.js +104 -0
  177. package/dist/indexer/resolvers/java.js.map +1 -0
  178. package/dist/indexer/resolvers/php.d.ts +2 -0
  179. package/dist/indexer/resolvers/php.d.ts.map +1 -0
  180. package/dist/indexer/resolvers/php.js +108 -0
  181. package/dist/indexer/resolvers/php.js.map +1 -0
  182. package/dist/indexer/resolvers/python.d.ts +17 -0
  183. package/dist/indexer/resolvers/python.d.ts.map +1 -0
  184. package/dist/indexer/resolvers/python.js +63 -0
  185. package/dist/indexer/resolvers/python.js.map +1 -0
  186. package/dist/indexer/resolvers/ruby.d.ts +13 -0
  187. package/dist/indexer/resolvers/ruby.d.ts.map +1 -0
  188. package/dist/indexer/resolvers/ruby.js +199 -0
  189. package/dist/indexer/resolvers/ruby.js.map +1 -0
  190. package/dist/indexer/resolvers/rust.d.ts +12 -0
  191. package/dist/indexer/resolvers/rust.d.ts.map +1 -0
  192. package/dist/indexer/resolvers/rust.js +61 -0
  193. package/dist/indexer/resolvers/rust.js.map +1 -0
  194. package/dist/indexer/resolvers/shared.d.ts +18 -0
  195. package/dist/indexer/resolvers/shared.d.ts.map +1 -0
  196. package/dist/indexer/resolvers/shared.js +71 -0
  197. package/dist/indexer/resolvers/shared.js.map +1 -0
  198. package/dist/indexer/rust-workspace.d.ts +25 -0
  199. package/dist/indexer/rust-workspace.d.ts.map +1 -0
  200. package/dist/indexer/rust-workspace.js +155 -0
  201. package/dist/indexer/rust-workspace.js.map +1 -0
  202. package/dist/indexer/symbol-edges.d.ts +19 -0
  203. package/dist/indexer/symbol-edges.d.ts.map +1 -0
  204. package/dist/indexer/symbol-edges.js +117 -0
  205. package/dist/indexer/symbol-edges.js.map +1 -0
  206. package/dist/indexer/tokenize.d.ts +26 -0
  207. package/dist/indexer/tokenize.d.ts.map +1 -0
  208. package/dist/indexer/tokenize.js +200 -0
  209. package/dist/indexer/tokenize.js.map +1 -0
  210. package/dist/indexer/ts-parser.d.ts +10 -0
  211. package/dist/indexer/ts-parser.d.ts.map +1 -0
  212. package/dist/indexer/ts-parser.js +605 -0
  213. package/dist/indexer/ts-parser.js.map +1 -0
  214. package/dist/indexer/walker.d.ts +9 -0
  215. package/dist/indexer/walker.d.ts.map +1 -0
  216. package/dist/indexer/walker.js +91 -0
  217. package/dist/indexer/walker.js.map +1 -0
  218. package/dist/init.d.ts +111 -0
  219. package/dist/init.d.ts.map +1 -0
  220. package/dist/init.js +787 -0
  221. package/dist/init.js.map +1 -0
  222. package/dist/kb/cli.d.ts +2 -0
  223. package/dist/kb/cli.d.ts.map +1 -0
  224. package/dist/kb/cli.js +377 -0
  225. package/dist/kb/cli.js.map +1 -0
  226. package/dist/kb/commit.d.ts +6 -0
  227. package/dist/kb/commit.d.ts.map +1 -0
  228. package/dist/kb/commit.js +84 -0
  229. package/dist/kb/commit.js.map +1 -0
  230. package/dist/kb/fold.d.ts +42 -0
  231. package/dist/kb/fold.d.ts.map +1 -0
  232. package/dist/kb/fold.js +285 -0
  233. package/dist/kb/fold.js.map +1 -0
  234. package/dist/kb/freshness.d.ts +9 -0
  235. package/dist/kb/freshness.d.ts.map +1 -0
  236. package/dist/kb/freshness.js +52 -0
  237. package/dist/kb/freshness.js.map +1 -0
  238. package/dist/kb/git.d.ts +4 -0
  239. package/dist/kb/git.d.ts.map +1 -0
  240. package/dist/kb/git.js +28 -0
  241. package/dist/kb/git.js.map +1 -0
  242. package/dist/kb/ids.d.ts +8 -0
  243. package/dist/kb/ids.d.ts.map +1 -0
  244. package/dist/kb/ids.js +42 -0
  245. package/dist/kb/ids.js.map +1 -0
  246. package/dist/kb/lint.d.ts +23 -0
  247. package/dist/kb/lint.d.ts.map +1 -0
  248. package/dist/kb/lint.js +102 -0
  249. package/dist/kb/lint.js.map +1 -0
  250. package/dist/kb/lookup.d.ts +55 -0
  251. package/dist/kb/lookup.d.ts.map +1 -0
  252. package/dist/kb/lookup.js +92 -0
  253. package/dist/kb/lookup.js.map +1 -0
  254. package/dist/kb/notes-index.d.ts +31 -0
  255. package/dist/kb/notes-index.d.ts.map +1 -0
  256. package/dist/kb/notes-index.js +0 -0
  257. package/dist/kb/notes-index.js.map +1 -0
  258. package/dist/kb/raw-log.d.ts +34 -0
  259. package/dist/kb/raw-log.d.ts.map +1 -0
  260. package/dist/kb/raw-log.js +106 -0
  261. package/dist/kb/raw-log.js.map +1 -0
  262. package/dist/kb/render.d.ts +17 -0
  263. package/dist/kb/render.d.ts.map +1 -0
  264. package/dist/kb/render.js +101 -0
  265. package/dist/kb/render.js.map +1 -0
  266. package/dist/kb/search.d.ts +110 -0
  267. package/dist/kb/search.d.ts.map +1 -0
  268. package/dist/kb/search.js +453 -0
  269. package/dist/kb/search.js.map +1 -0
  270. package/dist/kb/store.d.ts +35 -0
  271. package/dist/kb/store.d.ts.map +1 -0
  272. package/dist/kb/store.js +160 -0
  273. package/dist/kb/store.js.map +1 -0
  274. package/dist/kb/types.d.ts +142 -0
  275. package/dist/kb/types.d.ts.map +1 -0
  276. package/dist/kb/types.js +13 -0
  277. package/dist/kb/types.js.map +1 -0
  278. package/dist/kb/view-template.d.ts +8 -0
  279. package/dist/kb/view-template.d.ts.map +1 -0
  280. package/dist/kb/view-template.js +8 -0
  281. package/dist/kb/view-template.js.map +1 -0
  282. package/dist/kb/view.d.ts +42 -0
  283. package/dist/kb/view.d.ts.map +1 -0
  284. package/dist/kb/view.js +118 -0
  285. package/dist/kb/view.js.map +1 -0
  286. package/dist/kb/write.d.ts +72 -0
  287. package/dist/kb/write.d.ts.map +1 -0
  288. package/dist/kb/write.js +345 -0
  289. package/dist/kb/write.js.map +1 -0
  290. package/dist/keeper-state.d.ts +29 -0
  291. package/dist/keeper-state.d.ts.map +1 -0
  292. package/dist/keeper-state.js +89 -0
  293. package/dist/keeper-state.js.map +1 -0
  294. package/dist/keeper.d.ts +23 -0
  295. package/dist/keeper.d.ts.map +1 -0
  296. package/dist/keeper.js +105 -0
  297. package/dist/keeper.js.map +1 -0
  298. package/dist/migrate.d.ts +9 -0
  299. package/dist/migrate.d.ts.map +1 -0
  300. package/dist/migrate.js +102 -0
  301. package/dist/migrate.js.map +1 -0
  302. package/dist/restart.d.ts +15 -0
  303. package/dist/restart.d.ts.map +1 -0
  304. package/dist/restart.js +48 -0
  305. package/dist/restart.js.map +1 -0
  306. package/dist/server/find.d.ts +39 -0
  307. package/dist/server/find.d.ts.map +1 -0
  308. package/dist/server/find.js +979 -0
  309. package/dist/server/find.js.map +1 -0
  310. package/dist/server/mcp.d.ts +117 -0
  311. package/dist/server/mcp.d.ts.map +1 -0
  312. package/dist/server/mcp.js +301 -0
  313. package/dist/server/mcp.js.map +1 -0
  314. package/dist/server/searcher.d.ts +14 -0
  315. package/dist/server/searcher.d.ts.map +1 -0
  316. package/dist/server/searcher.js +146 -0
  317. package/dist/server/searcher.js.map +1 -0
  318. package/dist/server/tools.d.ts +17 -0
  319. package/dist/server/tools.d.ts.map +1 -0
  320. package/dist/server/tools.js +875 -0
  321. package/dist/server/tools.js.map +1 -0
  322. package/dist/status.d.ts +12 -0
  323. package/dist/status.d.ts.map +1 -0
  324. package/dist/status.js +157 -0
  325. package/dist/status.js.map +1 -0
  326. package/dist/types.d.ts +138 -0
  327. package/dist/types.d.ts.map +1 -0
  328. package/dist/types.js +3 -0
  329. package/dist/types.js.map +1 -0
  330. package/dist/watcher.d.ts +11 -0
  331. package/dist/watcher.d.ts.map +1 -0
  332. package/dist/watcher.js +67 -0
  333. package/dist/watcher.js.map +1 -0
  334. package/hooks/canonical-find-key.mjs +68 -0
  335. package/hooks/codex-find-nudge.mjs +15 -0
  336. package/hooks/codex-find-preguard.mjs +14 -0
  337. package/hooks/codex-kb-elicit.mjs +329 -0
  338. package/hooks/codex-kb-recall.mjs +151 -0
  339. package/hooks/codex-nudge-handler.mjs +370 -0
  340. package/hooks/codex-preguard-handler.mjs +75 -0
  341. package/hooks/codex-run-hook.mjs +132 -0
  342. package/hooks/coldstart-call.mjs +58 -0
  343. package/hooks/cursor-find-nudge.mjs +15 -0
  344. package/hooks/cursor-find-preguard.mjs +14 -0
  345. package/hooks/cursor-input.mjs +72 -0
  346. package/hooks/cursor-kb-elicit.mjs +335 -0
  347. package/hooks/cursor-kb-recall.mjs +138 -0
  348. package/hooks/cursor-nudge-handler.mjs +33 -0
  349. package/hooks/cursor-preguard-handler.mjs +39 -0
  350. package/hooks/cursor-run-hook.mjs +129 -0
  351. package/hooks/find-nudge.mjs +15 -0
  352. package/hooks/find-preguard.mjs +14 -0
  353. package/hooks/kb-elicit.mjs +334 -0
  354. package/hooks/kb-recall.mjs +151 -0
  355. package/hooks/nudge-handler.mjs +370 -0
  356. package/hooks/preguard-handler.mjs +75 -0
  357. package/hooks/run-hook.mjs +132 -0
  358. package/package.json +69 -0
  359. package/templates/coldstart.cli.md +60 -0
  360. package/templates/coldstart.mcp.md +59 -0
@@ -0,0 +1,166 @@
1
+ import { dirname, join, resolve, isAbsolute } from 'node:path';
2
+ import { readFile } from 'node:fs/promises';
3
+ // Cache by CMakeLists directory
4
+ const includeRootsCache = new Map();
5
+ // Per-startDir: found CMakeLists directories in walk order (nearest first)
6
+ const startDirToCmakeLists = new Map();
7
+ async function readFileOpt(path) {
8
+ try {
9
+ return await readFile(path, 'utf-8');
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ }
15
+ /**
16
+ * Extract absolute include root paths from a CMakeLists.txt file.
17
+ * Handles include_directories() and target_include_directories().
18
+ * Variables: ${CMAKE_CURRENT_SOURCE_DIR}, ${CMAKE_SOURCE_DIR}/${PROJECT_SOURCE_DIR},
19
+ * ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BINARY_DIR} (skipped).
20
+ * Generator expressions like $<BUILD_INTERFACE:...> are simplified naively.
21
+ */
22
+ function extractIncludeRoots(cmakelists_path, content, rootDir) {
23
+ const cmake_dir = dirname(cmakelists_path);
24
+ const roots = new Set();
25
+ const expandPath = (raw) => {
26
+ let expanded = raw;
27
+ // Strip generator expressions $<...> — extract the content as best-effort
28
+ expanded = expanded.replace(/\$<BUILD_INTERFACE:([^>]*)>/g, '$1');
29
+ expanded = expanded.replace(/\$<INSTALL_INTERFACE:([^>]*)>/g, '$1');
30
+ expanded = expanded.replace(/\$<CONFIG:.*?>/g, ''); // strip config-specific markers
31
+ expanded = expanded.replace(/\$<[^>]*>/g, ''); // strip any remaining generator expressions
32
+ // CMAKE_CURRENT_SOURCE_DIR == directory containing this CMakeLists.txt
33
+ expanded = expanded.replace(/\$\{CMAKE_CURRENT_SOURCE_DIR\}/g, cmake_dir);
34
+ // CMAKE_SOURCE_DIR == root of topmost project()
35
+ expanded = expanded.replace(/\$\{CMAKE_SOURCE_DIR\}/g, rootDir);
36
+ // PROJECT_SOURCE_DIR == dir of the nearest enclosing project() call.
37
+ // Vendored deps almost always declare their own project(), so for a nested
38
+ // CMakeLists this resolves to its own dir (e.g. bitcoin's vendored leveldb
39
+ // uses ${PROJECT_SOURCE_DIR}/include relative to src/leveldb/). For the host
40
+ // top-level CMakeLists this also reduces to cmake_dir == rootDir, so the
41
+ // simple cmake_dir mapping is correct in the common case.
42
+ expanded = expanded.replace(/\$\{PROJECT_SOURCE_DIR\}/g, cmake_dir);
43
+ // Skip generated directories
44
+ if (expanded.includes('${CMAKE_CURRENT_BINARY_DIR}') ||
45
+ expanded.includes('${CMAKE_BINARY_DIR}')) {
46
+ return null;
47
+ }
48
+ // If still has variables, skip
49
+ if (expanded.includes('${'))
50
+ return null;
51
+ expanded = expanded.trim();
52
+ if (!expanded)
53
+ return null;
54
+ // Resolve relative paths
55
+ if (!isAbsolute(expanded)) {
56
+ expanded = resolve(cmake_dir, expanded);
57
+ }
58
+ // Bound to rootDir
59
+ if (!expanded.startsWith(rootDir + '/') && expanded !== rootDir) {
60
+ return null;
61
+ }
62
+ return expanded;
63
+ };
64
+ // include_directories(<paths>)
65
+ const include_dirs_re = /include_directories\s*\(([\s\S]*?)\)/g;
66
+ let m;
67
+ while ((m = include_dirs_re.exec(content)) !== null) {
68
+ const paths_str = m[1];
69
+ // Split by whitespace/newlines, filter out quotes and empty strings
70
+ const paths = paths_str
71
+ .split(/[\s\n]+/)
72
+ .map(p => p.replace(/^"|"$|^'|'$/g, '').trim())
73
+ .filter(p => p);
74
+ for (const path of paths) {
75
+ const expanded = expandPath(path);
76
+ if (expanded)
77
+ roots.add(expanded);
78
+ }
79
+ }
80
+ // target_include_directories(<target> [SYSTEM] [BEFORE|AFTER] <PUBLIC|PRIVATE|INTERFACE> <paths> [<PUBLIC|...> <paths>]...)
81
+ // A single call can mix multiple visibility groups, so we tokenize the whole
82
+ // body and treat any non-keyword token after we've seen a visibility marker
83
+ // as a path. The leading token is the target name and is always skipped.
84
+ const KEYWORDS = new Set(['PUBLIC', 'PRIVATE', 'INTERFACE', 'SYSTEM', 'BEFORE', 'AFTER']);
85
+ const target_dirs_re = /target_include_directories\s*\(([\s\S]*?)\)/g;
86
+ while ((m = target_dirs_re.exec(content)) !== null) {
87
+ const tokens = m[1]
88
+ .split(/[\s\n]+/)
89
+ .map(p => p.replace(/^"|"$|^'|'$/g, '').trim())
90
+ .filter(p => p);
91
+ let sawVisibility = false;
92
+ for (let i = 1; i < tokens.length; i++) { // skip [0] = target name
93
+ const tok = tokens[i];
94
+ if (KEYWORDS.has(tok)) {
95
+ sawVisibility = true;
96
+ continue;
97
+ }
98
+ if (!sawVisibility)
99
+ continue; // tokens before any visibility keyword are non-path arguments
100
+ const expanded = expandPath(tok);
101
+ if (expanded)
102
+ roots.add(expanded);
103
+ }
104
+ }
105
+ return Array.from(roots);
106
+ }
107
+ async function getCppIncludeRootsForCmake(cmakelists_dir, rootDir) {
108
+ if (includeRootsCache.has(cmakelists_dir)) {
109
+ const cached = includeRootsCache.get(cmakelists_dir);
110
+ return cached ? cached.roots : null;
111
+ }
112
+ try {
113
+ const content = await readFileOpt(join(cmakelists_dir, 'CMakeLists.txt'));
114
+ if (!content) {
115
+ includeRootsCache.set(cmakelists_dir, null);
116
+ return null;
117
+ }
118
+ const roots = extractIncludeRoots(join(cmakelists_dir, 'CMakeLists.txt'), content, rootDir);
119
+ const info = { cmakelists_dir, roots };
120
+ includeRootsCache.set(cmakelists_dir, info);
121
+ return roots;
122
+ }
123
+ catch {
124
+ includeRootsCache.set(cmakelists_dir, null);
125
+ return null;
126
+ }
127
+ }
128
+ /**
129
+ * Walk up from startDir to find all ancestor CMakeLists.txt files, collect their
130
+ * include roots, and return them in order (nearest CMakeLists' roots first).
131
+ * Caches the list of CMakeLists dirs per startDir to avoid repeated walk-ups.
132
+ */
133
+ export async function getCppIncludeRoots(startDir, rootDir) {
134
+ if (startDirToCmakeLists.has(startDir)) {
135
+ const cmake_dirs = startDirToCmakeLists.get(startDir);
136
+ const allRoots = [];
137
+ for (const cmake_dir of cmake_dirs) {
138
+ const roots = await getCppIncludeRootsForCmake(cmake_dir, rootDir);
139
+ if (roots)
140
+ allRoots.push(...roots);
141
+ }
142
+ return allRoots;
143
+ }
144
+ const cmake_dirs = [];
145
+ let dir = startDir;
146
+ for (let i = 0; i < 64; i++) {
147
+ const cmake_path = join(dir, 'CMakeLists.txt');
148
+ const content = await readFileOpt(cmake_path);
149
+ if (content !== null) {
150
+ cmake_dirs.push(dir);
151
+ }
152
+ const parent = dirname(dir);
153
+ if (parent === dir)
154
+ break;
155
+ dir = parent;
156
+ }
157
+ startDirToCmakeLists.set(startDir, cmake_dirs);
158
+ const allRoots = [];
159
+ for (const cmake_dir of cmake_dirs) {
160
+ const roots = await getCppIncludeRootsForCmake(cmake_dir, rootDir);
161
+ if (roots)
162
+ allRoots.push(...roots);
163
+ }
164
+ return allRoots;
165
+ }
166
+ //# sourceMappingURL=cpp-include-roots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpp-include-roots.js","sourceRoot":"","sources":["../../src/indexer/cpp-include-roots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Edge, IndexedFile } from '../types.js';
2
+ /**
3
+ * C# synthetic edges:
4
+ * - Partial class/struct/interface/record declarations: when multiple files
5
+ * declare the same partial type (same name and namespace), emit bidirectional
6
+ * synthetic file-level edges between all pairs.
7
+ */
8
+ export declare function addCSharpSyntheticEdges(indexedFiles: IndexedFile[], edges: Edge[], fullFileIdSet: Set<string>, rootDir: string): Promise<void>;
9
+ //# sourceMappingURL=csharp-synthetic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csharp-synthetic.d.ts","sourceRoot":"","sources":["../../src/indexer/csharp-synthetic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAsCf"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * C# synthetic edges:
3
+ * - Partial class/struct/interface/record declarations: when multiple files
4
+ * declare the same partial type (same name and namespace), emit bidirectional
5
+ * synthetic file-level edges between all pairs.
6
+ */
7
+ export async function addCSharpSyntheticEdges(indexedFiles, edges, fullFileIdSet, rootDir) {
8
+ const csharpFiles = indexedFiles.filter(f => f.language === 'csharp');
9
+ if (csharpFiles.length === 0)
10
+ return;
11
+ // Build a map: (namespace?, name) → fileId[]
12
+ const partialsByKey = new Map();
13
+ for (const f of csharpFiles) {
14
+ if (!f.partialDeclarations?.length)
15
+ continue;
16
+ for (const decl of f.partialDeclarations) {
17
+ const key = `${decl.namespace ?? ''}::${decl.name}`;
18
+ let arr = partialsByKey.get(key);
19
+ if (!arr) {
20
+ arr = [];
21
+ partialsByKey.set(key, arr);
22
+ }
23
+ arr.push(f.id);
24
+ }
25
+ }
26
+ // For each partial declaration group with 2+ files, emit bidirectional edges
27
+ const seen = new Set();
28
+ for (const e of edges)
29
+ seen.add(`${e.from}|${e.to}`);
30
+ for (const [key, fileIds] of partialsByKey) {
31
+ if (fileIds.length < 2)
32
+ continue;
33
+ // Extract the type name for the specifier
34
+ const typeName = key.split('::')[1];
35
+ for (let i = 0; i < fileIds.length; i++) {
36
+ for (let j = i + 1; j < fileIds.length; j++) {
37
+ const fromId = fileIds[i];
38
+ const toId = fileIds[j];
39
+ // Bidirectional: i→j and j→i
40
+ for (const [from, to] of [[fromId, toId], [toId, fromId]]) {
41
+ const edgeKey = `${from}|${to}`;
42
+ if (seen.has(edgeKey) || !fullFileIdSet.has(from) || !fullFileIdSet.has(to))
43
+ continue;
44
+ seen.add(edgeKey);
45
+ edges.push({ from, to, type: 'import', specifier: `partial:${typeName}` });
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
51
+ //# sourceMappingURL=csharp-synthetic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csharp-synthetic.js","sourceRoot":"","sources":["../../src/indexer/csharp-synthetic.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,YAA2B,EAC3B,KAAa,EACb,aAA0B,EAC1B,OAAe;IAEf,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACtE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAErC,6CAA6C;IAC7C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,MAAM;YAAE,SAAS;QAC7C,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,mBAAmB,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACpD,IAAI,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAAC,GAAG,GAAG,EAAE,CAAC;gBAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC;YACpD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAErD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,aAAa,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QACjC,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxB,6BAA6B;gBAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;oBAC1D,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,SAAS;oBACtF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAClB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Edge, IndexedFile } from '../types.js';
2
+ /**
3
+ * Django synthetic edges:
4
+ * - Settings.py dotted-string references (MIDDLEWARE, AUTHENTICATION_BACKENDS, etc.)
5
+ * - URLs.py include() calls with string arguments
6
+ * - importlib.import_module() with literal string arguments
7
+ *
8
+ * These emit specifiers with convention:django prefix, resolved via Python's
9
+ * absolute import resolver (walking up from the file dir to find package roots).
10
+ */
11
+ export declare function addDjangoSyntheticEdges(indexedFiles: IndexedFile[], edges: Edge[], fullFileIdSet: Set<string>, rootDir: string): Promise<void>;
12
+ //# sourceMappingURL=django-synthetic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"django-synthetic.d.ts","sourceRoot":"","sources":["../../src/indexer/django-synthetic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAqCf"}
@@ -0,0 +1,49 @@
1
+ import { resolvePython } from './resolvers/python.js';
2
+ /**
3
+ * Django synthetic edges:
4
+ * - Settings.py dotted-string references (MIDDLEWARE, AUTHENTICATION_BACKENDS, etc.)
5
+ * - URLs.py include() calls with string arguments
6
+ * - importlib.import_module() with literal string arguments
7
+ *
8
+ * These emit specifiers with convention:django prefix, resolved via Python's
9
+ * absolute import resolver (walking up from the file dir to find package roots).
10
+ */
11
+ export async function addDjangoSyntheticEdges(indexedFiles, edges, fullFileIdSet, rootDir) {
12
+ const pythonFiles = indexedFiles.filter(f => f.language === 'python');
13
+ if (pythonFiles.length === 0)
14
+ return;
15
+ const seen = new Set();
16
+ for (const e of edges)
17
+ seen.add(`${e.from}|${e.to}`);
18
+ // Process each Python file that has Django convention references
19
+ for (const f of pythonFiles) {
20
+ if (!f.djangoConventionRefs?.length)
21
+ continue;
22
+ for (const ref of f.djangoConventionRefs) {
23
+ // ref.value is a dotted string like 'django.middleware.locale.LocaleMiddleware'.
24
+ // resolvePython returns a fileId (relative path) directly, not an absolute path.
25
+ // If full path doesn't resolve, retry with the trailing segment stripped (so
26
+ // 'django.middleware.locale.LocaleMiddleware' falls back to 'django.middleware.locale').
27
+ let targetId = await resolvePython(ref.value, f.path, fullFileIdSet, rootDir, new Map());
28
+ if (!targetId) {
29
+ const lastDot = ref.value.lastIndexOf('.');
30
+ if (lastDot > 0) {
31
+ targetId = await resolvePython(ref.value.slice(0, lastDot), f.path, fullFileIdSet, rootDir, new Map());
32
+ }
33
+ }
34
+ if (!targetId || targetId === f.id)
35
+ continue;
36
+ const key = `${f.id}|${targetId}`;
37
+ if (seen.has(key) || !fullFileIdSet.has(targetId))
38
+ continue;
39
+ seen.add(key);
40
+ edges.push({
41
+ from: f.id,
42
+ to: targetId,
43
+ type: 'import',
44
+ specifier: `convention:django:${ref.kind}`,
45
+ });
46
+ }
47
+ }
48
+ }
49
+ //# sourceMappingURL=django-synthetic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"django-synthetic.js","sourceRoot":"","sources":["../../src/indexer/django-synthetic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,YAA2B,EAC3B,KAAa,EACb,aAA0B,EAC1B,OAAe;IAEf,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACtE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAErC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAErD,iEAAiE;IACjE,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,oBAAoB,EAAE,MAAM;YAAE,SAAS;QAE9C,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;YACzC,iFAAiF;YACjF,iFAAiF;YACjF,6EAA6E;YAC7E,yFAAyF;YACzF,IAAI,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBAChB,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBACzG,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;gBAAE,SAAS;YAE7C,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAE5D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,CAAC,CAAC,EAAE;gBACV,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,qBAAqB,GAAG,CAAC,IAAI,EAAE;aAC3C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * AngularJS 1.x symbol extractor.
3
+ *
4
+ * Extracts registered component names and exposed methods from AngularJS
5
+ * module declarations. Results are returned as pseudo-export strings so they
6
+ * flow into buildFileDomains as 'symbol' source tokens.
7
+ *
8
+ * Detected patterns:
9
+ * .controller('UserController', ...) → 'UserController'
10
+ * .service('authService', ...) → 'authService'
11
+ * .factory / .directive / .filter / .component / .provider
12
+ * this.getUser = ... → 'getUser'
13
+ * $scope.loadItems = ... → 'loadItems'
14
+ */
15
+ export declare function extractAngularJsSymbols(content: string): string[];
16
+ //# sourceMappingURL=angularjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angularjs.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/angularjs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BjE"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * AngularJS 1.x symbol extractor.
3
+ *
4
+ * Extracts registered component names and exposed methods from AngularJS
5
+ * module declarations. Results are returned as pseudo-export strings so they
6
+ * flow into buildFileDomains as 'symbol' source tokens.
7
+ *
8
+ * Detected patterns:
9
+ * .controller('UserController', ...) → 'UserController'
10
+ * .service('authService', ...) → 'authService'
11
+ * .factory / .directive / .filter / .component / .provider
12
+ * this.getUser = ... → 'getUser'
13
+ * $scope.loadItems = ... → 'loadItems'
14
+ */
15
+ const ANGULAR_REGISTER_RE = /\.(?:controller|service|factory|directive|component|filter|provider|value|constant)\s*\(\s*['"]([^'"]+)['"]/g;
16
+ const THIS_METHOD_RE = /\bthis\.([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/g;
17
+ const SCOPE_METHOD_RE = /\$scope\.([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/g;
18
+ export function extractAngularJsSymbols(content) {
19
+ // Quick bail — not an AngularJS file
20
+ if (!content.includes('angular.module'))
21
+ return [];
22
+ const symbols = [];
23
+ let m;
24
+ // Registered component names
25
+ ANGULAR_REGISTER_RE.lastIndex = 0;
26
+ while ((m = ANGULAR_REGISTER_RE.exec(content)) !== null) {
27
+ symbols.push(m[1]);
28
+ }
29
+ // this.method = ... (service / controller instance methods)
30
+ const thisSeen = new Set();
31
+ THIS_METHOD_RE.lastIndex = 0;
32
+ while ((m = THIS_METHOD_RE.exec(content)) !== null) {
33
+ if (!thisSeen.has(m[1])) {
34
+ thisSeen.add(m[1]);
35
+ symbols.push(m[1]);
36
+ }
37
+ }
38
+ // $scope.method = ... (controller scope methods)
39
+ const scopeSeen = new Set();
40
+ SCOPE_METHOD_RE.lastIndex = 0;
41
+ while ((m = SCOPE_METHOD_RE.exec(content)) !== null) {
42
+ if (!scopeSeen.has(m[1])) {
43
+ scopeSeen.add(m[1]);
44
+ symbols.push(m[1]);
45
+ }
46
+ }
47
+ return symbols;
48
+ }
49
+ //# sourceMappingURL=angularjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angularjs.js","sourceRoot":"","sources":["../../../src/indexer/extractors/angularjs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,mBAAmB,GACvB,8GAA8G,CAAC;AAEjH,MAAM,cAAc,GAAG,yCAAyC,CAAC;AACjE,MAAM,eAAe,GAAG,0CAA0C,CAAC;AAEnE,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,qCAAqC;IACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAyB,CAAC;IAE9B,6BAA6B;IAC7B,mBAAmB,CAAC,SAAS,GAAG,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACtE,CAAC;IAED,iDAAiD;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACxE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { SymbolNode } from '../../types.js';
2
+ export interface CppParseResult {
3
+ imports: string[];
4
+ exports: string[];
5
+ hasDefaultExport: false;
6
+ symbols: SymbolNode[];
7
+ }
8
+ export declare function parseCppContent(content: string, fileId: string): CppParseResult;
9
+ //# sourceMappingURL=cpp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpp.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/cpp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,gBAAgB,CAAC;AAiD3D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,KAAK,CAAC;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAgFD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAgI/E"}