scip-query 0.10.0 → 0.10.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 (263) hide show
  1. package/README.md +115 -58
  2. package/dist/augment-vue-worker.js +1 -1
  3. package/dist/chunk-23FVN4Y5.js +2 -0
  4. package/dist/chunk-24PFLKFK.js +2 -0
  5. package/dist/{chunk-A2VTV2QB.js → chunk-27KPKLRJ.js} +2 -2
  6. package/dist/chunk-2NLK4INB.js +2 -0
  7. package/dist/{chunk-6K2JQ2VI.js → chunk-2XKAMW6B.js} +2 -2
  8. package/dist/{chunk-4DAPXOWD.js → chunk-332L7SRO.js} +2 -2
  9. package/dist/chunk-44JOJLMO.js +38 -0
  10. package/dist/{chunk-MCW36F2D.js → chunk-4EAANIWC.js} +2 -2
  11. package/dist/{chunk-FVIKFWUL.js → chunk-4N7LFYSD.js} +2 -2
  12. package/dist/{chunk-4MHT7LKP.js → chunk-5ALI77D7.js} +2 -2
  13. package/dist/{chunk-V76FCF5F.js → chunk-5BZOSICN.js} +2 -2
  14. package/dist/{chunk-IVAIPXNO.js → chunk-5D3BT4B4.js} +2 -2
  15. package/dist/{chunk-ADRYSISR.js → chunk-5HDYAOSF.js} +2 -2
  16. package/dist/{chunk-IC3RC3KJ.js → chunk-5IDEQEM4.js} +2 -2
  17. package/dist/{chunk-NC4IUW25.js → chunk-5VB3WU7K.js} +2 -2
  18. package/dist/chunk-623UQCVG.js +2 -0
  19. package/dist/chunk-62NMBOA5.js +2 -0
  20. package/dist/chunk-64LH2QUP.js +62 -0
  21. package/dist/{chunk-PG3ZI5IH.js → chunk-65UWNXEH.js} +1 -1
  22. package/dist/{chunk-OLCKSG3Y.js → chunk-6TWFT4Y5.js} +2 -2
  23. package/dist/chunk-6U4EODW3.js +2 -0
  24. package/dist/{chunk-MN75T4UB.js → chunk-6YKJSETN.js} +2 -2
  25. package/dist/chunk-A2GVUCZR.js +8 -0
  26. package/dist/{chunk-WEJYUS5O.js → chunk-ADKQX2OY.js} +2 -2
  27. package/dist/{chunk-YWZBKYLS.js → chunk-ADTG377O.js} +2 -2
  28. package/dist/chunk-ATGRITZP.js +20 -0
  29. package/dist/chunk-B3HMRQDA.js +2 -0
  30. package/dist/chunk-B75HZHUP.js +2 -0
  31. package/dist/chunk-BGBBVSH4.js +2 -0
  32. package/dist/chunk-BJ7OHKB5.js +2 -0
  33. package/dist/{chunk-VZRILF2Z.js → chunk-CCB45WDY.js} +2 -2
  34. package/dist/chunk-CFLYMEUS.js +2 -0
  35. package/dist/{chunk-ISCKLDSS.js → chunk-CMGOXDVP.js} +3 -3
  36. package/dist/chunk-DBIG4QAJ.js +2 -0
  37. package/dist/{chunk-4JQFTUKD.js → chunk-DMLPJ75B.js} +2 -2
  38. package/dist/chunk-DRU74YUM.js +71 -0
  39. package/dist/chunk-DTERBKUE.js +7 -0
  40. package/dist/{chunk-4HTJZC6G.js → chunk-E55WCTLH.js} +2 -2
  41. package/dist/{chunk-CMXFASVD.js → chunk-F4PKYBQB.js} +2 -2
  42. package/dist/{chunk-L2KFPRMA.js → chunk-FVX4GEAC.js} +2 -2
  43. package/dist/{chunk-AP5GTKSG.js → chunk-GTNPPGZJ.js} +2 -2
  44. package/dist/{chunk-ZZ2W5P3D.js → chunk-GZXXBDJA.js} +2 -2
  45. package/dist/chunk-HCQ7J2N5.js +3 -0
  46. package/dist/chunk-HQHFMPLJ.js +2 -0
  47. package/dist/{chunk-SCEMECW7.js → chunk-I6PTB2CM.js} +2 -2
  48. package/dist/{chunk-772YYL6I.js → chunk-IJYWCB57.js} +2 -2
  49. package/dist/chunk-JTRY2YRJ.js +2 -0
  50. package/dist/chunk-L77GXANO.js +6 -0
  51. package/dist/{chunk-R6XDPWJA.js → chunk-LT6GJ27X.js} +2 -2
  52. package/dist/chunk-LUBKUISI.js +2 -0
  53. package/dist/{chunk-ZGIK464P.js → chunk-LVYXX7ZW.js} +2 -2
  54. package/dist/{chunk-2WEH5QHC.js → chunk-LWPEZ4FP.js} +2 -2
  55. package/dist/chunk-LWWZBABT.js +2 -0
  56. package/dist/chunk-LXM7AHQG.js +4 -0
  57. package/dist/chunk-LY6NRJPJ.js +2 -0
  58. package/dist/chunk-LYS4SMAQ.js +2 -0
  59. package/dist/{chunk-BNW3Q24R.js → chunk-MESUJJVQ.js} +2 -2
  60. package/dist/{chunk-Y5H7TBVE.js → chunk-MHAQXOZY.js} +2 -2
  61. package/dist/chunk-N2T2GPYQ.js +2 -0
  62. package/dist/chunk-OB6PEVI3.js +2 -0
  63. package/dist/chunk-PNN3D4BE.js +2 -0
  64. package/dist/{chunk-QJWN6LA5.js → chunk-PV4CEDIL.js} +2 -2
  65. package/dist/chunk-QH5GTVVB.js +3 -0
  66. package/dist/{chunk-ZOT3WUZW.js → chunk-QOFKVNFE.js} +2 -2
  67. package/dist/chunk-QUKZ77A6.js +4 -0
  68. package/dist/chunk-R42LZMLX.js +2 -0
  69. package/dist/{chunk-2BMFRBV6.js → chunk-R7S3UCDR.js} +2 -2
  70. package/dist/chunk-RGDUIMNE.js +3 -0
  71. package/dist/{chunk-BGRPMGTD.js → chunk-RNLUCQJB.js} +2 -2
  72. package/dist/chunk-RYBMW2EN.js +2 -0
  73. package/dist/{chunk-VGBSY6N7.js → chunk-SA6B3EGD.js} +2 -2
  74. package/dist/chunk-T67R7V5I.js +2 -0
  75. package/dist/chunk-TMS4JPWY.js +3 -0
  76. package/dist/chunk-TTGWDUJ4.js +5 -0
  77. package/dist/chunk-TUAPDKBI.js +2 -0
  78. package/dist/chunk-UVK3SL4Z.js +2 -0
  79. package/dist/chunk-W3PQRAI4.js +2 -0
  80. package/dist/{chunk-PRVDXGSK.js → chunk-WWFBDM5Y.js} +2 -2
  81. package/dist/{chunk-AQYBOORI.js → chunk-WZVTADY7.js} +1 -1
  82. package/dist/chunk-XGGTESMN.js +2 -0
  83. package/dist/{chunk-NGI4V4AB.js → chunk-Y33GRQK6.js} +2 -2
  84. package/dist/{chunk-QKO474FG.js → chunk-YIE5FZAF.js} +2 -2
  85. package/dist/chunk-YISMWW66.js +7 -0
  86. package/dist/chunk-YVQUQIBM.js +5 -0
  87. package/dist/{chunk-6DEX3XP6.js → chunk-YYCQQBMG.js} +2 -2
  88. package/dist/cli.js +221 -233
  89. package/dist/{config-types-CGIeLEpY.d.ts → config-types-Bok4jrO3.d.ts} +29 -1
  90. package/dist/{db-DdTPetj5.d.ts → db-BkFlkzI3.d.ts} +1 -1
  91. package/dist/{health-C6r2VgpA.d.ts → health-CbGMdRPg.d.ts} +42 -3
  92. package/dist/index.d.ts +7 -6
  93. package/dist/index.js +1 -1
  94. package/dist/postinstall.js +2 -2
  95. package/dist/queries/affected.d.ts +2 -2
  96. package/dist/queries/affected.js +1 -1
  97. package/dist/queries/bottlenecks.d.ts +2 -2
  98. package/dist/queries/bottlenecks.js +1 -1
  99. package/dist/queries/by-kind.d.ts +2 -2
  100. package/dist/queries/by-kind.js +1 -1
  101. package/dist/queries/call-graph.d.ts +2 -2
  102. package/dist/queries/call-graph.js +1 -1
  103. package/dist/queries/change-surface.d.ts +2 -2
  104. package/dist/queries/change-surface.js +1 -1
  105. package/dist/queries/cleanup-plan.d.ts +2 -2
  106. package/dist/queries/cleanup-plan.js +1 -1
  107. package/dist/queries/co-change.d.ts +5 -4
  108. package/dist/queries/co-change.js +1 -1
  109. package/dist/queries/code.d.ts +2 -2
  110. package/dist/queries/code.js +1 -1
  111. package/dist/queries/complexity-hotspots.d.ts +2 -2
  112. package/dist/queries/complexity-hotspots.js +1 -1
  113. package/dist/queries/complexity.d.ts +2 -2
  114. package/dist/queries/complexity.js +1 -1
  115. package/dist/queries/convergence.d.ts +2 -2
  116. package/dist/queries/convergence.js +1 -1
  117. package/dist/queries/coupling.d.ts +2 -2
  118. package/dist/queries/coupling.js +1 -1
  119. package/dist/queries/cycles.d.ts +2 -2
  120. package/dist/queries/cycles.js +1 -1
  121. package/dist/queries/dataflow.d.ts +2 -2
  122. package/dist/queries/dataflow.js +1 -1
  123. package/dist/queries/dead.d.ts +2 -2
  124. package/dist/queries/dead.js +1 -1
  125. package/dist/queries/deep-chains.d.ts +2 -2
  126. package/dist/queries/deep-chains.js +1 -1
  127. package/dist/queries/deps.d.ts +2 -2
  128. package/dist/queries/deps.js +1 -1
  129. package/dist/queries/diff-gate.d.ts +21 -3
  130. package/dist/queries/diff-gate.js +1 -1
  131. package/dist/queries/diff-impact.d.ts +20 -4
  132. package/dist/queries/diff-impact.js +1 -1
  133. package/dist/queries/doc-drift.d.ts +2 -2
  134. package/dist/queries/doc-drift.js +1 -1
  135. package/dist/queries/drift.d.ts +2 -2
  136. package/dist/queries/drift.js +1 -1
  137. package/dist/queries/extract-candidates.d.ts +2 -2
  138. package/dist/queries/extract-candidates.js +1 -1
  139. package/dist/queries/fan.d.ts +2 -2
  140. package/dist/queries/fan.js +1 -1
  141. package/dist/queries/files.d.ts +2 -2
  142. package/dist/queries/files.js +1 -1
  143. package/dist/queries/health.d.ts +3 -3
  144. package/dist/queries/health.js +1 -1
  145. package/dist/queries/hierarchy.d.ts +2 -2
  146. package/dist/queries/hierarchy.js +1 -1
  147. package/dist/queries/hotspots.d.ts +2 -2
  148. package/dist/queries/hotspots.js +1 -1
  149. package/dist/queries/imports.d.ts +2 -2
  150. package/dist/queries/imports.js +1 -1
  151. package/dist/queries/incomplete-migration.d.ts +4 -2
  152. package/dist/queries/incomplete-migration.js +1 -1
  153. package/dist/queries/index.d.ts +10 -4
  154. package/dist/queries/index.js +1 -1
  155. package/dist/queries/isolated.d.ts +2 -2
  156. package/dist/queries/isolated.js +1 -1
  157. package/dist/queries/members.d.ts +2 -2
  158. package/dist/queries/members.js +1 -1
  159. package/dist/queries/methods.d.ts +2 -2
  160. package/dist/queries/methods.js +1 -1
  161. package/dist/queries/outline.d.ts +2 -2
  162. package/dist/queries/outline.js +1 -1
  163. package/dist/queries/passthrough-candidates.d.ts +2 -2
  164. package/dist/queries/passthrough-candidates.js +1 -1
  165. package/dist/queries/plan-context.d.ts +2 -2
  166. package/dist/queries/plan-context.js +1 -1
  167. package/dist/queries/react-component-duplicates.d.ts +31 -0
  168. package/dist/queries/react-component-duplicates.js +2 -0
  169. package/dist/queries/react-hook-candidates.d.ts +34 -0
  170. package/dist/queries/react-hook-candidates.js +2 -0
  171. package/dist/queries/react-large-component-pressure.d.ts +28 -0
  172. package/dist/queries/react-large-component-pressure.js +2 -0
  173. package/dist/queries/recent-duplicates.d.ts +10 -3
  174. package/dist/queries/recent-duplicates.js +1 -1
  175. package/dist/queries/redundant-reexports.d.ts +2 -2
  176. package/dist/queries/redundant-reexports.js +1 -1
  177. package/dist/queries/refs.d.ts +2 -2
  178. package/dist/queries/refs.js +1 -1
  179. package/dist/queries/self-audit.d.ts +2 -2
  180. package/dist/queries/self-audit.js +1 -1
  181. package/dist/queries/similar-chains.d.ts +2 -2
  182. package/dist/queries/similar-chains.js +1 -1
  183. package/dist/queries/similar-files.d.ts +2 -2
  184. package/dist/queries/similar-files.js +1 -1
  185. package/dist/queries/similar-signatures.d.ts +2 -2
  186. package/dist/queries/similar-signatures.js +1 -1
  187. package/dist/queries/similar.d.ts +8 -3
  188. package/dist/queries/similar.js +1 -1
  189. package/dist/queries/slice.d.ts +2 -2
  190. package/dist/queries/slice.js +1 -1
  191. package/dist/queries/stale-abstractions.d.ts +2 -2
  192. package/dist/queries/stale-abstractions.js +1 -1
  193. package/dist/queries/stats.d.ts +2 -2
  194. package/dist/queries/stats.js +1 -1
  195. package/dist/queries/surface.d.ts +2 -2
  196. package/dist/queries/surface.js +1 -1
  197. package/dist/queries/symbols.d.ts +2 -2
  198. package/dist/queries/symbols.js +1 -1
  199. package/dist/queries/system.d.ts +2 -2
  200. package/dist/queries/system.js +1 -1
  201. package/dist/queries/trace.d.ts +2 -2
  202. package/dist/queries/trace.js +1 -1
  203. package/dist/queries/unused-params.d.ts +2 -2
  204. package/dist/queries/unused-params.js +1 -1
  205. package/dist/queries/vue-component-duplicates.d.ts +35 -0
  206. package/dist/queries/vue-component-duplicates.js +2 -0
  207. package/dist/queries/vue-composable-candidates.d.ts +34 -0
  208. package/dist/queries/vue-composable-candidates.js +2 -0
  209. package/dist/queries/vue-large-view-pressure.d.ts +31 -0
  210. package/dist/queries/vue-large-view-pressure.js +2 -0
  211. package/dist/queries/wrapper-candidates.d.ts +2 -2
  212. package/dist/queries/wrapper-candidates.js +1 -1
  213. package/dist/reindex-worker.js +10 -10
  214. package/dist/reindex.d.ts +1 -1
  215. package/dist/reindex.js +22 -22
  216. package/dist/runtime.d.ts +1 -1
  217. package/dist/runtime.js +2 -2
  218. package/docs/AGENT_GUIDE.md +353 -0
  219. package/docs/AI_FAILURE_MODES.md +278 -0
  220. package/docs/API.md +40 -0
  221. package/docs/COMMAND_REFERENCE.md +130 -0
  222. package/docs/DETECTOR_GUIDE.md +119 -0
  223. package/docs/accuracy-hardening-goal.md +54 -0
  224. package/docs/assets/scip-query-logo-dark.svg +21 -0
  225. package/docs/assets/scip-query-logo.svg +24 -0
  226. package/package.json +31 -3
  227. package/skills/scip-maintainability/SKILL.md +24 -3
  228. package/skills/scip-query/SKILL.md +2 -1
  229. package/skills/scip-react-maintainability/SKILL.md +114 -0
  230. package/skills/scip-vue-maintainability/SKILL.md +130 -0
  231. package/dist/chunk-5OHZEO3U.js +0 -3
  232. package/dist/chunk-5QJIEYFB.js +0 -34
  233. package/dist/chunk-6IGXZZQ4.js +0 -4
  234. package/dist/chunk-6QVCPUK6.js +0 -2
  235. package/dist/chunk-6VL4AIEO.js +0 -8
  236. package/dist/chunk-AI2ECT7L.js +0 -2
  237. package/dist/chunk-BUAC4Q4G.js +0 -2
  238. package/dist/chunk-BZ6LCGE6.js +0 -2
  239. package/dist/chunk-CO3AL7NZ.js +0 -2
  240. package/dist/chunk-FVVT7GV6.js +0 -4
  241. package/dist/chunk-HXXRN77A.js +0 -2
  242. package/dist/chunk-ITHQJZTG.js +0 -2
  243. package/dist/chunk-IW7ASGVF.js +0 -2
  244. package/dist/chunk-JODYQDE4.js +0 -2
  245. package/dist/chunk-MX6F756F.js +0 -2
  246. package/dist/chunk-O6KCZPJQ.js +0 -62
  247. package/dist/chunk-OAI5GEIN.js +0 -6
  248. package/dist/chunk-OH5HIAID.js +0 -4
  249. package/dist/chunk-OXKEUWMJ.js +0 -2
  250. package/dist/chunk-PBGTMPJ7.js +0 -2
  251. package/dist/chunk-QYKKTYBN.js +0 -6
  252. package/dist/chunk-R3G6ERW7.js +0 -7
  253. package/dist/chunk-SJR4SB7B.js +0 -2
  254. package/dist/chunk-SYKCO25G.js +0 -16
  255. package/dist/chunk-T22X7WT6.js +0 -2
  256. package/dist/chunk-TH4JVC34.js +0 -71
  257. package/dist/chunk-VDY4HYNK.js +0 -2
  258. package/dist/chunk-VDZIEDJB.js +0 -2
  259. package/dist/chunk-VDZL45XI.js +0 -2
  260. package/dist/chunk-WJIS6BNI.js +0 -3
  261. package/dist/chunk-WN5Z3UVT.js +0 -7
  262. package/dist/chunk-XCW7DYHM.js +0 -2
  263. package/dist/chunk-ZF6P2NAT.js +0 -63
@@ -1,13 +1,13 @@
1
- import{a as P,b as N}from"./chunk-TH4JVC34.js";import{a as m,e as M}from"./chunk-LWYIGRHR.js";import{execFileSync as ln}from"child_process";import{closeSync as pn,existsSync as E,mkdirSync as ie,mkdtempSync as cn,openSync as gn,readFileSync as dn,renameSync as $,rmSync as B,writeFileSync as ae}from"fs";import{basename as S,dirname as d,extname as mn,join as g}from"path";import{execFileSync as ge}from"child_process";import{existsSync as de,readdirSync as A}from"fs";import{extname as _,join as T}from"path";var me=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),fe=[{language:"typescript",files:["tsconfig.json","tsconfig.base.json"],extensions:[".ts",".tsx",".mts",".cts"]},{language:"rust",files:["Cargo.toml"],extensions:[".rs"]},{language:"go",files:["go.mod"],extensions:[".go"]},{language:"java",files:["pom.xml","build.gradle","build.gradle.kts"],extensions:[".java"]},{language:"kotlin",files:["build.gradle.kts"],extensions:[".kt",".kts"]},{language:"scala",files:["build.sbt"],extensions:[".scala"]},{language:"python",files:["pyproject.toml","setup.py","setup.cfg","Pipfile"],extensions:[".py",".pyi"]},{language:"ruby",files:["Gemfile"],extensions:[".rb"]},{language:"cpp",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"]},{language:"c",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".c",".h"]},{language:"csharp",globs:["*.csproj","*.sln"],extensions:[".cs"]},{language:"vb",globs:["*.vbproj"],extensions:[".vb"]},{language:"dart",files:["pubspec.yaml"],extensions:[".dart"]},{language:"php",files:["composer.json"],extensions:[".php"]},{language:"javascript",files:["package.json"],extensions:[".js",".jsx",".mjs",".cjs"]}];function U(e){let n=[],t=he(e),r=Se(e);for(let i of fe){if(xe(e,i.files)){n.push(i.language);continue}if(ye(t,i.globs)){n.push(i.language);continue}ve(r,i.extensions)&&n.push(i.language)}return n.includes("typescript")&&F(n,"javascript"),n.includes("cpp")&&!r.has(".c")&&F(n,"c"),n}function he(e){try{return A(e)}catch{return[]}}function xe(e,n){return n?.length?n.some(t=>de(T(e,t))):!1}function ye(e,n){return n?.length?e.some(t=>n.some(r=>be(t,r))):!1}function be(e,n){if(n==="*")return!0;if(!n.includes("*"))return e===n;let[t,r]=n.split("*");return e.startsWith(t??"")&&e.endsWith(r??"")}function Se(e){let n=Pe(e);if(n)return n;let t=new Set,r=[e];for(;r.length>0;){let i=r.pop();if(!i)continue;let a;try{a=A(i,{withFileTypes:!0})}catch{continue}for(let s of a){if(s.name.startsWith(".")&&!s.name.endsWith("proj")&&!s.name.endsWith("sln")&&s.isDirectory())continue;let o=T(i,s.name);if(s.isDirectory()){me.has(s.name)||r.push(o);continue}let c=_(s.name).toLowerCase();c&&t.add(c)}}return t}function Pe(e){try{let n=ge("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}),t=new Set;for(let r of n.split(`
2
- `)){if(!r)continue;let i=_(r).toLowerCase();i&&t.add(i)}return t}catch{return null}}function ve(e,n){return n?.length?n.some(t=>e.has(t)):!1}function F(e,n){let t=e.indexOf(n);t!==-1&&e.splice(t,1)}import{existsSync as W,readdirSync as Ie}from"fs";import{join as v}from"path";var ke={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:n,indexerBinary:t})=>{let r=["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return n&&r.splice(1,0,"--pnpm-workspaces"),{binary:t,args:r}},markerFiles:["tsconfig.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:n})=>({binary:n,args:["index","--infer-tsconfig","--output",e,"--no-progress-bar"]}),markerFiles:["package.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["pom.xml","build.gradle"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.sbt"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.gradle.kts"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:"rust",indexerBinary:"rust-analyzer",checkCommand:"rust-analyzer --version",indexArgs:({outputPath:e})=>({binary:"rust-analyzer",args:["scip",".","--output",e]}),markerFiles:["Cargo.toml"],installMethods:[{label:"rustup",prerequisite:"rustup",binary:"rustup",args:["component","add","rust-analyzer"]}],installUrl:"https://github.com/rust-lang/rust-analyzer"},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:n})=>({binary:n,args:["index","--output",e,"--project-name","project"]}),markerFiles:["pyproject.toml","setup.py"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","scip-python-plus"]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},ruby:{language:"ruby",indexerBinary:"scip-ruby",checkCommand:"scip-ruby --version",indexArgs:({indexerBinary:e})=>({binary:e,args:["--dir","."]}),defaultOutputPath:"index.scip",markerFiles:["Gemfile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-ruby/releases"},go:{language:"go",indexerBinary:"scip-go",checkCommand:"scip-go --version",indexArgs:({outputPath:e})=>({binary:"scip-go",args:["--output",e]}),markerFiles:["go.mod"],installMethods:[{label:"go install",prerequisite:"go",binary:"go",args:["install","github.com/sourcegraph/scip-go@latest"]}],installUrl:"https://github.com/sourcegraph/scip-go"},cpp:{language:"cpp",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},c:{language:"c",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},csharp:{language:"csharp",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:n})=>({binary:"scip-dotnet",args:["index",q(e,[".sln",".csproj"])??e,"--output",n,"--working-directory",e]}),markerFiles:["*.csproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},vb:{language:"vb",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:n})=>({binary:"scip-dotnet",args:["index",q(e,[".sln",".vbproj"])??e,"--output",n,"--working-directory",e]}),markerFiles:["*.vbproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},dart:{language:"dart",indexerBinary:"scip-dart",checkCommand:"scip-dart --version",indexArgs:({indexerBinary:e,outputPath:n})=>({binary:e,args:["--output",n]}),markerFiles:["pubspec.yaml"],installMethods:[{label:"dart pub",prerequisite:"dart",binary:"dart",args:["pub","global","activate","scip_dart"]}],installUrl:"https://github.com/Workiva/scip-dart/releases"},php:{language:"php",indexerBinary:"scip-php",projectLocalBinaries:["vendor/davidrjenni/scip-php/bin/scip-php","vendor/bin/scip-php"],checkCommand:"scip-php --version",indexArgs:({projectRoot:e,indexerBinary:n})=>{let t=v(e,"vendor","bin","scip-php"),r=v(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",W(r)?r:W(t)?t:n]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function z(e){return ke[e]}function q(e,n){let t;try{t=Ie(e)}catch{return null}for(let r of t)if(n.some(i=>r.endsWith(i)))return v(e,r);return null}import{readFileSync as Re,writeFileSync as De}from"fs";import{create as I}from"@bufbuild/protobuf";import{deserializeSCIP as Ce,serializeSCIP as je,DocumentSchema as Oe,IndexSchema as Le,SymbolInformationSchema as we}from"@c4312/scip";function Ee(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let n=$e(e),t=Be(e.flatMap(i=>i.documents??[])),r=G(e.flatMap(i=>i.externalSymbols??[]));return I(Le,{metadata:n,documents:t,externalSymbols:r})}function J(e,n){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let t=e.map(i=>Ce(Re(i))),r=Ee(t);return De(n,Buffer.from(je(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function $e(e){let n=e[0]?.metadata;if(!n)return;let t=n.projectRoot;for(let r of e.slice(1)){let i=r.metadata?.projectRoot;if(t&&i&&i!==t)throw new Error(`Cannot merge SCIP indexes with different project roots: ${t} vs ${i}`)}return n}function Be(e){let n=new Map;for(let t of e){let r=n.get(t.relativePath);if(!r){n.set(t.relativePath,t);continue}n.set(t.relativePath,I(Oe,{language:r.language||t.language,relativePath:r.relativePath||t.relativePath,occurrences:[...r.occurrences,...t.occurrences],symbols:G([...r.symbols,...t.symbols]),text:Ne(r.text,t.text),positionEncoding:r.positionEncoding||t.positionEncoding}))}return[...n.values()]}function G(e){let n=new Map;for(let t of e){let r=n.get(t.symbol);if(!r){n.set(t.symbol,t);continue}n.set(t.symbol,I(we,{symbol:r.symbol,documentation:Fe([...r.documentation,...t.documentation]),relationships:Me([...r.relationships,...t.relationships]),kind:r.kind||t.kind,displayName:r.displayName||t.displayName,enclosingSymbol:r.enclosingSymbol||t.enclosingSymbol,signatureDocumentation:r.signatureDocumentation??t.signatureDocumentation}))}return[...n.values()]}function Me(e){let n=new Set,t=[];for(let r of e){let i=[r.symbol,r.isReference?"1":"0",r.isImplementation?"1":"0",r.isTypeDefinition?"1":"0",r.isDefinition?"1":"0"].join("|");n.has(i)||(n.add(i),t.push(r))}return t}function Ne(e,n){return e?n?e.length>=n.length?e:n:e:n}function Fe(e){return[...new Set(e)]}import{readFileSync as Ae,writeFileSync as _e}from"fs";import{create as H}from"@bufbuild/protobuf";import{deserializeSCIP as Te,DocumentSchema as Ue,IndexSchema as We,serializeSCIP as qe,SymbolRole as ze}from"@c4312/scip";function X(e){let n;try{n=Te(Ae(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let t=Je(n);return t.removedDefinitionOccurrences>0&&_e(e,Buffer.from(qe(t.index))),{removedDefinitionOccurrences:t.removedDefinitionOccurrences,touchedDocuments:t.touchedDocuments}}function Je(e){let n=new Set;for(let a of e.documents)for(let s of a.symbols)s.symbol&&n.add(s.symbol);for(let a of e.externalSymbols)a.symbol&&n.add(a.symbol);let t=0,r=0,i=[];for(let a of e.documents){let s=a.occurrences.filter(o=>(o.symbolRoles&ze.Definition)===0||n.has(o.symbol)?!0:(t+=1,!1));if(s.length===a.occurrences.length){i.push(a);continue}r+=1,i.push(H(Ue,{language:a.language,relativePath:a.relativePath,occurrences:s,symbols:a.symbols,text:a.text,positionEncoding:a.positionEncoding}))}return{index:t===0?e:H(We,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:t,touchedDocuments:r}}import{execFile as Ge}from"child_process";import{existsSync as h,renameSync as R,rmSync as D}from"fs";import{cpus as He}from"os";import{join as Q}from"path";function Xe(e,n,t){if(!e.defaultOutputPath)return;let r=Q(n,e.defaultOutputPath);t!==r&&h(r)&&R(r,t)}function Qe(e,n,t){if(!e.defaultOutputPath)return null;let r=Q(n,e.defaultOutputPath);if(r===t)return null;let i=`${t}.default-output-backup`;return D(i,{force:!0}),h(r)?(R(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function Ke(e){e&&(D(e.defaultOutputPath,{force:!0}),e.backupPath&&h(e.backupPath)&&R(e.backupPath,e.defaultOutputPath))}function Ve(e,n){if(e<=1)return 1;let t=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),r=Number.isFinite(n)&&n&&n>0?n:Number.isFinite(t)&&t>0?t:Math.min(2,Math.max(1,He().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function K(e,n,t,r){let i=e.filter(u=>u.config.defaultOutputPath),a=e.filter(u=>!u.config.defaultOutputPath),s=[],o=Ve(a.length,r),c=await Ze(a,o,u=>k(u,n,t));if(o>1){let u=new Map;for(let p of c.filter(l=>l.skipped)){let l=a.find(f=>f.language===p.language);l&&(t(`Retrying ${l.language} indexer serially after parallel failure...`),u.set(l.language,await k(l,n,t)))}s.push(...c.map(p=>u.get(p.language)??p))}else s.push(...c);for(let u of i)s.push(await k(u,n,t));return s.sort((u,p)=>e.findIndex(l=>l.language===u.language)-e.findIndex(l=>l.language===p.language))}async function k(e,n,t){t(`Indexing ${e.language} with ${e.resolvedBinary}...`),D(e.scipPath,{force:!0});let r=Qe(e.config,n,e.scipPath);try{await Ye(e.binary,e.args,{cwd:n,env:e.env,maxBuffer:50*1024*1024}),Xe(e.config,n,e.scipPath)}catch(i){let a=i instanceof Error?i.message:String(i),s=`${e.resolvedBinary} indexer failed: ${a.split(`
3
- `)[0]}`;return t(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{Ke(r)}if(!h(e.scipPath)){let i=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`;return t(`Skipping ${e.language}: ${i}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:i}}}return{language:e.language,scipPath:e.scipPath}}function Ye(e,n,t){return new Promise((r,i)=>{Ge(e,[...n],t,a=>{a?i(a):r()})})}async function Ze(e,n,t){if(e.length===0)return[];let r=new Array(e.length),i=0,a=Math.max(1,Math.min(e.length,n)),s=Array.from({length:a},async()=>{for(;i<e.length;){let o=i++;r[o]=await t(e[o])}});return await Promise.all(s),r}import{execFileSync as j}from"child_process";import{existsSync as C,readFileSync as en}from"fs";import{createRequire as nn}from"module";import{platform as tn}from"os";import{dirname as V,join as x}from"path";var rn=nn(import.meta.url);function O(e){return[e.indexerBinary,...e.binaryAliases??[]]}function L(e){let n=O(e);return n.length===1?n[0]:n.join(" or ")}function y(e){for(let n of O(e))if(m(n))return n;return sn(e)}function Y(e){return y(e)!==null||an(e)}function an(e){return Z(e)!==null}function sn(e){let n=Z(e);if(!n)return null;let r=JSON.parse(en(n,"utf8")).bin;if(!r)return null;if(typeof r=="string")return x(V(n),r);for(let i of O(e)){let a=r[i];if(a)return x(V(n),a)}return null}function Z(e){if(!e.bundledNpmPackage)return null;try{return rn.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function ee(e,n){for(let t of e.projectLocalBinaries??[]){let r=x(n,t);if(C(r))return r}return null}function ne(e,n=process.env,t=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||re(t,n))return n;let r=on(t,n);return r?{...n,DOTNET_ROOT:r}:n}function te(e,n){let t=e.installMethods,r=L(e);if(!t?.length)return n(`No auto-install method available for ${r}.`),e.installUrl&&n(`Install manually from: ${e.installUrl}`),!1;for(let i of t)if(m(i.prerequisite)){n(`Installing ${r} via ${i.label}...`);try{j(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let a=y(e);if(a){let s=a===e.indexerBinary?"":` (using ${a})`;return n(`Successfully installed ${r} via ${i.label}${s}`),!0}n(`${i.label} command completed but ${r} was not found on PATH`)}catch(a){let s=a instanceof Error?a.message:String(a);n(`${i.label} install failed: ${s}`)}}return n(`Could not auto-install ${r}.`),e.installUrl&&n(`Install manually from: ${e.installUrl}`),!1}function on(e,n){for(let t of un(n))if(re(e,{...n,DOTNET_ROOT:t}))return t;return null}function un(e){let n=[],t=e.DOTNET_ROOT;if(t&&C(t)&&n.push(t),tn()==="darwin"&&m("brew"))try{let r=j("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=x(r,"libexec");C(i)&&!n.includes(i)&&n.push(i)}catch{}return n}function re(e,n){try{return j(e,["--version"],{stdio:"pipe",env:n}),!0}catch{return!1}}async function se(e){let{projectRoot:n,maxHeapMb:t=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,a=fn(e),s=Date.now();ie(d(a.outputScip),{recursive:!0}),ie(d(a.outputDb),{recursive:!0});let o=e.languages??U(n);if(o.length===0)throw new Error("No supported languages detected in this project. Looked for: tsconfig.json, Cargo.toml, go.mod, pyproject.toml, etc.");r(`Detected languages: ${o.join(", ")}`);let c=wn(n,o,{pnpmWorkspaces:e.pnpmWorkspaces}),u=On(g(d(a.outputDb),"index.lock")),p=null;try{let l=hn({opts:e,paths:a,languages:o,fingerprint:c,start:s,onStatus:r});if(l)return l;Pn(i,r);let f=xn(a);return p=f.runDir,await yn({opts:e,languages:o,projectRoot:n,paths:a,tempPaths:f,fingerprint:c,start:s,maxHeapMb:t,skipAutoInstall:i,onStatus:r})}finally{p&&B(p,{recursive:!0,force:!0}),u()}}function fn(e){let n=e.outputScip??g(e.projectRoot,"index.scip"),t=e.outputDb??g(e.projectRoot,"index.db");return{outputScip:n,outputDb:t,metaPath:g(d(t),"meta.json")}}function hn(e){if(e.opts.skipIfUnchanged===!1||!E(e.paths.outputScip)||!E(e.paths.outputDb)||!En(e.paths.metaPath,e.fingerprint))return null;P({projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let n=Date.now()-e.start;return e.onStatus(`Index unchanged; reused existing SQLite index in ${(n/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:n,reused:!0,skipped:[]}}function xn(e){let n=cn(g(d(e.outputDb),"reindex-"));return{runDir:n,tempOutputScip:g(n,S(e.outputScip)),tempOutputDb:g(n,S(e.outputDb)),tempMetaPath:g(n,S(e.metaPath))}}async function yn(e){let n={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:t,skippedLanguages:r}=await bn(e,n);Sn(e,n,t,r);let i=Date.now()-e.start;return e.onStatus(`Done in ${(i/1e3).toFixed(1)}s`),{languages:t.map(a=>a.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:i,reused:!1,skipped:r}}async function bn(e,n){let{preparedRuns:t,skippedLanguages:r}=vn({languages:e.languages,tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:n,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,onStatus:e.onStatus}),i=await K(t,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:a}=kn(i,r);return Rn(a,r,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:a,skippedLanguages:r}}function Sn(e,n,t,r){Dn(t,e.tempPaths.tempOutputScip,e.onStatus),Cn(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,n,e.onStatus),P({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),$n(e.tempPaths.tempMetaPath,{version:2,status:r.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.fingerprint,requestedLanguages:e.languages,indexedLanguages:t.map(i=>i.language),skipped:[...r]}),Ln({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath})}function Pn(e,n){if(!m("scip")){if(e)throw new Error(`The scip CLI is required but not found on PATH.
4
- Install from: https://github.com/sourcegraph/scip/releases`);if(n("scip CLI not found on PATH. Attempting auto-install..."),!M(n))throw new Error(`The scip CLI is required but could not be installed.
5
- Install manually from: https://github.com/sourcegraph/scip/releases`)}}function vn(e){let n=[],t=[],r=e.languages.map((i,a)=>({language:i,scipPath:e.languages.length>1?jn(e.tempOutputScip,i,a):e.tempOutputScip}));for(let{language:i,scipPath:a}of r){let s=In({...e,language:i,scipPath:a});"skipped"in s?t.push(s.skipped):n.push(s.prepared)}return{preparedRuns:n,skippedLanguages:t}}function In(e){let n=z(e.language),t=L(n),r=ee(n,e.projectRoot);if(!r&&!Y(n)){if(e.skipAutoInstall){let o=`${t} not found on PATH (auto-install disabled). ${n.installUrl??""}`.trim();return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}if(e.onStatus(`${t} not found. Attempting auto-install...`),!te(n,e.onStatus)){let o=`${t} could not be auto-installed. ${n.installUrl?`Install manually from ${n.installUrl}`:`Install ${t} and put it on PATH.`}`;return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}}let i=r??y(n);if(!i){let o=`${t} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}let{binary:a,args:s}=n.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:i});return{prepared:{language:e.language,scipPath:e.scipPath,config:n,resolvedBinary:i,binary:a,args:s,env:ne(n,e.env,i)}}}function kn(e,n){let t=[];for(let r of e)r.skipped?n.push(r.skipped):t.push({language:r.language,scipPath:r.scipPath});return{indexedOutputs:t}}function Rn(e,n,t,r,i){if(e.length===0){let a=n.map(s=>` - ${s.language}: ${s.reason}`).join(`
1
+ import{a as v,b as I}from"./chunk-DRU74YUM.js";import{a as m,e as A}from"./chunk-LWYIGRHR.js";import{execFileSync as gn}from"child_process";import{closeSync as dn,copyFileSync as mn,existsSync as P,mkdirSync as B,mkdtempSync as fn,openSync as hn,readFileSync as ie,renameSync as M,rmSync as N,writeFileSync as se}from"fs";import{basename as S,dirname as d,extname as xn,join as g}from"path";import{execFileSync as fe}from"child_process";import{existsSync as he,readdirSync as T}from"fs";import{extname as U,join as W}from"path";var xe=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),ye=[{language:"typescript",files:["tsconfig.json","tsconfig.base.json"],extensions:[".ts",".tsx",".mts",".cts"]},{language:"rust",files:["Cargo.toml"],extensions:[".rs"]},{language:"go",files:["go.mod"],extensions:[".go"]},{language:"java",files:["pom.xml","build.gradle","build.gradle.kts"],extensions:[".java"]},{language:"kotlin",files:["build.gradle.kts"],extensions:[".kt",".kts"]},{language:"scala",files:["build.sbt"],extensions:[".scala"]},{language:"python",files:["pyproject.toml","setup.py","setup.cfg","Pipfile"],extensions:[".py",".pyi"]},{language:"ruby",files:["Gemfile"],extensions:[".rb"]},{language:"cpp",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"]},{language:"c",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".c",".h"]},{language:"csharp",globs:["*.csproj","*.sln"],extensions:[".cs"]},{language:"vb",globs:["*.vbproj"],extensions:[".vb"]},{language:"dart",files:["pubspec.yaml"],extensions:[".dart"]},{language:"php",files:["composer.json"],extensions:[".php"]},{language:"javascript",files:["package.json"],extensions:[".js",".jsx",".mjs",".cjs"]}];function q(e){let n=[],t=be(e),r=Ie(e);for(let a of ye){if(Se(e,a.files)){n.push(a.language);continue}if(Pe(t,a.globs)){n.push(a.language);continue}ke(r,a.extensions)&&n.push(a.language)}return n.includes("typescript")&&_(n,"javascript"),n.includes("cpp")&&!r.has(".c")&&_(n,"c"),n}function be(e){try{return T(e)}catch{return[]}}function Se(e,n){return n?.length?n.some(t=>he(W(e,t))):!1}function Pe(e,n){return n?.length?e.some(t=>n.some(r=>ve(t,r))):!1}function ve(e,n){if(n==="*")return!0;if(!n.includes("*"))return e===n;let[t,r]=n.split("*");return e.startsWith(t??"")&&e.endsWith(r??"")}function Ie(e){let n=Re(e);if(n)return n;let t=new Set,r=[e];for(;r.length>0;){let a=r.pop();if(!a)continue;let i;try{i=T(a,{withFileTypes:!0})}catch{continue}for(let s of i){if(s.name.startsWith(".")&&!s.name.endsWith("proj")&&!s.name.endsWith("sln")&&s.isDirectory())continue;let o=W(a,s.name);if(s.isDirectory()){xe.has(s.name)||r.push(o);continue}let p=U(s.name).toLowerCase();p&&t.add(p)}}return t}function Re(e){try{let n=fe("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}),t=new Set;for(let r of n.split(`
2
+ `)){if(!r)continue;let a=U(r).toLowerCase();a&&t.add(a)}return t}catch{return null}}function ke(e,n){return n?.length?n.some(t=>e.has(t)):!1}function _(e,n){let t=e.indexOf(n);t!==-1&&e.splice(t,1)}import{existsSync as z,readdirSync as De}from"fs";import{join as R}from"path";var Oe={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:n,indexerBinary:t})=>{let r=["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return n&&r.splice(1,0,"--pnpm-workspaces"),{binary:t,args:r}},markerFiles:["tsconfig.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:n})=>({binary:n,args:["index","--infer-tsconfig","--output",e,"--no-progress-bar"]}),markerFiles:["package.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["pom.xml","build.gradle"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.sbt"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.gradle.kts"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:"rust",indexerBinary:"rust-analyzer",checkCommand:"rust-analyzer --version",indexArgs:({outputPath:e})=>({binary:"rust-analyzer",args:["scip",".","--output",e]}),markerFiles:["Cargo.toml"],installMethods:[{label:"rustup",prerequisite:"rustup",binary:"rustup",args:["component","add","rust-analyzer"]}],installUrl:"https://github.com/rust-lang/rust-analyzer"},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:n})=>({binary:n,args:["index","--output",e,"--project-name","project"]}),markerFiles:["pyproject.toml","setup.py"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","scip-python-plus"]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},ruby:{language:"ruby",indexerBinary:"scip-ruby",checkCommand:"scip-ruby --version",indexArgs:({indexerBinary:e})=>({binary:e,args:["--dir","."]}),defaultOutputPath:"index.scip",markerFiles:["Gemfile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-ruby/releases"},go:{language:"go",indexerBinary:"scip-go",checkCommand:"scip-go --version",indexArgs:({outputPath:e})=>({binary:"scip-go",args:["--output",e]}),markerFiles:["go.mod"],installMethods:[{label:"go install",prerequisite:"go",binary:"go",args:["install","github.com/sourcegraph/scip-go@latest"]}],installUrl:"https://github.com/sourcegraph/scip-go"},cpp:{language:"cpp",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},c:{language:"c",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},csharp:{language:"csharp",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:n})=>({binary:"scip-dotnet",args:["index",J(e,[".sln",".csproj"])??e,"--output",n,"--working-directory",e]}),markerFiles:["*.csproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},vb:{language:"vb",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:n})=>({binary:"scip-dotnet",args:["index",J(e,[".sln",".vbproj"])??e,"--output",n,"--working-directory",e]}),markerFiles:["*.vbproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},dart:{language:"dart",indexerBinary:"scip-dart",checkCommand:"scip-dart --version",indexArgs:({indexerBinary:e,outputPath:n})=>({binary:e,args:["--output",n]}),markerFiles:["pubspec.yaml"],installMethods:[{label:"dart pub",prerequisite:"dart",binary:"dart",args:["pub","global","activate","scip_dart"]}],installUrl:"https://github.com/Workiva/scip-dart/releases"},php:{language:"php",indexerBinary:"scip-php",projectLocalBinaries:["vendor/davidrjenni/scip-php/bin/scip-php","vendor/bin/scip-php"],checkCommand:"scip-php --version",indexArgs:({projectRoot:e,indexerBinary:n})=>{let t=R(e,"vendor","bin","scip-php"),r=R(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",z(r)?r:z(t)?t:n]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function k(e){return Oe[e]}function J(e,n){let t;try{t=De(e)}catch{return null}for(let r of t)if(n.some(a=>r.endsWith(a)))return R(e,r);return null}import{readFileSync as Le,writeFileSync as je}from"fs";import{create as D}from"@bufbuild/protobuf";import{deserializeSCIP as Ce,serializeSCIP as we,DocumentSchema as Ee,IndexSchema as $e,SymbolInformationSchema as Fe}from"@c4312/scip";function Be(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let n=Me(e),t=Ne(e.flatMap(a=>a.documents??[])),r=H(e.flatMap(a=>a.externalSymbols??[]));return D($e,{metadata:n,documents:t,externalSymbols:r})}function G(e,n){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let t=e.map(a=>Ce(Le(a))),r=Be(t);return je(n,Buffer.from(we(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Me(e){let n=e[0]?.metadata;if(!n)return;let t=n.projectRoot;for(let r of e.slice(1)){let a=r.metadata?.projectRoot;if(t&&a&&a!==t)throw new Error(`Cannot merge SCIP indexes with different project roots: ${t} vs ${a}`)}return n}function Ne(e){let n=new Map;for(let t of e){let r=n.get(t.relativePath);if(!r){n.set(t.relativePath,t);continue}n.set(t.relativePath,D(Ee,{language:r.language||t.language,relativePath:r.relativePath||t.relativePath,occurrences:[...r.occurrences,...t.occurrences],symbols:H([...r.symbols,...t.symbols]),text:_e(r.text,t.text),positionEncoding:r.positionEncoding||t.positionEncoding}))}return[...n.values()]}function H(e){let n=new Map;for(let t of e){let r=n.get(t.symbol);if(!r){n.set(t.symbol,t);continue}n.set(t.symbol,D(Fe,{symbol:r.symbol,documentation:Te([...r.documentation,...t.documentation]),relationships:Ae([...r.relationships,...t.relationships]),kind:r.kind||t.kind,displayName:r.displayName||t.displayName,enclosingSymbol:r.enclosingSymbol||t.enclosingSymbol,signatureDocumentation:r.signatureDocumentation??t.signatureDocumentation}))}return[...n.values()]}function Ae(e){let n=new Set,t=[];for(let r of e){let a=[r.symbol,r.isReference?"1":"0",r.isImplementation?"1":"0",r.isTypeDefinition?"1":"0",r.isDefinition?"1":"0"].join("|");n.has(a)||(n.add(a),t.push(r))}return t}function _e(e,n){return e?n?e.length>=n.length?e:n:e:n}function Te(e){return[...new Set(e)]}import{readFileSync as Ue,writeFileSync as We}from"fs";import{create as X}from"@bufbuild/protobuf";import{deserializeSCIP as qe,DocumentSchema as ze,IndexSchema as Je,serializeSCIP as Ge,SymbolRole as He}from"@c4312/scip";function Q(e){let n;try{n=qe(Ue(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let t=Xe(n);return t.removedDefinitionOccurrences>0&&We(e,Buffer.from(Ge(t.index))),{removedDefinitionOccurrences:t.removedDefinitionOccurrences,touchedDocuments:t.touchedDocuments}}function Xe(e){let n=new Set;for(let i of e.documents)for(let s of i.symbols)s.symbol&&n.add(s.symbol);for(let i of e.externalSymbols)i.symbol&&n.add(i.symbol);let t=0,r=0,a=[];for(let i of e.documents){let s=i.occurrences.filter(o=>(o.symbolRoles&He.Definition)===0||n.has(o.symbol)?!0:(t+=1,!1));if(s.length===i.occurrences.length){a.push(i);continue}r+=1,a.push(X(ze,{language:i.language,relativePath:i.relativePath,occurrences:s,symbols:i.symbols,text:i.text,positionEncoding:i.positionEncoding}))}return{index:t===0?e:X(Je,{metadata:e.metadata,documents:a,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:t,touchedDocuments:r}}import{execFile as Qe}from"child_process";import{existsSync as x,renameSync as L,rmSync as j}from"fs";import{cpus as Ke}from"os";import{join as K}from"path";function Ve(e,n,t){if(!e.defaultOutputPath)return;let r=K(n,e.defaultOutputPath);t!==r&&x(r)&&L(r,t)}function Ye(e,n,t){if(!e.defaultOutputPath)return null;let r=K(n,e.defaultOutputPath);if(r===t)return null;let a=`${t}.default-output-backup`;return j(a,{force:!0}),x(r)?(L(r,a),{defaultOutputPath:r,backupPath:a}):{defaultOutputPath:r,backupPath:null}}function Ze(e){e&&(j(e.defaultOutputPath,{force:!0}),e.backupPath&&x(e.backupPath)&&L(e.backupPath,e.defaultOutputPath))}function en(e,n){if(e<=1)return 1;let t=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),r=Number.isFinite(n)&&n&&n>0?n:Number.isFinite(t)&&t>0?t:Math.min(2,Math.max(1,Ke().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function V(e,n,t,r){let a=e.filter(u=>u.config.defaultOutputPath),i=e.filter(u=>!u.config.defaultOutputPath),s=[],o=en(i.length,r),p=await tn(i,o,u=>O(u,n,t));if(o>1){let u=new Map;for(let c of p.filter(l=>l.skipped)){let l=i.find(h=>h.language===c.language);l&&(t(`Retrying ${l.language} indexer serially after parallel failure...`),u.set(l.language,await O(l,n,t)))}s.push(...p.map(c=>u.get(c.language)??c))}else s.push(...p);for(let u of a)s.push(await O(u,n,t));return s.sort((u,c)=>e.findIndex(l=>l.language===u.language)-e.findIndex(l=>l.language===c.language))}async function O(e,n,t){t(`Indexing ${e.language} with ${e.resolvedBinary}...`),j(e.scipPath,{force:!0});let r=Ye(e.config,n,e.scipPath);try{await nn(e.binary,e.args,{cwd:n,env:e.env,maxBuffer:50*1024*1024}),Ve(e.config,n,e.scipPath)}catch(a){let i=a instanceof Error?a.message:String(a),s=`${e.resolvedBinary} indexer failed: ${i.split(`
3
+ `)[0]}`;return t(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{Ze(r)}if(!x(e.scipPath)){let a=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`;return t(`Skipping ${e.language}: ${a}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:a}}}return{language:e.language,scipPath:e.scipPath}}function nn(e,n,t){return new Promise((r,a)=>{Qe(e,[...n],t,i=>{i?a(i):r()})})}async function tn(e,n,t){if(e.length===0)return[];let r=new Array(e.length),a=0,i=Math.max(1,Math.min(e.length,n)),s=Array.from({length:i},async()=>{for(;a<e.length;){let o=a++;r[o]=await t(e[o])}});return await Promise.all(s),r}import{execFileSync as w}from"child_process";import{existsSync as C,readFileSync as rn}from"fs";import{createRequire as an}from"module";import{platform as sn}from"os";import{dirname as Y,join as y}from"path";var on=an(import.meta.url);function E(e){return[e.indexerBinary,...e.binaryAliases??[]]}function $(e){let n=E(e);return n.length===1?n[0]:n.join(" or ")}function b(e){for(let n of E(e))if(m(n))return n;return ln(e)}function Z(e){return b(e)!==null||un(e)}function un(e){return ee(e)!==null}function ln(e){let n=ee(e);if(!n)return null;let r=JSON.parse(rn(n,"utf8")).bin;if(!r)return null;if(typeof r=="string")return y(Y(n),r);for(let a of E(e)){let i=r[a];if(i)return y(Y(n),i)}return null}function ee(e){if(!e.bundledNpmPackage)return null;try{return on.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function ne(e,n){for(let t of e.projectLocalBinaries??[]){let r=y(n,t);if(C(r))return r}return null}function te(e,n=process.env,t=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||ae(t,n))return n;let r=pn(t,n);return r?{...n,DOTNET_ROOT:r}:n}function re(e,n){let t=e.installMethods,r=$(e);if(!t?.length)return n(`No auto-install method available for ${r}.`),e.installUrl&&n(`Install manually from: ${e.installUrl}`),!1;for(let a of t)if(m(a.prerequisite)){n(`Installing ${r} via ${a.label}...`);try{w(a.binary,a.args,{stdio:"inherit",timeout:3e5,env:process.env});let i=b(e);if(i){let s=i===e.indexerBinary?"":` (using ${i})`;return n(`Successfully installed ${r} via ${a.label}${s}`),!0}n(`${a.label} command completed but ${r} was not found on PATH`)}catch(i){let s=i instanceof Error?i.message:String(i);n(`${a.label} install failed: ${s}`)}}return n(`Could not auto-install ${r}.`),e.installUrl&&n(`Install manually from: ${e.installUrl}`),!1}function pn(e,n){for(let t of cn(n))if(ae(e,{...n,DOTNET_ROOT:t}))return t;return null}function cn(e){let n=[],t=e.DOTNET_ROOT;if(t&&C(t)&&n.push(t),sn()==="darwin"&&m("brew"))try{let r=w("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),a=y(r,"libexec");C(a)&&!n.includes(a)&&n.push(a)}catch{}return n}function ae(e,n){try{return w(e,["--version"],{stdio:"pipe",env:n}),!0}catch{return!1}}async function oe(e){let{projectRoot:n,maxHeapMb:t=8192,onStatus:r=console.log,skipAutoInstall:a=!1}=e,i=yn(e),s=Date.now();B(d(i.outputScip),{recursive:!0}),B(d(i.outputDb),{recursive:!0});let o=e.languages??q(n);if(o.length===0)throw new Error("No supported languages detected in this project. Looked for: tsconfig.json, Cargo.toml, go.mod, pyproject.toml, etc.");r(`Detected languages: ${o.join(", ")}`);let p=Mn(n,o,{pnpmWorkspaces:e.pnpmWorkspaces}),u=Fn(g(d(i.outputDb),"index.lock")),c=null;try{let l=bn({opts:e,paths:i,languages:o,fingerprint:p,start:s,onStatus:r});if(l)return l;Dn(a,r);let h=Sn(i);return c=h.runDir,await Pn({opts:e,languages:o,projectRoot:n,paths:i,tempPaths:h,fingerprint:p,start:s,maxHeapMb:t,skipAutoInstall:a,onStatus:r})}finally{c&&N(c,{recursive:!0,force:!0}),u()}}function yn(e){let n=e.outputScip??g(e.projectRoot,"index.scip"),t=e.outputDb??g(e.projectRoot,"index.db");return{outputScip:n,outputDb:t,metaPath:g(d(t),"meta.json")}}function bn(e){if(e.opts.skipIfUnchanged===!1||!P(e.paths.outputScip)||!P(e.paths.outputDb)||!Nn(e.paths.metaPath,e.fingerprint))return null;v({projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let n=Date.now()-e.start;return e.onStatus(`Index unchanged; reused existing SQLite index in ${(n/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:n,reused:!0,skipped:[]}}function Sn(e){let n=fn(g(d(e.outputDb),"reindex-"));return{runDir:n,tempOutputScip:g(n,S(e.outputScip)),tempOutputDb:g(n,S(e.outputDb)),tempMetaPath:g(n,S(e.metaPath))}}async function Pn(e){let n={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:t,skippedLanguages:r,reusedLanguages:a}=await vn(e,n);a.length>0&&e.onStatus(`Reused ${a.length} cached language shard(s): ${a.join(", ")}`),In(e,n,t,r);let i=Date.now()-e.start;return e.onStatus(`Done in ${(i/1e3).toFixed(1)}s`),{languages:t.map(s=>s.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:i,reused:!1,skipped:r}}async function vn(e,n){let t=Rn(e),r=new Set(t.map(u=>u.language));for(let u of r)e.onStatus(`Reusing cached ${u} SCIP shard (language inputs unchanged).`);let{preparedRuns:a,skippedLanguages:i}=On({languages:e.languages.filter(u=>!r.has(u)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:n,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,onStatus:e.onStatus}),s=await V(a,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:o}=jn(s,i),p=[...t,...o];return Cn(p,i,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:p,skippedLanguages:i,reusedLanguages:[...r]}}function In(e,n,t,r){kn(e.paths.outputDb,t),wn(t,e.tempPaths.tempOutputScip,e.onStatus),En(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,n,e.onStatus),v({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),An(e.tempPaths.tempMetaPath,{version:3,status:r.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.fingerprint,languageFingerprints:ue(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces}),requestedLanguages:e.languages,indexedLanguages:t.map(a=>a.language),skipped:[...r]}),Bn({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath})}function Rn(e){let n;try{n=JSON.parse(ie(e.paths.metaPath,"utf-8"))}catch{return[]}if(n.version!==3||!n.languageFingerprints)return[];let t=[],r=ue(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces});for(let a of e.languages){let i=le(e.paths.outputDb,a);P(i)&&f(n.languageFingerprints[a])===f(r[a])&&t.push({language:a,scipPath:i})}return t}function kn(e,n){for(let t of n){let r=le(e,t.language);B(d(r),{recursive:!0}),t.scipPath!==r&&mn(t.scipPath,r)}}function Dn(e,n){if(!m("scip")){if(e)throw new Error(`The scip CLI is required but not found on PATH.
4
+ Install from: https://github.com/sourcegraph/scip/releases`);if(n("scip CLI not found on PATH. Attempting auto-install..."),!A(n))throw new Error(`The scip CLI is required but could not be installed.
5
+ Install manually from: https://github.com/sourcegraph/scip/releases`)}}function On(e){let n=[],t=[],r=e.languages.map((a,i)=>({language:a,scipPath:e.languages.length>1?$n(e.tempOutputScip,a,i):e.tempOutputScip}));for(let{language:a,scipPath:i}of r){let s=Ln({...e,language:a,scipPath:i});"skipped"in s?t.push(s.skipped):n.push(s.prepared)}return{preparedRuns:n,skippedLanguages:t}}function Ln(e){let n=k(e.language),t=$(n),r=ne(n,e.projectRoot);if(!r&&!Z(n)){if(e.skipAutoInstall){let o=`${t} not found on PATH (auto-install disabled). ${n.installUrl??""}`.trim();return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}if(e.onStatus(`${t} not found. Attempting auto-install...`),!re(n,e.onStatus)){let o=`${t} could not be auto-installed. ${n.installUrl?`Install manually from ${n.installUrl}`:`Install ${t} and put it on PATH.`}`;return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}}let a=r??b(n);if(!a){let o=`${t} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}let{binary:i,args:s}=n.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:a});return{prepared:{language:e.language,scipPath:e.scipPath,config:n,resolvedBinary:a,binary:i,args:s,env:te(n,e.env,a)}}}function jn(e,n){let t=[];for(let r of e)r.skipped?n.push(r.skipped):t.push({language:r.language,scipPath:r.scipPath});return{indexedOutputs:t}}function Cn(e,n,t,r,a){if(e.length===0){let i=n.map(s=>` - ${s.language}: ${s.reason}`).join(`
6
6
  `);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
7
- `+a)}if(n.length!==0&&(i(`Indexed ${e.length} of ${t.length} languages; skipped ${n.map(a=>a.language).join(", ")}.`),!r))throw new Error(`Failed to index all required languages; preserving the previous index. Pass --allow-partial to intentionally write an incomplete index.
8
- `+n.map(a=>` - ${a.language}: ${a.reason}`).join(`
9
- `))}function Dn(e,n,t){e.length>1?(t(`Merging ${e.length} language indexes...`),J(e.map(r=>r.scipPath),n)):e[0].scipPath!==n&&$(e[0].scipPath,n)}function Cn(e,n,t,r){if(r("Converting to SQLite..."),!E(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let i=X(e);i.removedDefinitionOccurrences>0&&r(`Sanitized ${i.removedDefinitionOccurrences} invalid definition occurrences across ${i.touchedDocuments} documents before SQLite conversion.`),ln("scip",["expt-convert","--output",n,e],{env:t,stdio:"pipe",maxBuffer:50*1024*1024})}catch(i){let a=i instanceof Error?i.message:String(i);throw new Error(`Failed to convert SCIP index to SQLite: ${a}`,{cause:i})}}function jn(e,n,t){let r=mn(e)||".scip",i=S(e,r);return g(d(e),`${i}.${t+1}.${n}${r}`)}function On(e){let n;try{n=gn(e,"wx")}catch(t){throw(typeof t=="object"&&t&&"code"in t?t.code:void 0)==="EEXIST"?new Error(`Another scip-query reindex is already running for ${d(e)}.`,{cause:t}):t}return ae(n,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
10
- `),()=>{try{pn(n)}finally{B(e,{force:!0})}}}function Ln(e){w(e.tempOutputScip,e.outputScip),w(e.tempOutputDb,e.outputDb),w(e.tempMetaPath,e.metaPath)}function w(e,n){B(`${n}.tmp-replace`,{force:!0}),$(e,`${n}.tmp-replace`),$(`${n}.tmp-replace`,n)}function wn(e,n,t){return{version:1,languages:[...n].sort(),pnpmWorkspaces:t.pnpmWorkspaces===!0,files:N(e)}}function En(e,n){try{let t=JSON.parse(dn(e,"utf-8"));return t.version===2&&t.status==="complete"&&b(t.fingerprint)===b(n)&&b([...t.indexedLanguages??[]].sort())===b(n.languages)}catch{return!1}}function $n(e,n){ae(e,`${JSON.stringify(n,null,2)}
11
- `)}function b(e){return JSON.stringify(e)}var le=process.env.SCIP_REINDEX_PROJECT_ROOT,pe=process.env.SCIP_REINDEX_OUTPUT_SCIP,ce=process.env.SCIP_REINDEX_OUTPUT_DB,oe=process.env.SCIP_REINDEX_LANGUAGES,Bn=process.env.SCIP_REINDEX_PNPM_WORKSPACES==="1";(!le||!pe||!ce)&&(console.error("reindex-worker: missing required env vars"),process.exit(1));var ue=oe?oe.split(",").filter(Boolean):void 0;se({projectRoot:le,outputScip:pe,outputDb:ce,languages:ue?.length?ue:void 0,pnpmWorkspaces:Bn,onStatus:e=>process.stderr.write(`[reindex] ${e}
7
+ `+i)}if(n.length!==0&&(a(`Indexed ${e.length} of ${t.length} languages; skipped ${n.map(i=>i.language).join(", ")}.`),!r))throw new Error(`Failed to index all required languages; preserving the previous index. Pass --allow-partial to intentionally write an incomplete index.
8
+ `+n.map(i=>` - ${i.language}: ${i.reason}`).join(`
9
+ `))}function wn(e,n,t){e.length>1?(t(`Merging ${e.length} language indexes...`),G(e.map(r=>r.scipPath),n)):e[0].scipPath!==n&&M(e[0].scipPath,n)}function En(e,n,t,r){if(r("Converting to SQLite..."),!P(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let a=Q(e);a.removedDefinitionOccurrences>0&&r(`Sanitized ${a.removedDefinitionOccurrences} invalid definition occurrences across ${a.touchedDocuments} documents before SQLite conversion.`),gn("scip",["expt-convert","--output",n,e],{env:t,stdio:"pipe",maxBuffer:50*1024*1024})}catch(a){let i=a instanceof Error?a.message:String(a);throw new Error(`Failed to convert SCIP index to SQLite: ${i}`,{cause:a})}}function $n(e,n,t){let r=xn(e)||".scip",a=S(e,r);return g(d(e),`${a}.${t+1}.${n}${r}`)}function Fn(e){let n;try{n=hn(e,"wx")}catch(t){throw(typeof t=="object"&&t&&"code"in t?t.code:void 0)==="EEXIST"?new Error(`Another scip-query reindex is already running for ${d(e)}.`,{cause:t}):t}return se(n,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
10
+ `),()=>{try{dn(n)}finally{N(e,{force:!0})}}}function Bn(e){F(e.tempOutputScip,e.outputScip),F(e.tempOutputDb,e.outputDb),F(e.tempMetaPath,e.metaPath)}function F(e,n){N(`${n}.tmp-replace`,{force:!0}),M(e,`${n}.tmp-replace`),M(`${n}.tmp-replace`,n)}function Mn(e,n,t){return{version:1,languages:[...n].sort(),pnpmWorkspaces:t.pnpmWorkspaces===!0,files:I(e)}}function ue(e,n,t){return Object.fromEntries(n.map(r=>{let a=k(r).markerFiles;return[r,{version:1,languages:[r],pnpmWorkspaces:r==="typescript"&&t.pnpmWorkspaces===!0,files:I(e,{language:r,markerFiles:a})}]}))}function le(e,n){return g(d(e),"language-indexes",`${n}.scip`)}function Nn(e,n){try{let t=JSON.parse(ie(e,"utf-8"));return(t.version===2||t.version===3)&&t.status==="complete"&&f(t.fingerprint)===f(n)&&f([...t.indexedLanguages??[]].sort())===f(n.languages)}catch{return!1}}function An(e,n){se(e,`${JSON.stringify(n,null,2)}
11
+ `)}function f(e){return JSON.stringify(e)}var ge=process.env.SCIP_REINDEX_PROJECT_ROOT,de=process.env.SCIP_REINDEX_OUTPUT_SCIP,me=process.env.SCIP_REINDEX_OUTPUT_DB,pe=process.env.SCIP_REINDEX_LANGUAGES,_n=process.env.SCIP_REINDEX_PNPM_WORKSPACES==="1";(!ge||!de||!me)&&(console.error("reindex-worker: missing required env vars"),process.exit(1));var ce=pe?pe.split(",").filter(Boolean):void 0;oe({projectRoot:ge,outputScip:de,outputDb:me,languages:ce?.length?ce:void 0,pnpmWorkspaces:_n,onStatus:e=>process.stderr.write(`[reindex] ${e}
12
12
  `)}).then(()=>{process.exit(0)}).catch(e=>{console.error(`reindex-worker error: ${e}`),process.exit(1)});
13
13
  //# sourceMappingURL=reindex-worker.js.map
package/dist/reindex.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as SupportedLanguage, I as IndexerConfig } from './config-types-CGIeLEpY.js';
1
+ import { a as SupportedLanguage, I as IndexerConfig } from './config-types-Bok4jrO3.js';
2
2
  import { Index } from '@c4312/scip';
3
3
  export { t as tryInstallScipCli } from './scip-cli-a-xOztiK.js';
4
4
 
package/dist/reindex.js CHANGED
@@ -1,9 +1,9 @@
1
- import{a as f,e as L}from"./chunk-LWYIGRHR.js";import{a as Z}from"./chunk-TKDJQ2WD.js";import{a as Y,b as Q}from"./chunk-PBGTMPJ7.js";import"./chunk-NN3O7TPH.js";import"./chunk-VDZL45XI.js";import{execFileSync as nr}from"child_process";import{closeSync as tr,existsSync as q,mkdirSync as $e,mkdtempSync as rr,openSync as ir,readFileSync as or,renameSync as K,rmSync as X,writeFileSync as Be}from"fs";import{basename as C,dirname as b,extname as sr,join as m}from"path";import We from"better-sqlite3";import{execFileSync as He}from"child_process";import{existsSync as Je,readdirSync as ze,readFileSync as Ge}from"fs";import{extname as S,join as ee}from"path";function y(e){let n=new Set((e.extensions??Y).map(o=>o.toLowerCase()));if(n.size===0)return{scanned:0,inserted:0,existing:0};if(!Je(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let t=Z(e.projectRoot),r=qe(e.projectRoot,n).filter(o=>!t.isIgnored(o)),i=new We(e.dbPath);try{let o=Xe(i,r),s=i.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
2
- VALUES (?, ?, NULL, ?)`),u=i.transaction(g=>{let l=0;for(let p of g){if(o.has(p))continue;let d=Ge(ee(e.projectRoot,p),"utf-8"),Ue=s.run(Ye(p),p,d);l+=Number(Ue.changes)}return l})(r),c={scanned:r.length,inserted:u,existing:r.length-u};return e.onStatus?.(`Augmented SQLite documents with ${u} auxiliary source file${u===1?"":"s"} (${c.existing} already present).`),c}finally{i.close()}}function qe(e,n){let t=Ke(e,n);if(t)return t;let r=[],i=o=>{let s=o?ee(e,o):e,a;try{a=ze(s,{withFileTypes:!0})}catch{return}for(let u of a){if(Q.has(u.name))continue;let c=o?`${o}/${u.name}`:u.name;if(u.isDirectory()){i(c);continue}n.has(S(u.name).toLowerCase())&&r.push(c)}};return i(""),r.sort()}function Ke(e,n){try{return He("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
3
- `).filter(r=>r&&n.has(S(r).toLowerCase())).sort()}catch{return null}}function Xe(e,n){let t=new Set,r=500;for(let i=0;i<n.length;i+=r){let o=n.slice(i,i+r),s=e.prepare(`SELECT relative_path FROM documents WHERE relative_path IN (${o.map(()=>"?").join(",")})`).all(...o);for(let a of s)t.add(a.relative_path)}return t}function Ye(e){return S(e).toLowerCase()===".vue"?"vue":S(e).replace(/^\./,"").toLowerCase()||"source"}import{execFileSync as Qe}from"child_process";import{existsSync as Ze,readdirSync as te}from"fs";import{extname as re,join as ie}from"path";var en=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),nn=[{language:"typescript",files:["tsconfig.json","tsconfig.base.json"],extensions:[".ts",".tsx",".mts",".cts"]},{language:"rust",files:["Cargo.toml"],extensions:[".rs"]},{language:"go",files:["go.mod"],extensions:[".go"]},{language:"java",files:["pom.xml","build.gradle","build.gradle.kts"],extensions:[".java"]},{language:"kotlin",files:["build.gradle.kts"],extensions:[".kt",".kts"]},{language:"scala",files:["build.sbt"],extensions:[".scala"]},{language:"python",files:["pyproject.toml","setup.py","setup.cfg","Pipfile"],extensions:[".py",".pyi"]},{language:"ruby",files:["Gemfile"],extensions:[".rb"]},{language:"cpp",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"]},{language:"c",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".c",".h"]},{language:"csharp",globs:["*.csproj","*.sln"],extensions:[".cs"]},{language:"vb",globs:["*.vbproj"],extensions:[".vb"]},{language:"dart",files:["pubspec.yaml"],extensions:[".dart"]},{language:"php",files:["composer.json"],extensions:[".php"]},{language:"javascript",files:["package.json"],extensions:[".js",".jsx",".mjs",".cjs"]}];function w(e){let n=[],t=tn(e),r=an(e);for(let i of nn){if(rn(e,i.files)){n.push(i.language);continue}if(on(t,i.globs)){n.push(i.language);continue}cn(r,i.extensions)&&n.push(i.language)}return n.includes("typescript")&&ne(n,"javascript"),n.includes("cpp")&&!r.has(".c")&&ne(n,"c"),n}function tn(e){try{return te(e)}catch{return[]}}function rn(e,n){return n?.length?n.some(t=>Ze(ie(e,t))):!1}function on(e,n){return n?.length?e.some(t=>n.some(r=>sn(t,r))):!1}function sn(e,n){if(n==="*")return!0;if(!n.includes("*"))return e===n;let[t,r]=n.split("*");return e.startsWith(t??"")&&e.endsWith(r??"")}function an(e){let n=un(e);if(n)return n;let t=new Set,r=[e];for(;r.length>0;){let i=r.pop();if(!i)continue;let o;try{o=te(i,{withFileTypes:!0})}catch{continue}for(let s of o){if(s.name.startsWith(".")&&!s.name.endsWith("proj")&&!s.name.endsWith("sln")&&s.isDirectory())continue;let a=ie(i,s.name);if(s.isDirectory()){en.has(s.name)||r.push(a);continue}let u=re(s.name).toLowerCase();u&&t.add(u)}}return t}function un(e){try{let n=Qe("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}),t=new Set;for(let r of n.split(`
4
- `)){if(!r)continue;let i=re(r).toLowerCase();i&&t.add(i)}return t}catch{return null}}function cn(e,n){return n?.length?n.some(t=>e.has(t)):!1}function ne(e,n){let t=e.indexOf(n);t!==-1&&e.splice(t,1)}import{existsSync as oe,readdirSync as ln}from"fs";import{join as O}from"path";var ae={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:n,indexerBinary:t})=>{let r=["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return n&&r.splice(1,0,"--pnpm-workspaces"),{binary:t,args:r}},markerFiles:["tsconfig.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:n})=>({binary:n,args:["index","--infer-tsconfig","--output",e,"--no-progress-bar"]}),markerFiles:["package.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["pom.xml","build.gradle"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.sbt"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.gradle.kts"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:"rust",indexerBinary:"rust-analyzer",checkCommand:"rust-analyzer --version",indexArgs:({outputPath:e})=>({binary:"rust-analyzer",args:["scip",".","--output",e]}),markerFiles:["Cargo.toml"],installMethods:[{label:"rustup",prerequisite:"rustup",binary:"rustup",args:["component","add","rust-analyzer"]}],installUrl:"https://github.com/rust-lang/rust-analyzer"},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:n})=>({binary:n,args:["index","--output",e,"--project-name","project"]}),markerFiles:["pyproject.toml","setup.py"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","scip-python-plus"]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},ruby:{language:"ruby",indexerBinary:"scip-ruby",checkCommand:"scip-ruby --version",indexArgs:({indexerBinary:e})=>({binary:e,args:["--dir","."]}),defaultOutputPath:"index.scip",markerFiles:["Gemfile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-ruby/releases"},go:{language:"go",indexerBinary:"scip-go",checkCommand:"scip-go --version",indexArgs:({outputPath:e})=>({binary:"scip-go",args:["--output",e]}),markerFiles:["go.mod"],installMethods:[{label:"go install",prerequisite:"go",binary:"go",args:["install","github.com/sourcegraph/scip-go@latest"]}],installUrl:"https://github.com/sourcegraph/scip-go"},cpp:{language:"cpp",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},c:{language:"c",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},csharp:{language:"csharp",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:n})=>({binary:"scip-dotnet",args:["index",se(e,[".sln",".csproj"])??e,"--output",n,"--working-directory",e]}),markerFiles:["*.csproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},vb:{language:"vb",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:n})=>({binary:"scip-dotnet",args:["index",se(e,[".sln",".vbproj"])??e,"--output",n,"--working-directory",e]}),markerFiles:["*.vbproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},dart:{language:"dart",indexerBinary:"scip-dart",checkCommand:"scip-dart --version",indexArgs:({indexerBinary:e,outputPath:n})=>({binary:e,args:["--output",n]}),markerFiles:["pubspec.yaml"],installMethods:[{label:"dart pub",prerequisite:"dart",binary:"dart",args:["pub","global","activate","scip_dart"]}],installUrl:"https://github.com/Workiva/scip-dart/releases"},php:{language:"php",indexerBinary:"scip-php",projectLocalBinaries:["vendor/davidrjenni/scip-php/bin/scip-php","vendor/bin/scip-php"],checkCommand:"scip-php --version",indexArgs:({projectRoot:e,indexerBinary:n})=>{let t=O(e,"vendor","bin","scip-php"),r=O(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",oe(r)?r:oe(t)?t:n]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function D(e){return ae[e]}function se(e,n){let t;try{t=ln(e)}catch{return null}for(let r of t)if(n.some(i=>r.endsWith(i)))return O(e,r);return null}import{readFileSync as gn,writeFileSync as pn}from"fs";import{create as V}from"@bufbuild/protobuf";import{deserializeSCIP as dn,serializeSCIP as mn,DocumentSchema as fn,IndexSchema as hn,SymbolInformationSchema as bn}from"@c4312/scip";function ue(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let n=yn(e),t=xn(e.flatMap(i=>i.documents??[])),r=ce(e.flatMap(i=>i.externalSymbols??[]));return V(hn,{metadata:n,documents:t,externalSymbols:r})}function T(e,n){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let t=e.map(i=>dn(gn(i))),r=ue(t);return pn(n,Buffer.from(mn(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function yn(e){let n=e[0]?.metadata;if(!n)return;let t=n.projectRoot;for(let r of e.slice(1)){let i=r.metadata?.projectRoot;if(t&&i&&i!==t)throw new Error(`Cannot merge SCIP indexes with different project roots: ${t} vs ${i}`)}return n}function xn(e){let n=new Map;for(let t of e){let r=n.get(t.relativePath);if(!r){n.set(t.relativePath,t);continue}n.set(t.relativePath,V(fn,{language:r.language||t.language,relativePath:r.relativePath||t.relativePath,occurrences:[...r.occurrences,...t.occurrences],symbols:ce([...r.symbols,...t.symbols]),text:Rn(r.text,t.text),positionEncoding:r.positionEncoding||t.positionEncoding}))}return[...n.values()]}function ce(e){let n=new Map;for(let t of e){let r=n.get(t.symbol);if(!r){n.set(t.symbol,t);continue}n.set(t.symbol,V(bn,{symbol:r.symbol,documentation:vn([...r.documentation,...t.documentation]),relationships:Sn([...r.relationships,...t.relationships]),kind:r.kind||t.kind,displayName:r.displayName||t.displayName,enclosingSymbol:r.enclosingSymbol||t.enclosingSymbol,signatureDocumentation:r.signatureDocumentation??t.signatureDocumentation}))}return[...n.values()]}function Sn(e){let n=new Set,t=[];for(let r of e){let i=[r.symbol,r.isReference?"1":"0",r.isImplementation?"1":"0",r.isTypeDefinition?"1":"0",r.isDefinition?"1":"0"].join("|");n.has(i)||(n.add(i),t.push(r))}return t}function Rn(e,n){return e?n?e.length>=n.length?e:n:e:n}function vn(e){return[...new Set(e)]}import{execFileSync as kn}from"child_process";import{createHash as In}from"crypto";import{readdirSync as Pn,readFileSync as Cn}from"fs";import{join as le}from"path";function Ln(e){return(wn(e)??On(e)).filter(n=>n&&!ge(n)).sort()}function R(e){return Ln(e).map(n=>{let t=le(e,n);try{let r=Cn(t);return{path:n,size:r.byteLength,hash:In("sha256").update(r).digest("hex")}}catch{return{path:n,size:-1,hash:"unreadable"}}})}function wn(e){try{return kn("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
5
- `).filter(Boolean)}catch{return null}}function On(e){let n=[],t=[""];for(;t.length>0;){let r=t.pop(),i=r?le(e,r):e,o;try{o=Pn(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){ge(a)||t.push(a);continue}n.push(a)}}return n}function ge(e){return e.split("/").some(t=>Dn.has(t))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var Dn=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]);import{readFileSync as Vn,writeFileSync as Tn}from"fs";import{create as pe}from"@bufbuild/protobuf";import{deserializeSCIP as Fn,DocumentSchema as En,IndexSchema as jn,serializeSCIP as Mn,SymbolRole as Nn}from"@c4312/scip";function de(e){let n;try{n=Fn(Vn(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let t=An(n);return t.removedDefinitionOccurrences>0&&Tn(e,Buffer.from(Mn(t.index))),{removedDefinitionOccurrences:t.removedDefinitionOccurrences,touchedDocuments:t.touchedDocuments}}function An(e){let n=new Set;for(let o of e.documents)for(let s of o.symbols)s.symbol&&n.add(s.symbol);for(let o of e.externalSymbols)o.symbol&&n.add(o.symbol);let t=0,r=0,i=[];for(let o of e.documents){let s=o.occurrences.filter(a=>(a.symbolRoles&Nn.Definition)===0||n.has(a.symbol)?!0:(t+=1,!1));if(s.length===o.occurrences.length){i.push(o);continue}r+=1,i.push(pe(En,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:t===0?e:pe(jn,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:t,touchedDocuments:r}}import{execFile as _n}from"child_process";import{existsSync as v,renameSync as E,rmSync as j}from"fs";import{cpus as $n}from"os";import{join as me}from"path";function Bn(e,n,t){if(!e.defaultOutputPath)return;let r=me(n,e.defaultOutputPath);t!==r&&v(r)&&E(r,t)}function Un(e,n,t){if(!e.defaultOutputPath)return null;let r=me(n,e.defaultOutputPath);if(r===t)return null;let i=`${t}.default-output-backup`;return j(i,{force:!0}),v(r)?(E(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function Wn(e){e&&(j(e.defaultOutputPath,{force:!0}),e.backupPath&&v(e.backupPath)&&E(e.backupPath,e.defaultOutputPath))}function Hn(e,n){if(e<=1)return 1;let t=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),r=Number.isFinite(n)&&n&&n>0?n:Number.isFinite(t)&&t>0?t:Math.min(2,Math.max(1,$n().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function fe(e,n,t,r){let i=e.filter(c=>c.config.defaultOutputPath),o=e.filter(c=>!c.config.defaultOutputPath),s=[],a=Hn(o.length,r),u=await zn(o,a,c=>F(c,n,t));if(a>1){let c=new Map;for(let g of u.filter(l=>l.skipped)){let l=o.find(p=>p.language===g.language);l&&(t(`Retrying ${l.language} indexer serially after parallel failure...`),c.set(l.language,await F(l,n,t)))}s.push(...u.map(g=>c.get(g.language)??g))}else s.push(...u);for(let c of i)s.push(await F(c,n,t));return s.sort((c,g)=>e.findIndex(l=>l.language===c.language)-e.findIndex(l=>l.language===g.language))}async function F(e,n,t){t(`Indexing ${e.language} with ${e.resolvedBinary}...`),j(e.scipPath,{force:!0});let r=Un(e.config,n,e.scipPath);try{await Jn(e.binary,e.args,{cwd:n,env:e.env,maxBuffer:50*1024*1024}),Bn(e.config,n,e.scipPath)}catch(i){let o=i instanceof Error?i.message:String(i),s=`${e.resolvedBinary} indexer failed: ${o.split(`
6
- `)[0]}`;return t(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{Wn(r)}if(!v(e.scipPath)){let i=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`;return t(`Skipping ${e.language}: ${i}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:i}}}return{language:e.language,scipPath:e.scipPath}}function Jn(e,n,t){return new Promise((r,i)=>{_n(e,[...n],t,o=>{o?i(o):r()})})}async function zn(e,n,t){if(e.length===0)return[];let r=new Array(e.length),i=0,o=Math.max(1,Math.min(e.length,n)),s=Array.from({length:o},async()=>{for(;i<e.length;){let a=i++;r[a]=await t(e[a])}});return await Promise.all(s),r}import{execFileSync as N}from"child_process";import{existsSync as M,readFileSync as Gn}from"fs";import{createRequire as qn}from"module";import{platform as Kn}from"os";import{dirname as he,join as k}from"path";var Xn=qn(import.meta.url);function A(e){return[e.indexerBinary,...e.binaryAliases??[]]}function I(e){let n=A(e);return n.length===1?n[0]:n.join(" or ")}function x(e){for(let n of A(e))if(f(n))return n;return Qn(e)}function _(e){return x(e)!==null||Yn(e)}function Yn(e){return be(e)!==null}function Qn(e){let n=be(e);if(!n)return null;let r=JSON.parse(Gn(n,"utf8")).bin;if(!r)return null;if(typeof r=="string")return k(he(n),r);for(let i of A(e)){let o=r[i];if(o)return k(he(n),o)}return null}function be(e){if(!e.bundledNpmPackage)return null;try{return Xn.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function $(e,n){for(let t of e.projectLocalBinaries??[]){let r=k(n,t);if(M(r))return r}return null}function B(e,n=process.env,t=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||ye(t,n))return n;let r=Zn(t,n);return r?{...n,DOTNET_ROOT:r}:n}function U(e,n){let t=e.installMethods,r=I(e);if(!t?.length)return n(`No auto-install method available for ${r}.`),e.installUrl&&n(`Install manually from: ${e.installUrl}`),!1;for(let i of t)if(f(i.prerequisite)){n(`Installing ${r} via ${i.label}...`);try{N(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=x(e);if(o){let s=o===e.indexerBinary?"":` (using ${o})`;return n(`Successfully installed ${r} via ${i.label}${s}`),!0}n(`${i.label} command completed but ${r} was not found on PATH`)}catch(o){let s=o instanceof Error?o.message:String(o);n(`${i.label} install failed: ${s}`)}}return n(`Could not auto-install ${r}.`),e.installUrl&&n(`Install manually from: ${e.installUrl}`),!1}function Zn(e,n){for(let t of et(n))if(ye(e,{...n,DOTNET_ROOT:t}))return t;return null}function et(e){let n=[],t=e.DOTNET_ROOT;if(t&&M(t)&&n.push(t),Kn()==="darwin"&&f("brew"))try{let r=N("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=k(r,"libexec");M(i)&&!n.includes(i)&&n.push(i)}catch{}return n}function ye(e,n){try{return N(e,["--version"],{stdio:"pipe",env:n}),!0}catch{return!1}}import Et from"better-sqlite3";import{existsSync as jt,readFileSync as Mt,writeFileSync as Nt}from"fs";import{dirname as At,join as _t,resolve as $t}from"path";import{readFileSync as nt,rmSync as tt,statSync as rt,mkdtempSync as it}from"fs";import{cpus as ot,tmpdir as st}from"os";import{join as W}from"path";import{Worker as at}from"worker_threads";function xe(e){return e.length>=8&&Re(e.length)>1}function Se(e){let n=Re(e.vueFiles.length),t=ct(e.vueFiles),r=gt(t,n),i=new URL("./augment-vue-worker.js",import.meta.url),o=it(W(st(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),u=ut(),c=Date.now();try{for(let l=0;l<r.length;l++)new at(i,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:r[l],resultPath:W(o,`${l}.json`),sharedBuffer:s}});for(;Atomics.load(a,0)<r.length;){if(Date.now()-c>u)throw new Error(`Vue reference workers timed out after ${(u/1e3).toFixed(0)}s`);Atomics.wait(a,0,Atomics.load(a,0),100)}let g=r.map((l,p)=>{let d=JSON.parse(nt(W(o,`${p}.json`),"utf-8"));if(!d.ok)throw new Error(`Vue reference worker failed: ${d.error}`);return d.result});return{occurrences:g.flatMap(l=>l.occurrences),skippedReferences:g.reduce((l,p)=>l+p.skippedReferences,0)}}finally{tt(o,{recursive:!0,force:!0})}}function Re(e){let n=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKERS??0),t=Number.isFinite(n)&&n>0?n:Math.min(8,Math.max(1,ot().length-1));return Math.max(1,Math.min(e,t))}function ut(){let e=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:3e5}function ct(e){let n=lt(),t=[];for(let r of e){let i=ve(r),o=Math.max(1,Math.ceil(i/n));for(let s=0;s<o;s++)t.push({fileName:r,startOffset:Math.floor(i*s/o),endOffset:s===o-1?Number.POSITIVE_INFINITY:Math.floor(i*(s+1)/o),countFileSkip:s===0})}return t}function lt(){return Number.POSITIVE_INFINITY}function gt(e,n){let t=Array.from({length:n},()=>({tasks:[],weight:0})),r=e.map(i=>({task:i,weight:pt(i)})).sort((i,o)=>o.weight-i.weight);for(let i of r){let o=t.reduce((s,a)=>a.weight<s.weight?a:s);o.tasks.push(i.task),o.weight+=i.weight}return t.map(i=>i.tasks).filter(i=>i.length>0)}function pt(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,ve(e.fileName)-e.startOffset)}function ve(e){try{return rt(e).size}catch{return 1}}import{createRequire as dt}from"module";import{existsSync as mt,readFileSync as J}from"fs";import{dirname as ke,extname as ft,join as Ie,relative as ht,resolve as bt}from"path";import{pathToFileURL as yt}from"url";function xt(e){e.transaction(()=>{e.prepare(`
1
+ import{a as h,e as O}from"./chunk-LWYIGRHR.js";import{a as ee}from"./chunk-TKDJQ2WD.js";import{a as Q,b as Z}from"./chunk-TMS4JPWY.js";import"./chunk-NN3O7TPH.js";import"./chunk-BJ7OHKB5.js";import{execFileSync as ar}from"child_process";import{closeSync as ur,copyFileSync as cr,existsSync as w,mkdirSync as X,mkdtempSync as lr,openSync as gr,readFileSync as Ue,renameSync as K,rmSync as Y,writeFileSync as We}from"fs";import{basename as C,dirname as f,extname as pr,join as d}from"path";import ze from"better-sqlite3";import{execFileSync as qe}from"child_process";import{existsSync as Xe,readdirSync as Ke,readFileSync as Ye}from"fs";import{extname as v,join as ne}from"path";function y(e){let n=new Set((e.extensions??Q).map(i=>i.toLowerCase()));if(n.size===0)return{scanned:0,inserted:0,existing:0};if(!Xe(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let t=ee(e.projectRoot),r=Qe(e.projectRoot,n).filter(i=>!t.isIgnored(i)),o=new ze(e.dbPath);try{let i=en(o,r),s=o.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
2
+ VALUES (?, ?, NULL, ?)`),u=o.transaction(g=>{let l=0;for(let p of g){if(i.has(p))continue;let m=Ye(ne(e.projectRoot,p),"utf-8"),He=s.run(nn(p),p,m);l+=Number(He.changes)}return l})(r),c={scanned:r.length,inserted:u,existing:r.length-u};return e.onStatus?.(`Augmented SQLite documents with ${u} auxiliary source file${u===1?"":"s"} (${c.existing} already present).`),c}finally{o.close()}}function Qe(e,n){let t=Ze(e,n);if(t)return t;let r=[],o=i=>{let s=i?ne(e,i):e,a;try{a=Ke(s,{withFileTypes:!0})}catch{return}for(let u of a){if(Z.has(u.name))continue;let c=i?`${i}/${u.name}`:u.name;if(u.isDirectory()){o(c);continue}n.has(v(u.name).toLowerCase())&&r.push(c)}};return o(""),r.sort()}function Ze(e,n){try{return qe("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
3
+ `).filter(r=>r&&n.has(v(r).toLowerCase())).sort()}catch{return null}}function en(e,n){let t=new Set,r=500;for(let o=0;o<n.length;o+=r){let i=n.slice(o,o+r),s=e.prepare(`SELECT relative_path FROM documents WHERE relative_path IN (${i.map(()=>"?").join(",")})`).all(...i);for(let a of s)t.add(a.relative_path)}return t}function nn(e){return v(e).toLowerCase()===".vue"?"vue":v(e).replace(/^\./,"").toLowerCase()||"source"}import{execFileSync as tn}from"child_process";import{existsSync as rn,readdirSync as re}from"fs";import{extname as oe,join as ie}from"path";var on=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),sn=[{language:"typescript",files:["tsconfig.json","tsconfig.base.json"],extensions:[".ts",".tsx",".mts",".cts"]},{language:"rust",files:["Cargo.toml"],extensions:[".rs"]},{language:"go",files:["go.mod"],extensions:[".go"]},{language:"java",files:["pom.xml","build.gradle","build.gradle.kts"],extensions:[".java"]},{language:"kotlin",files:["build.gradle.kts"],extensions:[".kt",".kts"]},{language:"scala",files:["build.sbt"],extensions:[".scala"]},{language:"python",files:["pyproject.toml","setup.py","setup.cfg","Pipfile"],extensions:[".py",".pyi"]},{language:"ruby",files:["Gemfile"],extensions:[".rb"]},{language:"cpp",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"]},{language:"c",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".c",".h"]},{language:"csharp",globs:["*.csproj","*.sln"],extensions:[".cs"]},{language:"vb",globs:["*.vbproj"],extensions:[".vb"]},{language:"dart",files:["pubspec.yaml"],extensions:[".dart"]},{language:"php",files:["composer.json"],extensions:[".php"]},{language:"javascript",files:["package.json"],extensions:[".js",".jsx",".mjs",".cjs"]}];function F(e){let n=[],t=an(e),r=gn(e);for(let o of sn){if(un(e,o.files)){n.push(o.language);continue}if(cn(t,o.globs)){n.push(o.language);continue}dn(r,o.extensions)&&n.push(o.language)}return n.includes("typescript")&&te(n,"javascript"),n.includes("cpp")&&!r.has(".c")&&te(n,"c"),n}function an(e){try{return re(e)}catch{return[]}}function un(e,n){return n?.length?n.some(t=>rn(ie(e,t))):!1}function cn(e,n){return n?.length?e.some(t=>n.some(r=>ln(t,r))):!1}function ln(e,n){if(n==="*")return!0;if(!n.includes("*"))return e===n;let[t,r]=n.split("*");return e.startsWith(t??"")&&e.endsWith(r??"")}function gn(e){let n=pn(e);if(n)return n;let t=new Set,r=[e];for(;r.length>0;){let o=r.pop();if(!o)continue;let i;try{i=re(o,{withFileTypes:!0})}catch{continue}for(let s of i){if(s.name.startsWith(".")&&!s.name.endsWith("proj")&&!s.name.endsWith("sln")&&s.isDirectory())continue;let a=ie(o,s.name);if(s.isDirectory()){on.has(s.name)||r.push(a);continue}let u=oe(s.name).toLowerCase();u&&t.add(u)}}return t}function pn(e){try{let n=tn("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}),t=new Set;for(let r of n.split(`
4
+ `)){if(!r)continue;let o=oe(r).toLowerCase();o&&t.add(o)}return t}catch{return null}}function dn(e,n){return n?.length?n.some(t=>e.has(t)):!1}function te(e,n){let t=e.indexOf(n);t!==-1&&e.splice(t,1)}import{existsSync as se,readdirSync as mn}from"fs";import{join as D}from"path";var ue={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:n,indexerBinary:t})=>{let r=["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return n&&r.splice(1,0,"--pnpm-workspaces"),{binary:t,args:r}},markerFiles:["tsconfig.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:n})=>({binary:n,args:["index","--infer-tsconfig","--output",e,"--no-progress-bar"]}),markerFiles:["package.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["pom.xml","build.gradle"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.sbt"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.gradle.kts"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:"rust",indexerBinary:"rust-analyzer",checkCommand:"rust-analyzer --version",indexArgs:({outputPath:e})=>({binary:"rust-analyzer",args:["scip",".","--output",e]}),markerFiles:["Cargo.toml"],installMethods:[{label:"rustup",prerequisite:"rustup",binary:"rustup",args:["component","add","rust-analyzer"]}],installUrl:"https://github.com/rust-lang/rust-analyzer"},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:n})=>({binary:n,args:["index","--output",e,"--project-name","project"]}),markerFiles:["pyproject.toml","setup.py"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","scip-python-plus"]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},ruby:{language:"ruby",indexerBinary:"scip-ruby",checkCommand:"scip-ruby --version",indexArgs:({indexerBinary:e})=>({binary:e,args:["--dir","."]}),defaultOutputPath:"index.scip",markerFiles:["Gemfile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-ruby/releases"},go:{language:"go",indexerBinary:"scip-go",checkCommand:"scip-go --version",indexArgs:({outputPath:e})=>({binary:"scip-go",args:["--output",e]}),markerFiles:["go.mod"],installMethods:[{label:"go install",prerequisite:"go",binary:"go",args:["install","github.com/sourcegraph/scip-go@latest"]}],installUrl:"https://github.com/sourcegraph/scip-go"},cpp:{language:"cpp",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},c:{language:"c",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:["CMakeLists.txt","Makefile"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},csharp:{language:"csharp",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:n})=>({binary:"scip-dotnet",args:["index",ae(e,[".sln",".csproj"])??e,"--output",n,"--working-directory",e]}),markerFiles:["*.csproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},vb:{language:"vb",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:n})=>({binary:"scip-dotnet",args:["index",ae(e,[".sln",".vbproj"])??e,"--output",n,"--working-directory",e]}),markerFiles:["*.vbproj","*.sln"],installMethods:[{label:"dotnet",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},dart:{language:"dart",indexerBinary:"scip-dart",checkCommand:"scip-dart --version",indexArgs:({indexerBinary:e,outputPath:n})=>({binary:e,args:["--output",n]}),markerFiles:["pubspec.yaml"],installMethods:[{label:"dart pub",prerequisite:"dart",binary:"dart",args:["pub","global","activate","scip_dart"]}],installUrl:"https://github.com/Workiva/scip-dart/releases"},php:{language:"php",indexerBinary:"scip-php",projectLocalBinaries:["vendor/davidrjenni/scip-php/bin/scip-php","vendor/bin/scip-php"],checkCommand:"scip-php --version",indexArgs:({projectRoot:e,indexerBinary:n})=>{let t=D(e,"vendor","bin","scip-php"),r=D(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",se(r)?r:se(t)?t:n]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function k(e){return ue[e]}function ae(e,n){let t;try{t=mn(e)}catch{return null}for(let r of t)if(n.some(o=>r.endsWith(o)))return D(e,r);return null}import{readFileSync as fn,writeFileSync as hn}from"fs";import{create as E}from"@bufbuild/protobuf";import{deserializeSCIP as bn,serializeSCIP as yn,DocumentSchema as xn,IndexSchema as Sn,SymbolInformationSchema as Rn}from"@c4312/scip";function ce(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let n=vn(e),t=kn(e.flatMap(o=>o.documents??[])),r=le(e.flatMap(o=>o.externalSymbols??[]));return E(Sn,{metadata:n,documents:t,externalSymbols:r})}function V(e,n){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let t=e.map(o=>bn(fn(o))),r=ce(t);return hn(n,Buffer.from(yn(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function vn(e){let n=e[0]?.metadata;if(!n)return;let t=n.projectRoot;for(let r of e.slice(1)){let o=r.metadata?.projectRoot;if(t&&o&&o!==t)throw new Error(`Cannot merge SCIP indexes with different project roots: ${t} vs ${o}`)}return n}function kn(e){let n=new Map;for(let t of e){let r=n.get(t.relativePath);if(!r){n.set(t.relativePath,t);continue}n.set(t.relativePath,E(xn,{language:r.language||t.language,relativePath:r.relativePath||t.relativePath,occurrences:[...r.occurrences,...t.occurrences],symbols:le([...r.symbols,...t.symbols]),text:Pn(r.text,t.text),positionEncoding:r.positionEncoding||t.positionEncoding}))}return[...n.values()]}function le(e){let n=new Map;for(let t of e){let r=n.get(t.symbol);if(!r){n.set(t.symbol,t);continue}n.set(t.symbol,E(Rn,{symbol:r.symbol,documentation:Ln([...r.documentation,...t.documentation]),relationships:In([...r.relationships,...t.relationships]),kind:r.kind||t.kind,displayName:r.displayName||t.displayName,enclosingSymbol:r.enclosingSymbol||t.enclosingSymbol,signatureDocumentation:r.signatureDocumentation??t.signatureDocumentation}))}return[...n.values()]}function In(e){let n=new Set,t=[];for(let r of e){let o=[r.symbol,r.isReference?"1":"0",r.isImplementation?"1":"0",r.isTypeDefinition?"1":"0",r.isDefinition?"1":"0"].join("|");n.has(o)||(n.add(o),t.push(r))}return t}function Pn(e,n){return e?n?e.length>=n.length?e:n:e:n}function Ln(e){return[...new Set(e)]}import{execFileSync as Cn}from"child_process";import{createHash as wn}from"crypto";import{readdirSync as On,readFileSync as Fn}from"fs";import{join as pe}from"path";function ge(e){return(En(e)??Vn(e)).filter(n=>n&&!de(n)).sort()}function S(e,n={}){return(n.language?ge(e).filter(r=>Dn(r,n.language,n.markerFiles)):ge(e)).map(r=>{let o=pe(e,r);try{let i=Fn(o);return{path:r,size:i.byteLength,hash:wn("sha256").update(i).digest("hex")}}catch{return{path:r,size:-1,hash:"unreadable"}}})}function Dn(e,n,t){let r=e.split("/").at(-1)??e;if(t?.includes(e)||t?.includes(r)||jn.has(r))return!0;let o=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(Mn[n]??[]).includes(o)}function En(e){try{return Cn("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
5
+ `).filter(Boolean)}catch{return null}}function Vn(e){let n=[],t=[""];for(;t.length>0;){let r=t.pop(),o=r?pe(e,r):e,i;try{i=On(o,{withFileTypes:!0})}catch{continue}for(let s of i){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){de(a)||t.push(a);continue}n.push(a)}}return n}function de(e){return e.split("/").some(t=>Tn.has(t))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var Tn=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]),jn=new Set(["package.json","package-lock.json","pnpm-lock.yaml","yarn.lock","bun.lockb","tsconfig.json","tsconfig.base.json","pyproject.toml","setup.py","setup.cfg","Cargo.toml","Cargo.lock","go.mod","go.sum","pom.xml","build.gradle","build.gradle.kts","build.sbt","compile_commands.json","CMakeLists.txt","Makefile","Gemfile","Gemfile.lock","composer.json","composer.lock","pubspec.yaml","pubspec.lock"]),Mn={typescript:[".ts",".tsx",".mts",".cts"],javascript:[".js",".jsx",".mjs",".cjs"],java:[".java"],scala:[".scala"],kotlin:[".kt",".kts"],rust:[".rs"],python:[".py",".pyi"],ruby:[".rb"],go:[".go"],cpp:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"],c:[".c",".h"],csharp:[".cs"],vb:[".vb"],dart:[".dart"],php:[".php"]};import{readFileSync as Nn,writeFileSync as An}from"fs";import{create as me}from"@bufbuild/protobuf";import{deserializeSCIP as _n,DocumentSchema as $n,IndexSchema as Bn,serializeSCIP as Un,SymbolRole as Wn}from"@c4312/scip";function fe(e){let n;try{n=_n(Nn(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let t=Gn(n);return t.removedDefinitionOccurrences>0&&An(e,Buffer.from(Un(t.index))),{removedDefinitionOccurrences:t.removedDefinitionOccurrences,touchedDocuments:t.touchedDocuments}}function Gn(e){let n=new Set;for(let i of e.documents)for(let s of i.symbols)s.symbol&&n.add(s.symbol);for(let i of e.externalSymbols)i.symbol&&n.add(i.symbol);let t=0,r=0,o=[];for(let i of e.documents){let s=i.occurrences.filter(a=>(a.symbolRoles&Wn.Definition)===0||n.has(a.symbol)?!0:(t+=1,!1));if(s.length===i.occurrences.length){o.push(i);continue}r+=1,o.push(me($n,{language:i.language,relativePath:i.relativePath,occurrences:s,symbols:i.symbols,text:i.text,positionEncoding:i.positionEncoding}))}return{index:t===0?e:me(Bn,{metadata:e.metadata,documents:o,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:t,touchedDocuments:r}}import{execFile as Jn}from"child_process";import{existsSync as I,renameSync as j,rmSync as M}from"fs";import{cpus as Hn}from"os";import{join as he}from"path";function zn(e,n,t){if(!e.defaultOutputPath)return;let r=he(n,e.defaultOutputPath);t!==r&&I(r)&&j(r,t)}function qn(e,n,t){if(!e.defaultOutputPath)return null;let r=he(n,e.defaultOutputPath);if(r===t)return null;let o=`${t}.default-output-backup`;return M(o,{force:!0}),I(r)?(j(r,o),{defaultOutputPath:r,backupPath:o}):{defaultOutputPath:r,backupPath:null}}function Xn(e){e&&(M(e.defaultOutputPath,{force:!0}),e.backupPath&&I(e.backupPath)&&j(e.backupPath,e.defaultOutputPath))}function Kn(e,n){if(e<=1)return 1;let t=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),r=Number.isFinite(n)&&n&&n>0?n:Number.isFinite(t)&&t>0?t:Math.min(2,Math.max(1,Hn().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function be(e,n,t,r){let o=e.filter(c=>c.config.defaultOutputPath),i=e.filter(c=>!c.config.defaultOutputPath),s=[],a=Kn(i.length,r),u=await Qn(i,a,c=>T(c,n,t));if(a>1){let c=new Map;for(let g of u.filter(l=>l.skipped)){let l=i.find(p=>p.language===g.language);l&&(t(`Retrying ${l.language} indexer serially after parallel failure...`),c.set(l.language,await T(l,n,t)))}s.push(...u.map(g=>c.get(g.language)??g))}else s.push(...u);for(let c of o)s.push(await T(c,n,t));return s.sort((c,g)=>e.findIndex(l=>l.language===c.language)-e.findIndex(l=>l.language===g.language))}async function T(e,n,t){t(`Indexing ${e.language} with ${e.resolvedBinary}...`),M(e.scipPath,{force:!0});let r=qn(e.config,n,e.scipPath);try{await Yn(e.binary,e.args,{cwd:n,env:e.env,maxBuffer:50*1024*1024}),zn(e.config,n,e.scipPath)}catch(o){let i=o instanceof Error?o.message:String(o),s=`${e.resolvedBinary} indexer failed: ${i.split(`
6
+ `)[0]}`;return t(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{Xn(r)}if(!I(e.scipPath)){let o=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`;return t(`Skipping ${e.language}: ${o}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:o}}}return{language:e.language,scipPath:e.scipPath}}function Yn(e,n,t){return new Promise((r,o)=>{Jn(e,[...n],t,i=>{i?o(i):r()})})}async function Qn(e,n,t){if(e.length===0)return[];let r=new Array(e.length),o=0,i=Math.max(1,Math.min(e.length,n)),s=Array.from({length:i},async()=>{for(;o<e.length;){let a=o++;r[a]=await t(e[a])}});return await Promise.all(s),r}import{execFileSync as A}from"child_process";import{existsSync as N,readFileSync as Zn}from"fs";import{createRequire as et}from"module";import{platform as nt}from"os";import{dirname as ye,join as P}from"path";var tt=et(import.meta.url);function _(e){return[e.indexerBinary,...e.binaryAliases??[]]}function L(e){let n=_(e);return n.length===1?n[0]:n.join(" or ")}function R(e){for(let n of _(e))if(h(n))return n;return ot(e)}function $(e){return R(e)!==null||rt(e)}function rt(e){return xe(e)!==null}function ot(e){let n=xe(e);if(!n)return null;let r=JSON.parse(Zn(n,"utf8")).bin;if(!r)return null;if(typeof r=="string")return P(ye(n),r);for(let o of _(e)){let i=r[o];if(i)return P(ye(n),i)}return null}function xe(e){if(!e.bundledNpmPackage)return null;try{return tt.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function B(e,n){for(let t of e.projectLocalBinaries??[]){let r=P(n,t);if(N(r))return r}return null}function U(e,n=process.env,t=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Se(t,n))return n;let r=it(t,n);return r?{...n,DOTNET_ROOT:r}:n}function W(e,n){let t=e.installMethods,r=L(e);if(!t?.length)return n(`No auto-install method available for ${r}.`),e.installUrl&&n(`Install manually from: ${e.installUrl}`),!1;for(let o of t)if(h(o.prerequisite)){n(`Installing ${r} via ${o.label}...`);try{A(o.binary,o.args,{stdio:"inherit",timeout:3e5,env:process.env});let i=R(e);if(i){let s=i===e.indexerBinary?"":` (using ${i})`;return n(`Successfully installed ${r} via ${o.label}${s}`),!0}n(`${o.label} command completed but ${r} was not found on PATH`)}catch(i){let s=i instanceof Error?i.message:String(i);n(`${o.label} install failed: ${s}`)}}return n(`Could not auto-install ${r}.`),e.installUrl&&n(`Install manually from: ${e.installUrl}`),!1}function it(e,n){for(let t of st(n))if(Se(e,{...n,DOTNET_ROOT:t}))return t;return null}function st(e){let n=[],t=e.DOTNET_ROOT;if(t&&N(t)&&n.push(t),nt()==="darwin"&&h("brew"))try{let r=A("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),o=P(r,"libexec");N(o)&&!n.includes(o)&&n.push(o)}catch{}return n}function Se(e,n){try{return A(e,["--version"],{stdio:"pipe",env:n}),!0}catch{return!1}}import $t from"better-sqlite3";import{existsSync as Bt,readFileSync as Ut,writeFileSync as Wt}from"fs";import{dirname as Gt,join as Jt,resolve as Ht}from"path";import{readFileSync as at,rmSync as ut,statSync as ct,mkdtempSync as lt}from"fs";import{cpus as gt,tmpdir as pt}from"os";import{join as G}from"path";import{Worker as dt}from"worker_threads";function Re(e){return e.length>=8&&ke(e.length)>1}function ve(e){let n=ke(e.vueFiles.length),t=ft(e.vueFiles),r=bt(t,n),o=new URL("./augment-vue-worker.js",import.meta.url),i=lt(G(pt(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),u=mt(),c=Date.now();try{for(let l=0;l<r.length;l++)new dt(o,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:r[l],resultPath:G(i,`${l}.json`),sharedBuffer:s}});for(;Atomics.load(a,0)<r.length;){if(Date.now()-c>u)throw new Error(`Vue reference workers timed out after ${(u/1e3).toFixed(0)}s`);Atomics.wait(a,0,Atomics.load(a,0),100)}let g=r.map((l,p)=>{let m=JSON.parse(at(G(i,`${p}.json`),"utf-8"));if(!m.ok)throw new Error(`Vue reference worker failed: ${m.error}`);return m.result});return{occurrences:g.flatMap(l=>l.occurrences),skippedReferences:g.reduce((l,p)=>l+p.skippedReferences,0)}}finally{ut(i,{recursive:!0,force:!0})}}function ke(e){let n=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKERS??0),t=Number.isFinite(n)&&n>0?n:Math.min(8,Math.max(1,gt().length-1));return Math.max(1,Math.min(e,t))}function mt(){let e=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:3e5}function ft(e){let n=ht(),t=[];for(let r of e){let o=Ie(r),i=Math.max(1,Math.ceil(o/n));for(let s=0;s<i;s++)t.push({fileName:r,startOffset:Math.floor(o*s/i),endOffset:s===i-1?Number.POSITIVE_INFINITY:Math.floor(o*(s+1)/i),countFileSkip:s===0})}return t}function ht(){return Number.POSITIVE_INFINITY}function bt(e,n){let t=Array.from({length:n},()=>({tasks:[],weight:0})),r=e.map(o=>({task:o,weight:yt(o)})).sort((o,i)=>i.weight-o.weight);for(let o of r){let i=t.reduce((s,a)=>a.weight<s.weight?a:s);i.tasks.push(o.task),i.weight+=o.weight}return t.map(o=>o.tasks).filter(o=>o.length>0)}function yt(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,Ie(e.fileName)-e.startOffset)}function Ie(e){try{return ct(e).size}catch{return 1}}import{createRequire as xt}from"module";import{existsSync as St,readFileSync as H}from"fs";import{dirname as Pe,extname as Rt,join as Le,relative as vt,resolve as kt}from"path";import{pathToFileURL as It}from"url";function Pt(e){e.transaction(()=>{e.prepare(`
7
7
  DELETE FROM mentions
8
8
  WHERE chunk_id IN (
9
9
  SELECT c.id
@@ -18,12 +18,12 @@ import{a as f,e as L}from"./chunk-LWYIGRHR.js";import{a as Z}from"./chunk-TKDJQ2
18
18
  FROM documents
19
19
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
20
20
  )
21
- `).run()})()}function Pe(e,n){return e.prepare(`
21
+ `).run()})()}function Ce(e,n){return e.prepare(`
22
22
  SELECT relative_path AS relativePath
23
23
  FROM documents
24
24
  WHERE language = 'vue' OR relative_path LIKE '%.vue'
25
25
  ORDER BY relative_path
26
- `).all().map(r=>bt(n,r.relativePath))}function Ce(e,n){let{vueCore:t,ts:r,volarTs:i}=St(e),{parsed:o,vueOptions:s}=Rt(t,r,n),a=ke(n),u=t.createVueLanguagePlugin(r,o.options,s,d=>d),c=vt(t,r,u),g=kt(a,o),{languageServiceHost:l}=i.createLanguageServiceHost(r,r.sys,c,d=>d,g),p=r.createLanguageService(l);return{ts:r,language:c,languageService:p,fileNames:o.fileNames,configDir:a}}function St(e){let n=dt(yt(Ie(e,"package.json")).href);return{vueCore:H(n,"@vue/language-core",e),ts:H(n,"typescript",e),volarTs:H(n,"@volar/typescript",e)}}function Rt(e,n,t){let r=n.readConfigFile(t,n.sys.readFile);if(r.error||!r.config)throw new Error(`Failed to read ${t}`);let o=e.createParsedCommandLine(n,n.sys,t).vueOptions;return typeof e.createGlobalTypesWriter=="function"&&(o.globalTypesPath=e.createGlobalTypesWriter(o,n.sys.writeFile)),{parsed:n.parseJsonConfigFileContent(r.config,n.sys,ke(t),void 0,t,void 0,e.getAllExtensions(o).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:n.ScriptKind.Deferred}))),vueOptions:o}}function vt(e,n,t){let r={},i=e.createLanguage([t],new Map,o=>{if(!mt(o))return;let s=J(o,"utf-8");r.current?.scripts.set(o,n.ScriptSnapshot.fromString(s),t.getLanguageId(o)??Ot(o))});return r.current=i,i}function kt(e,n){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>n.options,getScriptFileNames:()=>n.fileNames,getProjectReferences:()=>n.projectReferences,getProjectVersion:()=>"0"}}function H(e,n,t){try{return e(n)}catch(r){throw(typeof r=="object"&&r!==null&&"code"in r?r.code:null)==="MODULE_NOT_FOUND"?new Error(`Vue augmentation requires ${n} to be installed in ${t}. Install Vue/Volar dependencies for that project, then rerun augment-vue.`,{cause:r}):r}}function Le(e,n,t){let r=It(e);return i=>{let o=h(n,i.fileName),s=t.get(i.fileName);if(!s)return null;let a=t.positionAt(s,i.textSpan.start),u=r.get(o);if(!u)return null;let c=u.containingByLine.get(a.line);return c!==void 0?c:Pt(u.starts,a.line,2)}}function It(e){let n=e.prepare(`
26
+ `).all().map(r=>kt(n,r.relativePath))}function we(e,n){let{vueCore:t,ts:r,volarTs:o}=Lt(e),{parsed:i,vueOptions:s}=Ct(t,r,n),a=Pe(n),u=t.createVueLanguagePlugin(r,i.options,s,m=>m),c=wt(t,r,u),g=Ot(a,i),{languageServiceHost:l}=o.createLanguageServiceHost(r,r.sys,c,m=>m,g),p=r.createLanguageService(l);return{ts:r,language:c,languageService:p,fileNames:i.fileNames,configDir:a}}function Lt(e){let n=xt(It(Le(e,"package.json")).href);return{vueCore:J(n,"@vue/language-core",e),ts:J(n,"typescript",e),volarTs:J(n,"@volar/typescript",e)}}function Ct(e,n,t){let r=n.readConfigFile(t,n.sys.readFile);if(r.error||!r.config)throw new Error(`Failed to read ${t}`);let i=e.createParsedCommandLine(n,n.sys,t).vueOptions;return typeof e.createGlobalTypesWriter=="function"&&(i.globalTypesPath=e.createGlobalTypesWriter(i,n.sys.writeFile)),{parsed:n.parseJsonConfigFileContent(r.config,n.sys,Pe(t),void 0,t,void 0,e.getAllExtensions(i).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:n.ScriptKind.Deferred}))),vueOptions:i}}function wt(e,n,t){let r={},o=e.createLanguage([t],new Map,i=>{if(!St(i))return;let s=H(i,"utf-8");r.current?.scripts.set(i,n.ScriptSnapshot.fromString(s),t.getLanguageId(i)??jt(i))});return r.current=o,o}function Ot(e,n){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>n.options,getScriptFileNames:()=>n.fileNames,getProjectReferences:()=>n.projectReferences,getProjectVersion:()=>"0"}}function J(e,n,t){try{return e(n)}catch(r){throw(typeof r=="object"&&r!==null&&"code"in r?r.code:null)==="MODULE_NOT_FOUND"?new Error(`Vue augmentation requires ${n} to be installed in ${t}. Install Vue/Volar dependencies for that project, then rerun augment-vue.`,{cause:r}):r}}function Oe(e,n,t){let r=Ft(e);return o=>{let i=b(n,o.fileName),s=t.get(o.fileName);if(!s)return null;let a=t.positionAt(s,o.textSpan.start),u=r.get(i);if(!u)return null;let c=u.containingByLine.get(a.line);return c!==void 0?c:Dt(u.starts,a.line,2)}}function Ft(e){let n=e.prepare(`
27
27
  SELECT
28
28
  d.relative_path AS relativePath,
29
29
  der.start_line AS startLine,
@@ -32,23 +32,23 @@ import{a as f,e as L}from"./chunk-LWYIGRHR.js";import{a as Z}from"./chunk-TKDJQ2
32
32
  FROM defn_enclosing_ranges der
33
33
  JOIN documents d ON d.id = der.document_id
34
34
  ORDER BY d.relative_path, (der.end_line - der.start_line) DESC
35
- `).all(),t=new Map;for(let r of n){let i=t.get(r.relativePath);i||(i={containingByLine:new Map,starts:[]},t.set(r.relativePath,i)),i.starts.push({line:r.startLine,symbolId:r.symbolId});for(let o=r.startLine;o<=r.endLine;o++)i.containingByLine.set(o,r.symbolId)}for(let r of t.values())r.starts.sort((i,o)=>i.line-o.line);return t}function Pt(e,n,t){let r=0,i=e.length-1;for(;r<=i;){let s=Math.floor((r+i)/2);e[s].line<n?r=s+1:i=s-1}let o=null;for(let s of[i,r]){let a=e[s];if(!a)continue;let u=Math.abs(a.line-n);u>t||(!o||u<o.distance)&&(o={distance:u,symbolId:a.symbolId})}return o?.symbolId??null}function we(e,n,t){let r=Tt(n),i=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),o=e.prepare(`
35
+ `).all(),t=new Map;for(let r of n){let o=t.get(r.relativePath);o||(o={containingByLine:new Map,starts:[]},t.set(r.relativePath,o)),o.starts.push({line:r.startLine,symbolId:r.symbolId});for(let i=r.startLine;i<=r.endLine;i++)o.containingByLine.set(i,r.symbolId)}for(let r of t.values())r.starts.sort((o,i)=>o.line-i.line);return t}function Dt(e,n,t){let r=0,o=e.length-1;for(;r<=o;){let s=Math.floor((r+o)/2);e[s].line<n?r=s+1:o=s-1}let i=null;for(let s of[o,r]){let a=e[s];if(!a)continue;let u=Math.abs(a.line-n);u>t||(!i||u<i.distance)&&(i={distance:u,symbolId:a.symbolId})}return i?.symbolId??null}function Fe(e,n,t){let r=At(n),o=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),i=e.prepare(`
36
36
  INSERT OR IGNORE INTO global_symbols (symbol, display_name, kind, documentation)
37
37
  VALUES (?, ?, ?, ?)
38
- `),s=0,a=new Map;return e.transaction(()=>{for(let c of t){let g=h(n,c),l=Ne(r.name,r.version,g);o.run(l,"default",7,`Vue component|${g}`);let p=Ft(i,r,n,c);p&&(s++,a.set(c,p))}})(),{get(c){return a.get(c)??null},syntheticSymbols:s}}function Oe(e,n,t,r,i){return e.transaction(()=>(xt(e),Ct(e,n,t,r),Lt(e,i)))()}function Ct(e,n,t,r){let i=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),o=e.prepare(`
38
+ `),s=0,a=new Map;return e.transaction(()=>{for(let c of t){let g=b(n,c),l=_e(r.name,r.version,g);i.run(l,"default",7,`Vue component|${g}`);let p=_t(o,r,n,c);p&&(s++,a.set(c,p))}})(),{get(c){return a.get(c)??null},syntheticSymbols:s}}function De(e,n,t,r,o){return e.transaction(()=>(Pt(e),Et(e,n,t,r),Vt(e,o)))()}function Et(e,n,t,r){let o=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),i=e.prepare(`
39
39
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
40
40
  VALUES (?, ?, ?, ?, X'00')
41
41
  `),s=e.prepare(`
42
42
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
43
43
  VALUES (?, ?, 1)
44
- `);for(let a of t){let u=r.get(a);if(!u)continue;let c=h(n,a),g=i.get(c);if(!g)continue;let l=o.run(g.id,-1,0,0);s.run(Number(l.lastInsertRowid),u)}}function De(e,n,t,r,i){if(e.fileName.endsWith(".vue")){let o=r.language.scripts.get(e.fileName),s=o?.generated?.languagePlugin.typescript?.getServiceScript(o.generated.root)?.code;if(o&&s){let a=r.language.maps.get(s,o);if(z(a,e.textSpan.start)!==null)return t.get(e.fileName)}return e.fileName.startsWith(i)?t.get(e.fileName):null}return n(e)}function Ve(e){let n=new Set,t=[];for(let r of e){let i=Te(r);n.has(i)||(n.add(i),t.push(r))}return t}function Te(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function Lt(e,n){let t=Vt(e,[...new Set(n.map(u=>u.sourceFile))]),r=e.prepare(`
44
+ `);for(let a of t){let u=r.get(a);if(!u)continue;let c=b(n,a),g=o.get(c);if(!g)continue;let l=i.run(g.id,-1,0,0);s.run(Number(l.lastInsertRowid),u)}}function Ee(e,n,t,r,o){if(e.fileName.endsWith(".vue")){let i=r.language.scripts.get(e.fileName),s=i?.generated?.languagePlugin.typescript?.getServiceScript(i.generated.root)?.code;if(i&&s){let a=r.language.maps.get(s,i);if(z(a,e.textSpan.start)!==null)return t.get(e.fileName)}return e.fileName.startsWith(o)?t.get(e.fileName):null}return n(e)}function Ve(e){let n=new Set,t=[];for(let r of e){let o=Te(r);n.has(o)||(n.add(o),t.push(r))}return t}function Te(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function Vt(e,n){let t=Nt(e,[...new Set(n.map(u=>u.sourceFile))]),r=e.prepare(`
45
45
  INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
46
46
  VALUES (?, ?, ?, ?, X'00')
47
- `),i=e.prepare(`
47
+ `),o=e.prepare(`
48
48
  INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
49
49
  VALUES (?, ?, 0)
50
- `),o=new Set,s=0,a=0;for(let u of n){let c=Te(u);if(o.has(c))continue;o.add(c);let g=t.get(u.sourceFile);if(!g)continue;let l=r.run(g,a++,u.sourceLine,u.sourceLine),p=i.run(Number(l.lastInsertRowid),u.symbolId);s+=Number(p.changes)}return s}function*Fe(e){let n=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,t=new Set(["script","setup","template","style","lang","scoped","true","false","null","undefined","const","let","var","import","from","export","return","if","else","for","while","function","class","type","interface","as","await","async"]),r;for(;r=n.exec(e);){let i=r[0];t.has(i)||(yield{text:i,start:r.index,end:r.index+i.length})}}function Ee(e,n){for(let[t]of e.toGeneratedLocation(n,r=>!!r.navigation))return t;return null}function z(e,n){let t=e;for(let[r]of t.toSourceLocation(n,i=>!!i.navigation))return r;return null}function wt(e,n){let t=0,r=e.lineStarts.length-1;for(;t<=r;){let o=Math.floor((t+r)/2);e.lineStarts[o]<=n?t=o+1:r=o-1}let i=Math.max(0,r);return{line:i,character:n-e.lineStarts[i]}}function je(e,n){return h(e,n).startsWith("node_modules/")}function h(e,n){return ht(e,n).replaceAll("\\","/")}function Ot(e){switch(ft(e)){case".vue":return"vue";case".tsx":return"typescriptreact";case".ts":case".mts":case".cts":return"typescript";case".jsx":return"javascriptreact";case".js":case".mjs":case".cjs":return"javascript";case".json":return"json";default:return"typescript"}}function Me(){let e=new Map;return{get(n){if(e.has(n))return e.get(n)??null;try{let t=J(n,"utf-8"),r={text:t,lineStarts:Dt(t)};return e.set(n,r),r}catch{return e.set(n,null),null}},positionAt:wt}}function Dt(e){let n=[0];for(let t=0;t<e.length;t++)e.charCodeAt(t)===10&&n.push(t+1);return n}function Vt(e,n){let t=new Map,r=500;for(let i=0;i<n.length;i+=r){let o=n.slice(i,i+r),s=e.prepare(`SELECT id, relative_path AS relativePath FROM documents WHERE relative_path IN (${o.map(()=>"?").join(",")})`).all(...o);for(let a of s)t.set(a.relativePath,a.id)}return t}function Tt(e){try{let n=JSON.parse(J(Ie(e,"package.json"),"utf-8"));return{name:n.name??"workspace",version:n.version??"0.0.0"}}catch{return{name:"workspace",version:"0.0.0"}}}function Ft(e,n,t,r){let i=h(t,r),o=Ne(n.name,n.version,i);return e.get(o)?.id??null}function Ne(e,n,t){let r=t.split("/").map(i=>`\`${i.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${n} ${r}/default.`}function Bt(e){y({projectRoot:e.projectRoot,dbPath:e.dbPath});let n=$t(e.projectRoot,e.tsconfig);if(!jt(n))throw new Error(`Vue tsconfig not found at ${n}`);let t=new Et(e.dbPath);try{let r=Pe(t,e.projectRoot),i=_t(At(e.dbPath),"augment-vue-meta.json"),o=Ae(t,e.projectRoot,e.tsconfig),s=Ut(i,o,e.onStatus);if(s)return s;let a=Wt({db:t,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:n,vueFiles:r,onStatus:e.onStatus});return zt(i,Ae(t,e.projectRoot,e.tsconfig),a),a}finally{t.close()}}function Ut(e,n,t){let r=Jt(e,n);return r&&t?.(`Vue references unchanged; reused ${r.resolvedReferences} cached resolved references.`),r}function Wt(e){let n=we(e.db,e.projectRoot,e.vueFiles),t=Ht(e,n),r=Ve(t.occurrences),i=Oe(e.db,e.projectRoot,e.vueFiles,n,r),o={vueFiles:e.vueFiles.length,resolvedReferences:r.length,insertedMentions:i,skippedReferences:t.skippedReferences,syntheticSymbols:n.syntheticSymbols};return e.onStatus?.(`Resolved ${o.resolvedReferences} Vue references with Volar; inserted ${o.insertedMentions} mentions.`),o}function Ht(e,n){if(xe(e.vueFiles))return Se({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles});let t=Gt({db:e.db,projectRoot:e.projectRoot,configPath:e.configPath,vueSymbolLookup:n});return qt({...t,vueFiles:t.context.fileNames.filter(r=>r.endsWith(".vue"))})}function Jt(e,n){try{let t=JSON.parse(Mt(e,"utf-8"));return JSON.stringify(t.fingerprint)===JSON.stringify(n)?t.result:null}catch{return null}}function zt(e,n,t){Nt(e,JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:n,result:t},null,2)+`
51
- `)}function Ae(e,n,t){let r=e.prepare(`
50
+ `),i=new Set,s=0,a=0;for(let u of n){let c=Te(u);if(i.has(c))continue;i.add(c);let g=t.get(u.sourceFile);if(!g)continue;let l=r.run(g,a++,u.sourceLine,u.sourceLine),p=o.run(Number(l.lastInsertRowid),u.symbolId);s+=Number(p.changes)}return s}function*je(e){let n=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,t=new Set(["script","setup","template","style","lang","scoped","true","false","null","undefined","const","let","var","import","from","export","return","if","else","for","while","function","class","type","interface","as","await","async"]),r;for(;r=n.exec(e);){let o=r[0];t.has(o)||(yield{text:o,start:r.index,end:r.index+o.length})}}function Me(e,n){for(let[t]of e.toGeneratedLocation(n,r=>!!r.navigation))return t;return null}function z(e,n){let t=e;for(let[r]of t.toSourceLocation(n,o=>!!o.navigation))return r;return null}function Tt(e,n){let t=0,r=e.lineStarts.length-1;for(;t<=r;){let i=Math.floor((t+r)/2);e.lineStarts[i]<=n?t=i+1:r=i-1}let o=Math.max(0,r);return{line:o,character:n-e.lineStarts[o]}}function Ne(e,n){return b(e,n).startsWith("node_modules/")}function b(e,n){return vt(e,n).replaceAll("\\","/")}function jt(e){switch(Rt(e)){case".vue":return"vue";case".tsx":return"typescriptreact";case".ts":case".mts":case".cts":return"typescript";case".jsx":return"javascriptreact";case".js":case".mjs":case".cjs":return"javascript";case".json":return"json";default:return"typescript"}}function Ae(){let e=new Map;return{get(n){if(e.has(n))return e.get(n)??null;try{let t=H(n,"utf-8"),r={text:t,lineStarts:Mt(t)};return e.set(n,r),r}catch{return e.set(n,null),null}},positionAt:Tt}}function Mt(e){let n=[0];for(let t=0;t<e.length;t++)e.charCodeAt(t)===10&&n.push(t+1);return n}function Nt(e,n){let t=new Map,r=500;for(let o=0;o<n.length;o+=r){let i=n.slice(o,o+r),s=e.prepare(`SELECT id, relative_path AS relativePath FROM documents WHERE relative_path IN (${i.map(()=>"?").join(",")})`).all(...i);for(let a of s)t.set(a.relativePath,a.id)}return t}function At(e){try{let n=JSON.parse(H(Le(e,"package.json"),"utf-8"));return{name:n.name??"workspace",version:n.version??"0.0.0"}}catch{return{name:"workspace",version:"0.0.0"}}}function _t(e,n,t,r){let o=b(t,r),i=_e(n.name,n.version,o);return e.get(i)?.id??null}function _e(e,n,t){let r=t.split("/").map(o=>`\`${o.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${n} ${r}/default.`}function zt(e){y({projectRoot:e.projectRoot,dbPath:e.dbPath});let n=Ht(e.projectRoot,e.tsconfig);if(!Bt(n))throw new Error(`Vue tsconfig not found at ${n}`);let t=new $t(e.dbPath);try{let r=Ce(t,e.projectRoot),o=Jt(Gt(e.dbPath),"augment-vue-meta.json"),i=$e(t,e.projectRoot,e.tsconfig),s=qt(o,i,e.onStatus);if(s)return s;let a=Xt({db:t,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:n,vueFiles:r,onStatus:e.onStatus});return Qt(o,$e(t,e.projectRoot,e.tsconfig),a),a}finally{t.close()}}function qt(e,n,t){let r=Yt(e,n);return r&&t?.(`Vue references unchanged; reused ${r.resolvedReferences} cached resolved references.`),r}function Xt(e){let n=Fe(e.db,e.projectRoot,e.vueFiles),t=Kt(e,n),r=Ve(t.occurrences),o=De(e.db,e.projectRoot,e.vueFiles,n,r),i={vueFiles:e.vueFiles.length,resolvedReferences:r.length,insertedMentions:o,skippedReferences:t.skippedReferences,syntheticSymbols:n.syntheticSymbols};return e.onStatus?.(`Resolved ${i.resolvedReferences} Vue references with Volar; inserted ${i.insertedMentions} mentions.`),i}function Kt(e,n){if(Re(e.vueFiles))return ve({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles});let t=Zt({db:e.db,projectRoot:e.projectRoot,configPath:e.configPath,vueSymbolLookup:n});return er({...t,vueFiles:t.context.fileNames.filter(r=>r.endsWith(".vue"))})}function Yt(e,n){try{let t=JSON.parse(Ut(e,"utf-8"));return JSON.stringify(t.fingerprint)===JSON.stringify(n)?t.result:null}catch{return null}}function Qt(e,n,t){Wt(e,JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:n,result:t},null,2)+`
51
+ `)}function $e(e,n,t){let r=e.prepare(`
52
52
  SELECT
53
53
  (SELECT COUNT(*) FROM documents) AS documents,
54
54
  (SELECT COUNT(*) FROM global_symbols) AS symbols,
@@ -57,13 +57,13 @@ import{a as f,e as L}from"./chunk-LWYIGRHR.js";import{a as Z}from"./chunk-TKDJQ2
57
57
  (SELECT COUNT(*) FROM defn_enclosing_ranges) AS ranges,
58
58
  (SELECT MAX(id) FROM chunks) AS maxChunkId,
59
59
  (SELECT MAX(id) FROM global_symbols) AS maxSymbolId
60
- `).get();return{version:2,tsconfig:t,files:R(n),db:r}}function Gt(e){let n=Me();return{projectRoot:e.projectRoot,context:Ce(e.projectRoot,e.configPath),symbolLookup:Le(e.db,e.projectRoot,n),vueSymbolLookup:e.vueSymbolLookup,sourceReader:n}}function qt(e){let n=[],t=0,r=e.tasks??e.vueFiles.map(i=>({fileName:i,startOffset:0,endOffset:Number.POSITIVE_INFINITY,countFileSkip:!0}));for(let i of r){let o=Kt(e,i);n.push(...o.occurrences),t+=o.skippedReferences}return{occurrences:n,skippedReferences:t}}function Kt(e,n){let t=e.context.language.scripts.get(n.fileName),r=t?.generated?.languagePlugin.typescript?.getServiceScript(t.generated.root)?.code;if(!t||!r)return{occurrences:[],skippedReferences:n.countFileSkip?1:0};let i=e.sourceReader.get(n.fileName);if(!i)return{occurrences:[],skippedReferences:n.countFileSkip?1:0};let o=e.context.language.maps.get(r,t),s=h(e.projectRoot,n.fileName),a=[...Fe(i.text)],u={tokens:a.filter(c=>c.start>=n.startOffset&&c.start<n.endOffset),tokenByStart:new Map(a.map(c=>[c.start,c])),tokenTextCounts:Qt(a),processedStarts:new Set};return Xt({...e,fileName:n.fileName,sourceInfo:i,sourceFile:s,map:o,tokenContext:u})}function Xt(e){let n=[],t=0;for(let r of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(r.start))continue;let i=Ee(e.map,r.start);if(i===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,i+1)??[]).find(u=>!je(e.projectRoot,u.fileName));if(!s){t++;continue}let a=De(s,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(a===null){t++;continue}_e(n,e.sourceReader,e.sourceInfo,e.sourceFile,r,a),e.tokenContext.processedStarts.add(r.start),Yt(n,e,r,i,a)}return{occurrences:n,skippedReferences:t}}function Yt(e,n,t,r,i){if(!((n.tokenContext.tokenTextCounts.get(t.text)??0)<=1))for(let o of Zt(n.context.languageService,n.fileName,r+1,n.map,t,n.tokenContext.tokenByStart)){if(n.tokenContext.processedStarts.has(o))continue;let s=n.tokenContext.tokenByStart.get(o);s&&(_e(e,n.sourceReader,n.sourceInfo,n.sourceFile,s,i),n.tokenContext.processedStarts.add(o))}}function _e(e,n,t,r,i,o){let s=n.positionAt(t,i.start);e.push({sourceFile:r,sourceLine:s.line,sourceStartChar:s.character,sourceEndChar:s.character+i.text.length,symbolId:o})}function Qt(e){let n=new Map;for(let t of e)n.set(t.text,(n.get(t.text)??0)+1);return n}function Zt(e,n,t,r,i,o){let s=e.getDocumentHighlights?.(n,t,[n])??[],a=[];for(let u of s)if(u.fileName===n)for(let c of u.highlightSpans){let g=er(r,c.textSpan.start,o,i.text);g!==null&&a.push(g)}return a}function er(e,n,t,r){let i=t.get(n);if(i?.text===r)return i.start;let o=z(e,n);if(o===null)return null;let s=t.get(o);return s?.text===r?s.start:null}async function Ui(e){let{projectRoot:n,maxHeapMb:t=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,o=ar(e),s=Date.now();$e(b(o.outputScip),{recursive:!0}),$e(b(o.outputDb),{recursive:!0});let a=e.languages??w(n);if(a.length===0)throw new Error("No supported languages detected in this project. Looked for: tsconfig.json, Cargo.toml, go.mod, pyproject.toml, etc.");r(`Detected languages: ${a.join(", ")}`);let u=kr(n,a,{pnpmWorkspaces:e.pnpmWorkspaces}),c=Rr(m(b(o.outputDb),"index.lock")),g=null;try{let l=ur({opts:e,paths:o,languages:a,fingerprint:u,start:s,onStatus:r});if(l)return l;dr(i,r);let p=cr(o);return g=p.runDir,await lr({opts:e,languages:a,projectRoot:n,paths:o,tempPaths:p,fingerprint:u,start:s,maxHeapMb:t,skipAutoInstall:i,onStatus:r})}finally{g&&X(g,{recursive:!0,force:!0}),c()}}function ar(e){let n=e.outputScip??m(e.projectRoot,"index.scip"),t=e.outputDb??m(e.projectRoot,"index.db");return{outputScip:n,outputDb:t,metaPath:m(b(t),"meta.json")}}function ur(e){if(e.opts.skipIfUnchanged===!1||!q(e.paths.outputScip)||!q(e.paths.outputDb)||!Ir(e.paths.metaPath,e.fingerprint))return null;y({projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let n=Date.now()-e.start;return e.onStatus(`Index unchanged; reused existing SQLite index in ${(n/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:n,reused:!0,skipped:[]}}function cr(e){let n=rr(m(b(e.outputDb),"reindex-"));return{runDir:n,tempOutputScip:m(n,C(e.outputScip)),tempOutputDb:m(n,C(e.outputDb)),tempMetaPath:m(n,C(e.metaPath))}}async function lr(e){let n={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:t,skippedLanguages:r}=await gr(e,n);pr(e,n,t,r);let i=Date.now()-e.start;return e.onStatus(`Done in ${(i/1e3).toFixed(1)}s`),{languages:t.map(o=>o.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:i,reused:!1,skipped:r}}async function gr(e,n){let{preparedRuns:t,skippedLanguages:r}=mr({languages:e.languages,tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:n,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,onStatus:e.onStatus}),i=await fe(t,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:o}=hr(i,r);return br(o,r,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:o,skippedLanguages:r}}function pr(e,n,t,r){yr(t,e.tempPaths.tempOutputScip,e.onStatus),xr(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,n,e.onStatus),y({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),Pr(e.tempPaths.tempMetaPath,{version:2,status:r.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.fingerprint,requestedLanguages:e.languages,indexedLanguages:t.map(i=>i.language),skipped:[...r]}),vr({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath})}function dr(e,n){if(!f("scip")){if(e)throw new Error(`The scip CLI is required but not found on PATH.
61
- Install from: https://github.com/sourcegraph/scip/releases`);if(n("scip CLI not found on PATH. Attempting auto-install..."),!L(n))throw new Error(`The scip CLI is required but could not be installed.
62
- Install manually from: https://github.com/sourcegraph/scip/releases`)}}function mr(e){let n=[],t=[],r=e.languages.map((i,o)=>({language:i,scipPath:e.languages.length>1?Sr(e.tempOutputScip,i,o):e.tempOutputScip}));for(let{language:i,scipPath:o}of r){let s=fr({...e,language:i,scipPath:o});"skipped"in s?t.push(s.skipped):n.push(s.prepared)}return{preparedRuns:n,skippedLanguages:t}}function fr(e){let n=D(e.language),t=I(n),r=$(n,e.projectRoot);if(!r&&!_(n)){if(e.skipAutoInstall){let a=`${t} not found on PATH (auto-install disabled). ${n.installUrl??""}`.trim();return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}if(e.onStatus(`${t} not found. Attempting auto-install...`),!U(n,e.onStatus)){let a=`${t} could not be auto-installed. ${n.installUrl?`Install manually from ${n.installUrl}`:`Install ${t} and put it on PATH.`}`;return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}}let i=r??x(n);if(!i){let a=`${t} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}let{binary:o,args:s}=n.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:i});return{prepared:{language:e.language,scipPath:e.scipPath,config:n,resolvedBinary:i,binary:o,args:s,env:B(n,e.env,i)}}}function hr(e,n){let t=[];for(let r of e)r.skipped?n.push(r.skipped):t.push({language:r.language,scipPath:r.scipPath});return{indexedOutputs:t}}function br(e,n,t,r,i){if(e.length===0){let o=n.map(s=>` - ${s.language}: ${s.reason}`).join(`
60
+ `).get();return{version:2,tsconfig:t,files:S(n),db:r}}function Zt(e){let n=Ae();return{projectRoot:e.projectRoot,context:we(e.projectRoot,e.configPath),symbolLookup:Oe(e.db,e.projectRoot,n),vueSymbolLookup:e.vueSymbolLookup,sourceReader:n}}function er(e){let n=[],t=0,r=e.tasks??e.vueFiles.map(o=>({fileName:o,startOffset:0,endOffset:Number.POSITIVE_INFINITY,countFileSkip:!0}));for(let o of r){let i=nr(e,o);n.push(...i.occurrences),t+=i.skippedReferences}return{occurrences:n,skippedReferences:t}}function nr(e,n){let t=e.context.language.scripts.get(n.fileName),r=t?.generated?.languagePlugin.typescript?.getServiceScript(t.generated.root)?.code;if(!t||!r)return{occurrences:[],skippedReferences:n.countFileSkip?1:0};let o=e.sourceReader.get(n.fileName);if(!o)return{occurrences:[],skippedReferences:n.countFileSkip?1:0};let i=e.context.language.maps.get(r,t),s=b(e.projectRoot,n.fileName),a=[...je(o.text)],u={tokens:a.filter(c=>c.start>=n.startOffset&&c.start<n.endOffset),tokenByStart:new Map(a.map(c=>[c.start,c])),tokenTextCounts:or(a),processedStarts:new Set};return tr({...e,fileName:n.fileName,sourceInfo:o,sourceFile:s,map:i,tokenContext:u})}function tr(e){let n=[],t=0;for(let r of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(r.start))continue;let o=Me(e.map,r.start);if(o===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,o+1)??[]).find(u=>!Ne(e.projectRoot,u.fileName));if(!s){t++;continue}let a=Ee(s,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(a===null){t++;continue}Be(n,e.sourceReader,e.sourceInfo,e.sourceFile,r,a),e.tokenContext.processedStarts.add(r.start),rr(n,e,r,o,a)}return{occurrences:n,skippedReferences:t}}function rr(e,n,t,r,o){if(!((n.tokenContext.tokenTextCounts.get(t.text)??0)<=1))for(let i of ir(n.context.languageService,n.fileName,r+1,n.map,t,n.tokenContext.tokenByStart)){if(n.tokenContext.processedStarts.has(i))continue;let s=n.tokenContext.tokenByStart.get(i);s&&(Be(e,n.sourceReader,n.sourceInfo,n.sourceFile,s,o),n.tokenContext.processedStarts.add(i))}}function Be(e,n,t,r,o,i){let s=n.positionAt(t,o.start);e.push({sourceFile:r,sourceLine:s.line,sourceStartChar:s.character,sourceEndChar:s.character+o.text.length,symbolId:i})}function or(e){let n=new Map;for(let t of e)n.set(t.text,(n.get(t.text)??0)+1);return n}function ir(e,n,t,r,o,i){let s=e.getDocumentHighlights?.(n,t,[n])??[],a=[];for(let u of s)if(u.fileName===n)for(let c of u.highlightSpans){let g=sr(r,c.textSpan.start,i,o.text);g!==null&&a.push(g)}return a}function sr(e,n,t,r){let o=t.get(n);if(o?.text===r)return o.start;let i=z(e,n);if(i===null)return null;let s=t.get(i);return s?.text===r?s.start:null}async function Yo(e){let{projectRoot:n,maxHeapMb:t=8192,onStatus:r=console.log,skipAutoInstall:o=!1}=e,i=dr(e),s=Date.now();X(f(i.outputScip),{recursive:!0}),X(f(i.outputDb),{recursive:!0});let a=e.languages??F(n);if(a.length===0)throw new Error("No supported languages detected in this project. Looked for: tsconfig.json, Cargo.toml, go.mod, pyproject.toml, etc.");r(`Detected languages: ${a.join(", ")}`);let u=Dr(n,a,{pnpmWorkspaces:e.pnpmWorkspaces}),c=Or(d(f(i.outputDb),"index.lock")),g=null;try{let l=mr({opts:e,paths:i,languages:a,fingerprint:u,start:s,onStatus:r});if(l)return l;Rr(o,r);let p=fr(i);return g=p.runDir,await hr({opts:e,languages:a,projectRoot:n,paths:i,tempPaths:p,fingerprint:u,start:s,maxHeapMb:t,skipAutoInstall:o,onStatus:r})}finally{g&&Y(g,{recursive:!0,force:!0}),c()}}function dr(e){let n=e.outputScip??d(e.projectRoot,"index.scip"),t=e.outputDb??d(e.projectRoot,"index.db");return{outputScip:n,outputDb:t,metaPath:d(f(t),"meta.json")}}function mr(e){if(e.opts.skipIfUnchanged===!1||!w(e.paths.outputScip)||!w(e.paths.outputDb)||!Er(e.paths.metaPath,e.fingerprint))return null;y({projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let n=Date.now()-e.start;return e.onStatus(`Index unchanged; reused existing SQLite index in ${(n/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:n,reused:!0,skipped:[]}}function fr(e){let n=lr(d(f(e.outputDb),"reindex-"));return{runDir:n,tempOutputScip:d(n,C(e.outputScip)),tempOutputDb:d(n,C(e.outputDb)),tempMetaPath:d(n,C(e.metaPath))}}async function hr(e){let n={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:t,skippedLanguages:r,reusedLanguages:o}=await br(e,n);o.length>0&&e.onStatus(`Reused ${o.length} cached language shard(s): ${o.join(", ")}`),yr(e,n,t,r);let i=Date.now()-e.start;return e.onStatus(`Done in ${(i/1e3).toFixed(1)}s`),{languages:t.map(s=>s.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:i,reused:!1,skipped:r}}async function br(e,n){let t=xr(e),r=new Set(t.map(c=>c.language));for(let c of r)e.onStatus(`Reusing cached ${c} SCIP shard (language inputs unchanged).`);let{preparedRuns:o,skippedLanguages:i}=vr({languages:e.languages.filter(c=>!r.has(c)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:n,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,onStatus:e.onStatus}),s=await be(o,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:a}=Ir(s,i),u=[...t,...a];return Pr(u,i,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:u,skippedLanguages:i,reusedLanguages:[...r]}}function yr(e,n,t,r){Sr(e.paths.outputDb,t),Lr(t,e.tempPaths.tempOutputScip,e.onStatus),Cr(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,n,e.onStatus),y({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),Vr(e.tempPaths.tempMetaPath,{version:3,status:r.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.fingerprint,languageFingerprints:Ge(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces}),requestedLanguages:e.languages,indexedLanguages:t.map(o=>o.language),skipped:[...r]}),Fr({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath})}function xr(e){let n;try{n=JSON.parse(Ue(e.paths.metaPath,"utf-8"))}catch{return[]}if(n.version!==3||!n.languageFingerprints)return[];let t=[],r=Ge(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces});for(let o of e.languages){let i=Je(e.paths.outputDb,o);w(i)&&x(n.languageFingerprints[o])===x(r[o])&&t.push({language:o,scipPath:i})}return t}function Sr(e,n){for(let t of n){let r=Je(e,t.language);X(f(r),{recursive:!0}),t.scipPath!==r&&cr(t.scipPath,r)}}function Rr(e,n){if(!h("scip")){if(e)throw new Error(`The scip CLI is required but not found on PATH.
61
+ Install from: https://github.com/sourcegraph/scip/releases`);if(n("scip CLI not found on PATH. Attempting auto-install..."),!O(n))throw new Error(`The scip CLI is required but could not be installed.
62
+ Install manually from: https://github.com/sourcegraph/scip/releases`)}}function vr(e){let n=[],t=[],r=e.languages.map((o,i)=>({language:o,scipPath:e.languages.length>1?wr(e.tempOutputScip,o,i):e.tempOutputScip}));for(let{language:o,scipPath:i}of r){let s=kr({...e,language:o,scipPath:i});"skipped"in s?t.push(s.skipped):n.push(s.prepared)}return{preparedRuns:n,skippedLanguages:t}}function kr(e){let n=k(e.language),t=L(n),r=B(n,e.projectRoot);if(!r&&!$(n)){if(e.skipAutoInstall){let a=`${t} not found on PATH (auto-install disabled). ${n.installUrl??""}`.trim();return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}if(e.onStatus(`${t} not found. Attempting auto-install...`),!W(n,e.onStatus)){let a=`${t} could not be auto-installed. ${n.installUrl?`Install manually from ${n.installUrl}`:`Install ${t} and put it on PATH.`}`;return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}}let o=r??R(n);if(!o){let a=`${t} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${a}`),{skipped:{language:e.language,reason:a}}}let{binary:i,args:s}=n.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:o});return{prepared:{language:e.language,scipPath:e.scipPath,config:n,resolvedBinary:o,binary:i,args:s,env:U(n,e.env,o)}}}function Ir(e,n){let t=[];for(let r of e)r.skipped?n.push(r.skipped):t.push({language:r.language,scipPath:r.scipPath});return{indexedOutputs:t}}function Pr(e,n,t,r,o){if(e.length===0){let i=n.map(s=>` - ${s.language}: ${s.reason}`).join(`
63
63
  `);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
64
- `+o)}if(n.length!==0&&(i(`Indexed ${e.length} of ${t.length} languages; skipped ${n.map(o=>o.language).join(", ")}.`),!r))throw new Error(`Failed to index all required languages; preserving the previous index. Pass --allow-partial to intentionally write an incomplete index.
65
- `+n.map(o=>` - ${o.language}: ${o.reason}`).join(`
66
- `))}function yr(e,n,t){e.length>1?(t(`Merging ${e.length} language indexes...`),T(e.map(r=>r.scipPath),n)):e[0].scipPath!==n&&K(e[0].scipPath,n)}function xr(e,n,t,r){if(r("Converting to SQLite..."),!q(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let i=de(e);i.removedDefinitionOccurrences>0&&r(`Sanitized ${i.removedDefinitionOccurrences} invalid definition occurrences across ${i.touchedDocuments} documents before SQLite conversion.`),nr("scip",["expt-convert","--output",n,e],{env:t,stdio:"pipe",maxBuffer:50*1024*1024})}catch(i){let o=i instanceof Error?i.message:String(i);throw new Error(`Failed to convert SCIP index to SQLite: ${o}`,{cause:i})}}function Sr(e,n,t){let r=sr(e)||".scip",i=C(e,r);return m(b(e),`${i}.${t+1}.${n}${r}`)}function Rr(e){let n;try{n=ir(e,"wx")}catch(t){throw(typeof t=="object"&&t&&"code"in t?t.code:void 0)==="EEXIST"?new Error(`Another scip-query reindex is already running for ${b(e)}.`,{cause:t}):t}return Be(n,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
67
- `),()=>{try{tr(n)}finally{X(e,{force:!0})}}}function vr(e){G(e.tempOutputScip,e.outputScip),G(e.tempOutputDb,e.outputDb),G(e.tempMetaPath,e.metaPath)}function G(e,n){X(`${n}.tmp-replace`,{force:!0}),K(e,`${n}.tmp-replace`),K(`${n}.tmp-replace`,n)}function kr(e,n,t){return{version:1,languages:[...n].sort(),pnpmWorkspaces:t.pnpmWorkspaces===!0,files:R(e)}}function Ir(e,n){try{let t=JSON.parse(or(e,"utf-8"));return t.version===2&&t.status==="complete"&&P(t.fingerprint)===P(n)&&P([...t.indexedLanguages??[]].sort())===P(n.languages)}catch{return!1}}function Pr(e,n){Be(e,`${JSON.stringify(n,null,2)}
68
- `)}function P(e){return JSON.stringify(e)}export{ae as INDEXER_CONFIGS,y as augmentAuxiliaryDocuments,Bt as augmentVueResolvedReferences,I as describeIndexerBinary,w as detectLanguages,D as getIndexerConfig,B as getIndexerExecutionEnv,f as isBinaryAvailable,_ as isIndexerInstalled,T as mergeScipFiles,ue as mergeScipIndexes,Ui as reindex,x as resolveIndexerBinary,$ as resolveProjectLocalIndexerBinary,U as tryInstallIndexer,L as tryInstallScipCli};
64
+ `+i)}if(n.length!==0&&(o(`Indexed ${e.length} of ${t.length} languages; skipped ${n.map(i=>i.language).join(", ")}.`),!r))throw new Error(`Failed to index all required languages; preserving the previous index. Pass --allow-partial to intentionally write an incomplete index.
65
+ `+n.map(i=>` - ${i.language}: ${i.reason}`).join(`
66
+ `))}function Lr(e,n,t){e.length>1?(t(`Merging ${e.length} language indexes...`),V(e.map(r=>r.scipPath),n)):e[0].scipPath!==n&&K(e[0].scipPath,n)}function Cr(e,n,t,r){if(r("Converting to SQLite..."),!w(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{let o=fe(e);o.removedDefinitionOccurrences>0&&r(`Sanitized ${o.removedDefinitionOccurrences} invalid definition occurrences across ${o.touchedDocuments} documents before SQLite conversion.`),ar("scip",["expt-convert","--output",n,e],{env:t,stdio:"pipe",maxBuffer:50*1024*1024})}catch(o){let i=o instanceof Error?o.message:String(o);throw new Error(`Failed to convert SCIP index to SQLite: ${i}`,{cause:o})}}function wr(e,n,t){let r=pr(e)||".scip",o=C(e,r);return d(f(e),`${o}.${t+1}.${n}${r}`)}function Or(e){let n;try{n=gr(e,"wx")}catch(t){throw(typeof t=="object"&&t&&"code"in t?t.code:void 0)==="EEXIST"?new Error(`Another scip-query reindex is already running for ${f(e)}.`,{cause:t}):t}return We(n,JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()})+`
67
+ `),()=>{try{ur(n)}finally{Y(e,{force:!0})}}}function Fr(e){q(e.tempOutputScip,e.outputScip),q(e.tempOutputDb,e.outputDb),q(e.tempMetaPath,e.metaPath)}function q(e,n){Y(`${n}.tmp-replace`,{force:!0}),K(e,`${n}.tmp-replace`),K(`${n}.tmp-replace`,n)}function Dr(e,n,t){return{version:1,languages:[...n].sort(),pnpmWorkspaces:t.pnpmWorkspaces===!0,files:S(e)}}function Ge(e,n,t){return Object.fromEntries(n.map(r=>{let o=k(r).markerFiles;return[r,{version:1,languages:[r],pnpmWorkspaces:r==="typescript"&&t.pnpmWorkspaces===!0,files:S(e,{language:r,markerFiles:o})}]}))}function Je(e,n){return d(f(e),"language-indexes",`${n}.scip`)}function Er(e,n){try{let t=JSON.parse(Ue(e,"utf-8"));return(t.version===2||t.version===3)&&t.status==="complete"&&x(t.fingerprint)===x(n)&&x([...t.indexedLanguages??[]].sort())===x(n.languages)}catch{return!1}}function Vr(e,n){We(e,`${JSON.stringify(n,null,2)}
68
+ `)}function x(e){return JSON.stringify(e)}export{ue as INDEXER_CONFIGS,y as augmentAuxiliaryDocuments,zt as augmentVueResolvedReferences,L as describeIndexerBinary,F as detectLanguages,k as getIndexerConfig,U as getIndexerExecutionEnv,h as isBinaryAvailable,$ as isIndexerInstalled,V as mergeScipFiles,ce as mergeScipIndexes,Yo as reindex,R as resolveIndexerBinary,B as resolveProjectLocalIndexerBinary,W as tryInstallIndexer,O as tryInstallScipCli};
69
69
  //# sourceMappingURL=reindex.js.map
package/dist/runtime.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { P as ProjectConfig, a as SupportedLanguage } from './config-types-CGIeLEpY.js';
1
+ import { P as ProjectConfig, a as SupportedLanguage } from './config-types-Bok4jrO3.js';
2
2
  export { g as getScipVersion, i as isScipInstalled, p as printScipInstallInstructions } from './scip-cli-a-xOztiK.js';
3
3
 
4
4
  type WatcherStatus = {
package/dist/runtime.js CHANGED
@@ -1,3 +1,3 @@
1
- import{b,c as j,d as W}from"./chunk-LWYIGRHR.js";import{a as w}from"./chunk-TKDJQ2WD.js";import{readFileSync as _,writeFileSync as D,existsSync as v,mkdirSync as F}from"fs";import{join as l,resolve as C}from"path";import{createHash as L}from"crypto";import{homedir as $}from"os";var P=".scipquery.json",A={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]};function N(i){let t=l(i,P);if(!v(t))return{};try{let e=_(t,"utf-8");return JSON.parse(e)}catch{return{}}}function R(i){return{...A,...i.watch}}function O(i,t){let e=process.env.SCIP_QUERY_CACHE_DIR;if(e)return g(e);if(t?.dbPath)return g(C(i,t.dbPath));let n=process.env.XDG_CACHE_HOME||l($(),".cache"),o=L("sha256").update(C(i)).digest("hex").slice(0,12),r=l(n,"scip-query","projects",o);return g(r)}function f(i,t){let e=O(i,t);return{cacheDir:e,dbPath:l(e,"index.db"),indexPath:l(e,"index.scip"),metaPath:l(e,"meta.json")}}function M(i,t){let e=l(i,P);return v(e)||D(e,JSON.stringify({languages:t,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
2
- `),e}function g(i){return F(i,{recursive:!0}),i}import{watch as q}from"fs";import{existsSync as I,renameSync as T}from"fs";import{join as U,relative as H}from"path";import{fork as G}from"child_process";import X from"ignore";var m=class{projectRoot;watchConfig;indexPaths;languages;pnpmWorkspaces;onStatus;onReindexComplete;onError;status={state:"idle"};debounceTimer=null;cooldownTimer=null;dirty=!1;changedFiles=0;reindexInFlight=!1;lastReindexEnd=0;fsWatchers=[];gitignoreFilter;extraIgnore;stopped=!1;constructor(t){this.projectRoot=t.projectRoot,this.watchConfig=R(t.config),this.indexPaths=f(t.projectRoot,t.config),this.languages=t.languages,this.pnpmWorkspaces=t.config.indexer?.typescript?.pnpmWorkspaces??!1,this.onStatus=t.onStatus??(()=>{}),this.onReindexComplete=t.onReindexComplete??(()=>{}),this.onError=t.onError??(e=>console.error(e.message)),this.gitignoreFilter=w(t.projectRoot),this.extraIgnore=X(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let t=q(this.projectRoot,{recursive:!0},(e,s)=>{s&&!this.stopped&&this.handleFileChange(s)});this.fsWatchers.push(t)}catch{this.onError(new Error("Failed to start file watcher. On Linux, you may need to increase inotify limits: sysctl -w fs.inotify.max_user_watches=524288"))}}stop(){this.stopped=!0;for(let t of this.fsWatchers)t.close();this.fsWatchers=[],this.clearDebounceTimer(),this.clearCooldownTimer(),this.setStatus({state:"idle"})}handleFileChange(t){let e=H(this.projectRoot,U(this.projectRoot,t));if(this.gitignoreFilter.isIgnored(e)||this.extraIgnore.ignores(e)||t.endsWith("index.db")||t.endsWith("index.scip")||t.endsWith("index.db.tmp")||t.endsWith(".scipquery.json"))return;if(this.changedFiles++,this.reindexInFlight){this.dirty=!0,this.setStatus({state:"indexing",startedAt:this.status.startedAt});return}if(this.status.state==="cooldown"){this.dirty=!0,this.setStatus({state:"cooldown",until:this.status.until,dirty:!0});return}this.clearDebounceTimer();let s=Date.now()+this.watchConfig.debounceMs;this.setStatus({state:"waiting",changedFiles:this.changedFiles,reindexAt:s}),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.triggerReindex()},this.watchConfig.debounceMs)}triggerReindex(){if(this.reindexInFlight||this.stopped)return;let t=Date.now()-this.lastReindexEnd;if(this.lastReindexEnd>0&&t<this.watchConfig.cooldownMs){let s=this.watchConfig.cooldownMs-t;this.dirty=!0;let n=Date.now()+s;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped&&(this.dirty=!1,this.triggerReindex())},s);return}this.reindexInFlight=!0,this.dirty=!1,this.changedFiles=0;let e=Date.now();this.setStatus({state:"indexing",startedAt:e}),this.runReindex().then(s=>{if(this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onReindexComplete(s),this.dirty&&!this.stopped){let n=Date.now()+this.watchConfig.cooldownMs;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped?(this.dirty=!1,this.triggerReindex()):this.setStatus({state:"idle"})},this.watchConfig.cooldownMs)}else this.setStatus({state:"idle"})}).catch(s=>{this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onError(s instanceof Error?s:new Error(String(s))),this.setStatus({state:"idle"})})}runReindex(){return new Promise((t,e)=>{let s=Date.now(),n=this.indexPaths.dbPath+".tmp",o=B(this.indexPaths.indexPath),r=G(new URL("./reindex-worker.js",import.meta.url).pathname,[],{env:{...process.env,SCIP_REINDEX_PROJECT_ROOT:this.projectRoot,SCIP_REINDEX_OUTPUT_SCIP:o,SCIP_REINDEX_OUTPUT_DB:n,SCIP_REINDEX_LANGUAGES:this.languages?.join(",")??"",SCIP_REINDEX_PNPM_WORKSPACES:this.pnpmWorkspaces?"1":""},stdio:"pipe"});r.on("exit",h=>{if(h===0)try{I(n)&&T(n,this.indexPaths.dbPath),I(o)&&T(o,this.indexPaths.indexPath),t(Date.now()-s)}catch(a){e(new Error(`Atomic swap failed: ${a}`))}else e(new Error(`Reindex worker exited with code ${h}`))}),r.on("error",e)})}setStatus(t){this.status=t,this.onStatus(t)}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}clearCooldownTimer(){this.cooldownTimer&&(clearTimeout(this.cooldownTimer),this.cooldownTimer=null)}};function B(i){return i.endsWith(".scip")?i.slice(0,-5)+".tmp.scip":i+".tmp.scip"}import{existsSync as x,mkdirSync as J,symlinkSync as V,readlinkSync as K,unlinkSync as Q}from"fs";import{join as d,dirname as k,resolve as S}from"path";import{homedir as y,platform as Y}from"os";import{fileURLToPath as z}from"url";var Z=Y()==="win32",tt=["scip-query","concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-maintainability","scip-verify","scip-language-playbook"];function et(i={}){let t=i.quiet?()=>{}:console.log,e=z(import.meta.url),s=S(k(e),"..","skills"),n=[d(y(),".claude","skills"),d(y(),".codex","skills"),d(y(),".agents","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let r of n){let h=k(r);if(!x(h))continue;J(r,{recursive:!0});let a=it(r);for(let c of tt){let u=d(s,c),p=d(r,c);if(!x(u)){o.skipped.push(`${a}/${c}`);continue}if(x(p)){try{let E=K(p);if(S(E)===S(u)){o.alreadyLinked.push(`${a}/${c}`),t(` ok: ${c} \u2192 ${a} (already linked)`);continue}}catch{o.skipped.push(`${a}/${c}`),t(` skip: ${c} \u2192 ${a} (exists, not a symlink)`);continue}Q(p)}V(u,p,Z?"junction":"dir"),o.installed.push(`${a}/${c}`),t(` done: ${c} \u2192 ${a}`)}}return o}function it(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}export{m as Watcher,j as getScipVersion,M as initProjectConfig,et as installSkills,b as isScipInstalled,N as loadProjectConfig,W as printScipInstallInstructions,f as resolveIndexPaths};
1
+ import{b as k,c as j,d as $}from"./chunk-LWYIGRHR.js";import{a as v}from"./chunk-TKDJQ2WD.js";import{readFileSync as D,writeFileSync as _,existsSync as P,mkdirSync as W}from"fs";import{join as c,resolve as C}from"path";import{createHash as F}from"crypto";import{homedir as A}from"os";var u=".scipquery.json",M={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]};function L(i){let e=c(i,u);if(!P(e))return{};try{let t=D(e,"utf-8");return JSON.parse(t)}catch(t){let s=t instanceof Error?t.message:String(t);throw t instanceof SyntaxError?new Error(`invalid ${u} at ${e}: ${s}`,{cause:t}):new Error(`unable to read ${u} at ${e}: ${s}`,{cause:t})}}function b(i){return{...M,...i.watch}}function N(i,e){let t=process.env.SCIP_QUERY_CACHE_DIR;if(t)return f(t);if(e?.dbPath)return f(C(i,e.dbPath));let n=process.env.XDG_CACHE_HOME||c(A(),".cache"),r=F("sha256").update(C(i)).digest("hex").slice(0,12),o=c(n,"scip-query","projects",r);return f(o)}function m(i,e){let t=N(i,e);return{cacheDir:t,dbPath:c(t,"index.db"),indexPath:c(t,"index.scip"),metaPath:c(t,"meta.json")}}function O(i,e){let t=c(i,u);return P(t)||_(t,JSON.stringify({languages:e,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
2
+ `),t}function f(i){return W(i,{recursive:!0}),i}import{watch as q}from"fs";import{existsSync as I,renameSync as R}from"fs";import{join as U,relative as G}from"path";import{fork as H}from"child_process";import X from"ignore";var x=class{projectRoot;watchConfig;indexPaths;languages;pnpmWorkspaces;onStatus;onReindexComplete;onError;status={state:"idle"};debounceTimer=null;cooldownTimer=null;dirty=!1;changedFiles=0;reindexInFlight=!1;lastReindexEnd=0;fsWatchers=[];gitignoreFilter;extraIgnore;stopped=!1;constructor(e){this.projectRoot=e.projectRoot,this.watchConfig=b(e.config),this.indexPaths=m(e.projectRoot,e.config),this.languages=e.languages,this.pnpmWorkspaces=e.config.indexer?.typescript?.pnpmWorkspaces??!1,this.onStatus=e.onStatus??(()=>{}),this.onReindexComplete=e.onReindexComplete??(()=>{}),this.onError=e.onError??(t=>console.error(t.message)),this.gitignoreFilter=v(e.projectRoot),this.extraIgnore=X(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let e=q(this.projectRoot,{recursive:!0},(t,s)=>{s&&!this.stopped&&this.handleFileChange(s)});this.fsWatchers.push(e)}catch{this.onError(new Error("Failed to start file watcher. On Linux, you may need to increase inotify limits: sysctl -w fs.inotify.max_user_watches=524288"))}}stop(){this.stopped=!0;for(let e of this.fsWatchers)e.close();this.fsWatchers=[],this.clearDebounceTimer(),this.clearCooldownTimer(),this.setStatus({state:"idle"})}handleFileChange(e){let t=G(this.projectRoot,U(this.projectRoot,e));if(this.gitignoreFilter.isIgnored(t)||this.extraIgnore.ignores(t)||e.endsWith("index.db")||e.endsWith("index.scip")||e.endsWith("index.db.tmp")||e.endsWith(".scipquery.json"))return;if(this.changedFiles++,this.reindexInFlight){this.dirty=!0,this.setStatus({state:"indexing",startedAt:this.status.startedAt});return}if(this.status.state==="cooldown"){this.dirty=!0,this.setStatus({state:"cooldown",until:this.status.until,dirty:!0});return}this.clearDebounceTimer();let s=Date.now()+this.watchConfig.debounceMs;this.setStatus({state:"waiting",changedFiles:this.changedFiles,reindexAt:s}),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.triggerReindex()},this.watchConfig.debounceMs)}triggerReindex(){if(this.reindexInFlight||this.stopped)return;let e=Date.now()-this.lastReindexEnd;if(this.lastReindexEnd>0&&e<this.watchConfig.cooldownMs){let s=this.watchConfig.cooldownMs-e;this.dirty=!0;let n=Date.now()+s;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped&&(this.dirty=!1,this.triggerReindex())},s);return}this.reindexInFlight=!0,this.dirty=!1,this.changedFiles=0;let t=Date.now();this.setStatus({state:"indexing",startedAt:t}),this.runReindex().then(s=>{if(this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onReindexComplete(s),this.dirty&&!this.stopped){let n=Date.now()+this.watchConfig.cooldownMs;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped?(this.dirty=!1,this.triggerReindex()):this.setStatus({state:"idle"})},this.watchConfig.cooldownMs)}else this.setStatus({state:"idle"})}).catch(s=>{this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onError(s instanceof Error?s:new Error(String(s))),this.setStatus({state:"idle"})})}runReindex(){return new Promise((e,t)=>{let s=Date.now(),n=this.indexPaths.dbPath+".tmp",r=J(this.indexPaths.indexPath),o=H(new URL("./reindex-worker.js",import.meta.url).pathname,[],{env:{...process.env,SCIP_REINDEX_PROJECT_ROOT:this.projectRoot,SCIP_REINDEX_OUTPUT_SCIP:r,SCIP_REINDEX_OUTPUT_DB:n,SCIP_REINDEX_LANGUAGES:this.languages?.join(",")??"",SCIP_REINDEX_PNPM_WORKSPACES:this.pnpmWorkspaces?"1":""},stdio:"pipe"});o.on("exit",d=>{if(d===0)try{I(n)&&R(n,this.indexPaths.dbPath),I(r)&&R(r,this.indexPaths.indexPath),e(Date.now()-s)}catch(a){t(new Error(`Atomic swap failed: ${a}`))}else t(new Error(`Reindex worker exited with code ${d}`))}),o.on("error",t)})}setStatus(e){this.status=e,this.onStatus(e)}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}clearCooldownTimer(){this.cooldownTimer&&(clearTimeout(this.cooldownTimer),this.cooldownTimer=null)}};function J(i){return i.endsWith(".scip")?i.slice(0,-5)+".tmp.scip":i+".tmp.scip"}import{existsSync as w,mkdirSync as B,symlinkSync as V,readlinkSync as K,unlinkSync as Q}from"fs";import{join as p,dirname as T,resolve as S}from"path";import{homedir as y,platform as Y}from"os";import{fileURLToPath as z}from"url";var Z=Y()==="win32",ee=["scip-query","concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function te(i={}){let e=i.quiet?()=>{}:console.log,t=z(import.meta.url),s=S(T(t),"..","skills"),n=[p(y(),".claude","skills"),p(y(),".codex","skills"),p(y(),".agents","skills")],r={installed:[],skipped:[],alreadyLinked:[]};for(let o of n){let d=T(o);if(!w(d))continue;B(o,{recursive:!0});let a=ie(o);for(let l of ee){let g=p(s,l),h=p(o,l);if(!w(g)){r.skipped.push(`${a}/${l}`);continue}if(w(h)){try{let E=K(h);if(S(E)===S(g)){r.alreadyLinked.push(`${a}/${l}`),e(` ok: ${l} \u2192 ${a} (already linked)`);continue}}catch{r.skipped.push(`${a}/${l}`),e(` skip: ${l} \u2192 ${a} (exists, not a symlink)`);continue}Q(h)}V(g,h,Z?"junction":"dir"),r.installed.push(`${a}/${l}`),e(` done: ${l} \u2192 ${a}`)}}return r}function ie(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}export{x as Watcher,j as getScipVersion,O as initProjectConfig,te as installSkills,k as isScipInstalled,L as loadProjectConfig,$ as printScipInstallInstructions,m as resolveIndexPaths};
3
3
  //# sourceMappingURL=runtime.js.map