scip-query 0.17.1 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +2 -1
- package/dist/chunk-2GX3TNOW.js +38 -0
- package/dist/{chunk-Y4BBVPRK.js → chunk-35TZERMO.js} +2 -2
- package/dist/{chunk-PPAT3XUL.js → chunk-43QUXX3E.js} +2 -2
- package/dist/{chunk-O27267B6.js → chunk-45XOH33S.js} +2 -2
- package/dist/{chunk-SQJ72PQW.js → chunk-4MFMTEJ4.js} +5 -5
- package/dist/chunk-4XTPZ5CR.js +9 -0
- package/dist/chunk-6JSTKSZH.js +3 -0
- package/dist/{chunk-75H6GOND.js → chunk-7ROLM67J.js} +2 -2
- package/dist/{chunk-35DURZXI.js → chunk-ABDXTPCT.js} +2 -2
- package/dist/{chunk-HYRSGWFX.js → chunk-AV54WZUK.js} +2 -2
- package/dist/chunk-AWYKDRYV.js +2 -0
- package/dist/{chunk-O56VBJKB.js → chunk-BAMVG4WQ.js} +2 -2
- package/dist/{chunk-RPPV6Y4K.js → chunk-BECOMXAL.js} +2 -2
- package/dist/{chunk-W3HSUCRG.js → chunk-BJJHBKEC.js} +2 -2
- package/dist/{chunk-IZLWLO4X.js → chunk-D5F3IQYP.js} +2 -2
- package/dist/{chunk-2TM23JYJ.js → chunk-DDGO34I2.js} +2 -2
- package/dist/{chunk-G4IUQW27.js → chunk-DUKRAHV2.js} +2 -2
- package/dist/{chunk-MBDBNQBW.js → chunk-EJ65IVPV.js} +2 -2
- package/dist/{chunk-MON5XXTG.js → chunk-EMEXMHOP.js} +2 -2
- package/dist/{chunk-JYBP5ZIR.js → chunk-FMD46HAG.js} +2 -2
- package/dist/{chunk-WENI5ZDR.js → chunk-GTANVH72.js} +2 -2
- package/dist/{chunk-FZXN37RN.js → chunk-GWCW25ON.js} +2 -2
- package/dist/chunk-GWNE2WJN.js +3 -0
- package/dist/{chunk-CSMPXDYE.js → chunk-H4JNB7RT.js} +2 -2
- package/dist/{chunk-WGDIA2TU.js → chunk-HOZ3IXZ5.js} +2 -2
- package/dist/{chunk-OP5JXGDV.js → chunk-IG6X65MG.js} +2 -2
- package/dist/{chunk-KZ2LZBQT.js → chunk-IKMOYFUM.js} +2 -2
- package/dist/{chunk-HGO3D2JD.js → chunk-J7IMQRCU.js} +2 -2
- package/dist/{chunk-5N5ZC566.js → chunk-K65T4TJS.js} +2 -2
- package/dist/{chunk-BTYDBDX5.js → chunk-L2RE5P3X.js} +2 -2
- package/dist/{chunk-2DUWNJKE.js → chunk-L2TSLMPT.js} +2 -2
- package/dist/{chunk-OC7XDK62.js → chunk-LADYDOS5.js} +2 -2
- package/dist/{chunk-Y5BOEWAE.js → chunk-LL5NQB5V.js} +2 -2
- package/dist/{chunk-QYBCGCY5.js → chunk-MN54AGZ3.js} +2 -2
- package/dist/chunk-MNRKD3WP.js +18 -0
- package/dist/chunk-MPBN5DO4.js +2 -0
- package/dist/{chunk-IKAJI4SI.js → chunk-NQBMGFFD.js} +2 -2
- package/dist/{chunk-LG33DNTZ.js → chunk-NX2YAXVQ.js} +2 -2
- package/dist/{chunk-VDHEX6YO.js → chunk-O5A7BTMA.js} +2 -2
- package/dist/{chunk-OBPR6E5Z.js → chunk-O5Y3ISO3.js} +2 -2
- package/dist/{chunk-WT34AUWL.js → chunk-ODH4FT3P.js} +2 -2
- package/dist/{chunk-U3JW5AYG.js → chunk-OINSINYW.js} +2 -2
- package/dist/{chunk-FY6RCFDH.js → chunk-OM6JHEW3.js} +2 -2
- package/dist/{chunk-DQYG5JHT.js → chunk-OQFPCIXO.js} +2 -2
- package/dist/{chunk-BW4VDICR.js → chunk-OSBLECSI.js} +2 -2
- package/dist/{chunk-5QSMW5IO.js → chunk-OTTHMUMV.js} +2 -2
- package/dist/{chunk-W2I4QAW7.js → chunk-OUXPJ4H5.js} +2 -2
- package/dist/{chunk-BBTVIIOI.js → chunk-OWXNDSG3.js} +2 -2
- package/dist/{chunk-CKRVVBM6.js → chunk-P4L5QQT5.js} +2 -2
- package/dist/{chunk-E5HPTSRD.js → chunk-POGZSZPX.js} +2 -2
- package/dist/{chunk-V7MX6YUF.js → chunk-PV3GKBO5.js} +2 -2
- package/dist/{chunk-KWMRY4RN.js → chunk-PZV2PGBR.js} +3 -3
- package/dist/{chunk-KWQKWY6M.js → chunk-Q4UM4JJP.js} +2 -2
- package/dist/{chunk-7H37Z4UO.js → chunk-QPF7CS5W.js} +2 -2
- package/dist/chunk-R4VPIS4D.js +10 -0
- package/dist/{chunk-623AZLTE.js → chunk-RDX6WWHN.js} +2 -2
- package/dist/{chunk-HJYHSTCP.js → chunk-S43DIBME.js} +2 -2
- package/dist/chunk-SALRDXWM.js +121 -0
- package/dist/{chunk-PA2MQKXD.js → chunk-SUYCF4SX.js} +2 -2
- package/dist/{chunk-SSH2NPYS.js → chunk-SW7LKHRU.js} +2 -2
- package/dist/{chunk-HZVG4KID.js → chunk-SWJEREML.js} +2 -2
- package/dist/{chunk-TR7C5HOC.js → chunk-T4P27T6S.js} +2 -2
- package/dist/chunk-VQWDZ34M.js +928 -0
- package/dist/chunk-VXDMXZKC.js +5 -0
- package/dist/chunk-W3557RPL.js +3 -0
- package/dist/chunk-W3SKYOTF.js +2 -0
- package/dist/{chunk-UKUISUS6.js → chunk-XEEQX5X3.js} +2 -2
- package/dist/{chunk-7Z5UT44B.js → chunk-YMFHC5J2.js} +2 -2
- package/dist/cli.js +3 -1528
- package/dist/command-descriptors-AQWWJNTT.js +599 -0
- package/dist/direct-navigation-K3CTVVBU.js +3 -0
- package/dist/index.js +1 -1
- package/dist/postinstall.js +1 -1
- package/dist/queries/affected.js +1 -1
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.d.ts +2 -0
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/convergence.js +1 -1
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/dataflow.js +1 -1
- package/dist/queries/dead.js +1 -1
- package/dist/queries/decorative-checkers.js +1 -1
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-gate.js +1 -1
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.js +1 -1
- package/dist/queries/duplicate-bodies.js +1 -1
- package/dist/queries/extract-candidates.js +1 -1
- package/dist/queries/fan.js +1 -1
- package/dist/queries/health.js +1 -1
- package/dist/queries/hierarchy.js +1 -1
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.js +1 -1
- package/dist/queries/isolated.js +1 -1
- package/dist/queries/locality-candidates.js +1 -1
- package/dist/queries/members.js +1 -1
- package/dist/queries/methods.js +1 -1
- package/dist/queries/not-implemented.js +1 -1
- package/dist/queries/outline.js +1 -1
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.d.ts +2 -0
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/refs.js +1 -1
- package/dist/queries/self-audit.js +1 -1
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice.js +1 -1
- package/dist/queries/stale-abstractions.js +1 -1
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system.js +1 -1
- package/dist/queries/test-quality.js +1 -1
- package/dist/queries/trace.js +1 -1
- package/dist/queries/twin-ab.js +1 -1
- package/dist/queries/twin-drift.js +1 -1
- package/dist/queries/unused-imports.js +1 -1
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/wrapper-candidates.js +1 -1
- package/dist/reindex-worker.js +24 -24
- package/dist/reindex.js +36 -36
- package/dist/runtime.js +1 -1
- package/dist/watch-server.js +4 -4
- package/docs/COMMAND_REFERENCE.md +4 -1
- package/package.json +1 -1
- package/skills/_shared/SKILL.md +1 -1
- package/skills/scip-api-impact/SKILL.md +5 -1
- package/skills/scip-claim-audit/SKILL.md +1 -0
- package/skills/scip-cleanup-audit/SKILL.md +4 -0
- package/skills/scip-concrete-plan/SKILL.md +129 -48
- package/skills/scip-debug/SKILL.md +6 -1
- package/skills/scip-explore/SKILL.md +2 -1
- package/skills/scip-integrity-audit/SKILL.md +17 -0
- package/skills/scip-maintainability/SKILL.md +6 -1
- package/skills/scip-query/SKILL.md +3 -0
- package/skills/scip-root-cause/SKILL.md +150 -0
- package/skills/scip-root-cause/agents/openai.yaml +4 -0
- package/skills/scip-tla-model-system/SKILL.md +7 -9
- package/skills/scip-verify/SKILL.md +19 -2
- package/dist/chunk-2HCWAL42.js +0 -3
- package/dist/chunk-3YEBIYXL.js +0 -38
- package/dist/chunk-6TJERPN3.js +0 -2
- package/dist/chunk-E7BTIEAY.js +0 -2
- package/dist/chunk-EUMETOTD.js +0 -21
- package/dist/chunk-GRHA5NGF.js +0 -2
- package/dist/chunk-IHD2CHMX.js +0 -10
- package/dist/chunk-TFWDJDGO.js +0 -2
- package/dist/chunk-U267E6YN.js +0 -120
- package/dist/chunk-X566NT42.js +0 -9
package/dist/reindex-worker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XHIJHI.js";import{$ as bt,Aa as Re,C as st,Ca as re,Da as Ot,E as ut,F as pt,Fa as Mt,I as be,O as $,Q as gt,U as ft,V as Y,W as mt,X as K,Y as ht,Z as yt,_ as St,a as X,e as Ze,g as et,ga as Pt,h as T,ha as xt,i as C,ia as Rt,ja as It,k as rt,ka as vt,la as Et,m as it,ma as Ft,n as at,na as jt,o as Q,oa as wt,pa as _t,qa as B,ra as te,sa as Dt,u as A,ua as ne,va as Tt,wa as Pe,xa as kt,ya as xe}from"./chunk-U267E6YN.js";import{b as tt,c as nt,f as w,g as V,h as ct,i as lt,j as dt}from"./chunk-SMBIGBGN.js";import{a as k,b as O}from"./chunk-3M2UCPFS.js";import{e as F,f as L}from"./chunk-JHK2DMUQ.js";import{a as z,b as Se,c as Ke}from"./chunk-TFWDJDGO.js";import{execFileSync as aa}from"child_process";import{createHash as sa}from"crypto";import{closeSync as oa,copyFileSync as fe,existsSync as E,mkdirSync as ge,mkdtempSync as ca,openSync as la,readdirSync as da,readFileSync as me,renameSync as An,rmSync as D,statSync as ua,writeFileSync as pa}from"fs";import{basename as pe,dirname as h,extname as ga,join as R,resolve as Tn}from"path";import{platform as fa}from"os";import{existsSync as Nt,readdirSync as ir}from"fs";import{isAbsolute as ar,join as Ie,resolve as sr}from"path";var or={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n,projectPath:r})=>{let i=r?["index","--output",e,"--no-progress-bar",r]:["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return t&&!r&&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"},clojure:{language:"clojure",indexerBinary:"scip-clojure",projectLocalBinaries:["node_modules/.bin/scip-clojure"],checkCommand:"scip-clojure -h",indexArgs:({projectRoot:e,outputPath:t,indexerBinary:n,configPath:r})=>{let i=["-root",e,"-output",t];return r&&i.push("-config",ar(r)?r:sr(e,r)),{binary:n,args:i}},markerFiles:["deps.edn","project.clj","bb.edn","shadow-cljs.edn"],installMethods:[],installUrl:"https://github.com/PlunderStruck/scip-clojure"},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",Lt(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",Lt(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=Ie(e,"vendor","bin","scip-php"),r=Ie(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",Nt(r)?r:Nt(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function ve(e){return or[e]}function Lt(e,t){let n;try{n=ir(e)}catch{return null}for(let r of t)for(let i of n)if(i.endsWith(r))return Ie(e,i);return null}import{execFileSync as Fe}from"child_process";import{existsSync as Ee,readFileSync as cr}from"fs";import{createRequire as lr}from"module";import{platform as dr}from"os";import{dirname as Ct,join as ie}from"path";var ur=lr(import.meta.url);function je(e){return[e.indexerBinary,...e.binaryAliases??[]]}function we(e){let t=je(e);return t.length===1?t[0]:t.join(" or ")}function ae(e){for(let t of je(e))if(z(t))return t;return gr(e)}function At(e){return ae(e)!==null||pr(e)}function pr(e){return $t(e)!==null}function gr(e){let t=$t(e);if(!t)return null;let r=JSON.parse(cr(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return ie(Ct(t),r);for(let i of je(e)){let a=r[i];if(a)return ie(Ct(t),a)}return null}function $t(e){if(!e.bundledNpmPackage)return null;try{return ur.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Bt(e,t){for(let n of e.projectLocalBinaries??[]){let r=ie(t,n);if(Ee(r))return r}return null}function Gt(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Jt(n,t))return t;let r=fr(n,t);return r?{...t,DOTNET_ROOT:r}:t}function Ut(e,t){let n=e.installMethods,r=we(e);if(!n?.length)return t(`No auto-install method available for ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1;for(let i of n)if(z(i.prerequisite)){t(`Installing ${r} via ${i.label}...`);try{Fe(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let a=ae(e);if(a){let s=a===e.indexerBinary?"":` (using ${a})`;return t(`Successfully installed ${r} via ${i.label}${s}`),!0}t(`${i.label} command completed but ${r} was not found on PATH`)}catch(a){let s=a instanceof Error?a.message:String(a);t(`${i.label} install failed: ${s}`)}}return t(`Could not auto-install ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function fr(e,t){for(let n of mr(t))if(Jt(e,{...t,DOTNET_ROOT:n}))return n;return null}function mr(e){let t=[],n=e.DOTNET_ROOT;if(n&&Ee(n)&&t.push(n),dr()==="darwin"&&z("brew"))try{let r=Fe("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=ie(r,"libexec");Ee(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function Jt(e,t){try{return Fe(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import{readFileSync as Fs}from"fs";import{dirname as ws,join as _s}from"path";var Wt=at({kind:"file-dependency-graph",invalidation:Q("file-dependency-graph"),serialize:e=>JSON.stringify(e),deserialize:Rr}),hr=tt("file-dep-graph",{clearGroups:["whole-project"]});function M(e,t,n={}){let r=n.scipEdges??"all-references";return hr.get(e,`${r}:${t??""}`,()=>{let i=new Set(w(e,{includeIgnored:!1})),a=rt(e),s=br(t,r),o=0,l=0,c=null,d=!1,u=0,g=0;return F("file-dep-graph.product",()=>{if(a){let f=Wt.read(e,s,a);if(f){d=!0;let b=xr(f);return o=f.sourceFileCount,l=f.sourceEdgeCount,u=f.scipEdgeCount,g=b.size,c=f.sourceImportFingerprint,b}}let m=F("file-dep-graph.source-imports",()=>{let f=yr(e,i,t);return o=f.files.length,l=f.edges.length,c=f.fingerprint,f},()=>({scope:t??null,files:o,edges:l})),p=new Map,S=(f,b)=>Fr(e,p,i,f,b);F("file-dep-graph.scip-edges",()=>{for(let f of Er(e,t,r))u+=1,S(f.from_file,f.to_file)},()=>({scope:t??null,edges:u}));for(let f of m.edges)S(f.fromFile,f.toFile);return g=p.size,a&&Wt.write(e,s,a,{sourceImportFingerprint:m.fingerprint,sourceFileCount:m.files.length,sourceEdgeCount:m.edges.length,scipEdgeCount:u,graph:Pr(p)}),p},()=>({scope:t??null,available:a!==null,hit:d,files:o,sourceEdges:l,scipEdges:u,graphFiles:g,sourceImportFingerprint:c}))})}function yr(e,t,n){let r=[],i=[];for(let a of t)if(!(n&&!a.includes(n))){r.push(a);for(let s of st(e,a))s.sourcePath&&i.push({fromFile:a,toFile:s.sourcePath})}return{files:r,edges:i,fingerprint:Sr(r,i)}}function Sr(e,t){let n=t.map(r=>`${r.fromFile}\0${r.toFile}`).sort();return C(JSON.stringify({files:e,edges:n}))}function br(e,t){return`edge-mode-v2:${t}:${e??"<all>"}`}function Pr(e){return[...e].map(([t,n])=>[t,[...n]])}function xr(e){return new Map(e.graph.map(([t,n])=>[t,new Set(n)]))}function Rr(e){let t=JSON.parse(e);return Ir(t)?t:null}function Ir(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.sourceImportFingerprint=="string"&&typeof t.sourceFileCount=="number"&&typeof t.sourceEdgeCount=="number"&&typeof t.scipEdgeCount=="number"&&Array.isArray(t.graph)&&t.graph.every(vr)}function vr(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="string"&&Array.isArray(e[1])&&e[1].every(t=>typeof t=="string")}function Er(e,t,n){let r=t?"AND d1.relative_path LIKE ?":"",i=t?[`%${t}%`]:[],a=n==="imports-only"?"AND m.role = 2":"AND m.role != 1";return e.all(`SELECT DISTINCT
|
|
1
|
+
import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as dt}from"./chunk-P5XHIJHI.js";import{$ as Rt,Aa as Re,C as lt,Ca as re,Da as Ct,E as ft,F as mt,Fa as Lt,I as be,O as $,Q as ht,U as yt,V as Y,W as St,X as K,Y as bt,Z as Pt,_ as xt,a as X,e as nt,g as rt,ga as It,h as T,ha as vt,i as L,ia as Et,ja as Ft,k as st,ka as wt,la as jt,m as ot,ma as _t,n as ct,na as Dt,o as Q,oa as Tt,pa as kt,qa as B,ra as te,sa as Ot,u as A,ua as ne,va as Mt,wa as Pe,xa as Nt,ya as xe}from"./chunk-SALRDXWM.js";import{b as it,c as at,f as j,g as V,h as ut,i as pt,j as gt}from"./chunk-SMBIGBGN.js";import{a as k,b as O}from"./chunk-3M2UCPFS.js";import{e as F,f as C}from"./chunk-JHK2DMUQ.js";import{a as z,b as Ze,c as et,d as Se,e as tt}from"./chunk-W3SKYOTF.js";import{execFileSync as oa}from"child_process";import{createHash as ca}from"crypto";import{closeSync as la,copyFileSync as fe,existsSync as E,mkdirSync as ge,mkdtempSync as da,openSync as ua,readdirSync as pa,readFileSync as me,renameSync as Gn,rmSync as D,statSync as ga,writeFileSync as fa}from"fs";import{basename as pe,dirname as h,extname as ma,join as R,resolve as Mn}from"path";import{platform as ha}from"os";import{existsSync as At,readdirSync as or}from"fs";import{isAbsolute as cr,join as Ie,resolve as lr}from"path";var dr={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n,projectPath:r})=>{let i=r?["index","--output",e,"--no-progress-bar",r]:["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return t&&!r&&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"},clojure:{language:"clojure",indexerBinary:"scip-clojure",projectLocalBinaries:["node_modules/.bin/scip-clojure"],checkCommand:"scip-clojure -h",indexArgs:({projectRoot:e,outputPath:t,indexerBinary:n,configPath:r})=>{let i=["-root",e,"-output",t];return r&&i.push("-config",cr(r)?r:lr(e,r)),{binary:n,args:i}},markerFiles:["deps.edn","project.clj","bb.edn","shadow-cljs.edn"],installMethods:[],installUrl:"https://github.com/PlunderStruck/scip-clojure"},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",$t(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",$t(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=Ie(e,"vendor","bin","scip-php"),r=Ie(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",At(r)?r:At(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function ve(e){return dr[e]}function $t(e,t){let n;try{n=or(e)}catch{return null}for(let r of t)for(let i of n)if(i.endsWith(r))return Ie(e,i);return null}import{execFileSync as Fe}from"child_process";import{existsSync as Ee,readFileSync as ur}from"fs";import{createRequire as pr}from"module";import{platform as we}from"os";import{dirname as Bt,join as ie}from"path";var gr=pr(import.meta.url);function je(e){return[e.indexerBinary,...e.binaryAliases??[]]}function _e(e){let t=je(e);return t.length===1?t[0]:t.join(" or ")}function ae(e){for(let t of je(e))if(we()==="win32"){let n=et(t);if(n)return n}else if(z(t))return t;return mr(e)}function Gt(e){return ae(e)!==null||fr(e)}function fr(e){return Ut(e)!==null}function mr(e){let t=Ut(e);if(!t)return null;let r=JSON.parse(ur(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return ie(Bt(t),r);for(let i of je(e)){let a=r[i];if(a)return ie(Bt(t),a)}return null}function Ut(e){if(!e.bundledNpmPackage)return null;try{return gr.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Jt(e,t){for(let n of e.projectLocalBinaries??[]){let r=ie(t,n);if(Ee(r))return r}return null}function Wt(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||qt(n,t))return t;let r=hr(n,t);return r?{...t,DOTNET_ROOT:r}:t}function Ht(e,t){let n=e.installMethods,r=_e(e);if(!n?.length)return t(`No auto-install method available for ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1;for(let i of n)if(z(i.prerequisite)){t(`Installing ${r} via ${i.label}...`);try{Fe(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env,shell:we()==="win32"});let a=ae(e);if(a){let s=a===e.indexerBinary?"":` (using ${a})`;return t(`Successfully installed ${r} via ${i.label}${s}`),!0}t(`${i.label} command completed but ${r} was not found on PATH`)}catch(a){let s=a instanceof Error?a.message:String(a);t(`${i.label} install failed: ${s}`)}}return t(`Could not auto-install ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function hr(e,t){for(let n of yr(t))if(qt(e,{...t,DOTNET_ROOT:n}))return n;return null}function yr(e){let t=[],n=e.DOTNET_ROOT;if(n&&Ee(n)&&t.push(n),we()==="darwin"&&z("brew"))try{let r=Fe("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=ie(r,"libexec");Ee(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function qt(e,t){try{return Fe(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import{readFileSync as js}from"fs";import{dirname as Ds,join as Ts}from"path";var zt=ct({kind:"file-dependency-graph",invalidation:Q("file-dependency-graph"),serialize:e=>JSON.stringify(e),deserialize:vr}),Sr=it("file-dep-graph",{clearGroups:["whole-project"]});function M(e,t,n={}){let r=n.scipEdges??"all-references";return Sr.get(e,`${r}:${t??""}`,()=>{let i=new Set(j(e,{includeIgnored:!1})),a=st(e),s=xr(t,r),o=0,l=0,c=null,d=!1,u=0,g=0;return F("file-dep-graph.product",()=>{if(a){let f=zt.read(e,s,a);if(f){d=!0;let b=Ir(f);return o=f.sourceFileCount,l=f.sourceEdgeCount,u=f.scipEdgeCount,g=b.size,c=f.sourceImportFingerprint,b}}let m=F("file-dep-graph.source-imports",()=>{let f=br(e,i,t);return o=f.files.length,l=f.edges.length,c=f.fingerprint,f},()=>({scope:t??null,files:o,edges:l})),p=new Map,S=(f,b)=>jr(e,p,i,f,b);F("file-dep-graph.scip-edges",()=>{for(let f of wr(e,t,r))u+=1,S(f.from_file,f.to_file)},()=>({scope:t??null,edges:u}));for(let f of m.edges)S(f.fromFile,f.toFile);return g=p.size,a&&zt.write(e,s,a,{sourceImportFingerprint:m.fingerprint,sourceFileCount:m.files.length,sourceEdgeCount:m.edges.length,scipEdgeCount:u,graph:Rr(p)}),p},()=>({scope:t??null,available:a!==null,hit:d,files:o,sourceEdges:l,scipEdges:u,graphFiles:g,sourceImportFingerprint:c}))})}function br(e,t,n){let r=[],i=[];for(let a of t)if(!(n&&!a.includes(n))){r.push(a);for(let s of lt(e,a))s.sourcePath&&i.push({fromFile:a,toFile:s.sourcePath})}return{files:r,edges:i,fingerprint:Pr(r,i)}}function Pr(e,t){let n=t.map(r=>`${r.fromFile}\0${r.toFile}`).sort();return L(JSON.stringify({files:e,edges:n}))}function xr(e,t){return`edge-mode-v2:${t}:${e??"<all>"}`}function Rr(e){return[...e].map(([t,n])=>[t,[...n]])}function Ir(e){return new Map(e.graph.map(([t,n])=>[t,new Set(n)]))}function vr(e){let t=JSON.parse(e);return Er(t)?t:null}function Er(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.sourceImportFingerprint=="string"&&typeof t.sourceFileCount=="number"&&typeof t.sourceEdgeCount=="number"&&typeof t.scipEdgeCount=="number"&&Array.isArray(t.graph)&&t.graph.every(Fr)}function Fr(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="string"&&Array.isArray(e[1])&&e[1].every(t=>typeof t=="string")}function wr(e,t,n){let r=t?"AND d1.relative_path LIKE ?":"",i=t?[`%${t}%`]:[],a=n==="imports-only"?"AND m.role = 2":"AND m.role != 1";return e.all(`SELECT DISTINCT
|
|
2
2
|
d1.relative_path AS from_file,
|
|
3
3
|
d2.relative_path AS to_file
|
|
4
4
|
FROM mentions m
|
|
@@ -16,7 +16,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
16
16
|
WHERE d1.id != d2.id
|
|
17
17
|
${a}
|
|
18
18
|
${e.pathExclusionsFor("d1","d2")}
|
|
19
|
-
${r}`,...i)}function
|
|
19
|
+
${r}`,...i)}function jr(e,t,n,r,i){if(r===i||e.isIgnored(r)||e.isIgnored(i)||!n.has(i))return;let a=t.get(r);a||(a=new Set,t.set(r,a)),a.add(i)}function oe(e){let t=se(e.projectFiles),n=new Set(t),r=new Map(e.snapshot.files.map(u=>[u.path,u])),i=e.snapshot.files.filter(u=>{let g=V(u.path,["typescript"]);return g==="config"||g==="ambient"}).map(u=>u.path),a=se([...t,...i]),s=a.find(u=>!r.has(u)),o=new Set(e.snapshot.files.map(u=>u.path)).size!==e.snapshot.files.length,l=!s&&a.some(u=>Xt(r.get(u))),c=L(JSON.stringify({pnpmWorkspaces:e.snapshot.pnpmWorkspaces,typescriptProjectMode:e.snapshot.typescriptProjectMode,typescriptProjects:se(e.snapshot.typescriptProjects),membership:t})),d=new Map;return{identityFor(u,g){if(!n.has(u))return N("target-outside-project");if(o)return N("duplicate-input-path");if(s)return N("missing-input-fingerprint");if(l)return N("unreadable-input");let m=[],p,S;if(e.graph===null)m.push("dependency-graph-unavailable"),S="whole-project",p=a;else{let y=Dr(u,e.graph,d);if(y.find(P=>!r.has(P)))return N("missing-input-fingerprint");if(p=se([...y,...i]),p.some(P=>Xt(r.get(P))))return N("unreadable-input");S="dependency-closure"}let f=p.map(y=>Tr(r.get(y)));return{version:1,key:L(JSON.stringify({version:1,engineIdentity:e.engineIdentity,schemaVersion:g,projectIdentity:c,inputs:f})),mode:S,inputFiles:p,reasons:m}}}}function _r(e,t){let n=new Set,r=[e];for(let i=0;i<r.length;i+=1){let a=r[i];if(!(a===void 0||n.has(a))){n.add(a);for(let s of[...t.get(a)??[]].sort())n.has(s)||r.push(s)}}return[...n].sort()}function Dr(e,t,n){let r=n.get(e);if(r)return r;let i=_r(e,t);return n.set(e,i),i}function Tr(e){return{path:e.path,size:e.size,hash:e.hash}}function Xt(e){return e.size<0||e.hash==="unreadable"}function N(e){return{version:1,key:null,mode:"unkeyed",inputFiles:[],reasons:[e]}}function se(e){return[...new Set(e)].sort()}var Ns=at("typescript-semantic-identity-context",{clearGroups:["whole-project"]});function Qt(e){return j(e,{includeIgnored:!1}).filter($).sort()}var kr="typescript-reference-fragment-v2",Or=ot({kind:"typescript-reference-fragments",invalidation:Q("typescript-reference-fragments"),serialize:e=>JSON.stringify(e),deserialize:Mr});function Vt(e,t,n,r=e){let i=Qt(e),a=oe({projectFiles:i,snapshot:t,graph:M(e),engineIdentity:ht()}),s=[...n].map(([o,l])=>({relativePath:o,contentHash:a.identityFor(o,kr).key,value:[...l]}));if(s.some(o=>o.contentHash===null))throw new Error("TypeScript reference fragment identity is unavailable for an affected document.");return Or.writeBatch(r,s.map(o=>({...o,contentHash:o.contentHash}))),s.length}function Mr(e){try{let t=JSON.parse(e);return!Array.isArray(t)||!t.every(Nr)?null:t}catch{return null}}function Nr(e){if(!e||typeof e!="object")return!1;let t=e,n=t.location;return typeof t.targetSymbol=="string"&&!!n&&typeof n.file=="string"&&typeof n.line=="number"&&typeof n.column=="number"}import{createHash as Cr}from"crypto";import{appendFileSync as Lr,existsSync as Ar,mkdirSync as $r,readFileSync as qs}from"fs";import{dirname as Zt,join as Yt}from"path";var Br="<global-symbols>";function Gr(e){let t=[];for(let n of e.all(`
|
|
20
20
|
SELECT relative_path, language, position_encoding, text
|
|
21
21
|
FROM documents
|
|
22
22
|
`))t.push({relativePath:n.relative_path,kind:"document",values:[n.language,n.position_encoding,n.text]});for(let n of e.all(`
|
|
@@ -43,7 +43,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
43
43
|
FROM defn_enclosing_ranges r
|
|
44
44
|
JOIN documents d ON d.id = r.document_id
|
|
45
45
|
JOIN global_symbols g ON g.id = r.symbol_id
|
|
46
|
-
`))t.push({relativePath:n.relative_path,kind:"definition",values:
|
|
46
|
+
`))t.push({relativePath:n.relative_path,kind:"definition",values:De(n,[n.start_line,n.start_char,n.end_line,n.end_char])});for(let n of e.all(`
|
|
47
47
|
SELECT d.relative_path,
|
|
48
48
|
c.chunk_index,
|
|
49
49
|
m.role,
|
|
@@ -58,7 +58,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
58
58
|
JOIN chunks c ON c.id = m.chunk_id
|
|
59
59
|
JOIN documents d ON d.id = c.document_id
|
|
60
60
|
JOIN global_symbols g ON g.id = m.symbol_id
|
|
61
|
-
`))t.push({relativePath:n.relative_path,kind:"mention",values:
|
|
61
|
+
`))t.push({relativePath:n.relative_path,kind:"mention",values:De(n,[n.chunk_index,n.role])});for(let n of e.all(`
|
|
62
62
|
SELECT g.symbol,
|
|
63
63
|
g.display_name,
|
|
64
64
|
g.kind,
|
|
@@ -72,9 +72,9 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
72
72
|
) AND NOT EXISTS (
|
|
73
73
|
SELECT 1 FROM mentions m WHERE m.symbol_id = g.id
|
|
74
74
|
)
|
|
75
|
-
`))t.push({relativePath:
|
|
76
|
-
`);n.set(r,a.digest("hex"))}return n}function
|
|
77
|
-
`)},writeLatest:(e,t)=>O(e,t,{spacing:2,trailingNewline:!0})};function ce(e,t,n,r,i){return{version:1,status:"unavailable",refreshResult:e,recordedAt:new Date(r).toISOString(),durationMs:Math.max(0,r-n),reason:t,...i?{error:i}:{}}}function
|
|
75
|
+
`))t.push({relativePath:Br,kind:"global-symbol",values:De(n)});return Ur(t)}function Ur(e){let t=new Map;for(let r of e){let i=JSON.stringify([r.kind,r.values]),a=t.get(r.relativePath)??[];a.push(i),t.set(r.relativePath,a)}let n=new Map;for(let[r,i]of[...t].sort(([a],[s])=>a.localeCompare(s))){let a=Cr("sha256");for(let s of i.sort())a.update(String(Buffer.byteLength(s))),a.update(":"),a.update(s),a.update(`
|
|
76
|
+
`);n.set(r,a.digest("hex"))}return n}function Jr(e,t){let n=[],r=[],i=[],a=[],s=new Set([...e.keys(),...t.keys()]);for(let o of[...s].sort()){let l=e.get(o),c=t.get(o);l===void 0?n.push(o):c===void 0?i.push(o):l!==c?r.push(o):a.push(o)}return{addedFiles:n,modifiedFiles:r,deletedFiles:i,changedFiles:[...n,...r,...i].sort(),unchangedFiles:a}}function Te(e,t,n){let r=new Set(e.affectedFiles),i=new Set(t.changedFiles),a=e.mode==="full-project"?[]:t.changedFiles.filter(l=>!r.has(l)),s=e.affectedFiles.filter(l=>!i.has(l)).sort(),o=t.changedFiles.length-a.length;return{passed:a.length===0,recall:t.changedFiles.length===0?1:o/t.changedFiles.length,affectedRatio:n===0?0:e.affectedFiles.length/n,predictedFiles:[...e.affectedFiles].sort(),actualFiles:[...t.changedFiles],missingFiles:a,extraFiles:s}}function ke(e,t=Hr){let n=t.now();if(!t.databaseExists(e.previousDbPath))return ce(e.refreshResult,"prior-index-unavailable",n,t.now());if(!t.databaseExists(e.candidateDbPath))return ce(e.refreshResult,"candidate-index-unavailable",n,t.now());let r=null,i=null;try{r=t.openDatabase(e.projectRoot,e.previousDbPath,e.previousIndexPath),i=t.openDatabase(e.projectRoot,e.candidateDbPath,e.candidateIndexPath);let a=[...new Set([...t.indexedPaths(r),...t.indexedPaths(i)])].sort(),s=Y(e.previousSnapshot,e.currentSnapshot),o=new Set(a),l=s.changes.length>0&&!St(s).fullProject&&s.changes.every(g=>o.has(g.path)),c=K(s,l?t.dependencyGraph(r):new Map,a),d=Jr(t.factDigests(r),t.factDigests(i)),u=t.now();return{version:1,status:"evaluated",refreshResult:e.refreshResult,recordedAt:new Date(u).toISOString(),durationMs:Math.max(0,u-n),manifest:s,plan:c,comparison:d,evaluation:Te(c,d,a.length)}}catch(a){return ce(e.refreshResult,"oracle-error",n,t.now(),a instanceof Error?a.message:String(a))}finally{Kt(r),Kt(i)}}function en(e,t,n,r=Date.now()){return ce(e,t,r,r,n)}function Wr(e){let t=Zt(e);return{latestPath:Yt(t,"affected-shadow-latest.json"),historyPath:Yt(t,"affected-shadow.jsonl")}}function tn(e,t,n=qr){let r=Wr(e);return n.appendHistory(r.historyPath,t),n.writeLatest(r.latestPath,t),r}function De(e,t=[]){let n=[];for(let r of t)n.push(r);return n.push(e.symbol,e.display_name,e.kind,e.documentation,e.signature_hex,e.enclosing_symbol,e.relationships_hex),n}var Hr={now:()=>Date.now(),databaseExists:e=>Ar(e),openDatabase:(e,t,n)=>new T({projectRoot:e,dbPath:t,indexPath:n}),indexedPaths:e=>j(e),dependencyGraph:e=>M(e),factDigests:e=>Gr(e)},qr={appendHistory:(e,t)=>{$r(Zt(e),{recursive:!0}),Lr(e,`${JSON.stringify(t)}
|
|
77
|
+
`)},writeLatest:(e,t)=>O(e,t,{spacing:2,trailingNewline:!0})};function ce(e,t,n,r,i){return{version:1,status:"unavailable",refreshResult:e,recordedAt:new Date(r).toISOString(),durationMs:Math.max(0,r-n),reason:t,...i?{error:i}:{}}}function Kt(e){try{e?.close()}catch{}}import{createHash as zr}from"crypto";import{copyFileSync as Xr,existsSync as nn,rmSync as rn}from"fs";import{resolve as Qr}from"path";import on from"better-sqlite3";var Vr={documents:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"language",type:"TEXT",notnull:0,pk:0},{name:"relative_path",type:"TEXT",notnull:1,pk:0},{name:"position_encoding",type:"TEXT",notnull:0,pk:0},{name:"text",type:"TEXT",notnull:0,pk:0}],chunks:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"chunk_index",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"occurrences",type:"BLOB",notnull:1,pk:0}],global_symbols:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"symbol",type:"TEXT",notnull:1,pk:0},{name:"display_name",type:"TEXT",notnull:0,pk:0},{name:"kind",type:"INTEGER",notnull:0,pk:0},{name:"documentation",type:"TEXT",notnull:0,pk:0},{name:"signature",type:"BLOB",notnull:0,pk:0},{name:"enclosing_symbol",type:"TEXT",notnull:0,pk:0},{name:"relationships",type:"BLOB",notnull:0,pk:0}],mentions:[{name:"chunk_id",type:"INTEGER",notnull:1,pk:1},{name:"symbol_id",type:"INTEGER",notnull:1,pk:2},{name:"role",type:"INTEGER",notnull:1,pk:3}],defn_enclosing_ranges:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"symbol_id",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"start_char",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"end_char",type:"INTEGER",notnull:1,pk:0}]},Yr={idx_chunks_doc_id:{table:"chunks",columns:["document_id"]},idx_chunks_line_range:{table:"chunks",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_document:{table:"defn_enclosing_ranges",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_symbol_id:{table:"defn_enclosing_ranges",columns:["symbol_id"]},idx_global_symbols_symbol:{table:"global_symbols",columns:["symbol"]},idx_mentions_symbol_id_role:{table:"mentions",columns:["symbol_id","role"]}};function cn(e){let t=Date.now(),n=Kr(e.affectedFiles);if(Zr(e.previousDbPath,e.miniDbPath,e.candidateDbPath),rn(e.candidateDbPath,{force:!0}),!nn(e.previousDbPath))throw new Error("previous SQLite generation is unavailable");if(!nn(e.miniDbPath))throw new Error("incremental SQLite mini database is unavailable");an(e.previousDbPath,"previous SQLite generation",!1),an(e.miniDbPath,"incremental SQLite mini database"),Xr(e.previousDbPath,e.candidateDbPath);let r=null;try{r=new on(e.candidateDbPath,{fileMustExist:!0}),r.pragma("busy_timeout = 5000"),r.pragma("foreign_keys = ON"),r.prepare("ATTACH DATABASE ? AS incremental").run(e.miniDbPath),Oe(r,"main","candidate SQLite generation"),Oe(r,"incremental","incremental SQLite mini database"),ei(r,n),ti(r,n.length);let i=Me(r,"main",!0),a=_(r,"SELECT COUNT(*) AS value FROM main.documents");r.transaction(()=>{ni(r),ri(r),ii(r),e.onStage?.("after-delete"),ai(r),e.onStage?.("after-symbol-reconciliation"),si(r),e.onStage?.("after-insert"),oi(r),ci(r,n.length,a),e.onStage?.("before-commit")}).immediate(),ln(r,"main","candidate SQLite generation");let l=[...li(r)].filter(([c,d])=>i.get(c)!==d).map(([c])=>c).sort();return r.exec("DETACH DATABASE incremental"),r.close(),r=null,{candidateDbPath:e.candidateDbPath,affectedDocumentCount:n.length,changedDocumentPaths:l,durationMs:Date.now()-t}}catch(i){try{r?.close()}finally{rn(e.candidateDbPath,{force:!0})}throw new Error(`Incremental SQLite publication rejected: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}function Kr(e){if(e.length===0)throw new Error("incremental SQLite publication requires affected documents");let t=[...e].sort();for(let n of t)if(!n||n.startsWith("/")||n.includes("\\")||n.split("/").includes(".."))throw new Error(`invalid affected document path: ${n}`);if(new Set(t).size!==t.length)throw new Error("incremental SQLite publication contains duplicate affected documents");return t}function Zr(e,t,n){let r=[e,t,n].map(i=>Qr(i));if(new Set(r).size!==r.length)throw new Error("previous, mini, and candidate SQLite paths must be distinct")}function an(e,t,n=!0){let r=new on(e,{readonly:!0,fileMustExist:!0});try{Oe(r,"main",t),n&&ln(r,"main",t)}finally{r.close()}}function Oe(e,t,n){for(let[r,i]of Object.entries(Vr)){let s=e.prepare(`PRAGMA ${t}.table_info('${r}')`).all().map(({name:o,type:l,notnull:c,pk:d})=>({name:o,type:l.toUpperCase(),notnull:c,pk:d}));if(JSON.stringify(s)!==JSON.stringify(i))throw new Error(`${n} schema changed for table ${r}`)}for(let[r,i]of Object.entries(Yr)){let a=e.prepare(`SELECT tbl_name FROM ${t}.sqlite_master WHERE type = 'index' AND name = ?`).get(r),s=e.prepare(`PRAGMA ${t}.index_info('${r}')`).all().map(o=>o.name);if(a?.tbl_name!==i.table||JSON.stringify(s)!==JSON.stringify(i.columns))throw new Error(`${n} schema changed for index ${r}`)}sn(e,t,"documents",["relative_path"],n),sn(e,t,"global_symbols",["symbol"],n)}function sn(e,t,n,r,i){if(!e.prepare(`PRAGMA ${t}.index_list('${n}')`).all().some(o=>{if(o.unique!==1)return!1;let l=e.prepare(`PRAGMA ${t}.index_info('${o.name}')`).all().map(c=>c.name);return JSON.stringify(l)===JSON.stringify(r)}))throw new Error(`${i} lost the unique ${n}(${r.join(", ")}) constraint`)}function ln(e,t,n){let r=e.prepare(`PRAGMA ${t}.integrity_check`).pluck().get();if(r!=="ok")throw new Error(`${n} failed integrity_check: ${String(r)}`);if(e.prepare(`PRAGMA ${t}.foreign_key_check`).all().length>0)throw new Error(`${n} failed foreign_key_check`)}function ei(e,t){e.exec("CREATE TEMP TABLE incremental_affected_paths (relative_path TEXT PRIMARY KEY) WITHOUT ROWID");let n=e.prepare("INSERT INTO temp.incremental_affected_paths(relative_path) VALUES (?)");e.transaction(i=>{for(let a of i)n.run(a)})(t)}function ti(e,t){let n=_(e,"SELECT COUNT(*) AS value FROM incremental.documents"),r=_(e,`SELECT COUNT(*) AS value
|
|
78
78
|
FROM main.documents d
|
|
79
79
|
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`),i=e.prepare(`SELECT p.relative_path
|
|
80
80
|
FROM temp.incremental_affected_paths p
|
|
@@ -84,7 +84,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
84
84
|
FROM incremental.documents d
|
|
85
85
|
LEFT JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
|
|
86
86
|
WHERE p.relative_path IS NULL
|
|
87
|
-
LIMIT 1`).pluck().get();if(n!==t||r!==t||i!==void 0||a!==void 0)throw new Error("incremental SQLite mini database does not exactly match the affected document set")}function
|
|
87
|
+
LIMIT 1`).pluck().get();if(n!==t||r!==t||i!==void 0||a!==void 0)throw new Error("incremental SQLite mini database does not exactly match the affected document set")}function ni(e){e.exec(`
|
|
88
88
|
CREATE TEMP TABLE incremental_old_defined_symbols (symbol TEXT PRIMARY KEY) WITHOUT ROWID;
|
|
89
89
|
INSERT OR IGNORE INTO temp.incremental_old_defined_symbols(symbol)
|
|
90
90
|
SELECT g.symbol
|
|
@@ -111,7 +111,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
111
111
|
FROM incremental.mentions m
|
|
112
112
|
JOIN incremental.global_symbols g ON g.id = m.symbol_id
|
|
113
113
|
WHERE m.role = 1;
|
|
114
|
-
`)}function
|
|
114
|
+
`)}function ri(e){let t=e.prepare(`WITH changed_symbols AS (
|
|
115
115
|
SELECT symbol FROM temp.incremental_old_defined_symbols
|
|
116
116
|
UNION
|
|
117
117
|
SELECT symbol FROM temp.incremental_new_defined_symbols
|
|
@@ -134,7 +134,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
134
134
|
SELECT u.symbol
|
|
135
135
|
FROM unaffected_definitions u
|
|
136
136
|
JOIN changed_symbols c ON c.symbol = u.symbol
|
|
137
|
-
LIMIT 1`).pluck().get();if(typeof t=="string")throw new Error(`symbol definition is shared by affected and unaffected documents: ${t}`)}function
|
|
137
|
+
LIMIT 1`).pluck().get();if(typeof t=="string")throw new Error(`symbol definition is shared by affected and unaffected documents: ${t}`)}function ii(e){e.exec(`
|
|
138
138
|
DELETE FROM main.mentions
|
|
139
139
|
WHERE chunk_id IN (
|
|
140
140
|
SELECT c.id
|
|
@@ -156,7 +156,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
156
156
|
);
|
|
157
157
|
DELETE FROM main.documents
|
|
158
158
|
WHERE relative_path IN (SELECT relative_path FROM temp.incremental_affected_paths);
|
|
159
|
-
`)}function
|
|
159
|
+
`)}function ai(e){e.exec(`
|
|
160
160
|
UPDATE main.global_symbols
|
|
161
161
|
SET display_name = NULL,
|
|
162
162
|
kind = NULL,
|
|
@@ -198,7 +198,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
198
198
|
WHERE source.symbol = main.global_symbols.symbol
|
|
199
199
|
)
|
|
200
200
|
WHERE symbol IN (SELECT symbol FROM temp.incremental_new_defined_symbols);
|
|
201
|
-
`)}function
|
|
201
|
+
`)}function si(e){let t=_(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.documents"),n=_(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.chunks"),r=_(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.defn_enclosing_ranges");e.prepare(`INSERT INTO main.documents(id, language, relative_path, position_encoding, text)
|
|
202
202
|
SELECT id + ?, language, relative_path, position_encoding, text
|
|
203
203
|
FROM incremental.documents`).run(t),e.prepare(`INSERT INTO main.chunks(id, document_id, chunk_index, start_line, end_line, occurrences)
|
|
204
204
|
SELECT id + ?, document_id + ?, chunk_index, start_line, end_line, occurrences
|
|
@@ -213,15 +213,15 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
213
213
|
r.start_line, r.start_char, r.end_line, r.end_char
|
|
214
214
|
FROM incremental.defn_enclosing_ranges r
|
|
215
215
|
JOIN incremental.global_symbols source ON source.id = r.symbol_id
|
|
216
|
-
JOIN main.global_symbols target ON target.symbol = source.symbol`).run(r,t)}function
|
|
216
|
+
JOIN main.global_symbols target ON target.symbol = source.symbol`).run(r,t)}function oi(e){e.exec(`
|
|
217
217
|
DELETE FROM main.global_symbols
|
|
218
218
|
WHERE NOT EXISTS (SELECT 1 FROM main.mentions m WHERE m.symbol_id = main.global_symbols.id)
|
|
219
219
|
AND NOT EXISTS (
|
|
220
220
|
SELECT 1 FROM main.defn_enclosing_ranges r WHERE r.symbol_id = main.global_symbols.id
|
|
221
221
|
);
|
|
222
|
-
`)}function
|
|
222
|
+
`)}function ci(e,t,n){let r=_(e,"SELECT COUNT(*) AS value FROM main.documents"),i=_(e,`SELECT COUNT(*) AS value
|
|
223
223
|
FROM main.documents d
|
|
224
|
-
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`);if(r!==n||i!==t)throw new Error("candidate SQLite document counts changed unexpectedly");let a=e.prepare("SELECT relative_path FROM main.documents GROUP BY relative_path HAVING COUNT(*) > 1 LIMIT 1").pluck().get(),s=e.prepare("SELECT symbol FROM main.global_symbols GROUP BY symbol HAVING COUNT(*) > 1 LIMIT 1").pluck().get();if(a!==void 0||s!==void 0)throw new Error("candidate SQLite generation contains duplicate document paths or symbols")}function
|
|
224
|
+
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`);if(r!==n||i!==t)throw new Error("candidate SQLite document counts changed unexpectedly");let a=e.prepare("SELECT relative_path FROM main.documents GROUP BY relative_path HAVING COUNT(*) > 1 LIMIT 1").pluck().get(),s=e.prepare("SELECT symbol FROM main.global_symbols GROUP BY symbol HAVING COUNT(*) > 1 LIMIT 1").pluck().get();if(a!==void 0||s!==void 0)throw new Error("candidate SQLite generation contains duplicate document paths or symbols")}function li(e){let t=Me(e,"main",!0),n=Me(e,"incremental",!1);if(JSON.stringify([...t])!==JSON.stringify([...n]))throw new Error("candidate SQLite affected document facts differ from the mini database");return t}function Me(e,t,n){let r=n?"JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path":"",i=e.prepare(`SELECT d.relative_path, d.language, d.position_encoding, d.text
|
|
225
225
|
FROM ${t}.documents d
|
|
226
226
|
${r}
|
|
227
227
|
ORDER BY d.relative_path`).all(),a=e.prepare(`SELECT d.relative_path, c.chunk_index, c.start_line, c.end_line, hex(c.occurrences) AS occurrences
|
|
@@ -243,16 +243,16 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
|
|
|
243
243
|
JOIN ${t}.documents d ON d.id = c.document_id
|
|
244
244
|
JOIN ${t}.global_symbols g ON g.id = m.symbol_id
|
|
245
245
|
${r}
|
|
246
|
-
ORDER BY d.relative_path, c.chunk_index, m.role, g.symbol`).all(),l=new Map;for(let[d,u]of Object.entries({documents:i,chunks:a,definitions:s,mentions:o}))for(let g of u){let m=JSON.stringify([d,g]),p=l.get(g.relative_path)??[];p.push(m),l.set(g.relative_path,p)}let c=new Map;for(let[d,u]of[...l].sort(([g],[m])=>g.localeCompare(m))){let g=
|
|
247
|
-
`);c.set(d,g.digest("hex"))}return c}function _(e,t){return e.prepare(t).get().value}import{createHash as
|
|
248
|
-
`;)n+=1;continue}if(a==="/"&&e[n+1]==="*"){for(n+=2;n<i&&!(e[n]==="*"&&e[n+1]==="/");)n+=1;n+=2;continue}t+=a,n+=1}return t}function Ae(e){try{let t=li(e,"utf-8"),n=JSON.parse(xi(t));return n&&typeof n=="object"&&!Array.isArray(n)?{ok:!0,value:n}:{ok:!1}}catch{return{ok:!1}}}import{existsSync as Ri,readFileSync as Ii,readdirSync as vi,statSync as Ei}from"fs";import x from"path";var Fi=new Set([".cache",".git",".next",".nuxt",".turbo",".nx","build","coverage","dist","node_modules","tmp","vendor"]);function G(e,t=[]){let n=x.resolve(e),r=t.flatMap(l=>wi(n,l));if(r.length>0)return mn(n,hn(r));let i=ji(n),a=hn(i),s=Di(n,a)?[n,...a]:a,o=s.length>0?s:[n];return mn(n,o)}function mn(e,t){return[...new Set(t.map(n=>ki(e,n)))].sort((n,r)=>n.localeCompare(r))}function ji(e){let t=[],n=[e];for(;n.length>0;){let r=n.pop(),i;try{i=vi(r,{withFileTypes:!0})}catch{continue}for(let a of i){let s=x.join(r,a.name);if(a.isDirectory()){!Fi.has(a.name)&&!a.name.startsWith(".")&&n.push(s);continue}a.isFile()&&_i(s)&&t.push(x.dirname(s))}}return t}function wi(e,t){let n=t.trim();if(!n)return[];let r=x.resolve(e,n);if(!A(e,r))return[];try{let i=Ei(r);if(i.isDirectory())return[r];if(i.isFile()&&yn(x.basename(r)))return[x.dirname(r)]}catch{return[]}return[]}function _i(e){if(!yn(x.basename(e)))return!1;let t=Sn(e);return t?x.basename(e)==="tsconfig.json"||"include"in t||"files"in t||"references"in t:!1}function yn(e){return e.startsWith("tsconfig")&&e.endsWith(".json")}function hn(e){let t=[...new Set(e.map(n=>x.resolve(n)))].sort((n,r)=>n.localeCompare(r));return t.length<=1?t:t.filter(n=>!t.some(r=>r!==n&&Oi(n,r)))}function Di(e,t){if(t.length===0||t.some(r=>x.resolve(r)===e))return!1;let n=x.join(e,"tsconfig.json");return Ri(n)&&Ti(n)}function Ti(e){let n=Sn(e)?.include;return Array.isArray(n)?n.some(r=>typeof r=="string"&&r.trim()!==""&&!r.startsWith("!")&&(r.includes("/")||r.includes("**")||!x.extname(r))):!1}function Sn(e){try{let t=JSON.parse(Ii(e,"utf-8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function ki(e,t){let n=x.relative(e,t);return n?n.split(x.sep).join("/"):"."}function Oi(e,t){let n=x.relative(e,t);return!!n&&!n.startsWith("..")&&!x.isAbsolute(n)}import{createHash as Hi}from"crypto";import{existsSync as $e,readFileSync as Fn,statSync as qi,writeFileSync as Be}from"fs";import{join as zi}from"path";import{randomUUID as Mi}from"crypto";import{existsSync as Ni,mkdirSync as bn,readFileSync as Li,rmSync as Pn}from"fs";import{resolve as xn}from"path";var Ci=12e4,Ai=5,de=class{projectRoot;cacheDir;baseGeneration;timeoutMs;runtime;constructor(t,n={}){this.projectRoot=Ze(t.projectRoot),this.cacheDir=t.cacheDir,this.baseGeneration=t.baseGeneration,this.timeoutMs=n.timeoutMs??Ji(),this.runtime=n.runtime??Wi}request(t){let n=pt(this.cacheDir),r=Ot(this.cacheDir),i=be(n.statePath);if(!Rn(i,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript index service is not running.");let a=this.runtime.randomId(),s=xn(r.requestDir,`${a}.json`),o=xn(r.responseDir,`${a}.json`),l=this.runtime.now()+this.timeoutMs;bn(r.requestDir,{recursive:!0}),bn(r.responseDir,{recursive:!0}),O(s,{protocolVersion:re,id:a,baseGeneration:this.baseGeneration,deadlineAtMs:l,request:t});try{for(;this.runtime.now()<=l;){if(Ni(o))return $i(Li(o,"utf8"),a,this.baseGeneration,t.producerIdentity,t.affectedFiles);let c=be(n.statePath);if(!Rn(c,this.projectRoot,this.runtime))throw new Error("TypeScript index service stopped while processing a request.");this.runtime.sleep(Ai)}throw new Error(`TypeScript index service timed out after ${this.timeoutMs}ms.`)}finally{Pn(s,{force:!0}),Pn(o,{force:!0})}}};function Rn(e,t,n){let r=e!==null&&n.now()-Date.parse(e.heartbeatAt)<=ut,i=e?.typescriptIndex?.busyUntil!==void 0&&n.now()<=Date.parse(e.typescriptIndex.busyUntil);return e!==null&&e.projectRoot===t&&e.typescriptIndex?.protocolVersion===re&&n.isProcessAlive(e.pid)&&(r||i)}function $i(e,t,n,r,i){let a=JSON.parse(e);if(a.protocolVersion!==re||a.id!==t||a.ok===!0&&a.baseGeneration!==n)throw new Error("TypeScript index service wrote an incompatible response.");if(a.ok!==!0)throw new Error(typeof a.error=="string"?a.error:"TypeScript index service request failed.");let s=Bi(a.response,r),o=[...new Set(i)].sort(),l=s.fragments.map(c=>c.relativePath).sort();if(JSON.stringify(l)!==JSON.stringify(o))throw new Error("TypeScript index service omitted or added an affected document.");return s}function Bi(e,t){if(!e||typeof e!="object")throw new Error("TypeScript index service wrote an invalid response.");let n=e;if(n.producerIdentity!==t||typeof n.cold!="boolean"||typeof n.durationMs!="number"||!Number.isFinite(n.durationMs)||!Array.isArray(n.fragments))throw new Error("TypeScript index service wrote an invalid response.");let r=new Set,i=n.fragments.map(a=>{if(!a||typeof a.relativePath!="string"||a.bytesBase64!==null&&typeof a.bytesBase64!="string"||typeof a.occurrences!="number"||!Number.isInteger(a.occurrences)||a.occurrences<0||typeof a.symbols!="number"||!Number.isInteger(a.symbols)||a.symbols<0||!Array.isArray(a.referenceFragments)||!a.referenceFragments.every(Gi)||r.has(a.relativePath))throw new Error("TypeScript index service wrote an invalid fragment.");r.add(a.relativePath);let s=a.bytesBase64===null?null:Ui(a.bytesBase64);return{relativePath:a.relativePath,bytes:s,occurrences:a.occurrences,symbols:a.symbols,referenceFragments:a.referenceFragments}});return{producerIdentity:n.producerIdentity,cold:n.cold,durationMs:n.durationMs,fragments:i}}function Gi(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.targetSymbol=="string"&&!!t.location&&typeof t.location.file=="string"&&Number.isInteger(t.location.line)&&Number.isInteger(t.location.column)}function Ui(e){let t=Buffer.from(e,"base64");if(t.toString("base64")!==e)throw new Error("TypeScript index service wrote invalid base64.");return t}function Ji(){let e=Number(process.env.SCIP_TYPESCRIPT_INDEX_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:Ci}var Wi={now:Date.now,randomId:Mi,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:k};function Xi(e){let t=e.projectMode==="workspace"?e.workspaceProjects??[]:["."];if(t.length===0)return{eligible:!1,reason:"workspace project roots unavailable"};if(t.length===1&&t[0]==="."&&!e.rootTsconfigExists)return{eligible:!1,reason:"root tsconfig unavailable"};if(!e.previousSnapshot)return{eligible:!1,reason:"prior project snapshot unavailable"};if(e.graph===null)return{eligible:!1,reason:"dependency graph unavailable"};if(e.projectFiles.length===0)return{eligible:!1,reason:"prior TypeScript documents unavailable"};let n=Y(e.previousSnapshot,e.currentSnapshot);if(n.changes.length===0)return{eligible:!1,reason:"no changed project inputs"};if(n.changes.some(c=>c.kind!=="modified"||c.inputKind!=="source"||!$(c.path)))return{eligible:!1,reason:"change is not a modified TypeScript source file"};let r=K(n,e.graph,e.projectFiles);if(r.mode!=="closure"||r.affectedFiles.length===0)return{eligible:!1,reason:r.reasons.length>0?`affected set widened: ${r.reasons.join(", ")}`:"empty affected set"};let i=Qi([...r.changedFiles,...r.affectedFiles],t);if(!i)return{eligible:!1,reason:"affected files cross or ambiguously match TypeScript projects"};let a=In(e.currentSnapshot,e.projectFiles,e.producerIdentity),s=In(e.previousSnapshot,e.projectFiles,e.producerIdentity);if(a!==s)return{eligible:!1,reason:"TypeScript fragment project identity changed"};let o=En(e.previousSnapshot,e.projectFiles,e.graph,e.producerIdentity,e.projectFiles);if(!o)return{eligible:!1,reason:"prior document identity unavailable"};let l=En(e.currentSnapshot,e.projectFiles,e.graph,e.producerIdentity,r.affectedFiles);return l?{eligible:!0,manifest:n,plan:r,projectIdentity:a,previousFragmentGeneration:vn(e.previousSnapshot,e.producerIdentity),nextFragmentGeneration:vn(e.currentSnapshot,e.producerIdentity),previousDocumentIdentities:o,nextDocumentIdentities:l,tsconfigPath:i==="."?"tsconfig.json":`${i}/tsconfig.json`,projectArgument:i}:{eligible:!1,reason:"next document identity unavailable"}}function Qi(e,t){let n=null;for(let r of e){let i=t.filter(a=>a==="."||r===a||r.startsWith(`${a}/`));if(i.length!==1||n!==null&&n!==i[0])return null;n=i[0]}return n}function jn(e){let t=Date.now();try{if(!$e(e.previousDbPath)||!$e(e.previousShardPath))throw new Error("prior TypeScript graph or language shard unavailable");let n=performance.now(),r=Re();if(!r.available)throw new Error(r.reason);let i=performance.now()-n;n=performance.now();let a=new T({projectRoot:e.projectRoot,dbPath:e.previousDbPath,indexPath:e.previousIndexPath}),s,o;try{s=w(a,{includeIgnored:!1}).filter($).sort(),o=M(a)}finally{a.close()}let l=performance.now()-n,c=Xi({projectMode:e.projectMode,workspaceProjects:e.projectMode==="workspace"?G(e.projectRoot,e.currentSnapshot.typescriptProjects):void 0,previousSnapshot:e.previousSnapshot,currentSnapshot:e.currentSnapshot,projectFiles:s,graph:o,producerIdentity:r.producerIdentity,rootTsconfigExists:$e(zi(e.projectRoot,"tsconfig.json"))});if(!c.eligible)throw new Error(c.reason);let d=Mt(e.previousDbPath);if(!d)throw new Error("published TypeScript base generation unavailable");n=performance.now();let g=new de({projectRoot:e.projectRoot,cacheDir:e.cacheDir,baseGeneration:d}).request({kind:"emit-documents",tsconfigPath:c.tsconfigPath,projectArgument:c.projectArgument,projectIdentity:c.projectIdentity,producerIdentity:r.producerIdentity,modifiedFiles:c.plan.changedFiles,affectedFiles:c.plan.affectedFiles}),m=performance.now()-n,p=qi(e.previousShardPath).size>=vt;n=performance.now();let S=p?null:Fn(e.previousShardPath),f=p?{completeIndexBytes:null,affectedIndexBytes:Pt(g.fragments)}:It({packageVersion:r.packageVersion,baseIndexBytes:S,fragments:g.fragments}),b=performance.now()-n;n=performance.now(),p?Et({cacheDir:e.cacheDir,previousGenerationIdentity:c.previousFragmentGeneration,nextGenerationIdentity:c.nextFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,baseShardCurrent:e.baseShardCurrent,fragments:g.fragments}):(xt({cacheDir:e.cacheDir,packageVersion:r.packageVersion,indexBytes:S,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,generationIdentity:c.previousFragmentGeneration,documentIdentities:c.previousDocumentIdentities,allowUntrackedDocuments:!0}),Rt({cacheDir:e.cacheDir,previousGenerationIdentity:c.previousFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,generationIdentity:c.nextFragmentGeneration,fragments:g.fragments,documentIdentities:c.nextDocumentIdentities}));let y=performance.now()-n;n=performance.now(),f.completeIndexBytes&&Be(e.candidateShardPath,f.completeIndexBytes),Be(e.candidateAffectedScipPath,f.affectedIndexBytes);let I=performance.now()-n,P={scipPath:p?e.previousShardPath:e.candidateShardPath,candidateScipPath:e.candidateShardPath,affectedScipPath:e.candidateAffectedScipPath,completeScipUpdated:!p,durationMs:Date.now()-t,cold:g.cold,changedFiles:c.plan.changedFiles,affectedFiles:c.plan.affectedFiles,producerIdentity:r.producerIdentity,previousFragmentGeneration:c.previousFragmentGeneration,nextFragmentGeneration:c.nextFragmentGeneration,manifest:c.manifest,plan:c.plan,projectFileCount:s.length,referenceFragmentsByFile:new Map(g.fragments.map(q=>[q.relativePath,q.referenceFragments])),timings:{runtimeMs:i,graphMs:l,requestMs:m,serviceMs:g.durationMs,assemblyMs:b,fragmentStoreMs:y,writeMs:I}};return e.onStatus(`Incremental TypeScript index emitted ${P.affectedFiles.length} affected document(s) in ${(P.durationMs/1e3).toFixed(3)}s (${P.cold?"cold":"warm"} service; ${p?"whole SCIP deferred":"whole SCIP current"}; runtime ${i.toFixed(0)}ms, graph ${l.toFixed(0)}ms, request ${m.toFixed(0)}ms, assembly ${b.toFixed(0)}ms, fragments ${y.toFixed(0)}ms, write ${I.toFixed(0)}ms).`),P}catch(n){return e.onStatus(`Incremental TypeScript index unavailable: ${n instanceof Error?n.message:String(n)}. Falling back to the whole-project indexer.`),null}}function wn(e){let t=Re();if(!t.available)throw new Error(t.reason);let n=Ft({cacheDir:e.cacheDir,generationIdentity:e.generationIdentity,baseIndexBytes:Fn(e.baseShardPath),packageVersion:t.packageVersion});Be(e.candidateShardPath,n)}function In(e,t,n){let r=e.files.filter(i=>V(i.path,e.languages)!=="source").map(i=>({path:i.path,size:i.size,hash:i.hash})).sort((i,a)=>i.path.localeCompare(a.path));return Ge(JSON.stringify({version:1,producerIdentity:n,pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:[...e.typescriptProjects].sort(),projectFiles:[...t].sort(),nonSourceInputs:r}))}function vn(e,t){return Ge(JSON.stringify({version:1,producerIdentity:t,snapshot:e}))}function En(e,t,n,r,i){let a=new Set(e.files.map(l=>l.path)),s=oe({projectFiles:t.filter(l=>a.has(l)),snapshot:e,graph:n,engineIdentity:r}),o=new Map;for(let l of i){let c=s.identityFor(l,"typescript-scip-document-v1");if(c.key){o.set(l,c.key);continue}if(a.has(l))return null;o.set(l,Ge(JSON.stringify({version:1,producerIdentity:r,generatedDocument:l})))}return o}function Ge(e){return Hi("sha256").update(e).digest("hex")}import{execFile as Vi}from"child_process";import{existsSync as ue,renameSync as Je,rmSync as We,statSync as Yi}from"fs";import{cpus as Ki}from"os";import{join as _n}from"path";function Zi(e,t,n){if(!e.defaultOutputPath)return;let r=_n(t,e.defaultOutputPath);n!==r&&ue(r)&&Je(r,n)}function ea(e,t,n){if(!e.defaultOutputPath)return null;let r=_n(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return We(i,{force:!0}),ue(r)?(Je(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function ta(e){e&&(We(e.defaultOutputPath,{force:!0}),e.backupPath&&ue(e.backupPath)&&Je(e.backupPath,e.defaultOutputPath))}function na(e,t){if(e<=1)return 1;let n=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),r=Number.isFinite(t)&&t&&t>0?t:Number.isFinite(n)&&n>0?n:Math.min(8,Math.max(1,Ki().length));return Math.max(1,Math.min(e,Math.floor(r)))}async function Dn(e,t,n,r){let i=e.filter(c=>c.config.defaultOutputPath),a=e.filter(c=>!c.config.defaultOutputPath),s=[],o=na(a.length,r),l=await ia(a,o,c=>Ue(c,t,n));if(o>1){let c=new Map;for(let d of l.filter(u=>u.skipped)){let u=a.find(g=>g.id===d.id);u&&(n(`Retrying ${u.label} indexer serially after parallel failure...`),c.set(u.id,await Ue(u,t,n)))}s.push(...l.map(d=>c.get(d.id)??d))}else s.push(...l);for(let c of i)s.push(await Ue(c,t,n));return s.sort((c,d)=>e.findIndex(u=>u.id===c.id)-e.findIndex(u=>u.id===d.id))}async function Ue(e,t,n){n(`Indexing ${e.label} with ${e.resolvedBinary}...`),We(e.scipPath,{force:!0});let r=ea(e.config,t,e.scipPath),i=[e.binary,...e.args].join(" "),a=Date.now();try{await ra(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),Zi(e.config,t,e.scipPath)}catch(o){let l=o instanceof Error?o.message:String(o),c=`${e.resolvedBinary} indexer failed: ${l.split(`
|
|
249
|
-
`)[0]}`,d=e.label===e.language?c:`${e.label}: ${c}`;return n(`Skipping ${e.label}: ${c}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,skipped:{language:e.language,reason:d}}}finally{ta(r)}if(!ue(e.scipPath)){let o=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`,l=e.label===e.language?o:`${e.label}: ${o}`;return n(`Skipping ${e.label}: ${o}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,skipped:{language:e.language,reason:l}}}let s;try{s=Yi(e.scipPath).size}catch{s=void 0}return{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,outputBytes:s}}function ra(e,t,n){return new Promise((r,i)=>{Vi(e,[...t],n,a=>{a?i(a):r()})})}async function ia(e,t,n){if(e.length===0)return[];let r=new Array(e.length),i=0,a=Math.max(1,Math.min(e.length,t)),s=Array.from({length:a},async()=>{for(;i<e.length;){let o=i++;r[o]=await n(e[o])}});return await Promise.all(s),r}async function $n(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,a=ha(e),s=Date.now();ge(h(a.outputScip),{recursive:!0}),ge(h(a.outputDb),{recursive:!0});let o=e.languages??ht(t);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 l=F("reindex.fingerprint",()=>Qa(t,o,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath}),{languages:o.length}),c,d;if(e.skipIfUnchanged!==!1&&!Dt(t,a.outputDb)&&Tn(a.outputScip)===Tn(R(h(a.outputDb),"index.scip"))){let p=X(t);if(c=p?te(p,l):void 0,c){let S=ne(c);if(S){if(!ma(a,l))try{Pe({snapshot:c,manifest:S,targetCacheDir:h(a.outputDb),targetProjectRoot:t}),r(`Attached shared generation ${c.generationId.slice(0,12)}`)}catch(f){r(`Shared generation attach failed; continuing locally: ${qe(f)}`)}}else{let f=await kt(c);if(f.kind==="owner")d=f.release;else if(f.kind==="generation-ready"){let b=ne(c);if(b)try{Pe({snapshot:c,manifest:b,targetCacheDir:h(a.outputDb),targetProjectRoot:t,action:"waited"}),r(`Attached shared generation ${c.generationId.slice(0,12)} after waiting`)}catch(y){r(`Shared generation attach failed after waiting; continuing locally: ${qe(y)}`)}}else r("Shared generation build lock timed out; continuing with an isolated local reindex")}}}let u=et(R(h(a.outputDb),"cache-lifecycle.lock"),{waitMs:3e4});if(!u)throw d?.(),new Error(`Could not acquire scip-query cache lifecycle lock for ${h(a.outputDb)}.`);let g;try{g=await L("reindex.lock",()=>Ua(R(h(a.outputDb),"index.lock"),{projectRoot:t,trigger:e.trigger,onStatus:r}),{languages:o.length})}catch(p){throw u.release(),d?.(),p}let m=null;try{let p=null,S=F("reindex.reuse-check",()=>(p=ya({opts:e,paths:a,languages:o,fingerprint:l,start:s,onStatus:r}),p),()=>({languages:o.length,reused:p!==null}));if(S)return kn({snapshot:c,paths:a,projectRoot:t,fingerprint:l,onStatus:r}),S;await L("reindex.scip-cli-ready",()=>Ma(i,r));let f=ba(a);m=f.runDir;let b,y=await L("reindex.fresh",async()=>(b=await Pa({opts:e,languages:o,projectRoot:t,paths:a,tempPaths:f,fingerprint:l,start:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r}),b),()=>({languages:o.length,reused:b?.reused,skipped:b?.skipped.length}));return kn({snapshot:c,paths:a,projectRoot:t,fingerprint:l,onStatus:r}),y}catch(p){throw Qn(a.metaPath,ye({trigger:e.trigger,result:"failed",start:s,error:p instanceof Error?p.message:String(p)})),p}finally{m&&D(m,{recursive:!0,force:!0}),g(),u.release(),d?.()}}function kn(e){if(e.snapshot){if(ne(e.snapshot)){xe(e.snapshot,h(e.paths.outputDb),"local-fresh");return}try{let t=X(e.projectRoot),n=t?te(t,e.fingerprint):void 0;if(!n||n.generationId!==e.snapshot.generationId){e.onStatus("Skipped shared generation publication because the worktree changed during indexing");return}Tt({snapshot:e.snapshot,sourceCacheDir:h(e.paths.outputDb),sourceProjectRoot:e.projectRoot,sourceStillValid:()=>{let r=X(e.projectRoot);return(r?te(r,e.fingerprint):void 0)?.generationId===e.snapshot?.generationId}}),xe(e.snapshot,h(e.paths.outputDb),"built"),e.onStatus(`Published shared generation ${e.snapshot.generationId.slice(0,12)}`)}catch(t){e.onStatus(`Shared generation publication failed; local index remains valid: ${qe(t)}`)}}}function ma(e,t){if(!E(e.outputScip)||!E(e.outputDb)||!Xn(e.metaPath,t))return!1;let n=B(e.outputDb,e.metaPath);return n.state!=="invalid"&&n.state!=="drifted"}function qe(e){return e instanceof Error?e.message:String(e)}function ha(e){let t=e.outputScip??R(e.projectRoot,"index.scip"),n=e.outputDb??R(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:R(h(n),"meta.json")}}function ya(e){let t=B(e.paths.outputDb,e.paths.metaPath);if(e.opts.skipIfUnchanged===!1||!E(e.paths.outputScip)||!E(e.paths.outputDb)||!Xn(e.paths.metaPath,e.fingerprint)||t.state==="invalid"||t.state==="drifted")return null;ee(Z(),{projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let n=Date.now()-e.start,r=ye({trigger:e.opts.trigger,result:"reused",start:e.start,languages:e.languages,skipped:[]});return Qn(e.paths.metaPath,r),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:[],lastRefresh:r,shards:Sa(e.paths,e.opts.projectRoot,e.languages,e.opts)}}function Sa(e,t,n,r){let i=qn(t,n,r);return n.map(a=>({id:a,language:a,reused:!0,fingerprint:U(i[a]),outputBytes:J(Xe(e.outputDb,a)),durationMs:0}))}function ba(e){let t=ca(R(h(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:R(t,pe(e.outputScip)),tempOutputDb:R(t,pe(e.outputDb)),tempMetaPath:R(t,pe(e.metaPath))}}async function Pa(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},n,r=await L("reindex.language-indexers",async()=>(n=await Ra(e,t),n),()=>({languages:e.languages.length,indexed:n?.indexedOutputs.length,reused:n?.reusedLanguages.length,skipped:n?.skippedLanguages.length})),{indexedOutputs:i,skippedLanguages:a,reusedLanguages:s,languageFingerprints:o,shards:l,typescriptProjectShardContext:c,incrementalTypeScript:d}=r;if(s.length>0&&e.onStatus(`Reused ${s.length} cached language shard(s): ${s.join(", ")}`),xa({run:e,indexedOutputs:i,skippedLanguages:a,reusedLanguages:s})){let m=F("reindex.publish",()=>Ta(e,i,a,s,o,c),{mode:"metadata-only",languages:i.length,reused:s.length}),p=m.durationMs;return e.onStatus(`All language shards unchanged; reused existing SQLite index in ${(p/1e3).toFixed(1)}s`),{languages:i.map(S=>S.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:p,reused:!0,skipped:a,lastRefresh:m,shards:l}}let u=F("reindex.publish",()=>Da(e,t,i,a,s,o,c,d),{mode:d?"incremental-or-fallback":"full",languages:i.length,reused:s.length,skipped:a.length}),g=u.durationMs;return e.onStatus(`Done in ${(g/1e3).toFixed(1)}s`),{languages:i.map(m=>m.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:g,reused:!1,skipped:a,lastRefresh:u,shards:l}}function xa(e){if(e.run.opts.skipIfUnchanged===!1||e.skippedLanguages.length>0||!E(e.run.paths.outputScip)||!E(e.run.paths.outputDb))return!1;let t=B(e.run.paths.outputDb,e.run.paths.metaPath);if(t.state==="invalid"||t.state==="drifted")return!1;let n=new Set(e.reusedLanguages),r=new Set(e.indexedOutputs.map(i=>i.language));return e.run.languages.length>0&&r.size===e.run.languages.length&&e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(i=>n.has(i)&&r.has(i))}async function Ra(e,t){let n=ja({paths:e.paths,projectRoot:e.projectRoot,languages:e.languages,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,clojureConfigPath:e.opts.clojureConfigPath}),r=[],i=new Set;for(let[v,Ye]of n)Ye.reused&&(r.push({language:v,scipPath:Ye.scipPath}),i.add(v));for(let v of i)e.onStatus(`Reusing cached ${v} SCIP shard (language inputs unchanged).`);let a=n.get("typescript"),s=B(e.paths.outputDb,e.paths.metaPath),o=H(e.paths.metaPath),l=s.state==="legacy"||s.state==="current",c=o?.scipCompanion!=="deferred"&&(s.state!=="current"||s.generation.publication?.scipCompanion!=="deferred"),d=a&&!a.reused&&l?jn({projectRoot:e.projectRoot,cacheDir:h(e.paths.outputDb),previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,previousShardPath:a.scipPath,candidateShardPath:W(e.tempPaths.tempOutputScip,"typescript-incremental",0),candidateAffectedScipPath:W(e.tempPaths.tempOutputScip,"typescript-affected",0),baseShardCurrent:c,previousSnapshot:ze(e.paths.metaPath),currentSnapshot:e.fingerprint,projectMode:e.opts.typescriptProjectMode,onStatus:e.onStatus}):null,u=new Set(d?["typescript"]:[]),g=d?void 0:Ia(e,n),{preparedRuns:m,skippedLanguages:p,languageOutputScipPaths:S}=Na({languages:e.languages.filter(v=>!i.has(v)&&!u.has(v)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,preDiscoveredTypeScriptProjects:g?.allProjects,clojureConfigPath:e.opts.clojureConfigPath,onStatus:e.onStatus}),f=g?m.filter(v=>v.language!=="typescript"||g.missedProjectIds.has(v.id)):m,b=await Dn(f,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),y=[];if(g){Ea(e.paths.outputDb,b);let v=S.typescript??e.tempPaths.tempOutputScip;y=Fa({outputDb:e.paths.outputDb,tempOutputScip:e.tempPaths.tempOutputScip,outputScipPath:v,reusedProjects:g.reusedProjects})}let I=[...b,...y],{indexedOutputs:P}=Ca(I,p),q=d?[{language:"typescript",scipPath:d.scipPath}]:[],Ve=[...r,...q,...P];Aa(Ve,p,e.languages,e.opts.allowPartial,e.onStatus);let nr=d?[{id:"typescript",language:"typescript",label:"typescript (incremental documents)",scipPath:d.scipPath,outputScipPath:d.scipPath,durationMs:d.durationMs,command:"watch-service:typescript-index",outputBytes:J(d.scipPath)??void 0}]:[],rr=wa(n,[...b,...nr],g?{outputDb:e.paths.outputDb,classification:g.classification}:void 0);return{indexedOutputs:Ve,skippedLanguages:p,reusedLanguages:[...i],languageFingerprints:_a(n,e.languages),shards:rr,typescriptProjectShardContext:g?{projects:g.allProjects,fingerprints:g.fingerprints}:void 0,incrementalTypeScript:d??void 0}}function Ia(e,t){let n=t.get("typescript");if(!n||n.reused||e.opts.typescriptProjectMode!=="workspace")return;let r=G(e.projectRoot,e.opts.typescriptProjects);if(r.length===0)return;let i=un(e.projectRoot,r),a=cn(n.fingerprint.files,r),s=ln(r,i),o=dn(r,a,s),l=H(e.paths.metaPath),d=va(l,o,p=>E(he(e.paths.outputDb,p))),u=[...d.entries()].filter(([,p])=>p.reused).map(([p])=>p),g=new Set(u),m=new Set(r.filter(p=>!g.has(p)).map(p=>`typescript:${p}`));return{allProjects:r,fingerprints:o,classification:d,reusedProjects:u,missedProjectIds:m}}function va(e,t,n){let r=new Map;for(let i of Object.keys(t)){let a=t[i];if(!e){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:a});continue}let s=e.typescriptProjectShards?.[i];if(!s){r.set(i,{reused:!1,reason:"no cached fingerprint for this project",fingerprint:a});continue}if(!n(i)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:a});continue}if(j(s)!==j(a)){r.set(i,{reused:!1,reason:"project inputs changed since last index",fingerprint:a});continue}r.set(i,{reused:!0,fingerprint:a})}return r}function Ea(e,t){for(let n of t){if(n.skipped||!n.id.startsWith("typescript:"))continue;let r=n.id.slice(11),i=he(e,r);ge(h(i),{recursive:!0}),fe(n.scipPath,i)}}function Fa(e){return e.reusedProjects.map((t,n)=>{let r=he(e.outputDb,t),i=W(e.tempOutputScip,"typescript-project-cached",n);return fe(r,i),{id:`typescript:${t}`,language:"typescript",label:`typescript (${t})`,scipPath:i,outputScipPath:e.outputScipPath,durationMs:0,command:"cached",outputBytes:J(i)??void 0}})}function ja(e){let t=H(e.paths.metaPath),n=qn(e.projectRoot,e.languages,e),r=new Map;for(let i of e.languages){let a=Xe(e.paths.outputDb,i),s=n[i];if(!t){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:s,scipPath:a});continue}if(t.version!==3){r.set(i,{reused:!1,reason:`metadata version ${String(t.version??"unknown")} predates per-language shard caching`,fingerprint:s,scipPath:a});continue}if(i==="typescript"&&t.scipCompanion==="deferred"){r.set(i,{reused:!1,reason:"whole TypeScript SCIP companion is deferred behind changed-document overlays",fingerprint:s,scipPath:a});continue}if(!t.languageFingerprints){r.set(i,{reused:!1,reason:"no per-language fingerprints recorded in metadata",fingerprint:s,scipPath:a});continue}let o=t.languageFingerprints[i];if(!o){r.set(i,{reused:!1,reason:"no cached fingerprint for this language",fingerprint:s,scipPath:a});continue}if(!E(a)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:s,scipPath:a});continue}if(j(o)!==j(s)){r.set(i,{reused:!1,reason:"language inputs changed since last index",fingerprint:s,scipPath:a});continue}r.set(i,{reused:!0,fingerprint:s,scipPath:a})}return r}function wa(e,t,n){let r=[];for(let[i,a]of e)a.reused&&r.push({id:i,language:i,reused:!0,fingerprint:U(a.fingerprint),outputBytes:J(a.scipPath),durationMs:0});for(let i of t){let a=e.get(i.language),s=n&&i.id.startsWith("typescript:")?i.id.slice(11):null,o=s?n.classification.get(s):void 0;r.push({id:i.id,language:i.language,reused:!1,missReason:o?.reason??a?.reason??i.skipped?.reason,fingerprint:o?U(o.fingerprint):a?U(a.fingerprint):"unknown",outputBytes:i.outputBytes??null,durationMs:i.durationMs,command:i.command})}if(n)for(let[i,a]of n.classification)a.reused&&r.push({id:`typescript:${i}`,language:"typescript",reused:!0,fingerprint:U(a.fingerprint),outputBytes:J(he(n.outputDb,i)),durationMs:0});return r}function U(e){return sa("sha256").update(j(e)).digest("hex").slice(0,16)}function J(e){try{return ua(e).size}catch{return null}}function _a(e,t){let n={};for(let r of t){let i=e.get(r);i&&(n[r]=i.fingerprint)}return n}function Da(e,t,n,r,i,a,s,o){let l=!o||o.completeScipUpdated,c=!1;l&&(On(e.paths.outputDb,n),c=Mn(n,e.tempPaths.tempOutputScip,e.onStatus));let d=$a({run:e,env:t,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,incrementalTypeScript:o,completeScipAvailable:l,completeScipSanitized:c,materializeFullFallback:()=>{if(!o||o.completeScipUpdated)return c;e.onStatus("Materializing the deferred whole TypeScript SCIP companion for full conversion..."),wn({cacheDir:h(e.paths.outputDb),generationIdentity:o.nextFragmentGeneration,baseShardPath:o.scipPath,candidateShardPath:o.candidateScipPath});let y=n.map(I=>I.language==="typescript"?{language:I.language,scipPath:o.candidateScipPath}:I);return On(e.paths.outputDb,y),c=Mn(y,e.tempPaths.tempOutputScip,e.onStatus),c}});if(ee(Z(),{projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),d.mode==="incremental"&&o){let y=null,I=null;try{y=new T({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,indexPath:e.tempPaths.tempOutputScip}),I=new T({projectRoot:e.projectRoot,dbPath:e.paths.outputDb,indexPath:e.paths.outputScip});let P=zt(y,e.fingerprint,o.referenceFragmentsByFile,I);e.onStatus(`Cached exact TypeScript reference fragments for ${P} affected document(s).`)}catch(P){e.onStatus(`Exact TypeScript reference fragment prefill unavailable: ${P instanceof Error?P.message:String(P)}.`)}finally{y?.close(),I?.close()}}let u=ze(e.paths.metaPath),g=d.mode==="incremental"&&o?Ga(o,d.changedDocumentPaths):Te({projectRoot:e.projectRoot,previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.tempPaths.tempOutputDb,candidateIndexPath:e.tempPaths.tempOutputScip,previousSnapshot:u,currentSnapshot:e.fingerprint,refreshResult:"rebuilt"}),m=ye({trigger:e.opts.trigger,result:"rebuilt",start:e.start,languages:n.map(y=>y.language),skipped:[...r]}),p=d.mode==="incremental"&&d.scipCompanion==="deferred",S={...a};p&&delete S.typescript;let{metadata:f,pruneProjects:b}=Gn({run:e,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,languageFingerprints:S,typescriptProjectShardContext:s,lastRefresh:m});return f.scipCompanion=p?"deferred":"current",Un(e.paths.outputDb,b),Qe(e.tempPaths.tempMetaPath,f),wt({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath,preserveOutputScip:d.mode==="incremental"&&d.scipCompanion==="deferred",publication:d.mode==="incremental"?{mode:"incremental",validation:"passed",converterDurationMs:d.converterDurationMs,affectedDocumentCount:o?.affectedFiles.length,changedDocumentCount:d.changedDocumentPaths.length,producerDurationMs:o?.timings.serviceMs,materializationDurationMs:o?.durationMs,patchDurationMs:d.patchDurationMs,scipCompanion:d.scipCompanion,...d.scipCompanion==="deferred"&&o?{typescriptOverlayGeneration:o.nextFragmentGeneration}:{}}:{mode:"full",validation:"passed",converterDurationMs:d.converterDurationMs,scipCompanion:"current",...d.fallbackReason?{fallbackReason:d.fallbackReason}:{}}}),jt(h(e.paths.outputDb),d.mode==="incremental"&&d.scipCompanion==="deferred"?[o.nextFragmentGeneration]:[]),Bn(e.paths.outputDb,g,e.onStatus),m}function Ta(e,t,n,r,i,a){let s=ze(e.paths.metaPath),o=null;try{fe(e.paths.outputDb,e.tempPaths.tempOutputDb)}catch(u){o=Yt("reused","oracle-error",`Could not snapshot the prior database: ${u instanceof Error?u.message:String(u)}`)}ee(Z(),{projectRoot:e.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),o??=Te({projectRoot:e.projectRoot,previousDbPath:e.tempPaths.tempOutputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.paths.outputDb,candidateIndexPath:e.paths.outputScip,previousSnapshot:s,currentSnapshot:e.fingerprint,refreshResult:"reused"});let l=ye({trigger:e.opts.trigger,result:"reused",start:e.start,languages:t.map(u=>u.language),skipped:[...n]}),{metadata:c,pruneProjects:d}=Gn({run:e,indexedOutputs:t,skippedLanguages:n,reusedLanguages:r,languageFingerprints:i,typescriptProjectShardContext:a,lastRefresh:l});return Un(e.paths.outputDb,d),Qe(e.paths.metaPath,c),_t(e.paths.outputDb,e.paths.metaPath),Bn(e.paths.outputDb,o,e.onStatus),l}function ze(e){return ft(H(e)?.fingerprint)}function Bn(e,t,n){try{Kt(e,t),t.status==="evaluated"?n(`Affected-set shadow: ${(t.evaluation.recall*100).toFixed(1)}% recall; ${t.plan.affectedFiles.length} predicted, ${t.comparison.changedFiles.length} changed.`):n(`Affected-set shadow unavailable: ${t.reason}.`)}catch(r){n(`Affected-set shadow telemetry unavailable: ${r instanceof Error?r.message:String(r)}`)}}function Gn(e){let t=ka({mode:e.run.opts.typescriptProjectMode,skippedLanguages:e.skippedLanguages,reusedLanguages:e.reusedLanguages,context:e.typescriptProjectShardContext,metaPath:e.run.paths.metaPath});return{metadata:{version:3,status:e.skippedLanguages.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.run.fingerprint,languageFingerprints:e.languageFingerprints,typescriptProjectShards:t.field,requestedLanguages:e.run.languages,indexedLanguages:e.indexedOutputs.map(n=>n.language),skipped:[...e.skippedLanguages],lastRefresh:e.lastRefresh},pruneProjects:t.pruneProjects}}function ka(e){if(e.mode!=="workspace")return{field:void 0,pruneProjects:null};if(e.skippedLanguages.some(t=>t.language==="typescript"))return{field:void 0,pruneProjects:null};if(e.reusedLanguages.includes("typescript")){let t=H(e.metaPath)?.typescriptProjectShards;return{field:t,pruneProjects:t?Object.keys(t):[]}}return e.context?{field:e.context.fingerprints,pruneProjects:e.context.projects}:{field:void 0,pruneProjects:[]}}function Un(e,t){let n=zn(e);if(t===null){D(n,{recursive:!0,force:!0});return}let r;try{r=da(n)}catch{return}for(let i of Oa(r,t))D(R(n,i),{force:!0})}function Oa(e,t){let n=new Set(t.map(r=>`${Ce(r)}.scip`));return e.filter(r=>!n.has(r))}function On(e,t){for(let n of t){let r=Xe(e,n.language);ge(h(r),{recursive:!0}),n.scipPath!==r&&fe(n.scipPath,r)}}async function Ma(e,t){if(!Se()){if(e)throw new Error(`The scip CLI is required but not found on PATH.
|
|
250
|
-
Install from: https://github.com/sourcegraph/scip/releases`);if(
|
|
251
|
-
Install manually from: https://github.com/sourcegraph/scip/releases`)}}function
|
|
246
|
+
ORDER BY d.relative_path, c.chunk_index, m.role, g.symbol`).all(),l=new Map;for(let[d,u]of Object.entries({documents:i,chunks:a,definitions:s,mentions:o}))for(let g of u){let m=JSON.stringify([d,g]),p=l.get(g.relative_path)??[];p.push(m),l.set(g.relative_path,p)}let c=new Map;for(let[d,u]of[...l].sort(([g],[m])=>g.localeCompare(m))){let g=zr("sha256");for(let m of u.sort())g.update(m).update(`
|
|
247
|
+
`);c.set(d,g.digest("hex"))}return c}function _(e,t){return e.prepare(t).get().value}import{createHash as di}from"crypto";import{existsSync as Ne,readFileSync as ui,readdirSync as pi}from"fs";import{dirname as Ce,join as le,relative as gi,resolve as Le,sep as dn}from"path";function un(e,t){let n=t.includes("."),r={};for(let a of t)r[a]=[];let i=[];for(let a of e){let s=mn(a.path,t);s?r[s].push(a):n?r["."].push(a):i.push(a)}return{files:r,shared:i}}function pn(e,t){let n=new Map;for(let i of e){let a=t[i]?.packageName;a&&n.set(a,i)}let r=new Map;for(let i of e)r.set(i,new Set);for(let i of e){let a=t[i],s=r.get(i);if(!a||a.parseFailed){for(let o of e)o!==i&&s.add(o);continue}for(let o of a.dependencyNames){let l=n.get(o);l&&l!==i&&s.add(l)}for(let o of[...a.pathsTargets,...a.referencesPaths]){let l=mn(o,e);l&&l!==i&&s.add(l)}}return fi(e,r)}function gn(e,t,n){let r={};for(let i of e){let a=new Map;for(let s of t.files[i]??[])a.set(s.path,s);for(let s of n[i]??[])for(let o of t.files[s]??[])a.set(o.path,o);for(let s of t.shared)a.set(s.path,s);r[i]={files:[...a.values()].sort((s,o)=>s.path.localeCompare(o.path))}}return r}function Ae(e){if(e===".")return"root";let t=di("sha256").update(e).digest("hex").slice(0,8);return`${e.split("/").join("__")}-${t}`}function fn(e,t){let n=Le(e),r={};for(let i of t)r[i]=mi(n,i);return r}function mn(e,t){let n;for(let r of t)r!=="."&&(e===r||e.startsWith(`${r}/`))&&(!n||r.length>n.length)&&(n=r);return n}function fi(e,t){let n={};for(let r of e){let i=new Set,a=[...t.get(r)??[]];for(;a.length>0;){let s=a.pop();if(!(s===r||i.has(s))){i.add(s);for(let o of t.get(s)??[])o!==r&&!i.has(o)&&a.push(o)}}n[r]=[...i].sort((s,o)=>s.localeCompare(o))}return n}function mi(e,t){let n=t==="."?e:le(e,t),r=hi(n),i=yi(n),a=i?Si(i,e):{pathsTargets:[],referencesPaths:[],failed:!1};return{packageName:r.name,dependencyNames:r.dependencyNames,pathsTargets:a.pathsTargets,referencesPaths:a.referencesPaths,parseFailed:r.failed||a.failed}}function hi(e){let t=le(e,"package.json");if(!Ne(t))return{name:void 0,dependencyNames:[],failed:!1};let n=$e(t);if(!n.ok)return{name:void 0,dependencyNames:[],failed:!0};let r=typeof n.value.name=="string"?n.value.name:void 0,i=new Set;for(let a of["dependencies","devDependencies","peerDependencies"]){let s=n.value[a];if(s&&typeof s=="object"&&!Array.isArray(s))for(let o of Object.keys(s))i.add(o)}return{name:r,dependencyNames:[...i],failed:!1}}function yi(e){let t=le(e,"tsconfig.json");if(Ne(t))return t;let n;try{n=pi(e).filter(r=>/^tsconfig.*\.json$/.test(r))}catch{return}return n.sort((r,i)=>r.localeCompare(i)),n.length>0?le(e,n[0]):void 0}function Si(e,t){let n=$e(e);if(!n.ok)return{pathsTargets:[],referencesPaths:[],failed:!0};let r=bi(n.value,e,t),i=hn(e,n.value,t,0);return{pathsTargets:i.pathsTargets,referencesPaths:r,failed:i.failed}}function bi(e,t,n){let r=e.references;if(!Array.isArray(r))return[];let i=Ce(t),a=new Set;for(let s of r){if(!s||typeof s!="object")continue;let o=s.path;if(typeof o!="string"||o.trim()==="")continue;let l=yn(o,i,n);l&&a.add(l)}return[...a]}function hn(e,t,n,r){let i=Pi(t);if(i)return{pathsTargets:xi(i,Ce(e),n),failed:!1};if(r>=5)return{pathsTargets:[],failed:!1};let a=Ri(t.extends,e,n);if(!a)return{pathsTargets:[],failed:!1};let s=$e(a);return s.ok?hn(a,s.value,n,r+1):{pathsTargets:[],failed:!0}}function Pi(e){let t=e.compilerOptions;if(!t||typeof t!="object"||Array.isArray(t))return;let n=t.paths;return n&&typeof n=="object"&&!Array.isArray(n)?n:void 0}function xi(e,t,n){let r=new Set;for(let i of Object.values(e))if(Array.isArray(i))for(let a of i){if(typeof a!="string")continue;let s=yn(a,t,n);s&&r.add(s)}return[...r]}function Ri(e,t,n){let r=Array.isArray(e)?e.at(-1):e;if(typeof r!="string"||r.trim()===""||!r.startsWith(".")&&!r.startsWith("/"))return;let i=Le(Ce(t),r);if(i.endsWith(".json")||(i=`${i}.json`),!i.split(dn).includes("node_modules")&&A(n,i)&&Ne(i))return i}function yn(e,t,n){let r=e.replace(/\/?\*+$/,""),i=Le(t,r===""?".":r);if(!A(n,i))return;let s=gi(n,i).split(dn).join("/");return s===""?".":s}function Ii(e){let t="",n=0,r=!1,i=e.length;for(;n<i;){let a=e[n];if(r){if(t+=a,a==="\\"&&n+1<i){t+=e[n+1],n+=2;continue}a==='"'&&(r=!1),n+=1;continue}if(a==='"'){r=!0,t+=a,n+=1;continue}if(a==="/"&&e[n+1]==="/"){for(n+=2;n<i&&e[n]!==`
|
|
248
|
+
`;)n+=1;continue}if(a==="/"&&e[n+1]==="*"){for(n+=2;n<i&&!(e[n]==="*"&&e[n+1]==="/");)n+=1;n+=2;continue}t+=a,n+=1}return t}function $e(e){try{let t=ui(e,"utf-8"),n=JSON.parse(Ii(t));return n&&typeof n=="object"&&!Array.isArray(n)?{ok:!0,value:n}:{ok:!1}}catch{return{ok:!1}}}import{existsSync as vi,readFileSync as Ei,readdirSync as Fi,statSync as wi}from"fs";import x from"path";var ji=new Set([".cache",".git",".next",".nuxt",".turbo",".nx","build","coverage","dist","node_modules","tmp","vendor"]);function G(e,t=[]){let n=x.resolve(e),r=t.flatMap(l=>Di(n,l));if(r.length>0)return Sn(n,bn(r));let i=_i(n),a=bn(i),s=ki(n,a)?[n,...a]:a,o=s.length>0?s:[n];return Sn(n,o)}function Sn(e,t){return[...new Set(t.map(n=>Mi(e,n)))].sort((n,r)=>n.localeCompare(r))}function _i(e){let t=[],n=[e];for(;n.length>0;){let r=n.pop(),i;try{i=Fi(r,{withFileTypes:!0})}catch{continue}for(let a of i){let s=x.join(r,a.name);if(a.isDirectory()){!ji.has(a.name)&&!a.name.startsWith(".")&&n.push(s);continue}a.isFile()&&Ti(s)&&t.push(x.dirname(s))}}return t}function Di(e,t){let n=t.trim();if(!n)return[];let r=x.resolve(e,n);if(!A(e,r))return[];try{let i=wi(r);if(i.isDirectory())return[r];if(i.isFile()&&Pn(x.basename(r)))return[x.dirname(r)]}catch{return[]}return[]}function Ti(e){if(!Pn(x.basename(e)))return!1;let t=xn(e);return t?x.basename(e)==="tsconfig.json"||"include"in t||"files"in t||"references"in t:!1}function Pn(e){return e.startsWith("tsconfig")&&e.endsWith(".json")}function bn(e){let t=[...new Set(e.map(n=>x.resolve(n)))].sort((n,r)=>n.localeCompare(r));return t.length<=1?t:t.filter(n=>!t.some(r=>r!==n&&Ni(n,r)))}function ki(e,t){if(t.length===0||t.some(r=>x.resolve(r)===e))return!1;let n=x.join(e,"tsconfig.json");return vi(n)&&Oi(n)}function Oi(e){let n=xn(e)?.include;return Array.isArray(n)?n.some(r=>typeof r=="string"&&r.trim()!==""&&!r.startsWith("!")&&(r.includes("/")||r.includes("**")||!x.extname(r))):!1}function xn(e){try{let t=JSON.parse(Ei(e,"utf-8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function Mi(e,t){let n=x.relative(e,t);return n?n.split(x.sep).join("/"):"."}function Ni(e,t){let n=x.relative(e,t);return!!n&&!n.startsWith("..")&&!x.isAbsolute(n)}import{createHash as zi}from"crypto";import{existsSync as Be,readFileSync as _n,statSync as Xi,writeFileSync as Ge}from"fs";import{join as Qi}from"path";import{randomUUID as Ci}from"crypto";import{existsSync as Li,mkdirSync as Rn,readFileSync as Ai,rmSync as In}from"fs";import{resolve as vn}from"path";var $i=12e4,Bi=5,de=class{projectRoot;cacheDir;baseGeneration;timeoutMs;runtime;constructor(t,n={}){this.projectRoot=nt(t.projectRoot),this.cacheDir=t.cacheDir,this.baseGeneration=t.baseGeneration,this.timeoutMs=n.timeoutMs??Hi(),this.runtime=n.runtime??qi}request(t){let n=mt(this.cacheDir),r=Ct(this.cacheDir),i=be(n.statePath);if(!En(i,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript index service is not running.");let a=this.runtime.randomId(),s=vn(r.requestDir,`${a}.json`),o=vn(r.responseDir,`${a}.json`),l=this.runtime.now()+this.timeoutMs;Rn(r.requestDir,{recursive:!0}),Rn(r.responseDir,{recursive:!0}),O(s,{protocolVersion:re,id:a,baseGeneration:this.baseGeneration,deadlineAtMs:l,request:t});try{for(;this.runtime.now()<=l;){if(Li(o))return Gi(Ai(o,"utf8"),a,this.baseGeneration,t.producerIdentity,t.affectedFiles);let c=be(n.statePath);if(!En(c,this.projectRoot,this.runtime))throw new Error("TypeScript index service stopped while processing a request.");this.runtime.sleep(Bi)}throw new Error(`TypeScript index service timed out after ${this.timeoutMs}ms.`)}finally{In(s,{force:!0}),In(o,{force:!0})}}};function En(e,t,n){let r=e!==null&&n.now()-Date.parse(e.heartbeatAt)<=ft,i=e?.typescriptIndex?.busyUntil!==void 0&&n.now()<=Date.parse(e.typescriptIndex.busyUntil);return e!==null&&e.projectRoot===t&&e.typescriptIndex?.protocolVersion===re&&n.isProcessAlive(e.pid)&&(r||i)}function Gi(e,t,n,r,i){let a=JSON.parse(e);if(a.protocolVersion!==re||a.id!==t||a.ok===!0&&a.baseGeneration!==n)throw new Error("TypeScript index service wrote an incompatible response.");if(a.ok!==!0)throw new Error(typeof a.error=="string"?a.error:"TypeScript index service request failed.");let s=Ui(a.response,r),o=[...new Set(i)].sort(),l=s.fragments.map(c=>c.relativePath).sort();if(JSON.stringify(l)!==JSON.stringify(o))throw new Error("TypeScript index service omitted or added an affected document.");return s}function Ui(e,t){if(!e||typeof e!="object")throw new Error("TypeScript index service wrote an invalid response.");let n=e;if(n.producerIdentity!==t||typeof n.cold!="boolean"||typeof n.durationMs!="number"||!Number.isFinite(n.durationMs)||!Array.isArray(n.fragments))throw new Error("TypeScript index service wrote an invalid response.");let r=new Set,i=n.fragments.map(a=>{if(!a||typeof a.relativePath!="string"||a.bytesBase64!==null&&typeof a.bytesBase64!="string"||typeof a.occurrences!="number"||!Number.isInteger(a.occurrences)||a.occurrences<0||typeof a.symbols!="number"||!Number.isInteger(a.symbols)||a.symbols<0||!Array.isArray(a.referenceFragments)||!a.referenceFragments.every(Ji)||r.has(a.relativePath))throw new Error("TypeScript index service wrote an invalid fragment.");r.add(a.relativePath);let s=a.bytesBase64===null?null:Wi(a.bytesBase64);return{relativePath:a.relativePath,bytes:s,occurrences:a.occurrences,symbols:a.symbols,referenceFragments:a.referenceFragments}});return{producerIdentity:n.producerIdentity,cold:n.cold,durationMs:n.durationMs,fragments:i}}function Ji(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.targetSymbol=="string"&&!!t.location&&typeof t.location.file=="string"&&Number.isInteger(t.location.line)&&Number.isInteger(t.location.column)}function Wi(e){let t=Buffer.from(e,"base64");if(t.toString("base64")!==e)throw new Error("TypeScript index service wrote invalid base64.");return t}function Hi(){let e=Number(process.env.SCIP_TYPESCRIPT_INDEX_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:$i}var qi={now:Date.now,randomId:Ci,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:k};function Vi(e){let t=e.projectMode==="workspace"?e.workspaceProjects??[]:["."];if(t.length===0)return{eligible:!1,reason:"workspace project roots unavailable"};if(t.length===1&&t[0]==="."&&!e.rootTsconfigExists)return{eligible:!1,reason:"root tsconfig unavailable"};if(!e.previousSnapshot)return{eligible:!1,reason:"prior project snapshot unavailable"};if(e.graph===null)return{eligible:!1,reason:"dependency graph unavailable"};if(e.projectFiles.length===0)return{eligible:!1,reason:"prior TypeScript documents unavailable"};let n=Y(e.previousSnapshot,e.currentSnapshot);if(n.changes.length===0)return{eligible:!1,reason:"no changed project inputs"};if(n.changes.some(c=>c.kind!=="modified"||c.inputKind!=="source"||!$(c.path)))return{eligible:!1,reason:"change is not a modified TypeScript source file"};let r=K(n,e.graph,e.projectFiles);if(r.mode!=="closure"||r.affectedFiles.length===0)return{eligible:!1,reason:r.reasons.length>0?`affected set widened: ${r.reasons.join(", ")}`:"empty affected set"};let i=Yi([...r.changedFiles,...r.affectedFiles],t);if(!i)return{eligible:!1,reason:"affected files cross or ambiguously match TypeScript projects"};let a=Fn(e.currentSnapshot,e.projectFiles,e.producerIdentity),s=Fn(e.previousSnapshot,e.projectFiles,e.producerIdentity);if(a!==s)return{eligible:!1,reason:"TypeScript fragment project identity changed"};let o=jn(e.previousSnapshot,e.projectFiles,e.graph,e.producerIdentity,e.projectFiles);if(!o)return{eligible:!1,reason:"prior document identity unavailable"};let l=jn(e.currentSnapshot,e.projectFiles,e.graph,e.producerIdentity,r.affectedFiles);return l?{eligible:!0,manifest:n,plan:r,projectIdentity:a,previousFragmentGeneration:wn(e.previousSnapshot,e.producerIdentity),nextFragmentGeneration:wn(e.currentSnapshot,e.producerIdentity),previousDocumentIdentities:o,nextDocumentIdentities:l,tsconfigPath:i==="."?"tsconfig.json":`${i}/tsconfig.json`,projectArgument:i}:{eligible:!1,reason:"next document identity unavailable"}}function Yi(e,t){let n=null;for(let r of e){let i=t.filter(a=>a==="."||r===a||r.startsWith(`${a}/`));if(i.length!==1||n!==null&&n!==i[0])return null;n=i[0]}return n}function Dn(e){let t=Date.now();try{if(!Be(e.previousDbPath)||!Be(e.previousShardPath))throw new Error("prior TypeScript graph or language shard unavailable");let n=performance.now(),r=Re();if(!r.available)throw new Error(r.reason);let i=performance.now()-n;n=performance.now();let a=new T({projectRoot:e.projectRoot,dbPath:e.previousDbPath,indexPath:e.previousIndexPath}),s,o;try{s=j(a,{includeIgnored:!1}).filter($).sort(),o=M(a)}finally{a.close()}let l=performance.now()-n,c=Vi({projectMode:e.projectMode,workspaceProjects:e.projectMode==="workspace"?G(e.projectRoot,e.currentSnapshot.typescriptProjects):void 0,previousSnapshot:e.previousSnapshot,currentSnapshot:e.currentSnapshot,projectFiles:s,graph:o,producerIdentity:r.producerIdentity,rootTsconfigExists:Be(Qi(e.projectRoot,"tsconfig.json"))});if(!c.eligible)throw new Error(c.reason);let d=Lt(e.previousDbPath);if(!d)throw new Error("published TypeScript base generation unavailable");n=performance.now();let g=new de({projectRoot:e.projectRoot,cacheDir:e.cacheDir,baseGeneration:d}).request({kind:"emit-documents",tsconfigPath:c.tsconfigPath,projectArgument:c.projectArgument,projectIdentity:c.projectIdentity,producerIdentity:r.producerIdentity,modifiedFiles:c.plan.changedFiles,affectedFiles:c.plan.affectedFiles}),m=performance.now()-n,p=Xi(e.previousShardPath).size>=wt;n=performance.now();let S=p?null:_n(e.previousShardPath),f=p?{completeIndexBytes:null,affectedIndexBytes:It(g.fragments)}:Ft({packageVersion:r.packageVersion,baseIndexBytes:S,fragments:g.fragments}),b=performance.now()-n;n=performance.now(),p?jt({cacheDir:e.cacheDir,previousGenerationIdentity:c.previousFragmentGeneration,nextGenerationIdentity:c.nextFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,baseShardCurrent:e.baseShardCurrent,fragments:g.fragments}):(vt({cacheDir:e.cacheDir,packageVersion:r.packageVersion,indexBytes:S,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,generationIdentity:c.previousFragmentGeneration,documentIdentities:c.previousDocumentIdentities,allowUntrackedDocuments:!0}),Et({cacheDir:e.cacheDir,previousGenerationIdentity:c.previousFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,generationIdentity:c.nextFragmentGeneration,fragments:g.fragments,documentIdentities:c.nextDocumentIdentities}));let y=performance.now()-n;n=performance.now(),f.completeIndexBytes&&Ge(e.candidateShardPath,f.completeIndexBytes),Ge(e.candidateAffectedScipPath,f.affectedIndexBytes);let I=performance.now()-n,P={scipPath:p?e.previousShardPath:e.candidateShardPath,candidateScipPath:e.candidateShardPath,affectedScipPath:e.candidateAffectedScipPath,completeScipUpdated:!p,durationMs:Date.now()-t,cold:g.cold,changedFiles:c.plan.changedFiles,affectedFiles:c.plan.affectedFiles,producerIdentity:r.producerIdentity,previousFragmentGeneration:c.previousFragmentGeneration,nextFragmentGeneration:c.nextFragmentGeneration,manifest:c.manifest,plan:c.plan,projectFileCount:s.length,referenceFragmentsByFile:new Map(g.fragments.map(q=>[q.relativePath,q.referenceFragments])),timings:{runtimeMs:i,graphMs:l,requestMs:m,serviceMs:g.durationMs,assemblyMs:b,fragmentStoreMs:y,writeMs:I}};return e.onStatus(`Incremental TypeScript index emitted ${P.affectedFiles.length} affected document(s) in ${(P.durationMs/1e3).toFixed(3)}s (${P.cold?"cold":"warm"} service; ${p?"whole SCIP deferred":"whole SCIP current"}; runtime ${i.toFixed(0)}ms, graph ${l.toFixed(0)}ms, request ${m.toFixed(0)}ms, assembly ${b.toFixed(0)}ms, fragments ${y.toFixed(0)}ms, write ${I.toFixed(0)}ms).`),P}catch(n){return e.onStatus(`Incremental TypeScript index unavailable: ${n instanceof Error?n.message:String(n)}. Falling back to the whole-project indexer.`),null}}function Tn(e){let t=Re();if(!t.available)throw new Error(t.reason);let n=_t({cacheDir:e.cacheDir,generationIdentity:e.generationIdentity,baseIndexBytes:_n(e.baseShardPath),packageVersion:t.packageVersion});Ge(e.candidateShardPath,n)}function Fn(e,t,n){let r=e.files.filter(i=>V(i.path,e.languages)!=="source").map(i=>({path:i.path,size:i.size,hash:i.hash})).sort((i,a)=>i.path.localeCompare(a.path));return Ue(JSON.stringify({version:1,producerIdentity:n,pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:[...e.typescriptProjects].sort(),projectFiles:[...t].sort(),nonSourceInputs:r}))}function wn(e,t){return Ue(JSON.stringify({version:1,producerIdentity:t,snapshot:e}))}function jn(e,t,n,r,i){let a=new Set(e.files.map(l=>l.path)),s=oe({projectFiles:t.filter(l=>a.has(l)),snapshot:e,graph:n,engineIdentity:r}),o=new Map;for(let l of i){let c=s.identityFor(l,"typescript-scip-document-v1");if(c.key){o.set(l,c.key);continue}if(a.has(l))return null;o.set(l,Ue(JSON.stringify({version:1,producerIdentity:r,generatedDocument:l})))}return o}function Ue(e){return zi("sha256").update(e).digest("hex")}import{execFile as Ki}from"child_process";import{existsSync as ue,renameSync as We,rmSync as He,statSync as Zi}from"fs";import{cpus as ea}from"os";import{join as kn}from"path";function ta(e,t,n){if(!e.defaultOutputPath)return;let r=kn(t,e.defaultOutputPath);n!==r&&ue(r)&&We(r,n)}function na(e,t,n){if(!e.defaultOutputPath)return null;let r=kn(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return He(i,{force:!0}),ue(r)?(We(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function ra(e){e&&(He(e.defaultOutputPath,{force:!0}),e.backupPath&&ue(e.backupPath)&&We(e.backupPath,e.defaultOutputPath))}function ia(e,t){if(e<=1)return 1;let n=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),r=Number.isFinite(t)&&t&&t>0?t:Number.isFinite(n)&&n>0?n:Math.min(8,Math.max(1,ea().length));return Math.max(1,Math.min(e,Math.floor(r)))}async function On(e,t,n,r){let i=e.filter(c=>c.config.defaultOutputPath),a=e.filter(c=>!c.config.defaultOutputPath),s=[],o=ia(a.length,r),l=await sa(a,o,c=>Je(c,t,n));if(o>1){let c=new Map;for(let d of l.filter(u=>u.skipped)){let u=a.find(g=>g.id===d.id);u&&(n(`Retrying ${u.label} indexer serially after parallel failure...`),c.set(u.id,await Je(u,t,n)))}s.push(...l.map(d=>c.get(d.id)??d))}else s.push(...l);for(let c of i)s.push(await Je(c,t,n));return s.sort((c,d)=>e.findIndex(u=>u.id===c.id)-e.findIndex(u=>u.id===d.id))}async function Je(e,t,n){n(`Indexing ${e.label} with ${e.resolvedBinary}...`),He(e.scipPath,{force:!0});let r=na(e.config,t,e.scipPath),i=[e.binary,...e.args].join(" "),a=Date.now();try{let o=Ze(e.binary,e.args);await aa(o.binary,o.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),ta(e.config,t,e.scipPath)}catch(o){let l=o instanceof Error?o.message:String(o),c=`${e.resolvedBinary} indexer failed: ${l.split(`
|
|
249
|
+
`)[0]}`,d=e.label===e.language?c:`${e.label}: ${c}`;return n(`Skipping ${e.label}: ${c}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,skipped:{language:e.language,reason:d}}}finally{ra(r)}if(!ue(e.scipPath)){let o=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`,l=e.label===e.language?o:`${e.label}: ${o}`;return n(`Skipping ${e.label}: ${o}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,skipped:{language:e.language,reason:l}}}let s;try{s=Zi(e.scipPath).size}catch{s=void 0}return{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,outputBytes:s}}function aa(e,t,n){return new Promise((r,i)=>{Ki(e,[...t],n,a=>{a?i(a):r()})})}async function sa(e,t,n){if(e.length===0)return[];let r=new Array(e.length),i=0,a=Math.max(1,Math.min(e.length,t)),s=Array.from({length:a},async()=>{for(;i<e.length;){let o=i++;r[o]=await n(e[o])}});return await Promise.all(s),r}async function Un(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,a=Sa(e),s=Date.now();ge(h(a.outputScip),{recursive:!0}),ge(h(a.outputDb),{recursive:!0});let o=e.languages??bt(t);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 l=F("reindex.fingerprint",()=>Ya(t,o,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath}),{languages:o.length}),c,d;if(e.skipIfUnchanged!==!1&&!Ot(t,a.outputDb)&&Mn(a.outputScip)===Mn(R(h(a.outputDb),"index.scip"))){let p=X(t);if(c=p?te(p,l):void 0,c){let S=ne(c);if(S){if(!ya(a,l))try{Pe({snapshot:c,manifest:S,targetCacheDir:h(a.outputDb),targetProjectRoot:t}),r(`Attached shared generation ${c.generationId.slice(0,12)}`)}catch(f){r(`Shared generation attach failed; continuing locally: ${ze(f)}`)}}else{let f=await Nt(c);if(f.kind==="owner")d=f.release;else if(f.kind==="generation-ready"){let b=ne(c);if(b)try{Pe({snapshot:c,manifest:b,targetCacheDir:h(a.outputDb),targetProjectRoot:t,action:"waited"}),r(`Attached shared generation ${c.generationId.slice(0,12)} after waiting`)}catch(y){r(`Shared generation attach failed after waiting; continuing locally: ${ze(y)}`)}}else r("Shared generation build lock timed out; continuing with an isolated local reindex")}}}let u=rt(R(h(a.outputDb),"cache-lifecycle.lock"),{waitMs:3e4});if(!u)throw d?.(),new Error(`Could not acquire scip-query cache lifecycle lock for ${h(a.outputDb)}.`);let g;try{g=await C("reindex.lock",()=>Wa(R(h(a.outputDb),"index.lock"),{projectRoot:t,trigger:e.trigger,onStatus:r}),{languages:o.length})}catch(p){throw u.release(),d?.(),p}let m=null;try{let p=null,S=F("reindex.reuse-check",()=>(p=ba({opts:e,paths:a,languages:o,fingerprint:l,start:s,onStatus:r}),p),()=>({languages:o.length,reused:p!==null}));if(S)return Nn({snapshot:c,paths:a,projectRoot:t,fingerprint:l,onStatus:r}),S;await C("reindex.scip-cli-ready",()=>Ca(i,r));let f=xa(a);m=f.runDir;let b,y=await C("reindex.fresh",async()=>(b=await Ra({opts:e,languages:o,projectRoot:t,paths:a,tempPaths:f,fingerprint:l,start:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r}),b),()=>({languages:o.length,reused:b?.reused,skipped:b?.skipped.length}));return Nn({snapshot:c,paths:a,projectRoot:t,fingerprint:l,onStatus:r}),y}catch(p){throw Kn(a.metaPath,ye({trigger:e.trigger,result:"failed",start:s,error:p instanceof Error?p.message:String(p)})),p}finally{m&&D(m,{recursive:!0,force:!0}),g(),u.release(),d?.()}}function Nn(e){if(e.snapshot){if(ne(e.snapshot)){xe(e.snapshot,h(e.paths.outputDb),"local-fresh");return}try{let t=X(e.projectRoot),n=t?te(t,e.fingerprint):void 0;if(!n||n.generationId!==e.snapshot.generationId){e.onStatus("Skipped shared generation publication because the worktree changed during indexing");return}Mt({snapshot:e.snapshot,sourceCacheDir:h(e.paths.outputDb),sourceProjectRoot:e.projectRoot,sourceStillValid:()=>{let r=X(e.projectRoot);return(r?te(r,e.fingerprint):void 0)?.generationId===e.snapshot?.generationId}}),xe(e.snapshot,h(e.paths.outputDb),"built"),e.onStatus(`Published shared generation ${e.snapshot.generationId.slice(0,12)}`)}catch(t){e.onStatus(`Shared generation publication failed; local index remains valid: ${ze(t)}`)}}}function ya(e,t){if(!E(e.outputScip)||!E(e.outputDb)||!Yn(e.metaPath,t))return!1;let n=B(e.outputDb,e.metaPath);return n.state!=="invalid"&&n.state!=="drifted"}function ze(e){return e instanceof Error?e.message:String(e)}function Sa(e){let t=e.outputScip??R(e.projectRoot,"index.scip"),n=e.outputDb??R(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:R(h(n),"meta.json")}}function ba(e){let t=B(e.paths.outputDb,e.paths.metaPath);if(e.opts.skipIfUnchanged===!1||!E(e.paths.outputScip)||!E(e.paths.outputDb)||!Yn(e.paths.metaPath,e.fingerprint)||t.state==="invalid"||t.state==="drifted")return null;ee(Z(),{projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let n=Date.now()-e.start,r=ye({trigger:e.opts.trigger,result:"reused",start:e.start,languages:e.languages,skipped:[]});return Kn(e.paths.metaPath,r),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:[],lastRefresh:r,shards:Pa(e.paths,e.opts.projectRoot,e.languages,e.opts)}}function Pa(e,t,n,r){let i=Qn(t,n,r);return n.map(a=>({id:a,language:a,reused:!0,fingerprint:U(i[a]),outputBytes:J(Qe(e.outputDb,a)),durationMs:0}))}function xa(e){let t=da(R(h(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:R(t,pe(e.outputScip)),tempOutputDb:R(t,pe(e.outputDb)),tempMetaPath:R(t,pe(e.metaPath))}}async function Ra(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},n,r=await C("reindex.language-indexers",async()=>(n=await va(e,t),n),()=>({languages:e.languages.length,indexed:n?.indexedOutputs.length,reused:n?.reusedLanguages.length,skipped:n?.skippedLanguages.length})),{indexedOutputs:i,skippedLanguages:a,reusedLanguages:s,languageFingerprints:o,shards:l,typescriptProjectShardContext:c,incrementalTypeScript:d}=r;if(s.length>0&&e.onStatus(`Reused ${s.length} cached language shard(s): ${s.join(", ")}`),Ia({run:e,indexedOutputs:i,skippedLanguages:a,reusedLanguages:s})){let m=F("reindex.publish",()=>Oa(e,i,a,s,o,c),{mode:"metadata-only",languages:i.length,reused:s.length}),p=m.durationMs;return e.onStatus(`All language shards unchanged; reused existing SQLite index in ${(p/1e3).toFixed(1)}s`),{languages:i.map(S=>S.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:p,reused:!0,skipped:a,lastRefresh:m,shards:l}}let u=F("reindex.publish",()=>ka(e,t,i,a,s,o,c,d),{mode:d?"incremental-or-fallback":"full",languages:i.length,reused:s.length,skipped:a.length}),g=u.durationMs;return e.onStatus(`Done in ${(g/1e3).toFixed(1)}s`),{languages:i.map(m=>m.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:g,reused:!1,skipped:a,lastRefresh:u,shards:l}}function Ia(e){if(e.run.opts.skipIfUnchanged===!1||e.skippedLanguages.length>0||!E(e.run.paths.outputScip)||!E(e.run.paths.outputDb))return!1;let t=B(e.run.paths.outputDb,e.run.paths.metaPath);if(t.state==="invalid"||t.state==="drifted")return!1;let n=new Set(e.reusedLanguages),r=new Set(e.indexedOutputs.map(i=>i.language));return e.run.languages.length>0&&r.size===e.run.languages.length&&e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(i=>n.has(i)&&r.has(i))}async function va(e,t){let n=_a({paths:e.paths,projectRoot:e.projectRoot,languages:e.languages,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,clojureConfigPath:e.opts.clojureConfigPath}),r=[],i=new Set;for(let[v,Ke]of n)Ke.reused&&(r.push({language:v,scipPath:Ke.scipPath}),i.add(v));for(let v of i)e.onStatus(`Reusing cached ${v} SCIP shard (language inputs unchanged).`);let a=n.get("typescript"),s=B(e.paths.outputDb,e.paths.metaPath),o=H(e.paths.metaPath),l=s.state==="legacy"||s.state==="current",c=o?.scipCompanion!=="deferred"&&(s.state!=="current"||s.generation.publication?.scipCompanion!=="deferred"),d=a&&!a.reused&&l?Dn({projectRoot:e.projectRoot,cacheDir:h(e.paths.outputDb),previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,previousShardPath:a.scipPath,candidateShardPath:W(e.tempPaths.tempOutputScip,"typescript-incremental",0),candidateAffectedScipPath:W(e.tempPaths.tempOutputScip,"typescript-affected",0),baseShardCurrent:c,previousSnapshot:Xe(e.paths.metaPath),currentSnapshot:e.fingerprint,projectMode:e.opts.typescriptProjectMode,onStatus:e.onStatus}):null,u=new Set(d?["typescript"]:[]),g=d?void 0:Ea(e,n),{preparedRuns:m,skippedLanguages:p,languageOutputScipPaths:S}=La({languages:e.languages.filter(v=>!i.has(v)&&!u.has(v)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,preDiscoveredTypeScriptProjects:g?.allProjects,clojureConfigPath:e.opts.clojureConfigPath,onStatus:e.onStatus}),f=g?m.filter(v=>v.language!=="typescript"||g.missedProjectIds.has(v.id)):m,b=await On(f,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),y=[];if(g){wa(e.paths.outputDb,b);let v=S.typescript??e.tempPaths.tempOutputScip;y=ja({outputDb:e.paths.outputDb,tempOutputScip:e.tempPaths.tempOutputScip,outputScipPath:v,reusedProjects:g.reusedProjects})}let I=[...b,...y],{indexedOutputs:P}=$a(I,p),q=d?[{language:"typescript",scipPath:d.scipPath}]:[],Ye=[...r,...q,...P];Ba(Ye,p,e.languages,e.opts.allowPartial,e.onStatus);let ar=d?[{id:"typescript",language:"typescript",label:"typescript (incremental documents)",scipPath:d.scipPath,outputScipPath:d.scipPath,durationMs:d.durationMs,command:"watch-service:typescript-index",outputBytes:J(d.scipPath)??void 0}]:[],sr=Da(n,[...b,...ar],g?{outputDb:e.paths.outputDb,classification:g.classification}:void 0);return{indexedOutputs:Ye,skippedLanguages:p,reusedLanguages:[...i],languageFingerprints:Ta(n,e.languages),shards:sr,typescriptProjectShardContext:g?{projects:g.allProjects,fingerprints:g.fingerprints}:void 0,incrementalTypeScript:d??void 0}}function Ea(e,t){let n=t.get("typescript");if(!n||n.reused||e.opts.typescriptProjectMode!=="workspace")return;let r=G(e.projectRoot,e.opts.typescriptProjects);if(r.length===0)return;let i=fn(e.projectRoot,r),a=un(n.fingerprint.files,r),s=pn(r,i),o=gn(r,a,s),l=H(e.paths.metaPath),d=Fa(l,o,p=>E(he(e.paths.outputDb,p))),u=[...d.entries()].filter(([,p])=>p.reused).map(([p])=>p),g=new Set(u),m=new Set(r.filter(p=>!g.has(p)).map(p=>`typescript:${p}`));return{allProjects:r,fingerprints:o,classification:d,reusedProjects:u,missedProjectIds:m}}function Fa(e,t,n){let r=new Map;for(let i of Object.keys(t)){let a=t[i];if(!e){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:a});continue}let s=e.typescriptProjectShards?.[i];if(!s){r.set(i,{reused:!1,reason:"no cached fingerprint for this project",fingerprint:a});continue}if(!n(i)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:a});continue}if(w(s)!==w(a)){r.set(i,{reused:!1,reason:"project inputs changed since last index",fingerprint:a});continue}r.set(i,{reused:!0,fingerprint:a})}return r}function wa(e,t){for(let n of t){if(n.skipped||!n.id.startsWith("typescript:"))continue;let r=n.id.slice(11),i=he(e,r);ge(h(i),{recursive:!0}),fe(n.scipPath,i)}}function ja(e){return e.reusedProjects.map((t,n)=>{let r=he(e.outputDb,t),i=W(e.tempOutputScip,"typescript-project-cached",n);return fe(r,i),{id:`typescript:${t}`,language:"typescript",label:`typescript (${t})`,scipPath:i,outputScipPath:e.outputScipPath,durationMs:0,command:"cached",outputBytes:J(i)??void 0}})}function _a(e){let t=H(e.paths.metaPath),n=Qn(e.projectRoot,e.languages,e),r=new Map;for(let i of e.languages){let a=Qe(e.paths.outputDb,i),s=n[i];if(!t){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:s,scipPath:a});continue}if(t.version!==3){r.set(i,{reused:!1,reason:`metadata version ${String(t.version??"unknown")} predates per-language shard caching`,fingerprint:s,scipPath:a});continue}if(i==="typescript"&&t.scipCompanion==="deferred"){r.set(i,{reused:!1,reason:"whole TypeScript SCIP companion is deferred behind changed-document overlays",fingerprint:s,scipPath:a});continue}if(!t.languageFingerprints){r.set(i,{reused:!1,reason:"no per-language fingerprints recorded in metadata",fingerprint:s,scipPath:a});continue}let o=t.languageFingerprints[i];if(!o){r.set(i,{reused:!1,reason:"no cached fingerprint for this language",fingerprint:s,scipPath:a});continue}if(!E(a)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:s,scipPath:a});continue}if(w(o)!==w(s)){r.set(i,{reused:!1,reason:"language inputs changed since last index",fingerprint:s,scipPath:a});continue}r.set(i,{reused:!0,fingerprint:s,scipPath:a})}return r}function Da(e,t,n){let r=[];for(let[i,a]of e)a.reused&&r.push({id:i,language:i,reused:!0,fingerprint:U(a.fingerprint),outputBytes:J(a.scipPath),durationMs:0});for(let i of t){let a=e.get(i.language),s=n&&i.id.startsWith("typescript:")?i.id.slice(11):null,o=s?n.classification.get(s):void 0;r.push({id:i.id,language:i.language,reused:!1,missReason:o?.reason??a?.reason??i.skipped?.reason,fingerprint:o?U(o.fingerprint):a?U(a.fingerprint):"unknown",outputBytes:i.outputBytes??null,durationMs:i.durationMs,command:i.command})}if(n)for(let[i,a]of n.classification)a.reused&&r.push({id:`typescript:${i}`,language:"typescript",reused:!0,fingerprint:U(a.fingerprint),outputBytes:J(he(n.outputDb,i)),durationMs:0});return r}function U(e){return ca("sha256").update(w(e)).digest("hex").slice(0,16)}function J(e){try{return ga(e).size}catch{return null}}function Ta(e,t){let n={};for(let r of t){let i=e.get(r);i&&(n[r]=i.fingerprint)}return n}function ka(e,t,n,r,i,a,s,o){let l=!o||o.completeScipUpdated,c=!1;l&&(Cn(e.paths.outputDb,n),c=Ln(n,e.tempPaths.tempOutputScip,e.onStatus));let d=Ga({run:e,env:t,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,incrementalTypeScript:o,completeScipAvailable:l,completeScipSanitized:c,materializeFullFallback:()=>{if(!o||o.completeScipUpdated)return c;e.onStatus("Materializing the deferred whole TypeScript SCIP companion for full conversion..."),Tn({cacheDir:h(e.paths.outputDb),generationIdentity:o.nextFragmentGeneration,baseShardPath:o.scipPath,candidateShardPath:o.candidateScipPath});let y=n.map(I=>I.language==="typescript"?{language:I.language,scipPath:o.candidateScipPath}:I);return Cn(e.paths.outputDb,y),c=Ln(y,e.tempPaths.tempOutputScip,e.onStatus),c}});if(ee(Z(),{projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),d.mode==="incremental"&&o){let y=null,I=null;try{y=new T({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,indexPath:e.tempPaths.tempOutputScip}),I=new T({projectRoot:e.projectRoot,dbPath:e.paths.outputDb,indexPath:e.paths.outputScip});let P=Vt(y,e.fingerprint,o.referenceFragmentsByFile,I);e.onStatus(`Cached exact TypeScript reference fragments for ${P} affected document(s).`)}catch(P){e.onStatus(`Exact TypeScript reference fragment prefill unavailable: ${P instanceof Error?P.message:String(P)}.`)}finally{y?.close(),I?.close()}}let u=Xe(e.paths.metaPath),g=d.mode==="incremental"&&o?Ja(o,d.changedDocumentPaths):ke({projectRoot:e.projectRoot,previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.tempPaths.tempOutputDb,candidateIndexPath:e.tempPaths.tempOutputScip,previousSnapshot:u,currentSnapshot:e.fingerprint,refreshResult:"rebuilt"}),m=ye({trigger:e.opts.trigger,result:"rebuilt",start:e.start,languages:n.map(y=>y.language),skipped:[...r]}),p=d.mode==="incremental"&&d.scipCompanion==="deferred",S={...a};p&&delete S.typescript;let{metadata:f,pruneProjects:b}=Wn({run:e,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,languageFingerprints:S,typescriptProjectShardContext:s,lastRefresh:m});return f.scipCompanion=p?"deferred":"current",Hn(e.paths.outputDb,b),Ve(e.tempPaths.tempMetaPath,f),Tt({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath,preserveOutputScip:d.mode==="incremental"&&d.scipCompanion==="deferred",publication:d.mode==="incremental"?{mode:"incremental",validation:"passed",converterDurationMs:d.converterDurationMs,affectedDocumentCount:o?.affectedFiles.length,changedDocumentCount:d.changedDocumentPaths.length,producerDurationMs:o?.timings.serviceMs,materializationDurationMs:o?.durationMs,patchDurationMs:d.patchDurationMs,scipCompanion:d.scipCompanion,...d.scipCompanion==="deferred"&&o?{typescriptOverlayGeneration:o.nextFragmentGeneration}:{}}:{mode:"full",validation:"passed",converterDurationMs:d.converterDurationMs,scipCompanion:"current",...d.fallbackReason?{fallbackReason:d.fallbackReason}:{}}}),Dt(h(e.paths.outputDb),d.mode==="incremental"&&d.scipCompanion==="deferred"?[o.nextFragmentGeneration]:[]),Jn(e.paths.outputDb,g,e.onStatus),m}function Oa(e,t,n,r,i,a){let s=Xe(e.paths.metaPath),o=null;try{fe(e.paths.outputDb,e.tempPaths.tempOutputDb)}catch(u){o=en("reused","oracle-error",`Could not snapshot the prior database: ${u instanceof Error?u.message:String(u)}`)}ee(Z(),{projectRoot:e.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),o??=ke({projectRoot:e.projectRoot,previousDbPath:e.tempPaths.tempOutputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.paths.outputDb,candidateIndexPath:e.paths.outputScip,previousSnapshot:s,currentSnapshot:e.fingerprint,refreshResult:"reused"});let l=ye({trigger:e.opts.trigger,result:"reused",start:e.start,languages:t.map(u=>u.language),skipped:[...n]}),{metadata:c,pruneProjects:d}=Wn({run:e,indexedOutputs:t,skippedLanguages:n,reusedLanguages:r,languageFingerprints:i,typescriptProjectShardContext:a,lastRefresh:l});return Hn(e.paths.outputDb,d),Ve(e.paths.metaPath,c),kt(e.paths.outputDb,e.paths.metaPath),Jn(e.paths.outputDb,o,e.onStatus),l}function Xe(e){return yt(H(e)?.fingerprint)}function Jn(e,t,n){try{tn(e,t),t.status==="evaluated"?n(`Affected-set shadow: ${(t.evaluation.recall*100).toFixed(1)}% recall; ${t.plan.affectedFiles.length} predicted, ${t.comparison.changedFiles.length} changed.`):n(`Affected-set shadow unavailable: ${t.reason}.`)}catch(r){n(`Affected-set shadow telemetry unavailable: ${r instanceof Error?r.message:String(r)}`)}}function Wn(e){let t=Ma({mode:e.run.opts.typescriptProjectMode,skippedLanguages:e.skippedLanguages,reusedLanguages:e.reusedLanguages,context:e.typescriptProjectShardContext,metaPath:e.run.paths.metaPath});return{metadata:{version:3,status:e.skippedLanguages.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.run.fingerprint,languageFingerprints:e.languageFingerprints,typescriptProjectShards:t.field,requestedLanguages:e.run.languages,indexedLanguages:e.indexedOutputs.map(n=>n.language),skipped:[...e.skippedLanguages],lastRefresh:e.lastRefresh},pruneProjects:t.pruneProjects}}function Ma(e){if(e.mode!=="workspace")return{field:void 0,pruneProjects:null};if(e.skippedLanguages.some(t=>t.language==="typescript"))return{field:void 0,pruneProjects:null};if(e.reusedLanguages.includes("typescript")){let t=H(e.metaPath)?.typescriptProjectShards;return{field:t,pruneProjects:t?Object.keys(t):[]}}return e.context?{field:e.context.fingerprints,pruneProjects:e.context.projects}:{field:void 0,pruneProjects:[]}}function Hn(e,t){let n=Vn(e);if(t===null){D(n,{recursive:!0,force:!0});return}let r;try{r=pa(n)}catch{return}for(let i of Na(r,t))D(R(n,i),{force:!0})}function Na(e,t){let n=new Set(t.map(r=>`${Ae(r)}.scip`));return e.filter(r=>!n.has(r))}function Cn(e,t){for(let n of t){let r=Qe(e,n.language);ge(h(r),{recursive:!0}),n.scipPath!==r&&fe(n.scipPath,r)}}async function Ca(e,t){if(!Se()){if(e)throw new Error(`The scip CLI is required but not found on PATH.
|
|
250
|
+
Install from: https://github.com/sourcegraph/scip/releases`);if(ha()==="win32")throw new Error("The scip CLI was not found. On Windows it ships via the npm sidecar package scip-query-scip-windows (installed automatically with scip-query). Reinstall with optional dependencies enabled, run 'npm install -g scip-query-scip-windows', or set SCIP_QUERY_SCIP_BIN to a local scip.exe path.");if(t("scip CLI not found on PATH. Attempting auto-install..."),!tt(t))throw new Error(`The scip CLI is required but could not be installed.
|
|
251
|
+
Install manually from: https://github.com/sourcegraph/scip/releases`)}}function La(e){let t=[],n=[],r=e.languages.map((a,s)=>({language:a,scipPath:e.languages.length>1?W(e.tempOutputScip,a,s):e.tempOutputScip})),i=Object.fromEntries(r.map(({language:a,scipPath:s})=>[a,s]));for(let{language:a,scipPath:s}of r){let o=Aa({...e,language:a,scipPath:s});for(let l of o)"skipped"in l?qn(n,l.skipped):t.push(l.prepared)}return{preparedRuns:t,skippedLanguages:n,languageOutputScipPaths:i}}function Aa(e){if(e.language!=="typescript"||e.typescriptProjectMode!=="workspace")return[qe({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})];let t=e.preDiscoveredTypeScriptProjects??G(e.projectRoot,e.typescriptProjects);return t.length===0?[qe({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})]:(e.onStatus(`Indexing TypeScript workspace as ${t.length} project shard(s).`),t.map((n,r)=>qe({...e,id:`typescript:${n}`,label:`typescript (${n})`,scipPath:W(e.tempOutputScip,"typescript-project",r),outputScipPath:e.scipPath,pnpmWorkspaces:!1,projectPath:n})))}function qe(e){let t=ve(e.language),n=_e(t),r=Jt(t,e.projectRoot);if(!r&&!Gt(t)){if(e.skipAutoInstall){let o=`${n} not found on PATH (auto-install disabled). ${t.installUrl??""}`.trim();return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}if(e.onStatus(`${n} not found. Attempting auto-install...`),!Ht(t,e.onStatus)){let o=`${n} could not be auto-installed. ${t.installUrl?`Install manually from ${t.installUrl}`:`Install ${n} and put it on PATH.`}`;return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}}let i=r??ae(t);if(!i){let o=`${n} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}let{binary:a,args:s}=t.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:i,projectPath:e.projectPath,configPath:e.language==="clojure"?e.clojureConfigPath:void 0});return{prepared:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,config:t,resolvedBinary:i,binary:a,args:s,env:Wt(t,e.env,i)}}}function $a(e,t){let n=new Map;for(let i of e)if(i.skipped)qn(t,i.skipped);else{let a=`${i.language}\0${i.outputScipPath}`,s=n.get(a)??{language:i.language,outputScipPath:i.outputScipPath,scipPaths:[]};s.scipPaths.push(i.scipPath),n.set(a,s)}let r=[];for(let i of n.values())if(i.scipPaths.length>1)xt(i.scipPaths,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath});else{let a=i.scipPaths[0];a!==i.outputScipPath&&Gn(a,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath})}return{indexedOutputs:r}}function qn(e,t){let n=e.find(r=>r.language===t.language);if(!n){e.push(t);return}n.reason.includes(t.reason)||(n.reason=`${n.reason}; ${t.reason}`)}function Ba(e,t,n,r,i){if(e.length===0){let a=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
|
|
252
252
|
`);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
|
|
253
253
|
`+a)}if(t.length!==0&&(i(`Indexed ${e.length} language output(s); skipped or incomplete: ${t.map(a=>a.language).join(", ")}.`),!r))throw new Error(`Failed to index all required languages; preserving the previous index. Pass --allow-partial to intentionally write an incomplete index.
|
|
254
254
|
`+t.map(a=>` - ${a.language}: ${a.reason}`).join(`
|
|
255
|
-
`))}function
|
|
256
|
-
`),()=>{try{
|
|
257
|
-
`)}).then(()=>{process.exit(0)}).catch(e=>{console.error(`reindex-worker error: ${e}`),process.exit(1)});function
|
|
255
|
+
`))}function Ln(e,t,n){if(e.length>1){n(`Merging ${e.length} language indexes...`);let r=performance.now(),i=Rt(e.map(a=>a.scipPath),t);return Xn(i,n),n(`Merged and sanitized SCIP indexes in ${(performance.now()-r).toFixed(0)}ms.`),!0}else e[0].scipPath!==t&&Gn(e[0].scipPath,t);return!1}function Ga(e){let t;if(Ua(e)){let i=R(e.run.tempPaths.runDir,"typescript-affected.db");try{zn(e.incrementalTypeScript.affectedScipPath,e.run.onStatus),e.run.onStatus(`Converting ${e.incrementalTypeScript.affectedFiles.length} affected TypeScript document(s) to SQLite...`);let a=performance.now();An(e.incrementalTypeScript.affectedScipPath,i,e.env,e.run.onStatus),e.run.onStatus(`Converted affected SCIP documents in ${(performance.now()-a).toFixed(0)}ms.`);let s=cn({previousDbPath:e.run.paths.outputDb,miniDbPath:i,candidateDbPath:e.run.tempPaths.tempOutputDb,affectedFiles:e.incrementalTypeScript.affectedFiles});return e.run.onStatus(`Patched ${s.affectedDocumentCount} SQLite document(s) in ${(s.durationMs/1e3).toFixed(3)}s.`),{mode:"incremental",changedDocumentPaths:s.changedDocumentPaths,patchDurationMs:s.durationMs,converterDurationMs:performance.now()-a,scipCompanion:e.incrementalTypeScript.completeScipUpdated?"current":"deferred"}}catch(a){t=a instanceof Error?a.message:String(a),D(i,{force:!0}),D(e.run.tempPaths.tempOutputDb,{force:!0}),e.run.onStatus(`Incremental SQLite publication unavailable: ${t}. Falling back to complete conversion.`)}}let n=e.completeScipSanitized;e.completeScipAvailable||(n=e.materializeFullFallback());let r=performance.now();return An(e.run.tempPaths.tempOutputScip,e.run.tempPaths.tempOutputDb,e.env,e.run.onStatus,n),{mode:"full",converterDurationMs:performance.now()-r,...t?{fallbackReason:t}:{}}}function Ua(e){if(!e.incrementalTypeScript||e.skippedLanguages.length>0||!E(e.run.paths.outputDb)||!E(e.run.paths.outputScip))return!1;let t=new Set(e.reusedLanguages);return e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(n=>n==="typescript"||t.has(n))}function Ja(e,t){let n=Date.now(),r=[...t].sort(),i=new Set(r),a={addedFiles:[],modifiedFiles:r,deletedFiles:[],changedFiles:r,unchangedFiles:e.affectedFiles.filter(s=>!i.has(s)).sort()};return{version:1,status:"evaluated",refreshResult:"rebuilt",recordedAt:new Date().toISOString(),durationMs:Date.now()-n,manifest:e.manifest,plan:e.plan,comparison:a,evaluation:Te(e.plan,a,e.projectFileCount)}}function An(e,t,n,r,i=!1){if(r("Converting to SQLite..."),!E(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{i||zn(e,r);let a=Se();if(!a)throw new Error("scip CLI is not available");oa(a,["expt-convert","--output",t,e],{env:n,stdio:"pipe",maxBuffer:50*1024*1024})}catch(a){let s=a instanceof Error?a.message:String(a);throw new Error(`Failed to convert SCIP index to SQLite: ${s}`,{cause:a})}}function zn(e,t){let n=Pt(e);Xn(n,t)}function Xn(e,t){e.removedDefinitionOccurrences!==0&&t(`Sanitized ${e.removedDefinitionOccurrences} invalid definition occurrences across ${e.touchedDocuments} documents before SQLite conversion.`)}function W(e,t,n){let r=ma(e)||".scip",i=pe(e,r);return R(h(e),`${i}.${n+1}.${t}${r}`)}async function Wa(e,t){for(let n=0;n<2;n++){let r=Ha(e,t);if(r)return r;let i=qa(e);if(i&&za(t.trigger,i)){if(t.onStatus(`Manual reindex preempting watcher refresh started at ${i.startedAt}.`),!await Qa(i.pid))throw new Error(`Could not confirm the watcher's in-progress reindex (pid ${i.pid}) terminated for ${h(e)}; refusing to steal an active lock.`);D(e,{force:!0});continue}if(i&&!k(i.pid)){D(e,{force:!0});continue}throw new Error(`Another scip-query reindex is already running for ${h(e)}.`)}throw new Error(`Could not acquire scip-query reindex lock for ${h(e)}.`)}function Ha(e,t){let n;try{n=ua(e,"wx")}catch(i){if((typeof i=="object"&&i&&"code"in i?i.code:void 0)==="EEXIST")return null;throw i}let r={version:1,pid:process.pid,projectRoot:t.projectRoot,startedAt:new Date().toISOString(),trigger:t.trigger};return fa(n,JSON.stringify(r)+`
|
|
256
|
+
`),()=>{try{la(n)}finally{D(e,{force:!0})}}}function qa(e){try{let t=JSON.parse(me(e,"utf-8"));return typeof t.pid!="number"||!Number.isInteger(t.pid)||t.pid<=0?null:{version:1,pid:t.pid,projectRoot:typeof t.projectRoot=="string"?t.projectRoot:h(e),startedAt:typeof t.startedAt=="string"?t.startedAt:"unknown",trigger:t.trigger}}catch{return null}}function za(e,t){return e?.kind==="manual-cli"&&Xa(t?.trigger)}function Xa(e){return e?.kind==="watch-source"||e?.kind==="watch-git-head"||e?.kind==="watch-git-index"||e?.kind==="watch-git-state"}async function Qa(e){return $n(e,"SIGTERM"),await Bn(e,2e3)?!0:($n(e,"SIGKILL"),Bn(e,1e3))}function $n(e,t){try{process.kill(-e,t)}catch{try{process.kill(e,t)}catch{}}}async function Bn(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!k(e))return!0;await Va(50)}return!k(e)}function Va(e){return new Promise(t=>setTimeout(t,e))}function Ya(e,t,n){return gt(e,t,n)}function Qn(e,t,n){return Object.fromEntries(t.map(r=>{let i=ve(r).markerFiles,a=r==="typescript"?{typescriptProjectMode:n.typescriptProjectMode??"single",typescriptProjects:ut(n.typescriptProjects)}:{typescriptProjectMode:"single",typescriptProjects:[]},s=r==="clojure"?Ka(n.clojureConfigPath):void 0;return[r,{version:2,languages:[r],pnpmWorkspaces:r==="typescript"&&Za(n),...a,clojureConfigPath:s,files:pt(e,{language:r,markerFiles:i})}]}))}function Ka(e){return e?.trim()||void 0}function Za(e){return e.typescriptProjectMode!=="workspace"&&e.pnpmWorkspaces===!0}function Qe(e,t){return R(h(e),"language-indexes",`${t}.scip`)}function Vn(e){return R(h(e),"language-indexes","typescript-projects")}function he(e,t){return R(Vn(e),`${Ae(t)}.scip`)}function H(e){try{return JSON.parse(me(e,"utf-8"))}catch{return null}}function Yn(e,t){try{let n=JSON.parse(me(e,"utf-8"));return(n.version===2||n.version===3)&&n.status==="complete"&&w(n.fingerprint)===w(t)&&w([...n.indexedLanguages??[]].sort())===w(t.languages)}catch{return!1}}function Ve(e,t){O(e,t,{spacing:2,trailingNewline:!0})}function Kn(e,t){try{let n=JSON.parse(me(e,"utf-8"));if(n.version!==2&&n.version!==3)return;Ve(e,{...n,lastRefresh:t})}catch{}}function ye(e){return{trigger:e.trigger??{kind:"unknown"},result:e.result,startedAt:new Date(e.start).toISOString(),completedAt:new Date().toISOString(),durationMs:Date.now()-e.start,indexedLanguages:e.languages?[...e.languages]:void 0,skipped:e.skipped?[...e.skipped]:void 0,error:e.error}}function w(e){return JSON.stringify(e)}var nr=process.env.SCIP_REINDEX_PROJECT_ROOT,rr=process.env.SCIP_REINDEX_OUTPUT_SCIP,ir=process.env.SCIP_REINDEX_OUTPUT_DB,Zn=process.env.SCIP_REINDEX_LANGUAGES,es=dt(process.env.SCIP_REINDEX_INDEXER_CONCURRENCY),ts=process.env.SCIP_REINDEX_PNPM_WORKSPACES==="1",er=ss(process.env.SCIP_REINDEX_TYPESCRIPT_CONFIG),ns=process.env.SCIP_REINDEX_CLOJURE_CONFIG_PATH||void 0,rs=as(process.env.SCIP_REINDEX_TRIGGER_KIND),is=process.env.SCIP_REINDEX_TRIGGER_DETAIL;(!nr||!rr||!ir)&&(console.error("reindex-worker: missing required env vars"),process.exit(1));var tr=Zn?Zn.split(",").filter(Boolean):void 0;Un({projectRoot:nr,outputScip:rr,outputDb:ir,languages:tr?.length?tr:void 0,pnpmWorkspaces:ts,typescriptProjectMode:er.projectMode,typescriptProjects:er.projects,clojureConfigPath:ns,indexerConcurrency:es,trigger:{kind:rs,detail:is||void 0},onStatus:e=>process.stderr.write(`[reindex] ${e}
|
|
257
|
+
`)}).then(()=>{process.exit(0)}).catch(e=>{console.error(`reindex-worker error: ${e}`),process.exit(1)});function as(e){switch(e){case"manual-cli":case"setup":case"watch-source":case"watch-git-head":case"watch-git-index":case"watch-git-state":return e;default:return"unknown"}}function ss(e){if(!e)return{};try{let t=JSON.parse(e);if(!t||typeof t!="object"||Array.isArray(t))return{};let n=t,r=n.projectMode==="single"||n.projectMode==="workspace"?n.projectMode:void 0,i=Array.isArray(n.projects)?n.projects.filter(a=>typeof a=="string"&&a.trim()!==""):void 0;return{projectMode:r,projects:i&&i.length>0?i:void 0}}catch{return{}}}
|
|
258
258
|
//# sourceMappingURL=reindex-worker.js.map
|