scip-query 0.10.5 → 0.10.6

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.
package/dist/cli.js CHANGED
@@ -696,7 +696,7 @@ ${n}`:""}`)}return JSON.parse(t.stdout)}function bf(e,t){let n=[];for(let i=0;i<
696
696
  Axes:`),console.log(` Deletable: ${t.deletable.loc} LOC across ${t.deletable.symbols} symbols`),t.changeAmplification){let i=t.changeAmplification;console.log(` Change amplification: ${i.medianFilesPerCommit} files/commit median, ${i.p90FilesPerCommit} p90 (${i.commitsAnalyzed} commits)`)}if(t.hiddenCoupling&&t.hiddenCoupling.pairCount>0){console.log(` Hidden coupling: ${t.hiddenCoupling.pairCount} co-changing pair(s) without a dependency edge`);for(let i of t.hiddenCoupling.top.slice(0,3))console.log(` ${i.fileA} <-> ${i.fileB} (${i.together}x together, ${Math.round(i.confidence*100)}%)`)}if(t.churnWeightedComplexity&&t.churnWeightedComplexity.length>0){let i=t.churnWeightedComplexity[0];i.weighted>0&&console.log(` Churn x complexity: hottest is ${i.symbol} (${i.changes} changes, weighted ${i.weighted})`)}let n=t.evidenceQuality;if(console.log(` Evidence quality: ${n.graphFindings} graph-fact finding(s), ${n.heuristicFindings} heuristic finding(s), ${n.userSuppressed} user-suppressed`),e.validation&&e.validation.flaggedFiles>0){let i=e.validation,r=i.ratio===null?"n/a":`${i.ratio}x`;console.log(` Validation: flagged files fix-density ${i.flaggedFixDensity} vs baseline ${i.baselineFixDensity} (${r})`)}}function vf(e){return mt(t=>{let n=lt(t,{base:e.base});if(n.note)return ci(t,{base:e.base});if(n.changedFiles.length===0)return ci(t,{base:e.base});let i=[];for(let r of bf(n.changedFiles,k_))i.push(T_(r,e));return Eo(n.changedFiles,i)})}function T_(e,t){let n=process.argv[1]??Sf(import.meta.url),i=[];return t.base&&i.push("--base",t.base),Hc({cliPath:n,command:Yo,args:i,env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},label:"Diff-impact batch"})}function Rf(e){console.log(`Changed files: ${e.summary.totalChangedFiles}`),console.log(`Changed symbols: ${e.summary.totalChangedSymbols}`),console.log(`Affected consumer files: ${e.summary.totalAffectedFiles}`),e.summary.note&&console.log(`Note: ${e.summary.note}`),console.log(""),e.changedSymbols.length>0&&(console.log("Changed symbols:"),P.list(e.changedSymbols,t=>` ${t.file} ${t.shortName} (fan-in: ${t.fanIn})`)),e.affectedConsumers.length>0&&(console.log(`
697
697
  Affected consumer files:`),P.list(e.affectedConsumers,t=>` ${t.file} (${t.consumedSymbols} symbol(s))`))}var es=Bc,v=(e=>parseInt(e,10)),ts=(e=>{let t=parseInt(e,10);if(!Number.isFinite(t)||t<1)throw new Error(`Expected a positive integer, got ${e}`);return t}),tt=parseFloat,Uc=parseInt;function f(e,t,n,...i){return i.length>0?{flags:e,description:t,parser:n,defaultValue:i[0]}:{flags:e,description:t,parser:n}}function Wc(){return f("--json","Output as JSON for programmatic consumption")}function _(e=[]){return e.some(t=>t.flags==="--json")?e:[...e,Wc()]}function w(e,t=[]){return{category:e,examples:t}}import{execFileSync as q0}from"child_process";import{existsSync as vr,mkdirSync as U0,readFileSync as W0,writeFileSync as ig}from"fs";import{homedir as G0}from"os";import{dirname as z0,join as Ci}from"path";import{existsSync as Ef,readFileSync as e0}from"fs";import{execFileSync as __}from"child_process";import{existsSync as $_,readdirSync as wf}from"fs";import{extname as Lf,join as Df}from"path";var F_=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),A_=[{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 Dt(e){let t=[],n=M_(e),i=H_(e);for(let r of A_){if(O_(e,r.files)){t.push(r.language);continue}if(j_(n,r.globs)){t.push(r.language);continue}q_(i,r.extensions)&&t.push(r.language)}return t.includes("typescript")&&kf(t,"javascript"),t.includes("cpp")&&!i.has(".c")&&kf(t,"c"),t}function M_(e){try{return wf(e)}catch{return[]}}function O_(e,t){return t?.length?t.some(n=>$_(Df(e,n))):!1}function j_(e,t){return t?.length?e.some(n=>t.some(i=>B_(n,i))):!1}function B_(e,t){if(t==="*")return!0;if(!t.includes("*"))return e===t;let[n,i]=t.split("*");return e.startsWith(n??"")&&e.endsWith(i??"")}function H_(e){let t=V_(e);if(t)return t;let n=new Set,i=[e];for(;i.length>0;){let r=i.pop();if(!r)continue;let o;try{o=wf(r,{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=Df(r,s.name);if(s.isDirectory()){F_.has(s.name)||i.push(a);continue}let c=Lf(s.name).toLowerCase();c&&n.add(c)}}return n}function V_(e){try{let t=__("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}),n=new Set;for(let i of t.split(`
698
698
  `)){if(!i)continue;let r=Lf(i).toLowerCase();r&&n.add(r)}return n}catch{return null}}function q_(e,t){return t?.length?t.some(n=>e.has(n)):!1}function kf(e,t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}import{execFileSync as U_}from"child_process";import{createHash as W_}from"crypto";import{readdirSync as G_,readFileSync as z_}from"fs";import{join as Pf}from"path";function If(e){return(J_(e)??Q_(e)).filter(t=>t&&!Nf(t)).sort()}function In(e,t={}){return(t.language?If(e).filter(i=>K_(i,t.language,t.markerFiles)):If(e)).map(i=>{let r=Pf(e,i);try{let o=z_(r);return{path:i,size:o.byteLength,hash:W_("sha256").update(o).digest("hex")}}catch{return{path:i,size:-1,hash:"unreadable"}}})}function K_(e,t,n){let i=e.split("/").at(-1)??e;if(n?.includes(e)||n?.includes(i)||Y_.has(i))return!0;let r=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(Z_[t]??[]).includes(r)}function J_(e){try{return U_("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
699
- `).filter(Boolean)}catch{return null}}function Q_(e){let t=[],n=[""];for(;n.length>0;){let i=n.pop(),r=i?Pf(e,i):e,o;try{o=G_(r,{withFileTypes:!0})}catch{continue}for(let s of o){let a=i?`${i}/${s.name}`:s.name;if(s.isDirectory()){Nf(a)||n.push(a);continue}t.push(a)}}return t}function Nf(e){return e.split("/").some(n=>X_.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var X_=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]),Y_=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"]),Z_={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"]};function yi(e,t,n){let i=new Date().toISOString();if(!Ef(n.dbPath))return{state:"missing",checkedAt:i,metaPath:n.metaPath,reason:"No SQLite index database exists.",remedy:"Run: scip-query reindex"};if(!Ef(n.metaPath))return{state:"unknown",checkedAt:i,metaPath:n.metaPath,reason:"No reindex metadata file exists next to the SQLite index.",remedy:"Run: scip-query reindex"};try{let r=JSON.parse(e0(n.metaPath,"utf-8")),o=t.languages??Dt(e),s=t0(e,o,t),a=Array.isArray(r.indexedLanguages)?[...r.indexedLanguages].sort():[],c=(r.version===2||r.version===3)&&r.status==="complete"&&JSON.stringify(r.fingerprint)===JSON.stringify(s)&&JSON.stringify(a)===JSON.stringify(s.languages);return{state:c?"fresh":"stale",checkedAt:i,metaPath:n.metaPath,updatedAt:r.updatedAt,reason:c?"Index metadata fingerprint matches current source files.":"Index metadata fingerprint differs from current source files.",remedy:c?void 0:"Run: scip-query reindex"}}catch(r){return{state:"unknown",checkedAt:i,metaPath:n.metaPath,reason:`Could not read reindex metadata: ${r instanceof Error?r.message:String(r)}`,remedy:"Run: scip-query reindex"}}}function t0(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.indexer?.typescript?.pnpmWorkspaces===!0,files:In(e)}}import{execFileSync as $0}from"child_process";import{existsSync as Tf,readdirSync as n0}from"fs";import{join as Gc}from"path";var i0={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n})=>{let i=["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return t&&i.splice(1,0,"--pnpm-workspaces"),{binary:n,args:i}},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:t})=>({binary:t,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:t})=>({binary:t,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:t})=>({binary:"scip-dotnet",args:["index",_f(e,[".sln",".csproj"])??e,"--output",t,"--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:t})=>({binary:"scip-dotnet",args:["index",_f(e,[".sln",".vbproj"])??e,"--output",t,"--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:t})=>({binary:e,args:["--output",t]}),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:t})=>{let n=Gc(e,"vendor","bin","scip-php"),i=Gc(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",Tf(i)?i:Tf(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function Pn(e){return i0[e]}function _f(e,t){let n;try{n=n0(e)}catch{return null}for(let i of n)if(t.some(r=>i.endsWith(r)))return Gc(e,i);return null}import{execFileSync as Kc}from"child_process";import{existsSync as zc,readFileSync as a0}from"fs";import{createRequire as c0}from"module";import{platform as l0}from"os";import{dirname as $f,join as ns}from"path";import{execFileSync as r0}from"child_process";import{platform as o0}from"os";var s0=o0()==="win32";function pt(e){let t=s0?"where":"which";try{return r0(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var u0=c0(import.meta.url);function Jc(e){return[e.indexerBinary,...e.binaryAliases??[]]}function is(e){let t=Jc(e);return t.length===1?t[0]:t.join(" or ")}function Si(e){for(let t of Jc(e))if(pt(t))return t;return m0(e)}function Ff(e){return Si(e)!==null||d0(e)}function d0(e){return Af(e)!==null}function m0(e){let t=Af(e);if(!t)return null;let i=JSON.parse(a0(t,"utf8")).bin;if(!i)return null;if(typeof i=="string")return ns($f(t),i);for(let r of Jc(e)){let o=i[r];if(o)return ns($f(t),o)}return null}function Af(e){if(!e.bundledNpmPackage)return null;try{return u0.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Qc(e,t){for(let n of e.projectLocalBinaries??[]){let i=ns(t,n);if(zc(i))return i}return null}function p0(e,t){return Qc(e,t)??Si(e)}function Mf(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Xc(n,t))return t;let i=Of(n,t);return i?{...t,DOTNET_ROOT:i}:t}function rs(e,t){let n=is(e),i=t?p0(e,t):Si(e);if(!i)return{language:e.language,binaryLabel:n,installed:!1,runnable:!1,resolvedBinary:null,installUrl:e.installUrl};if(e.indexerBinary!=="scip-dotnet")return{language:e.language,binaryLabel:n,installed:!0,runnable:!0,resolvedBinary:i};let r=f0(i);return{language:e.language,binaryLabel:n,installed:!0,runnable:r.runnable,resolvedBinary:i,installUrl:e.installUrl,note:r.note}}function os(e,t){let n=e.installMethods,i=is(e);if(!n?.length)return t(`No auto-install method available for ${i}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1;for(let r of n)if(pt(r.prerequisite)){t(`Installing ${i} via ${r.label}...`);try{Kc(r.binary,r.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=Si(e);if(o){let s=o===e.indexerBinary?"":` (using ${o})`;return t(`Successfully installed ${i} via ${r.label}${s}`),!0}t(`${r.label} command completed but ${i} was not found on PATH`)}catch(o){let s=o instanceof Error?o.message:String(o);t(`${r.label} install failed: ${s}`)}}return t(`Could not auto-install ${i}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function f0(e){if(Xc(e,process.env))return{runnable:!0};let t=Of(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=jf(process.env);return{runnable:!1,note:n.length>0?`.NET 9 runtime still unavailable after checking ${n.join(", ")}`:"binary is present, but scip-dotnet still needs a .NET 9 runtime"}}function Of(e,t){for(let n of jf(t))if(Xc(e,{...t,DOTNET_ROOT:n}))return n;return null}function jf(e){let t=[],n=e.DOTNET_ROOT;if(n&&zc(n)&&t.push(n),l0()==="darwin"&&pt("brew"))try{let i=Kc("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),r=ns(i,"libexec");zc(r)&&!t.includes(r)&&t.push(r)}catch{}return t}function Xc(e,t){try{return Kc(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import{createRequire as g0}from"module";var h0=g0(import.meta.url);function Bf(e,t=[]){let n=b0(),i=la(e,t),r=i[0];return n?i.length===0?{available:!1,dependencyAvailable:n,reason:"no tsconfig found"}:{available:!0,dependencyAvailable:n,tsconfigPath:r,tsconfigPaths:i}:{available:!1,dependencyAvailable:n,tsconfigPath:r,tsconfigPaths:i,reason:"ts-morph is not installed"}}function b0(){try{return h0.resolve("ts-morph"),!0}catch{return!1}}import{execFileSync as xi,spawnSync as Uf}from"child_process";import{existsSync as It,mkdtempSync as Wf,readFileSync as y0,readdirSync as S0,rmSync as Gf,symlinkSync as x0,writeFileSync as C0}from"fs";import{tmpdir as zf}from"os";import{join as Ge}from"path";var v0=3e5,R0=12;function Yc(e,t,n={}){let i=Zc(e);if(i.length===0)return{checkers:[],uncoveredFiles:[],baselineErrors:0,dirtyOverlap:[],batches:[]};let r=k0(t,i),o=n.timeoutMs??v0,s=D0(e,t),a=Wf(Ge(zf(),"scip-cleanup-verify-")),c=[],l=new Set;try{xi("git",["-C",e,"worktree","add","--detach","--force",a,"HEAD"],{stdio:"ignore"}),I0(e,a);for(let u of i)for(let d of qf(u,a,o).errorKeys)l.add(d);for(let u of t.batches){Jf(a,u);let d=[];for(let m of i){let p=qf(m,a,o);d.push(...p.rawErrors.filter(h=>!l.has(Kf(h))))}if(d.length===0)c.push({depth:u.depth,status:"verified"});else{c.push({depth:u.depth,status:"failed",errors:d.slice(0,R0)});break}}}finally{try{xi("git",["-C",e,"worktree","remove","--force",a],{stdio:"ignore"})}catch{Gf(a,{recursive:!0,force:!0})}}return{checkers:i.map(u=>u.label),uncoveredFiles:r,baselineErrors:l.size,dirtyOverlap:s,batches:c}}function k0(e,t){let n=new Set(t.flatMap(r=>r.coversExtensions));return[...new Set(e.batches.flatMap(r=>r.entries.map(o=>o.file)))].filter(r=>{let o=r.slice(r.lastIndexOf("."));return!n.has(o)}).sort()}function Kf(e){return e.replace(/\(\d+,\d+\)|:\d+(?::\d+)?/g,"").trim()}var Hf=[".ts",".tsx",".mts",".cts",".js",".jsx",".vue"];function Zc(e){let t=[];if(It(Ge(e,"tsconfig.json"))){let n=Ge(e,"node_modules",".bin","tsc");t.push(It(n)?{label:"tsc --noEmit",binary:n,args:["--noEmit"],coversExtensions:Hf}:{label:"npx tsc --noEmit",binary:"npx",args:["tsc","--noEmit"],coversExtensions:Hf})}if(It(Ge(e,"go.mod"))&&t.push({label:"go build ./...",binary:"go",args:["build","./..."],coversExtensions:[".go"]}),["pyproject.toml","setup.py","requirements.txt"].some(n=>It(Ge(e,n)))){let n=w0();n&&t.push(n)}for(let n of L0(e))t.push({label:`cargo check --quiet --manifest-path ${n}`,binary:"cargo",args:["check","--quiet","--manifest-path",n],coversExtensions:[".rs"],env:{...process.env,CARGO_TARGET_DIR:Ge(e,n,"..","target")}});return t}function w0(){return Vf("ruff")?{label:"ruff check --select E9,F821,F822",binary:"ruff",args:["check","--quiet","--select","E9,F821,F822","."],coversExtensions:[".py"]}:Vf("python3")?{label:"python3 -m compileall (syntax only)",binary:"python3",args:["-m","compileall","-q","."],coversExtensions:[".py"]}:null}function Vf(e){try{return Uf(e,["--version"],{stdio:"ignore",timeout:1e4}).status===0}catch{return!1}}function L0(e){let t=[];if(It(Ge(e,"Cargo.toml")))return t.push("Cargo.toml"),t;let n;try{n=S0(e)}catch{return t}for(let i of n)i==="node_modules"||i.startsWith(".")||It(Ge(e,i,"Cargo.toml"))&&t.push(`${i}/Cargo.toml`);return t}function D0(e,t){let n;try{n=xi("git",["-C",e,"status","--porcelain"],{encoding:"utf-8"})}catch{return[]}let i=new Set(n.split(`
699
+ `).filter(Boolean)}catch{return null}}function Q_(e){let t=[],n=[""];for(;n.length>0;){let i=n.pop(),r=i?Pf(e,i):e,o;try{o=G_(r,{withFileTypes:!0})}catch{continue}for(let s of o){let a=i?`${i}/${s.name}`:s.name;if(s.isDirectory()){Nf(a)||n.push(a);continue}t.push(a)}}return t}function Nf(e){return e.split("/").some(n=>X_.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var X_=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]),Y_=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"]),Z_={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"]};function yi(e,t,n){let i=new Date().toISOString();if(!Ef(n.dbPath))return{state:"missing",checkedAt:i,metaPath:n.metaPath,reason:"No SQLite index database exists.",remedy:"Run: scip-query reindex"};if(!Ef(n.metaPath))return{state:"unknown",checkedAt:i,metaPath:n.metaPath,reason:"No reindex metadata file exists next to the SQLite index.",remedy:"Run: scip-query reindex"};try{let r=JSON.parse(e0(n.metaPath,"utf-8")),o=t.languages??Dt(e),s=t0(e,o,t),a=Array.isArray(r.indexedLanguages)?[...r.indexedLanguages].sort():[],c=(r.version===2||r.version===3)&&r.status==="complete"&&JSON.stringify(r.fingerprint)===JSON.stringify(s)&&JSON.stringify(a)===JSON.stringify(s.languages);return{state:c?"fresh":"stale",checkedAt:i,metaPath:n.metaPath,updatedAt:r.updatedAt,reason:c?"Index metadata fingerprint matches current source files.":"Index metadata fingerprint differs from current source files.",remedy:c?void 0:"Run: scip-query reindex"}}catch(r){return{state:"unknown",checkedAt:i,metaPath:n.metaPath,reason:`Could not read reindex metadata: ${r instanceof Error?r.message:String(r)}`,remedy:"Run: scip-query reindex"}}}function t0(e,t,n){return{version:1,languages:[...t].sort(),pnpmWorkspaces:n.indexer?.typescript?.pnpmWorkspaces===!0,files:In(e)}}import{execFileSync as $0}from"child_process";import{existsSync as Tf,readdirSync as n0}from"fs";import{join as Gc}from"path";var i0={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n})=>{let i=["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return t&&i.splice(1,0,"--pnpm-workspaces"),{binary:n,args:i}},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:t})=>({binary:t,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:t})=>({binary:t,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:t})=>({binary:"scip-dotnet",args:["index",_f(e,[".sln",".csproj"])??e,"--output",t,"--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:t})=>({binary:"scip-dotnet",args:["index",_f(e,[".sln",".vbproj"])??e,"--output",t,"--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:t})=>({binary:e,args:["--output",t]}),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:t})=>{let n=Gc(e,"vendor","bin","scip-php"),i=Gc(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",Tf(i)?i:Tf(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function Pn(e){return i0[e]}function _f(e,t){let n;try{n=n0(e)}catch{return null}for(let i of t)for(let r of n)if(r.endsWith(i))return Gc(e,r);return null}import{execFileSync as Kc}from"child_process";import{existsSync as zc,readFileSync as a0}from"fs";import{createRequire as c0}from"module";import{platform as l0}from"os";import{dirname as $f,join as ns}from"path";import{execFileSync as r0}from"child_process";import{platform as o0}from"os";var s0=o0()==="win32";function pt(e){let t=s0?"where":"which";try{return r0(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var u0=c0(import.meta.url);function Jc(e){return[e.indexerBinary,...e.binaryAliases??[]]}function is(e){let t=Jc(e);return t.length===1?t[0]:t.join(" or ")}function Si(e){for(let t of Jc(e))if(pt(t))return t;return m0(e)}function Ff(e){return Si(e)!==null||d0(e)}function d0(e){return Af(e)!==null}function m0(e){let t=Af(e);if(!t)return null;let i=JSON.parse(a0(t,"utf8")).bin;if(!i)return null;if(typeof i=="string")return ns($f(t),i);for(let r of Jc(e)){let o=i[r];if(o)return ns($f(t),o)}return null}function Af(e){if(!e.bundledNpmPackage)return null;try{return u0.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Qc(e,t){for(let n of e.projectLocalBinaries??[]){let i=ns(t,n);if(zc(i))return i}return null}function p0(e,t){return Qc(e,t)??Si(e)}function Mf(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Xc(n,t))return t;let i=Of(n,t);return i?{...t,DOTNET_ROOT:i}:t}function rs(e,t){let n=is(e),i=t?p0(e,t):Si(e);if(!i)return{language:e.language,binaryLabel:n,installed:!1,runnable:!1,resolvedBinary:null,installUrl:e.installUrl};if(e.indexerBinary!=="scip-dotnet")return{language:e.language,binaryLabel:n,installed:!0,runnable:!0,resolvedBinary:i};let r=f0(i);return{language:e.language,binaryLabel:n,installed:!0,runnable:r.runnable,resolvedBinary:i,installUrl:e.installUrl,note:r.note}}function os(e,t){let n=e.installMethods,i=is(e);if(!n?.length)return t(`No auto-install method available for ${i}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1;for(let r of n)if(pt(r.prerequisite)){t(`Installing ${i} via ${r.label}...`);try{Kc(r.binary,r.args,{stdio:"inherit",timeout:3e5,env:process.env});let o=Si(e);if(o){let s=o===e.indexerBinary?"":` (using ${o})`;return t(`Successfully installed ${i} via ${r.label}${s}`),!0}t(`${r.label} command completed but ${i} was not found on PATH`)}catch(o){let s=o instanceof Error?o.message:String(o);t(`${r.label} install failed: ${s}`)}}return t(`Could not auto-install ${i}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function f0(e){if(Xc(e,process.env))return{runnable:!0};let t=Of(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=jf(process.env);return{runnable:!1,note:n.length>0?`.NET 9 runtime still unavailable after checking ${n.join(", ")}`:"binary is present, but scip-dotnet still needs a .NET 9 runtime"}}function Of(e,t){for(let n of jf(t))if(Xc(e,{...t,DOTNET_ROOT:n}))return n;return null}function jf(e){let t=[],n=e.DOTNET_ROOT;if(n&&zc(n)&&t.push(n),l0()==="darwin"&&pt("brew"))try{let i=Kc("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),r=ns(i,"libexec");zc(r)&&!t.includes(r)&&t.push(r)}catch{}return t}function Xc(e,t){try{return Kc(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import{createRequire as g0}from"module";var h0=g0(import.meta.url);function Bf(e,t=[]){let n=b0(),i=la(e,t),r=i[0];return n?i.length===0?{available:!1,dependencyAvailable:n,reason:"no tsconfig found"}:{available:!0,dependencyAvailable:n,tsconfigPath:r,tsconfigPaths:i}:{available:!1,dependencyAvailable:n,tsconfigPath:r,tsconfigPaths:i,reason:"ts-morph is not installed"}}function b0(){try{return h0.resolve("ts-morph"),!0}catch{return!1}}import{execFileSync as xi,spawnSync as Uf}from"child_process";import{existsSync as It,mkdtempSync as Wf,readFileSync as y0,readdirSync as S0,rmSync as Gf,symlinkSync as x0,writeFileSync as C0}from"fs";import{tmpdir as zf}from"os";import{join as Ge}from"path";var v0=3e5,R0=12;function Yc(e,t,n={}){let i=Zc(e);if(i.length===0)return{checkers:[],uncoveredFiles:[],baselineErrors:0,dirtyOverlap:[],batches:[]};let r=k0(t,i),o=n.timeoutMs??v0,s=D0(e,t),a=Wf(Ge(zf(),"scip-cleanup-verify-")),c=[],l=new Set;try{xi("git",["-C",e,"worktree","add","--detach","--force",a,"HEAD"],{stdio:"ignore"}),I0(e,a);for(let u of i)for(let d of qf(u,a,o).errorKeys)l.add(d);for(let u of t.batches){Jf(a,u);let d=[];for(let m of i){let p=qf(m,a,o);d.push(...p.rawErrors.filter(h=>!l.has(Kf(h))))}if(d.length===0)c.push({depth:u.depth,status:"verified"});else{c.push({depth:u.depth,status:"failed",errors:d.slice(0,R0)});break}}}finally{try{xi("git",["-C",e,"worktree","remove","--force",a],{stdio:"ignore"})}catch{Gf(a,{recursive:!0,force:!0})}}return{checkers:i.map(u=>u.label),uncoveredFiles:r,baselineErrors:l.size,dirtyOverlap:s,batches:c}}function k0(e,t){let n=new Set(t.flatMap(r=>r.coversExtensions));return[...new Set(e.batches.flatMap(r=>r.entries.map(o=>o.file)))].filter(r=>{let o=r.slice(r.lastIndexOf("."));return!n.has(o)}).sort()}function Kf(e){return e.replace(/\(\d+,\d+\)|:\d+(?::\d+)?/g,"").trim()}var Hf=[".ts",".tsx",".mts",".cts",".js",".jsx",".vue"];function Zc(e){let t=[];if(It(Ge(e,"tsconfig.json"))){let n=Ge(e,"node_modules",".bin","tsc");t.push(It(n)?{label:"tsc --noEmit",binary:n,args:["--noEmit"],coversExtensions:Hf}:{label:"npx tsc --noEmit",binary:"npx",args:["tsc","--noEmit"],coversExtensions:Hf})}if(It(Ge(e,"go.mod"))&&t.push({label:"go build ./...",binary:"go",args:["build","./..."],coversExtensions:[".go"]}),["pyproject.toml","setup.py","requirements.txt"].some(n=>It(Ge(e,n)))){let n=w0();n&&t.push(n)}for(let n of L0(e))t.push({label:`cargo check --quiet --manifest-path ${n}`,binary:"cargo",args:["check","--quiet","--manifest-path",n],coversExtensions:[".rs"],env:{...process.env,CARGO_TARGET_DIR:Ge(e,n,"..","target")}});return t}function w0(){return Vf("ruff")?{label:"ruff check --select E9,F821,F822",binary:"ruff",args:["check","--quiet","--select","E9,F821,F822","."],coversExtensions:[".py"]}:Vf("python3")?{label:"python3 -m compileall (syntax only)",binary:"python3",args:["-m","compileall","-q","."],coversExtensions:[".py"]}:null}function Vf(e){try{return Uf(e,["--version"],{stdio:"ignore",timeout:1e4}).status===0}catch{return!1}}function L0(e){let t=[];if(It(Ge(e,"Cargo.toml")))return t.push("Cargo.toml"),t;let n;try{n=S0(e)}catch{return t}for(let i of n)i==="node_modules"||i.startsWith(".")||It(Ge(e,i,"Cargo.toml"))&&t.push(`${i}/Cargo.toml`);return t}function D0(e,t){let n;try{n=xi("git",["-C",e,"status","--porcelain"],{encoding:"utf-8"})}catch{return[]}let i=new Set(n.split(`
700
700
  `).map(o=>o.slice(3).trim()).filter(o=>o!==""));return[...new Set(t.batches.flatMap(o=>o.entries.map(s=>s.file)))].filter(o=>i.has(o)).sort()}function I0(e,t){for(let n of["node_modules"]){let i=Ge(e,n),r=Ge(t,n);if(It(i)&&!It(r))try{x0(i,r,"junction")}catch{}}}function Jf(e,t){let n=new Map;for(let i of t.entries){let r=n.get(i.file)??[];r.push({start:i.startLine,end:i.endLine}),n.set(i.file,r)}for(let[i,r]of n){let o=Ge(e,i);It(o)&&C0(o,P0(y0(o,"utf-8"),r,{rust:i.endsWith(".rs")}))}}function el(e,t){for(let n of t)Jf(e,n)}function Qf(e,t){let n=Wf(Ge(zf(),"scip-cleanup-patch-"));try{return xi("git",["-C",e,"worktree","add","--detach","--force",n,"HEAD"],{stdio:"ignore"}),el(n,t),xi("git",["-C",n,"diff","--binary"],{encoding:"utf-8",maxBuffer:32*1024*1024})}finally{try{xi("git",["-C",e,"worktree","remove","--force",n],{stdio:"ignore"})}catch{Gf(n,{recursive:!0,force:!0})}}}function tl(e,t={}){if(t.all)return[...e.batches];if(t.batch!==void 0){let n=e.batches.find(i=>i.depth===t.batch);return n?[n]:[]}return[...e.batches]}function nl(e,t,n={}){let i=[];e.checkers.length===0&&i.push("No project checker was detected, so no deletion patch is compiler-verified."),e.uncoveredFiles.length>0&&i.push(`No detected checker covers: ${e.uncoveredFiles.join(", ")}.`),!n.allowDirty&&e.dirtyOverlap.length>0&&i.push(`Plan files are dirty in the working tree: ${e.dirtyOverlap.join(", ")}.`);let r=new Set(e.batches.filter(o=>o.status==="verified").map(o=>o.depth));for(let o of t)r.has(o.depth)||i.push(`Batch ${o.depth} is not compiler-verified.`);return i}function P0(e,t,n={}){let i=e.split(`
701
701
  `),r=(n.rust===!0?N0(e):rn(e)).split(`
702
702
  `),o=new Set;for(let s of t){let a=E0(i,s.start),c=_0(r,a,Math.min(s.end,i.length-1));for(let l=a;l<=c&&l<i.length;l++)o.add(l)}return i.filter((s,a)=>!o.has(a)).join(`
@@ -1,5 +1,5 @@
1
1
  import{a as I,b as R}from"./chunk-KPHKX4LP.js";import{a as h,b as v,f as _}from"./chunk-ONPCQ2PM.js";import{execFileSync as dn}from"child_process";import{closeSync as mn,copyFileSync as fn,existsSync as P,mkdirSync as M,mkdtempSync as hn,openSync as xn,readFileSync as se,renameSync as N,rmSync as A,writeFileSync as oe}from"fs";import{basename as S,dirname as d,extname as yn,join as g}from"path";import{execFileSync as he}from"child_process";import{existsSync as xe,readdirSync as U}from"fs";import{extname as W,join as q}from"path";var ye=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),be=[{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 z(e){let n=[],t=Se(e),r=Re(e);for(let a of be){if(Pe(e,a.files)){n.push(a.language);continue}if(ve(t,a.globs)){n.push(a.language);continue}De(r,a.extensions)&&n.push(a.language)}return n.includes("typescript")&&T(n,"javascript"),n.includes("cpp")&&!r.has(".c")&&T(n,"c"),n}function Se(e){try{return U(e)}catch{return[]}}function Pe(e,n){return n?.length?n.some(t=>xe(q(e,t))):!1}function ve(e,n){return n?.length?e.some(t=>n.some(r=>Ie(t,r))):!1}function Ie(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 Re(e){let n=ke(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=U(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=q(a,s.name);if(s.isDirectory()){ye.has(s.name)||r.push(o);continue}let p=W(s.name).toLowerCase();p&&t.add(p)}}return t}function ke(e){try{let n=he("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=W(r).toLowerCase();a&&t.add(a)}return t}catch{return null}}function De(e,n){return n?.length?n.some(t=>e.has(t)):!1}function T(e,n){let t=e.indexOf(n);t!==-1&&e.splice(t,1)}import{existsSync as J,readdirSync as Oe}from"fs";import{join as k}from"path";var Le={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",G(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",G(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=k(e,"vendor","bin","scip-php"),r=k(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",J(r)?r:J(t)?t:n]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function D(e){return Le[e]}function G(e,n){let t;try{t=Oe(e)}catch{return null}for(let r of t)if(n.some(a=>r.endsWith(a)))return k(e,r);return null}import{readFileSync as Ce,writeFileSync as je}from"fs";import{create as O}from"@bufbuild/protobuf";import{deserializeSCIP as we,serializeSCIP as Ee,DocumentSchema as $e,IndexSchema as Be,SymbolInformationSchema as Fe}from"@c4312/scip";function Me(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let n=Ne(e),t=Ae(e.flatMap(a=>a.documents??[])),r=X(e.flatMap(a=>a.externalSymbols??[]));return O(Be,{metadata:n,documents:t,externalSymbols:r})}function H(e,n){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let t=e.map(a=>we(Ce(a))),r=Me(t);return je(n,Buffer.from(Ee(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Ne(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 Ae(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,O($e,{language:r.language||t.language,relativePath:r.relativePath||t.relativePath,occurrences:[...r.occurrences,...t.occurrences],symbols:X([...r.symbols,...t.symbols]),text:Te(r.text,t.text),positionEncoding:r.positionEncoding||t.positionEncoding}))}return[...n.values()]}function X(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,O(Fe,{symbol:r.symbol,documentation:Ue([...r.documentation,...t.documentation]),relationships:_e([...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 _e(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 Te(e,n){return e?n?e.length>=n.length?e:n:e:n}function Ue(e){return[...new Set(e)]}import{readFileSync as We,writeFileSync as qe}from"fs";import{create as Q}from"@bufbuild/protobuf";import{deserializeSCIP as ze,DocumentSchema as Je,IndexSchema as Ge,serializeSCIP as He,SymbolRole as Xe}from"@c4312/scip";function K(e){let n;try{n=ze(We(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let t=Qe(n);return t.removedDefinitionOccurrences>0&&qe(e,Buffer.from(He(t.index))),{removedDefinitionOccurrences:t.removedDefinitionOccurrences,touchedDocuments:t.touchedDocuments}}function Qe(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&Xe.Definition)===0||n.has(o.symbol)?!0:(t+=1,!1));if(s.length===i.occurrences.length){a.push(i);continue}r+=1,a.push(Q(Je,{language:i.language,relativePath:i.relativePath,occurrences:s,symbols:i.symbols,text:i.text,positionEncoding:i.positionEncoding}))}return{index:t===0?e:Q(Ge,{metadata:e.metadata,documents:a,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:t,touchedDocuments:r}}import{execFile as Ke}from"child_process";import{existsSync as x,renameSync as C,rmSync as j}from"fs";import{cpus as Ve}from"os";import{join as V}from"path";function Ye(e,n,t){if(!e.defaultOutputPath)return;let r=V(n,e.defaultOutputPath);t!==r&&x(r)&&C(r,t)}function Ze(e,n,t){if(!e.defaultOutputPath)return null;let r=V(n,e.defaultOutputPath);if(r===t)return null;let a=`${t}.default-output-backup`;return j(a,{force:!0}),x(r)?(C(r,a),{defaultOutputPath:r,backupPath:a}):{defaultOutputPath:r,backupPath:null}}function en(e){e&&(j(e.defaultOutputPath,{force:!0}),e.backupPath&&x(e.backupPath)&&C(e.backupPath,e.defaultOutputPath))}function nn(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,Ve().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function Y(e,n,t,r){let a=e.filter(u=>u.config.defaultOutputPath),i=e.filter(u=>!u.config.defaultOutputPath),s=[],o=nn(i.length,r),p=await rn(i,o,u=>L(u,n,t));if(o>1){let u=new Map;for(let c of p.filter(l=>l.skipped)){let l=i.find(f=>f.language===c.language);l&&(t(`Retrying ${l.language} indexer serially after parallel failure...`),u.set(l.language,await L(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 L(u,n,t));return s.sort((u,c)=>e.findIndex(l=>l.language===u.language)-e.findIndex(l=>l.language===c.language))}async function L(e,n,t){t(`Indexing ${e.language} with ${e.resolvedBinary}...`),j(e.scipPath,{force:!0});let r=Ze(e.config,n,e.scipPath);try{await tn(e.binary,e.args,{cwd:n,env:e.env,maxBuffer:50*1024*1024}),Ye(e.config,n,e.scipPath)}catch(a){let i=a instanceof Error?a.message:String(a),s=`${e.resolvedBinary} indexer failed: ${i.split(`
2
+ `)){if(!r)continue;let a=W(r).toLowerCase();a&&t.add(a)}return t}catch{return null}}function De(e,n){return n?.length?n.some(t=>e.has(t)):!1}function T(e,n){let t=e.indexOf(n);t!==-1&&e.splice(t,1)}import{existsSync as J,readdirSync as Oe}from"fs";import{join as k}from"path";var Le={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",G(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",G(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=k(e,"vendor","bin","scip-php"),r=k(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",J(r)?r:J(t)?t:n]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function D(e){return Le[e]}function G(e,n){let t;try{t=Oe(e)}catch{return null}for(let r of n)for(let a of t)if(a.endsWith(r))return k(e,a);return null}import{readFileSync as Ce,writeFileSync as je}from"fs";import{create as O}from"@bufbuild/protobuf";import{deserializeSCIP as we,serializeSCIP as Ee,DocumentSchema as $e,IndexSchema as Be,SymbolInformationSchema as Fe}from"@c4312/scip";function Me(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let n=Ne(e),t=Ae(e.flatMap(a=>a.documents??[])),r=X(e.flatMap(a=>a.externalSymbols??[]));return O(Be,{metadata:n,documents:t,externalSymbols:r})}function H(e,n){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let t=e.map(a=>we(Ce(a))),r=Me(t);return je(n,Buffer.from(Ee(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Ne(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 Ae(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,O($e,{language:r.language||t.language,relativePath:r.relativePath||t.relativePath,occurrences:[...r.occurrences,...t.occurrences],symbols:X([...r.symbols,...t.symbols]),text:Te(r.text,t.text),positionEncoding:r.positionEncoding||t.positionEncoding}))}return[...n.values()]}function X(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,O(Fe,{symbol:r.symbol,documentation:Ue([...r.documentation,...t.documentation]),relationships:_e([...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 _e(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 Te(e,n){return e?n?e.length>=n.length?e:n:e:n}function Ue(e){return[...new Set(e)]}import{readFileSync as We,writeFileSync as qe}from"fs";import{create as Q}from"@bufbuild/protobuf";import{deserializeSCIP as ze,DocumentSchema as Je,IndexSchema as Ge,serializeSCIP as He,SymbolRole as Xe}from"@c4312/scip";function K(e){let n;try{n=ze(We(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let t=Qe(n);return t.removedDefinitionOccurrences>0&&qe(e,Buffer.from(He(t.index))),{removedDefinitionOccurrences:t.removedDefinitionOccurrences,touchedDocuments:t.touchedDocuments}}function Qe(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&Xe.Definition)===0||n.has(o.symbol)?!0:(t+=1,!1));if(s.length===i.occurrences.length){a.push(i);continue}r+=1,a.push(Q(Je,{language:i.language,relativePath:i.relativePath,occurrences:s,symbols:i.symbols,text:i.text,positionEncoding:i.positionEncoding}))}return{index:t===0?e:Q(Ge,{metadata:e.metadata,documents:a,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:t,touchedDocuments:r}}import{execFile as Ke}from"child_process";import{existsSync as x,renameSync as C,rmSync as j}from"fs";import{cpus as Ve}from"os";import{join as V}from"path";function Ye(e,n,t){if(!e.defaultOutputPath)return;let r=V(n,e.defaultOutputPath);t!==r&&x(r)&&C(r,t)}function Ze(e,n,t){if(!e.defaultOutputPath)return null;let r=V(n,e.defaultOutputPath);if(r===t)return null;let a=`${t}.default-output-backup`;return j(a,{force:!0}),x(r)?(C(r,a),{defaultOutputPath:r,backupPath:a}):{defaultOutputPath:r,backupPath:null}}function en(e){e&&(j(e.defaultOutputPath,{force:!0}),e.backupPath&&x(e.backupPath)&&C(e.backupPath,e.defaultOutputPath))}function nn(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,Ve().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function Y(e,n,t,r){let a=e.filter(u=>u.config.defaultOutputPath),i=e.filter(u=>!u.config.defaultOutputPath),s=[],o=nn(i.length,r),p=await rn(i,o,u=>L(u,n,t));if(o>1){let u=new Map;for(let c of p.filter(l=>l.skipped)){let l=i.find(f=>f.language===c.language);l&&(t(`Retrying ${l.language} indexer serially after parallel failure...`),u.set(l.language,await L(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 L(u,n,t));return s.sort((u,c)=>e.findIndex(l=>l.language===u.language)-e.findIndex(l=>l.language===c.language))}async function L(e,n,t){t(`Indexing ${e.language} with ${e.resolvedBinary}...`),j(e.scipPath,{force:!0});let r=Ze(e.config,n,e.scipPath);try{await tn(e.binary,e.args,{cwd:n,env:e.env,maxBuffer:50*1024*1024}),Ye(e.config,n,e.scipPath)}catch(a){let i=a instanceof Error?a.message:String(a),s=`${e.resolvedBinary} indexer failed: ${i.split(`
3
3
  `)[0]}`;return t(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{en(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 tn(e,n,t){return new Promise((r,a)=>{Ke(e,[...n],t,i=>{i?a(i):r()})})}async function rn(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 E}from"child_process";import{existsSync as w,readFileSync as an}from"fs";import{createRequire as sn}from"module";import{platform as on}from"os";import{dirname as Z,join as y}from"path";var un=sn(import.meta.url);function $(e){return[e.indexerBinary,...e.binaryAliases??[]]}function B(e){let n=$(e);return n.length===1?n[0]:n.join(" or ")}function b(e){for(let n of $(e))if(h(n))return n;return pn(e)}function ee(e){return b(e)!==null||ln(e)}function ln(e){return ne(e)!==null}function pn(e){let n=ne(e);if(!n)return null;let r=JSON.parse(an(n,"utf8")).bin;if(!r)return null;if(typeof r=="string")return y(Z(n),r);for(let a of $(e)){let i=r[a];if(i)return y(Z(n),i)}return null}function ne(e){if(!e.bundledNpmPackage)return null;try{return un.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function te(e,n){for(let t of e.projectLocalBinaries??[]){let r=y(n,t);if(w(r))return r}return null}function re(e,n=process.env,t=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||ie(t,n))return n;let r=cn(t,n);return r?{...n,DOTNET_ROOT:r}:n}function ae(e,n){let t=e.installMethods,r=B(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(h(a.prerequisite)){n(`Installing ${r} via ${a.label}...`);try{E(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 cn(e,n){for(let t of gn(n))if(ie(e,{...n,DOTNET_ROOT:t}))return t;return null}function gn(e){let n=[],t=e.DOTNET_ROOT;if(t&&w(t)&&n.push(t),on()==="darwin"&&h("brew"))try{let r=E("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),a=y(r,"libexec");w(a)&&!n.includes(a)&&n.push(a)}catch{}return n}function ie(e,n){try{return E(e,["--version"],{stdio:"pipe",env:n}),!0}catch{return!1}}async function ue(e){let{projectRoot:n,maxHeapMb:t=8192,onStatus:r=console.log,skipAutoInstall:a=!1}=e,i=bn(e),s=Date.now();M(d(i.outputScip),{recursive:!0}),M(d(i.outputDb),{recursive:!0});let o=e.languages??z(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=Nn(n,o,{pnpmWorkspaces:e.pnpmWorkspaces}),u=Fn(g(d(i.outputDb),"index.lock")),c=null;try{let l=Sn({opts:e,paths:i,languages:o,fingerprint:p,start:s,onStatus:r});if(l)return l;On(a,r);let f=Pn(i);return c=f.runDir,await vn({opts:e,languages:o,projectRoot:n,paths:i,tempPaths:f,fingerprint:p,start:s,maxHeapMb:t,skipAutoInstall:a,onStatus:r})}finally{c&&A(c,{recursive:!0,force:!0}),u()}}function bn(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 Sn(e){if(e.opts.skipIfUnchanged===!1||!P(e.paths.outputScip)||!P(e.paths.outputDb)||!An(e.paths.metaPath,e.fingerprint))return null;I({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 Pn(e){let n=hn(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 vn(e){let n={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},{indexedOutputs:t,skippedLanguages:r,reusedLanguages:a}=await In(e,n);a.length>0&&e.onStatus(`Reused ${a.length} cached language shard(s): ${a.join(", ")}`),Rn(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 In(e,n){let t=kn(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}=Ln({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 Y(a,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),{indexedOutputs:o}=jn(s,i),p=[...t,...o];return wn(p,i,e.languages,e.opts.allowPartial,e.onStatus),{indexedOutputs:p,skippedLanguages:i,reusedLanguages:[...r]}}function Rn(e,n,t,r){Dn(e.paths.outputDb,t),En(t,e.tempPaths.tempOutputScip,e.onStatus),$n(e.tempPaths.tempOutputScip,e.tempPaths.tempOutputDb,n,e.onStatus),I({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),_n(e.tempPaths.tempMetaPath,{version:3,status:r.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.fingerprint,languageFingerprints:le(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces}),requestedLanguages:e.languages,indexedLanguages:t.map(a=>a.language),skipped:[...r]}),Mn({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 kn(e){let n;try{n=JSON.parse(se(e.paths.metaPath,"utf-8"))}catch{return[]}if(n.version!==3||!n.languageFingerprints)return[];let t=[],r=le(e.projectRoot,e.languages,{pnpmWorkspaces:e.opts.pnpmWorkspaces});for(let a of e.languages){let i=pe(e.paths.outputDb,a);P(i)&&m(n.languageFingerprints[a])===m(r[a])&&t.push({language:a,scipPath:i})}return t}function Dn(e,n){for(let t of n){let r=pe(e,t.language);M(d(r),{recursive:!0}),t.scipPath!==r&&fn(t.scipPath,r)}}function On(e,n){if(!v()){if(e)throw new Error(`The scip CLI is required but not found on PATH.
4
4
  Install from: https://github.com/sourcegraph/scip/releases`);if(n("scip CLI not found on PATH. Attempting auto-install..."),!_(n))throw new Error(`The scip CLI is required but could not be installed.
5
5
  Install manually from: https://github.com/sourcegraph/scip/releases`)}}function Ln(e){let n=[],t=[],r=e.languages.map((a,i)=>({language:a,scipPath:e.languages.length>1?Bn(e.tempOutputScip,a,i):e.tempOutputScip}));for(let{language:a,scipPath:i}of r){let s=Cn({...e,language:a,scipPath:i});"skipped"in s?t.push(s.skipped):n.push(s.prepared)}return{preparedRuns:n,skippedLanguages:t}}function Cn(e){let n=D(e.language),t=B(n),r=te(n,e.projectRoot);if(!r&&!ee(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...`),!ae(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:re(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 wn(e,n,t,r,a){if(e.length===0){let i=n.map(s=>` - ${s.language}: ${s.reason}`).join(`
package/dist/reindex.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import{a as x,b as O,f as F}from"./chunk-ONPCQ2PM.js";import{a as ne}from"./chunk-UUBMFL3F.js";import{a as Z,b as ee}from"./chunk-OBBDKQAG.js";import"./chunk-64MNV6AB.js";import"./chunk-7S5E7KWT.js";import{execFileSync as ur}from"child_process";import{closeSync as cr,copyFileSync as lr,existsSync as w,mkdirSync as K,mkdtempSync as gr,openSync as pr,readFileSync as We,renameSync as Y,rmSync as Q,writeFileSync as Ge}from"fs";import{basename as C,dirname as f,extname as dr,join as d}from"path";import qe from"better-sqlite3";import{execFileSync as Xe}from"child_process";import{existsSync as Ke,readdirSync as Ye,readFileSync as Qe}from"fs";import{extname as v,join as te}from"path";function b(e){let n=new Set((e.extensions??Z).map(i=>i.toLowerCase()));if(n.size===0)return{scanned:0,inserted:0,existing:0};if(!Ke(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let t=ne(e.projectRoot),r=Ze(e.projectRoot,n).filter(i=>!t.isIgnored(i)),o=new qe(e.dbPath);try{let i=nn(o,r),s=o.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
2
2
  VALUES (?, ?, NULL, ?)`),u=o.transaction(g=>{let l=0;for(let p of g){if(i.has(p))continue;let m=Qe(te(e.projectRoot,p),"utf-8"),ze=s.run(tn(p),p,m);l+=Number(ze.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 Ze(e,n){let t=en(e,n);if(t)return t;let r=[],o=i=>{let s=i?te(e,i):e,a;try{a=Ye(s,{withFileTypes:!0})}catch{return}for(let u of a){if(ee.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 en(e,n){try{return Xe("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
3
3
  `).filter(r=>r&&n.has(v(r).toLowerCase())).sort()}catch{return null}}function nn(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 tn(e){return v(e).toLowerCase()===".vue"?"vue":v(e).replace(/^\./,"").toLowerCase()||"source"}import{execFileSync as rn}from"child_process";import{existsSync as on,readdirSync as oe}from"fs";import{extname as ie,join as se}from"path";var sn=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),an=[{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 D(e){let n=[],t=un(e),r=pn(e);for(let o of an){if(cn(e,o.files)){n.push(o.language);continue}if(ln(t,o.globs)){n.push(o.language);continue}mn(r,o.extensions)&&n.push(o.language)}return n.includes("typescript")&&re(n,"javascript"),n.includes("cpp")&&!r.has(".c")&&re(n,"c"),n}function un(e){try{return oe(e)}catch{return[]}}function cn(e,n){return n?.length?n.some(t=>on(se(e,t))):!1}function ln(e,n){return n?.length?e.some(t=>n.some(r=>gn(t,r))):!1}function gn(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 pn(e){let n=dn(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=oe(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=se(o,s.name);if(s.isDirectory()){sn.has(s.name)||r.push(a);continue}let u=ie(s.name).toLowerCase();u&&t.add(u)}}return t}function dn(e){try{let n=rn("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=ie(r).toLowerCase();o&&t.add(o)}return t}catch{return null}}function mn(e,n){return n?.length?n.some(t=>e.has(t)):!1}function re(e,n){let t=e.indexOf(n);t!==-1&&e.splice(t,1)}import{existsSync as ae,readdirSync as fn}from"fs";import{join as E}from"path";var ce={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",ue(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",ue(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=E(e,"vendor","bin","scip-php"),r=E(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",ae(r)?r:ae(t)?t:n]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function k(e){return ce[e]}function ue(e,n){let t;try{t=fn(e)}catch{return null}for(let r of t)if(n.some(o=>r.endsWith(o)))return E(e,r);return null}import{readFileSync as hn,writeFileSync as bn}from"fs";import{create as V}from"@bufbuild/protobuf";import{deserializeSCIP as yn,serializeSCIP as xn,DocumentSchema as Sn,IndexSchema as Rn,SymbolInformationSchema as vn}from"@c4312/scip";function le(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let n=kn(e),t=In(e.flatMap(o=>o.documents??[])),r=ge(e.flatMap(o=>o.externalSymbols??[]));return V(Rn,{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(o=>yn(hn(o))),r=le(t);return bn(n,Buffer.from(xn(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function kn(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 In(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(Sn,{language:r.language||t.language,relativePath:r.relativePath||t.relativePath,occurrences:[...r.occurrences,...t.occurrences],symbols:ge([...r.symbols,...t.symbols]),text:Ln(r.text,t.text),positionEncoding:r.positionEncoding||t.positionEncoding}))}return[...n.values()]}function ge(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(vn,{symbol:r.symbol,documentation:Cn([...r.documentation,...t.documentation]),relationships:Pn([...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 Pn(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 Ln(e,n){return e?n?e.length>=n.length?e:n:e:n}function Cn(e){return[...new Set(e)]}import{execFileSync as wn}from"child_process";import{createHash as On}from"crypto";import{readdirSync as Fn,readFileSync as Dn}from"fs";import{join as de}from"path";function pe(e){return(Vn(e)??Tn(e)).filter(n=>n&&!me(n)).sort()}function S(e,n={}){return(n.language?pe(e).filter(r=>En(r,n.language,n.markerFiles)):pe(e)).map(r=>{let o=de(e,r);try{let i=Dn(o);return{path:r,size:i.byteLength,hash:On("sha256").update(i).digest("hex")}}catch{return{path:r,size:-1,hash:"unreadable"}}})}function En(e,n,t){let r=e.split("/").at(-1)??e;if(t?.includes(e)||t?.includes(r)||Mn.has(r))return!0;let o=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(Nn[n]??[]).includes(o)}function Vn(e){try{return wn("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
4
+ `)){if(!r)continue;let o=ie(r).toLowerCase();o&&t.add(o)}return t}catch{return null}}function mn(e,n){return n?.length?n.some(t=>e.has(t)):!1}function re(e,n){let t=e.indexOf(n);t!==-1&&e.splice(t,1)}import{existsSync as ae,readdirSync as fn}from"fs";import{join as E}from"path";var ce={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",ue(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",ue(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=E(e,"vendor","bin","scip-php"),r=E(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",ae(r)?r:ae(t)?t:n]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function k(e){return ce[e]}function ue(e,n){let t;try{t=fn(e)}catch{return null}for(let r of n)for(let o of t)if(o.endsWith(r))return E(e,o);return null}import{readFileSync as hn,writeFileSync as bn}from"fs";import{create as V}from"@bufbuild/protobuf";import{deserializeSCIP as yn,serializeSCIP as xn,DocumentSchema as Sn,IndexSchema as Rn,SymbolInformationSchema as vn}from"@c4312/scip";function le(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let n=kn(e),t=In(e.flatMap(o=>o.documents??[])),r=ge(e.flatMap(o=>o.externalSymbols??[]));return V(Rn,{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(o=>yn(hn(o))),r=le(t);return bn(n,Buffer.from(xn(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function kn(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 In(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(Sn,{language:r.language||t.language,relativePath:r.relativePath||t.relativePath,occurrences:[...r.occurrences,...t.occurrences],symbols:ge([...r.symbols,...t.symbols]),text:Ln(r.text,t.text),positionEncoding:r.positionEncoding||t.positionEncoding}))}return[...n.values()]}function ge(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(vn,{symbol:r.symbol,documentation:Cn([...r.documentation,...t.documentation]),relationships:Pn([...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 Pn(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 Ln(e,n){return e?n?e.length>=n.length?e:n:e:n}function Cn(e){return[...new Set(e)]}import{execFileSync as wn}from"child_process";import{createHash as On}from"crypto";import{readdirSync as Fn,readFileSync as Dn}from"fs";import{join as de}from"path";function pe(e){return(Vn(e)??Tn(e)).filter(n=>n&&!me(n)).sort()}function S(e,n={}){return(n.language?pe(e).filter(r=>En(r,n.language,n.markerFiles)):pe(e)).map(r=>{let o=de(e,r);try{let i=Dn(o);return{path:r,size:i.byteLength,hash:On("sha256").update(i).digest("hex")}}catch{return{path:r,size:-1,hash:"unreadable"}}})}function En(e,n,t){let r=e.split("/").at(-1)??e;if(t?.includes(e)||t?.includes(r)||Mn.has(r))return!0;let o=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(Nn[n]??[]).includes(o)}function Vn(e){try{return wn("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
5
5
  `).filter(Boolean)}catch{return null}}function Tn(e){let n=[],t=[""];for(;t.length>0;){let r=t.pop(),o=r?de(e,r):e,i;try{i=Fn(o,{withFileTypes:!0})}catch{continue}for(let s of i){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){me(a)||t.push(a);continue}n.push(a)}}return n}function me(e){return e.split("/").some(t=>jn.has(t))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var jn=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]),Mn=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"]),Nn={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 An,writeFileSync as _n}from"fs";import{create as fe}from"@bufbuild/protobuf";import{deserializeSCIP as $n,DocumentSchema as Bn,IndexSchema as Un,serializeSCIP as Wn,SymbolRole as Gn}from"@c4312/scip";function he(e){let n;try{n=$n(An(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let t=Jn(n);return t.removedDefinitionOccurrences>0&&_n(e,Buffer.from(Wn(t.index))),{removedDefinitionOccurrences:t.removedDefinitionOccurrences,touchedDocuments:t.touchedDocuments}}function Jn(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&Gn.Definition)===0||n.has(a.symbol)?!0:(t+=1,!1));if(s.length===i.occurrences.length){o.push(i);continue}r+=1,o.push(fe(Bn,{language:i.language,relativePath:i.relativePath,occurrences:s,symbols:i.symbols,text:i.text,positionEncoding:i.positionEncoding}))}return{index:t===0?e:fe(Un,{metadata:e.metadata,documents:o,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:t,touchedDocuments:r}}import{execFile as Hn}from"child_process";import{existsSync as I,renameSync as M,rmSync as N}from"fs";import{cpus as zn}from"os";import{join as be}from"path";function qn(e,n,t){if(!e.defaultOutputPath)return;let r=be(n,e.defaultOutputPath);t!==r&&I(r)&&M(r,t)}function Xn(e,n,t){if(!e.defaultOutputPath)return null;let r=be(n,e.defaultOutputPath);if(r===t)return null;let o=`${t}.default-output-backup`;return N(o,{force:!0}),I(r)?(M(r,o),{defaultOutputPath:r,backupPath:o}):{defaultOutputPath:r,backupPath:null}}function Kn(e){e&&(N(e.defaultOutputPath,{force:!0}),e.backupPath&&I(e.backupPath)&&M(e.backupPath,e.defaultOutputPath))}function Yn(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,zn().length-1));return Math.max(1,Math.min(e,Math.floor(r)))}async function ye(e,n,t,r){let o=e.filter(c=>c.config.defaultOutputPath),i=e.filter(c=>!c.config.defaultOutputPath),s=[],a=Yn(i.length,r),u=await Zn(i,a,c=>j(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 j(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 j(c,n,t));return s.sort((c,g)=>e.findIndex(l=>l.language===c.language)-e.findIndex(l=>l.language===g.language))}async function j(e,n,t){t(`Indexing ${e.language} with ${e.resolvedBinary}...`),N(e.scipPath,{force:!0});let r=Xn(e.config,n,e.scipPath);try{await Qn(e.binary,e.args,{cwd:n,env:e.env,maxBuffer:50*1024*1024}),qn(e.config,n,e.scipPath)}catch(o){let i=o instanceof Error?o.message:String(o),s=`${e.resolvedBinary} indexer failed: ${i.split(`
6
6
  `)[0]}`;return t(`Skipping ${e.language}: ${s}`),{language:e.language,scipPath:e.scipPath,skipped:{language:e.language,reason:s}}}finally{Kn(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 Qn(e,n,t){return new Promise((r,o)=>{Hn(e,[...n],t,i=>{i?o(i):r()})})}async function Zn(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 _}from"child_process";import{existsSync as A,readFileSync as et}from"fs";import{createRequire as nt}from"module";import{platform as tt}from"os";import{dirname as xe,join as P}from"path";var rt=nt(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(x(n))return n;return it(e)}function B(e){return R(e)!==null||ot(e)}function ot(e){return Se(e)!==null}function it(e){let n=Se(e);if(!n)return null;let r=JSON.parse(et(n,"utf8")).bin;if(!r)return null;if(typeof r=="string")return P(xe(n),r);for(let o of $(e)){let i=r[o];if(i)return P(xe(n),i)}return null}function Se(e){if(!e.bundledNpmPackage)return null;try{return rt.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function U(e,n){for(let t of e.projectLocalBinaries??[]){let r=P(n,t);if(A(r))return r}return null}function W(e,n=process.env,t=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Re(t,n))return n;let r=st(t,n);return r?{...n,DOTNET_ROOT:r}:n}function G(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(x(o.prerequisite)){n(`Installing ${r} via ${o.label}...`);try{_(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 st(e,n){for(let t of at(n))if(Re(e,{...n,DOTNET_ROOT:t}))return t;return null}function at(e){let n=[],t=e.DOTNET_ROOT;if(t&&A(t)&&n.push(t),tt()==="darwin"&&x("brew"))try{let r=_("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),o=P(r,"libexec");A(o)&&!n.includes(o)&&n.push(o)}catch{}return n}function Re(e,n){try{return _(e,["--version"],{stdio:"pipe",env:n}),!0}catch{return!1}}import Bt from"better-sqlite3";import{existsSync as Ut,readFileSync as Wt,writeFileSync as Gt}from"fs";import{dirname as Jt,join as Ht,resolve as zt}from"path";import{readFileSync as ut,rmSync as ct,statSync as lt,mkdtempSync as gt}from"fs";import{cpus as pt,tmpdir as dt}from"os";import{join as J}from"path";import{Worker as mt}from"worker_threads";function ve(e){return e.length>=8&&Ie(e.length)>1}function ke(e){let n=Ie(e.vueFiles.length),t=ht(e.vueFiles),r=yt(t,n),o=new URL("./augment-vue-worker.js",import.meta.url),i=gt(J(dt(),"scip-query-vue-workers-")),s=new SharedArrayBuffer(4),a=new Int32Array(s),u=ft(),c=Date.now();try{for(let l=0;l<r.length;l++)new mt(o,{workerData:{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:r[l],resultPath:J(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(ut(J(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{ct(i,{recursive:!0,force:!0})}}function Ie(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,pt().length-1));return Math.max(1,Math.min(e,t))}function ft(){let e=Number(process.env.SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:3e5}function ht(e){let n=bt(),t=[];for(let r of e){let o=Pe(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 bt(){return Number.POSITIVE_INFINITY}function yt(e,n){let t=Array.from({length:n},()=>({tasks:[],weight:0})),r=e.map(o=>({task:o,weight:xt(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 xt(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,Pe(e.fileName)-e.startOffset)}function Pe(e){try{return lt(e).size}catch{return 1}}import{createRequire as St}from"module";import{existsSync as Rt,readFileSync as z}from"fs";import{dirname as Le,extname as vt,join as Ce,relative as kt,resolve as It}from"path";import{pathToFileURL as Pt}from"url";function Lt(e){e.transaction(()=>{e.prepare(`
7
7
  DELETE FROM mentions
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scip-query",
3
- "version": "0.10.5",
3
+ "version": "0.10.6",
4
4
  "description": "Evidence and verification for AI coding agents: map code, reuse concepts, finish migrations, and gate diffs.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",