@saluzi/codegraph 0.2.0 → 0.2.1

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 (657) hide show
  1. package/dist/bin/codegraph.d.ts +26 -0
  2. package/dist/bin/codegraph.d.ts.map +1 -0
  3. package/dist/bin/codegraph.js +2248 -0
  4. package/dist/bin/codegraph.js.map +1 -0
  5. package/dist/bin/command-supervision.d.ts +49 -0
  6. package/dist/bin/command-supervision.d.ts.map +1 -0
  7. package/dist/bin/command-supervision.js +95 -0
  8. package/dist/bin/command-supervision.js.map +1 -0
  9. package/dist/bin/fatal-handler.d.ts +20 -0
  10. package/dist/bin/fatal-handler.d.ts.map +1 -0
  11. package/dist/bin/fatal-handler.js +118 -0
  12. package/dist/bin/fatal-handler.js.map +1 -0
  13. package/dist/bin/node-version-check.d.ts +37 -0
  14. package/dist/bin/node-version-check.d.ts.map +1 -0
  15. package/dist/bin/node-version-check.js +79 -0
  16. package/dist/bin/node-version-check.js.map +1 -0
  17. package/dist/bin/uninstall.d.ts +14 -0
  18. package/dist/bin/uninstall.d.ts.map +1 -0
  19. package/dist/bin/uninstall.js +36 -0
  20. package/dist/bin/uninstall.js.map +1 -0
  21. package/dist/context/formatter.d.ts +30 -0
  22. package/dist/context/formatter.d.ts.map +1 -0
  23. package/dist/context/formatter.js +263 -0
  24. package/dist/context/formatter.js.map +1 -0
  25. package/dist/context/index.d.ts +119 -0
  26. package/dist/context/index.d.ts.map +1 -0
  27. package/dist/context/index.js +1296 -0
  28. package/dist/context/index.js.map +1 -0
  29. package/dist/context/markers.d.ts +19 -0
  30. package/dist/context/markers.d.ts.map +1 -0
  31. package/dist/context/markers.js +22 -0
  32. package/dist/context/markers.js.map +1 -0
  33. package/dist/db/index.d.ts +201 -0
  34. package/dist/db/index.d.ts.map +1 -0
  35. package/dist/db/index.js +493 -0
  36. package/dist/db/index.js.map +1 -0
  37. package/dist/db/migrations.d.ts +44 -0
  38. package/dist/db/migrations.d.ts.map +1 -0
  39. package/dist/db/migrations.js +212 -0
  40. package/dist/db/migrations.js.map +1 -0
  41. package/dist/db/queries.d.ts +513 -0
  42. package/dist/db/queries.d.ts.map +1 -0
  43. package/dist/db/queries.js +1886 -0
  44. package/dist/db/queries.js.map +1 -0
  45. package/dist/db/schema.sql +194 -0
  46. package/dist/db/sqlite-adapter.d.ts +53 -0
  47. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  48. package/dist/db/sqlite-adapter.js +117 -0
  49. package/dist/db/sqlite-adapter.js.map +1 -0
  50. package/dist/db/wal-valve.d.ts +106 -0
  51. package/dist/db/wal-valve.d.ts.map +1 -0
  52. package/dist/db/wal-valve.js +208 -0
  53. package/dist/db/wal-valve.js.map +1 -0
  54. package/dist/directory.d.ts +183 -0
  55. package/dist/directory.d.ts.map +1 -0
  56. package/dist/directory.js +797 -0
  57. package/dist/directory.js.map +1 -0
  58. package/dist/errors.d.ts +136 -0
  59. package/dist/errors.d.ts.map +1 -0
  60. package/dist/errors.js +219 -0
  61. package/dist/errors.js.map +1 -0
  62. package/dist/extraction/astro-extractor.d.ts +79 -0
  63. package/dist/extraction/astro-extractor.d.ts.map +1 -0
  64. package/dist/extraction/astro-extractor.js +320 -0
  65. package/dist/extraction/astro-extractor.js.map +1 -0
  66. package/dist/extraction/cfml-extractor.d.ts +107 -0
  67. package/dist/extraction/cfml-extractor.d.ts.map +1 -0
  68. package/dist/extraction/cfml-extractor.js +494 -0
  69. package/dist/extraction/cfml-extractor.js.map +1 -0
  70. package/dist/extraction/dfm-extractor.d.ts +31 -0
  71. package/dist/extraction/dfm-extractor.d.ts.map +1 -0
  72. package/dist/extraction/dfm-extractor.js +151 -0
  73. package/dist/extraction/dfm-extractor.js.map +1 -0
  74. package/dist/extraction/extraction-version.d.ts +25 -0
  75. package/dist/extraction/extraction-version.d.ts.map +1 -0
  76. package/dist/extraction/extraction-version.js +28 -0
  77. package/dist/extraction/extraction-version.js.map +1 -0
  78. package/dist/extraction/function-ref.d.ts +118 -0
  79. package/dist/extraction/function-ref.d.ts.map +1 -0
  80. package/dist/extraction/function-ref.js +727 -0
  81. package/dist/extraction/function-ref.js.map +1 -0
  82. package/dist/extraction/generated-detection.d.ts +30 -0
  83. package/dist/extraction/generated-detection.d.ts.map +1 -0
  84. package/dist/extraction/generated-detection.js +83 -0
  85. package/dist/extraction/generated-detection.js.map +1 -0
  86. package/dist/extraction/grammars.d.ts +138 -0
  87. package/dist/extraction/grammars.d.ts.map +1 -0
  88. package/dist/extraction/grammars.js +631 -0
  89. package/dist/extraction/grammars.js.map +1 -0
  90. package/dist/extraction/index.d.ts +232 -0
  91. package/dist/extraction/index.d.ts.map +1 -0
  92. package/dist/extraction/index.js +2409 -0
  93. package/dist/extraction/index.js.map +1 -0
  94. package/dist/extraction/languages/arkts.d.ts +3 -0
  95. package/dist/extraction/languages/arkts.d.ts.map +1 -0
  96. package/dist/extraction/languages/arkts.js +127 -0
  97. package/dist/extraction/languages/arkts.js.map +1 -0
  98. package/dist/extraction/languages/c-cpp.d.ts +110 -0
  99. package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
  100. package/dist/extraction/languages/c-cpp.js +837 -0
  101. package/dist/extraction/languages/c-cpp.js.map +1 -0
  102. package/dist/extraction/languages/cfquery.d.ts +12 -0
  103. package/dist/extraction/languages/cfquery.d.ts.map +1 -0
  104. package/dist/extraction/languages/cfquery.js +28 -0
  105. package/dist/extraction/languages/cfquery.js.map +1 -0
  106. package/dist/extraction/languages/cfscript.d.ts +3 -0
  107. package/dist/extraction/languages/cfscript.d.ts.map +1 -0
  108. package/dist/extraction/languages/cfscript.js +73 -0
  109. package/dist/extraction/languages/cfscript.js.map +1 -0
  110. package/dist/extraction/languages/cobol.d.ts +33 -0
  111. package/dist/extraction/languages/cobol.d.ts.map +1 -0
  112. package/dist/extraction/languages/cobol.js +499 -0
  113. package/dist/extraction/languages/cobol.js.map +1 -0
  114. package/dist/extraction/languages/csharp.d.ts +25 -0
  115. package/dist/extraction/languages/csharp.d.ts.map +1 -0
  116. package/dist/extraction/languages/csharp.js +175 -0
  117. package/dist/extraction/languages/csharp.js.map +1 -0
  118. package/dist/extraction/languages/dart.d.ts +3 -0
  119. package/dist/extraction/languages/dart.d.ts.map +1 -0
  120. package/dist/extraction/languages/dart.js +374 -0
  121. package/dist/extraction/languages/dart.js.map +1 -0
  122. package/dist/extraction/languages/erlang.d.ts +3 -0
  123. package/dist/extraction/languages/erlang.d.ts.map +1 -0
  124. package/dist/extraction/languages/erlang.js +350 -0
  125. package/dist/extraction/languages/erlang.js.map +1 -0
  126. package/dist/extraction/languages/go.d.ts +3 -0
  127. package/dist/extraction/languages/go.d.ts.map +1 -0
  128. package/dist/extraction/languages/go.js +111 -0
  129. package/dist/extraction/languages/go.js.map +1 -0
  130. package/dist/extraction/languages/index.d.ts +10 -0
  131. package/dist/extraction/languages/index.d.ts.map +1 -0
  132. package/dist/extraction/languages/index.js +71 -0
  133. package/dist/extraction/languages/index.js.map +1 -0
  134. package/dist/extraction/languages/java.d.ts +3 -0
  135. package/dist/extraction/languages/java.d.ts.map +1 -0
  136. package/dist/extraction/languages/java.js +315 -0
  137. package/dist/extraction/languages/java.js.map +1 -0
  138. package/dist/extraction/languages/javascript.d.ts +3 -0
  139. package/dist/extraction/languages/javascript.d.ts.map +1 -0
  140. package/dist/extraction/languages/javascript.js +106 -0
  141. package/dist/extraction/languages/javascript.js.map +1 -0
  142. package/dist/extraction/languages/kotlin.d.ts +3 -0
  143. package/dist/extraction/languages/kotlin.d.ts.map +1 -0
  144. package/dist/extraction/languages/kotlin.js +379 -0
  145. package/dist/extraction/languages/kotlin.js.map +1 -0
  146. package/dist/extraction/languages/lua.d.ts +3 -0
  147. package/dist/extraction/languages/lua.d.ts.map +1 -0
  148. package/dist/extraction/languages/lua.js +150 -0
  149. package/dist/extraction/languages/lua.js.map +1 -0
  150. package/dist/extraction/languages/luau.d.ts +3 -0
  151. package/dist/extraction/languages/luau.d.ts.map +1 -0
  152. package/dist/extraction/languages/luau.js +37 -0
  153. package/dist/extraction/languages/luau.js.map +1 -0
  154. package/dist/extraction/languages/nix.d.ts +3 -0
  155. package/dist/extraction/languages/nix.d.ts.map +1 -0
  156. package/dist/extraction/languages/nix.js +294 -0
  157. package/dist/extraction/languages/nix.js.map +1 -0
  158. package/dist/extraction/languages/objc.d.ts +3 -0
  159. package/dist/extraction/languages/objc.d.ts.map +1 -0
  160. package/dist/extraction/languages/objc.js +175 -0
  161. package/dist/extraction/languages/objc.js.map +1 -0
  162. package/dist/extraction/languages/pascal.d.ts +3 -0
  163. package/dist/extraction/languages/pascal.d.ts.map +1 -0
  164. package/dist/extraction/languages/pascal.js +77 -0
  165. package/dist/extraction/languages/pascal.js.map +1 -0
  166. package/dist/extraction/languages/php.d.ts +3 -0
  167. package/dist/extraction/languages/php.d.ts.map +1 -0
  168. package/dist/extraction/languages/php.js +196 -0
  169. package/dist/extraction/languages/php.js.map +1 -0
  170. package/dist/extraction/languages/python.d.ts +3 -0
  171. package/dist/extraction/languages/python.d.ts.map +1 -0
  172. package/dist/extraction/languages/python.js +56 -0
  173. package/dist/extraction/languages/python.js.map +1 -0
  174. package/dist/extraction/languages/r.d.ts +3 -0
  175. package/dist/extraction/languages/r.d.ts.map +1 -0
  176. package/dist/extraction/languages/r.js +314 -0
  177. package/dist/extraction/languages/r.js.map +1 -0
  178. package/dist/extraction/languages/ruby.d.ts +3 -0
  179. package/dist/extraction/languages/ruby.d.ts.map +1 -0
  180. package/dist/extraction/languages/ruby.js +149 -0
  181. package/dist/extraction/languages/ruby.js.map +1 -0
  182. package/dist/extraction/languages/rust.d.ts +3 -0
  183. package/dist/extraction/languages/rust.d.ts.map +1 -0
  184. package/dist/extraction/languages/rust.js +142 -0
  185. package/dist/extraction/languages/rust.js.map +1 -0
  186. package/dist/extraction/languages/scala.d.ts +3 -0
  187. package/dist/extraction/languages/scala.d.ts.map +1 -0
  188. package/dist/extraction/languages/scala.js +209 -0
  189. package/dist/extraction/languages/scala.js.map +1 -0
  190. package/dist/extraction/languages/solidity.d.ts +3 -0
  191. package/dist/extraction/languages/solidity.d.ts.map +1 -0
  192. package/dist/extraction/languages/solidity.js +293 -0
  193. package/dist/extraction/languages/solidity.js.map +1 -0
  194. package/dist/extraction/languages/swift.d.ts +3 -0
  195. package/dist/extraction/languages/swift.d.ts.map +1 -0
  196. package/dist/extraction/languages/swift.js +152 -0
  197. package/dist/extraction/languages/swift.js.map +1 -0
  198. package/dist/extraction/languages/terraform.d.ts +3 -0
  199. package/dist/extraction/languages/terraform.d.ts.map +1 -0
  200. package/dist/extraction/languages/terraform.js +641 -0
  201. package/dist/extraction/languages/terraform.js.map +1 -0
  202. package/dist/extraction/languages/typescript.d.ts +16 -0
  203. package/dist/extraction/languages/typescript.d.ts.map +1 -0
  204. package/dist/extraction/languages/typescript.js +167 -0
  205. package/dist/extraction/languages/typescript.js.map +1 -0
  206. package/dist/extraction/languages/vbnet.d.ts +11 -0
  207. package/dist/extraction/languages/vbnet.d.ts.map +1 -0
  208. package/dist/extraction/languages/vbnet.js +141 -0
  209. package/dist/extraction/languages/vbnet.js.map +1 -0
  210. package/dist/extraction/liquid-extractor.d.ts +59 -0
  211. package/dist/extraction/liquid-extractor.d.ts.map +1 -0
  212. package/dist/extraction/liquid-extractor.js +357 -0
  213. package/dist/extraction/liquid-extractor.js.map +1 -0
  214. package/dist/extraction/mybatis-extractor.d.ts +68 -0
  215. package/dist/extraction/mybatis-extractor.d.ts.map +1 -0
  216. package/dist/extraction/mybatis-extractor.js +300 -0
  217. package/dist/extraction/mybatis-extractor.js.map +1 -0
  218. package/dist/extraction/parse-pool.d.ts +152 -0
  219. package/dist/extraction/parse-pool.d.ts.map +1 -0
  220. package/dist/extraction/parse-pool.js +387 -0
  221. package/dist/extraction/parse-pool.js.map +1 -0
  222. package/dist/extraction/parse-worker.d.ts +8 -0
  223. package/dist/extraction/parse-worker.d.ts.map +1 -0
  224. package/dist/extraction/parse-worker.js +104 -0
  225. package/dist/extraction/parse-worker.js.map +1 -0
  226. package/dist/extraction/razor-extractor.d.ts +42 -0
  227. package/dist/extraction/razor-extractor.d.ts.map +1 -0
  228. package/dist/extraction/razor-extractor.js +285 -0
  229. package/dist/extraction/razor-extractor.js.map +1 -0
  230. package/dist/extraction/svelte-extractor.d.ts +56 -0
  231. package/dist/extraction/svelte-extractor.d.ts.map +1 -0
  232. package/dist/extraction/svelte-extractor.js +275 -0
  233. package/dist/extraction/svelte-extractor.js.map +1 -0
  234. package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
  235. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
  236. package/dist/extraction/tree-sitter-helpers.js +153 -0
  237. package/dist/extraction/tree-sitter-helpers.js.map +1 -0
  238. package/dist/extraction/tree-sitter-types.d.ts +258 -0
  239. package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
  240. package/dist/extraction/tree-sitter-types.js +10 -0
  241. package/dist/extraction/tree-sitter-types.js.map +1 -0
  242. package/dist/extraction/tree-sitter.d.ts +706 -0
  243. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  244. package/dist/extraction/tree-sitter.js +6506 -0
  245. package/dist/extraction/tree-sitter.js.map +1 -0
  246. package/dist/extraction/vue-extractor.d.ts +51 -0
  247. package/dist/extraction/vue-extractor.d.ts.map +1 -0
  248. package/dist/extraction/vue-extractor.js +254 -0
  249. package/dist/extraction/vue-extractor.js.map +1 -0
  250. package/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
  251. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  252. package/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
  253. package/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
  254. package/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
  255. package/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
  256. package/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
  257. package/dist/extraction/wasm/tree-sitter-lua.wasm +0 -0
  258. package/dist/extraction/wasm/tree-sitter-luau.wasm +0 -0
  259. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  260. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  261. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  262. package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
  263. package/dist/extraction/wasm/tree-sitter-terraform.wasm +0 -0
  264. package/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
  265. package/dist/extraction/wasm-runtime-flags.d.ts +38 -0
  266. package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -0
  267. package/dist/extraction/wasm-runtime-flags.js +106 -0
  268. package/dist/extraction/wasm-runtime-flags.js.map +1 -0
  269. package/dist/graph/index.d.ts +8 -0
  270. package/dist/graph/index.d.ts.map +1 -0
  271. package/dist/graph/index.js +13 -0
  272. package/dist/graph/index.js.map +1 -0
  273. package/dist/graph/queries.d.ts +106 -0
  274. package/dist/graph/queries.d.ts.map +1 -0
  275. package/dist/graph/queries.js +339 -0
  276. package/dist/graph/queries.js.map +1 -0
  277. package/dist/graph/traversal.d.ts +127 -0
  278. package/dist/graph/traversal.d.ts.map +1 -0
  279. package/dist/graph/traversal.js +599 -0
  280. package/dist/graph/traversal.js.map +1 -0
  281. package/dist/index.d.ts +643 -0
  282. package/dist/index.d.ts.map +1 -0
  283. package/dist/index.js +1491 -0
  284. package/dist/index.js.map +1 -0
  285. package/dist/installer/config-writer.d.ts +28 -0
  286. package/dist/installer/config-writer.d.ts.map +1 -0
  287. package/dist/installer/config-writer.js +91 -0
  288. package/dist/installer/config-writer.js.map +1 -0
  289. package/dist/installer/index.d.ts +142 -0
  290. package/dist/installer/index.d.ts.map +1 -0
  291. package/dist/installer/index.js +619 -0
  292. package/dist/installer/index.js.map +1 -0
  293. package/dist/installer/instructions-template.d.ts +41 -0
  294. package/dist/installer/instructions-template.d.ts.map +1 -0
  295. package/dist/installer/instructions-template.js +53 -0
  296. package/dist/installer/instructions-template.js.map +1 -0
  297. package/dist/installer/targets/antigravity.d.ts +57 -0
  298. package/dist/installer/targets/antigravity.d.ts.map +1 -0
  299. package/dist/installer/targets/antigravity.js +308 -0
  300. package/dist/installer/targets/antigravity.js.map +1 -0
  301. package/dist/installer/targets/claude.d.ts +62 -0
  302. package/dist/installer/targets/claude.d.ts.map +1 -0
  303. package/dist/installer/targets/claude.js +454 -0
  304. package/dist/installer/targets/claude.js.map +1 -0
  305. package/dist/installer/targets/codex.d.ts +18 -0
  306. package/dist/installer/targets/codex.d.ts.map +1 -0
  307. package/dist/installer/targets/codex.js +185 -0
  308. package/dist/installer/targets/codex.js.map +1 -0
  309. package/dist/installer/targets/cursor.d.ts +35 -0
  310. package/dist/installer/targets/cursor.d.ts.map +1 -0
  311. package/dist/installer/targets/cursor.js +254 -0
  312. package/dist/installer/targets/cursor.js.map +1 -0
  313. package/dist/installer/targets/gemini.d.ts +26 -0
  314. package/dist/installer/targets/gemini.d.ts.map +1 -0
  315. package/dist/installer/targets/gemini.js +165 -0
  316. package/dist/installer/targets/gemini.js.map +1 -0
  317. package/dist/installer/targets/hermes.d.ts +18 -0
  318. package/dist/installer/targets/hermes.d.ts.map +1 -0
  319. package/dist/installer/targets/hermes.js +359 -0
  320. package/dist/installer/targets/hermes.js.map +1 -0
  321. package/dist/installer/targets/kiro.d.ts +27 -0
  322. package/dist/installer/targets/kiro.d.ts.map +1 -0
  323. package/dist/installer/targets/kiro.js +178 -0
  324. package/dist/installer/targets/kiro.js.map +1 -0
  325. package/dist/installer/targets/opencode.d.ts +38 -0
  326. package/dist/installer/targets/opencode.d.ts.map +1 -0
  327. package/dist/installer/targets/opencode.js +288 -0
  328. package/dist/installer/targets/opencode.js.map +1 -0
  329. package/dist/installer/targets/registry.d.ts +35 -0
  330. package/dist/installer/targets/registry.d.ts.map +1 -0
  331. package/dist/installer/targets/registry.js +91 -0
  332. package/dist/installer/targets/registry.js.map +1 -0
  333. package/dist/installer/targets/shared.d.ts +101 -0
  334. package/dist/installer/targets/shared.d.ts.map +1 -0
  335. package/dist/installer/targets/shared.js +264 -0
  336. package/dist/installer/targets/shared.js.map +1 -0
  337. package/dist/installer/targets/toml.d.ts +52 -0
  338. package/dist/installer/targets/toml.d.ts.map +1 -0
  339. package/dist/installer/targets/toml.js +147 -0
  340. package/dist/installer/targets/toml.js.map +1 -0
  341. package/dist/installer/targets/types.d.ts +108 -0
  342. package/dist/installer/targets/types.d.ts.map +1 -0
  343. package/dist/installer/targets/types.js +16 -0
  344. package/dist/installer/targets/types.js.map +1 -0
  345. package/dist/mcp/daemon-manager.d.ts +42 -0
  346. package/dist/mcp/daemon-manager.d.ts.map +1 -0
  347. package/dist/mcp/daemon-manager.js +129 -0
  348. package/dist/mcp/daemon-manager.js.map +1 -0
  349. package/dist/mcp/daemon-paths.d.ts +73 -0
  350. package/dist/mcp/daemon-paths.d.ts.map +1 -0
  351. package/dist/mcp/daemon-paths.js +165 -0
  352. package/dist/mcp/daemon-paths.js.map +1 -0
  353. package/dist/mcp/daemon-registry.d.ts +47 -0
  354. package/dist/mcp/daemon-registry.d.ts.map +1 -0
  355. package/dist/mcp/daemon-registry.js +233 -0
  356. package/dist/mcp/daemon-registry.js.map +1 -0
  357. package/dist/mcp/daemon.d.ts +290 -0
  358. package/dist/mcp/daemon.d.ts.map +1 -0
  359. package/dist/mcp/daemon.js +862 -0
  360. package/dist/mcp/daemon.js.map +1 -0
  361. package/dist/mcp/dynamic-boundaries.d.ts +41 -0
  362. package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
  363. package/dist/mcp/dynamic-boundaries.js +360 -0
  364. package/dist/mcp/dynamic-boundaries.js.map +1 -0
  365. package/dist/mcp/early-ppid.d.ts +26 -0
  366. package/dist/mcp/early-ppid.d.ts.map +1 -0
  367. package/dist/mcp/early-ppid.js +29 -0
  368. package/dist/mcp/early-ppid.js.map +1 -0
  369. package/dist/mcp/engine.d.ts +122 -0
  370. package/dist/mcp/engine.d.ts.map +1 -0
  371. package/dist/mcp/engine.js +350 -0
  372. package/dist/mcp/engine.js.map +1 -0
  373. package/dist/mcp/index.d.ts +113 -0
  374. package/dist/mcp/index.d.ts.map +1 -0
  375. package/dist/mcp/index.js +506 -0
  376. package/dist/mcp/index.js.map +1 -0
  377. package/dist/mcp/liveness-watchdog.d.ts +35 -0
  378. package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
  379. package/dist/mcp/liveness-watchdog.js +267 -0
  380. package/dist/mcp/liveness-watchdog.js.map +1 -0
  381. package/dist/mcp/ppid-watchdog.d.ts +62 -0
  382. package/dist/mcp/ppid-watchdog.d.ts.map +1 -0
  383. package/dist/mcp/ppid-watchdog.js +64 -0
  384. package/dist/mcp/ppid-watchdog.js.map +1 -0
  385. package/dist/mcp/proxy.d.ts +87 -0
  386. package/dist/mcp/proxy.d.ts.map +1 -0
  387. package/dist/mcp/proxy.js +667 -0
  388. package/dist/mcp/proxy.js.map +1 -0
  389. package/dist/mcp/query-pool.d.ts +108 -0
  390. package/dist/mcp/query-pool.d.ts.map +1 -0
  391. package/dist/mcp/query-pool.js +315 -0
  392. package/dist/mcp/query-pool.js.map +1 -0
  393. package/dist/mcp/query-worker.d.ts +24 -0
  394. package/dist/mcp/query-worker.d.ts.map +1 -0
  395. package/dist/mcp/query-worker.js +87 -0
  396. package/dist/mcp/query-worker.js.map +1 -0
  397. package/dist/mcp/server-instructions.d.ts +34 -0
  398. package/dist/mcp/server-instructions.d.ts.map +1 -0
  399. package/dist/mcp/server-instructions.js +106 -0
  400. package/dist/mcp/server-instructions.js.map +1 -0
  401. package/dist/mcp/session.d.ts +93 -0
  402. package/dist/mcp/session.d.ts.map +1 -0
  403. package/dist/mcp/session.js +357 -0
  404. package/dist/mcp/session.js.map +1 -0
  405. package/dist/mcp/startup-handshake.d.ts +44 -0
  406. package/dist/mcp/startup-handshake.d.ts.map +1 -0
  407. package/dist/mcp/startup-handshake.js +73 -0
  408. package/dist/mcp/startup-handshake.js.map +1 -0
  409. package/dist/mcp/stdin-teardown.d.ts +27 -0
  410. package/dist/mcp/stdin-teardown.d.ts.map +1 -0
  411. package/dist/mcp/stdin-teardown.js +49 -0
  412. package/dist/mcp/stdin-teardown.js.map +1 -0
  413. package/dist/mcp/tools.d.ts +613 -0
  414. package/dist/mcp/tools.d.ts.map +1 -0
  415. package/dist/mcp/tools.js +4477 -0
  416. package/dist/mcp/tools.js.map +1 -0
  417. package/dist/mcp/transport.d.ts +188 -0
  418. package/dist/mcp/transport.d.ts.map +1 -0
  419. package/dist/mcp/transport.js +377 -0
  420. package/dist/mcp/transport.js.map +1 -0
  421. package/dist/mcp/version.d.ts +19 -0
  422. package/dist/mcp/version.d.ts.map +1 -0
  423. package/dist/mcp/version.js +71 -0
  424. package/dist/mcp/version.js.map +1 -0
  425. package/dist/project-config.d.ts +94 -0
  426. package/dist/project-config.d.ts.map +1 -0
  427. package/dist/project-config.js +374 -0
  428. package/dist/project-config.js.map +1 -0
  429. package/dist/resolution/c-fnptr-synthesizer.d.ts +6 -0
  430. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
  431. package/dist/resolution/c-fnptr-synthesizer.js +1062 -0
  432. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
  433. package/dist/resolution/callback-synthesizer.d.ts +15 -0
  434. package/dist/resolution/callback-synthesizer.d.ts.map +1 -0
  435. package/dist/resolution/callback-synthesizer.js +3938 -0
  436. package/dist/resolution/callback-synthesizer.js.map +1 -0
  437. package/dist/resolution/cooperative-yield.d.ts +32 -0
  438. package/dist/resolution/cooperative-yield.d.ts.map +1 -0
  439. package/dist/resolution/cooperative-yield.js +42 -0
  440. package/dist/resolution/cooperative-yield.js.map +1 -0
  441. package/dist/resolution/frameworks/astro.d.ts +9 -0
  442. package/dist/resolution/frameworks/astro.d.ts.map +1 -0
  443. package/dist/resolution/frameworks/astro.js +169 -0
  444. package/dist/resolution/frameworks/astro.js.map +1 -0
  445. package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
  446. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
  447. package/dist/resolution/frameworks/cargo-workspace.js +225 -0
  448. package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
  449. package/dist/resolution/frameworks/cics.d.ts +20 -0
  450. package/dist/resolution/frameworks/cics.d.ts.map +1 -0
  451. package/dist/resolution/frameworks/cics.js +90 -0
  452. package/dist/resolution/frameworks/cics.js.map +1 -0
  453. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  454. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  455. package/dist/resolution/frameworks/csharp.js +241 -0
  456. package/dist/resolution/frameworks/csharp.js.map +1 -0
  457. package/dist/resolution/frameworks/drupal.d.ts +51 -0
  458. package/dist/resolution/frameworks/drupal.d.ts.map +1 -0
  459. package/dist/resolution/frameworks/drupal.js +367 -0
  460. package/dist/resolution/frameworks/drupal.js.map +1 -0
  461. package/dist/resolution/frameworks/expo-modules.d.ts +3 -0
  462. package/dist/resolution/frameworks/expo-modules.d.ts.map +1 -0
  463. package/dist/resolution/frameworks/expo-modules.js +148 -0
  464. package/dist/resolution/frameworks/expo-modules.js.map +1 -0
  465. package/dist/resolution/frameworks/express.d.ts +8 -0
  466. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  467. package/dist/resolution/frameworks/express.js +308 -0
  468. package/dist/resolution/frameworks/express.js.map +1 -0
  469. package/dist/resolution/frameworks/fabric.d.ts +3 -0
  470. package/dist/resolution/frameworks/fabric.d.ts.map +1 -0
  471. package/dist/resolution/frameworks/fabric.js +354 -0
  472. package/dist/resolution/frameworks/fabric.js.map +1 -0
  473. package/dist/resolution/frameworks/go.d.ts +8 -0
  474. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  475. package/dist/resolution/frameworks/go.js +161 -0
  476. package/dist/resolution/frameworks/go.js.map +1 -0
  477. package/dist/resolution/frameworks/goframe.d.ts +41 -0
  478. package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
  479. package/dist/resolution/frameworks/goframe.js +112 -0
  480. package/dist/resolution/frameworks/goframe.js.map +1 -0
  481. package/dist/resolution/frameworks/index.d.ts +50 -0
  482. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  483. package/dist/resolution/frameworks/index.js +175 -0
  484. package/dist/resolution/frameworks/index.js.map +1 -0
  485. package/dist/resolution/frameworks/java.d.ts +8 -0
  486. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  487. package/dist/resolution/frameworks/java.js +517 -0
  488. package/dist/resolution/frameworks/java.js.map +1 -0
  489. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  490. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  491. package/dist/resolution/frameworks/laravel.js +257 -0
  492. package/dist/resolution/frameworks/laravel.js.map +1 -0
  493. package/dist/resolution/frameworks/nestjs.d.ts +26 -0
  494. package/dist/resolution/frameworks/nestjs.d.ts.map +1 -0
  495. package/dist/resolution/frameworks/nestjs.js +698 -0
  496. package/dist/resolution/frameworks/nestjs.js.map +1 -0
  497. package/dist/resolution/frameworks/play.d.ts +19 -0
  498. package/dist/resolution/frameworks/play.d.ts.map +1 -0
  499. package/dist/resolution/frameworks/play.js +111 -0
  500. package/dist/resolution/frameworks/play.js.map +1 -0
  501. package/dist/resolution/frameworks/python.d.ts +10 -0
  502. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  503. package/dist/resolution/frameworks/python.js +400 -0
  504. package/dist/resolution/frameworks/python.js.map +1 -0
  505. package/dist/resolution/frameworks/react-native.d.ts +3 -0
  506. package/dist/resolution/frameworks/react-native.d.ts.map +1 -0
  507. package/dist/resolution/frameworks/react-native.js +410 -0
  508. package/dist/resolution/frameworks/react-native.js.map +1 -0
  509. package/dist/resolution/frameworks/react.d.ts +8 -0
  510. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  511. package/dist/resolution/frameworks/react.js +334 -0
  512. package/dist/resolution/frameworks/react.js.map +1 -0
  513. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  514. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  515. package/dist/resolution/frameworks/ruby.js +302 -0
  516. package/dist/resolution/frameworks/ruby.js.map +1 -0
  517. package/dist/resolution/frameworks/rust.d.ts +8 -0
  518. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  519. package/dist/resolution/frameworks/rust.js +304 -0
  520. package/dist/resolution/frameworks/rust.js.map +1 -0
  521. package/dist/resolution/frameworks/svelte.d.ts +9 -0
  522. package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
  523. package/dist/resolution/frameworks/svelte.js +253 -0
  524. package/dist/resolution/frameworks/svelte.js.map +1 -0
  525. package/dist/resolution/frameworks/swift-objc.d.ts +37 -0
  526. package/dist/resolution/frameworks/swift-objc.d.ts.map +1 -0
  527. package/dist/resolution/frameworks/swift-objc.js +252 -0
  528. package/dist/resolution/frameworks/swift-objc.js.map +1 -0
  529. package/dist/resolution/frameworks/swift.d.ts +10 -0
  530. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  531. package/dist/resolution/frameworks/swift.js +400 -0
  532. package/dist/resolution/frameworks/swift.js.map +1 -0
  533. package/dist/resolution/frameworks/terraform.d.ts +38 -0
  534. package/dist/resolution/frameworks/terraform.d.ts.map +1 -0
  535. package/dist/resolution/frameworks/terraform.js +277 -0
  536. package/dist/resolution/frameworks/terraform.js.map +1 -0
  537. package/dist/resolution/frameworks/vue.d.ts +9 -0
  538. package/dist/resolution/frameworks/vue.d.ts.map +1 -0
  539. package/dist/resolution/frameworks/vue.js +303 -0
  540. package/dist/resolution/frameworks/vue.js.map +1 -0
  541. package/dist/resolution/go-module.d.ts +26 -0
  542. package/dist/resolution/go-module.d.ts.map +1 -0
  543. package/dist/resolution/go-module.js +78 -0
  544. package/dist/resolution/go-module.js.map +1 -0
  545. package/dist/resolution/goframe-synthesizer.d.ts +29 -0
  546. package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
  547. package/dist/resolution/goframe-synthesizer.js +163 -0
  548. package/dist/resolution/goframe-synthesizer.js.map +1 -0
  549. package/dist/resolution/import-resolver.d.ts +85 -0
  550. package/dist/resolution/import-resolver.d.ts.map +1 -0
  551. package/dist/resolution/import-resolver.js +1974 -0
  552. package/dist/resolution/import-resolver.js.map +1 -0
  553. package/dist/resolution/index.d.ts +258 -0
  554. package/dist/resolution/index.d.ts.map +1 -0
  555. package/dist/resolution/index.js +1746 -0
  556. package/dist/resolution/index.js.map +1 -0
  557. package/dist/resolution/lru-cache.d.ts +24 -0
  558. package/dist/resolution/lru-cache.d.ts.map +1 -0
  559. package/dist/resolution/lru-cache.js +62 -0
  560. package/dist/resolution/lru-cache.js.map +1 -0
  561. package/dist/resolution/name-matcher.d.ts +112 -0
  562. package/dist/resolution/name-matcher.d.ts.map +1 -0
  563. package/dist/resolution/name-matcher.js +1830 -0
  564. package/dist/resolution/name-matcher.js.map +1 -0
  565. package/dist/resolution/path-aliases.d.ts +68 -0
  566. package/dist/resolution/path-aliases.d.ts.map +1 -0
  567. package/dist/resolution/path-aliases.js +238 -0
  568. package/dist/resolution/path-aliases.js.map +1 -0
  569. package/dist/resolution/strip-comments.d.ts +27 -0
  570. package/dist/resolution/strip-comments.d.ts.map +1 -0
  571. package/dist/resolution/strip-comments.js +492 -0
  572. package/dist/resolution/strip-comments.js.map +1 -0
  573. package/dist/resolution/swift-objc-bridge.d.ts +134 -0
  574. package/dist/resolution/swift-objc-bridge.d.ts.map +1 -0
  575. package/dist/resolution/swift-objc-bridge.js +256 -0
  576. package/dist/resolution/swift-objc-bridge.js.map +1 -0
  577. package/dist/resolution/types.d.ts +262 -0
  578. package/dist/resolution/types.d.ts.map +1 -0
  579. package/dist/resolution/types.js +8 -0
  580. package/dist/resolution/types.js.map +1 -0
  581. package/dist/resolution/workspace-packages.d.ts +58 -0
  582. package/dist/resolution/workspace-packages.d.ts.map +1 -0
  583. package/dist/resolution/workspace-packages.js +346 -0
  584. package/dist/resolution/workspace-packages.js.map +1 -0
  585. package/dist/search/identifier-segments.d.ts +60 -0
  586. package/dist/search/identifier-segments.d.ts.map +1 -0
  587. package/dist/search/identifier-segments.js +176 -0
  588. package/dist/search/identifier-segments.js.map +1 -0
  589. package/dist/search/query-parser.d.ts +57 -0
  590. package/dist/search/query-parser.d.ts.map +1 -0
  591. package/dist/search/query-parser.js +177 -0
  592. package/dist/search/query-parser.js.map +1 -0
  593. package/dist/search/query-utils.d.ts +87 -0
  594. package/dist/search/query-utils.d.ts.map +1 -0
  595. package/dist/search/query-utils.js +449 -0
  596. package/dist/search/query-utils.js.map +1 -0
  597. package/dist/sync/git-hooks.d.ts +45 -0
  598. package/dist/sync/git-hooks.d.ts.map +1 -0
  599. package/dist/sync/git-hooks.js +227 -0
  600. package/dist/sync/git-hooks.js.map +1 -0
  601. package/dist/sync/index.d.ts +19 -0
  602. package/dist/sync/index.d.ts.map +1 -0
  603. package/dist/sync/index.js +35 -0
  604. package/dist/sync/index.js.map +1 -0
  605. package/dist/sync/watch-policy.d.ts +48 -0
  606. package/dist/sync/watch-policy.d.ts.map +1 -0
  607. package/dist/sync/watch-policy.js +124 -0
  608. package/dist/sync/watch-policy.js.map +1 -0
  609. package/dist/sync/watcher.d.ts +355 -0
  610. package/dist/sync/watcher.d.ts.map +1 -0
  611. package/dist/sync/watcher.js +848 -0
  612. package/dist/sync/watcher.js.map +1 -0
  613. package/dist/sync/worktree.d.ts +63 -0
  614. package/dist/sync/worktree.d.ts.map +1 -0
  615. package/dist/sync/worktree.js +182 -0
  616. package/dist/sync/worktree.js.map +1 -0
  617. package/dist/telemetry/index.d.ts +143 -0
  618. package/dist/telemetry/index.d.ts.map +1 -0
  619. package/dist/telemetry/index.js +541 -0
  620. package/dist/telemetry/index.js.map +1 -0
  621. package/dist/types.d.ts +415 -0
  622. package/dist/types.d.ts.map +1 -0
  623. package/dist/types.js +91 -0
  624. package/dist/types.js.map +1 -0
  625. package/dist/ui/glyphs.d.ts +42 -0
  626. package/dist/ui/glyphs.d.ts.map +1 -0
  627. package/dist/ui/glyphs.js +78 -0
  628. package/dist/ui/glyphs.js.map +1 -0
  629. package/dist/ui/shimmer-progress.d.ts +11 -0
  630. package/dist/ui/shimmer-progress.d.ts.map +1 -0
  631. package/dist/ui/shimmer-progress.js +90 -0
  632. package/dist/ui/shimmer-progress.js.map +1 -0
  633. package/dist/ui/shimmer-worker.d.ts +2 -0
  634. package/dist/ui/shimmer-worker.d.ts.map +1 -0
  635. package/dist/ui/shimmer-worker.js +118 -0
  636. package/dist/ui/shimmer-worker.js.map +1 -0
  637. package/dist/ui/types.d.ts +17 -0
  638. package/dist/ui/types.d.ts.map +1 -0
  639. package/dist/ui/types.js +3 -0
  640. package/dist/ui/types.js.map +1 -0
  641. package/dist/upgrade/index.d.ts +164 -0
  642. package/dist/upgrade/index.d.ts.map +1 -0
  643. package/dist/upgrade/index.js +646 -0
  644. package/dist/upgrade/index.js.map +1 -0
  645. package/dist/upgrade/remove-binary.d.ts +87 -0
  646. package/dist/upgrade/remove-binary.d.ts.map +1 -0
  647. package/dist/upgrade/remove-binary.js +289 -0
  648. package/dist/upgrade/remove-binary.js.map +1 -0
  649. package/dist/upgrade/update-check.d.ts +92 -0
  650. package/dist/upgrade/update-check.d.ts.map +1 -0
  651. package/dist/upgrade/update-check.js +258 -0
  652. package/dist/upgrade/update-check.js.map +1 -0
  653. package/dist/utils.d.ts +224 -0
  654. package/dist/utils.d.ts.map +1 -0
  655. package/dist/utils.js +583 -0
  656. package/dist/utils.js.map +1 -0
  657. package/package.json +1 -1
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MyBatisExtractor = void 0;
4
+ const tree_sitter_helpers_1 = require("./tree-sitter-helpers");
5
+ /**
6
+ * MyBatisExtractor — parses MyBatis mapper XML files.
7
+ *
8
+ * MyBatis splits a DAO interface across two files: a Java interface (parsed by
9
+ * tree-sitter) declares the method, and an XML mapper file holds the SQL keyed
10
+ * by `<namespace>` (the fully-qualified Java type name) and `id` (the method
11
+ * name). Without the XML side in the graph, `trace(Controller, ...DAO.method)`
12
+ * dead-ends at the interface method — the SQL it actually runs is invisible,
13
+ * and "what does this query touch" / "where is this column written" can't be
14
+ * answered.
15
+ *
16
+ * This extractor emits one method-shaped node per `<select|insert|update|
17
+ * delete>` and per `<sql>` fragment, qualified as `<namespace>::<id>` so the
18
+ * MyBatis framework synthesizer can link the matching Java method → XML
19
+ * statement by suffix-matching qualified names. `<include refid="...">` inside
20
+ * a statement yields an unresolved reference to the SQL fragment, also keyed
21
+ * by `<namespace>::<refid>`.
22
+ *
23
+ * Both dialects are covered: MyBatis 3 `<mapper namespace="...">` and the
24
+ * legacy iBatis 2 `<sqlMap>` (namespaced, or namespace-less with `Map.stmt`
25
+ * ids, plus its extra `<statement>`/`<procedure>` verbs). Attribute values may
26
+ * use either quote style, and statements commented out with `<!-- ... -->` are
27
+ * ignored (see the constructor's comment-stripping pre-pass).
28
+ *
29
+ * Non-mapper XML (Maven `pom.xml`, Spring beans XML, `web.xml`, log4j config,
30
+ * etc.) is detected by the absence of a `<mapper namespace="...">` /
31
+ * `<sqlMap>` root and returns just a file node — we still need the file row so
32
+ * the watcher can track it, but we emit no symbols.
33
+ */
34
+ class MyBatisExtractor {
35
+ filePath;
36
+ source;
37
+ nodes = [];
38
+ edges = [];
39
+ unresolvedReferences = [];
40
+ errors = [];
41
+ lineStarts = [];
42
+ constructor(filePath, source) {
43
+ this.filePath = filePath;
44
+ // Blank out XML comments up front so commented-out statements and includes
45
+ // aren't matched by the scans below (a `<!-- <select id="old">…</select> -->`
46
+ // block must not produce a phantom node). Length-preserving — comment bytes
47
+ // become spaces, newlines are kept — so the offsets and line numbers
48
+ // computed afterwards still map to the original source. Text inside
49
+ // `<![CDATA[ … ]]>` is left intact: a literal `<!--` there is SQL data, not
50
+ // an XML comment.
51
+ this.source = MyBatisExtractor.stripXmlComments(source);
52
+ this.computeLineStarts();
53
+ }
54
+ static stripXmlComments(source) {
55
+ const out = source.split('');
56
+ const n = source.length;
57
+ let i = 0;
58
+ while (i < n) {
59
+ if (source.startsWith('<![CDATA[', i)) {
60
+ const end = source.indexOf(']]>', i + 9);
61
+ i = end >= 0 ? end + 3 : n;
62
+ continue;
63
+ }
64
+ if (source.startsWith('<!--', i)) {
65
+ const end = source.indexOf('-->', i + 4);
66
+ const stop = end >= 0 ? end + 3 : n;
67
+ for (let j = i; j < stop; j++) {
68
+ if (source.charCodeAt(j) !== 10)
69
+ out[j] = ' ';
70
+ }
71
+ i = stop;
72
+ continue;
73
+ }
74
+ i++;
75
+ }
76
+ return out.join('');
77
+ }
78
+ extract() {
79
+ const startTime = Date.now();
80
+ const fileNode = this.createFileNode();
81
+ try {
82
+ const root = this.findMapperRoot();
83
+ if (root) {
84
+ this.extractMapper(fileNode.id, root.namespace, root.dialect, root.bodyStart, root.bodyEnd);
85
+ }
86
+ }
87
+ catch (error) {
88
+ this.errors.push({
89
+ message: `MyBatis extraction error: ${error instanceof Error ? error.message : String(error)}`,
90
+ severity: 'error',
91
+ code: 'parse_error',
92
+ });
93
+ }
94
+ return {
95
+ nodes: this.nodes,
96
+ edges: this.edges,
97
+ unresolvedReferences: this.unresolvedReferences,
98
+ errors: this.errors,
99
+ durationMs: Date.now() - startTime,
100
+ };
101
+ }
102
+ createFileNode() {
103
+ const lines = this.source.split('\n');
104
+ const id = (0, tree_sitter_helpers_1.generateNodeId)(this.filePath, 'file', this.filePath, 1);
105
+ const node = {
106
+ id,
107
+ kind: 'file',
108
+ name: this.filePath.split('/').pop() || this.filePath,
109
+ qualifiedName: this.filePath,
110
+ filePath: this.filePath,
111
+ language: 'xml',
112
+ startLine: 1,
113
+ endLine: lines.length || 1,
114
+ startColumn: 0,
115
+ endColumn: lines[lines.length - 1]?.length ?? 0,
116
+ updatedAt: Date.now(),
117
+ };
118
+ this.nodes.push(node);
119
+ return node;
120
+ }
121
+ /**
122
+ * Find the mapper root and its dialect. Two shapes are recognized:
123
+ * - MyBatis 3: `<mapper namespace="com.foo.Bar">` — namespace required.
124
+ * - iBatis 2: `<sqlMap namespace="Account">`, or a namespace-less
125
+ * `<sqlMap>` whose statement ids carry the qualifier as `Map.statement`.
126
+ * Returns the namespace, the dialect, and the byte offsets of the body
127
+ * (between the opening and closing tag) so statement extraction is scoped to
128
+ * the root's contents. Either quote style is accepted for the namespace
129
+ * (`namespace='X'` is legal XML and common in older mappers).
130
+ */
131
+ findMapperRoot() {
132
+ const mapper = /<mapper\b([^>]*)>/.exec(this.source);
133
+ if (mapper) {
134
+ const nsMatch = /\bnamespace\s*=\s*(["'])([^"']+)\1/.exec(mapper[1] ?? '');
135
+ if (nsMatch) {
136
+ const bodyStart = mapper.index + mapper[0].length;
137
+ const closeIdx = this.source.indexOf('</mapper>', bodyStart);
138
+ return {
139
+ namespace: nsMatch[2],
140
+ dialect: 'mybatis',
141
+ bodyStart,
142
+ bodyEnd: closeIdx >= 0 ? closeIdx : this.source.length,
143
+ };
144
+ }
145
+ }
146
+ // iBatis 2 SqlMap. `\b` keeps `<sqlMapConfig>` (the iBatis config root,
147
+ // which holds no statements) from matching here. namespace is optional.
148
+ const sqlMap = /<sqlMap\b([^>]*)>/.exec(this.source);
149
+ if (sqlMap) {
150
+ const nsMatch = /\bnamespace\s*=\s*(["'])([^"']+)\1/.exec(sqlMap[1] ?? '');
151
+ const bodyStart = sqlMap.index + sqlMap[0].length;
152
+ const closeIdx = this.source.indexOf('</sqlMap>', bodyStart);
153
+ return {
154
+ namespace: nsMatch?.[2] ?? '',
155
+ dialect: 'ibatis',
156
+ bodyStart,
157
+ bodyEnd: closeIdx >= 0 ? closeIdx : this.source.length,
158
+ };
159
+ }
160
+ return null;
161
+ }
162
+ extractMapper(fileNodeId, namespace, dialect, bodyStart, bodyEnd) {
163
+ const body = this.source.slice(bodyStart, bodyEnd);
164
+ // Match each top-level statement-shaped element. The body may have nested
165
+ // tags (`<if>`, `<foreach>`, `<include>`), so we scan with a regex that
166
+ // pairs an opening tag to its matching close — the simple form below works
167
+ // because MyBatis/iBatis statement elements are not themselves nested.
168
+ // iBatis 2 adds the generic `<statement>` and `<procedure>` on top of the
169
+ // MyBatis 3 verbs; gating by dialect keeps MyBatis extraction unchanged.
170
+ const verbs = dialect === 'ibatis'
171
+ ? 'select|insert|update|delete|sql|statement|procedure'
172
+ : 'select|insert|update|delete|sql';
173
+ const stmtRegex = new RegExp(`<(${verbs})\\b([^>]*)>([\\s\\S]*?)</\\1>`, 'g');
174
+ let m;
175
+ while ((m = stmtRegex.exec(body)) !== null) {
176
+ const elemType = m[1];
177
+ const attrs = m[2] ?? '';
178
+ const elemBody = m[3] ?? '';
179
+ // Accept either quote style (`(["'])…\1`). The identifier-shaped MyBatis
180
+ // attributes matched here and below (namespace/id/refid/resultType/
181
+ // parameterType) are Java FQNs, method names, or type aliases and never
182
+ // contain a quote character, so excluding both quotes from the value is safe.
183
+ const idMatch = /\bid\s*=\s*(["'])([^"']+)\1/.exec(attrs);
184
+ if (!idMatch)
185
+ continue;
186
+ const id = idMatch[2];
187
+ const absoluteIndex = bodyStart + m.index;
188
+ const startLine = this.getLineNumber(absoluteIndex);
189
+ const endLine = this.getLineNumber(absoluteIndex + m[0].length);
190
+ const { qualifiedName: qualified, name } = this.qualifyStatement(namespace, id);
191
+ const isSqlFragment = elemType === 'sql';
192
+ // The id-hash folds in the statement's byte offset (unique per statement
193
+ // in the file), not just the start line: two statements sharing a
194
+ // qualifiedName AND a start line — e.g. a vendor-split `databaseId` pair
195
+ // (`<select id="x" databaseId="oracle">…</select><select id="x"
196
+ // databaseId="mysql">…`) written on one line — would otherwise hash to
197
+ // the same node id, and `INSERT OR REPLACE INTO nodes` (id is the PRIMARY
198
+ // KEY) would silently drop one. qualifiedName and startLine are stored
199
+ // unchanged, so the Java↔XML suffix-match bridge is untouched.
200
+ const nodeId = (0, tree_sitter_helpers_1.generateNodeId)(this.filePath, 'method', qualified, absoluteIndex);
201
+ const node = {
202
+ id: nodeId,
203
+ kind: 'method',
204
+ name,
205
+ qualifiedName: qualified,
206
+ filePath: this.filePath,
207
+ language: 'xml',
208
+ signature: this.buildSignature(elemType, attrs, isSqlFragment),
209
+ startLine,
210
+ endLine,
211
+ startColumn: 0,
212
+ endColumn: 0,
213
+ docstring: this.previewSql(elemBody),
214
+ updatedAt: Date.now(),
215
+ };
216
+ this.nodes.push(node);
217
+ this.edges.push({ source: fileNodeId, target: nodeId, kind: 'contains' });
218
+ // <include refid="X"/> → reference to the SQL fragment in this mapper
219
+ // (or in another mapper, when the refid is qualified — `ns.X`).
220
+ const includeRegex = /<include\b[^>]*\brefid\s*=\s*(["'])([^"']+)\1/g;
221
+ let inc;
222
+ while ((inc = includeRegex.exec(elemBody)) !== null) {
223
+ const refid = inc[2];
224
+ const refQualified = refid.includes('.')
225
+ ? refid.replace(/\./g, '::')
226
+ : namespace
227
+ ? `${namespace}::${refid}`
228
+ : refid;
229
+ const includeOffset = absoluteIndex + (m[0].length - m[3].length - `</${elemType}>`.length) + inc.index;
230
+ const line = this.getLineNumber(includeOffset);
231
+ this.unresolvedReferences.push({
232
+ fromNodeId: nodeId,
233
+ referenceName: refQualified,
234
+ referenceKind: 'references',
235
+ line,
236
+ column: 0,
237
+ });
238
+ }
239
+ }
240
+ }
241
+ buildSignature(elemType, attrs, isSqlFragment) {
242
+ if (isSqlFragment)
243
+ return '<sql>';
244
+ const verb = elemType.toUpperCase();
245
+ const result = /\bresultType\s*=\s*(["'])([^"']+)\1/.exec(attrs)?.[2];
246
+ const param = /\bparameterType\s*=\s*(["'])([^"']+)\1/.exec(attrs)?.[2];
247
+ // A vendor-split statement carries `databaseId`; surface it so the two
248
+ // otherwise-identical `<namespace>::<id>` nodes are distinguishable.
249
+ const dbId = /\bdatabaseId\s*=\s*(["'])([^"']+)\1/.exec(attrs)?.[2];
250
+ const parts = [verb];
251
+ if (param)
252
+ parts.push(`param=${param}`);
253
+ if (result)
254
+ parts.push(`result=${result}`);
255
+ if (dbId)
256
+ parts.push(`databaseId=${dbId}`);
257
+ return parts.join(' ');
258
+ }
259
+ /**
260
+ * Build the `<namespace>::<id>` qualified name the MyBatis synthesizer
261
+ * suffix-matches against a Java `<Class>::<method>`, and the display name.
262
+ * For a namespace-less iBatis `<sqlMap>`, the statement id carries the
263
+ * qualifier as `Map.statement`, so split on the last dot to reach the same
264
+ * shape (`Account.getById` → `Account::getById`, name `getById`).
265
+ */
266
+ qualifyStatement(namespace, id) {
267
+ if (namespace)
268
+ return { qualifiedName: `${namespace}::${id}`, name: id };
269
+ const dot = id.lastIndexOf('.');
270
+ if (dot >= 0) {
271
+ return { qualifiedName: `${id.slice(0, dot)}::${id.slice(dot + 1)}`, name: id.slice(dot + 1) };
272
+ }
273
+ return { qualifiedName: id, name: id };
274
+ }
275
+ previewSql(body) {
276
+ return body.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim().slice(0, 200);
277
+ }
278
+ computeLineStarts() {
279
+ this.lineStarts = [0];
280
+ for (let i = 0; i < this.source.length; i++) {
281
+ if (this.source.charCodeAt(i) === 10)
282
+ this.lineStarts.push(i + 1);
283
+ }
284
+ }
285
+ getLineNumber(offset) {
286
+ // Binary search
287
+ let lo = 0;
288
+ let hi = this.lineStarts.length - 1;
289
+ while (lo < hi) {
290
+ const mid = (lo + hi + 1) >>> 1;
291
+ if (this.lineStarts[mid] <= offset)
292
+ lo = mid;
293
+ else
294
+ hi = mid - 1;
295
+ }
296
+ return lo + 1;
297
+ }
298
+ }
299
+ exports.MyBatisExtractor = MyBatisExtractor;
300
+ //# sourceMappingURL=mybatis-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mybatis-extractor.js","sourceRoot":"","sources":["../../src/extraction/mybatis-extractor.ts"],"names":[],"mappings":";;;AACA,+DAAuD;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAa,gBAAgB;IACnB,QAAQ,CAAS;IACjB,MAAM,CAAS;IACf,KAAK,GAAW,EAAE,CAAC;IACnB,KAAK,GAAW,EAAE,CAAC;IACnB,oBAAoB,GAA0B,EAAE,CAAC;IACjD,MAAM,GAAsB,EAAE,CAAC;IAC/B,UAAU,GAAa,EAAE,CAAC;IAElC,YAAY,QAAgB,EAAE,MAAc;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,2EAA2E;QAC3E,8EAA8E;QAC9E,4EAA4E;QAC5E,qEAAqE;QACrE,oEAAoE;QACpE,4EAA4E;QAC5E,kBAAkB;QAClB,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,MAAc;QAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE;wBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChD,CAAC;gBACD,CAAC,GAAG,IAAI,CAAC;gBACT,SAAS;YACX,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,OAAO;QACL,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACnC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC9F,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAA,oCAAc,EAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAS;YACjB,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ;YACrD,aAAa,EAAE,IAAI,CAAC,QAAQ;YAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;YAC1B,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC;YAC/C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;OASG;IACK,cAAc;QAGpB,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,oCAAoC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3E,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;gBAC7D,OAAO;oBACL,SAAS,EAAE,OAAO,CAAC,CAAC,CAAE;oBACtB,OAAO,EAAE,SAAS;oBAClB,SAAS;oBACT,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;iBACvD,CAAC;YACJ,CAAC;QACH,CAAC;QACD,wEAAwE;QACxE,wEAAwE;QACxE,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,oCAAoC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3E,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC7D,OAAO;gBACL,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC7B,OAAO,EAAE,QAAQ;gBACjB,SAAS;gBACT,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;aACvD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CACnB,UAAkB,EAClB,SAAiB,EACjB,OAA6B,EAC7B,SAAiB,EACjB,OAAe;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,0EAA0E;QAC1E,wEAAwE;QACxE,2EAA2E;QAC3E,uEAAuE;QACvE,0EAA0E;QAC1E,yEAAyE;QACzE,MAAM,KAAK,GACT,OAAO,KAAK,QAAQ;YAClB,CAAC,CAAC,qDAAqD;YACvD,CAAC,CAAC,iCAAiC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,KAAK,KAAK,gCAAgC,EAAE,GAAG,CAAC,CAAC;QAC9E,IAAI,CAAyB,CAAC;QAC9B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,yEAAyE;YACzE,oEAAoE;YACpE,wEAAwE;YACxE,8EAA8E;YAC9E,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAChE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAChF,MAAM,aAAa,GAAG,QAAQ,KAAK,KAAK,CAAC;YACzC,yEAAyE;YACzE,kEAAkE;YAClE,yEAAyE;YACzE,gEAAgE;YAChE,uEAAuE;YACvE,0EAA0E;YAC1E,uEAAuE;YACvE,+DAA+D;YAC/D,MAAM,MAAM,GAAG,IAAA,oCAAc,EAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;YACjF,MAAM,IAAI,GAAS;gBACjB,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,QAAQ;gBACd,IAAI;gBACJ,aAAa,EAAE,SAAS;gBACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC;gBAC9D,SAAS;gBACT,OAAO;gBACP,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACpC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAE1E,sEAAsE;YACtE,gEAAgE;YAChE,MAAM,YAAY,GAAG,gDAAgD,CAAC;YACtE,IAAI,GAA2B,CAAC;YAChC,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;gBACtB,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACtC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;oBAC5B,CAAC,CAAC,SAAS;wBACT,CAAC,CAAC,GAAG,SAAS,KAAK,KAAK,EAAE;wBAC1B,CAAC,CAAC,KAAK,CAAC;gBACZ,MAAM,aAAa,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,KAAK,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;gBACzG,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;oBAC7B,UAAU,EAAE,MAAM;oBAClB,aAAa,EAAE,YAAY;oBAC3B,aAAa,EAAE,YAAY;oBAC3B,IAAI;oBACJ,MAAM,EAAE,CAAC;iBACV,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,QAAgB,EAAE,KAAa,EAAE,aAAsB;QAC5E,IAAI,aAAa;YAAE,OAAO,OAAO,CAAC;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,wCAAwC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxE,uEAAuE;QACvE,qEAAqE;QACrE,MAAM,IAAI,GAAG,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QACxC,IAAI,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;QAC3C,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACK,gBAAgB,CAAC,SAAiB,EAAE,EAAU;QACpD,IAAI,SAAS;YAAE,OAAO,EAAE,aAAa,EAAE,GAAG,SAAS,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACzE,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjF,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,MAAc;QAClC,gBAAgB;QAChB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAE,IAAI,MAAM;gBAAE,EAAE,GAAG,GAAG,CAAC;;gBACzC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,EAAE,GAAG,CAAC,CAAC;IAChB,CAAC;CACF;AArRD,4CAqRC"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Parse worker pool — runs tree-sitter parsing across N worker threads so a full
3
+ * `codegraph index` uses every core instead of pinning one.
4
+ *
5
+ * Why this exists: `ExtractionOrchestrator.indexAll()` already reads files in
6
+ * parallel, but it parsed them through a SINGLE worker thread, so on an
7
+ * N-core machine indexing a large repo used one core and left the rest idle
8
+ * (issue #1015, the parse-time half of #320). Spreading the parse calls across a
9
+ * pool of workers — each its own tree-sitter WASM heap — restores multi-core
10
+ * throughput. SQLite storage stays on the main thread (it isn't thread-safe), so
11
+ * only the CPU-bound parse step is parallelised; results are stored as they
12
+ * arrive, in whatever order they finish.
13
+ *
14
+ * Design mirrors {@link ../mcp/query-pool} (idle-list dispatch, lazy growth,
15
+ * throttled cold-starts, crash recovery), with parse-specific behaviour:
16
+ * - per-worker recycle: WASM linear memory grows but never shrinks, so each
17
+ * worker is torn down and replaced after `recycleInterval` parses to reclaim
18
+ * its heap — the same reason the old single worker recycled.
19
+ * - reject, don't retry: a parse that crashes or times out its worker REJECTS
20
+ * (with a message the orchestrator's retry pass recognises) rather than being
21
+ * silently requeued — the orchestrator owns the smarter two-stage retry
22
+ * (fresh worker, then comment-stripped) on a clean WASM heap.
23
+ * - a size-1 pool reproduces the old single-worker path exactly, which is the
24
+ * conservative rollback: set `CODEGRAPH_PARSE_WORKERS=1`.
25
+ *
26
+ * Memory: peak scales with pool size (≈ size × a worker's pre-recycle heap), so
27
+ * the default is capped and the env var lets constrained machines dial it down.
28
+ */
29
+ import type { Language, ExtractionResult } from '../types';
30
+ /**
31
+ * Minimal worker surface the pool drives — satisfied by a real `worker_threads`
32
+ * Worker. Abstracted so tests can inject a fake worker and exercise the pool's
33
+ * queue / growth / recycle / crash-recovery logic without spawning threads or a
34
+ * built `dist/`.
35
+ */
36
+ export interface ParsePoolWorker {
37
+ postMessage(msg: unknown): void;
38
+ terminate(): Promise<number> | void;
39
+ on(event: 'message', cb: (m: unknown) => void): void;
40
+ on(event: 'error', cb: (e: Error) => void): void;
41
+ on(event: 'exit', cb: (code: number) => void): void;
42
+ }
43
+ /** A single file to parse. `language` is resolved on the main thread (it holds
44
+ * the project's codegraph.json extension overrides) and handed to the worker. */
45
+ export interface ParseTask {
46
+ filePath: string;
47
+ content: string;
48
+ language: Language;
49
+ frameworkNames?: string[];
50
+ }
51
+ /**
52
+ * Resolve the pool size from the `CODEGRAPH_PARSE_WORKERS` override and the
53
+ * machine's core count.
54
+ * - explicit `0` or `1` → 1 worker (the old single-worker path; the rollback).
55
+ * - explicit `N` → N, clamped to [1, 16].
56
+ * - unset / blank / non-numeric → `clamp(cores - 1, 1, 8)` (leave a core for
57
+ * the main thread + UI; never zero — parsing always needs a worker).
58
+ */
59
+ /**
60
+ * Resolve the base per-parse timeout from the `CODEGRAPH_PARSE_TIMEOUT_MS`
61
+ * override. Slow storage (HDD, network folders) can need a larger budget; a
62
+ * non-numeric / non-positive value falls back to the default (10s).
63
+ */
64
+ export declare function resolveParseTimeoutMs(envVal: string | undefined): number;
65
+ export declare function resolveParsePoolSize(envVal: string | undefined, cpuCount: number): number;
66
+ export interface ParseWorkerPoolOptions {
67
+ /** Languages to load grammars for in every worker at spawn. */
68
+ languages: Language[];
69
+ /** Number of worker threads (≥1). Clamp the resolved value before passing. */
70
+ size: number;
71
+ /** Compiled `parse-worker.js` path. Required unless `createWorker` is given. */
72
+ workerScriptPath?: string;
73
+ /** Parses per worker before recycle. Default 250. */
74
+ recycleInterval?: number;
75
+ /** Base per-parse timeout (ms); scaled by file size per parse. Default 10s. */
76
+ parseTimeoutMs?: number;
77
+ /** Worker factory (tests inject a fake). Defaults to a real `worker_threads` Worker. */
78
+ createWorker?: () => ParsePoolWorker;
79
+ /** Optional verbose logger (the orchestrator's `[worker] …` logger). */
80
+ log?: (msg: string) => void;
81
+ /**
82
+ * Pre-read grammar WASM bytes keyed by language, forwarded to every worker's
83
+ * `load-grammars` message so a spawn/respawn loads grammars from memory
84
+ * instead of re-reading them from disk — on slow storage each respawn's
85
+ * grammar re-read otherwise amplifies the very I/O contention that caused
86
+ * the respawn (issue #1231). Best-effort: a missing language falls back to
87
+ * the worker's own disk read.
88
+ */
89
+ grammarBuffers?: Record<string, Uint8Array>;
90
+ }
91
+ export declare class ParseWorkerPool {
92
+ private idle;
93
+ private queue;
94
+ private inflight;
95
+ private workers;
96
+ private pending;
97
+ private parseCounts;
98
+ private nextId;
99
+ private totalCrashes;
100
+ private destroyed;
101
+ private readonly languages;
102
+ private readonly maxSize;
103
+ private readonly recycleInterval;
104
+ private readonly parseTimeoutMs;
105
+ private readonly createWorker;
106
+ private readonly log;
107
+ private readonly grammarBuffers?;
108
+ constructor(opts: ParseWorkerPoolOptions);
109
+ /** Pool size cap (for logging). */
110
+ get size(): number;
111
+ /** Live worker count (for tests). */
112
+ get liveWorkers(): number;
113
+ /** False once the crash budget is exhausted (or after destroy). */
114
+ get healthy(): boolean;
115
+ /**
116
+ * Parse one file on the pool. Resolves with the extraction result, or REJECTS
117
+ * if the parse times out or its worker crashes — the caller records the error
118
+ * and (for worker-exit/OOM/timeout rejections) re-attempts in its retry pass.
119
+ */
120
+ requestParse(task: ParseTask): Promise<ExtractionResult>;
121
+ private spawnOne;
122
+ private onMessage;
123
+ /** A worker died (crash hook / OOM exit / spawn error). Reject its in-flight
124
+ * parse so the caller's retry pass can re-attempt it, then respawn. */
125
+ private onWorkerGone;
126
+ /** Tear down a worker that has hit its recycle threshold and replace it. Not a
127
+ * crash, so it doesn't count against the budget. */
128
+ private recycle;
129
+ private removeWorker;
130
+ private dispatch;
131
+ /**
132
+ * The base timer fired with no result processed yet. Do NOT kill or settle:
133
+ * the timer firing doesn't prove the parse is still running — after a long
134
+ * synchronous main-thread stretch Node services the timers phase before the
135
+ * poll phase, so an already-delivered `parse-result` is still queued behind
136
+ * this callback. Mark the job late (onMessage accepts a result that shows up)
137
+ * and arm the hard-kill backstop for workers that are genuinely hung.
138
+ */
139
+ private onTimeout;
140
+ /** No result after the full hard-kill window — the worker really is hung. */
141
+ private onHardTimeout;
142
+ private drain;
143
+ private settle;
144
+ /**
145
+ * Recycle every idle worker now (fresh WASM heaps). The orchestrator calls
146
+ * this before its retry pass so crash-on-memory files get the cleanest heap.
147
+ */
148
+ recycleAll(): void;
149
+ /** Terminate all workers and reject any outstanding parses. */
150
+ destroy(): Promise<void>;
151
+ }
152
+ //# sourceMappingURL=parse-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-pool.d.ts","sourceRoot":"","sources":["../../src/extraction/parse-pool.ts"],"names":[],"mappings":"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"}