@zipbul/gildash 0.33.0 → 0.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.js +9 -9
- package/dist/src/common/hasher.d.ts +0 -1
- package/dist/src/common/path-utils.d.ts +28 -2
- package/dist/src/extractor/types.d.ts +7 -3
- package/dist/src/gildash/context.d.ts +12 -9
- package/dist/src/gildash/guard.d.ts +23 -0
- package/dist/src/gildash/index.d.ts +16 -0
- package/dist/src/gildash/lifecycle.d.ts +3 -2
- package/dist/src/gildash/semantic-api.d.ts +4 -0
- package/dist/src/indexer/annotation-indexer.d.ts +2 -1
- package/dist/src/indexer/relation-indexer.d.ts +2 -1
- package/dist/src/indexer/symbol-indexer.d.ts +2 -2
- package/dist/src/parser/ast-utils.d.ts +2 -5
- package/dist/src/parser/index.d.ts +1 -1
- package/dist/src/search/annotation-search.d.ts +3 -3
- package/dist/src/search/dependency-graph.d.ts +13 -11
- package/dist/src/search/index.d.ts +4 -4
- package/dist/src/search/relation-search.d.ts +8 -5
- package/dist/src/search/symbol-search.d.ts +6 -4
- package/dist/src/semantic/index.d.ts +3 -0
- package/dist/src/semantic/tsc-program.d.ts +0 -1
- package/dist/src/semantic/type-collector.d.ts +13 -0
- package/dist/src/store/index.d.ts +1 -1
- package/dist/src/store/repositories/annotation.repository.d.ts +3 -2
- package/dist/src/store/repositories/file.repository.d.ts +3 -2
- package/dist/src/store/repositories/relation.repository.d.ts +14 -10
- package/dist/src/store/repositories/symbol.repository.d.ts +10 -12
- package/dist/src/store/schema.d.ts +6 -6
- package/package.json +1 -1
- package/dist/src/extractor/index.d.ts +0 -8
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var o$=Object.defineProperty;var t$=(_)=>_;function e$(_,$){this[_]=t$.bind(null,$)}var _J=(_,$)=>{for(var J in $)o$(_,J,{get:$[J],enumerable:!0,configurable:!0,set:e$.bind($,J)})};var s0=import.meta.require;import{isErr as a_}from"@zipbul/result";import P_ from"path";import{existsSync as hQ}from"fs";import{err as r0,isErr as YJ}from"@zipbul/result";import{Database as ZJ}from"bun:sqlite";import{mkdirSync as XJ,unlinkSync as o0,existsSync as t0}from"fs";import{dirname as UJ,join as e0}from"path";import{drizzle as VJ}from"drizzle-orm/bun-sqlite";import{migrate as OJ}from"drizzle-orm/bun-sqlite/migrator";class V extends Error{type;constructor(_,$,J){super($,J);this.type=_;this.name="GildashError"}}var A_=".gildash",s_="gildash.db";var L0={};_J(L0,{watcherOwner:()=>WJ,symbols:()=>y,symbolChangelog:()=>$_,relations:()=>u,files:()=>o,annotations:()=>Z_});import{sql as $J}from"drizzle-orm";import{sqliteTable as j_,text as f,integer as r,real as JJ,index as Q_,primaryKey as QJ,foreignKey as M0,check as zJ}from"drizzle-orm/sqlite-core";var o=j_("files",{project:f("project").notNull(),filePath:f("file_path").notNull(),mtimeMs:JJ("mtime_ms").notNull(),size:r("size").notNull(),contentHash:f("content_hash").notNull(),updatedAt:f("updated_at").notNull(),lineCount:r("line_count")},(_)=>[QJ({columns:[_.project,_.filePath]})]),y=j_("symbols",{id:r("id").primaryKey({autoIncrement:!0}),project:f("project").notNull(),filePath:f("file_path").notNull(),kind:f("kind").notNull(),name:f("name").notNull(),startLine:r("start_line").notNull(),startColumn:r("start_column").notNull(),endLine:r("end_line").notNull(),endColumn:r("end_column").notNull(),isExported:r("is_exported").notNull().default(0),signature:f("signature"),fingerprint:f("fingerprint"),detailJson:f("detail_json"),contentHash:f("content_hash").notNull(),indexedAt:f("indexed_at").notNull(),resolvedType:f("resolved_type"),structuralFingerprint:f("structural_fingerprint")},(_)=>[Q_("idx_symbols_project_file").on(_.project,_.filePath),Q_("idx_symbols_project_kind").on(_.project,_.kind),Q_("idx_symbols_project_name").on(_.project,_.name),Q_("idx_symbols_fingerprint").on(_.project,_.fingerprint),M0({columns:[_.project,_.filePath],foreignColumns:[o.project,o.filePath]}).onDelete("cascade")]),u=j_("relations",{id:r("id").primaryKey({autoIncrement:!0}),project:f("project").notNull(),type:f("type").notNull(),srcFilePath:f("src_file_path").notNull(),srcSymbolName:f("src_symbol_name"),dstProject:f("dst_project"),dstFilePath:f("dst_file_path"),dstSymbolName:f("dst_symbol_name"),metaJson:f("meta_json"),specifier:f("specifier"),isExternal:r("is_external").notNull().default(0)},(_)=>[Q_("idx_relations_src").on(_.project,_.srcFilePath),Q_("idx_relations_dst").on(_.dstProject,_.dstFilePath),Q_("idx_relations_type").on(_.project,_.type),Q_("idx_relations_project_type_src").on(_.project,_.type,_.srcFilePath),Q_("idx_relations_specifier").on(_.project,_.specifier),M0({columns:[_.project,_.srcFilePath],foreignColumns:[o.project,o.filePath]}).onDelete("cascade")]),Z_=j_("annotations",{id:r("id").primaryKey({autoIncrement:!0}),project:f("project").notNull(),filePath:f("file_path").notNull(),tag:f("tag").notNull(),value:f("value").notNull().default(""),source:f("source").notNull(),symbolName:f("symbol_name"),startLine:r("start_line").notNull(),startColumn:r("start_column").notNull(),endLine:r("end_line").notNull(),endColumn:r("end_column").notNull(),indexedAt:f("indexed_at").notNull()},(_)=>[Q_("idx_annotations_project_file").on(_.project,_.filePath),Q_("idx_annotations_project_tag").on(_.project,_.tag),Q_("idx_annotations_project_symbol").on(_.project,_.symbolName),M0({columns:[_.project,_.filePath],foreignColumns:[o.project,o.filePath]}).onDelete("cascade")]),$_=j_("symbol_changelog",{id:r("id").primaryKey({autoIncrement:!0}),project:f("project").notNull(),changeType:f("change_type").notNull(),symbolName:f("symbol_name").notNull(),symbolKind:f("symbol_kind").notNull(),filePath:f("file_path").notNull(),oldName:f("old_name"),oldFilePath:f("old_file_path"),fingerprint:f("fingerprint"),changedAt:f("changed_at").notNull(),isFullIndex:r("is_full_index").notNull().default(0),indexRunId:f("index_run_id").notNull()},(_)=>[Q_("idx_changelog_project_changed_at").on(_.project,_.changedAt),Q_("idx_changelog_project_name").on(_.project,_.symbolName),Q_("idx_changelog_project_run").on(_.project,_.indexRunId)]),WJ=j_("watcher_owner",{id:r("id").primaryKey(),pid:r("pid").notNull(),startedAt:f("started_at").notNull(),heartbeatAt:f("heartbeat_at").notNull(),instanceId:f("instance_id")},(_)=>[zJ("watcher_owner_singleton",$J`${_.id} = 1`)]);class B0{client=null;drizzle=null;dbPath;txDepth=0;constructor(_){this.dbPath=e0(_.projectRoot,A_,s_)}get drizzleDb(){if(!this.drizzle)throw Error("Database is not open. Call open() first.");return this.drizzle}open(){try{XJ(UJ(this.dbPath),{recursive:!0}),this.client=new ZJ(this.dbPath),this.client.run("PRAGMA journal_mode = WAL"),this.client.run("PRAGMA foreign_keys = OFF"),this.client.run("PRAGMA busy_timeout = 5000"),this.drizzle=VJ(this.client,{schema:L0}),OJ(this.drizzle,{migrationsFolder:e0(import.meta.dirname,"migrations")});let _=this.client.prepare("PRAGMA foreign_key_check").all();if(_.length>0)throw Error(`FK integrity violation after migration: ${JSON.stringify(_.slice(0,5))}`);this.client.run("PRAGMA foreign_keys = ON"),this.registerRegexpUdf(this.client)}catch(_){if(this.isCorruptionError(_)&&t0(this.dbPath)){this.closeClient(),o0(this.dbPath);for(let J of["-wal","-shm"]){let Q=this.dbPath+J;if(t0(Q))o0(Q)}let $=this.open();if(YJ($))return r0(new V("store",`Failed to recover database at ${this.dbPath}`,{cause:$.data}));return $}return r0(new V("store",`Failed to open database at ${this.dbPath}`,{cause:_}))}}close(){this.closeClient(),this.drizzle=null}transaction(_){let $=this.requireClient();if(this.txDepth===0){this.txDepth++;try{return $.transaction(()=>_(this))()}finally{this.txDepth--}}let J=`sp_${this.txDepth++}`;$.run(`SAVEPOINT "${J}"`);try{let Q=_(this);return $.run(`RELEASE SAVEPOINT "${J}"`),Q}catch(Q){throw $.run(`ROLLBACK TO SAVEPOINT "${J}"`),$.run(`RELEASE SAVEPOINT "${J}"`),Q}finally{this.txDepth--}}immediateTransaction(_){let $=this.requireClient();this.txDepth++,$.run("BEGIN IMMEDIATE");try{let J=_();return $.run("COMMIT"),J}catch(J){throw $.run("ROLLBACK"),J}finally{this.txDepth--}}getTableNames(){return this.requireClient().query("SELECT name FROM sqlite_master WHERE type = 'table'").all().map(($)=>$.name)}selectOwner(){return this.requireClient().prepare("SELECT pid, heartbeat_at, instance_id FROM watcher_owner WHERE id = 1").get()??void 0}insertOwner(_,$){let J=new Date().toISOString();this.requireClient().prepare("INSERT INTO watcher_owner (id, pid, started_at, heartbeat_at, instance_id) VALUES (1, ?, ?, ?, ?)").run(_,J,J,$??null)}replaceOwner(_,$){let J=new Date().toISOString();this.requireClient().prepare("INSERT OR REPLACE INTO watcher_owner (id, pid, started_at, heartbeat_at, instance_id) VALUES (1, ?, ?, ?, ?)").run(_,J,J,$??null)}touchOwner(_){let $=new Date().toISOString();this.requireClient().prepare("UPDATE watcher_owner SET heartbeat_at = ? WHERE id = 1 AND pid = ?").run($,_)}deleteOwner(_){this.requireClient().prepare("DELETE FROM watcher_owner WHERE id = 1 AND pid = ?").run(_)}registerRegexpUdf(_){let $=_;if(typeof $.function!=="function")return;$.function.call(_,"regexp",(J,Q)=>{try{return new RegExp(J).test(Q)?1:0}catch{return 0}})}requireClient(){if(!this.client)throw Error("Database is not open. Call open() first.");return this.client}closeClient(){if(this.client)this.client.close(),this.client=null}isCorruptionError(_){if(!(_ instanceof Error))return!1;let $=_.message.toLowerCase();return $.includes("malformed")||$.includes("corrupt")||$.includes("not a database")||$.includes("disk i/o error")||$.includes("sqlite_corrupt")}}import{eq as y_,and as _1}from"drizzle-orm";class w0{db;constructor(_){this.db=_}getFile(_,$){return this.db.drizzleDb.select().from(o).where(_1(y_(o.project,_),y_(o.filePath,$))).get()??null}upsertFile(_){this.db.drizzleDb.insert(o).values({project:_.project,filePath:_.filePath,mtimeMs:_.mtimeMs,size:_.size,contentHash:_.contentHash,updatedAt:_.updatedAt,lineCount:_.lineCount??null}).onConflictDoUpdate({target:[o.project,o.filePath],set:{mtimeMs:_.mtimeMs,size:_.size,contentHash:_.contentHash,updatedAt:_.updatedAt,lineCount:_.lineCount??null}}).run()}getAllFiles(_){return this.db.drizzleDb.select().from(o).where(y_(o.project,_)).all()}getFilesMap(_){let $=this.getAllFiles(_),J=new Map;for(let Q of $)J.set(Q.filePath,Q);return J}deleteFile(_,$){this.db.drizzleDb.delete(o).where(_1(y_(o.project,_),y_(o.filePath,$))).run()}}import{eq as t,and as N_,sql as r_,count as HJ}from"drizzle-orm";function k_(_){return _.replaceAll("\x00","").trim().split(/\s+/).map(($)=>$.trim()).filter(($)=>$.length>0).map(($)=>`"${$.replaceAll('"','""')}"*`).join(" ")}var $1=50;class I0{db;constructor(_){this.db=_}replaceFileSymbols(_,$,J,Q){if(this.db.drizzleDb.delete(y).where(N_(t(y.project,_),t(y.filePath,$))).run(),!Q.length)return;let z=new Date().toISOString(),W=Q.map((Z)=>({project:_,filePath:$,kind:Z.kind??"unknown",name:Z.name??"",startLine:Z.startLine??0,startColumn:Z.startColumn??0,endLine:Z.endLine??0,endColumn:Z.endColumn??0,isExported:Z.isExported??0,signature:Z.signature??null,fingerprint:Z.fingerprint??null,detailJson:Z.detailJson??null,contentHash:J,indexedAt:Z.indexedAt??z,resolvedType:Z.resolvedType??null,structuralFingerprint:Z.structuralFingerprint??null}));for(let Z=0;Z<W.length;Z+=$1)this.db.drizzleDb.insert(y).values(W.slice(Z,Z+$1)).run()}getFileSymbols(_,$){return this.db.drizzleDb.select().from(y).where(N_(t(y.project,_),t(y.filePath,$))).all()}searchByName(_,$,J={}){let Q=J.limit??50,z=k_($);if(!z)return[];return this.db.drizzleDb.select().from(y).where(N_(r_`${y.id} IN (SELECT rowid FROM symbols_fts WHERE symbols_fts MATCH ${z})`,t(y.project,_),J.kind?t(y.kind,J.kind):void 0)).orderBy(y.name).limit(Q).all()}searchByKind(_,$){return this.db.drizzleDb.select().from(y).where(N_(t(y.project,_),t(y.kind,$))).orderBy(y.name).all()}getStats(_){let $=this.db.drizzleDb.select({symbolCount:HJ(),fileCount:r_`COUNT(DISTINCT ${y.filePath})`}).from(y).where(t(y.project,_)).get();return{symbolCount:$?.symbolCount??0,fileCount:$?.fileCount??0}}getByFingerprint(_,$){return this.db.drizzleDb.select().from(y).where(N_(t(y.project,_),t(y.fingerprint,$))).all()}deleteFileSymbols(_,$){this.db.drizzleDb.delete(y).where(N_(t(y.project,_),t(y.filePath,$))).run()}searchByQuery(_){let $=this.db.drizzleDb.select().from(y).where(N_(_.ftsQuery?r_`${y.id} IN (SELECT rowid FROM symbols_fts WHERE symbols_fts MATCH ${_.ftsQuery})`:void 0,_.exactName?t(y.name,_.exactName):void 0,_.project!==void 0?t(y.project,_.project):void 0,_.kind?t(y.kind,_.kind):void 0,_.filePath!==void 0?t(y.filePath,_.filePath):void 0,_.isExported!==void 0?t(y.isExported,_.isExported?1:0):void 0,_.decorator?r_`${y.id} IN (SELECT s.id FROM symbols s, json_each(s.detail_json, '$.decorators') je WHERE json_extract(je.value, '$.name') = ${_.decorator})`:void 0,_.resolvedType!==void 0?t(y.resolvedType,_.resolvedType):void 0)).orderBy(y.name);if(!_.regex)return(_.limit!==void 0?$.limit(_.limit):$).all();let J;try{J=new RegExp(_.regex)}catch{throw new V("validation",`Invalid regex pattern: ${_.regex}`)}if(_.limit===void 0)return $.all().filter((W)=>J.test(W.name));let Q=[];for(let z of[5,20,100]){let W=_.limit*z,Z=$.limit(W).all();if(Q=Z.filter((Y)=>J.test(Y.name)),Q.length>=_.limit||Z.length<W)return Q.slice(0,_.limit)}return Q.slice(0,_.limit)}}import{eq as n,and as L_,isNull as J1,or as KJ}from"drizzle-orm";var x_={project:u.project,type:u.type,srcFilePath:u.srcFilePath,srcSymbolName:u.srcSymbolName,dstProject:u.dstProject,dstFilePath:u.dstFilePath,dstSymbolName:u.dstSymbolName,metaJson:u.metaJson,specifier:u.specifier,isExternal:u.isExternal};class D0{db;constructor(_){this.db=_}replaceFileRelations(_,$,J){this.db.transaction((Q)=>{if(Q.drizzleDb.delete(u).where(L_(n(u.project,_),n(u.srcFilePath,$))).run(),!J.length)return;for(let z of J)Q.drizzleDb.insert(u).values({project:_,type:z.type??"unknown",srcFilePath:z.srcFilePath??$,srcSymbolName:z.srcSymbolName??null,dstProject:z.dstProject??(z.dstFilePath!=null?_:null),dstFilePath:z.dstFilePath??null,dstSymbolName:z.dstSymbolName??null,metaJson:z.metaJson??null,specifier:z.specifier??null,isExternal:z.isExternal??0}).run()})}getOutgoing(_,$,J){if(J!==void 0)return this.db.drizzleDb.select(x_).from(u).where(L_(n(u.project,_),n(u.srcFilePath,$),KJ(n(u.srcSymbolName,J),J1(u.srcSymbolName)))).all();return this.db.drizzleDb.select(x_).from(u).where(L_(n(u.project,_),n(u.srcFilePath,$))).all()}getIncoming(_){let{dstProject:$,dstFilePath:J}=_;return this.db.drizzleDb.select(x_).from(u).where(L_(n(u.dstProject,$),n(u.dstFilePath,J))).all()}getByType(_,$){return this.db.drizzleDb.select(x_).from(u).where(L_(n(u.project,_),n(u.type,$))).all()}deleteFileRelations(_,$){this.db.drizzleDb.delete(u).where(L_(n(u.project,_),n(u.srcFilePath,$))).run()}deleteIncomingRelations(_,$){this.db.drizzleDb.delete(u).where(L_(n(u.dstProject,_),n(u.dstFilePath,$))).run()}searchRelations(_){let $=this.db.drizzleDb.select(x_).from(u).where(L_(_.project!==void 0?n(u.project,_.project):void 0,_.srcFilePath!==void 0?n(u.srcFilePath,_.srcFilePath):void 0,_.srcSymbolName!==void 0?n(u.srcSymbolName,_.srcSymbolName):void 0,_.dstProject!==void 0?n(u.dstProject,_.dstProject):void 0,_.dstFilePath!==void 0?n(u.dstFilePath,_.dstFilePath):void 0,_.dstSymbolName!==void 0?n(u.dstSymbolName,_.dstSymbolName):void 0,_.type!==void 0?n(u.type,_.type):void 0,_.specifier!==void 0?n(u.specifier,_.specifier):void 0,_.isExternal!==void 0?n(u.isExternal,_.isExternal?1:0):void 0));return(_.limit!==void 0?$.limit(_.limit):$).all()}retargetRelations(_){let{dstProject:$,oldFile:J,oldSymbol:Q,newFile:z,newSymbol:W,newDstProject:Z}=_,Y=Q===null?L_(n(u.dstProject,$),n(u.dstFilePath,J),J1(u.dstSymbolName)):L_(n(u.dstProject,$),n(u.dstFilePath,J),n(u.dstSymbolName,Q)),X={dstFilePath:z,dstSymbolName:W};if(Z!==void 0)X.dstProject=Z;this.db.drizzleDb.update(u).set(X).where(Y).run()}}import{err as z1}from"@zipbul/result";import{subscribe as MJ}from"@parcel/watcher";import C0 from"path";import Q1 from"path";function z_(_){return _.replaceAll("\\","/")}function m_(_,$){return z_(Q1.relative(_,$))}function g_(_,$){return z_(Q1.resolve(_,$))}var LJ=["**/.git/**",`**/${A_}/**`,"**/dist/**","**/node_modules/**"],BJ=new Set(["package.json","tsconfig.json"]);function wJ(_){if(_==="update")return"change";if(_==="create")return"create";return"delete"}class A0{#_;#$;#Q;#z;#W;#Y;constructor(_,$=MJ,J=console){this.#$=_.projectRoot,this.#Q=[...LJ,..._.ignorePatterns??[]],this.#z=new Set((_.extensions??[".ts",".mts",".cts"]).map((Q)=>Q.toLowerCase())),this.#W=$,this.#Y=J}async start(_){try{this.#_=await this.#W(this.#$,($,J)=>{if($){this.#Y.error(new V("watcher","Callback error",{cause:$}));return}try{for(let Q of J){let z=z_(C0.relative(this.#$,Q.path));if(z.startsWith(".."))continue;let W=C0.basename(z),Z=C0.extname(z).toLowerCase();if(!BJ.has(W)&&!this.#z.has(Z))continue;if(z.endsWith(".d.ts"))continue;_({eventType:wJ(Q.type),filePath:z})}}catch(Q){this.#Y.error(new V("watcher","Callback error",{cause:Q}))}},{ignore:this.#Q})}catch($){return z1(new V("watcher","Failed to subscribe watcher",{cause:$}))}}async close(){if(!this.#_)return;try{await this.#_.unsubscribe(),this.#_=void 0}catch(_){return z1(new V("watcher","Failed to close watcher",{cause:_}))}}}import q0 from"path";var IJ=["**/node_modules/**","**/.git/**",`**/${A_}/**`,"**/dist/**"],DJ=IJ.map((_)=>new Bun.Glob(_));function CJ(_){return new Bun.Glob("**/package.json").scan({cwd:_,followSymlinks:!1})}async function o_(_,$=CJ){let J=[];for await(let Q of $(_)){let z=z_(Q);if(DJ.some((M)=>M.match(z)))continue;let W=z_(q0.dirname(Q)),Z=q0.join(_,Q),Y=await Bun.file(Z).json(),X=typeof Y?.name==="string"&&Y.name.length>0?Y.name:q0.basename(W==="."?_:W);J.push({dir:W,project:X})}return J.sort((Q,z)=>z.dir.length-Q.dir.length),J}function a(_,$,J="default"){let Q=z_(_);for(let z of $){if(z.dir===".")return z.project;if(Q===z.dir||Q.startsWith(`${z.dir}/`))return z.project}return J}import h_ from"path";var q_=new Map;async function AJ(_){let $=Bun.file(_);if(!await $.exists())return null;try{let J=await $.text(),Q=Bun.JSONC.parse(J);return typeof Q==="object"&&Q!==null?Q:null}catch{return null}}function qJ(_,$){if($.startsWith(".")){let J=h_.resolve(_,$);return J.endsWith(".json")?J:J+".json"}return h_.resolve(_,"node_modules",$)}async function W1(_,$=5){if($<=0)return null;let J=await AJ(_);if(!J)return null;let Q=J.extends;if(typeof Q!=="string"||!Q)return J;let z=qJ(h_.dirname(_),Q),W=await W1(z,$-1);if(!W)return J;let Z=typeof W.compilerOptions==="object"&&W.compilerOptions!==null?W.compilerOptions:{},Y=typeof J.compilerOptions==="object"&&J.compilerOptions!==null?J.compilerOptions:{};return{...W,...J,compilerOptions:{...Z,...Y}}}async function n_(_){if(q_.has(_))return q_.get(_)??null;let $=h_.join(_,"tsconfig.json"),J=await W1($);if(!J)return q_.set(_,null),null;let Q=typeof J.compilerOptions==="object"&&J.compilerOptions!==null?J.compilerOptions:null;if(!Q)return q_.set(_,null),null;let z=typeof Q.baseUrl==="string"?Q.baseUrl:null,W=typeof Q.paths==="object"&&Q.paths!==null?Q.paths:null;if(!z&&!W)return q_.set(_,null),null;let Z=z?h_.resolve(_,z):_,Y=new Map;if(W)for(let[M,O]of Object.entries(W)){if(!Array.isArray(O))continue;let L=O.filter((C)=>typeof C==="string");Y.set(M,L)}let X={baseUrl:Z,paths:Y};return q_.set(_,X),X}function t_(_){if(_){q_.delete(_);return}q_.clear()}function K_(_){let $=Bun.hash.xxHash64(_);return BigInt.asUintN(64,BigInt($)).toString(16).padStart(16,"0")}import{isErr as B1}from"@zipbul/result";import{err as NJ}from"@zipbul/result";import{parseSync as RJ}from"oxc-parser";function v_(_,$,J,Q=RJ){try{let z={preserveParens:!1,...J},W=Q(_,$,z);return{filePath:_,program:W.program,errors:W.errors,comments:W.comments,sourceText:$,module:W.module}}catch(z){return NJ(new V("parse",`Failed to parse file: ${_}`,{cause:z}))}}import{join as TJ}from"path";function SJ(_,$){let J=$.length===1?`**/*${$[0]}`:`**/*{${$.join(",")}}`;return new Bun.Glob(J).scan({cwd:_,followSymlinks:!1})}async function Y1(_){let{projectRoot:$,extensions:J,ignorePatterns:Q,fileRepo:z,scanFilesFn:W=SJ}=_,Z=z.getFilesMap(),Y=new Set,X=[],M=[],O=Q.map((C)=>new Bun.Glob(C));for await(let C of W($,J)){let N=z_(C);if(!J.some((l)=>N.endsWith(l)))continue;if(N.startsWith("node_modules/")||N.includes("/node_modules/"))continue;if(O.some((l)=>l.match(N)))continue;Y.add(N);let w=TJ($,N),R=Bun.file(w),{size:F,lastModified:G}=R,E=Z.get(N);if(!E){let l=await R.text(),i=K_(l);X.push({filePath:N,contentHash:i,mtimeMs:G,size:F});continue}if(E.mtimeMs===G&&E.size===F){M.push({filePath:N,contentHash:E.contentHash,mtimeMs:G,size:F});continue}let b=await R.text(),m=K_(b);if(m===E.contentHash)M.push({filePath:N,contentHash:m,mtimeMs:G,size:F});else X.push({filePath:N,contentHash:m,mtimeMs:G,size:F})}let L=[];for(let C of Z.keys())if(!Y.has(C))L.push(C);return{changed:X,unchanged:M,deleted:L}}function p_(_){let $=[0];for(let J=0;J<_.length;J++)if(_[J]===`
|
|
3
|
-
`)$.push(J+1);return $}function O_(_,$){let J=0,Q=_.length-1;while(J<Q){let z=J+Q+1>>1;if(_[z]<=$)J=z;else Q=z-1}return{line:J+1,column:$-_[J]}}import{err as GJ}from"@zipbul/result";import{parse as FJ}from"comment-parser";function e_(_){try{let $=_.trim();if($.startsWith("/**"))$=$.slice(3);if($.endsWith("*/"))$=$.slice(0,-2);let Q=FJ(`/** ${$} */`)[0]??{description:"",tags:[]};return{description:(Q.description??"").trim(),tags:(Q.tags??[]).map((z)=>({tag:z.tag??"",name:z.name??"",type:z.type??"",description:z.description??"",optional:z.optional??!1,...z.default!==void 0?{default:z.default}:{}}))}}catch($){return GJ(new V("parse","Failed to parse JSDoc comment",{cause:$}))}}import{isErr as jJ}from"@zipbul/result";function kJ(_){if("name"in _&&typeof _.name==="string")return _.name;if("value"in _){let $=_.value;if(typeof $==="string")return $;if(typeof $==="number"||typeof $==="bigint"||typeof $==="boolean")return String($)}return"unknown"}function E_(_){if(_.type==="Identifier")return[{name:_.name,start:_.start,end:_.end}];if(_.type==="ObjectPattern"){let $=[];for(let J of _.properties)if(J.type==="RestElement")$.push(...E_(J.argument));else $.push(...E_(J.value));return $}if(_.type==="ArrayPattern"){let $=[];for(let J of _.elements){if(!J)continue;if(J.type==="RestElement")$.push(...E_(J.argument));else $.push(...E_(J))}return $}if(_.type==="AssignmentPattern")return E_(_.left);return[]}function gJ(_){let $=new Map;for(let J of _.module.staticImports){let Q=J.moduleRequest.value;for(let z of J.entries){let W=z.localName.value,Z=z.importName.kind==="Name"?z.importName.name:void 0,Y={specifier:Q};if(Z&&Z!==W)Y.originalName=Z;$.set(W,Y)}}return $}function R_(_){let{program:$,sourceText:J,comments:Q}=_,z=p_(J),W=gJ(_),Z=Q.filter((D)=>D.type==="Block"&&D.value.startsWith("*")).sort((D,q)=>D.end-q.end),Y=$.body.map((D)=>D.start).sort((D,q)=>D-q);function X(D,q){return G(D,q)}function M(D,q,U){if(D.type==="PrivateIdentifier")return{kind:"private"};if(!q&&D.type==="Identifier")return;return X(D,U)}function O(D,q){if(q)return J.slice(D.start,D.end);if(D.type==="PrivateIdentifier")return`#${D.name}`;return kJ(D)}function L(D,q,U){let H=D;if(!q&&H.type==="Identifier")return{kind:"string",value:H.name};return X(D,U)}function C(D,q){return{start:O_(z,D),end:O_(z,q)}}function N(D){let q=0,U=Z.length-1,H=-1;while(q<=U){let B=q+U>>>1;if(Z[B].end<=D)H=B,q=B+1;else U=B-1}if(H<0)return;let K=Z[H];q=0,U=Y.length-1;while(q<=U){let B=q+U>>>1,A=Y[B];if(A<=K.end)q=B+1;else if(A>=D)U=B-1;else return}return`/*${K.value}*/`}function w(D){if(!D)return;let q="typeAnnotation"in D&&D.typeAnnotation?D.typeAnnotation:D;return J.slice(q.start,q.end)}let R=8;function F(D){if(D.type==="Identifier")return W.get(D.name);if(D.type==="MemberExpression"){let q=D.object;if(q.type==="Identifier")return W.get(q.name)}return}function G(D,q=0){let U=D;if(q>=R)return{kind:"unresolvable",sourceText:J.slice(U.start,U.end)};let H=U.type;if(H==="Literal"){let K=U.value;if(typeof K==="bigint")return{kind:"bigint",value:typeof U.bigint==="string"?U.bigint:K.toString()};if(typeof U.regex==="object"&&U.regex!==null)return{kind:"regex",value:J.slice(U.start,U.end)};if(K===null)return{kind:"null",value:null};if(typeof K==="string")return{kind:"string",value:K};if(typeof K==="number")return{kind:"number",value:K};if(typeof K==="boolean")return{kind:"boolean",value:K};return{kind:"unresolvable",sourceText:J.slice(U.start,U.end)}}if(H==="Identifier"){let K=U.name;if(K==="undefined")return{kind:"undefined",value:null};let B=W.get(K),A={kind:"identifier",name:K};if(B){if(A.importSource=B.specifier,B.originalName)A.originalName=B.originalName}return A}if(H==="MemberExpression"){if(U.computed){let j=U.property;if(j.type==="Literal"&&typeof j.value==="string"){let g=U.object,P=J.slice(g.start,g.end),d=g.type==="Identifier"?g.name:void 0,J_=d?W.get(d):void 0,V_={kind:"member",object:P,property:j.value};if(J_)V_.importSource=J_.specifier;return V_}return{kind:"unresolvable",sourceText:J.slice(U.start,U.end)}}let K=U.object,B=J.slice(K.start,K.end),A=U.property.name??J.slice(U.property.start,U.property.end),I=K.type==="Identifier"?K.name:void 0,S=I?W.get(I):void 0,T={kind:"member",object:B,property:A};if(S)T.importSource=S.specifier;return T}if(H==="CallExpression"){let K=U.callee,B=J.slice(K.start,K.end),I=(U.arguments??[]).map((j)=>G(j,q+1)),S=F(K),T={kind:"call",callee:B,arguments:I};if(S)T.importSource=S.specifier;return T}if(H==="NewExpression"){let K=U.callee,B=J.slice(K.start,K.end),I=(U.arguments??[]).map((j)=>G(j,q+1)),S=F(K),T={kind:"new",callee:B,arguments:I};if(S)T.importSource=S.specifier;return T}if(H==="ObjectExpression"){let K=U.properties??[],B=[];for(let A of K){if(A.type==="SpreadElement"){let d=A.argument;B.push({kind:"spread",argument:G(d,q+1)});continue}let I=A.key,S=A.computed===!0,T=A.value,j=A.shorthand||void 0,P={kind:"property",key:L(I,S,q+1),value:G(T,q+1)};if(j)P.shorthand=!0;B.push(P)}return{kind:"object",properties:B}}if(H==="ArrayExpression")return{kind:"array",elements:(U.elements??[]).map((A)=>{if(!A)return{kind:"undefined",value:null};return G(A,q+1)})};if(H==="SpreadElement"){let K=U.argument;return{kind:"spread",argument:G(K,q+1)}}if(H==="ArrowFunctionExpression"||H==="FunctionExpression"){let B=U.params.map(b),A={kind:"function",sourceText:J.slice(U.start,U.end)};if(B.length>0)A.parameters=B;return A}if(H==="TemplateLiteral"||H==="TaggedTemplateExpression")return{kind:"template",sourceText:J.slice(U.start,U.end)};if(H==="UnaryExpression"){let{operator:K,argument:B}=U;if(K==="-"&&B.type==="Literal"&&typeof B.value==="number")return{kind:"number",value:-B.value};if(K==="void")return{kind:"undefined",value:null};return{kind:"unresolvable",sourceText:J.slice(U.start,U.end)}}if(H==="TSAsExpression"||H==="TSSatisfiesExpression"||H==="TSNonNullExpression"||H==="TSTypeAssertion"||H==="TSInstantiationExpression"||H==="ParenthesizedExpression"||H==="ChainExpression"){let K=U.expression;if(K)return G(K,q)}return{kind:"unresolvable",sourceText:J.slice(U.start,U.end)}}function E(D){if(!D||D.length===0)return[];return D.map((q)=>{let U=q.expression;if(U.type==="CallExpression"){let H=U,K=H.callee,B="name"in K&&typeof K.name==="string"?K.name:("property"in K)&&K.property&&typeof K.property.name==="string"?K.property.name:"unknown",A=H.arguments.map((I)=>G(I));return{name:B,arguments:A.length>0?A:void 0}}if(U.type==="Identifier")return{name:U.name??"unknown"};return{name:J.slice(U.start,U.end)}})}function b(D){if(D.type==="TSParameterProperty"){let U=D;return l(U.parameter,U.decorators)}if(D.type==="RestElement"){let U=D,H=U.argument,B=`...${"name"in H&&typeof H.name==="string"?H.name:"unknown"}`,A=U.typeAnnotation,I=A?w(A):void 0,S={name:B,isOptional:!1};if(I)S.type=I;return S}let q=D;return l(q,q.decorators)}function m(D){if(!D)return;let q="typeAnnotation"in D&&D.typeAnnotation?D.typeAnnotation:null;if(!q)return;let H=q.typeName?.name;if(!H)return;return W.get(H)?.specifier}function l(D,q){if(D.type==="AssignmentPattern"){let{left:T,right:j}=D,g="name"in T&&typeof T.name==="string"?T.name:"unknown",P="typeAnnotation"in T?T.typeAnnotation:null,d=P?w(P):void 0,J_=m(P),V_=J.slice(j.start,j.end),B_="decorators"in T&&Array.isArray(T.decorators)?T.decorators:[],K0=E(B_),C_={name:g,isOptional:!0,defaultValue:V_};if(d)C_.type=d;if(J_)C_.typeImportSource=J_;if(K0.length>0)C_.decorators=K0;return C_}let U="name"in D&&typeof D.name==="string"?D.name:("pattern"in D)&&D.pattern&&typeof D.pattern.name==="string"?D.pattern.name:"unknown",H=!!(("optional"in D)&&D.optional),K="typeAnnotation"in D?D.typeAnnotation:null,B=K?w(K):void 0,A=m(K),I=E(q??[]),S={name:U,isOptional:H};if(B)S.type=B;if(A)S.typeImportSource=A;if(I.length>0)S.decorators=I;return S}function i(D,q){let U=[];if(q?.async)U.push("async");if(D.static)U.push("static");if(D.abstract)U.push("abstract");if(D.readonly)U.push("readonly");if(D.override)U.push("override");if(D.declare)U.push("declare");if(D.const)U.push("const");let H=D.accessibility;if(H==="private")U.push("private");else if(H==="protected")U.push("protected");else if(H==="public")U.push("public");return U}function W_(D){if(!D)return;let q=D.params.flatMap((U)=>{let H=U.name.name;return H?[H]:[]});return q.length>0?q:void 0}function X_(D){let q=[];if(D.superClass){let H=J.slice(D.superClass.start,D.superClass.end);q.push({kind:"extends",name:H})}let U=D.implements??[];for(let H of U){let K=H.expression,B=J.slice(K.start,K.end);q.push({kind:"implements",name:B})}return q}function M_(D){let q=[],U=D.extends;for(let H of U){let K=H.expression,B=J.slice(K.start,K.end);q.push({kind:"extends",name:B})}return q}function U_(D){let q=[];for(let U of D)if(U.type==="MethodDefinition"||U.type==="TSAbstractMethodDefinition"){let H=U,K=O(H.key,H.computed),B=M(H.key,H.computed,0),A=H.value,I=H.kind,S=I==="constructor"?"constructor":I==="get"?"getter":I==="set"?"setter":"method",T=i(H,A);if(U.type==="TSAbstractMethodDefinition"&&!T.includes("abstract"))T.push("abstract");let j=A.params.map(b),g=w(A.returnType),P=E(H.decorators??[]),d={kind:"method",name:K,span:C(U.start,U.end),isExported:!1,methodKind:S,modifiers:T,parameters:j.length>0?j:void 0,returnType:g};if(B)d.key=B;if(P.length>0)d.decorators=P;q.push(d)}else if(U.type==="PropertyDefinition"||U.type==="TSAbstractPropertyDefinition"||U.type==="AccessorProperty"||U.type==="TSAbstractAccessorProperty"){let H=U,K=O(H.key,H.computed),B=M(H.key,H.computed,0),A=i(H);if(U.type==="TSAbstractPropertyDefinition"||U.type==="TSAbstractAccessorProperty"){if(!A.includes("abstract"))A.push("abstract")}if(U.type==="AccessorProperty"||U.type==="TSAbstractAccessorProperty")A.push("accessor");let I=w(H.typeAnnotation),S=H.value,T=S?G(S):void 0,j=E(H.decorators??[]),g={kind:"property",name:K,span:C(U.start,U.end),isExported:!1,modifiers:A,returnType:I,initializer:T};if(B)g.key=B;if(j.length>0)g.decorators=j;q.push(g)}return q}function Y_(D){let q=[];for(let U of D)if(U.type==="TSMethodSignature"){let H=U,K=O(H.key,H.computed),B=M(H.key,H.computed,0),A=H.params.map(b),I=w(H.returnType),S={kind:"method",name:K,span:C(U.start,U.end),isExported:!1,modifiers:[],methodKind:"method",parameters:A.length>0?A:void 0,returnType:I};if(B)S.key=B;q.push(S)}else if(U.type==="TSPropertySignature"){let H=U,K=O(H.key,H.computed),B=M(H.key,H.computed,0),A=w(H.typeAnnotation),I={kind:"property",name:K,span:C(U.start,U.end),isExported:!1,modifiers:H.readonly?["readonly"]:[],returnType:A};if(B)I.key=B;q.push(I)}return q}function c(D,q){let U=D.type;if(U==="FunctionDeclaration"||U==="FunctionExpression"||U==="TSDeclareFunction"||U==="TSEmptyBodyFunctionExpression"){let H=D,K=H.id?.name??"default",B=H.params.map(b),A=w(H.returnType),I=i(H,H),S=E(H.decorators??[]),T=W_(H.typeParameters),j={kind:"function",name:K,span:C(D.start,D.end),isExported:q,modifiers:I,parameters:B.length>0?B:void 0,returnType:A,decorators:S.length>0?S:void 0};if(T&&T.length>0)j.typeParameters=T;return j}if(U==="ClassDeclaration"||U==="ClassExpression"){let H=D,K=H.id?.name??"default",B=X_(H),A=U_(H.body.body),I=E(H.decorators),S=i(H),T=W_(H.typeParameters),j={kind:"class",name:K,span:C(D.start,D.end),isExported:q,modifiers:S,heritage:B.length>0?B:void 0,members:A.length>0?A:void 0,decorators:I.length>0?I:void 0};if(T&&T.length>0)j.typeParameters=T;return j}if(U==="VariableDeclaration"){let H=D,K=[];for(let B of H.declarations){let{id:A,init:I}=B;if(A.type==="ObjectPattern"||A.type==="ArrayPattern"){let V_=E_(A);for(let B_ of V_)K.push({kind:"variable",name:B_.name,span:C(B_.start,B_.end),isExported:q,modifiers:[]});continue}let S="name"in A&&typeof A.name==="string"?A.name:"unknown",T="variable",j,g,P;if(I)if(I.type==="FunctionExpression"||I.type==="ArrowFunctionExpression"){T="function";let V_=I;j=V_.params.map(b),g=w(V_.returnType)}else P=G(I);let d=[],J_={kind:T,name:S,span:C(B.start,B.end),isExported:q,modifiers:d,parameters:j,returnType:g};if(P)J_.initializer=P;K.push(J_)}if(K.length===0)return null;if(K.length===1)return K[0];return K}if(U==="TSTypeAliasDeclaration")return{kind:"type",name:D.id.name,span:C(D.start,D.end),isExported:q,modifiers:[]};if(U==="TSInterfaceDeclaration"){let H=D,K=H.id.name,B=M_(H),A=Y_(H.body.body),I=W_(H.typeParameters),S={kind:"interface",name:K,span:C(D.start,D.end),isExported:q,modifiers:[],heritage:B.length>0?B:void 0,members:A.length>0?A:void 0};if(I&&I.length>0)S.typeParameters=I;return S}if(U==="TSEnumDeclaration"){let H=D,K=H.id.name,B=i(H),I=H.body.members.map((S)=>{let T=S.id,j=T.type!=="Identifier",g="name"in T&&typeof T.name==="string"?T.name:("value"in T)&&typeof T.value==="string"?T.value:"unknown",P=S.initializer?G(S.initializer):void 0,d={kind:"property",name:g,span:C(S.start,S.end),isExported:!1,modifiers:[]};if(j)d.key=X(T,0);if(P)d.initializer=P;return d});return{kind:"enum",name:K,span:C(D.start,D.end),isExported:q,modifiers:B,members:I.length>0?I:void 0}}if(U==="TSModuleDeclaration"){let H=D,K=H.id.name??H.id.value??"unknown",B=i(H),A=[];if(H.body?.type==="TSModuleBlock")for(let I of H.body.body??[]){if(I.type!=="ExportNamedDeclaration")continue;let S=I.declaration;if(!S)continue;let T=c(S,!1);if(T)if(Array.isArray(T))A.push(...T);else A.push(T)}return{kind:"namespace",name:K,span:C(D.start,D.end),isExported:q,modifiers:B,members:A.length>0?A:void 0}}return null}let s=[],D_=new Set;for(let D of $.body){let q=null,U=D;if(U.type==="ExportNamedDeclaration"){let K=U;if(K.declaration){if(q=c(K.declaration,!0),q&&!Array.isArray(q))q.span=C(K.start,K.end)}else if(!K.source&&K.specifiers)for(let B of K.specifiers){let A=B.local,I="name"in A?A.name:A.value;if(I)D_.add(I)}}else if(U.type==="ExportDefaultDeclaration"){let K=U,B=K.declaration;if(B){if(q=c(B,!0),q&&!Array.isArray(q))q.name="id"in B&&B.id&&typeof B.id.name==="string"?B.id.name:"default",q.isExported=!0,q.span=C(K.start,K.end);else if(!q&&"type"in B&&B.type==="Identifier"){let A=B.name;if(A)D_.add(A)}}}else{let K=U.type;if(K==="FunctionDeclaration"||K==="TSDeclareFunction"||K==="ClassDeclaration"||K==="VariableDeclaration"||K==="TSTypeAliasDeclaration"||K==="TSInterfaceDeclaration"||K==="TSEnumDeclaration"||K==="TSModuleDeclaration")q=c(U,!1)}let H=Array.isArray(q)?q:q?[q]:[];for(let K of H){let B=D.start,A=N(B);if(A){let I=e_(A);if(!jJ(I))K.jsDoc=I}s.push(K)}}if(D_.size>0){for(let D of s)if(!D.isExported&&D_.has(D.name))D.isExported=!0}return s}function _0(_){if(_===null||typeof _!=="object")return JSON.stringify(_);if(Array.isArray(_))return`[${_.map(_0).join(",")}]`;let $=_;return`{${Object.keys($).sort().map((Q)=>`${JSON.stringify(Q)}:${_0($[Q])}`).join(",")}}`}function vJ(_){if(_.kind==="function"||_.kind==="method"){let $=_.parameters?.length??0,J=_.modifiers.includes("async")?1:0;return`params:${$}|async:${J}`}return null}function EJ(_){let $={};if(_.jsDoc)$.jsDoc=_.jsDoc;if(_.kind==="function"||_.kind==="method"){if(_.parameters!==void 0)$.parameters=_.parameters;if(_.returnType!==void 0)$.returnType=_.returnType}if(_.heritage?.length)$.heritage=_.heritage;if(_.decorators?.length)$.decorators=_.decorators;if(_.typeParameters?.length)$.typeParameters=_.typeParameters;if(_.modifiers?.length)$.modifiers=_.modifiers;if(_.initializer)$.initializer=_.initializer;if(_.key)$.key=_.key;if(_.members?.length)$.members=_.members.map((J)=>{let Q=J.modifiers.find((W)=>W==="private"||W==="protected"||W==="public"),z={name:J.name,kind:J.methodKind??J.kind,type:J.returnType,visibility:Q,isStatic:J.modifiers.includes("static")||void 0,isReadonly:J.modifiers.includes("readonly")||void 0,isAccessor:J.modifiers.includes("accessor")||void 0};if(J.key)z.key=J.key;if(J.initializer)z.initializer=J.initializer;if(J.decorators?.length)z.decorators=J.decorators;return z});return Object.keys($).length>0?JSON.stringify($):null}function uJ(_){let $=[_.kind];if(_.modifiers.length)$.push(`mod:${[..._.modifiers].sort().join(",")}`);if(_.typeParameters?.length)$.push(`tp:${_.typeParameters.length}`);if(_.heritage?.length){let J=[..._.heritage].sort((Q,z)=>Q.name.localeCompare(z.name)).map((Q)=>`${Q.kind}:${Q.name}`).join(",");$.push(`her:${J}`)}if(_.decorators?.length)$.push(`dec:${[..._.decorators].map((J)=>J.name).sort().join(",")}`);if(_.methodKind)$.push(`mk:${_.methodKind}`);if(_.parameters)$.push(`p:${_.parameters.length}`);if(_.returnType)$.push(`rt:${_.returnType}`);if(_.key)$.push(`k:${_0(_.key)}`);if(_.members?.length){let J=_.members.map((Q)=>`${Q.kind}:${Q.modifiers.join(",")}:${Q.parameters?.length??""}:${Q.returnType??""}:${Q.key?_0(Q.key):""}`).sort().join(";");$.push(`mem:${_.members.length}:${K_(J)}`)}return K_($.join("|"))}function Z1(_,$,J,Q,z){let W=vJ(_),Z=K_(`${$}|${_.kind}|${W??""}`),Y=uJ(_);return{project:J,filePath:Q,kind:_.kind,name:$,startLine:_.span.start.line,startColumn:_.span.start.column,endLine:_.span.end.line,endColumn:_.span.end.column,isExported:_.isExported?1:0,signature:W,fingerprint:Z,detailJson:EJ(_),contentHash:z,indexedAt:new Date().toISOString(),structuralFingerprint:Y}}function N0(_){let{parsed:$,project:J,filePath:Q,contentHash:z,symbolRepo:W}=_,Z=R_($),Y=[];for(let X of Z){Y.push(Z1(X,X.name,J,Q,z));for(let M of X.members??[])Y.push(Z1(M,`${X.name}.${M.name}`,J,Q,z))}W.replaceFileSymbols(J,Q,z,Y)}import{resolve as R0,dirname as bJ,extname as PJ}from"path";function T_(_,$,J){let Q=(z)=>{let W=PJ(z);if(W===".js")return[z.slice(0,-3)+".ts"];if(W===".mjs")return[z.slice(0,-4)+".mts"];if(W===".cjs")return[z.slice(0,-4)+".cts"];if(W===".ts"||W===".mts"||W===".cts"||W===".d.ts")return[z];return[z+".ts",z+".d.ts",z+"/index.ts",z+"/index.d.ts",z+".mts",z+"/index.mts",z+".cts",z+"/index.cts"]};if($.startsWith(".")){let z=z_(R0(bJ(_),$));return Q(z)}if(J)for(let[z,W]of J.paths){if(W.length===0)continue;let Z=z.indexOf("*");if(Z===-1){if($===z){let Y=[];for(let X of W)Y.push(...Q(z_(R0(J.baseUrl,X))));return Y}}else{let Y=z.slice(0,Z),X=z.slice(Z+1);if($.startsWith(Y)&&(X===""||$.endsWith(X))){let M=$.slice(Y.length,X===""?void 0:$.length-X.length),O=[];for(let L of W)O.push(...Q(z_(R0(J.baseUrl,L.replace("*",M)))));return O}}}return[]}function X1(_,$,J,Q=T_){let z=new Map,W=_.body??[];for(let Z of W){if(Z.type!=="ImportDeclaration")continue;let Y=Z.source?.value??"",X=Q($,Y,J);if(X.length===0)continue;let M=X[0],O=Z.specifiers??[];for(let L of O)switch(L.type){case"ImportSpecifier":z.set(L.local.name,{path:M,importedName:L.imported.name});break;case"ImportDefaultSpecifier":z.set(L.local.name,{path:M,importedName:"default"});break;case"ImportNamespaceSpecifier":z.set(L.local.name,{path:M,importedName:"*"});break}}return z}import{Visitor as fJ}from"oxc-parser";function $0(_){return"name"in _&&typeof _.name==="string"?_.name:("value"in _)&&typeof _.value==="string"?_.value:"unknown"}function yJ(_){return!_.startsWith(".")&&!_.startsWith("/")}function S_(_,$,J,Q){let z=Q(_,$,J),W=z.length>0?z[0]:null,Z=W===null&&yJ($);return{resolved:W,isExternal:Z}}function xJ(_,$,J,Q,z){for(let W of _.staticImports){let Z=W.moduleRequest.value,{resolved:Y,isExternal:X}=S_($,Z,J,Q),M={dstFilePath:Y,specifier:Z};if(W.entries.length===0){let O={};if(X)O.isExternal=!0;if(Y===null&&!X)O.isUnresolved=!0;z.push({type:"imports",srcFilePath:$,srcSymbolName:null,...M,dstSymbolName:null,...Object.keys(O).length>0?{metaJson:JSON.stringify(O)}:{}});continue}for(let O of W.entries){let L=O.isType,C={};if(L)C.isType=!0;if(X)C.isExternal=!0;if(Y===null&&!X)C.isUnresolved=!0;let N,w,R=O.importName.kind;if(R==="Default")N="default",w=O.localName.value;else if(R==="NamespaceObject")N="*",w=O.localName.value,C.importKind="namespace";else N=O.importName.name??"unknown",w=O.localName.value;z.push({type:L?"type-references":"imports",srcFilePath:$,srcSymbolName:w,...M,dstSymbolName:N,...Object.keys(C).length>0?{metaJson:JSON.stringify(C)}:{}})}}}function mJ(_,$,J,Q,z){let W=new Map;for(let Z of _.staticImports)for(let Y of Z.entries)W.set(Y.localName.value,Z.moduleRequest.value);for(let Z of _.staticExports)for(let Y of Z.entries){let X=null;if(Y.moduleRequest)X=Y.moduleRequest.value;else if(Y.localName.name)X=W.get(Y.localName.name)??null;if(!X)continue;let{resolved:M,isExternal:O}=S_($,X,J,Q),L=Y.exportName.name??"default",C=Y.exportName.kind,N=Y.localName.name??Y.importName.name??L,w=Y.isType,R={isReExport:!0};if(C==="None");else R.specifiers=[{local:N,exported:L}];if(w)R.isType=!0;if(O)R.isExternal=!0;if(M===null&&!O)R.isUnresolved=!0;let F=null,G=null,E=Y.importName.kind;if(E==="All"||E==="AllButDefault"){if(C==="Name"&&L)G=L,R.namespaceAlias=L}else G=N,F=L;z.push({type:w?"type-references":"re-exports",srcFilePath:$,srcSymbolName:F,dstFilePath:M,dstSymbolName:G,specifier:X,metaJson:JSON.stringify(R)})}}function hJ(_,$,J,Q,z){for(let W of _.body){let Z=W;if(Z.type==="ImportDeclaration"){let Y=Z,X=Y.source.value,{resolved:M,isExternal:O}=S_($,X,J,Q),L=Y.importKind==="type",C=Y.specifiers,N={dstFilePath:M,specifier:X};if(C.length===0){let w={};if(L)w.isType=!0;if(O)w.isExternal=!0;if(M===null&&!O)w.isUnresolved=!0;z.push({type:L?"type-references":"imports",srcFilePath:$,srcSymbolName:null,...N,dstSymbolName:null,...Object.keys(w).length>0?{metaJson:JSON.stringify(w)}:{}})}else for(let w of C){let R=w.type,F=L||R==="ImportSpecifier"&&w.importKind==="type",G={};if(F)G.isType=!0;if(O)G.isExternal=!0;if(M===null&&!O)G.isUnresolved=!0;let E,b;if(R==="ImportDefaultSpecifier")E="default",b=w.local.name;else if(R==="ImportNamespaceSpecifier")E="*",b=w.local.name,G.importKind="namespace";else E=$0(w.imported),b=w.local.name;z.push({type:F?"type-references":"imports",srcFilePath:$,srcSymbolName:b,...N,dstSymbolName:E,...Object.keys(G).length>0?{metaJson:JSON.stringify(G)}:{}})}continue}if(Z.type==="ExportAllDeclaration"){let Y=Z,X=Y.source.value,{resolved:M,isExternal:O}=S_($,X,J,Q),L=Y.exportKind==="type",C=Y.exported,N=C?$0(C):null,w={isReExport:!0};if(L)w.isType=!0;if(O)w.isExternal=!0;if(M===null&&!O)w.isUnresolved=!0;if(N)w.namespaceAlias=N;z.push({type:L?"type-references":"re-exports",srcFilePath:$,srcSymbolName:null,dstFilePath:M,dstSymbolName:N,specifier:X,metaJson:JSON.stringify(w)});continue}if(Z.type==="ExportNamedDeclaration"){let Y=Z;if(!Y.source)continue;let X=Y.source.value,{resolved:M,isExternal:O}=S_($,X,J,Q),L=Y.exportKind==="type",C=Y.specifiers??[];for(let N of C){let w=L||N.exportKind==="type",R=$0(N.local),F=$0(N.exported),G={isReExport:!0,specifiers:[{local:R,exported:F}]};if(w)G.isType=!0;if(O)G.isExternal=!0;if(M===null&&!O)G.isUnresolved=!0;z.push({type:w?"type-references":"re-exports",srcFilePath:$,srcSymbolName:F,dstFilePath:M,dstSymbolName:R,specifier:X,metaJson:JSON.stringify(G)})}}}}function nJ(_,$,J,Q,z){new fJ({ImportExpression(Z){let Y=Z.source;if(Y.type!=="Literal"||typeof Y.value!=="string")return;let X=Y.value,{resolved:M,isExternal:O}=S_($,X,J,Q),L={isDynamic:!0};if(O)L.isExternal=!0;if(M===null&&!O)L.isUnresolved=!0;z.push({type:"imports",srcFilePath:$,srcSymbolName:null,dstFilePath:M,dstSymbolName:null,specifier:X,metaJson:JSON.stringify(L)})},CallExpression(Z){let Y=Z.callee,X=!1;if(Y.type==="Identifier"&&Y.name==="require");else if(Y.type==="MemberExpression"&&!Y.computed){let R=Y,F=R.object,G=R.property;if(F.type==="Identifier"&&F.name==="require"&&G.name==="resolve")X=!0;else return}else return;let M=Z.arguments;if(M.length===0)return;let O=M[0];if(O.type!=="Literal"||typeof O.value!=="string")return;let L=O.value,{resolved:C,isExternal:N}=S_($,L,J,Q),w={isRequire:!0};if(X)w.isRequireResolve=!0;if(N)w.isExternal=!0;if(C===null&&!N)w.isUnresolved=!0;z.push({type:"imports",srcFilePath:$,srcSymbolName:null,dstFilePath:C,dstSymbolName:null,specifier:L,metaJson:JSON.stringify(w)})}}).visit(_)}function U1(_,$,J,Q=T_,z){let W=[];if(z)xJ(z,$,J,Q,W),mJ(z,$,J,Q,W);else hJ(_,$,J,Q,W);return nJ(_,$,J,Q,W),W}import{walk as _Q}from"oxc-walker";function pJ(_){return _.type==="FunctionDeclaration"||_.type==="FunctionExpression"||_.type==="ArrowFunctionExpression"}function dJ(_){return _.type==="ArrowFunctionExpression"}function lJ(_){return _.type==="AssignmentExpression"}function iJ(_){return _.type==="CallExpression"}function cJ(_){return _.type==="FunctionDeclaration"}function aJ(_){return _.type==="FunctionExpression"}function sJ(_){return _.type==="Identifier"}function rJ(_){return _.type==="MemberExpression"}function oJ(_){return _.type==="TSQualifiedName"}function tJ(_){return _.type==="VariableDeclaration"}var V1=new Map,eJ=new Proxy({},{get(_,$,J){if(typeof $!=="string")return Reflect.get(_,$,J);let Q=$.charCodeAt(0);if(Q<65||Q>90)return Reflect.get(_,$,J);let z=V1.get($);if(z===void 0)z=(W)=>W!==null&&W!==void 0&&W.type===$,V1.set($,z);return z}});function u_(_){if(!_||typeof _!=="object"||Array.isArray(_))return null;let $=_;if($.type==="Identifier"){let J=$.name;return{root:J,parts:[],full:J}}if($.type==="ThisExpression")return{root:"this",parts:[],full:"this"};if($.type==="Super")return{root:"super",parts:[],full:"super"};if($.type==="MemberExpression"){let J=[],Q=$;while(Q.type==="MemberExpression"){let Z=Q.property;if(!Z||typeof Z.name!=="string")return null;J.push(Z.name),Q=Q.object}let z;if(Q.type==="Identifier")z=Q.name;else if(Q.type==="ThisExpression")z="this";else if(Q.type==="Super")z="super";else return null;J.reverse();let W=[z,...J].join(".");return{root:z,parts:J,full:W}}return null}function O1(_,$,J){let Q=[],z=[],W=[];function Z(){if(z.length>0)return z[z.length-1]??null;return null}function Y(O){if(!O)return null;let L=J.get(O.root);if(O.parts.length===0){if(L)return{dstFilePath:L.path,dstSymbolName:L.importedName,resolution:"import"};return{dstFilePath:$,dstSymbolName:O.root,resolution:"local"}}else{if(L&&L.importedName==="*"){let C=O.parts[O.parts.length-1];return{dstFilePath:L.path,dstSymbolName:C,resolution:"namespace"}}return{dstFilePath:$,dstSymbolName:O.full,resolution:"local-member"}}}function X(O,L){let C=u_(O.callee),N=Y(C);if(N){let w=Z(),R={};if(L)R.isNew=!0;if(w===null)R.scope="module";Q.push({type:"calls",srcFilePath:$,srcSymbolName:w,dstFilePath:N.dstFilePath,dstSymbolName:N.dstSymbolName,...Object.keys(R).length>0?{metaJson:JSON.stringify(R)}:{}})}}function M(O,L){if(O.type==="FunctionDeclaration"){z.push(O.id?.name??"anonymous");return}if(O.type==="FunctionExpression"||O.type==="ArrowFunctionExpression"){if(L?.type==="VariableDeclarator"){let w=L.id,R=w.type==="Identifier"?w.name:"anonymous";z.push(R);return}if(L?.type==="MethodDefinition"||L?.type==="TSAbstractMethodDefinition"){let w=L.key,R=W[W.length-1]??"",F="name"in w?w.name:"anonymous",G=R?`${R}.${F}`:F;z.push(G);return}let C=Z(),N=C?`${C}.<anonymous>`:"<anonymous>";z.push(N)}}return _Q(_,{enter(O,L){if(O.type==="ClassDeclaration"||O.type==="ClassExpression"){W.push(O.id?.name??"AnonymousClass");return}if(O.type==="FunctionDeclaration"||O.type==="FunctionExpression"||O.type==="ArrowFunctionExpression"){M(O,L);return}if(O.type==="CallExpression"){X(O,!1);return}if(O.type==="NewExpression"){X(O,!0);return}},leave(O){if(O.type==="ClassDeclaration"||O.type==="ClassExpression"){W.pop();return}if(O.type==="FunctionDeclaration"||O.type==="FunctionExpression"||O.type==="ArrowFunctionExpression"){z.pop();return}}}),Q}import{Visitor as $Q}from"oxc-parser";function H1(_,$,J){let Q=[];function z(Z){let Y=Z.id?.name??"AnonymousClass";if(Z.superClass){let M=u_(Z.superClass);if(M){let O=T0(M,$,J);Q.push({type:"extends",srcFilePath:$,srcSymbolName:Y,...O})}}let X=Z.implements??[];for(let M of X){let O=u_(M.expression);if(!O)continue;let L=T0(O,$,J);Q.push({type:"implements",srcFilePath:$,srcSymbolName:Y,...L})}}return new $Q({TSInterfaceDeclaration(Z){let Y=Z.id.name??"AnonymousInterface",X=Z.extends;for(let M of X){let O=u_(M.expression);if(!O)continue;let L=T0(O,$,J);Q.push({type:"extends",srcFilePath:$,srcSymbolName:Y,...L})}},ClassDeclaration(Z){z(Z)},ClassExpression(Z){z(Z)}}).visit(_),Q}function T0(_,$,J){let Q=J.get(_.root);if(Q){if(Q.importedName==="*"){let z=_.parts[_.parts.length-1]??_.root;return{dstFilePath:Q.path,dstSymbolName:z,metaJson:JSON.stringify({isNamespaceImport:!0})}}return{dstFilePath:Q.path,dstSymbolName:_.parts.length>0?_.full:Q.importedName}}return{dstFilePath:$,dstSymbolName:_.full,metaJson:JSON.stringify({isLocal:!0})}}function d_(_,$,J,Q=T_,z){let W=X1(_,$,J,Q),Z=U1(_,$,J,Q,z),Y=O1(_,$,W),X=H1(_,$,W);return[...Z,...Y,...X]}function S0(_){let{ast:$,project:J,filePath:Q,relationRepo:z,projectRoot:W,tsconfigPaths:Z,knownFiles:Y,boundaries:X,module:M}=_,O=g_(W,Q),C=d_($,O,Z,Y?(w,R,F)=>{let G=T_(w,R,F);for(let E of G){let b=m_(W,E);if(X){let m=a(b,X);if(Y.has(`${m}::${b}`))return[E]}else if(Y.has(`${J}::${b}`))return[E]}return[]}:void 0,M),N=[];for(let w of C){if(w.dstFilePath===null){let E=m_(W,w.srcFilePath),b;if(w.metaJson)try{b=JSON.parse(w.metaJson)}catch{}let m=b?.isExternal===!0;N.push({project:J,type:w.type,srcFilePath:E,srcSymbolName:w.srcSymbolName??null,dstProject:null,dstFilePath:null,dstSymbolName:w.dstSymbolName??null,metaJson:w.metaJson??null,specifier:w.specifier??null,isExternal:m?1:0});continue}let R=m_(W,w.dstFilePath);if(R.startsWith(".."))continue;let F=m_(W,w.srcFilePath),G=X?a(R,X):J;N.push({project:J,type:w.type,srcFilePath:F,srcSymbolName:w.srcSymbolName??null,dstProject:G,dstFilePath:R,dstSymbolName:w.dstSymbolName??null,metaJson:w.metaJson??null,specifier:w.specifier??null,isExternal:0})}return z.replaceFileRelations(J,Q,N),N.length}import{isErr as JQ}from"@zipbul/result";var K1=/(?:^|\s)@([a-zA-Z][\w-]*\w|[a-zA-Z])\s*(.*)$/m;function QQ(_){let $=R_(_),J=[];for(let Q of $){J.push({name:Q.name,startLine:Q.span.start.line});for(let z of Q.members??[])J.push({name:`${Q.name}.${z.name}`,startLine:z.span.start.line})}return J.sort((Q,z)=>Q.startLine-z.startLine),J}function G0(_,$,J){let Q=0,z=_.length-1;while(Q<=z){let W=Q+z>>1;if(_[W].startLine<=$)Q=W+1;else z=W-1}if(Q<_.length){let W=_[Q];if(W.startLine-$<=J)return W.name}return null}function J0(_,$,J){let Q=O_(_,$),z=O_(_,J);return{start:Q,end:z}}function M1(_){let{comments:$,sourceText:J}=_;if(!$.length)return[];let Q=p_(J),z=QQ(_),W=[],Z=[...$].sort((X,M)=>X.start-M.start),Y=null;for(let X of Z)if(X.type==="Block"&&X.value.startsWith("*")){Y=null;let M=`/*${X.value}*/`,O=e_(M);if(JQ(O))continue;let L=O;if(!L.tags?.length)continue;let C=O_(Q,X.end),N=G0(z,C.line,3),w=J.slice(X.start,X.end);for(let R of L.tags){let F=[R.name,R.description].filter(Boolean).join(" "),G=`@${R.tag}`,E=w.indexOf(G),b;if(E>=0){let m=X.start+E,l=J.indexOf(`
|
|
4
|
-
`,m),i
|
|
5
|
-
`),
|
|
6
|
-
`).length});let
|
|
7
|
-
`).length})}let I=new Set;for(let T of H)for(let[j]of Q.getFilesMap(T.project))I.add(`${T.project}::${j}`);let S=this.opts.parseSourceFn??v_;for(let T of B){let j=a(T.filePath,H),g=S(g_(U,T.filePath),T.text);if(B1(g))throw g.data;let P=g;if(A.push({filePath:T.filePath,parsed:P}),N0({parsed:P,project:j,filePath:T.filePath,contentHash:T.contentHash,symbolRepo:z}),G)m+=F0({parsed:P,project:j,filePath:T.filePath,annotationRepo:G});W_+=S0({ast:P.program,project:j,filePath:T.filePath,relationRepo:W,projectRoot:U,tsconfigPaths:M,knownFiles:I,boundaries:H,module:P.module}),i+=z.getFileSymbols(j,T.filePath).length}});for(let I of A)K.set(I.filePath,I.parsed)}else{b();let U=await l();i=U.symbols,W_=U.relations,m=U.annotations,X_=U.failedFiles}for(let U of Y){let H=a(U.filePath,this.opts.boundaries);for(let K of z.getFileSymbols(H,U.filePath))N.set(`${K.filePath}::${K.name}`,w(K))}let M_=new Map;for(let U of Y){let H=a(U.filePath,this.opts.boundaries);for(let K of W.getOutgoing(H,U.filePath))M_.set(R(K),K)}let U_=(U)=>({type:U.type,srcFilePath:U.srcFilePath,dstFilePath:U.dstFilePath,srcSymbolName:U.srcSymbolName,dstSymbolName:U.dstSymbolName,dstProject:U.dstProject,metaJson:U.metaJson}),Y_={added:[...M_.entries()].filter(([U])=>!F.has(U)).map(([,U])=>U_(U)),removed:[...F.entries()].filter(([U])=>!M_.has(U)).map(([,U])=>U_(U))},c={added:[],modified:[],removed:[]};for(let[U,H]of N){let K=C.get(U);if(!K)c.added.push({name:H.name,filePath:H.filePath,kind:H.kind,isExported:Boolean(H.isExported)});else{let B=K.fingerprint!==H.fingerprint,A=K.isExported!==H.isExported,I=K.structuralFingerprint!==null&&H.structuralFingerprint!==null&&K.structuralFingerprint!==H.structuralFingerprint;if(B||A||I)c.modified.push({name:H.name,filePath:H.filePath,kind:H.kind,isExported:Boolean(H.isExported)})}}for(let[U,H]of C)if(!N.has(U))c.removed.push({name:H.name,filePath:H.filePath,kind:H.kind,isExported:Boolean(H.isExported)});let s=L1(C,N),D_=new Set(s.renamed.map((U)=>`${U.filePath}::${U.oldName}`)),D=new Set(s.renamed.map((U)=>`${U.filePath}::${U.newName}`));c.added=c.added.filter((U)=>!D.has(`${U.filePath}::${U.name}`)),c.removed=c.removed.filter((U)=>!D_.has(`${U.filePath}::${U.name}`));let q=[];if(!$){for(let[H,K]of O)for(let B of K){if(!B.fingerprint)continue;let A=a(H,this.opts.boundaries),I=z.getByFingerprint(A,B.fingerprint);if(I.length===1){let S=I[0];W.retargetRelations({dstProject:A,oldFile:H,oldSymbol:B.name,newFile:S.filePath,newSymbol:S.name}),q.push({name:S.name,filePath:S.filePath,kind:S.kind,oldFilePath:H,isExported:S.isExported??0})}}let U=new Set(q.map((H)=>`${H.oldFilePath}::${H.name}`));for(let H of s.removed){if(U.has(`${H.filePath}::${H.name}`))continue;let B=C.get(`${H.filePath}::${H.name}`)?.fingerprint;if(!B)continue;let A=a(H.filePath,this.opts.boundaries),I=z.getByFingerprint(A,B);if(I.length===1){let S=I[0];if(S.filePath!==H.filePath||S.name!==H.name)W.retargetRelations({dstProject:A,oldFile:H.filePath,oldSymbol:H.name,newFile:S.filePath,newSymbol:S.name}),q.push({name:S.name,filePath:S.filePath,kind:S.kind,oldFilePath:H.filePath,isExported:S.isExported??0})}}}if(q.length){let U=new Set(q.map((K)=>`${K.filePath}::${K.name}`)),H=new Set(q.map((K)=>`${K.oldFilePath}::${K.name}`));c.added=c.added.filter((K)=>!U.has(`${K.filePath}::${K.name}`)),c.removed=c.removed.filter((K)=>!H.has(`${K.filePath}::${K.name}`))}if(E){let U=new Date().toISOString(),H=$?1:0,K=[];for(let B of c.added){let A=`${B.filePath}::${B.name}`,I=N.get(A),S=a(B.filePath,this.opts.boundaries);K.push({project:S,changeType:"added",symbolName:B.name,symbolKind:B.kind,filePath:B.filePath,oldName:null,oldFilePath:null,fingerprint:I?.fingerprint??null,changedAt:U,isFullIndex:H,indexRunId:L})}for(let B of c.modified){let A=N.get(`${B.filePath}::${B.name}`),I=a(B.filePath,this.opts.boundaries);K.push({project:I,changeType:"modified",symbolName:B.name,symbolKind:B.kind,filePath:B.filePath,oldName:null,oldFilePath:null,fingerprint:A?.fingerprint??null,changedAt:U,isFullIndex:H,indexRunId:L})}for(let B of c.removed){let A=`${B.filePath}::${B.name}`,I=C.get(A),S=a(B.filePath,this.opts.boundaries);K.push({project:S,changeType:"removed",symbolName:B.name,symbolKind:B.kind,filePath:B.filePath,oldName:null,oldFilePath:null,fingerprint:I?.fingerprint??null,changedAt:U,isFullIndex:H,indexRunId:L})}for(let B of s.renamed){let A=N.get(`${B.filePath}::${B.newName}`),I=a(B.filePath,this.opts.boundaries);K.push({project:I,changeType:"renamed",symbolName:B.newName,symbolKind:B.kind,filePath:B.filePath,oldName:B.oldName,oldFilePath:null,fingerprint:A?.fingerprint??null,changedAt:U,isFullIndex:H,indexRunId:L})}for(let B of q){let A=N.get(`${B.filePath}::${B.name}`),I=a(B.filePath,this.opts.boundaries);K.push({project:I,changeType:"moved",symbolName:B.name,symbolKind:B.kind,filePath:B.filePath,oldName:null,oldFilePath:B.oldFilePath,fingerprint:A?.fingerprint??null,changedAt:U,isFullIndex:H,indexRunId:L})}if(K.length)try{Z.transaction(()=>{E.insertBatch(K)})}catch(B){this.logger.error("[IndexCoordinator] changelog insert failed:",B)}if(Date.now()-this.lastPruneAt>3600000){this.lastPruneAt=Date.now();let B=new Date(Date.now()-2592000000).toISOString();try{for(let A of this.opts.boundaries)E.pruneOlderThan(A.project,B)}catch(A){this.logger.error("[IndexCoordinator] changelog pruning failed:",A)}}}return{indexedFiles:Y.length,removedFiles:X.length,totalSymbols:i,totalRelations:W_,totalAnnotations:m,durationMs:Date.now()-J,changedFiles:Y.map((U)=>U.filePath),deletedFiles:[...X],failedFiles:X_,changedSymbols:c,renamedSymbols:s.renamed.map((U)=>({oldName:U.oldName,newName:U.newName,filePath:U.filePath,kind:U.kind,isExported:Boolean(N.get(`${U.filePath}::${U.newName}`)?.isExported)})),movedSymbols:q.map((U)=>({name:U.name,oldFilePath:U.oldFilePath,newFilePath:U.filePath,kind:U.kind,isExported:Boolean(U.isExported)})),changedRelations:Y_}}fireCallbacks(_){for(let $ of this.callbacks)try{$(_)}catch(J){this.logger.error("[IndexCoordinator] onIndexed callback threw:",J)}}flushPending(){if(this.indexingLock)return;if(this.pendingEvents.length>0){let _=this.pendingEvents.splice(0);this.startIndex(_,!1).catch(($)=>this.logger.error("[IndexCoordinator] flushPending startIndex error:",$))}}}function WQ(_){try{return process.kill(_,0),!0}catch($){if(typeof $==="object"&&$&&"code"in $)return $.code!=="ESRCH";return!0}}function YQ(_){let $=new Date(_).getTime();return Number.isNaN($)?0:$}function I1(_,$,J={}){let Q=J.now??Date.now,z=J.isAlive??WQ,W=J.staleAfterSeconds??60,Z=J.instanceId;return _.immediateTransaction(()=>{let Y=_.selectOwner();if(!Y)return _.insertOwner($,Z),"owner";let X=Math.floor((Q()-YQ(Y.heartbeat_at))/1000),M=z(Y.pid);if(M&&Z&&Y.instance_id&&Y.instance_id!==Z&&Y.pid===$)return _.replaceOwner($,Z),"owner";if(M&&X<W)return"reader";return _.replaceOwner($,Z),"owner"})}function D1(_,$){_.deleteOwner($)}function C1(_,$){_.touchOwner($)}class l_{#_;#$=new Map;constructor(_){this.#_=Math.max(1,_)}get size(){return this.#$.size}has(_){return this.#$.has(_)}get(_){if(!this.#$.has(_))return;let $=this.#$.get(_);return this.#$.delete(_),this.#$.set(_,$),$}set(_,$){if(this.#$.has(_))this.#$.delete(_);if(this.#$.set(_,$),this.#$.size>this.#_){let J=this.#$.keys().next().value;if(J!==void 0)this.#$.delete(J)}}delete(_){return this.#$.delete(_)}clear(){this.#$.clear()}}class k0{lru;constructor(_=500){this.lru=new l_(_)}get(_){return this.lru.get(_)}set(_,$){this.lru.set(_,$)}invalidate(_){this.lru.delete(_)}invalidateAll(){this.lru.clear()}size(){return this.lru.size}}function g0(_){let{symbolRepo:$,project:J,query:Q}=_,z=Q.project??J,W={kind:Q.kind,filePath:Q.filePath,isExported:Q.isExported,project:z,limit:Q.limit,resolvedType:Q.resolvedType};if(Q.text)if(Q.exact)W.exactName=Q.text;else{let Y=k_(Q.text);if(Y)W.ftsQuery=Y}if(Q.decorator)W.decorator=Q.decorator;if(Q.regex)W.regex=Q.regex;return $.searchByQuery(W).map((Y)=>{let X=Y.name.indexOf(".");return{id:Y.id,filePath:Y.filePath,kind:Y.kind,name:Y.name,memberName:X>=0?Y.name.slice(X+1):null,span:{start:{line:Y.startLine,column:Y.startColumn},end:{line:Y.endLine,column:Y.endColumn}},isExported:Y.isExported===1,signature:Y.signature,fingerprint:Y.fingerprint,detail:Y.detailJson?(()=>{try{return JSON.parse(Y.detailJson)}catch{return{}}})():{}}})}function v0(_){let{relationRepo:$,project:J,query:Q}=_;if(Q.srcFilePath&&Q.srcFilePathPattern)throw new V("validation","srcFilePath and srcFilePathPattern are mutually exclusive");if(Q.dstFilePath&&Q.dstFilePathPattern)throw new V("validation","dstFilePath and dstFilePathPattern are mutually exclusive");let z=Q.project??J,W=Q.limit,Z=!!(Q.srcFilePathPattern||Q.dstFilePathPattern),Y=Z?void 0:W,M=$.searchRelations({srcFilePath:Q.srcFilePath,srcSymbolName:Q.srcSymbolName,dstFilePath:Q.dstFilePath,dstSymbolName:Q.dstSymbolName,dstProject:Q.dstProject,type:Q.type,project:z,specifier:Q.specifier,isExternal:Q.isExternal,limit:Y}).map((O)=>{let L;if(O.metaJson)try{L=JSON.parse(O.metaJson)}catch{}return{type:O.type,srcFilePath:O.srcFilePath,srcSymbolName:O.srcSymbolName,dstFilePath:O.dstFilePath,dstSymbolName:O.dstSymbolName,dstProject:O.dstProject,isExternal:O.isExternal===1,specifier:O.specifier,metaJson:O.metaJson??void 0,meta:L}});if(Q.srcFilePathPattern||Q.dstFilePathPattern){let O=Q.srcFilePathPattern?new Bun.Glob(Q.srcFilePathPattern):null,L=Q.dstFilePathPattern?new Bun.Glob(Q.dstFilePathPattern):null;M=M.filter((C)=>(!O||O.match(C.srcFilePath))&&(!L||C.dstFilePath===null||L.match(C.dstFilePath)))}if(Z&&W!==void 0&&M.length>W)M=M.slice(0,W);return M}import{findInFiles as ZQ,Lang as XQ}from"@ast-grep/napi";function UQ(_){let $=new Set,J=/\${1,3}([A-Z_][A-Z_0-9]*)/g,Q;while((Q=J.exec(_))!==null)$.add(Q[0]);return[...$]}function VQ(_){return _.replace(/^\$+/,"")}function OQ(_,$){if($.length===0)return;let J={},Q=!1;for(let z of $){let W=VQ(z),Z=_.getMatch(W);if(Z){let X=Z.range();J[z]={text:Z.text(),startLine:X.start.line+1,endLine:X.end.line+1,startColumn:X.start.column,endColumn:X.end.column,startOffset:X.start.index,endOffset:X.end.index},Q=!0;continue}let Y=_.getMultipleMatches(W);if(Y.length>0){let X=Y[0].range(),M=Y[Y.length-1].range();J[z]={text:Y.map((O)=>O.text()).join(", "),startLine:X.start.line+1,endLine:M.end.line+1,startColumn:X.start.column,endColumn:M.end.column,startOffset:X.start.index,endOffset:M.end.index},Q=!0}}return Q?J:void 0}async function E0(_){if(_.filePaths.length===0)return[];let $=UQ(_.pattern),J=[];return await ZQ(XQ.TypeScript,{paths:_.filePaths,matcher:{rule:{pattern:_.pattern}}},(Q,z)=>{if(Q){console.warn("[patternSearch] findInFiles callback error:",Q);return}for(let W of z){let Z=W.range(),Y={filePath:W.getRoot().filename(),startLine:Z.start.line+1,endLine:Z.end.line+1,startColumn:Z.start.column,endColumn:Z.end.column,startOffset:Z.start.index,endOffset:Z.end.index,matchedText:W.text()},X=OQ(W,$);if(X)Y.captures=X;J.push(Y)}}),J}import __ from"typescript";import{isErr as jQ}from"@zipbul/result";import w_ from"typescript";import HQ from"path";import{err as u0}from"@zipbul/result";function KQ(_){try{return s0("fs").readFileSync(_,"utf-8")}catch{return}}function MQ(_){try{return s0("fs").readFileSync(_,"utf-8")}catch{return}}class Q0{#_;#$;#Q=!1;__testing__;constructor(_,$){this.#_=_,this.#$=$,this.__testing__={host:$}}static create(_,$={}){let J=$.readConfigFile??KQ,Q=$.resolveNonTrackedFile??MQ,z=HQ.dirname(_),W=J(_);if(W===void 0)return u0(new V("semantic",`tsconfig not found: ${_}`));let Z=w_.parseJsonText(_,W),Y=Z.parseDiagnostics;if(Y&&Y.length>0){let L=Y.map((C)=>w_.flattenDiagnosticMessageText(C.messageText,`
|
|
8
|
-
`)).join("; ");return
|
|
9
|
-
`)).join("; ");return u0(new V("semantic",`tsconfig compile error: ${C}`))}}let M=new A1(X.fileNames,X.options,z,Q),O=w_.createLanguageService(M);return new Q0(O,M)}get isDisposed(){return this.#Q}getProgram(){this.#z();let _=this.#_.getProgram();if(!_)throw Error("TscProgram: LanguageService returned null Program");return _}getChecker(){return this.#z(),this.getProgram().getTypeChecker()}getCompilerOptions(){return this.#z(),this.#$.getCompilationSettings()}getLanguageService(){return this.#z(),this.#_}notifyFileChanged(_,$){if(this.#Q)return;this.#$.updateFile(_,$)}removeFile(_){if(this.#Q)return;this.#$.removeFile(_)}dispose(){if(this.#Q)return;this.#Q=!0,this.#_.dispose()}#z(){if(this.#Q)throw Error("TscProgram is disposed")}}class A1{#_;#$;#Q;#z;#W=new Map;#Y=new Map;#J=new Map;constructor(_,$,J,Q){this.#_=new Set(_),this.#$=$,this.#Q=J,this.#z=Q}updateFile(_,$){let J=this.#W.get(_);if(J){if(J.content===$)return;this.#Y.delete(`${_}:${J.version}`),J.version+=1,J.content=$}else this.#W.set(_,{version:1,content:$})}removeFile(_){let $=this.#W.get(_);if($)this.#Y.delete(`${_}:${$.version}`);this.#W.delete(_),this.#_.delete(_)}getScriptFileNames(){let _=[...this.#W.keys()];return[...[...this.#_].filter((J)=>!this.#W.has(J)),..._]}getScriptVersion(_){let $=this.#W.get(_);return $?String($.version):"0"}getScriptSnapshot(_){let $=this.#W.get(_);if($){let z=`${_}:${$.version}`,W=this.#Y.get(z);if(!W)W=w_.ScriptSnapshot.fromString($.content),this.#Y.set(z,W);return W}let J=this.#J.get(_);if(J)return J;let Q=this.#z(_);if(Q!==void 0)return J=w_.ScriptSnapshot.fromString(Q),this.#J.set(_,J),J;return}getCurrentDirectory(){return this.#Q}getCompilationSettings(){return this.#$}getDefaultLibFileName(_){return w_.getDefaultLibFilePath(_)}fileExists(_){if(this.#W.has(_))return!0;return this.#z(_)!==void 0}readFile(_){let $=this.#W.get(_);if($)return $.content;return this.#z(_)}}import x from"typescript";import z0 from"typescript";function e(_,$){if($<0||$>=_.getEnd())return;let J,Q=(z)=>{if($<z.getStart(_,!1)||$>=z.getEnd())return;J=z,z0.forEachChild(z,Q)};return z0.forEachChild(_,Q),J}function W0(_,$,J){if($<0||J<=$||J>_.getEnd())return;let Q,z=(W)=>{let Z=W.getStart(_,!1),Y=W.getEnd();if($<Z||J>Y)return;if(Z===$&&Y===J)Q=W;z0.forEachChild(W,z)};return z0.forEachChild(_,z),Q}var Y0=8;function LQ(_){return!!(_.flags&x.TypeFlags.Object)&&!!(_.objectFlags&x.ObjectFlags.Reference)}function H_(_,$,J=0,Q){if(Q){let w=Q.get($);if(w)return w}let z=_.typeToString($),W=$.flags,Z=!!(W&x.TypeFlags.Union),Y=!!(W&x.TypeFlags.Intersection),X;if(J<Y0&&LQ($)){let w=_.getTypeArguments($);if(w.length>0)X=w}let M=!!(W&x.TypeFlags.TypeParameter)||X!==void 0&&X.length>0,O;if(Z&&J<Y0)O=$.types.map((w)=>H_(_,w,J+1,Q));else if(Y&&J<Y0)O=$.types.map((w)=>H_(_,w,J+1,Q));let L;if(X&&X.length>0)L=X.map((w)=>H_(_,w,J+1,Q));let C;if(J<Y0&&!!(W&x.TypeFlags.Object)&&!Z&&!Y){let w=_.getPropertiesOfType($);if(w.length>0&&w.length<=50){let R=$.symbol?.declarations?.[0];C=[];for(let F of w){let G=F.declarations?.[0]??R;if(!G)continue;try{let E=_.getTypeOfSymbolAtLocation(F,G);C.push({name:F.getName(),type:H_(_,E,J+1,Q)})}catch{}}if(C.length===0)C=void 0}}let N={text:z,flags:W,isUnion:Z,isIntersection:Y,isGeneric:M,members:O,typeArguments:L,properties:C};if(Q)Q.set($,N);return N}function Z0(_,$,J){if($.flags&x.TypeFlags.Any)return!1;if($.isUnion()){let Z=$.types.filter((Y)=>!(Y.flags&(x.TypeFlags.Void|x.TypeFlags.Undefined|x.TypeFlags.Null)));return J?Z.some((Y)=>Z0(_,Y,J)):Z.length>0&&Z.every((Y)=>Z0(_,Y,J))}if($.isIntersection())return $.types.some((Z)=>Z0(_,Z,J));let Q=_.getPropertyOfType($,"then");if(!Q)return!1;let z=Q.declarations?.[0];if(!z)return!1;return _.getTypeOfSymbolAtLocation(Q,z).getCallSignatures().some((Z)=>Z.parameters.length>=1)}function BQ(_){return x.isFunctionDeclaration(_)||x.isVariableDeclaration(_)||x.isClassDeclaration(_)||x.isInterfaceDeclaration(_)||x.isTypeAliasDeclaration(_)||x.isEnumDeclaration(_)||x.isMethodDeclaration(_)||x.isPropertyDeclaration(_)||x.isPropertySignature(_)||x.isMethodSignature(_)}var b0="/__gildash_type_probe__.ts";class P0{program;#_=null;constructor(_){this.program=_}#$(_){if(this.#_===_)return;this.program.notifyFileChanged(b0,`declare const __gildash_probe__: ${_};`),this.#_=_}#Q(_,$){let J=_.getSourceFile(b0);if(!J)return null;let Q=J.statements[0];if(!Q||!x.isVariableStatement(Q))return null;let z=Q.declarationList.declarations[0];if(!z)return null;return $.getTypeAtLocation(z.name)}clearProbe(){if(this.#_!==null)this.program.removeFile(b0),this.#_=null}collectAt(_,$){let J=this.program.getProgram(),Q=J.getTypeChecker();if($<0)return null;let z=J.getSourceFile(_);if(!z)return null;if($>=z.getEnd())return null;let W=e(z,$);if(!W)return null;if(!x.isIdentifier(W)&&!x.isTypeNode(W))return null;try{let Z=Q.getTypeAtLocation(W);return H_(Q,Z,0,new Map)}catch{return null}}collectAtSpan(_,$){let J=this.program.getProgram(),Q=J.getTypeChecker(),z=J.getSourceFile(_);if(!z)return null;let W=W0(z,$.start,$.end);if(!W)return null;try{let Z=Q.getTypeAtLocation(W);return H_(Q,Z,0,new Map)}catch{return null}}isThenableAtSpan(_,$,J){let Q=this.program.getProgram(),z=Q.getTypeChecker(),W=Q.getSourceFile(_);if(!W)return null;let Z=W0(W,$.start,$.end);if(!Z)return null;try{let Y=z.getTypeAtLocation(Z);return Z0(z,Y,J?.anyConstituent??!0)}catch{return null}}contextualCallReturnsAtSpan(_,$){let J=this.program.getProgram(),Q=J.getTypeChecker(),z=J.getSourceFile(_);if(!z)return null;let W=W0(z,$.start,$.end);if(!W||!x.isExpression(W))return null;try{let Z=Q.getContextualType(W);if(!Z)return null;let Y=Z.isUnion()?Z.types.filter((O)=>!(O.flags&(x.TypeFlags.Void|x.TypeFlags.Undefined|x.TypeFlags.Null))):[Z],X=new Map,M=[];for(let O of Y)for(let L of O.getCallSignatures()){let C=Q.getReturnTypeOfSignature(L);M.push(H_(Q,C,0,X))}return M}catch{return null}}isAssignableTo(_,$,J,Q){let z=this.program.getProgram(),W=z.getTypeChecker(),Z=z.getSourceFile(_);if(!Z)return null;let Y=e(Z,$);if(!Y||!x.isIdentifier(Y))return null;let X=z.getSourceFile(J);if(!X)return null;let M=e(X,Q);if(!M||!x.isIdentifier(M))return null;try{let O=W.getTypeAtLocation(Y),L=W.getTypeAtLocation(M);return W.isTypeAssignableTo(O,L)}catch{return null}}isAssignableToType(_,$,J,Q){this.#$(J);let z=this.program.getProgram(),W=z.getTypeChecker(),Z=z.getSourceFile(_);if(!Z)return null;let Y=e(Z,$);if(!Y||!x.isIdentifier(Y)&&!x.isTypeNode(Y))return null;try{let X=this.#Q(z,W);if(!X)return null;let M=W.getTypeAtLocation(Y);if(Q?.anyConstituent&&M.isUnion())return M.types.some((O)=>W.isTypeAssignableTo(O,X));return W.isTypeAssignableTo(M,X)}catch{return null}}isAssignableToTypeAtPositions(_,$,J,Q){let z=new Map;if($.length===0)return z;this.#$(J);let W=this.program.getProgram(),Z=W.getTypeChecker(),Y=W.getSourceFile(_);if(!Y)return z;try{let X=this.#Q(W,Z);if(!X)return z;let M=Y.getEnd();for(let O of $){if(O<0||O>=M)continue;let L=e(Y,O);if(!L||!x.isIdentifier(L)&&!x.isTypeNode(L))continue;try{let C=Z.getTypeAtLocation(L);if(Q?.anyConstituent&&C.isUnion())z.set(O,C.types.some((N)=>Z.isTypeAssignableTo(N,X)));else z.set(O,Z.isTypeAssignableTo(C,X))}catch{}}}catch{}return z}collectAtPositions(_,$){let J=new Map;if($.length===0)return J;let Q=this.program.getProgram(),z=Q.getTypeChecker(),W=Q.getSourceFile(_);if(!W)return J;let Z=W.getEnd(),Y=new Map;for(let X of $){if(X<0||X>=Z)continue;let M=e(W,X);if(!M)continue;if(!x.isIdentifier(M)&&!x.isTypeNode(M))continue;try{let O=z.getTypeAtLocation(M);J.set(X,H_(z,O,0,Y))}catch{}}return J}collectFile(_){let $=new Map,J=this.program.getProgram(),Q=J.getTypeChecker(),z=J.getSourceFile(_);if(!z)return $;let W=new Map;function Z(Y){if(BQ(Y)&&Y.name&&x.isIdentifier(Y.name)){let X=Y.name;try{let M=Q.getTypeAtLocation(X),O=X.getStart(z);$.set(O,H_(Q,M,0,W))}catch{}}x.forEachChild(Y,Z)}return Z(z),$}}import I_ from"typescript";var wQ=1000,IQ=1;function DQ(_){let $=_.declarations?.[0],J=$?.getSourceFile(),Q=$?I_.getNameOfDeclaration($):void 0;return{name:_.getName(),filePath:J?.fileName??"",position:Q?.getStart(J,!1)??$?.getStart(J,!1)??0}}function X0(_,$=0,J){let Q=_.declarations?.[0],z=Q?.getSourceFile(),W=Q?I_.getNameOfDeclaration(Q):void 0,Z=z?.fileName??"",Y=W?.getStart(z,!1)??Q?.getStart(z,!1)??0,X={name:_.getName(),filePath:Z,position:Y},M=_;if(M.parent)X.parent=DQ(M.parent);let O=J&&!!(_.flags&I_.SymbolFlags.Alias)?J.getAliasedSymbol(_):_;if($<IQ){let L=O.flags,C=!!(L&I_.SymbolFlags.Enum),N=!!(L&(I_.SymbolFlags.NamespaceModule|I_.SymbolFlags.ValueModule)),w=!!(L&(I_.SymbolFlags.Class|I_.SymbolFlags.Interface));if(C&&O.exports&&O.exports.size>0){let R=[];O.exports.forEach((F)=>{R.push(X0(F,$+1,J))}),X.members=R}else if(w&&O.members&&O.members.size>0){let R=[];O.members.forEach((F)=>{R.push(X0(F,$+1,J))}),X.members=R}if(N&&O.exports&&O.exports.size>0){let R=[];O.exports.forEach((F)=>{R.push(X0(F,$+1,J))}),X.exports=R}}return X}class f0{#_;#$;constructor(_,$=wQ){this.#_=_,this.#$=new l_($)}get(_,$){if(this.#_.isDisposed)return null;let J=`${_}:${$}`,Q=this.#$.get(J);if(Q!==void 0)return Q;let z=this.#_.getProgram(),W=z.getSourceFile(_);if(!W)return null;let Z=e(W,$);if(!Z||!I_.isIdentifier(Z))return null;let Y=z.getTypeChecker(),X=Y.getSymbolAtLocation(Z);if(!X)return null;let M=X0(X,0,Y);return this.#$.set(J,M),M}clear(){this.#$.clear()}}import p from"typescript";import k from"typescript";function y0(_){if(_.getSourceFile().isDeclarationFile)return!0;for(let $=_;$;$=$.parent)if(CQ($))return!0;return!1}function CQ(_){if(!k.canHaveModifiers(_))return!1;return k.getModifiers(_)?.some((J)=>J.kind===k.SyntaxKind.DeclareKeyword)??!1}function x0(_){let $=(Q,z)=>({kind:Q,pos:z.getStart(),end:z.getEnd()}),J=_.parent;while(J){if(k.isSourceFile(J)||k.isModuleDeclaration(J))return $("module",J);if(k.isFunctionLike(J))return $("function",J);if(k.isClassStaticBlockDeclaration(J))return $("function",J);if(k.isPropertyDeclaration(J))return $("function",J);if(k.isBlock(J)){let Q=J.parent;if(Q&&(k.isFunctionLike(Q)||k.isClassStaticBlockDeclaration(Q)))return $("function",Q);return $("block",J)}if(k.isForStatement(J)||k.isForInStatement(J)||k.isForOfStatement(J)||k.isCatchClause(J)||k.isCaseBlock(J)||k.isWithStatement(J))return $("block",J);J=J.parent}return $("module",_.getSourceFile())}function m0(_){let $=_.parent;if(!$)return;if(k.isVariableDeclaration($)&&$.name===_)return"declaration";if(k.isParameter($)&&$.name===_)return"declaration";if(k.isBindingElement($)&&$.name===_)return"declaration";if((k.isForOfStatement($)||k.isForInStatement($))&&$.initializer===_)return"assignment";if((k.isPrefixUnaryExpression($)||k.isPostfixUnaryExpression($))&&$.operand===_&&($.operator===k.SyntaxKind.PlusPlusToken||$.operator===k.SyntaxKind.MinusMinusToken))return"update";let J=_;while(J.parent&&k.isParenthesizedExpression(J.parent))J=J.parent;let Q=J.parent;if(Q&&k.isBinaryExpression(Q)&&Q.left===J)return AQ(Q.operatorToken.kind);if(qQ(_))return"assignment";return}function AQ(_){switch(_){case k.SyntaxKind.EqualsToken:return"assignment";case k.SyntaxKind.PlusEqualsToken:case k.SyntaxKind.MinusEqualsToken:case k.SyntaxKind.AsteriskEqualsToken:case k.SyntaxKind.AsteriskAsteriskEqualsToken:case k.SyntaxKind.SlashEqualsToken:case k.SyntaxKind.PercentEqualsToken:case k.SyntaxKind.LessThanLessThanEqualsToken:case k.SyntaxKind.GreaterThanGreaterThanEqualsToken:case k.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:case k.SyntaxKind.AmpersandEqualsToken:case k.SyntaxKind.BarEqualsToken:case k.SyntaxKind.CaretEqualsToken:return"compound-assignment";case k.SyntaxKind.AmpersandAmpersandEqualsToken:case k.SyntaxKind.BarBarEqualsToken:case k.SyntaxKind.QuestionQuestionEqualsToken:return"logical-assignment";default:return}}function qQ(_){let $=_.parent;if(!$)return!1;if(!(k.isShorthandPropertyAssignment($)&&$.name===_||k.isPropertyAssignment($)&&$.initializer===_||k.isArrayLiteralExpression($)||k.isSpreadAssignment($)&&$.expression===_||k.isSpreadElement($)&&$.expression===_))return!1;let Q=$;while(Q.parent){let z=Q.parent;if(k.isBinaryExpression(z)&&z.left===Q&&z.operatorToken.kind===k.SyntaxKind.EqualsToken)return!0;if(k.isObjectLiteralExpression(z)||k.isArrayLiteralExpression(z)||k.isPropertyAssignment(z)||k.isShorthandPropertyAssignment(z)||k.isSpreadAssignment(z)||k.isSpreadElement(z)){Q=z;continue}return!1}return!1}class h0{#_;constructor(_){this.#_=_}findAt(_,$){let J=this.#$(_,$);if(!J)return[];let Q=this.#_.getProgram(),z=[];for(let W of J)for(let Z of W.references){let Y=Q.getSourceFile(Z.fileName);if(!Y)continue;z.push(q1(Z,Y))}return z}findEnrichedAt(_,$){let J=this.#$(_,$);if(!J)return[];let Q=this.#_.getProgram(),z=Q.getTypeChecker(),W=[];for(let Z of J){let Y=this.#Q(Z,Q,z);for(let X of Z.references){let M=Q.getSourceFile(X.fileName);if(!M)continue;let O=e(M,X.textSpan.start),L=O&&p.isIdentifier(O)?O:void 0;W.push({...q1(X,M),writeKind:L?m0(L):void 0,isAmbient:Y,enclosingScope:x0(L??M)})}}return W}findFileBindings(_){if(this.#_.isDisposed)return[];let $=this.#_.getProgram(),J=$.getSourceFile(_);if(!J)return[];return n0(J,$.getTypeChecker())}#$(_,$){if(this.#_.isDisposed)return null;let Q=this.#_.getProgram().getSourceFile(_);if(!Q)return null;let z=e(Q,$);if(!z||!p.isIdentifier(z))return null;let W=this.#_.getLanguageService().findReferences(_,$);if(!W||W.length===0)return null;return W}#Q(_,$,J){let Q=_.definition,z=$.getSourceFile(Q.fileName);if(!z)return!1;let W=e(z,Q.textSpan.start);if(!W)return!1;let Y=J.getSymbolAtLocation(W)?.declarations;if(!Y||Y.length===0)return!1;return Y.every(y0)}}function n0(_,$){let J=new Map,Q=(W)=>{if(p.isIdentifier(W)&&!NQ(W)){let Z=TQ(W,$);if(Z){let Y=J.get(Z);if(Y)Y.push(W);else J.set(Z,[W])}}p.forEachChild(W,Q)};p.forEachChild(_,Q);let z=[];for(let[W,Z]of J){let Y=W.declarations;if(!Y||Y.length===0)continue;if(Y.every(RQ))continue;let X=Y.every(y0),M=new Set(Y.map((w)=>p.getNameOfDeclaration(w)).filter((w)=>w!==void 0)),O=Y[0],L=p.getNameOfDeclaration(O)??O,C=O.getSourceFile(),N=Z.map((w)=>{let R=w.getStart(_),{line:F,character:G}=_.getLineAndCharacterOfPosition(R),E=m0(w);return{filePath:_.fileName,position:R,line:F+1,column:G,isDefinition:M.has(w),isWrite:E!==void 0,writeKind:E,isAmbient:X,enclosingScope:x0(w)}});z.push({declaration:{filePath:C.fileName,position:L.getStart(C),name:W.getName(),isAmbient:X},references:N})}return z}function NQ(_){let $=_.parent;return p.isPropertyAccessExpression($)&&$.name===_||p.isQualifiedName($)&&$.right===_||p.isPropertyAssignment($)&&$.name===_||p.isBindingElement($)&&$.propertyName===_||p.isJsxAttribute($)&&$.name===_||p.isImportSpecifier($)&&$.propertyName===_||p.isModuleDeclaration($)&&$.name===_&&($.flags&p.NodeFlags.GlobalAugmentation)!==0}function RQ(_){return p.isPropertyDeclaration(_)||p.isPropertySignature(_)||p.isMethodDeclaration(_)||p.isMethodSignature(_)||p.isGetAccessorDeclaration(_)||p.isSetAccessorDeclaration(_)||p.isEnumMember(_)||p.isParameter(_)&&p.isIndexSignatureDeclaration(_.parent)}function TQ(_,$){let J=_.parent;if(p.isShorthandPropertyAssignment(J))return $.getShorthandAssignmentValueSymbol(J);if(p.isExportSpecifier(J)){let Q=J.parent.parent;if(p.isExportDeclaration(Q)&&Q.moduleSpecifier)return;return(J.propertyName??J.name)===_?$.getExportSpecifierLocalTargetSymbol(J):void 0}return $.getSymbolAtLocation(_)}function q1(_,$){let{line:J,character:Q}=$.getLineAndCharacterOfPosition(_.textSpan.start);return{filePath:_.fileName,position:_.textSpan.start,line:J+1,column:Q,isDefinition:_.isDefinition??!1,isWrite:_.isWriteAccess??!1}}import i_ from"typescript";function N1(_,$,J={}){let Q=i_.createSourceFile(_,$,J.target??i_.ScriptTarget.ESNext,!0),z={target:J.target,module:J.module,jsx:J.jsx??(_.endsWith(".tsx")?i_.JsxEmit.Preserve:void 0),jsxFactory:J.jsxFactory,jsxFragmentFactory:J.jsxFragmentFactory,jsxImportSource:J.jsxImportSource,experimentalDecorators:J.experimentalDecorators,useDefineForClassFields:J.useDefineForClassFields,noLib:!0,noResolve:!0,types:[]},W=i_.createCompilerHost(z,!0);W.getSourceFile=(X)=>X===_?Q:void 0;let Z=i_.createProgram([_],z,W),Y=Z.getSourceFile(_);if(!Y)return[];return n0(Y,Z.getTypeChecker())}import h from"typescript";function SQ(_,$){let J=e(_,$);if(!J)return;if(R1(J))return J;let Q=J.parent;for(let z=0;z<5&&Q;z++){if(R1(Q))return Q;Q=Q.parent}return J}function R1(_){return h.isClassDeclaration(_)||h.isClassExpression(_)||h.isFunctionDeclaration(_)||h.isFunctionExpression(_)||h.isArrowFunction(_)||h.isVariableDeclaration(_)||h.isObjectLiteralExpression(_)}function T1(_){if(h.isClassDeclaration(_)||h.isClassExpression(_))return"class";if(h.isFunctionDeclaration(_)||h.isFunctionExpression(_)||h.isArrowFunction(_))return"function";if(h.isObjectLiteralExpression(_))return"object";if(h.isVariableDeclaration(_)&&_.initializer)return T1(_.initializer);return"class"}function GQ(_,$){if(h.isClassDeclaration(_)||h.isFunctionDeclaration(_))return _.name?.getText($)??"";if(h.isClassExpression(_))return _.name?.getText($)??"";if(h.isVariableDeclaration(_)&&h.isIdentifier(_.name))return _.name.getText($);if(h.isFunctionExpression(_))return _.name?.getText($)??"";if(h.isArrowFunction(_)&&_.parent&&h.isVariableDeclaration(_.parent)){if(h.isIdentifier(_.parent.name))return _.parent.name.getText($)}if(h.isObjectLiteralExpression(_)&&_.parent&&h.isVariableDeclaration(_.parent)){if(h.isIdentifier(_.parent.name))return _.parent.name.getText($)}return""}function FQ(_){if(!h.isClassDeclaration(_)&&!h.isClassExpression(_))return!1;let $=_.heritageClauses;if(!$)return!1;return $.some((J)=>J.token===h.SyntaxKind.ImplementsKeyword)}class p0{#_;constructor(_){this.#_=_}findAt(_,$){if(this.#_.isDisposed)return[];let J=this.#_.getProgram(),Q=J.getSourceFile(_);if(!Q)return[];let z=e(Q,$);if(!z||!h.isIdentifier(z))return[];let Z=this.#_.getLanguageService().getImplementationAtPosition(_,$);if(!Z||Z.length===0)return[];let Y=[];for(let X of Z){if(X.kind===h.ScriptElementKind.interfaceElement||X.kind===h.ScriptElementKind.typeElement)continue;let M=J.getSourceFile(X.fileName);if(!M)continue;let O=SQ(M,X.textSpan.start);if(!O)continue;let L=T1(O),C=GQ(O,M),N=FQ(O);Y.push({filePath:X.fileName,symbolName:C,position:X.textSpan.start,kind:L,isExplicit:N})}return Y}}function kQ(_){if(__.isFunctionDeclaration(_))return"function";if(__.isClassDeclaration(_))return"class";if(__.isInterfaceDeclaration(_))return"interface";if(__.isTypeAliasDeclaration(_))return"type";if(__.isEnumDeclaration(_))return"enum";if(__.isVariableDeclaration(_))return"const";if(__.isVariableStatement(_))return"const";return"unknown"}function S1(_){if(_>=97&&_<=122)return!0;if(_>=65&&_<=90)return!0;if(_>=48&&_<=57)return!0;if(_===95||_===36)return!0;return!1}class U0{#_;#$;#Q;#z;#W;#Y=!1;constructor(_,$,J,Q,z){this.#_=_,this.#$=$,this.#Q=J,this.#z=Q,this.#W=z}static create(_,$={}){let J=Q0.create(_,{readConfigFile:$.readConfigFile,resolveNonTrackedFile:$.resolveNonTrackedFile});if(jQ(J))return J;let Q=J,z=$.typeCollector??new P0(Q),W=$.symbolGraph??new f0(Q),Z=$.referenceResolver??new h0(Q),Y=$.implementationFinder??new p0(Q);return new U0(Q,z,W,Z,Y)}get isDisposed(){return this.#Y}collectTypeAt(_,$){return this.#J(),this.#$.collectAt(_,$)}collectFileTypes(_){return this.#J(),this.#$.collectFile(_)}collectTypesAtPositions(_,$){return this.#J(),this.#$.collectAtPositions(_,$)}collectAtSpan(_,$){return this.#J(),this.#$.collectAtSpan(_,$)}isThenableAtSpan(_,$,J){return this.#J(),this.#$.isThenableAtSpan(_,$,J)}contextualCallReturnsAtSpan(_,$){return this.#J(),this.#$.contextualCallReturnsAtSpan(_,$)}findReferences(_,$){return this.#J(),this.#z.findAt(_,$)}findEnrichedReferences(_,$){return this.#J(),this.#z.findEnrichedAt(_,$)}getFileBindings(_){return this.#J(),this.#z.findFileBindings(_)}getStandaloneFileBindings(_,$){this.#J();let J=this.#_.getCompilerOptions();return N1(_,$,{target:J.target,module:J.module,jsx:J.jsx,jsxFactory:J.jsxFactory,jsxFragmentFactory:J.jsxFragmentFactory,jsxImportSource:J.jsxImportSource,experimentalDecorators:J.experimentalDecorators,useDefineForClassFields:J.useDefineForClassFields})}getFileBindingsBatch(_){this.#J();for(let J of _)this.notifyFileChanged(J.filePath,J.content);let $=new Map;for(let J of _)$.set(J.filePath,this.#z.findFileBindings(J.filePath));return $}findImplementations(_,$){return this.#J(),this.#W.findAt(_,$)}isTypeAssignableTo(_,$,J,Q){return this.#J(),this.#$.isAssignableTo(_,$,J,Q)}isTypeAssignableToType(_,$,J,Q){return this.#J(),this.#$.isAssignableToType(_,$,J,Q)}isTypeAssignableToTypeAtPositions(_,$,J,Q){return this.#J(),this.#$.isAssignableToTypeAtPositions(_,$,J,Q)}getSymbolNode(_,$){return this.#J(),this.#Q.get(_,$)}getBaseTypes(_,$){this.#J();let J=this.#_.getProgram(),Q=J.getSourceFile(_);if(!Q)return null;let z=e(Q,$);if(!z)return null;let W=J.getTypeChecker(),Z=W.getTypeAtLocation(z);if(!(Z.flags&__.TypeFlags.Object)||!(Z.objectFlags&__.ObjectFlags.ClassOrInterface))return null;let Y=W.getBaseTypes(Z);if(!Y||Y.length===0)return[];let X=new Map;return Y.map((M)=>H_(W,M,0,X))}getModuleInterface(_){this.#J();let $=[],J=this.#_.getProgram(),Q=J.getSourceFile(_);if(!Q)return{filePath:_,exports:$};let z=J.getTypeChecker(),W=z.getSymbolAtLocation(Q);if(W){let Z=z.getExportsOfModule(W),Y=new Map;for(let X of Z){let M=X.getName(),O=X.declarations?.[0],L="unknown";if(O){if(L=kQ(O),L==="unknown"&&__.isExportAssignment(O))L="const"}let C=null;try{let N=z.getTypeOfSymbolAtLocation(X,O??Q);C=H_(z,N,0,Y)}catch{}$.push({name:M,kind:L,resolvedType:C})}}return{filePath:_,exports:$}}notifyFileChanged(_,$){if(this.#Y)return;this.#_.notifyFileChanged(_,$),this.#Q.clear()}notifyFileDeleted(_){if(this.#Y)return;this.#_.removeFile(_),this.#Q.clear()}lineColumnToPosition(_,$,J){this.#J();let Q=this.#_.getProgram().getSourceFile(_);if(!Q)return null;try{return __.getPositionOfLineAndCharacter(Q,$-1,J)}catch{return null}}findNamePosition(_,$,J){this.#J();let Q=this.#_.getProgram().getSourceFile(_);if(!Q)return null;let z=Q.getFullText(),W=$;while(W<z.length){let Z=z.indexOf(J,W);if(Z<0)return null;let Y=Z>0?z.charCodeAt(Z-1):32,X=Z+J.length<z.length?z.charCodeAt(Z+J.length):32;if(!S1(Y)&&!S1(X))return Z;W=Z+1}return null}getDiagnostics(_,$){this.#J();let J=this.#_.getProgram(),Q=J.getSourceFile(_);if(!Q)return[];let z={[__.DiagnosticCategory.Error]:"error",[__.DiagnosticCategory.Warning]:"warning",[__.DiagnosticCategory.Suggestion]:"suggestion",[__.DiagnosticCategory.Message]:"suggestion"};return(($?.preEmit)?__.getPreEmitDiagnostics(J,Q):J.getSemanticDiagnostics(Q)).map((Z)=>{let Y=1,X=0;if(Z.file&&Z.start!==void 0){let M=__.getLineAndCharacterOfPosition(Z.file,Z.start);Y=M.line+1,X=M.character}return{filePath:Z.file?.fileName??_,line:Y,column:X,message:__.flattenDiagnosticMessageText(Z.messageText,`
|
|
10
|
-
`),code:Z.code,category:z[Z.category]??"error"}})}dispose(){if(this.#Y)return;this.#Y=!0,this.#$.clearProbe(),this.#_.dispose(),this.#Q.clear()}#J(){if(this.#Y)throw Error("SemanticLayer is disposed")}}import{eq as G_,and as G1,sql as gQ}from"drizzle-orm";var F1=80;class d0{db;constructor(_){this.db=_}insertBatch(_,$,J){if(!J.length)return;let Q=J.map((z)=>({project:_,filePath:$,tag:z.tag,value:z.value,source:z.source,symbolName:z.symbolName,startLine:z.startLine,startColumn:z.startColumn,endLine:z.endLine,endColumn:z.endColumn,indexedAt:z.indexedAt}));for(let z=0;z<Q.length;z+=F1)this.db.drizzleDb.insert(Z_).values(Q.slice(z,z+F1)).run()}deleteFileAnnotations(_,$){this.db.drizzleDb.delete(Z_).where(G1(G_(Z_.project,_),G_(Z_.filePath,$))).run()}search(_){let $=this.db.drizzleDb.select().from(Z_).where(G1(_.project?G_(Z_.project,_.project):void 0,_.tag?G_(Z_.tag,_.tag):void 0,_.filePath?G_(Z_.filePath,_.filePath):void 0,_.symbolName?G_(Z_.symbolName,_.symbolName):void 0,_.source?G_(Z_.source,_.source):void 0,_.ftsQuery?gQ`${Z_.id} IN (SELECT rowid FROM annotations_fts WHERE annotations_fts MATCH ${_.ftsQuery})`:void 0));return(_.limit!==void 0?$.limit(_.limit):$).all()}}import{eq as b_,and as j1,sql as c_,gt as vQ,gte as EQ}from"drizzle-orm";var k1=80;class l0{db;constructor(_){this.db=_}insertBatch(_){if(!_.length)return;let $=_.map((J)=>({project:J.project,changeType:J.changeType,symbolName:J.symbolName,symbolKind:J.symbolKind,filePath:J.filePath,oldName:J.oldName,oldFilePath:J.oldFilePath,fingerprint:J.fingerprint,changedAt:J.changedAt,isFullIndex:J.isFullIndex,indexRunId:J.indexRunId}));for(let J=0;J<$.length;J+=k1)this.db.drizzleDb.insert($_).values($.slice(J,J+k1)).run()}getSince(_){return this.db.drizzleDb.select().from($_).where(j1(b_($_.project,_.project),EQ($_.changedAt,_.since),_.symbolName?b_($_.symbolName,_.symbolName):void 0,_.changeTypes?.length?c_`${$_.changeType} IN (${c_.join(_.changeTypes.map(($)=>c_`${$}`),c_`, `)})`:void 0,_.filePath?b_($_.filePath,_.filePath):void 0,_.includeFullIndex?void 0:b_($_.isFullIndex,0),_.indexRunId?b_($_.indexRunId,_.indexRunId):void 0,_.afterId?vQ($_.id,_.afterId):void 0)).orderBy($_.id).limit(_.limit).all()}pruneOlderThan(_,$){return this.db.drizzleDb.delete($_).where(j1(b_($_.project,_),c_`${$_.changedAt} < ${$}`)).run().changes}}function g1(_){let{annotationRepo:$,project:J,query:Q}=_,z=Q.project??J,W;if(Q.text){let Y=k_(Q.text);if(Y)W=Y}return $.search({project:z,tag:Q.tag,filePath:Q.filePath,symbolName:Q.symbolName,source:Q.source,ftsQuery:W,limit:Q.limit}).map((Y)=>({tag:Y.tag,value:Y.value,source:Y.source,filePath:Y.filePath,symbolName:Y.symbolName,span:{start:{line:Y.startLine,column:Y.startColumn},end:{line:Y.endLine,column:Y.endColumn}}}))}class V0{options;adjacencyList=new Map;reverseAdjacencyList=new Map;constructor(_){this.options=_}build(){this.adjacencyList=new Map,this.reverseAdjacencyList=new Map;let $=[this.options.project,...this.options.additionalProjects??[]].flatMap((J)=>[...this.options.relationRepo.getByType(J,"imports"),...this.options.relationRepo.getByType(J,"type-references"),...this.options.relationRepo.getByType(J,"re-exports")]);for(let J of $){let{srcFilePath:Q,dstFilePath:z}=J;if(z===null)continue;if(!this.adjacencyList.has(Q))this.adjacencyList.set(Q,new Set);if(this.adjacencyList.get(Q).add(z),!this.adjacencyList.has(z))this.adjacencyList.set(z,new Set);if(!this.reverseAdjacencyList.has(z))this.reverseAdjacencyList.set(z,new Set);this.reverseAdjacencyList.get(z).add(Q)}}patchFiles(_,$,J){let Q=new Set([..._,...$]);for(let z of Q){let W=this.adjacencyList.get(z);if(W){for(let Y of W)this.reverseAdjacencyList.get(Y)?.delete(z);W.clear()}let Z=this.reverseAdjacencyList.get(z);if(Z){for(let Y of Z)this.adjacencyList.get(Y)?.delete(z);Z.clear()}}for(let z of $)this.adjacencyList.delete(z),this.reverseAdjacencyList.delete(z);for(let z of _){let W=J(z);for(let Z of W){if(!this.adjacencyList.has(Z.srcFilePath))this.adjacencyList.set(Z.srcFilePath,new Set);if(this.adjacencyList.get(Z.srcFilePath).add(Z.dstFilePath),!this.adjacencyList.has(Z.dstFilePath))this.adjacencyList.set(Z.dstFilePath,new Set);if(!this.reverseAdjacencyList.has(Z.dstFilePath))this.reverseAdjacencyList.set(Z.dstFilePath,new Set);this.reverseAdjacencyList.get(Z.dstFilePath).add(Z.srcFilePath)}}}getDependencies(_){return Array.from(this.adjacencyList.get(_)??[])}getDependents(_){return Array.from(this.reverseAdjacencyList.get(_)??[])}getTransitiveDependents(_){let $=new Set,J=[_];while(J.length>0){let Q=J.shift();for(let z of this.reverseAdjacencyList.get(Q)??[])if(!$.has(z))$.add(z),J.push(z)}return Array.from($)}hasCycle(){let _=new Set,$=new Set;for(let J of this.adjacencyList.keys()){if(_.has(J))continue;let Q=[{node:J,entered:!1}];while(Q.length>0){let z=Q.pop();if(z.entered){$.delete(z.node);continue}if($.has(z.node))return!0;if(_.has(z.node))continue;_.add(z.node),$.add(z.node),Q.push({node:z.node,entered:!0});for(let W of this.adjacencyList.get(z.node)??[]){if($.has(W))return!0;if(!_.has(W))Q.push({node:W,entered:!1})}}}return!1}getAffectedByChange(_){let $=new Set;for(let J of _)for(let Q of this.getTransitiveDependents(J))$.add(Q);return Array.from($)}getAdjacencyList(){let _=new Map;for(let[$,J]of this.adjacencyList)_.set($,Array.from(J));return _}getTransitiveDependencies(_){let $=new Set,J=[_];while(J.length>0){let Q=J.shift();for(let z of this.adjacencyList.get(Q)??[])if(!$.has(z))$.add(z),J.push(z)}return Array.from($)}getCyclePaths(_){let $=_?.maxCycles??1/0;if($<=0)return[];let J=new Map;for(let[Q,z]of this.adjacencyList)J.set(Q,Array.from(z));return yQ(J,$)}}var uQ=(_,$)=>_.localeCompare($);function bQ(_){let $=_.length>1&&_[0]===_[_.length-1]?_.slice(0,-1):[..._];if($.length===0)return[];let J=$;for(let Q=1;Q<$.length;Q++){let z=$.slice(Q).concat($.slice(0,Q));if(z.join("::")<J.join("::"))J=z}return[...J]}function i0(_,$,J){let Q=bQ(J);if(Q.length===0)return!1;let z=Q.join("->");if(_.has(z))return!1;return _.add(z),$.push(Q),!0}function PQ(_){let $=0,J=[],Q=new Set,z=new Map,W=new Map,Z=[],Y=(X)=>{z.set(X,$),W.set(X,$),$+=1,J.push(X),Q.add(X);for(let M of _.get(X)??[])if(!z.has(M))Y(M),W.set(X,Math.min(W.get(X)??0,W.get(M)??0));else if(Q.has(M))W.set(X,Math.min(W.get(X)??0,z.get(M)??0));if(W.get(X)===z.get(X)){let M=[],O="";do O=J.pop()??"",Q.delete(O),M.push(O);while(O!==X&&J.length>0);Z.push(M)}};for(let X of _.keys())if(!z.has(X))Y(X);return{components:Z}}function fQ(_,$,J){let Q=[],z=new Set,W=[..._].sort(uQ),Z=(Y,X,M)=>{X.delete(Y);let O=M.get(Y);if(!O)return;for(let L of O)if(X.has(L))Z(L,X,M);O.clear()};for(let Y=0;Y<W.length&&Q.length<J;Y++){let X=W[Y]??"",M=new Set(W.slice(Y)),O=new Set,L=new Map,C=[],N=(R)=>($.get(R)??[]).filter((F)=>M.has(F)),w=(R)=>{if(Q.length>=J)return!0;let F=!1;C.push(R),O.add(R);for(let G of N(R)){if(Q.length>=J)break;if(G===X)i0(z,Q,C.concat(X)),F=!0;else if(!O.has(G)){if(w(G))F=!0}}if(F)Z(R,O,L);else for(let G of N(R)){let E=L.get(G)??new Set;E.add(R),L.set(G,E)}return C.pop(),F};w(X)}return Q}function yQ(_,$){let{components:J}=PQ(_),Q=[],z=new Set;for(let W of J){if(Q.length>=$)break;if(W.length===0)continue;if(W.length===1){let X=W[0]??"";if((_.get(X)??[]).includes(X))i0(z,Q,[X,X]);continue}let Z=$-Q.length,Y=fQ(W,_,Z);for(let X of Y){if(Q.length>=$)break;i0(z,Q,X)}}return Q}var xQ=15000;function O0(_){_.graphCache=null,_.graphCacheKey=null,_.graphCacheBuiltAt=null}function F_(_,$){let J=$??"__cross__";if(_.graphCache&&_.graphCacheBuiltAt!==null){if(Date.now()-_.graphCacheBuiltAt>xQ)_.graphCache=null,_.graphCacheKey=null,_.graphCacheBuiltAt=null}if(_.graphCache&&_.graphCacheKey===J)return _.graphCache;let Q=new V0({relationRepo:_.relationRepo,project:$??_.defaultProject,additionalProjects:$?void 0:_.boundaries?.map((z)=>z.project)});return Q.build(),_.graphCache=Q,_.graphCacheKey=J,_.graphCacheBuiltAt=Date.now(),Q}function v1(_,$,J,Q=1e4){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.relationSearchFn({relationRepo:_.relationRepo,project:J??_.defaultProject,query:{srcFilePath:$,type:"imports",project:J??_.defaultProject,limit:Q}}).filter((z)=>z.dstFilePath!==null).map((z)=>z.dstFilePath)}catch(z){if(z instanceof V)throw z;throw new V("search","Gildash: getDependencies failed",{cause:z})}}function E1(_,$,J,Q=1e4){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.relationSearchFn({relationRepo:_.relationRepo,project:J??_.defaultProject,query:{dstFilePath:$,type:"imports",project:J??_.defaultProject,limit:Q}}).map((z)=>z.srcFilePath)}catch(z){if(z instanceof V)throw z;throw new V("search","Gildash: getDependents failed",{cause:z})}}async function u1(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return F_(_,J).getAffectedByChange($)}catch(Q){if(Q instanceof V)throw Q;throw new V("search","Gildash: getAffected failed",{cause:Q})}}async function b1(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return F_(_,$).hasCycle()}catch(J){if(J instanceof V)throw J;throw new V("search","Gildash: hasCycle failed",{cause:J})}}async function P1(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return F_(_,$).getAdjacencyList()}catch(J){if(J instanceof V)throw J;throw new V("search","Gildash: getImportGraph failed",{cause:J})}}async function f1(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return F_(_,J).getTransitiveDependencies($)}catch(Q){if(Q instanceof V)throw Q;throw new V("search","Gildash: getTransitiveDependencies failed",{cause:Q})}}async function y1(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return F_(_,J).getTransitiveDependents($)}catch(Q){if(Q instanceof V)throw Q;throw new V("search","Gildash: getTransitiveDependents failed",{cause:Q})}}async function x1(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return F_(_,$).getCyclePaths(J)}catch(Q){if(Q instanceof V)throw Q;throw new V("search","Gildash: getCyclePaths failed",{cause:Q})}}async function m1(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{let Q=F_(_,J);return{filePath:$,fanIn:Q.getDependents($).length,fanOut:Q.getDependencies($).length}}catch(Q){if(Q instanceof V)throw Q;throw new V("search","Gildash: getFanMetrics failed",{cause:Q})}}var nQ=30000,h1=15000,pQ=10;function dQ(_,$){_.boundaries=$,_.defaultProject=$[0]?.project??P_.basename(_.projectRoot)}function lQ(_,$){return(J)=>{for(let Q of _.onFileChangedCallbacks)try{Q(J)}catch(z){_.logger.error("[Gildash] onFileChanged callback threw:",z)}if($.handleWatcherEvent?.(J),_.semanticLayer)if(J.eventType==="delete")try{_.semanticLayer.notifyFileDeleted(J.filePath)}catch(Q){_.logger.error("[Gildash] semanticLayer.notifyFileDeleted threw:",Q);for(let z of _.onErrorCallbacks)try{z(Q instanceof V?Q:new V("semantic","semantic notifyFileDeleted failed",{cause:Q}))}catch{}}else _.readFileFn(J.filePath).then((Q)=>{try{_.semanticLayer?.notifyFileChanged(J.filePath,Q)}catch(z){_.logger.error("[Gildash] semanticLayer.notifyFileChanged threw:",z);for(let W of _.onErrorCallbacks)try{W(z instanceof V?z:new V("semantic","semantic notifyFileChanged failed",{cause:z}))}catch{}}}).catch((Q)=>{_.logger.error("[Gildash] failed to read file for semantic layer",J.filePath,Q);try{_.semanticLayer?.notifyFileDeleted(J.filePath)}catch(z){_.logger.error("[Gildash] semanticLayer.notifyFileDeleted threw during read error recovery:",z)}})}}async function iQ(_){if(!_.semanticLayer)return;let $=_.fileRepo.getAllFiles(_.defaultProject);await Promise.all($.map(async(J)=>{try{let Q=P_.resolve(_.projectRoot,J.filePath),z=await _.readFileFn(Q);_.semanticLayer?.notifyFileChanged(Q,z)}catch{}}))}async function n1(_,$){let J=_.coordinatorFactory?_.coordinatorFactory():new j0({projectRoot:_.projectRoot,boundaries:_.boundaries,extensions:_.extensions,ignorePatterns:_.ignorePatterns,dbConnection:_.db,parseCache:_.parseCache,fileRepo:_.fileRepo,symbolRepo:_.symbolRepo,relationRepo:_.relationRepo,annotationRepo:_.annotationRepo??void 0,changelogRepo:_.changelogRepo??void 0,onBoundariesChanged:(Q)=>dQ(_,Q),logger:_.logger});_.coordinator=J;for(let Q of _.onIndexedCallbacks)J.onIndexed(Q);if(J.onIndexed((Q)=>{let z=Q.changedFiles.length+Q.deletedFiles.length;if(_.graphCache&&z>0&&z<100){let W=_.relationRepo;_.graphCache.patchFiles(Q.changedFiles,Q.deletedFiles,(Z)=>{return[_.defaultProject,..._.boundaries.map((X)=>X.project)].flatMap((X)=>W.getByType(X,"imports").concat(W.getByType(X,"type-references")).concat(W.getByType(X,"re-exports"))).filter((X)=>X.dstFilePath!==null&&(X.srcFilePath===Z||X.dstFilePath===Z)).map((X)=>({srcFilePath:X.srcFilePath,dstFilePath:X.dstFilePath}))}),_.graphCacheBuiltAt=Date.now()}else O0(_)}),$.isWatchMode){let Q=_.watcherFactory?_.watcherFactory():new A0({projectRoot:_.projectRoot,ignorePatterns:_.ignorePatterns,extensions:_.extensions},void 0,_.logger);await Q.start(lQ(_,J)).then((z)=>{if(a_(z))throw z.data}),_.watcher=Q,_.timer=setInterval(()=>{if(_.closed)return;_.updateHeartbeatFn(_.db,process.pid)},nQ)}await J.fullIndex(),await iQ(_)}function cQ(_,$){let J=["SIGTERM","SIGINT","beforeExit"];for(let Q of J){let z=()=>{$().catch((W)=>_.logger.error("[Gildash] close error during signal",Q,W))};if(Q==="beforeExit")process.on("beforeExit",z);else process.on(Q,z);_.signalHandlers.push([Q,z])}}async function p1(_){let{projectRoot:$,extensions:J=[".ts",".mts",".cts"],ignorePatterns:Q=["**/node_modules/**"],parseCacheCapacity:z=500,logger:W=console,existsSyncFn:Z=hQ,dbConnectionFactory:Y,watcherFactory:X,coordinatorFactory:M,repositoryFactory:O,acquireWatcherRoleFn:L=I1,releaseWatcherRoleFn:C=D1,updateHeartbeatFn:N=C1,discoverProjectsFn:w=o_,parseSourceFn:R=v_,extractSymbolsFn:F=R_,extractRelationsFn:G=d_,symbolSearchFn:E=g0,relationSearchFn:b=v0,patternSearchFn:m=E0,loadTsconfigPathsFn:l=n_,readFileFn:i=async(s)=>Bun.file(s).text(),unlinkFn:W_=async(s)=>{await Bun.file(s).unlink()},watchMode:X_,semantic:M_,semanticLayerFactory:U_}=_;if(!P_.isAbsolute($))throw new V("validation",`Gildash: projectRoot must be an absolute path, got: "${$}"`);if(!Z($))throw new V("validation",`Gildash: projectRoot does not exist: "${$}"`);let Y_=Y?Y():new B0({projectRoot:$}),c=Y_.open();if(a_(c))throw c.data;try{let s=await w($),D_=s[0]?.project??P_.basename($),D=O?O():(()=>{let S=Y_;return{fileRepo:new w0(S),symbolRepo:new I0(S),relationRepo:new D0(S),parseCache:new k0(z)}})(),q=O?null:Y_,U=q?new d0(q):null,H=q?new l0(q):null,K=X_??!0,B=crypto.randomUUID(),A;if(K)A=await Promise.resolve(L(Y_,process.pid,{instanceId:B}));else A="owner";let I={projectRoot:$,extensions:J,ignorePatterns:Q,logger:W,defaultProject:D_,role:A,db:Y_,symbolRepo:D.symbolRepo,relationRepo:D.relationRepo,fileRepo:D.fileRepo,parseCache:D.parseCache,annotationRepo:U,changelogRepo:H,annotationSearchFn:g1,releaseWatcherRoleFn:C,parseSourceFn:R,extractSymbolsFn:F,extractRelationsFn:G,symbolSearchFn:E,relationSearchFn:b,patternSearchFn:m,readFileFn:i,unlinkFn:W_,existsSyncFn:Z,acquireWatcherRoleFn:L,updateHeartbeatFn:N,watcherFactory:X,coordinatorFactory:M,instanceId:B,closed:!1,coordinator:null,watcher:null,timer:null,signalHandlers:[],tsconfigPaths:null,boundaries:s,onIndexedCallbacks:new Set,onFileChangedCallbacks:new Set,onErrorCallbacks:new Set,onRoleChangedCallbacks:new Set,graphCache:null,graphCacheKey:null,graphCacheBuiltAt:null,semanticLayer:null};if(t_($),I.tsconfigPaths=await l($),M_){let S=P_.join($,"tsconfig.json");try{if(U_)I.semanticLayer=U_(S);else{let T=U0.create(S);if(a_(T))throw T.data;I.semanticLayer=T}}catch(T){if(T instanceof V)throw T;throw new V("semantic","Gildash: semantic layer creation failed",{cause:T})}}if(A==="owner")await n1(I,{isWatchMode:K});else{let S=0,T=async()=>{try{let j=await Promise.resolve(I.acquireWatcherRoleFn(I.db,process.pid,{instanceId:I.instanceId}));if(S=0,j==="owner"){I.role="owner";for(let g of I.onRoleChangedCallbacks)try{g("owner")}catch(P){I.logger.error("[Gildash] onRoleChanged callback threw:",P)}clearInterval(I.timer),I.timer=null;try{await n1(I,{isWatchMode:!0})}catch(g){if(I.logger.error("[Gildash] owner promotion failed, reverting to reader",g),I.role="reader",I.timer!==null)clearInterval(I.timer),I.timer=null;if(I.watcher){let P=await I.watcher.close();if(a_(P))I.logger.error("[Gildash] watcher close error during promotion rollback",P.data);I.watcher=null}if(I.coordinator)await I.coordinator.shutdown().catch((P)=>I.logger.error("[Gildash] coordinator shutdown error during promotion rollback",P)),I.coordinator=null;try{I.releaseWatcherRoleFn(I.db,process.pid)}catch(P){I.logger.error("[Gildash] failed to release watcher role during promotion rollback",P)}I.timer=setInterval(T,h1)}}}catch(j){S++;let g=j instanceof V?j:new V("watcher","Gildash: healthcheck error",{cause:j});for(let P of I.onErrorCallbacks)try{P(g)}catch(d){I.logger.error("[Gildash] onError callback threw:",d)}if(I.logger.error("[Gildash] healthcheck error",j),S>=pQ)I.logger.error("[Gildash] healthcheck failed too many times, shutting down"),clearInterval(I.timer),I.timer=null,H0(I).catch((P)=>I.logger.error("[Gildash] close error during healthcheck shutdown",P))}};I.timer=setInterval(T,h1)}if(K)cQ(I,()=>H0(I));return I}catch(s){if(Y_.close(),s instanceof V)throw s;throw new V("store","Gildash: initialization failed",{cause:s})}}async function H0(_,$){if(_.closed)return;_.closed=!0;let J=[];for(let[Q,z]of _.signalHandlers)if(Q==="beforeExit")process.off("beforeExit",z);else process.off(Q,z);if(_.signalHandlers=[],_.semanticLayer){try{_.semanticLayer.dispose()}catch(Q){J.push(Q instanceof Error?Q:Error(String(Q)))}_.semanticLayer=null}if(_.coordinator)try{await _.coordinator.shutdown()}catch(Q){J.push(Q instanceof Error?Q:Error(String(Q)))}if(_.watcher){let Q=await _.watcher.close();if(a_(Q))J.push(Q.data)}if(_.timer!==null)clearInterval(_.timer),_.timer=null;try{_.releaseWatcherRoleFn(_.db,process.pid)}catch(Q){J.push(Q instanceof Error?Q:Error(String(Q)))}try{_.db.close()}catch(Q){J.push(Q instanceof Error?Q:Error(String(Q)))}if($?.cleanup)for(let Q of["","-wal","-shm"])try{await _.unlinkFn(P_.join(_.projectRoot,A_,s_+Q))}catch{}if(J.length>0)throw new V("close","Gildash: one or more errors occurred during close()",{cause:J})}import{isErr as d1}from"@zipbul/result";function l1(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");let z=_.parseSourceFn($,J,Q);if(d1(z))throw z.data;return _.parseCache.set($,z),z}async function i1(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");let Q=new Map,z=[];return await Promise.all($.map(async(W)=>{try{let Z=await _.readFileFn(W),Y=_.parseSourceFn(W,Z,J);if(!d1(Y))Q.set(W,Y);else z.push({filePath:W,error:Y.data})}catch(Z){z.push({filePath:W,error:Z instanceof Error?Z:Error(String(Z))})}})),{parsed:Q,failures:z}}function c1(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");return _.parseCache.get($)}function a1(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");return _.extractSymbolsFn($)}function s1(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");return _.extractRelationsFn($.program,$.filePath,_.tsconfigPaths??void 0)}import r1 from"path";function o1(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.symbolRepo.getStats($??_.defaultProject)}catch(J){if(J instanceof V)throw J;throw new V("store","Gildash: getStats failed",{cause:J})}}function c0(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.symbolSearchFn({symbolRepo:_.symbolRepo,project:_.defaultProject,query:$})}catch(J){if(J instanceof V)throw J;throw new V("search","Gildash: searchSymbols failed",{cause:J})}}function t1(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.relationSearchFn({relationRepo:_.relationRepo,project:_.defaultProject,query:$})}catch(J){if(J instanceof V)throw J;throw new V("search","Gildash: searchRelations failed",{cause:J})}}function e1(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.symbolSearchFn({symbolRepo:_.symbolRepo,project:void 0,query:$})}catch(J){if(J instanceof V)throw J;throw new V("search","Gildash: searchAllSymbols failed",{cause:J})}}function _$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.relationSearchFn({relationRepo:_.relationRepo,project:void 0,query:$})}catch(J){if(J instanceof V)throw J;throw new V("search","Gildash: searchAllRelations failed",{cause:J})}}function $$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.fileRepo.getAllFiles($??_.defaultProject)}catch(J){if(J instanceof V)throw J;throw new V("store","Gildash: listIndexedFiles failed",{cause:J})}}function J$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.relationSearchFn({relationRepo:_.relationRepo,project:J??_.defaultProject,query:{srcFilePath:$,dstFilePath:$,limit:1e4}})}catch(Q){if(Q instanceof V)throw Q;throw new V("search","Gildash: getInternalRelations failed",{cause:Q})}}function Q$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");try{let z=Q??_.defaultProject,W=_.symbolSearchFn({symbolRepo:_.symbolRepo,project:z,query:{text:$,exact:!0,filePath:J,limit:1}});if(W.length===0)return null;let Z=W[0],Y=Z.detail,X={...Z,members:Y.members,jsDoc:Y.jsDoc,parameters:Y.parameters,returnType:Y.returnType,heritage:Y.heritage,decorators:Y.decorators,typeParameters:Y.typeParameters,initializer:Y.initializer};if(_.semanticLayer)try{let M=r1.isAbsolute(J)?J:r1.resolve(_.projectRoot,J),O=_.semanticLayer.lineColumnToPosition(M,Z.span.start.line,Z.span.start.column);if(O!==null){let L=_.semanticLayer.findNamePosition(M,O,Z.name)??O,C=_.semanticLayer.collectTypeAt(M,L);if(C)X.resolvedType=C}}catch{}return X}catch(z){if(z instanceof V)throw z;throw new V("search","Gildash: getFullSymbol failed",{cause:z})}}function z$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{let Q=J??_.defaultProject,z=_.fileRepo.getFile(Q,$);if(!z)throw new V("search",`Gildash: file '${$}' is not in the index`);let W=_.symbolRepo.getFileSymbols(Q,$),Z=_.relationRepo.getOutgoing(Q,$);return{filePath:z.filePath,lineCount:z.lineCount??0,size:z.size,symbolCount:W.length,exportedSymbolCount:W.filter((Y)=>Y.isExported).length,relationCount:Z.length}}catch(Q){if(Q instanceof V)throw Q;throw new V("store","Gildash: getFileStats failed",{cause:Q})}}function W$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{return _.fileRepo.getFile(J??_.defaultProject,$)}catch(Q){if(Q instanceof V)throw Q;throw new V("store","Gildash: getFileInfo failed",{cause:Q})}}function Y$(_,$,J){return c0(_,{filePath:$,project:J??void 0,limit:1e4})}function Z$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{let z=_.symbolSearchFn({symbolRepo:_.symbolRepo,project:J??_.defaultProject,query:{filePath:$,isExported:!0}}).map((W)=>({name:W.name,kind:W.kind,parameters:W.detail.parameters?`(${W.detail.parameters.map((Z)=>`${Z.name}${Z.isOptional?"?":""}: ${Z.type??"unknown"}`).join(", ")})`:void 0,returnType:W.detail.returnType??void 0,jsDoc:W.detail.jsDoc?.description??void 0}));return{filePath:$,exports:z}}catch(Q){if(Q instanceof V)throw Q;throw new V("search","Gildash: getModuleInterface failed",{cause:Q})}}import v from"path";function f_(_,$,J,Q){let z=Q??_.defaultProject,W=v.isAbsolute(J)?v.relative(_.projectRoot,J):J,Z=_.symbolSearchFn({symbolRepo:_.symbolRepo,project:z,query:{text:$,exact:!0,filePath:W,limit:1}});if(Z.length===0)return null;let Y=Z[0],X=v.isAbsolute(J)?J:v.resolve(_.projectRoot,J),M=_.semanticLayer.lineColumnToPosition(X,Y.span.start.line,Y.span.start.column);if(M===null)return null;let O=_.semanticLayer.findNamePosition(X,M,Y.name)??M;return{sym:Y,position:O,absPath:X}}function X$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let z=f_(_,$,J,Q);if(!z)return null;return _.semanticLayer.collectTypeAt(z.absPath,z.position)}catch(z){if(z instanceof V)throw z;throw new V("search","Gildash: getResolvedType failed",{cause:z})}}function U$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let z=f_(_,$,J,Q);if(!z)throw new V("search",`Gildash: symbol '${$}' not found in '${J}'`);return _.semanticLayer.findReferences(z.absPath,z.position)}catch(z){if(z instanceof V)throw z;throw new V("search","Gildash: getSemanticReferences failed",{cause:z})}}function V$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let z=f_(_,$,J,Q);if(!z)throw new V("search",`Gildash: symbol '${$}' not found in '${J}'`);return _.semanticLayer.findEnrichedReferences(z.absPath,z.position)}catch(z){if(z instanceof V)throw z;throw new V("search","Gildash: getEnrichedReferences failed",{cause:z})}}function O$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let z=f_(_,$,J,Q);if(!z)throw new V("search",`Gildash: symbol '${$}' not found in '${J}'`);return _.semanticLayer.findImplementations(z.absPath,z.position)}catch(z){if(z instanceof V)throw z;throw new V("search","Gildash: getImplementations failed",{cause:z})}}function H$(_,$,J,Q,z,W){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Z=f_(_,$,J,W);if(!Z)throw new V("search",`Gildash: source symbol '${$}' not found in '${J}'`);let Y=f_(_,Q,z,W);if(!Y)throw new V("search",`Gildash: target symbol '${Q}' not found in '${z}'`);return _.semanticLayer.isTypeAssignableTo(Z.absPath,Z.position,Y.absPath,Y.position)}catch(Z){if(Z instanceof V)throw Z;throw new V("semantic","Gildash: isTypeAssignableTo failed",{cause:Z})}}function K$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let J=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.collectFileTypes(J)}catch(J){if(J instanceof V)throw J;throw new V("semantic","Gildash: getFileTypes failed",{cause:J})}}function M$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let z=v.isAbsolute($)?$:v.resolve(_.projectRoot,$),W=_.semanticLayer.lineColumnToPosition(z,J,Q);if(W===null)return null;return _.semanticLayer.collectTypeAt(z,W)}catch(z){if(z instanceof V)throw z;throw new V("semantic","Gildash: getResolvedTypeAt failed",{cause:z})}}function L$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let J=v.isAbsolute($.source.filePath)?$.source.filePath:v.resolve(_.projectRoot,$.source.filePath),Q=v.isAbsolute($.target.filePath)?$.target.filePath:v.resolve(_.projectRoot,$.target.filePath),z=_.semanticLayer.lineColumnToPosition(J,$.source.line,$.source.column);if(z===null)return null;let W=_.semanticLayer.lineColumnToPosition(Q,$.target.line,$.target.column);if(W===null)return null;return _.semanticLayer.isTypeAssignableTo(J,z,Q,W)}catch(J){if(J instanceof V)throw J;throw new V("semantic","Gildash: isTypeAssignableToAt failed",{cause:J})}}function B$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{return _.semanticLayer.getModuleInterface($)}catch(J){if(J instanceof V)throw J;throw new V("search","Gildash: getSemanticModuleInterface failed",{cause:J})}}function w$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.getBaseTypes(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getBaseTypes failed",{cause:Q})}}function I$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.collectTypesAtPositions(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getResolvedTypesAtPositions failed",{cause:Q})}}function D$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.collectAtSpan(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getExpressionTypeAtSpan failed",{cause:Q})}}function C$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let z=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.isThenableAtSpan(z,J,Q)}catch(z){if(z instanceof V)throw z;throw new V("semantic","Gildash: isThenableAtSpan failed",{cause:z})}}function A$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.contextualCallReturnsAtSpan(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getContextualCallReturnsAtSpan failed",{cause:Q})}}function q$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.collectTypeAt(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getResolvedTypeAtPosition failed",{cause:Q})}}function N$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.findReferences(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getSemanticReferencesAtPosition failed",{cause:Q})}}function R$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.findEnrichedReferences(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getEnrichedReferencesAtPosition failed",{cause:Q})}}function T$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let J=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.getFileBindings(J)}catch(J){if(J instanceof V)throw J;throw new V("semantic","Gildash: getFileBindings failed",{cause:J})}}function S$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let J=$.map((W)=>({orig:W.filePath,abs:v.isAbsolute(W.filePath)?W.filePath:v.resolve(_.projectRoot,W.filePath),content:W.content})),Q=_.semanticLayer.getFileBindingsBatch(J.map((W)=>({filePath:W.abs,content:W.content}))),z=new Map;for(let W of J)z.set(W.orig,Q.get(W.abs)??[]);return z}catch(J){if(J instanceof V)throw J;throw new V("semantic","Gildash: getFileBindingsBatch failed",{cause:J})}}function G$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.getStandaloneFileBindings(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getStandaloneFileBindings failed",{cause:Q})}}function F$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);_.semanticLayer.notifyFileChanged(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: notifyFileChanged failed",{cause:Q})}}function j$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let J=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);_.semanticLayer.notifyFileDeleted(J)}catch(J){if(J instanceof V)throw J;throw new V("semantic","Gildash: notifyFileDeleted failed",{cause:J})}}function k$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.findImplementations(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getImplementationsAtPosition failed",{cause:Q})}}function g$(_,$,J,Q,z){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let W=v.isAbsolute($)?$:v.resolve(_.projectRoot,$),Z=v.isAbsolute(Q)?Q:v.resolve(_.projectRoot,Q);return _.semanticLayer.isTypeAssignableTo(W,J,Z,z)}catch(W){if(W instanceof V)throw W;throw new V("semantic","Gildash: isTypeAssignableToAtPosition failed",{cause:W})}}function v$(_,$,J,Q,z){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let W=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.isTypeAssignableToType(W,J,Q,z)}catch(W){if(W instanceof V)throw W;throw new V("semantic","Gildash: isTypeAssignableToType failed",{cause:W})}}function E$(_,$,J,Q,z){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let W=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.isTypeAssignableToTypeAtPositions(W,J,Q,z)}catch(W){if(W instanceof V)throw W;throw new V("semantic","Gildash: isTypeAssignableToTypeAtPositions failed",{cause:W})}}function u$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let z=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.lineColumnToPosition(z,J,Q)}catch(z){if(z instanceof V)throw z;throw new V("semantic","Gildash: lineColumnToPosition failed",{cause:z})}}function b$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let z=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.findNamePosition(z,J,Q)}catch(z){if(z instanceof V)throw z;throw new V("semantic","Gildash: findNamePosition failed",{cause:z})}}function P$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.getSymbolNode(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getSymbolNode failed",{cause:Q})}}function f$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.semanticLayer)throw new V("semantic","Gildash: semantic layer is not enabled");try{let Q=v.isAbsolute($)?$:v.resolve(_.projectRoot,$);return _.semanticLayer.getDiagnostics(Q,J)}catch(Q){if(Q instanceof V)throw Q;throw new V("semantic","Gildash: getSemanticDiagnostics failed",{cause:Q})}}function y$(_,$){let J=new Map(_.map((Y)=>[`${Y.name}::${Y.filePath}`,Y])),Q=new Map($.map((Y)=>[`${Y.name}::${Y.filePath}`,Y])),z=[],W=[],Z=[];for(let[Y,X]of Q){let M=J.get(Y);if(!M)z.push(X);else if(M.fingerprint!==X.fingerprint)Z.push({before:M,after:X})}for(let[Y,X]of J)if(!Q.has(Y))W.push(X);return{added:z,removed:W,modified:Z}}function x$(_,$){if(_.onIndexedCallbacks.add($),!_.coordinator)return()=>{_.onIndexedCallbacks.delete($)};let J=_.coordinator.onIndexed($);return()=>{_.onIndexedCallbacks.delete($),J()}}async function m$(_){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.coordinator)throw new V("closed","Gildash: reindex() is not available for readers");try{let $=await _.coordinator.fullIndex();return O0(_),$}catch($){if($ instanceof V)throw $;throw new V("index","Gildash: reindex failed",{cause:$})}}function h$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");let z=Q??_.defaultProject,W=new Set,Z=[],Y=$,X=J;for(;;){let M=`${X}::${Y}`;if(W.has(M))return{originalName:Y,originalFilePath:X,reExportChain:Z,circular:!0};W.add(M);let O=_.relationSearchFn({relationRepo:_.relationRepo,project:z,query:{type:"re-exports",srcFilePath:X,limit:500}}),L,C;for(let N of O){let w;if(N.metaJson)try{let F=JSON.parse(N.metaJson);if(Array.isArray(F.specifiers))w=F.specifiers}catch{}if(!w)continue;let R=w.find((F)=>F.exported===Y);if(!R)continue;L=N.dstFilePath??void 0,C=R.local;break}if(!L||!C)return{originalName:Y,originalFilePath:X,reExportChain:Z,circular:!1};Z.push({filePath:X,exportedAs:Y}),X=L,Y=C}}function n$(_,$){return _.onFileChangedCallbacks.add($),()=>{_.onFileChangedCallbacks.delete($)}}function p$(_,$){return _.onErrorCallbacks.add($),()=>{_.onErrorCallbacks.delete($)}}function d$(_,$){return _.onRoleChangedCallbacks.add($),()=>{_.onRoleChangedCallbacks.delete($)}}async function l$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");try{let Q=J?.project??_.defaultProject,z=J?.filePaths?J.filePaths:_.fileRepo.getAllFiles(Q).map((W)=>W.filePath);return await _.patternSearchFn({pattern:$,filePaths:z})}catch(Q){if(Q instanceof V)throw Q;throw new V("search","Gildash: findPattern failed",{cause:Q})}}async function i$(_,$,J,Q){if(_.closed)throw new V("closed","Gildash: instance is closed");try{let z=Q??_.defaultProject,W=new Set,Z=(Y,X,M)=>{let O=`${Y}::${X}`;if(W.has(O))return{symbolName:Y,filePath:X,kind:M,children:[]};W.add(O);let N=_.relationSearchFn({relationRepo:_.relationRepo,project:z,query:{srcFilePath:X,srcSymbolName:Y,limit:1000}}).filter((w)=>w.type==="extends"||w.type==="implements").filter((w)=>w.dstSymbolName!=null&&w.dstFilePath!=null).map((w)=>Z(w.dstSymbolName,w.dstFilePath,w.type));return{symbolName:Y,filePath:X,kind:M,children:N}};return Z($,J)}catch(z){if(z instanceof V)throw z;throw new V("search","Gildash: getHeritageChain failed",{cause:z})}}function c$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.annotationRepo||!_.annotationSearchFn)return[];return _.annotationSearchFn({annotationRepo:_.annotationRepo,project:$.project??_.defaultProject,query:$})}function a$(_,$,J){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.changelogRepo)return[];let Q=$ instanceof Date?$.toISOString():$,z=J?.project??_.defaultProject,W=J?.limit??1000;return _.changelogRepo.getSince({project:z,since:Q,symbolName:J?.symbolName,changeTypes:J?.changeTypes,filePath:J?.filePath,includeFullIndex:J?.includeFullIndex,indexRunId:J?.indexRunId,afterId:J?.afterId,limit:W}).map((Y)=>({changeType:Y.changeType,symbolName:Y.symbolName,symbolKind:Y.symbolKind,filePath:Y.filePath,oldName:Y.oldName,oldFilePath:Y.oldFilePath,fingerprint:Y.fingerprint,changedAt:Y.changedAt,isFullIndex:Y.isFullIndex===1,indexRunId:Y.indexRunId}))}function s$(_,$){if(_.closed)throw new V("closed","Gildash: instance is closed");if(!_.changelogRepo)return 0;let J=$ instanceof Date?$.toISOString():$,Q=0,z=[_.defaultProject,..._.boundaries.map((Z)=>Z.project)],W=[...new Set(z)];for(let Z of W)Q+=_.changelogRepo.pruneOlderThan(Z,J);return Q}class a0{_ctx;get projectRoot(){return this._ctx.projectRoot}get role(){return this._ctx.role}get projects(){return[...this._ctx.boundaries]}constructor(_){this._ctx=_}static async open(_){let $=await p1(_);return new a0($)}async close(_){return H0(this._ctx,_)}parseSource(_,$,J){return l1(this._ctx,_,$,J)}async batchParse(_,$){return i1(this._ctx,_,$)}getParsedAst(_){return c1(this._ctx,_)}extractSymbols(_){return a1(this._ctx,_)}extractRelations(_){return s1(this._ctx,_)}getStats(_){return o1(this._ctx,_)}searchSymbols(_){return c0(this._ctx,_)}searchRelations(_){return t1(this._ctx,_)}searchAllSymbols(_){return e1(this._ctx,_)}searchAllRelations(_){return _$(this._ctx,_)}listIndexedFiles(_){return $$(this._ctx,_)}getInternalRelations(_,$){return J$(this._ctx,_,$)}getFullSymbol(_,$,J){return Q$(this._ctx,_,$,J)}getFileStats(_,$){return z$(this._ctx,_,$)}getFileInfo(_,$){return W$(this._ctx,_,$)}getSymbolsByFile(_,$){return Y$(this._ctx,_,$)}getModuleInterface(_,$){return Z$(this._ctx,_,$)}getDependencies(_,$,J=1e4){return v1(this._ctx,_,$,J)}getDependents(_,$,J=1e4){return E1(this._ctx,_,$,J)}async getAffected(_,$){return u1(this._ctx,_,$)}async hasCycle(_){return b1(this._ctx,_)}async getImportGraph(_){return P1(this._ctx,_)}async getTransitiveDependencies(_,$){return f1(this._ctx,_,$)}async getTransitiveDependents(_,$){return y1(this._ctx,_,$)}async getCyclePaths(_,$){return x1(this._ctx,_,$)}async getFanMetrics(_,$){return m1(this._ctx,_,$)}getResolvedType(_,$,J){return X$(this._ctx,_,$,J)}getSemanticReferences(_,$,J){return U$(this._ctx,_,$,J)}getEnrichedReferences(_,$,J){return V$(this._ctx,_,$,J)}getImplementations(_,$,J){return O$(this._ctx,_,$,J)}isTypeAssignableTo(_,$,J,Q,z){return H$(this._ctx,_,$,J,Q,z)}getSemanticModuleInterface(_){return B$(this._ctx,_)}getFileTypes(_){return K$(this._ctx,_)}getResolvedTypeAt(_,$,J){return M$(this._ctx,_,$,J)}isTypeAssignableToAt(_){return L$(this._ctx,_)}getResolvedTypeAtPosition(_,$){return q$(this._ctx,_,$)}getResolvedTypesAtPositions(_,$){return I$(this._ctx,_,$)}getExpressionTypeAtSpan(_,$){return D$(this._ctx,_,$)}isThenableAtSpan(_,$,J){return C$(this._ctx,_,$,J)}getContextualCallReturnsAtSpan(_,$){return A$(this._ctx,_,$)}getSemanticReferencesAtPosition(_,$){return N$(this._ctx,_,$)}getEnrichedReferencesAtPosition(_,$){return R$(this._ctx,_,$)}getFileBindings(_){return T$(this._ctx,_)}getFileBindingsBatch(_){return S$(this._ctx,_)}getStandaloneFileBindings(_,$){return G$(this._ctx,_,$)}notifyFileChanged(_,$){F$(this._ctx,_,$)}notifyFileDeleted(_){j$(this._ctx,_)}getImplementationsAtPosition(_,$){return k$(this._ctx,_,$)}isTypeAssignableToAtPosition(_,$,J,Q){return g$(this._ctx,_,$,J,Q)}isTypeAssignableToType(_,$,J,Q){return v$(this._ctx,_,$,J,Q)}isTypeAssignableToTypeAtPositions(_,$,J,Q){return E$(this._ctx,_,$,J,Q)}lineColumnToPosition(_,$,J){return u$(this._ctx,_,$,J)}findNamePosition(_,$,J){return b$(this._ctx,_,$,J)}getSymbolNode(_,$){return P$(this._ctx,_,$)}getBaseTypes(_,$){return w$(this._ctx,_,$)}getSemanticDiagnostics(_,$){return f$(this._ctx,_,$)}diffSymbols(_,$){return y$(_,$)}onIndexed(_){return x$(this._ctx,_)}async reindex(){return m$(this._ctx)}resolveSymbol(_,$,J){return h$(this._ctx,_,$,J)}async findPattern(_,$){return l$(this._ctx,_,$)}async getHeritageChain(_,$,J){return i$(this._ctx,_,$,J)}onFileChanged(_){return n$(this._ctx,_)}onError(_){return p$(this._ctx,_)}onRoleChanged(_){return d$(this._ctx,_)}searchAnnotations(_){return c$(this._ctx,_)}getSymbolChanges(_,$){return a$(this._ctx,_,$)}pruneChangelog(_){return s$(this._ctx,_)}}import{Visitor as J2,visitorKeys as Q2}from"oxc-parser";import{walk as W2,parseAndWalk as Y2,ScopeTracker as Z2}from"oxc-walker";export{W2 as walk,Q2 as visitorKeys,g0 as symbolSearch,v0 as relationSearch,E0 as patternSearch,v_ as parseSource,Y2 as parseAndWalk,z_ as normalizePath,tJ as isVariableDeclaration,oJ as isTSQualifiedName,rJ as isMemberExpression,sJ as isIdentifier,pJ as isFunctionNode,aJ as isFunctionExpression,cJ as isFunctionDeclaration,iJ as isCallExpression,lJ as isAssignmentExpression,dJ as isArrowFunctionExpression,eJ as is,O_ as getLineColumn,R_ as extractSymbols,d_ as extractRelations,p_ as buildLineOffsets,J2 as Visitor,Z2 as ScopeTracker,V as GildashError,a0 as Gildash,V0 as DependencyGraph};
|
|
2
|
+
var ZQ=Object.defineProperty;var zQ=(_)=>_;function XQ(_,$){this[_]=zQ.bind(null,$)}var UQ=(_,$)=>{for(var Q in $)ZQ(_,Q,{get:$[Q],enumerable:!0,configurable:!0,set:XQ.bind($,Q)})};var $1=import.meta.require;import{isErr as t_}from"@zipbul/result";import f_ from"path";import{existsSync as oJ}from"fs";import{err as W1,isErr as LQ}from"@zipbul/result";import{Database as BQ}from"bun:sqlite";import{mkdirSync as GQ,unlinkSync as Z1,existsSync as z1}from"fs";import{dirname as IQ,join as X1}from"path";import{drizzle as wQ}from"drizzle-orm/bun-sqlite";import{migrate as DQ}from"drizzle-orm/bun-sqlite/migrator";class N extends Error{type;constructor(_,$,Q){super($,Q);this.type=_;this.name="GildashError"}}var q_=".gildash",e_="gildash.db";var I0={};UQ(I0,{watcherOwner:()=>OQ,symbols:()=>l,symbolChangelog:()=>J_,relations:()=>b,files:()=>e,annotations:()=>H_});import{sql as VQ}from"drizzle-orm";import{sqliteTable as v_,text as x,integer as t,real as HQ,index as W_,primaryKey as KQ,foreignKey as G0,check as MQ}from"drizzle-orm/sqlite-core";var Q1=["function","method","class","variable","type","interface","enum","namespace","property"],J1=["imports","type-references","re-exports","calls","extends","implements"],Y1=["jsdoc","line","block"];var e=v_("files",{project:x("project").notNull(),filePath:x("file_path").notNull(),mtimeMs:HQ("mtime_ms").notNull(),size:t("size").notNull(),contentHash:x("content_hash").notNull(),updatedAt:x("updated_at").notNull(),lineCount:t("line_count")},(_)=>[KQ({columns:[_.project,_.filePath]})]),l=v_("symbols",{id:t("id").primaryKey({autoIncrement:!0}),project:x("project").notNull(),filePath:x("file_path").notNull(),kind:x("kind",{enum:Q1}).notNull(),name:x("name").notNull(),startLine:t("start_line").notNull(),startColumn:t("start_column").notNull(),endLine:t("end_line").notNull(),endColumn:t("end_column").notNull(),isExported:t("is_exported").notNull().default(0),signature:x("signature"),fingerprint:x("fingerprint"),detailJson:x("detail_json"),contentHash:x("content_hash").notNull(),indexedAt:x("indexed_at").notNull(),resolvedType:x("resolved_type"),structuralFingerprint:x("structural_fingerprint")},(_)=>[W_("idx_symbols_project_file").on(_.project,_.filePath),W_("idx_symbols_project_kind").on(_.project,_.kind),W_("idx_symbols_project_name").on(_.project,_.name),W_("idx_symbols_fingerprint").on(_.project,_.fingerprint),G0({columns:[_.project,_.filePath],foreignColumns:[e.project,e.filePath]}).onDelete("cascade")]),b=v_("relations",{id:t("id").primaryKey({autoIncrement:!0}),project:x("project").notNull(),type:x("type",{enum:J1}).notNull(),srcFilePath:x("src_file_path").notNull(),srcSymbolName:x("src_symbol_name"),dstProject:x("dst_project"),dstFilePath:x("dst_file_path"),dstSymbolName:x("dst_symbol_name"),metaJson:x("meta_json"),specifier:x("specifier"),isExternal:t("is_external").notNull().default(0)},(_)=>[W_("idx_relations_src").on(_.project,_.srcFilePath),W_("idx_relations_dst").on(_.dstProject,_.dstFilePath),W_("idx_relations_type").on(_.project,_.type),W_("idx_relations_project_type_src").on(_.project,_.type,_.srcFilePath),W_("idx_relations_specifier").on(_.project,_.specifier),G0({columns:[_.project,_.srcFilePath],foreignColumns:[e.project,e.filePath]}).onDelete("cascade")]),H_=v_("annotations",{id:t("id").primaryKey({autoIncrement:!0}),project:x("project").notNull(),filePath:x("file_path").notNull(),tag:x("tag").notNull(),value:x("value").notNull().default(""),source:x("source",{enum:Y1}).notNull(),symbolName:x("symbol_name"),startLine:t("start_line").notNull(),startColumn:t("start_column").notNull(),endLine:t("end_line").notNull(),endColumn:t("end_column").notNull(),indexedAt:x("indexed_at").notNull()},(_)=>[W_("idx_annotations_project_file").on(_.project,_.filePath),W_("idx_annotations_project_tag").on(_.project,_.tag),W_("idx_annotations_project_symbol").on(_.project,_.symbolName),G0({columns:[_.project,_.filePath],foreignColumns:[e.project,e.filePath]}).onDelete("cascade")]),J_=v_("symbol_changelog",{id:t("id").primaryKey({autoIncrement:!0}),project:x("project").notNull(),changeType:x("change_type").notNull(),symbolName:x("symbol_name").notNull(),symbolKind:x("symbol_kind").notNull(),filePath:x("file_path").notNull(),oldName:x("old_name"),oldFilePath:x("old_file_path"),fingerprint:x("fingerprint"),changedAt:x("changed_at").notNull(),isFullIndex:t("is_full_index").notNull().default(0),indexRunId:x("index_run_id").notNull()},(_)=>[W_("idx_changelog_project_changed_at").on(_.project,_.changedAt),W_("idx_changelog_project_name").on(_.project,_.symbolName),W_("idx_changelog_project_run").on(_.project,_.indexRunId)]),OQ=v_("watcher_owner",{id:t("id").primaryKey(),pid:t("pid").notNull(),startedAt:x("started_at").notNull(),heartbeatAt:x("heartbeat_at").notNull(),instanceId:x("instance_id")},(_)=>[MQ("watcher_owner_singleton",VQ`${_.id} = 1`)]);class w0{client=null;drizzle=null;dbPath;txDepth=0;constructor(_){this.dbPath=X1(_.projectRoot,q_,e_)}get drizzleDb(){if(!this.drizzle)throw Error("Database is not open. Call open() first.");return this.drizzle}open(){try{GQ(IQ(this.dbPath),{recursive:!0}),this.client=new BQ(this.dbPath),this.client.run("PRAGMA journal_mode = WAL"),this.client.run("PRAGMA foreign_keys = OFF"),this.client.run("PRAGMA busy_timeout = 5000"),this.drizzle=wQ(this.client,{schema:I0}),DQ(this.drizzle,{migrationsFolder:X1(import.meta.dirname,"migrations")});let _=this.client.prepare("PRAGMA foreign_key_check").all();if(_.length>0)throw Error(`FK integrity violation after migration: ${JSON.stringify(_.slice(0,5))}`);this.client.run("PRAGMA foreign_keys = ON"),this.registerRegexpUdf(this.client)}catch(_){if(this.isCorruptionError(_)&&z1(this.dbPath)){this.closeClient(),Z1(this.dbPath);for(let Q of["-wal","-shm"]){let J=this.dbPath+Q;if(z1(J))Z1(J)}let $=this.open();if(LQ($))return W1(new N("store",`Failed to recover database at ${this.dbPath}`,{cause:$.data}));return $}return W1(new N("store",`Failed to open database at ${this.dbPath}`,{cause:_}))}}close(){this.closeClient(),this.drizzle=null}transaction(_){let $=this.requireClient();if(this.txDepth===0){this.txDepth++;try{return $.transaction(()=>_(this))()}finally{this.txDepth--}}let Q=`sp_${this.txDepth++}`;$.run(`SAVEPOINT "${Q}"`);try{let J=_(this);return $.run(`RELEASE SAVEPOINT "${Q}"`),J}catch(J){throw $.run(`ROLLBACK TO SAVEPOINT "${Q}"`),$.run(`RELEASE SAVEPOINT "${Q}"`),J}finally{this.txDepth--}}immediateTransaction(_){let $=this.requireClient();this.txDepth++,$.run("BEGIN IMMEDIATE");try{let Q=_();return $.run("COMMIT"),Q}catch(Q){throw $.run("ROLLBACK"),Q}finally{this.txDepth--}}getTableNames(){return this.requireClient().query("SELECT name FROM sqlite_master WHERE type = 'table'").all().map(($)=>$.name)}selectOwner(){return this.requireClient().prepare("SELECT pid, heartbeat_at, instance_id FROM watcher_owner WHERE id = 1").get()??void 0}insertOwner(_,$){let Q=new Date().toISOString();this.requireClient().prepare("INSERT INTO watcher_owner (id, pid, started_at, heartbeat_at, instance_id) VALUES (1, ?, ?, ?, ?)").run(_,Q,Q,$??null)}replaceOwner(_,$){let Q=new Date().toISOString();this.requireClient().prepare("INSERT OR REPLACE INTO watcher_owner (id, pid, started_at, heartbeat_at, instance_id) VALUES (1, ?, ?, ?, ?)").run(_,Q,Q,$??null)}touchOwner(_){let $=new Date().toISOString();this.requireClient().prepare("UPDATE watcher_owner SET heartbeat_at = ? WHERE id = 1 AND pid = ?").run($,_)}deleteOwner(_){this.requireClient().prepare("DELETE FROM watcher_owner WHERE id = 1 AND pid = ?").run(_)}registerRegexpUdf(_){let $=_;if(typeof $.function!=="function")return;$.function.call(_,"regexp",(Q,J)=>{try{return new RegExp(Q).test(J)?1:0}catch{return 0}})}requireClient(){if(!this.client)throw Error("Database is not open. Call open() first.");return this.client}closeClient(){if(this.client)this.client.close(),this.client=null}isCorruptionError(_){if(!(_ instanceof Error))return!1;let $=_.message.toLowerCase();return $.includes("malformed")||$.includes("corrupt")||$.includes("not a database")||$.includes("disk i/o error")||$.includes("sqlite_corrupt")}}import{eq as m_,and as U1}from"drizzle-orm";class D0{db;constructor(_){this.db=_}getFile(_,$){return this.db.drizzleDb.select().from(e).where(U1(m_(e.project,_),m_(e.filePath,$))).get()??null}upsertFile(_){this.db.drizzleDb.insert(e).values({project:_.project,filePath:_.filePath,mtimeMs:_.mtimeMs,size:_.size,contentHash:_.contentHash,updatedAt:_.updatedAt,lineCount:_.lineCount??null}).onConflictDoUpdate({target:[e.project,e.filePath],set:{mtimeMs:_.mtimeMs,size:_.size,contentHash:_.contentHash,updatedAt:_.updatedAt,lineCount:_.lineCount??null}}).run()}getAllFiles(_){return this.db.drizzleDb.select().from(e).where(m_(e.project,_)).all()}getFilesMap(_){let $=this.getAllFiles(_),Q=new Map;for(let J of $)Q.set(J.filePath,J);return Q}deleteFile(_,$){this.db.drizzleDb.delete(e).where(U1(m_(e.project,_),m_(e.filePath,$))).run()}}import{eq as Z_,and as p_,sql as C0,count as CQ}from"drizzle-orm";var V1=50;class A0{db;constructor(_){this.db=_}replaceFileSymbols(_,$,Q,J){if(this.db.drizzleDb.delete(l).where(p_(Z_(l.project,_),Z_(l.filePath,$))).run(),!J.length)return;let Y=new Date().toISOString(),W=J.map((z)=>({project:_,filePath:$,kind:z.kind,name:z.name??"",startLine:z.startLine??0,startColumn:z.startColumn??0,endLine:z.endLine??0,endColumn:z.endColumn??0,isExported:z.isExported??0,signature:z.signature??null,fingerprint:z.fingerprint??null,detailJson:z.detailJson??null,contentHash:Q,indexedAt:z.indexedAt??Y,resolvedType:z.resolvedType??null,structuralFingerprint:z.structuralFingerprint??null}));for(let z=0;z<W.length;z+=V1)this.db.drizzleDb.insert(l).values(W.slice(z,z+V1)).run()}getFileSymbols(_,$){return this.db.drizzleDb.select().from(l).where(p_(Z_(l.project,_),Z_(l.filePath,$))).all()}getStats(_){let $=this.db.drizzleDb.select({symbolCount:CQ(),fileCount:C0`COUNT(DISTINCT ${l.filePath})`}).from(l).where(Z_(l.project,_)).get();return{symbolCount:$?.symbolCount??0,fileCount:$?.fileCount??0}}getByFingerprint(_,$){return this.db.drizzleDb.select().from(l).where(p_(Z_(l.project,_),Z_(l.fingerprint,$))).all()}deleteFileSymbols(_,$){this.db.drizzleDb.delete(l).where(p_(Z_(l.project,_),Z_(l.filePath,$))).run()}searchByQuery(_){let $=this.db.drizzleDb.select().from(l).where(p_(_.ftsQuery?C0`${l.id} IN (SELECT rowid FROM symbols_fts WHERE symbols_fts MATCH ${_.ftsQuery})`:void 0,_.exactName?Z_(l.name,_.exactName):void 0,_.project!==void 0?Z_(l.project,_.project):void 0,_.kind?Z_(l.kind,_.kind):void 0,_.filePath!==void 0?Z_(l.filePath,_.filePath):void 0,_.isExported!==void 0?Z_(l.isExported,_.isExported?1:0):void 0,_.decorator?C0`${l.id} IN (SELECT s.id FROM symbols s, json_each(s.detail_json, '$.decorators') je WHERE json_extract(je.value, '$.name') = ${_.decorator})`:void 0,_.resolvedType!==void 0?Z_(l.resolvedType,_.resolvedType):void 0)).orderBy(l.name);if(!_.regex)return(_.limit!==void 0?$.limit(_.limit):$).all();let Q;try{Q=new RegExp(_.regex)}catch{throw new N("validation",`Invalid regex pattern: ${_.regex}`)}if(_.limit===void 0)return $.all().filter((W)=>Q.test(W.name));let J=[];for(let Y of[5,20,100]){let W=_.limit*Y,z=$.limit(W).all();if(J=z.filter((Z)=>Q.test(Z.name)),J.length>=_.limit||z.length<W)return J.slice(0,_.limit)}return J.slice(0,_.limit)}}import{eq as d,and as I_,isNull as H1,or as AQ}from"drizzle-orm";var d_={project:b.project,type:b.type,srcFilePath:b.srcFilePath,srcSymbolName:b.srcSymbolName,dstProject:b.dstProject,dstFilePath:b.dstFilePath,dstSymbolName:b.dstSymbolName,metaJson:b.metaJson,specifier:b.specifier,isExternal:b.isExternal};class q0{db;constructor(_){this.db=_}replaceFileRelations(_,$,Q){this.db.transaction((J)=>{if(J.drizzleDb.delete(b).where(I_(d(b.project,_),d(b.srcFilePath,$))).run(),!Q.length)return;for(let Y of Q)J.drizzleDb.insert(b).values({project:_,type:Y.type,srcFilePath:Y.srcFilePath??$,srcSymbolName:Y.srcSymbolName??null,dstProject:Y.dstProject??(Y.dstFilePath!=null?_:null),dstFilePath:Y.dstFilePath??null,dstSymbolName:Y.dstSymbolName??null,metaJson:Y.metaJson??null,specifier:Y.specifier??null,isExternal:Y.isExternal??0}).run()})}getOutgoing(_,$,Q){if(Q!==void 0)return this.db.drizzleDb.select(d_).from(b).where(I_(d(b.project,_),d(b.srcFilePath,$),AQ(d(b.srcSymbolName,Q),H1(b.srcSymbolName)))).all();return this.db.drizzleDb.select(d_).from(b).where(I_(d(b.project,_),d(b.srcFilePath,$))).all()}getIncoming(_){let{dstProject:$,dstFilePath:Q}=_;return this.db.drizzleDb.select(d_).from(b).where(I_(d(b.dstProject,$),d(b.dstFilePath,Q))).all()}getByType(_,$){return this.db.drizzleDb.select(d_).from(b).where(I_(d(b.project,_),d(b.type,$))).all()}deleteFileRelations(_,$){this.db.drizzleDb.delete(b).where(I_(d(b.project,_),d(b.srcFilePath,$))).run()}deleteIncomingRelations(_,$){this.db.drizzleDb.delete(b).where(I_(d(b.dstProject,_),d(b.dstFilePath,$))).run()}searchRelations(_){let $=this.db.drizzleDb.select(d_).from(b).where(I_(_.project!==void 0?d(b.project,_.project):void 0,_.srcFilePath!==void 0?d(b.srcFilePath,_.srcFilePath):void 0,_.srcSymbolName!==void 0?d(b.srcSymbolName,_.srcSymbolName):void 0,_.dstProject!==void 0?d(b.dstProject,_.dstProject):void 0,_.dstFilePath!==void 0?d(b.dstFilePath,_.dstFilePath):void 0,_.dstSymbolName!==void 0?d(b.dstSymbolName,_.dstSymbolName):void 0,_.type!==void 0?d(b.type,_.type):void 0,_.specifier!==void 0?d(b.specifier,_.specifier):void 0,_.isExternal!==void 0?d(b.isExternal,_.isExternal?1:0):void 0));return(_.limit!==void 0?$.limit(_.limit):$).all()}retargetRelations(_){let{dstProject:$,oldFile:Q,oldSymbol:J,newFile:Y,newSymbol:W,newDstProject:z}=_,Z=J===null?I_(d(b.dstProject,$),d(b.dstFilePath,Q),H1(b.dstSymbolName)):I_(d(b.dstProject,$),d(b.dstFilePath,Q),d(b.dstSymbolName,J)),X={dstFilePath:Y,dstSymbolName:W};if(z!==void 0)X.dstProject=z;this.db.drizzleDb.update(b).set(X).where(Z).run()}}import{err as K1}from"@zipbul/result";import{subscribe as NQ}from"@parcel/watcher";import R0 from"path";import N0 from"path";function Y_(_){return _.replaceAll("\\","/")}function N_(_,$){return Y_(N0.relative(_,$))}function g_(_,$){return Y_(N0.resolve(_,$))}function qQ(_){return Y_(_)}function K_(_,$){return N0.isAbsolute($)?N_(_,$):qQ($)}var RQ=["**/.git/**",`**/${q_}/**`,"**/dist/**","**/node_modules/**"],SQ=new Set(["package.json","tsconfig.json"]);function TQ(_){if(_==="update")return"change";if(_==="create")return"create";return"delete"}class S0{#$;#_;#J;#Y;#W;#Z;constructor(_,$=NQ,Q=console){this.#_=_.projectRoot,this.#J=[...RQ,..._.ignorePatterns??[]],this.#Y=new Set((_.extensions??[".ts",".mts",".cts"]).map((J)=>J.toLowerCase())),this.#W=$,this.#Z=Q}async start(_){try{this.#$=await this.#W(this.#_,($,Q)=>{if($){this.#Z.error(new N("watcher","Callback error",{cause:$}));return}try{for(let J of Q){let Y=Y_(R0.relative(this.#_,J.path));if(Y.startsWith(".."))continue;let W=R0.basename(Y),z=R0.extname(Y).toLowerCase();if(!SQ.has(W)&&!this.#Y.has(z))continue;if(Y.endsWith(".d.ts"))continue;_({eventType:TQ(J.type),filePath:Y})}}catch(J){this.#Z.error(new N("watcher","Callback error",{cause:J}))}},{ignore:this.#J})}catch($){return K1(new N("watcher","Failed to subscribe watcher",{cause:$}))}}async close(){if(!this.#$)return;try{await this.#$.unsubscribe(),this.#$=void 0}catch(_){return K1(new N("watcher","Failed to close watcher",{cause:_}))}}}import T0 from"path";var EQ=["**/node_modules/**","**/.git/**",`**/${q_}/**`,"**/dist/**"],FQ=EQ.map((_)=>new Bun.Glob(_));function jQ(_){return new Bun.Glob("**/package.json").scan({cwd:_,followSymlinks:!1})}async function _0(_,$=jQ){let Q=[];for await(let J of $(_)){let Y=Y_(J);if(FQ.some((K)=>K.match(Y)))continue;let W=Y_(T0.dirname(J)),z=T0.join(_,J),Z=await Bun.file(z).json(),X=typeof Z?.name==="string"&&Z.name.length>0?Z.name:T0.basename(W==="."?_:W);Q.push({dir:W,project:X})}return Q.sort((J,Y)=>Y.dir.length-J.dir.length),Q}function r(_,$,Q="default"){let J=Y_(_);for(let Y of $){if(Y.dir===".")return Y.project;if(J===Y.dir||J.startsWith(`${Y.dir}/`))return Y.project}return Q}import l_ from"path";var R_=new Map;async function kQ(_){let $=Bun.file(_);if(!await $.exists())return null;try{let Q=await $.text(),J=Bun.JSONC.parse(Q);return typeof J==="object"&&J!==null?J:null}catch{return null}}function vQ(_,$){if($.startsWith(".")){let Q=l_.resolve(_,$);return Q.endsWith(".json")?Q:Q+".json"}return l_.resolve(_,"node_modules",$)}async function M1(_,$=5){if($<=0)return null;let Q=await kQ(_);if(!Q)return null;let J=Q.extends;if(typeof J!=="string"||!J)return Q;let Y=vQ(l_.dirname(_),J),W=await M1(Y,$-1);if(!W)return Q;return{...W,...Q,compilerOptions:{...W.compilerOptions,...Q.compilerOptions}}}async function n_(_){if(R_.has(_))return R_.get(_)??null;let $=l_.join(_,"tsconfig.json"),Q=await M1($);if(!Q)return R_.set(_,null),null;let J=Q.compilerOptions??null;if(!J)return R_.set(_,null),null;let Y=typeof J.baseUrl==="string"?J.baseUrl:null,W=typeof J.paths==="object"&&J.paths!==null?J.paths:null;if(!Y&&!W)return R_.set(_,null),null;let z=Y?l_.resolve(_,Y):_,Z=new Map;if(W)for(let[K,U]of Object.entries(W)){if(!Array.isArray(U))continue;let M=U.filter((w)=>typeof w==="string");Z.set(K,M)}let X={baseUrl:z,paths:Z};return R_.set(_,X),X}function $0(_){if(_){R_.delete(_);return}R_.clear()}function B_(_){let $=Bun.hash.xxHash64(_);return BigInt.asUintN(64,BigInt($)).toString(16).padStart(16,"0")}import{isErr as N1}from"@zipbul/result";import{err as gQ}from"@zipbul/result";import{parseSync as uQ}from"oxc-parser";function u_(_,$,Q,J=uQ){try{let Y={preserveParens:!1,...Q},W=J(_,$,Y);return{filePath:_,program:W.program,errors:W.errors,comments:W.comments,sourceText:$,module:W.module}}catch(Y){return gQ(new N("parse",`Failed to parse file: ${_}`,{cause:Y}))}}import{join as bQ}from"path";function PQ(_,$){let Q=$.length===1?`**/*${$[0]}`:`**/*{${$.join(",")}}`;return new Bun.Glob(Q).scan({cwd:_,followSymlinks:!1})}async function O1(_){let{projectRoot:$,extensions:Q,ignorePatterns:J,fileRepo:Y,scanFilesFn:W=PQ}=_,z=Y.getFilesMap(),Z=new Set,X=[],K=[],U=J.map((w)=>new Bun.Glob(w));for await(let w of W($,Q)){let q=Y_(w);if(!Q.some((i)=>q.endsWith(i)))continue;if(q.startsWith("node_modules/")||q.includes("/node_modules/"))continue;if(U.some((i)=>i.match(q)))continue;Z.add(q);let G=bQ($,q),C=Bun.file(G),{size:E,lastModified:R}=C,u=z.get(q);if(!u){let i=await C.text(),c=B_(i);X.push({filePath:q,contentHash:c,mtimeMs:R,size:E});continue}if(u.mtimeMs===R&&u.size===E){K.push({filePath:q,contentHash:u.contentHash,mtimeMs:R,size:E});continue}let P=await C.text(),m=B_(P);if(m===u.contentHash)K.push({filePath:q,contentHash:m,mtimeMs:R,size:E});else X.push({filePath:q,contentHash:m,mtimeMs:R,size:E})}let M=[];for(let w of z.keys())if(!Z.has(w))M.push(w);return{changed:X,unchanged:K,deleted:M}}function i_(_){let $=[0];for(let Q=0;Q<_.length;Q++)if(_[Q]===`
|
|
3
|
+
`)$.push(Q+1);return $}function O_(_,$){let Q=0,J=_.length-1;while(Q<J){let Y=Q+J+1>>1;if(_[Y]<=$)Q=Y;else J=Y-1}return{line:Q+1,column:$-_[Q]}}import{err as yQ}from"@zipbul/result";import{parse as fQ}from"comment-parser";function Q0(_){try{let $=_.trim();if($.startsWith("/**"))$=$.slice(3);if($.endsWith("*/"))$=$.slice(0,-2);let J=fQ(`/** ${$} */`)[0]??{description:"",tags:[]};return{description:(J.description??"").trim(),tags:(J.tags??[]).map((Y)=>({tag:Y.tag??"",name:Y.name??"",type:Y.type??"",description:Y.description??"",optional:Y.optional??!1,...Y.default!==void 0?{default:Y.default}:{}}))}}catch($){return yQ(new N("parse","Failed to parse JSDoc comment",{cause:$}))}}import{isErr as xQ}from"@zipbul/result";function hQ(_){if("name"in _&&typeof _.name==="string")return _.name;if("value"in _){let $=_.value;if(typeof $==="string")return $;if(typeof $==="number"||typeof $==="bigint"||typeof $==="boolean")return String($)}return"unknown"}function b_(_){if(_.type==="Identifier")return[{name:_.name,start:_.start,end:_.end}];if(_.type==="ObjectPattern"){let $=[];for(let Q of _.properties)if(Q.type==="RestElement")$.push(...b_(Q.argument));else $.push(...b_(Q.value));return $}if(_.type==="ArrayPattern"){let $=[];for(let Q of _.elements){if(!Q)continue;if(Q.type==="RestElement")$.push(...b_(Q.argument));else $.push(...b_(Q))}return $}if(_.type==="AssignmentPattern")return b_(_.left);return[]}function mQ(_){let $=new Map;for(let Q of _.module.staticImports){let J=Q.moduleRequest.value;for(let Y of Q.entries){let W=Y.localName.value,z=Y.importName.kind==="Name"?Y.importName.name:void 0,Z={specifier:J};if(z&&z!==W)Z.originalName=z;$.set(W,Z)}}return $}function T_(_){let{program:$,sourceText:Q,comments:J}=_,Y=i_(Q),W=mQ(_),z=J.filter((H)=>H.type==="Block"&&H.value.startsWith("*")).sort((H,A)=>H.end-A.end),Z=$.body.map((H)=>H.start).sort((H,A)=>H-A);function X(H,A){return R(H,A)}function K(H,A,B){if(H.type==="PrivateIdentifier")return{kind:"private"};if(!A&&H.type==="Identifier")return;return X(H,B)}function U(H,A){if(A)return Q.slice(H.start,H.end);if(H.type==="PrivateIdentifier")return`#${H.name}`;return hQ(H)}function M(H,A,B){if(!A&&H.type==="Identifier")return{kind:"string",value:H.name};return X(H,B)}function w(H,A){return{start:O_(Y,H),end:O_(Y,A)}}function q(H){let A=0,B=z.length-1,D=-1;while(A<=B){let O=A+B>>>1;if(z[O].end<=H)D=O,A=O+1;else B=O-1}if(D<0)return;let V=z[D];A=0,B=Z.length-1;while(A<=B){let O=A+B>>>1,I=Z[O];if(I<=V.end)A=O+1;else if(I>=H)B=O-1;else return}return`/*${V.value}*/`}function G(H){if(!H)return;let A="typeAnnotation"in H&&H.typeAnnotation?H.typeAnnotation:H;return Q.slice(A.start,A.end)}let C=8;function E(H){if(H.type==="Identifier")return W.get(H.name);if(H.type==="MemberExpression"){let A=H.object;if(A.type==="Identifier")return W.get(A.name)}return}function R(H,A=0){if(A>=C)return{kind:"unresolvable",sourceText:Q.slice(H.start,H.end)};if(H.type==="Literal"){let B=H.value;if(typeof B==="bigint")return{kind:"bigint",value:"bigint"in H&&typeof H.bigint==="string"?H.bigint:B.toString()};if("regex"in H&&H.regex)return{kind:"regex",value:Q.slice(H.start,H.end)};if(B===null)return{kind:"null",value:null};if(typeof B==="string")return{kind:"string",value:B};if(typeof B==="number")return{kind:"number",value:B};if(typeof B==="boolean")return{kind:"boolean",value:B};return{kind:"unresolvable",sourceText:Q.slice(H.start,H.end)}}if(H.type==="Identifier"){let B=H.name;if(B==="undefined")return{kind:"undefined",value:null};let D=W.get(B),V={kind:"identifier",name:B};if(D){if(V.importSource=D.specifier,D.originalName)V.originalName=D.originalName}return V}if(H.type==="MemberExpression"){if(H.computed){let S=H.property;if(S.type==="Literal"&&typeof S.value==="string"){let T=H.object,f=Q.slice(T.start,T.end),j=T.type==="Identifier"?T.name:void 0,v=j?W.get(j):void 0,y={kind:"member",object:f,property:S.value};if(v)y.importSource=v.specifier;return y}return{kind:"unresolvable",sourceText:Q.slice(H.start,H.end)}}let B=H.object,D=Q.slice(B.start,B.end),V=H.property.name,O=B.type==="Identifier"?B.name:void 0,I=O?W.get(O):void 0,L={kind:"member",object:D,property:V};if(I)L.importSource=I.specifier;return L}if(H.type==="CallExpression"){let B=H.callee,D=Q.slice(B.start,B.end),V=H.arguments.map((L)=>R(L,A+1)),O=E(B),I={kind:"call",callee:D,arguments:V};if(O)I.importSource=O.specifier;return I}if(H.type==="NewExpression"){let B=H.callee,D=Q.slice(B.start,B.end),V=H.arguments.map((L)=>R(L,A+1)),O=E(B),I={kind:"new",callee:D,arguments:V};if(O)I.importSource=O.specifier;return I}if(H.type==="ObjectExpression"){let B=[];for(let D of H.properties){if(D.type==="SpreadElement"){B.push({kind:"spread",argument:R(D.argument,A+1)});continue}let O={kind:"property",key:M(D.key,D.computed,A+1),value:R(D.value,A+1)};if(D.shorthand)O.shorthand=!0;B.push(O)}return{kind:"object",properties:B}}if(H.type==="ArrayExpression")return{kind:"array",elements:H.elements.map((D)=>{if(!D)return{kind:"undefined",value:null};return R(D,A+1)})};if(H.type==="SpreadElement")return{kind:"spread",argument:R(H.argument,A+1)};if(H.type==="ArrowFunctionExpression"||H.type==="FunctionExpression"){let B=H.params.map(P),D={kind:"function",sourceText:Q.slice(H.start,H.end)};if(B.length>0)D.parameters=B;return D}if(H.type==="TemplateLiteral"||H.type==="TaggedTemplateExpression")return{kind:"template",sourceText:Q.slice(H.start,H.end)};if(H.type==="UnaryExpression"){let B=H.argument;if(H.operator==="-"&&B.type==="Literal"&&typeof B.value==="number")return{kind:"number",value:-B.value};if(H.operator==="void")return{kind:"undefined",value:null};return{kind:"unresolvable",sourceText:Q.slice(H.start,H.end)}}if(H.type==="TSAsExpression"||H.type==="TSSatisfiesExpression"||H.type==="TSNonNullExpression"||H.type==="TSTypeAssertion"||H.type==="TSInstantiationExpression"||H.type==="ParenthesizedExpression")return R(H.expression,A);if(H.type==="ChainExpression")return R(H.expression,A);return{kind:"unresolvable",sourceText:Q.slice(H.start,H.end)}}function u(H){if(!H||H.length===0)return[];return H.map((A)=>{let B=A.expression;if(B.type==="CallExpression"){let D=B.callee,V="name"in D&&typeof D.name==="string"?D.name:("property"in D)&&("name"in D.property)&&typeof D.property.name==="string"?D.property.name:"unknown",O=B.arguments.map((I)=>R(I));return{name:V,arguments:O.length>0?O:void 0}}if(B.type==="Identifier")return{name:B.name??"unknown"};return{name:Q.slice(B.start,B.end)}})}function P(H){if(H.type==="TSParameterProperty")return i(H.parameter,H.decorators);if(H.type==="RestElement"){let A=H,B=A.argument,V=`...${"name"in B&&typeof B.name==="string"?B.name:"unknown"}`,O=A.typeAnnotation,I=O?G(O):void 0,L={name:V,isOptional:!1};if(I)L.type=I;return L}return i(H,H.decorators)}function m(H){if(!H)return;let A=H.typeAnnotation;if(A.type!=="TSTypeReference")return;let B=A.typeName,D=B.type==="Identifier"?B.name:void 0;if(!D)return;return W.get(D)?.specifier}function i(H,A){if(H.type==="AssignmentPattern"){let{left:T,right:f}=H,j="name"in T&&typeof T.name==="string"?T.name:"unknown",v="typeAnnotation"in T?T.typeAnnotation:null,y=v?G(v):void 0,a=m(v),V_=Q.slice(f.start,f.end),A_="decorators"in T&&Array.isArray(T.decorators)?T.decorators:[],h_=u(A_),S_={name:j,isOptional:!0,defaultValue:V_};if(y)S_.type=y;if(a)S_.typeImportSource=a;if(h_.length>0)S_.decorators=h_;return S_}let B="name"in H&&typeof H.name==="string"?H.name:("pattern"in H)&&H.pattern&&typeof H.pattern.name==="string"?H.pattern.name:"unknown",D=!!(("optional"in H)&&H.optional),V="typeAnnotation"in H?H.typeAnnotation:null,O=V?G(V):void 0,I=m(V),L=u(A??[]),S={name:B,isOptional:D};if(O)S.type=O;if(I)S.typeImportSource=I;if(L.length>0)S.decorators=L;return S}function c(H,A){let B=[];if(A?.async)B.push("async");if(H.static)B.push("static");if(H.abstract)B.push("abstract");if(H.readonly)B.push("readonly");if(H.override)B.push("override");if(H.declare)B.push("declare");if(H.const)B.push("const");let D=H.accessibility;if(D==="private")B.push("private");else if(D==="protected")B.push("protected");else if(D==="public")B.push("public");return B}function z_(H){if(!H)return;let A=H.params.flatMap((B)=>{let D=B.name.name;return D?[D]:[]});return A.length>0?A:void 0}function X_(H){let A=[];if(H.superClass){let D=Q.slice(H.superClass.start,H.superClass.end);A.push({kind:"extends",name:D})}let B=H.implements??[];for(let D of B){let V=D.expression,O=Q.slice(V.start,V.end);A.push({kind:"implements",name:O})}return A}function G_(H){let A=[],B=H.extends;for(let D of B){let V=D.expression,O=Q.slice(V.start,V.end);A.push({kind:"extends",name:O})}return A}function M_(H){let A=[];for(let B of H)if(B.type==="MethodDefinition"||B.type==="TSAbstractMethodDefinition"){let D=B,V=U(D.key,D.computed),O=K(D.key,D.computed,0),I=D.value,L=D.kind,S=L==="constructor"?"constructor":L==="get"?"getter":L==="set"?"setter":"method",T=c(D,I);if(B.type==="TSAbstractMethodDefinition"&&!T.includes("abstract"))T.push("abstract");let f=I.params.map(P),j=G(I.returnType),v=u(D.decorators??[]),y={kind:"method",name:V,span:w(B.start,B.end),isExported:!1,methodKind:S,modifiers:T,parameters:f.length>0?f:void 0,returnType:j};if(O)y.key=O;if(v.length>0)y.decorators=v;A.push(y)}else if(B.type==="PropertyDefinition"||B.type==="TSAbstractPropertyDefinition"||B.type==="AccessorProperty"||B.type==="TSAbstractAccessorProperty"){let D=B,V=U(D.key,D.computed),O=K(D.key,D.computed,0),I=c(D);if(B.type==="TSAbstractPropertyDefinition"||B.type==="TSAbstractAccessorProperty"){if(!I.includes("abstract"))I.push("abstract")}if(B.type==="AccessorProperty"||B.type==="TSAbstractAccessorProperty")I.push("accessor");let L=G(D.typeAnnotation),S=D.value,T=S?R(S):void 0,f=u(D.decorators),j={kind:"property",name:V,span:w(B.start,B.end),isExported:!1,modifiers:I,returnType:L,initializer:T};if(O)j.key=O;if(f.length>0)j.decorators=f;A.push(j)}return A}function U_(H){let A=[];for(let B of H)if(B.type==="TSMethodSignature"){let D=B,V=U(D.key,D.computed),O=K(D.key,D.computed,0),I=D.params.map(P),L=G(D.returnType),S={kind:"method",name:V,span:w(B.start,B.end),isExported:!1,modifiers:[],methodKind:"method",parameters:I.length>0?I:void 0,returnType:L};if(O)S.key=O;A.push(S)}else if(B.type==="TSPropertySignature"){let D=B,V=U(D.key,D.computed),O=K(D.key,D.computed,0),I=G(D.typeAnnotation),L={kind:"property",name:V,span:w(B.start,B.end),isExported:!1,modifiers:D.readonly?["readonly"]:[],returnType:I};if(O)L.key=O;A.push(L)}return A}function s(H,A){if(H.type==="FunctionDeclaration"||H.type==="FunctionExpression"||H.type==="TSDeclareFunction"||H.type==="TSEmptyBodyFunctionExpression"){let B=H,D=B.id?.name??"default",V=B.params.map(P),O=G(B.returnType),I=c(B,B),L=u(B.decorators??[]),S=z_(B.typeParameters),T={kind:"function",name:D,span:w(H.start,H.end),isExported:A,modifiers:I,parameters:V.length>0?V:void 0,returnType:O,decorators:L.length>0?L:void 0};if(S&&S.length>0)T.typeParameters=S;return T}if(H.type==="ClassDeclaration"||H.type==="ClassExpression"){let B=H,D=B.id?.name??"default",V=X_(B),O=M_(B.body.body),I=u(B.decorators),L=c(B),S=z_(B.typeParameters),T={kind:"class",name:D,span:w(H.start,H.end),isExported:A,modifiers:L,heritage:V.length>0?V:void 0,members:O.length>0?O:void 0,decorators:I.length>0?I:void 0};if(S&&S.length>0)T.typeParameters=S;return T}if(H.type==="VariableDeclaration"){let B=H,D=[];for(let V of B.declarations){let{id:O,init:I}=V;if(O.type==="ObjectPattern"||O.type==="ArrayPattern"){let a=b_(O);for(let V_ of a)D.push({kind:"variable",name:V_.name,span:w(V_.start,V_.end),isExported:A,modifiers:[]});continue}let L="name"in O&&typeof O.name==="string"?O.name:"unknown",S="variable",T,f,j;if(I)if(I.type==="FunctionExpression"||I.type==="ArrowFunctionExpression"){S="function";let a=I;T=a.params.map(P),f=G(a.returnType)}else j=R(I);let v=[],y={kind:S,name:L,span:w(V.start,V.end),isExported:A,modifiers:v,parameters:T,returnType:f};if(j)y.initializer=j;D.push(y)}if(D.length===0)return null;if(D.length===1)return D[0];return D}if(H.type==="TSTypeAliasDeclaration")return{kind:"type",name:H.id.name,span:w(H.start,H.end),isExported:A,modifiers:[]};if(H.type==="TSInterfaceDeclaration"){let B=H,D=B.id.name,V=G_(B),O=U_(B.body.body),I=z_(B.typeParameters),L={kind:"interface",name:D,span:w(H.start,H.end),isExported:A,modifiers:[],heritage:V.length>0?V:void 0,members:O.length>0?O:void 0};if(I&&I.length>0)L.typeParameters=I;return L}if(H.type==="TSEnumDeclaration"){let B=H,D=B.id.name,V=c(B),I=B.body.members.map((L)=>{let S=L.id,T=S.type!=="Identifier",f="name"in S&&typeof S.name==="string"?S.name:("value"in S)&&typeof S.value==="string"?S.value:"unknown",j=L.initializer?R(L.initializer):void 0,v={kind:"property",name:f,span:w(L.start,L.end),isExported:!1,modifiers:[]};if(T)v.key=X(S,0);if(j)v.initializer=j;return v});return{kind:"enum",name:D,span:w(H.start,H.end),isExported:A,modifiers:V,members:I.length>0?I:void 0}}if(H.type==="TSModuleDeclaration"){let B="name"in H.id?H.id.name:("value"in H.id)?H.id.value:"unknown",D=c(H),V=[];if(H.body?.type==="TSModuleBlock")for(let O of H.body.body){if(O.type!=="ExportNamedDeclaration")continue;let I=O.declaration;if(!I)continue;let L=s(I,!1);if(L)if(Array.isArray(L))V.push(...L);else V.push(L)}return{kind:"namespace",name:B,span:w(H.start,H.end),isExported:A,modifiers:D,members:V.length>0?V:void 0}}return null}let o=[],C_=new Set;for(let H of $.body){let A=null,B=H;if(B.type==="ExportNamedDeclaration"){let V=B;if(V.declaration){if(A=s(V.declaration,!0),A&&!Array.isArray(A))A.span=w(V.start,V.end)}else if(!V.source&&V.specifiers)for(let O of V.specifiers){let I=O.local,L="name"in I?I.name:I.value;if(L)C_.add(L)}}else if(B.type==="ExportDefaultDeclaration"){let V=B,O=V.declaration;if(O){if(A=s(O,!0),A&&!Array.isArray(A))A.name="id"in O&&O.id&&typeof O.id.name==="string"?O.id.name:"default",A.isExported=!0,A.span=w(V.start,V.end);else if(!A&&O.type==="Identifier"){let I=O.name;if(I)C_.add(I)}}}else{let V=B.type;if(V==="FunctionDeclaration"||V==="TSDeclareFunction"||V==="ClassDeclaration"||V==="VariableDeclaration"||V==="TSTypeAliasDeclaration"||V==="TSInterfaceDeclaration"||V==="TSEnumDeclaration"||V==="TSModuleDeclaration")A=s(B,!1)}let D=Array.isArray(A)?A:A?[A]:[];for(let V of D){let O=H.start,I=q(O);if(I){let L=Q0(I);if(!xQ(L))V.jsDoc=L}o.push(V)}}if(C_.size>0){for(let H of o)if(!H.isExported&&C_.has(H.name))H.isExported=!0}return o}function J0(_){if(_===null||typeof _!=="object")return JSON.stringify(_);if(Array.isArray(_))return`[${_.map(J0).join(",")}]`;let $=_;return`{${Object.keys($).sort().map((J)=>`${JSON.stringify(J)}:${J0($[J])}`).join(",")}}`}function pQ(_){if(_.kind==="function"||_.kind==="method"){let $=_.parameters?.length??0,Q=_.modifiers.includes("async")?1:0;return`params:${$}|async:${Q}`}return null}function dQ(_){let $={};if(_.jsDoc)$.jsDoc=_.jsDoc;if(_.kind==="function"||_.kind==="method"){if(_.parameters!==void 0)$.parameters=_.parameters;if(_.returnType!==void 0)$.returnType=_.returnType}if(_.heritage?.length)$.heritage=_.heritage;if(_.decorators?.length)$.decorators=_.decorators;if(_.typeParameters?.length)$.typeParameters=_.typeParameters;if(_.modifiers?.length)$.modifiers=_.modifiers;if(_.initializer)$.initializer=_.initializer;if(_.key)$.key=_.key;if(_.members?.length)$.members=_.members.map((Q)=>{let J=Q.modifiers.find((W)=>W==="private"||W==="protected"||W==="public"),Y={name:Q.name,kind:Q.methodKind??Q.kind,type:Q.returnType,visibility:J,isStatic:Q.modifiers.includes("static")||void 0,isReadonly:Q.modifiers.includes("readonly")||void 0,isAccessor:Q.modifiers.includes("accessor")||void 0};if(Q.key)Y.key=Q.key;if(Q.initializer)Y.initializer=Q.initializer;if(Q.decorators?.length)Y.decorators=Q.decorators;return Y});return Object.keys($).length>0?JSON.stringify($):null}function lQ(_){let $=[_.kind];if(_.modifiers.length)$.push(`mod:${[..._.modifiers].sort().join(",")}`);if(_.typeParameters?.length)$.push(`tp:${_.typeParameters.length}`);if(_.heritage?.length){let Q=[..._.heritage].sort((J,Y)=>J.name.localeCompare(Y.name)).map((J)=>`${J.kind}:${J.name}`).join(",");$.push(`her:${Q}`)}if(_.decorators?.length)$.push(`dec:${[..._.decorators].map((Q)=>Q.name).sort().join(",")}`);if(_.methodKind)$.push(`mk:${_.methodKind}`);if(_.parameters)$.push(`p:${_.parameters.length}`);if(_.returnType)$.push(`rt:${_.returnType}`);if(_.key)$.push(`k:${J0(_.key)}`);if(_.members?.length){let Q=_.members.map((J)=>`${J.kind}:${J.modifiers.join(",")}:${J.parameters?.length??""}:${J.returnType??""}:${J.key?J0(J.key):""}`).sort().join(";");$.push(`mem:${_.members.length}:${B_(Q)}`)}return B_($.join("|"))}function L1(_,$,Q,J,Y){let W=pQ(_),z=B_(`${$}|${_.kind}|${W??""}`),Z=lQ(_);return{project:Q,filePath:J,kind:_.kind,name:$,startLine:_.span.start.line,startColumn:_.span.start.column,endLine:_.span.end.line,endColumn:_.span.end.column,isExported:_.isExported?1:0,signature:W,fingerprint:z,detailJson:dQ(_),contentHash:Y,indexedAt:new Date().toISOString(),structuralFingerprint:Z}}function E0(_){let{parsed:$,project:Q,filePath:J,contentHash:Y,symbolRepo:W}=_,z=T_($),Z=[];for(let X of z){Z.push(L1(X,X.name,Q,J,Y));for(let K of X.members??[])Z.push(L1(K,`${X.name}.${K.name}`,Q,J,Y))}W.replaceFileSymbols(Q,J,Y,Z)}import{resolve as F0,dirname as nQ,extname as iQ}from"path";function E_(_,$,Q){let J=(Y)=>{let W=iQ(Y);if(W===".js")return[Y.slice(0,-3)+".ts"];if(W===".mjs")return[Y.slice(0,-4)+".mts"];if(W===".cjs")return[Y.slice(0,-4)+".cts"];if(W===".ts"||W===".mts"||W===".cts"||W===".d.ts")return[Y];return[Y+".ts",Y+".d.ts",Y+"/index.ts",Y+"/index.d.ts",Y+".mts",Y+"/index.mts",Y+".cts",Y+"/index.cts"]};if($.startsWith(".")){let Y=Y_(F0(nQ(_),$));return J(Y)}if(Q)for(let[Y,W]of Q.paths){if(W.length===0)continue;let z=Y.indexOf("*");if(z===-1){if($===Y){let Z=[];for(let X of W)Z.push(...J(Y_(F0(Q.baseUrl,X))));return Z}}else{let Z=Y.slice(0,z),X=Y.slice(z+1);if($.startsWith(Z)&&(X===""||$.endsWith(X))){let K=$.slice(Z.length,X===""?void 0:$.length-X.length),U=[];for(let M of W)U.push(...J(Y_(F0(Q.baseUrl,M.replace("*",K)))));return U}}}return[]}function B1(_,$,Q,J=E_){let Y=new Map;for(let W of _.body){if(W.type!=="ImportDeclaration")continue;let z=W.source.value,Z=J($,z,Q);if(Z.length===0)continue;let X=Z[0];for(let K of W.specifiers)switch(K.type){case"ImportSpecifier":Y.set(K.local.name,{path:X,importedName:"name"in K.imported?K.imported.name:K.imported.value});break;case"ImportDefaultSpecifier":Y.set(K.local.name,{path:X,importedName:"default"});break;case"ImportNamespaceSpecifier":Y.set(K.local.name,{path:X,importedName:"*"});break}}return Y}import{Visitor as cQ}from"oxc-parser";function Y0(_){return"name"in _&&typeof _.name==="string"?_.name:("value"in _)&&typeof _.value==="string"?_.value:"unknown"}function aQ(_){return!_.startsWith(".")&&!_.startsWith("/")}function F_(_,$,Q,J){let Y=J(_,$,Q),W=Y.length>0?Y[0]:null,z=W===null&&aQ($);return{resolved:W,isExternal:z}}function sQ(_,$,Q,J,Y){for(let W of _.staticImports){let z=W.moduleRequest.value,{resolved:Z,isExternal:X}=F_($,z,Q,J),K={dstFilePath:Z,specifier:z};if(W.entries.length===0){let U={};if(X)U.isExternal=!0;if(Z===null&&!X)U.isUnresolved=!0;Y.push({type:"imports",srcFilePath:$,srcSymbolName:null,...K,dstSymbolName:null,...Object.keys(U).length>0?{metaJson:JSON.stringify(U)}:{}});continue}for(let U of W.entries){let M=U.isType,w={};if(M)w.isType=!0;if(X)w.isExternal=!0;if(Z===null&&!X)w.isUnresolved=!0;let q,G,C=U.importName.kind;if(C==="Default")q="default",G=U.localName.value;else if(C==="NamespaceObject")q="*",G=U.localName.value,w.importKind="namespace";else q=U.importName.name??"unknown",G=U.localName.value;Y.push({type:M?"type-references":"imports",srcFilePath:$,srcSymbolName:G,...K,dstSymbolName:q,...Object.keys(w).length>0?{metaJson:JSON.stringify(w)}:{}})}}}function rQ(_,$,Q,J,Y){let W=new Map;for(let z of _.staticImports)for(let Z of z.entries)W.set(Z.localName.value,z.moduleRequest.value);for(let z of _.staticExports)for(let Z of z.entries){let X=null;if(Z.moduleRequest)X=Z.moduleRequest.value;else if(Z.localName.name)X=W.get(Z.localName.name)??null;if(!X)continue;let{resolved:K,isExternal:U}=F_($,X,Q,J),M=Z.exportName.name??"default",w=Z.exportName.kind,q=Z.localName.name??Z.importName.name??M,G=Z.isType,C={isReExport:!0};if(w==="None");else C.specifiers=[{local:q,exported:M}];if(G)C.isType=!0;if(U)C.isExternal=!0;if(K===null&&!U)C.isUnresolved=!0;let E=null,R=null,u=Z.importName.kind;if(u==="All"||u==="AllButDefault"){if(w==="Name"&&M)R=M,C.namespaceAlias=M}else R=q,E=M;Y.push({type:G?"type-references":"re-exports",srcFilePath:$,srcSymbolName:E,dstFilePath:K,dstSymbolName:R,specifier:X,metaJson:JSON.stringify(C)})}}function oQ(_,$,Q,J,Y){for(let W of _.body){let z=W;if(z.type==="ImportDeclaration"){let Z=z,X=Z.source.value,{resolved:K,isExternal:U}=F_($,X,Q,J),M=Z.importKind==="type",w=Z.specifiers,q={dstFilePath:K,specifier:X};if(w.length===0){let G={};if(M)G.isType=!0;if(U)G.isExternal=!0;if(K===null&&!U)G.isUnresolved=!0;Y.push({type:M?"type-references":"imports",srcFilePath:$,srcSymbolName:null,...q,dstSymbolName:null,...Object.keys(G).length>0?{metaJson:JSON.stringify(G)}:{}})}else for(let G of w){let C=G.type,E=M||C==="ImportSpecifier"&&G.importKind==="type",R={};if(E)R.isType=!0;if(U)R.isExternal=!0;if(K===null&&!U)R.isUnresolved=!0;let u,P;if(C==="ImportDefaultSpecifier")u="default",P=G.local.name;else if(C==="ImportNamespaceSpecifier")u="*",P=G.local.name,R.importKind="namespace";else u=Y0(G.imported),P=G.local.name;Y.push({type:E?"type-references":"imports",srcFilePath:$,srcSymbolName:P,...q,dstSymbolName:u,...Object.keys(R).length>0?{metaJson:JSON.stringify(R)}:{}})}continue}if(z.type==="ExportAllDeclaration"){let Z=z,X=Z.source.value,{resolved:K,isExternal:U}=F_($,X,Q,J),M=Z.exportKind==="type",w=Z.exported,q=w?Y0(w):null,G={isReExport:!0};if(M)G.isType=!0;if(U)G.isExternal=!0;if(K===null&&!U)G.isUnresolved=!0;if(q)G.namespaceAlias=q;Y.push({type:M?"type-references":"re-exports",srcFilePath:$,srcSymbolName:null,dstFilePath:K,dstSymbolName:q,specifier:X,metaJson:JSON.stringify(G)});continue}if(z.type==="ExportNamedDeclaration"){let Z=z;if(!Z.source)continue;let X=Z.source.value,{resolved:K,isExternal:U}=F_($,X,Q,J),M=Z.exportKind==="type",w=Z.specifiers??[];for(let q of w){let G=M||q.exportKind==="type",C=Y0(q.local),E=Y0(q.exported),R={isReExport:!0,specifiers:[{local:C,exported:E}]};if(G)R.isType=!0;if(U)R.isExternal=!0;if(K===null&&!U)R.isUnresolved=!0;Y.push({type:G?"type-references":"re-exports",srcFilePath:$,srcSymbolName:E,dstFilePath:K,dstSymbolName:C,specifier:X,metaJson:JSON.stringify(R)})}}}}function tQ(_,$,Q,J,Y){new cQ({ImportExpression(z){let Z=z.source;if(Z.type!=="Literal"||typeof Z.value!=="string")return;let X=Z.value,{resolved:K,isExternal:U}=F_($,X,Q,J),M={isDynamic:!0};if(U)M.isExternal=!0;if(K===null&&!U)M.isUnresolved=!0;Y.push({type:"imports",srcFilePath:$,srcSymbolName:null,dstFilePath:K,dstSymbolName:null,specifier:X,metaJson:JSON.stringify(M)})},CallExpression(z){let Z=z.callee,X=!1;if(Z.type==="Identifier"&&Z.name==="require");else if(Z.type==="MemberExpression"&&!Z.computed){let C=Z,E=C.object,R=C.property;if(E.type==="Identifier"&&E.name==="require"&&R.name==="resolve")X=!0;else return}else return;let K=z.arguments;if(K.length===0)return;let U=K[0];if(U.type!=="Literal"||typeof U.value!=="string")return;let M=U.value,{resolved:w,isExternal:q}=F_($,M,Q,J),G={isRequire:!0};if(X)G.isRequireResolve=!0;if(q)G.isExternal=!0;if(w===null&&!q)G.isUnresolved=!0;Y.push({type:"imports",srcFilePath:$,srcSymbolName:null,dstFilePath:w,dstSymbolName:null,specifier:M,metaJson:JSON.stringify(G)})}}).visit(_)}function G1(_,$,Q,J=E_,Y){let W=[];if(Y)sQ(Y,$,Q,J,W),rQ(Y,$,Q,J,W);else oQ(_,$,Q,J,W);return tQ(_,$,Q,J,W),W}import{walk as VJ}from"oxc-walker";function eQ(_){return _.type==="FunctionDeclaration"||_.type==="FunctionExpression"||_.type==="ArrowFunctionExpression"}function _J(_){return _.type==="ArrowFunctionExpression"}function $J(_){return _.type==="AssignmentExpression"}function QJ(_){return _.type==="CallExpression"}function JJ(_){return _.type==="FunctionDeclaration"}function YJ(_){return _.type==="FunctionExpression"}function WJ(_){return _.type==="Identifier"}function ZJ(_){return _.type==="MemberExpression"}function zJ(_){return _.type==="TSQualifiedName"}function XJ(_){return _.type==="VariableDeclaration"}var I1=new Map,UJ=new Proxy({},{get(_,$,Q){if(typeof $!=="string")return Reflect.get(_,$,Q);let J=$.charCodeAt(0);if(J<65||J>90)return Reflect.get(_,$,Q);let Y=I1.get($);if(Y===void 0)Y=(W)=>W!==null&&W!==void 0&&W.type===$,I1.set($,Y);return Y}});function P_(_){if(!_)return null;if(_.type==="Identifier")return{root:_.name,parts:[],full:_.name};if(_.type==="ThisExpression")return{root:"this",parts:[],full:"this"};if(_.type==="Super")return{root:"super",parts:[],full:"super"};if(_.type==="MemberExpression"){let $=[],Q=_;while(Q.type==="MemberExpression"){let W=Q.property;if(!("name"in W)||typeof W.name!=="string")return null;$.push(W.name),Q=Q.object}let J;if(Q.type==="Identifier")J=Q.name;else if(Q.type==="ThisExpression")J="this";else if(Q.type==="Super")J="super";else return null;$.reverse();let Y=[J,...$].join(".");return{root:J,parts:$,full:Y}}return null}function w1(_,$,Q){let J=[],Y=[],W=[];function z(){if(Y.length>0)return Y[Y.length-1]??null;return null}function Z(U){if(!U)return null;let M=Q.get(U.root);if(U.parts.length===0){if(M)return{dstFilePath:M.path,dstSymbolName:M.importedName,resolution:"import"};return{dstFilePath:$,dstSymbolName:U.root,resolution:"local"}}else{if(M&&M.importedName==="*"){let w=U.parts[U.parts.length-1];return{dstFilePath:M.path,dstSymbolName:w,resolution:"namespace"}}return{dstFilePath:$,dstSymbolName:U.full,resolution:"local-member"}}}function X(U,M){let w=P_(U.callee),q=Z(w);if(q){let G=z(),C={};if(M)C.isNew=!0;if(G===null)C.scope="module";J.push({type:"calls",srcFilePath:$,srcSymbolName:G,dstFilePath:q.dstFilePath,dstSymbolName:q.dstSymbolName,...Object.keys(C).length>0?{metaJson:JSON.stringify(C)}:{}})}}function K(U,M){if(U.type==="FunctionDeclaration"){Y.push(U.id?.name??"anonymous");return}if(U.type==="FunctionExpression"||U.type==="ArrowFunctionExpression"){if(M?.type==="VariableDeclarator"){let G=M.id,C=G.type==="Identifier"?G.name:"anonymous";Y.push(C);return}if(M?.type==="MethodDefinition"||M?.type==="TSAbstractMethodDefinition"){let G=M.key,C=W[W.length-1]??"",E="name"in G?G.name:"anonymous",R=C?`${C}.${E}`:E;Y.push(R);return}let w=z(),q=w?`${w}.<anonymous>`:"<anonymous>";Y.push(q)}}return VJ(_,{enter(U,M){if(U.type==="ClassDeclaration"||U.type==="ClassExpression"){W.push(U.id?.name??"AnonymousClass");return}if(U.type==="FunctionDeclaration"||U.type==="FunctionExpression"||U.type==="ArrowFunctionExpression"){K(U,M);return}if(U.type==="CallExpression"){X(U,!1);return}if(U.type==="NewExpression"){X(U,!0);return}},leave(U){if(U.type==="ClassDeclaration"||U.type==="ClassExpression"){W.pop();return}if(U.type==="FunctionDeclaration"||U.type==="FunctionExpression"||U.type==="ArrowFunctionExpression"){Y.pop();return}}}),J}import{Visitor as HJ}from"oxc-parser";function D1(_,$,Q){let J=[];function Y(z){let Z=z.id?.name??"AnonymousClass";if(z.superClass){let K=P_(z.superClass);if(K){let U=j0(K,$,Q);J.push({type:"extends",srcFilePath:$,srcSymbolName:Z,...U})}}let X=z.implements??[];for(let K of X){let U=P_(K.expression);if(!U)continue;let M=j0(U,$,Q);J.push({type:"implements",srcFilePath:$,srcSymbolName:Z,...M})}}return new HJ({TSInterfaceDeclaration(z){let Z=z.id.name??"AnonymousInterface",X=z.extends;for(let K of X){let U=P_(K.expression);if(!U)continue;let M=j0(U,$,Q);J.push({type:"extends",srcFilePath:$,srcSymbolName:Z,...M})}},ClassDeclaration(z){Y(z)},ClassExpression(z){Y(z)}}).visit(_),J}function j0(_,$,Q){let J=Q.get(_.root);if(J){if(J.importedName==="*"){let Y=_.parts[_.parts.length-1]??_.root;return{dstFilePath:J.path,dstSymbolName:Y,metaJson:JSON.stringify({isNamespaceImport:!0})}}return{dstFilePath:J.path,dstSymbolName:_.parts.length>0?_.full:J.importedName}}return{dstFilePath:$,dstSymbolName:_.full,metaJson:JSON.stringify({isLocal:!0})}}function c_(_,$,Q,J=E_,Y){let W=B1(_,$,Q,J),z=G1(_,$,Q,J,Y),Z=w1(_,$,W),X=D1(_,$,W);return[...z,...Z,...X]}function k0(_){let{ast:$,project:Q,filePath:J,relationRepo:Y,projectRoot:W,tsconfigPaths:z,knownFiles:Z,boundaries:X,module:K}=_,U=g_(W,J),w=c_($,U,z,Z?(G,C,E)=>{let R=E_(G,C,E);for(let u of R){let P=N_(W,u);if(X){let m=r(P,X);if(Z.has(`${m}::${P}`))return[u]}else if(Z.has(`${Q}::${P}`))return[u]}return[]}:void 0,K),q=[];for(let G of w){if(G.dstFilePath===null){let u=N_(W,G.srcFilePath),P;if(G.metaJson)try{P=JSON.parse(G.metaJson)}catch{}let m=P?.isExternal===!0;q.push({project:Q,type:G.type,srcFilePath:u,srcSymbolName:G.srcSymbolName??null,dstProject:null,dstFilePath:null,dstSymbolName:G.dstSymbolName??null,metaJson:G.metaJson??null,specifier:G.specifier??null,isExternal:m?1:0});continue}let C=N_(W,G.dstFilePath);if(C.startsWith(".."))continue;let E=N_(W,G.srcFilePath),R=X?r(C,X):Q;q.push({project:Q,type:G.type,srcFilePath:E,srcSymbolName:G.srcSymbolName??null,dstProject:R,dstFilePath:C,dstSymbolName:G.dstSymbolName??null,metaJson:G.metaJson??null,specifier:G.specifier??null,isExternal:0})}return Y.replaceFileRelations(Q,J,q),q.length}import{isErr as KJ}from"@zipbul/result";var C1=/(?:^|\s)@([a-zA-Z][\w-]*\w|[a-zA-Z])\s*(.*)$/m;function MJ(_){let $=T_(_),Q=[];for(let J of $){Q.push({name:J.name,startLine:J.span.start.line});for(let Y of J.members??[])Q.push({name:`${J.name}.${Y.name}`,startLine:Y.span.start.line})}return Q.sort((J,Y)=>J.startLine-Y.startLine),Q}function v0(_,$,Q){let J=0,Y=_.length-1;while(J<=Y){let W=J+Y>>1;if(_[W].startLine<=$)J=W+1;else Y=W-1}if(J<_.length){let W=_[J];if(W.startLine-$<=Q)return W.name}return null}function W0(_,$,Q){let J=O_(_,$),Y=O_(_,Q);return{start:J,end:Y}}function A1(_){let{comments:$,sourceText:Q}=_;if(!$.length)return[];let J=i_(Q),Y=MJ(_),W=[],z=[...$].sort((X,K)=>X.start-K.start),Z=null;for(let X of z)if(X.type==="Block"&&X.value.startsWith("*")){Z=null;let K=`/*${X.value}*/`,U=Q0(K);if(KJ(U))continue;let M=U;if(!M.tags?.length)continue;let w=O_(J,X.end),q=v0(Y,w.line,3),G=Q.slice(X.start,X.end);for(let C of M.tags){let E=[C.name,C.description].filter(Boolean).join(" "),R=`@${C.tag}`,u=G.indexOf(R),P;if(u>=0){let m=X.start+u,i=Q.indexOf(`
|
|
4
|
+
`,m),c=i>=0?Math.min(i,X.end):X.end;P=W0(J,m,c)}else P=W0(J,X.start,X.end);W.push({tag:C.tag,value:E,source:"jsdoc",span:P,symbolName:q})}}else if(X.type==="Block"){Z=null;let K=X.value.split(`
|
|
5
|
+
`),U=0;for(let M of K){let w=M.replace(/^\s*\*?\s?/,""),q=C1.exec(w);if(q){let G=q[1],C=q[2]?.trim()??"",E=`@${G}`,R=M.indexOf(E),u=X.start+2+U+(R>=0?R:0),P=X.start+2+U+M.length,m=W0(J,u,P),i=O_(J,X.end),c=v0(Y,i.line,3);W.push({tag:G,value:C,source:"block",span:m,symbolName:c})}U+=M.length+1}}else{let K=X.value,U=C1.exec(K),M=O_(J,X.start),w=O_(J,X.end);if(U){let q=U[1],G=U[2]?.trim()??"",C=`@${q}`,E=K.indexOf(C),R=X.start+2+(E>=0?E:0),u=W0(J,R,X.end),P=v0(Y,w.line,3),m={tag:q,value:G,source:"line",span:u,symbolName:P};W.push(m),Z={annotation:m,endLine:w.line}}else if(Z&&M.line===Z.endLine+1){let q=K.trim();if(q)Z.annotation.value+=" "+q,Z.annotation.span.end=O_(J,X.end),Z.endLine=w.line}else Z=null}return W}function g0(_){let{parsed:$,project:Q,filePath:J,annotationRepo:Y}=_,W=A1($);if(Y.deleteFileAnnotations(Q,J),!W.length)return 0;let z=new Date().toISOString(),Z=W.map((X)=>({project:Q,filePath:J,tag:X.tag,value:X.value,source:X.source,symbolName:X.symbolName,startLine:X.span.start.line,startColumn:X.span.start.column,endLine:X.span.end.line,endColumn:X.span.end.column,indexedAt:z}));return Y.insertBatch(Q,J,Z),W.length}function q1(_,$){let Q=[],J=[],Y=[];for(let[U,M]of $)if(!_.has(U))Q.push({name:M.name,filePath:M.filePath,kind:M.kind,fingerprint:M.fingerprint});for(let[U,M]of _)if(!$.has(U))J.push({name:M.name,filePath:M.filePath,kind:M.kind,fingerprint:M.fingerprint});if(!Q.length||!J.length)return{renamed:Y,added:Q,removed:J};let W=new Map,z=new Map;for(let U of Q){let M=W.get(U.filePath)??[];M.push(U),W.set(U.filePath,M)}for(let U of J){let M=z.get(U.filePath)??[];M.push(U),z.set(U.filePath,M)}let Z=new Set,X=new Set;for(let[U,M]of W){let w=z.get(U);if(!w)continue;for(let q of new Set(M.map((G)=>G.kind))){let G=M.filter((P)=>P.kind===q&&!Z.has(P)),C=w.filter((P)=>P.kind===q&&!X.has(P));if(!G.length||!C.length)continue;let E=(P,m)=>{return m.get(`${P.filePath}::${P.name}`)?.structuralFingerprint??null},R=(P,m)=>{return m.get(`${P.filePath}::${P.name}`)?.startLine??0},u=new Map;for(let P of C){let m=E(P,_);if(!m)continue;let i=u.get(m)??[];i.push(P),u.set(m,i)}for(let P of G){if(Z.has(P))continue;let m=E(P,$);if(!m)continue;let i=u.get(m);if(!i)continue;let c=i.filter((X_)=>!X.has(X_));if(!c.length)continue;let z_=c[0];if(c.length>1){let X_=R(P,$),G_=Math.abs(R(z_,_)-X_);for(let M_=1;M_<c.length;M_++){let U_=Math.abs(R(c[M_],_)-X_);if(U_<G_)G_=U_,z_=c[M_]}}Y.push({oldName:z_.name,newName:P.name,filePath:U,kind:q}),Z.add(P),X.add(z_)}}}let K=Y.filter((U)=>!U.oldName.includes("."));for(let U of K){let M=`${U.oldName}.`,w=`${U.newName}.`,q=J.filter((C)=>C.filePath===U.filePath&&C.name.startsWith(M)&&!X.has(C)),G=Q.filter((C)=>C.filePath===U.filePath&&C.name.startsWith(w)&&!Z.has(C));for(let C of q){let E=C.name.slice(M.length),R=G.find((u)=>u.name.slice(w.length)===E);if(R)Y.push({oldName:C.name,newName:R.name,filePath:U.filePath,kind:C.kind}),Z.add(R),X.add(C)}}return{renamed:Y,added:Q.filter((U)=>!Z.has(U)),removed:J.filter((U)=>!X.has(U))}}var OJ=100,R1=50;class u0{opts;logger;callbacks=new Set;indexingLock=!1;pendingEvents=[];debounceTimer=null;currentIndexing=null;pendingFullIndex=!1;pendingFullIndexWaiters=[];tsconfigPathsRaw;boundariesRefresh=null;lastPruneAt=0;constructor(_){this.opts=_,this.logger=_.logger??console,this.tsconfigPathsRaw=n_(_.projectRoot)}get tsconfigPaths(){return this.tsconfigPathsRaw}fullIndex(){return this.startIndex(void 0,!0)}incrementalIndex(_){return this.startIndex(_,!1)}onIndexed(_){return this.callbacks.add(_),()=>this.callbacks.delete(_)}handleWatcherEvent(_){if(_.filePath.endsWith("tsconfig.json")){$0(this.opts.projectRoot),this.tsconfigPathsRaw=n_(this.opts.projectRoot),this.fullIndex().catch(($)=>{this.logger.error("[IndexCoordinator] fullIndex failed after tsconfig change:",$)});return}if(_.filePath.endsWith("package.json")){let $=this.opts.discoverProjectsFn??_0;this.boundariesRefresh=$(this.opts.projectRoot).then((Q)=>{this.opts.boundaries=Q,this.opts.onBoundariesChanged?.(Q)}),this.fullIndex().catch((Q)=>{this.logger.error("[IndexCoordinator] fullIndex failed after package.json change:",Q)});return}if(this.pendingEvents.push(_),this.debounceTimer===null)this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.flushPending()},OJ)}async shutdown(){if(this.debounceTimer!==null)clearTimeout(this.debounceTimer),this.debounceTimer=null;if(this.currentIndexing)await this.currentIndexing}startIndex(_,$){if(this.indexingLock){if($)return this.pendingFullIndex=!0,new Promise((J,Y)=>{this.pendingFullIndexWaiters.push({resolve:J,reject:Y})});return this.currentIndexing}this.indexingLock=!0;let Q=this.doIndex(_,$).then((J)=>{return this.fireCallbacks(J),J}).finally(()=>{if(this.indexingLock=!1,this.currentIndexing=null,this.pendingFullIndex){this.pendingFullIndex=!1;let J=this.pendingFullIndexWaiters.splice(0);this.startIndex(void 0,!0).then((Y)=>{for(let W of J)W.resolve(Y)}).catch((Y)=>{for(let W of J)W.reject(Y)})}else if(this.pendingEvents.length>0){let J=this.pendingEvents.splice(0);this.startIndex(J,!1).catch((Y)=>this.logger.error("[IndexCoordinator] incremental drain error",Y))}});return this.currentIndexing=Q,Q}async doIndex(_,$){let Q=Date.now(),{fileRepo:J,symbolRepo:Y,relationRepo:W,dbConnection:z}=this.opts;if(this.boundariesRefresh)await this.boundariesRefresh,this.boundariesRefresh=null;let Z,X;if(_!==void 0)Z=_.filter((V)=>V.eventType==="create"||V.eventType==="change").map((V)=>({filePath:V.filePath,contentHash:"",mtimeMs:0,size:0})),X=_.filter((V)=>V.eventType==="delete").map((V)=>V.filePath);else{let V=new Map;for(let I of this.opts.boundaries)for(let[L,S]of J.getFilesMap(I.project))V.set(L,S);let O=await O1({projectRoot:this.opts.projectRoot,extensions:this.opts.extensions,ignorePatterns:this.opts.ignorePatterns,fileRepo:{getFilesMap:()=>V}});Z=O.changed,X=O.deleted}let K=await this.tsconfigPathsRaw??void 0,U=new Map;for(let V of X){let O=r(V,this.opts.boundaries),I=Y.getFileSymbols(O,V);U.set(V,I)}let M=crypto.randomUUID(),w=new Map,q=new Map,G=(V)=>({name:V.name,filePath:V.filePath,kind:V.kind,fingerprint:V.fingerprint,structuralFingerprint:V.structuralFingerprint??null,startLine:V.startLine,isExported:V.isExported??0});if($)for(let V of this.opts.boundaries)for(let O of J.getAllFiles(V.project))for(let I of Y.getFileSymbols(V.project,O.filePath))w.set(`${I.filePath}::${I.name}`,G(I));else{for(let V of Z){let O=r(V.filePath,this.opts.boundaries);for(let I of Y.getFileSymbols(O,V.filePath))w.set(`${I.filePath}::${I.name}`,G(I))}for(let[,V]of U)for(let O of V)w.set(`${O.filePath}::${O.name}`,G(O))}let C=(V)=>`${V.type}|${V.srcFilePath}|${V.dstFilePath??""}|${V.srcSymbolName??""}|${V.dstSymbolName??""}|${B_(V.metaJson??"")}`,E=new Map;if($)for(let V of this.opts.boundaries)for(let O of J.getAllFiles(V.project))for(let I of W.getOutgoing(V.project,O.filePath))E.set(C(I),I);else{for(let V of Z){let O=r(V.filePath,this.opts.boundaries);for(let I of W.getOutgoing(O,V.filePath))E.set(C(I),I)}for(let V of X){let O=r(V,this.opts.boundaries);for(let I of W.getOutgoing(O,V))E.set(C(I),I)}}let{annotationRepo:R,changelogRepo:u}=this.opts,P=()=>{for(let V of X){let O=r(V,this.opts.boundaries);if(Y.deleteFileSymbols(O,V),W.deleteFileRelations(O,V),W.deleteIncomingRelations(O,V),R)R.deleteFileAnnotations(O,V);J.deleteFile(O,V)}},m=0,i=async()=>{let{projectRoot:V,boundaries:O}=this.opts,{parseCache:I}=this.opts,L=0,S=0,T=0,f=[],j=[];for(let y of Z)try{let a=g_(V,y.filePath),V_=Bun.file(a),A_=await V_.text(),h_=y.contentHash||B_(A_),S_=r(y.filePath,O);J.upsertFile({project:S_,filePath:y.filePath,mtimeMs:V_.lastModified,size:V_.size,contentHash:h_,updatedAt:new Date().toISOString(),lineCount:A_.split(`
|
|
6
|
+
`).length});let B0=(this.opts.parseSourceFn??u_)(a,A_);if(N1(B0))throw B0.data;let WQ=B0;j.push({filePath:y.filePath,text:A_,contentHash:h_,parsed:WQ,project:S_})}catch(a){this.logger.error(`[IndexCoordinator] Failed to prepare ${y.filePath}:`,a),f.push(y.filePath)}let v=new Set;for(let y of O)for(let[a]of J.getFilesMap(y.project))v.add(`${y.project}::${a}`);return z.transaction(()=>{for(let y of j){if(E0({parsed:y.parsed,project:y.project,filePath:y.filePath,contentHash:y.contentHash,symbolRepo:Y}),S+=k0({ast:y.parsed.program,project:y.project,filePath:y.filePath,relationRepo:W,projectRoot:V,tsconfigPaths:K,knownFiles:v,boundaries:O,module:y.parsed.module}),R)T+=g0({parsed:y.parsed,project:y.project,filePath:y.filePath,annotationRepo:R});I.set(y.filePath,y.parsed),L+=Y.getFileSymbols(y.project,y.filePath).length}}),{symbols:L,relations:S,annotations:T,failedFiles:f}},c=0,z_=0,X_=[];if($){let{projectRoot:V,boundaries:O}=this.opts,{parseCache:I}=this.opts,L=[];for(let T=0;T<Z.length;T+=R1){let f=Z.slice(T,T+R1),j=await Promise.allSettled(f.map(async(v)=>{let y=g_(V,v.filePath),a=Bun.file(y),V_=await a.text(),A_=v.contentHash||B_(V_);return{filePath:v.filePath,text:V_,contentHash:A_,mtimeMs:a.lastModified,size:a.size}}));for(let v=0;v<j.length;v++){let y=j[v];if(y.status==="fulfilled")L.push(y.value);else this.logger.error("[IndexCoordinator] Failed to pre-read file:",y.reason),X_.push(f[v].filePath)}}let S=[];z.transaction(()=>{for(let j of L){let v=r(j.filePath,O);J.deleteFile(v,j.filePath)}for(let j of X){let v=r(j,O);if(Y.deleteFileSymbols(v,j),W.deleteFileRelations(v,j),W.deleteIncomingRelations(v,j),R)R.deleteFileAnnotations(v,j);J.deleteFile(v,j)}for(let j of L){let v=r(j.filePath,O);J.upsertFile({project:v,filePath:j.filePath,mtimeMs:j.mtimeMs,size:j.size,contentHash:j.contentHash,updatedAt:new Date().toISOString(),lineCount:j.text.split(`
|
|
7
|
+
`).length})}let T=new Set;for(let j of O)for(let[v]of J.getFilesMap(j.project))T.add(`${j.project}::${v}`);let f=this.opts.parseSourceFn??u_;for(let j of L){let v=r(j.filePath,O),y=f(g_(V,j.filePath),j.text);if(N1(y))throw y.data;let a=y;if(S.push({filePath:j.filePath,parsed:a}),E0({parsed:a,project:v,filePath:j.filePath,contentHash:j.contentHash,symbolRepo:Y}),R)m+=g0({parsed:a,project:v,filePath:j.filePath,annotationRepo:R});z_+=k0({ast:a.program,project:v,filePath:j.filePath,relationRepo:W,projectRoot:V,tsconfigPaths:K,knownFiles:T,boundaries:O,module:a.module}),c+=Y.getFileSymbols(v,j.filePath).length}});for(let T of S)I.set(T.filePath,T.parsed)}else{P();let V=await i();c=V.symbols,z_=V.relations,m=V.annotations,X_=V.failedFiles}for(let V of Z){let O=r(V.filePath,this.opts.boundaries);for(let I of Y.getFileSymbols(O,V.filePath))q.set(`${I.filePath}::${I.name}`,G(I))}let G_=new Map;for(let V of Z){let O=r(V.filePath,this.opts.boundaries);for(let I of W.getOutgoing(O,V.filePath))G_.set(C(I),I)}let M_=(V)=>({type:V.type,srcFilePath:V.srcFilePath,dstFilePath:V.dstFilePath,srcSymbolName:V.srcSymbolName,dstSymbolName:V.dstSymbolName,dstProject:V.dstProject,metaJson:V.metaJson}),U_={added:[...G_.entries()].filter(([V])=>!E.has(V)).map(([,V])=>M_(V)),removed:[...E.entries()].filter(([V])=>!G_.has(V)).map(([,V])=>M_(V))},s={added:[],modified:[],removed:[]};for(let[V,O]of q){let I=w.get(V);if(!I)s.added.push({name:O.name,filePath:O.filePath,kind:O.kind,isExported:Boolean(O.isExported)});else{let L=I.fingerprint!==O.fingerprint,S=I.isExported!==O.isExported,T=I.structuralFingerprint!==null&&O.structuralFingerprint!==null&&I.structuralFingerprint!==O.structuralFingerprint;if(L||S||T)s.modified.push({name:O.name,filePath:O.filePath,kind:O.kind,isExported:Boolean(O.isExported)})}}for(let[V,O]of w)if(!q.has(V))s.removed.push({name:O.name,filePath:O.filePath,kind:O.kind,isExported:Boolean(O.isExported)});let o=q1(w,q),C_=new Set(o.renamed.map((V)=>`${V.filePath}::${V.oldName}`)),H=new Set(o.renamed.map((V)=>`${V.filePath}::${V.newName}`));s.added=s.added.filter((V)=>!H.has(`${V.filePath}::${V.name}`)),s.removed=s.removed.filter((V)=>!C_.has(`${V.filePath}::${V.name}`));let A=[];if(!$){for(let[O,I]of U)for(let L of I){if(!L.fingerprint)continue;let S=r(O,this.opts.boundaries),T=Y.getByFingerprint(S,L.fingerprint);if(T.length===1){let f=T[0];W.retargetRelations({dstProject:S,oldFile:O,oldSymbol:L.name,newFile:f.filePath,newSymbol:f.name}),A.push({name:f.name,filePath:f.filePath,kind:f.kind,oldFilePath:O,isExported:f.isExported??0})}}let V=new Set(A.map((O)=>`${O.oldFilePath}::${O.name}`));for(let O of o.removed){if(V.has(`${O.filePath}::${O.name}`))continue;let L=w.get(`${O.filePath}::${O.name}`)?.fingerprint;if(!L)continue;let S=r(O.filePath,this.opts.boundaries),T=Y.getByFingerprint(S,L);if(T.length===1){let f=T[0];if(f.filePath!==O.filePath||f.name!==O.name)W.retargetRelations({dstProject:S,oldFile:O.filePath,oldSymbol:O.name,newFile:f.filePath,newSymbol:f.name}),A.push({name:f.name,filePath:f.filePath,kind:f.kind,oldFilePath:O.filePath,isExported:f.isExported??0})}}}if(A.length){let V=new Set(A.map((I)=>`${I.filePath}::${I.name}`)),O=new Set(A.map((I)=>`${I.oldFilePath}::${I.name}`));s.added=s.added.filter((I)=>!V.has(`${I.filePath}::${I.name}`)),s.removed=s.removed.filter((I)=>!O.has(`${I.filePath}::${I.name}`))}if(u){let V=new Date().toISOString(),O=$?1:0,I=[];for(let L of s.added){let S=`${L.filePath}::${L.name}`,T=q.get(S),f=r(L.filePath,this.opts.boundaries);I.push({project:f,changeType:"added",symbolName:L.name,symbolKind:L.kind,filePath:L.filePath,oldName:null,oldFilePath:null,fingerprint:T?.fingerprint??null,changedAt:V,isFullIndex:O,indexRunId:M})}for(let L of s.modified){let S=q.get(`${L.filePath}::${L.name}`),T=r(L.filePath,this.opts.boundaries);I.push({project:T,changeType:"modified",symbolName:L.name,symbolKind:L.kind,filePath:L.filePath,oldName:null,oldFilePath:null,fingerprint:S?.fingerprint??null,changedAt:V,isFullIndex:O,indexRunId:M})}for(let L of s.removed){let S=`${L.filePath}::${L.name}`,T=w.get(S),f=r(L.filePath,this.opts.boundaries);I.push({project:f,changeType:"removed",symbolName:L.name,symbolKind:L.kind,filePath:L.filePath,oldName:null,oldFilePath:null,fingerprint:T?.fingerprint??null,changedAt:V,isFullIndex:O,indexRunId:M})}for(let L of o.renamed){let S=q.get(`${L.filePath}::${L.newName}`),T=r(L.filePath,this.opts.boundaries);I.push({project:T,changeType:"renamed",symbolName:L.newName,symbolKind:L.kind,filePath:L.filePath,oldName:L.oldName,oldFilePath:null,fingerprint:S?.fingerprint??null,changedAt:V,isFullIndex:O,indexRunId:M})}for(let L of A){let S=q.get(`${L.filePath}::${L.name}`),T=r(L.filePath,this.opts.boundaries);I.push({project:T,changeType:"moved",symbolName:L.name,symbolKind:L.kind,filePath:L.filePath,oldName:null,oldFilePath:L.oldFilePath,fingerprint:S?.fingerprint??null,changedAt:V,isFullIndex:O,indexRunId:M})}if(I.length)try{z.transaction(()=>{u.insertBatch(I)})}catch(L){this.logger.error("[IndexCoordinator] changelog insert failed:",L)}if(Date.now()-this.lastPruneAt>3600000){this.lastPruneAt=Date.now();let L=new Date(Date.now()-2592000000).toISOString();try{for(let S of this.opts.boundaries)u.pruneOlderThan(S.project,L)}catch(S){this.logger.error("[IndexCoordinator] changelog pruning failed:",S)}}}let B=new Set(X_),D=Z.filter((V)=>!B.has(V.filePath));return{indexedFiles:D.length,removedFiles:X.length,totalSymbols:c,totalRelations:z_,totalAnnotations:m,durationMs:Date.now()-Q,changedFiles:D.map((V)=>V.filePath),deletedFiles:[...X],failedFiles:X_,changedSymbols:s,renamedSymbols:o.renamed.map((V)=>({oldName:V.oldName,newName:V.newName,filePath:V.filePath,kind:V.kind,isExported:Boolean(q.get(`${V.filePath}::${V.newName}`)?.isExported)})),movedSymbols:A.map((V)=>({name:V.name,oldFilePath:V.oldFilePath,newFilePath:V.filePath,kind:V.kind,isExported:Boolean(V.isExported)})),changedRelations:U_}}fireCallbacks(_){for(let $ of this.callbacks)try{$(_)}catch(Q){this.logger.error("[IndexCoordinator] onIndexed callback threw:",Q)}}flushPending(){if(this.indexingLock)return;if(this.pendingEvents.length>0){let _=this.pendingEvents.splice(0);this.startIndex(_,!1).catch(($)=>this.logger.error("[IndexCoordinator] flushPending startIndex error:",$))}}}function LJ(_){try{return process.kill(_,0),!0}catch($){if(typeof $==="object"&&$&&"code"in $)return $.code!=="ESRCH";return!0}}function BJ(_){let $=new Date(_).getTime();return Number.isNaN($)?0:$}function S1(_,$,Q={}){let J=Q.now??Date.now,Y=Q.isAlive??LJ,W=Q.staleAfterSeconds??60,z=Q.instanceId;return _.immediateTransaction(()=>{let Z=_.selectOwner();if(!Z)return _.insertOwner($,z),"owner";let X=Math.floor((J()-BJ(Z.heartbeat_at))/1000),K=Y(Z.pid);if(K&&z&&Z.instance_id&&Z.instance_id!==z&&Z.pid===$)return _.replaceOwner($,z),"owner";if(K&&X<W)return"reader";return _.replaceOwner($,z),"owner"})}function T1(_,$){_.deleteOwner($)}function E1(_,$){_.touchOwner($)}class a_{#$;#_=new Map;constructor(_){this.#$=Math.max(1,_)}get size(){return this.#_.size}has(_){return this.#_.has(_)}get(_){if(!this.#_.has(_))return;let $=this.#_.get(_);return this.#_.delete(_),this.#_.set(_,$),$}set(_,$){if(this.#_.has(_))this.#_.delete(_);if(this.#_.set(_,$),this.#_.size>this.#$){let Q=this.#_.keys().next().value;if(Q!==void 0)this.#_.delete(Q)}}delete(_){return this.#_.delete(_)}clear(){this.#_.clear()}}class b0{lru;constructor(_=500){this.lru=new a_(_)}get(_){return this.lru.get(_)}set(_,$){this.lru.set(_,$)}invalidate(_){this.lru.delete(_)}invalidateAll(){this.lru.clear()}size(){return this.lru.size}}function Z0(_){return _.replaceAll("\x00","").trim().split(/\s+/).map(($)=>$.trim()).filter(($)=>$.length>0).map(($)=>`"${$.replaceAll('"','""')}"*`).join(" ")}function P0(_){let{symbolRepo:$,projectRoot:Q,project:J,query:Y}=_,W=Y.project??J,z={kind:Y.kind,filePath:Y.filePath!==void 0?K_(Q,Y.filePath):void 0,isExported:Y.isExported,project:W,limit:Y.limit,resolvedType:Y.resolvedType};if(Y.text)if(Y.exact)z.exactName=Y.text;else{let X=Z0(Y.text);if(X)z.ftsQuery=X}if(Y.decorator)z.decorator=Y.decorator;if(Y.regex)z.regex=Y.regex;return $.searchByQuery(z).map((X)=>{let K=X.name.indexOf(".");return{id:X.id,filePath:X.filePath,kind:X.kind,name:X.name,memberName:K>=0?X.name.slice(K+1):null,span:{start:{line:X.startLine,column:X.startColumn},end:{line:X.endLine,column:X.endColumn}},isExported:X.isExported===1,signature:X.signature,fingerprint:X.fingerprint,detail:X.detailJson?(()=>{try{return JSON.parse(X.detailJson)}catch{return{}}})():{}}})}function y0(_){let{relationRepo:$,projectRoot:Q,project:J,query:Y}=_;if(Y.srcFilePath&&Y.srcFilePathPattern)throw new N("validation","srcFilePath and srcFilePathPattern are mutually exclusive");if(Y.dstFilePath&&Y.dstFilePathPattern)throw new N("validation","dstFilePath and dstFilePathPattern are mutually exclusive");let W=Y.project??J,z=Y.limit,Z=!!(Y.srcFilePathPattern||Y.dstFilePathPattern),X=Z?void 0:z,U=$.searchRelations({srcFilePath:Y.srcFilePath!==void 0?K_(Q,Y.srcFilePath):void 0,srcSymbolName:Y.srcSymbolName,dstFilePath:Y.dstFilePath!==void 0?K_(Q,Y.dstFilePath):void 0,dstSymbolName:Y.dstSymbolName,dstProject:Y.dstProject,type:Y.type,project:W,specifier:Y.specifier,isExternal:Y.isExternal,limit:X}).map((M)=>{let w;if(M.metaJson)try{w=JSON.parse(M.metaJson)}catch{}return{type:M.type,srcFilePath:M.srcFilePath,srcSymbolName:M.srcSymbolName,dstFilePath:M.dstFilePath,dstSymbolName:M.dstSymbolName,dstProject:M.dstProject,isExternal:M.isExternal===1,specifier:M.specifier,metaJson:M.metaJson??void 0,meta:w}});if(Y.srcFilePathPattern||Y.dstFilePathPattern){let M=Y.srcFilePathPattern?new Bun.Glob(Y.srcFilePathPattern):null,w=Y.dstFilePathPattern?new Bun.Glob(Y.dstFilePathPattern):null;U=U.filter((q)=>(!M||M.match(q.srcFilePath))&&(!w||q.dstFilePath===null||w.match(q.dstFilePath)))}if(Z&&z!==void 0&&U.length>z)U=U.slice(0,z);return U}import{findInFiles as GJ,Lang as IJ}from"@ast-grep/napi";function wJ(_){let $=new Set,Q=/\${1,3}([A-Z_][A-Z_0-9]*)/g,J;while((J=Q.exec(_))!==null)$.add(J[0]);return[...$]}function DJ(_){return _.replace(/^\$+/,"")}function CJ(_,$){if($.length===0)return;let Q={},J=!1;for(let Y of $){let W=DJ(Y),z=_.getMatch(W);if(z){let X=z.range();Q[Y]={text:z.text(),startLine:X.start.line+1,endLine:X.end.line+1,startColumn:X.start.column,endColumn:X.end.column,startOffset:X.start.index,endOffset:X.end.index},J=!0;continue}let Z=_.getMultipleMatches(W);if(Z.length>0){let X=Z[0].range(),K=Z[Z.length-1].range();Q[Y]={text:Z.map((U)=>U.text()).join(", "),startLine:X.start.line+1,endLine:K.end.line+1,startColumn:X.start.column,endColumn:K.end.column,startOffset:X.start.index,endOffset:K.end.index},J=!0}}return J?Q:void 0}async function f0(_){if(_.filePaths.length===0)return[];let $=wJ(_.pattern),Q=[];return await GJ(IJ.TypeScript,{paths:_.filePaths,matcher:{rule:{pattern:_.pattern}}},(J,Y)=>{if(J){console.warn("[patternSearch] findInFiles callback error:",J);return}for(let W of Y){let z=W.range(),Z={filePath:W.getRoot().filename(),startLine:z.start.line+1,endLine:z.end.line+1,startColumn:z.start.column,endColumn:z.end.column,startOffset:z.start.index,endOffset:z.end.index,matchedText:W.text()},X=CJ(W,$);if(X)Z.captures=X;Q.push(Z)}}),Q}import Q_ from"typescript";import{isErr as xJ}from"@zipbul/result";import w_ from"typescript";import AJ from"path";import{err as x0}from"@zipbul/result";function qJ(_){try{return $1("fs").readFileSync(_,"utf-8")}catch{return}}function NJ(_){try{return $1("fs").readFileSync(_,"utf-8")}catch{return}}class z0{#$;#_;#J=!1;__testing__;constructor(_,$){this.#$=_,this.#_=$,this.__testing__={host:$}}static create(_,$={}){let Q=$.readConfigFile??qJ,J=$.resolveNonTrackedFile??NJ,Y=AJ.dirname(_),W=Q(_);if(W===void 0)return x0(new N("semantic",`tsconfig not found: ${_}`));let z=w_.parseJsonText(_,W),Z=z.parseDiagnostics;if(Z&&Z.length>0){let M=Z.map((w)=>w_.flattenDiagnosticMessageText(w.messageText,`
|
|
8
|
+
`)).join("; ");return x0(new N("semantic",`tsconfig parse error: ${M}`))}let X=w_.parseJsonSourceFileConfigFileContent(z,{useCaseSensitiveFileNames:!0,readDirectory:()=>[],fileExists:(M)=>Q(M)!==void 0||J(M)!==void 0,readFile:(M)=>Q(M)??J(M)},Y);if(X.errors.length>0){let M=X.errors.filter((w)=>w.category===w_.DiagnosticCategory.Error&&w.code!==18003);if(M.length>0){let w=M.map((q)=>w_.flattenDiagnosticMessageText(q.messageText,`
|
|
9
|
+
`)).join("; ");return x0(new N("semantic",`tsconfig compile error: ${w}`))}}let K=new F1(X.fileNames,X.options,Y,J),U=w_.createLanguageService(K);return new z0(U,K)}get isDisposed(){return this.#J}getProgram(){this.#Y();let _=this.#$.getProgram();if(!_)throw Error("TscProgram: LanguageService returned null Program");return _}getCompilerOptions(){return this.#Y(),this.#_.getCompilationSettings()}getLanguageService(){return this.#Y(),this.#$}notifyFileChanged(_,$){if(this.#J)return;this.#_.updateFile(_,$)}removeFile(_){if(this.#J)return;this.#_.removeFile(_)}dispose(){if(this.#J)return;this.#J=!0,this.#$.dispose()}#Y(){if(this.#J)throw Error("TscProgram is disposed")}}class F1{#$;#_;#J;#Y;#W=new Map;#Z=new Map;#Q=new Map;constructor(_,$,Q,J){this.#$=new Set(_),this.#_=$,this.#J=Q,this.#Y=J}updateFile(_,$){let Q=this.#W.get(_);if(Q){if(Q.content===$)return;this.#Z.delete(`${_}:${Q.version}`),Q.version+=1,Q.content=$}else this.#W.set(_,{version:1,content:$})}removeFile(_){let $=this.#W.get(_);if($)this.#Z.delete(`${_}:${$.version}`);this.#W.delete(_),this.#$.delete(_)}getScriptFileNames(){let _=[...this.#W.keys()];return[...[...this.#$].filter((Q)=>!this.#W.has(Q)),..._]}getScriptVersion(_){let $=this.#W.get(_);return $?String($.version):"0"}getScriptSnapshot(_){let $=this.#W.get(_);if($){let Y=`${_}:${$.version}`,W=this.#Z.get(Y);if(!W)W=w_.ScriptSnapshot.fromString($.content),this.#Z.set(Y,W);return W}let Q=this.#Q.get(_);if(Q)return Q;let J=this.#Y(_);if(J!==void 0)return Q=w_.ScriptSnapshot.fromString(J),this.#Q.set(_,Q),Q;return}getCurrentDirectory(){return this.#J}getCompilationSettings(){return this.#_}getDefaultLibFileName(_){return w_.getDefaultLibFilePath(_)}fileExists(_){if(this.#W.has(_))return!0;return this.#Y(_)!==void 0}readFile(_){let $=this.#W.get(_);if($)return $.content;return this.#Y(_)}}import h from"typescript";import X0 from"typescript";function $_(_,$){if($<0||$>=_.getEnd())return;let Q,J=(Y)=>{if($<Y.getStart(_,!1)||$>=Y.getEnd())return;Q=Y,X0.forEachChild(Y,J)};return X0.forEachChild(_,J),Q}function s_(_,$,Q){if($<0||Q<=$||Q>_.getEnd())return;let J,Y=(W)=>{let z=W.getStart(_,!1),Z=W.getEnd();if($<z||Q>Z)return;if(z===$&&Z===Q)J=W;X0.forEachChild(W,Y)};return X0.forEachChild(_,Y),J}var U0=8;function RJ(_){return!!(_.flags&h.TypeFlags.Object)&&!!(_.objectFlags&h.ObjectFlags.Reference)}function L_(_,$,Q=0,J){if(J){let G=J.get($);if(G)return G}let Y=_.typeToString($),W=$.flags,z=!!(W&h.TypeFlags.Union),Z=!!(W&h.TypeFlags.Intersection),X;if(Q<U0&&RJ($)){let G=_.getTypeArguments($);if(G.length>0)X=G}let K=!!(W&h.TypeFlags.TypeParameter)||X!==void 0&&X.length>0,U;if(z&&Q<U0)U=$.types.map((G)=>L_(_,G,Q+1,J));else if(Z&&Q<U0)U=$.types.map((G)=>L_(_,G,Q+1,J));let M;if(X&&X.length>0)M=X.map((G)=>L_(_,G,Q+1,J));let w;if(Q<U0&&!!(W&h.TypeFlags.Object)&&!z&&!Z){let G=_.getPropertiesOfType($);if(G.length>0&&G.length<=50){let C=$.symbol?.declarations?.[0];w=[];for(let E of G){let R=E.declarations?.[0]??C;if(!R)continue;try{let u=_.getTypeOfSymbolAtLocation(E,R);w.push({name:E.getName(),type:L_(_,u,Q+1,J)})}catch{}}if(w.length===0)w=void 0}}let q={text:Y,flags:W,isUnion:z,isIntersection:Z,isGeneric:K,members:U,typeArguments:M,properties:w};if(J)J.set($,q);return q}function V0(_,$,Q){if($.flags&h.TypeFlags.Any)return!1;if($.isUnion()){let z=$.types.filter((Z)=>!(Z.flags&(h.TypeFlags.Void|h.TypeFlags.Undefined|h.TypeFlags.Null)));return Q?z.some((Z)=>V0(_,Z,Q)):z.length>0&&z.every((Z)=>V0(_,Z,Q))}if($.isIntersection())return $.types.some((z)=>V0(_,z,Q));let J=_.getPropertyOfType($,"then");if(!J)return!1;let Y=J.declarations?.[0];if(!Y)return!1;return _.getTypeOfSymbolAtLocation(J,Y).getCallSignatures().some((z)=>z.parameters.length>=1)}function SJ(_){return h.isFunctionDeclaration(_)||h.isVariableDeclaration(_)||h.isClassDeclaration(_)||h.isInterfaceDeclaration(_)||h.isTypeAliasDeclaration(_)||h.isEnumDeclaration(_)||h.isMethodDeclaration(_)||h.isPropertyDeclaration(_)||h.isPropertySignature(_)||h.isMethodSignature(_)}var h0="/__gildash_type_probe__.ts";class m0{program;#$=null;constructor(_){this.program=_}#_(_){if(this.#$===_)return;this.program.notifyFileChanged(h0,`declare const __gildash_probe__: ${_};`),this.#$=_}#J(_,$){let Q=_.getSourceFile(h0);if(!Q)return null;let J=Q.statements[0];if(!J||!h.isVariableStatement(J))return null;let Y=J.declarationList.declarations[0];if(!Y)return null;let W=$.getTypeAtLocation(Y.name);if(!!(W.flags&h.TypeFlags.Any)&&W.intrinsicName==="error")return null;return W}clearProbe(){if(this.#$!==null)this.program.removeFile(h0),this.#$=null}collectAt(_,$){let Q=this.program.getProgram(),J=Q.getTypeChecker();if($<0)return null;let Y=Q.getSourceFile(_);if(!Y)return null;if($>=Y.getEnd())return null;let W=$_(Y,$);if(!W)return null;if(!h.isIdentifier(W)&&!h.isTypeNode(W))return null;try{let z=J.getTypeAtLocation(W);return L_(J,z,0,new Map)}catch{return null}}collectAtSpan(_,$){let Q=this.program.getProgram(),J=Q.getTypeChecker(),Y=Q.getSourceFile(_);if(!Y)return null;let W=s_(Y,$.start,$.end);if(!W)return null;try{let z=J.getTypeAtLocation(W);return L_(J,z,0,new Map)}catch{return null}}isThenableAtSpan(_,$,Q){let J=this.program.getProgram(),Y=J.getTypeChecker(),W=J.getSourceFile(_);if(!W)return null;let z=s_(W,$.start,$.end);if(!z)return null;try{let Z=Y.getTypeAtLocation(z);return V0(Y,Z,Q?.anyConstituent??!0)}catch{return null}}contextualCallReturnsAtSpan(_,$){let Q=this.program.getProgram(),J=Q.getTypeChecker(),Y=Q.getSourceFile(_);if(!Y)return null;let W=s_(Y,$.start,$.end);if(!W||!h.isExpression(W))return null;try{let z=J.getContextualType(W);if(!z)return null;let Z=z.isUnion()?z.types.filter((U)=>!(U.flags&(h.TypeFlags.Void|h.TypeFlags.Undefined|h.TypeFlags.Null))):[z],X=new Map,K=[];for(let U of Z)for(let M of U.getCallSignatures()){let w=J.getReturnTypeOfSignature(M);K.push(L_(J,w,0,X))}return K}catch{return null}}isAssignableToTypeAtSpan(_,$,Q,J){this.#_(Q);let Y=this.program.getProgram(),W=Y.getTypeChecker(),z=Y.getSourceFile(_);if(!z)return null;let Z=s_(z,$.start,$.end);if(!Z)return null;try{let X=this.#J(Y,W);if(!X)return null;let K=W.getTypeAtLocation(Z);if(J?.anyConstituent&&K.isUnion())return K.types.some((U)=>W.isTypeAssignableTo(U,X));return W.isTypeAssignableTo(K,X)}catch{return null}}isAssignableTo(_,$,Q,J){let Y=this.program.getProgram(),W=Y.getTypeChecker(),z=Y.getSourceFile(_);if(!z)return null;let Z=$_(z,$);if(!Z||!h.isIdentifier(Z))return null;let X=Y.getSourceFile(Q);if(!X)return null;let K=$_(X,J);if(!K||!h.isIdentifier(K))return null;try{let U=W.getTypeAtLocation(Z),M=W.getTypeAtLocation(K);return W.isTypeAssignableTo(U,M)}catch{return null}}isAssignableToType(_,$,Q,J){this.#_(Q);let Y=this.program.getProgram(),W=Y.getTypeChecker(),z=Y.getSourceFile(_);if(!z)return null;let Z=$_(z,$);if(!Z||!h.isIdentifier(Z)&&!h.isTypeNode(Z))return null;try{let X=this.#J(Y,W);if(!X)return null;let K=W.getTypeAtLocation(Z);if(J?.anyConstituent&&K.isUnion())return K.types.some((U)=>W.isTypeAssignableTo(U,X));return W.isTypeAssignableTo(K,X)}catch{return null}}isAssignableToTypeAtPositions(_,$,Q,J){let Y=new Map;if($.length===0)return Y;this.#_(Q);let W=this.program.getProgram(),z=W.getTypeChecker(),Z=W.getSourceFile(_);if(!Z)return Y;try{let X=this.#J(W,z);if(!X)return Y;let K=Z.getEnd();for(let U of $){if(U<0||U>=K)continue;let M=$_(Z,U);if(!M||!h.isIdentifier(M)&&!h.isTypeNode(M))continue;try{let w=z.getTypeAtLocation(M);if(J?.anyConstituent&&w.isUnion())Y.set(U,w.types.some((q)=>z.isTypeAssignableTo(q,X)));else Y.set(U,z.isTypeAssignableTo(w,X))}catch{}}}catch{}return Y}collectAtPositions(_,$){let Q=new Map;if($.length===0)return Q;let J=this.program.getProgram(),Y=J.getTypeChecker(),W=J.getSourceFile(_);if(!W)return Q;let z=W.getEnd(),Z=new Map;for(let X of $){if(X<0||X>=z)continue;let K=$_(W,X);if(!K)continue;if(!h.isIdentifier(K)&&!h.isTypeNode(K))continue;try{let U=Y.getTypeAtLocation(K);Q.set(X,L_(Y,U,0,Z))}catch{}}return Q}collectFile(_){let $=new Map,Q=this.program.getProgram(),J=Q.getTypeChecker(),Y=Q.getSourceFile(_);if(!Y)return $;let W=new Map;function z(Z){if(SJ(Z)&&Z.name&&h.isIdentifier(Z.name)){let X=Z.name;try{let K=J.getTypeAtLocation(X),U=X.getStart(Y);$.set(U,L_(J,K,0,W))}catch{}}h.forEachChild(Z,z)}return z(Y),$}}import D_ from"typescript";var TJ=1000,EJ=1;function FJ(_){let $=_.declarations?.[0],Q=$?.getSourceFile(),J=$?D_.getNameOfDeclaration($):void 0;return{name:_.getName(),filePath:Q?.fileName??"",position:J?.getStart(Q,!1)??$?.getStart(Q,!1)??0}}function H0(_,$=0,Q){let J=_.declarations?.[0],Y=J?.getSourceFile(),W=J?D_.getNameOfDeclaration(J):void 0,z=Y?.fileName??"",Z=W?.getStart(Y,!1)??J?.getStart(Y,!1)??0,X={name:_.getName(),filePath:z,position:Z},K=_;if(K.parent)X.parent=FJ(K.parent);let U=Q&&!!(_.flags&D_.SymbolFlags.Alias)?Q.getAliasedSymbol(_):_;if($<EJ){let M=U.flags,w=!!(M&D_.SymbolFlags.Enum),q=!!(M&(D_.SymbolFlags.NamespaceModule|D_.SymbolFlags.ValueModule)),G=!!(M&(D_.SymbolFlags.Class|D_.SymbolFlags.Interface));if(w&&U.exports&&U.exports.size>0){let C=[];U.exports.forEach((E)=>{C.push(H0(E,$+1,Q))}),X.members=C}else if(G&&U.members&&U.members.size>0){let C=[];U.members.forEach((E)=>{C.push(H0(E,$+1,Q))}),X.members=C}if(q&&U.exports&&U.exports.size>0){let C=[];U.exports.forEach((E)=>{C.push(H0(E,$+1,Q))}),X.exports=C}}return X}class p0{#$;#_;constructor(_,$=TJ){this.#$=_,this.#_=new a_($)}get(_,$){if(this.#$.isDisposed)return null;let Q=`${_}:${$}`,J=this.#_.get(Q);if(J!==void 0)return J;let Y=this.#$.getProgram(),W=Y.getSourceFile(_);if(!W)return null;let z=$_(W,$);if(!z||!D_.isIdentifier(z))return null;let Z=Y.getTypeChecker(),X=Z.getSymbolAtLocation(z);if(!X)return null;let K=H0(X,0,Z);return this.#_.set(Q,K),K}clear(){this.#_.clear()}}import n from"typescript";import F from"typescript";function d0(_){if(_.getSourceFile().isDeclarationFile)return!0;for(let $=_;$;$=$.parent)if(jJ($))return!0;return!1}function jJ(_){if(!F.canHaveModifiers(_))return!1;return F.getModifiers(_)?.some((Q)=>Q.kind===F.SyntaxKind.DeclareKeyword)??!1}function l0(_){let $=(J,Y)=>({kind:J,pos:Y.getStart(),end:Y.getEnd()}),Q=_.parent;while(Q){if(F.isSourceFile(Q)||F.isModuleDeclaration(Q))return $("module",Q);if(F.isFunctionLike(Q))return $("function",Q);if(F.isClassStaticBlockDeclaration(Q))return $("function",Q);if(F.isPropertyDeclaration(Q))return $("function",Q);if(F.isBlock(Q)){let J=Q.parent;if(J&&(F.isFunctionLike(J)||F.isClassStaticBlockDeclaration(J)))return $("function",J);return $("block",Q)}if(F.isForStatement(Q)||F.isForInStatement(Q)||F.isForOfStatement(Q)||F.isCatchClause(Q)||F.isCaseBlock(Q)||F.isWithStatement(Q))return $("block",Q);Q=Q.parent}return $("module",_.getSourceFile())}function n0(_){let $=_.parent;if(!$)return;if(F.isVariableDeclaration($)&&$.name===_)return"declaration";if(F.isParameter($)&&$.name===_)return"declaration";if(F.isBindingElement($)&&$.name===_)return"declaration";if((F.isForOfStatement($)||F.isForInStatement($))&&$.initializer===_)return"assignment";if((F.isPrefixUnaryExpression($)||F.isPostfixUnaryExpression($))&&$.operand===_&&($.operator===F.SyntaxKind.PlusPlusToken||$.operator===F.SyntaxKind.MinusMinusToken))return"update";let Q=_;while(Q.parent&&F.isParenthesizedExpression(Q.parent))Q=Q.parent;let J=Q.parent;if(J&&F.isBinaryExpression(J)&&J.left===Q)return kJ(J.operatorToken.kind);if(vJ(_))return"assignment";return}function kJ(_){switch(_){case F.SyntaxKind.EqualsToken:return"assignment";case F.SyntaxKind.PlusEqualsToken:case F.SyntaxKind.MinusEqualsToken:case F.SyntaxKind.AsteriskEqualsToken:case F.SyntaxKind.AsteriskAsteriskEqualsToken:case F.SyntaxKind.SlashEqualsToken:case F.SyntaxKind.PercentEqualsToken:case F.SyntaxKind.LessThanLessThanEqualsToken:case F.SyntaxKind.GreaterThanGreaterThanEqualsToken:case F.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:case F.SyntaxKind.AmpersandEqualsToken:case F.SyntaxKind.BarEqualsToken:case F.SyntaxKind.CaretEqualsToken:return"compound-assignment";case F.SyntaxKind.AmpersandAmpersandEqualsToken:case F.SyntaxKind.BarBarEqualsToken:case F.SyntaxKind.QuestionQuestionEqualsToken:return"logical-assignment";default:return}}function vJ(_){let $=_.parent;if(!$)return!1;if(!(F.isShorthandPropertyAssignment($)&&$.name===_||F.isPropertyAssignment($)&&$.initializer===_||F.isArrayLiteralExpression($)||F.isSpreadAssignment($)&&$.expression===_||F.isSpreadElement($)&&$.expression===_))return!1;let J=$;while(J.parent){let Y=J.parent;if(F.isBinaryExpression(Y)&&Y.left===J&&Y.operatorToken.kind===F.SyntaxKind.EqualsToken)return!0;if(F.isObjectLiteralExpression(Y)||F.isArrayLiteralExpression(Y)||F.isPropertyAssignment(Y)||F.isShorthandPropertyAssignment(Y)||F.isSpreadAssignment(Y)||F.isSpreadElement(Y)){J=Y;continue}return!1}return!1}class i0{#$;constructor(_){this.#$=_}findAt(_,$){let Q=this.#_(_,$);if(!Q)return[];let J=this.#$.getProgram(),Y=[];for(let W of Q)for(let z of W.references){let Z=J.getSourceFile(z.fileName);if(!Z)continue;Y.push(j1(z,Z))}return Y}findEnrichedAt(_,$){let Q=this.#_(_,$);if(!Q)return[];let J=this.#$.getProgram(),Y=J.getTypeChecker(),W=[];for(let z of Q){let Z=this.#J(z,J,Y);for(let X of z.references){let K=J.getSourceFile(X.fileName);if(!K)continue;let U=$_(K,X.textSpan.start),M=U&&n.isIdentifier(U)?U:void 0;W.push({...j1(X,K),writeKind:M?n0(M):void 0,isAmbient:Z,enclosingScope:l0(M??K)})}}return W}findFileBindings(_){if(this.#$.isDisposed)return[];let $=this.#$.getProgram(),Q=$.getSourceFile(_);if(!Q)return[];return c0(Q,$.getTypeChecker())}#_(_,$){if(this.#$.isDisposed)return null;let J=this.#$.getProgram().getSourceFile(_);if(!J)return null;let Y=$_(J,$);if(!Y||!n.isIdentifier(Y))return null;let W=this.#$.getLanguageService().findReferences(_,$);if(!W||W.length===0)return null;return W}#J(_,$,Q){let J=_.definition,Y=$.getSourceFile(J.fileName);if(!Y)return!1;let W=$_(Y,J.textSpan.start);if(!W)return!1;let Z=Q.getSymbolAtLocation(W)?.declarations;if(!Z||Z.length===0)return!1;return Z.every(d0)}}function c0(_,$){let Q=new Map,J=(W)=>{if(n.isIdentifier(W)&&!gJ(W)){let z=bJ(W,$);if(z){let Z=Q.get(z);if(Z)Z.push(W);else Q.set(z,[W])}}n.forEachChild(W,J)};n.forEachChild(_,J);let Y=[];for(let[W,z]of Q){let Z=W.declarations;if(!Z||Z.length===0)continue;if(Z.every(uJ))continue;let X=Z.every(d0),K=new Set(Z.map((G)=>n.getNameOfDeclaration(G)).filter((G)=>G!==void 0)),U=Z[0],M=n.getNameOfDeclaration(U)??U,w=U.getSourceFile(),q=z.map((G)=>{let C=G.getStart(_),{line:E,character:R}=_.getLineAndCharacterOfPosition(C),u=n0(G);return{filePath:_.fileName,position:C,line:E+1,column:R,isDefinition:K.has(G),isWrite:u!==void 0,writeKind:u,isAmbient:X,enclosingScope:l0(G)}});Y.push({declaration:{filePath:w.fileName,position:M.getStart(w),name:W.getName(),isAmbient:X},references:q})}return Y}function gJ(_){let $=_.parent;return n.isPropertyAccessExpression($)&&$.name===_||n.isQualifiedName($)&&$.right===_||n.isPropertyAssignment($)&&$.name===_||n.isBindingElement($)&&$.propertyName===_||n.isJsxAttribute($)&&$.name===_||n.isImportSpecifier($)&&$.propertyName===_||n.isModuleDeclaration($)&&$.name===_&&($.flags&n.NodeFlags.GlobalAugmentation)!==0}function uJ(_){return n.isPropertyDeclaration(_)||n.isPropertySignature(_)||n.isMethodDeclaration(_)||n.isMethodSignature(_)||n.isGetAccessorDeclaration(_)||n.isSetAccessorDeclaration(_)||n.isEnumMember(_)||n.isParameter(_)&&n.isIndexSignatureDeclaration(_.parent)}function bJ(_,$){let Q=_.parent;if(n.isShorthandPropertyAssignment(Q))return $.getShorthandAssignmentValueSymbol(Q);if(n.isExportSpecifier(Q)){let J=Q.parent.parent;if(n.isExportDeclaration(J)&&J.moduleSpecifier)return;return(Q.propertyName??Q.name)===_?$.getExportSpecifierLocalTargetSymbol(Q):void 0}return $.getSymbolAtLocation(_)}function j1(_,$){let{line:Q,character:J}=$.getLineAndCharacterOfPosition(_.textSpan.start);return{filePath:_.fileName,position:_.textSpan.start,line:Q+1,column:J,isDefinition:_.isDefinition??!1,isWrite:_.isWriteAccess??!1}}import r_ from"typescript";function k1(_,$,Q={}){let J=r_.createSourceFile(_,$,Q.target??r_.ScriptTarget.ESNext,!0),Y={target:Q.target,module:Q.module,jsx:Q.jsx??(_.endsWith(".tsx")?r_.JsxEmit.Preserve:void 0),jsxFactory:Q.jsxFactory,jsxFragmentFactory:Q.jsxFragmentFactory,jsxImportSource:Q.jsxImportSource,experimentalDecorators:Q.experimentalDecorators,useDefineForClassFields:Q.useDefineForClassFields,noLib:!0,noResolve:!0,types:[]},W=r_.createCompilerHost(Y,!0);W.getSourceFile=(X)=>X===_?J:void 0;let z=r_.createProgram([_],Y,W),Z=z.getSourceFile(_);if(!Z)return[];return c0(Z,z.getTypeChecker())}import p from"typescript";function PJ(_,$){let Q=$_(_,$);if(!Q)return;if(v1(Q))return Q;let J=Q.parent;for(let Y=0;Y<5&&J;Y++){if(v1(J))return J;J=J.parent}return Q}function v1(_){return p.isClassDeclaration(_)||p.isClassExpression(_)||p.isFunctionDeclaration(_)||p.isFunctionExpression(_)||p.isArrowFunction(_)||p.isVariableDeclaration(_)||p.isObjectLiteralExpression(_)}function g1(_){if(p.isClassDeclaration(_)||p.isClassExpression(_))return"class";if(p.isFunctionDeclaration(_)||p.isFunctionExpression(_)||p.isArrowFunction(_))return"function";if(p.isObjectLiteralExpression(_))return"object";if(p.isVariableDeclaration(_)&&_.initializer)return g1(_.initializer);return"class"}function yJ(_,$){if(p.isClassDeclaration(_)||p.isFunctionDeclaration(_))return _.name?.getText($)??"";if(p.isClassExpression(_))return _.name?.getText($)??"";if(p.isVariableDeclaration(_)&&p.isIdentifier(_.name))return _.name.getText($);if(p.isFunctionExpression(_))return _.name?.getText($)??"";if(p.isArrowFunction(_)&&_.parent&&p.isVariableDeclaration(_.parent)){if(p.isIdentifier(_.parent.name))return _.parent.name.getText($)}if(p.isObjectLiteralExpression(_)&&_.parent&&p.isVariableDeclaration(_.parent)){if(p.isIdentifier(_.parent.name))return _.parent.name.getText($)}return""}function fJ(_){if(!p.isClassDeclaration(_)&&!p.isClassExpression(_))return!1;let $=_.heritageClauses;if(!$)return!1;return $.some((Q)=>Q.token===p.SyntaxKind.ImplementsKeyword)}class a0{#$;constructor(_){this.#$=_}findAt(_,$){if(this.#$.isDisposed)return[];let Q=this.#$.getProgram(),J=Q.getSourceFile(_);if(!J)return[];let Y=$_(J,$);if(!Y||!p.isIdentifier(Y))return[];let z=this.#$.getLanguageService().getImplementationAtPosition(_,$);if(!z||z.length===0)return[];let Z=[];for(let X of z){if(X.kind===p.ScriptElementKind.interfaceElement||X.kind===p.ScriptElementKind.typeElement)continue;let K=Q.getSourceFile(X.fileName);if(!K)continue;let U=PJ(K,X.textSpan.start);if(!U)continue;let M=g1(U),w=yJ(U,K),q=fJ(U);Z.push({filePath:X.fileName,symbolName:w,position:X.textSpan.start,kind:M,isExplicit:q})}return Z}}function hJ(_){if(Q_.isFunctionDeclaration(_))return"function";if(Q_.isClassDeclaration(_))return"class";if(Q_.isInterfaceDeclaration(_))return"interface";if(Q_.isTypeAliasDeclaration(_))return"type";if(Q_.isEnumDeclaration(_))return"enum";if(Q_.isVariableDeclaration(_))return"const";if(Q_.isVariableStatement(_))return"const";return"unknown"}function u1(_){if(_>=97&&_<=122)return!0;if(_>=65&&_<=90)return!0;if(_>=48&&_<=57)return!0;if(_===95||_===36)return!0;return!1}class K0{#$;#_;#J;#Y;#W;#Z=!1;constructor(_,$,Q,J,Y){this.#$=_,this.#_=$,this.#J=Q,this.#Y=J,this.#W=Y}static create(_,$={}){let Q=z0.create(_,{readConfigFile:$.readConfigFile,resolveNonTrackedFile:$.resolveNonTrackedFile});if(xJ(Q))return Q;let J=Q,Y=$.typeCollector??new m0(J),W=$.symbolGraph??new p0(J),z=$.referenceResolver??new i0(J),Z=$.implementationFinder??new a0(J);return new K0(J,Y,W,z,Z)}get isDisposed(){return this.#Z}collectTypeAt(_,$){return this.#Q(),this.#_.collectAt(_,$)}collectFileTypes(_){return this.#Q(),this.#_.collectFile(_)}collectTypesAtPositions(_,$){return this.#Q(),this.#_.collectAtPositions(_,$)}collectAtSpan(_,$){return this.#Q(),this.#_.collectAtSpan(_,$)}isThenableAtSpan(_,$,Q){return this.#Q(),this.#_.isThenableAtSpan(_,$,Q)}contextualCallReturnsAtSpan(_,$){return this.#Q(),this.#_.contextualCallReturnsAtSpan(_,$)}isTypeAssignableToTypeAtSpan(_,$,Q,J){return this.#Q(),this.#_.isAssignableToTypeAtSpan(_,$,Q,J)}findReferences(_,$){return this.#Q(),this.#Y.findAt(_,$)}findEnrichedReferences(_,$){return this.#Q(),this.#Y.findEnrichedAt(_,$)}getFileBindings(_){return this.#Q(),this.#Y.findFileBindings(_)}getStandaloneFileBindings(_,$){this.#Q();let Q=this.#$.getCompilerOptions();return k1(_,$,{target:Q.target,module:Q.module,jsx:Q.jsx,jsxFactory:Q.jsxFactory,jsxFragmentFactory:Q.jsxFragmentFactory,jsxImportSource:Q.jsxImportSource,experimentalDecorators:Q.experimentalDecorators,useDefineForClassFields:Q.useDefineForClassFields})}getFileBindingsBatch(_){this.#Q();for(let Q of _)this.notifyFileChanged(Q.filePath,Q.content);let $=new Map;for(let Q of _)$.set(Q.filePath,this.#Y.findFileBindings(Q.filePath));return $}findImplementations(_,$){return this.#Q(),this.#W.findAt(_,$)}isTypeAssignableTo(_,$,Q,J){return this.#Q(),this.#_.isAssignableTo(_,$,Q,J)}isTypeAssignableToType(_,$,Q,J){return this.#Q(),this.#_.isAssignableToType(_,$,Q,J)}isTypeAssignableToTypeAtPositions(_,$,Q,J){return this.#Q(),this.#_.isAssignableToTypeAtPositions(_,$,Q,J)}getSymbolNode(_,$){return this.#Q(),this.#J.get(_,$)}getBaseTypes(_,$){this.#Q();let Q=this.#$.getProgram(),J=Q.getSourceFile(_);if(!J)return null;let Y=$_(J,$);if(!Y)return null;let W=Q.getTypeChecker(),z=W.getTypeAtLocation(Y);if(!(z.flags&Q_.TypeFlags.Object)||!(z.objectFlags&Q_.ObjectFlags.ClassOrInterface))return null;let Z=W.getBaseTypes(z);if(!Z||Z.length===0)return[];let X=new Map;return Z.map((K)=>L_(W,K,0,X))}getModuleInterface(_){this.#Q();let $=[],Q=this.#$.getProgram(),J=Q.getSourceFile(_);if(!J)return{filePath:_,exports:$};let Y=Q.getTypeChecker(),W=Y.getSymbolAtLocation(J);if(W){let z=Y.getExportsOfModule(W),Z=new Map;for(let X of z){let K=X.getName(),U=X.declarations?.[0],M="unknown";if(U){if(M=hJ(U),M==="unknown"&&Q_.isExportAssignment(U))M="const"}let w=null;try{let q=Y.getTypeOfSymbolAtLocation(X,U??J);w=L_(Y,q,0,Z)}catch{}$.push({name:K,kind:M,resolvedType:w})}}return{filePath:_,exports:$}}notifyFileChanged(_,$){if(this.#Z)return;this.#$.notifyFileChanged(_,$),this.#J.clear()}notifyFileDeleted(_){if(this.#Z)return;this.#$.removeFile(_),this.#J.clear()}lineColumnToPosition(_,$,Q){this.#Q();let J=this.#$.getProgram().getSourceFile(_);if(!J)return null;try{return Q_.getPositionOfLineAndCharacter(J,$-1,Q)}catch{return null}}findNamePosition(_,$,Q){this.#Q();let J=this.#$.getProgram().getSourceFile(_);if(!J)return null;let Y=J.getFullText(),W=$;while(W<Y.length){let z=Y.indexOf(Q,W);if(z<0)return null;let Z=z>0?Y.charCodeAt(z-1):32,X=z+Q.length<Y.length?Y.charCodeAt(z+Q.length):32;if(!u1(Z)&&!u1(X))return z;W=z+1}return null}getDiagnostics(_,$){this.#Q();let Q=this.#$.getProgram(),J=Q.getSourceFile(_);if(!J)return[];let Y={[Q_.DiagnosticCategory.Error]:"error",[Q_.DiagnosticCategory.Warning]:"warning",[Q_.DiagnosticCategory.Suggestion]:"suggestion",[Q_.DiagnosticCategory.Message]:"suggestion"};return(($?.preEmit)?Q_.getPreEmitDiagnostics(Q,J):Q.getSemanticDiagnostics(J)).map((z)=>{let Z=1,X=0;if(z.file&&z.start!==void 0){let K=Q_.getLineAndCharacterOfPosition(z.file,z.start);Z=K.line+1,X=K.character}return{filePath:z.file?.fileName??_,line:Z,column:X,message:Q_.flattenDiagnosticMessageText(z.messageText,`
|
|
10
|
+
`),code:z.code,category:Y[z.category]??"error"}})}dispose(){if(this.#Z)return;this.#Z=!0,this.#_.clearProbe(),this.#$.dispose(),this.#J.clear()}#Q(){if(this.#Z)throw Error("SemanticLayer is disposed")}}import{eq as j_,and as b1,sql as mJ}from"drizzle-orm";var P1=80;class s0{db;constructor(_){this.db=_}insertBatch(_,$,Q){if(!Q.length)return;let J=Q.map((Y)=>({project:_,filePath:$,tag:Y.tag,value:Y.value,source:Y.source,symbolName:Y.symbolName,startLine:Y.startLine,startColumn:Y.startColumn,endLine:Y.endLine,endColumn:Y.endColumn,indexedAt:Y.indexedAt}));for(let Y=0;Y<J.length;Y+=P1)this.db.drizzleDb.insert(H_).values(J.slice(Y,Y+P1)).run()}deleteFileAnnotations(_,$){this.db.drizzleDb.delete(H_).where(b1(j_(H_.project,_),j_(H_.filePath,$))).run()}search(_){let $=this.db.drizzleDb.select().from(H_).where(b1(_.project?j_(H_.project,_.project):void 0,_.tag?j_(H_.tag,_.tag):void 0,_.filePath?j_(H_.filePath,_.filePath):void 0,_.symbolName?j_(H_.symbolName,_.symbolName):void 0,_.source?j_(H_.source,_.source):void 0,_.ftsQuery?mJ`${H_.id} IN (SELECT rowid FROM annotations_fts WHERE annotations_fts MATCH ${_.ftsQuery})`:void 0));return(_.limit!==void 0?$.limit(_.limit):$).all()}}import{eq as y_,and as y1,sql as o_,gt as pJ,gte as dJ}from"drizzle-orm";var f1=80;class r0{db;constructor(_){this.db=_}insertBatch(_){if(!_.length)return;let $=_.map((Q)=>({project:Q.project,changeType:Q.changeType,symbolName:Q.symbolName,symbolKind:Q.symbolKind,filePath:Q.filePath,oldName:Q.oldName,oldFilePath:Q.oldFilePath,fingerprint:Q.fingerprint,changedAt:Q.changedAt,isFullIndex:Q.isFullIndex,indexRunId:Q.indexRunId}));for(let Q=0;Q<$.length;Q+=f1)this.db.drizzleDb.insert(J_).values($.slice(Q,Q+f1)).run()}getSince(_){return this.db.drizzleDb.select().from(J_).where(y1(y_(J_.project,_.project),dJ(J_.changedAt,_.since),_.symbolName?y_(J_.symbolName,_.symbolName):void 0,_.changeTypes?.length?o_`${J_.changeType} IN (${o_.join(_.changeTypes.map(($)=>o_`${$}`),o_`, `)})`:void 0,_.filePath?y_(J_.filePath,_.filePath):void 0,_.includeFullIndex?void 0:y_(J_.isFullIndex,0),_.indexRunId?y_(J_.indexRunId,_.indexRunId):void 0,_.afterId?pJ(J_.id,_.afterId):void 0)).orderBy(J_.id).limit(_.limit).all()}pruneOlderThan(_,$){return this.db.drizzleDb.delete(J_).where(y1(y_(J_.project,_),o_`${J_.changedAt} < ${$}`)).run().changes}}function x1(_){let{annotationRepo:$,project:Q,query:J}=_,Y=J.project??Q,W;if(J.text){let Z=Z0(J.text);if(Z)W=Z}return $.search({project:Y,tag:J.tag,filePath:J.filePath,symbolName:J.symbolName,source:J.source,ftsQuery:W,limit:J.limit}).map((Z)=>({tag:Z.tag,value:Z.value,source:Z.source,filePath:Z.filePath,symbolName:Z.symbolName,span:{start:{line:Z.startLine,column:Z.startColumn},end:{line:Z.endLine,column:Z.endColumn}}}))}function __(_){if(_.closed)throw new N("closed","Gildash: instance is closed")}function k(_,$,Q,J){__(_);try{return J()}catch(Y){if(Y instanceof N)throw Y;throw new N($,`Gildash: ${Q} failed`,{cause:Y})}}async function o0(_,$,Q,J){__(_);try{return await J()}catch(Y){if(Y instanceof N)throw Y;throw new N($,`Gildash: ${Q} failed`,{cause:Y})}}class M0{options;adjacencyList=new Map;reverseAdjacencyList=new Map;constructor(_){this.options=_}build(){this.adjacencyList=new Map,this.reverseAdjacencyList=new Map;let $=[this.options.project,...this.options.additionalProjects??[]].flatMap((Q)=>[...this.options.relationRepo.getByType(Q,"imports"),...this.options.relationRepo.getByType(Q,"type-references"),...this.options.relationRepo.getByType(Q,"re-exports")]);for(let Q of $){let{srcFilePath:J,dstFilePath:Y}=Q;if(Y===null)continue;if(!this.adjacencyList.has(J))this.adjacencyList.set(J,new Set);if(this.adjacencyList.get(J).add(Y),!this.adjacencyList.has(Y))this.adjacencyList.set(Y,new Set);if(!this.reverseAdjacencyList.has(Y))this.reverseAdjacencyList.set(Y,new Set);this.reverseAdjacencyList.get(Y).add(J)}}patchFiles(_,$,Q){let J=new Set([..._,...$]);for(let Y of J){let W=this.adjacencyList.get(Y);if(W){for(let Z of W)this.reverseAdjacencyList.get(Z)?.delete(Y);W.clear()}let z=this.reverseAdjacencyList.get(Y);if(z){for(let Z of z)this.adjacencyList.get(Z)?.delete(Y);z.clear()}}for(let Y of $)this.adjacencyList.delete(Y),this.reverseAdjacencyList.delete(Y);for(let Y of _){let W=Q(Y);for(let z of W){if(!this.adjacencyList.has(z.srcFilePath))this.adjacencyList.set(z.srcFilePath,new Set);if(this.adjacencyList.get(z.srcFilePath).add(z.dstFilePath),!this.adjacencyList.has(z.dstFilePath))this.adjacencyList.set(z.dstFilePath,new Set);if(!this.reverseAdjacencyList.has(z.dstFilePath))this.reverseAdjacencyList.set(z.dstFilePath,new Set);this.reverseAdjacencyList.get(z.dstFilePath).add(z.srcFilePath)}}}getDependencies(_){return Array.from(this.adjacencyList.get(_)??[])}getDependents(_){return Array.from(this.reverseAdjacencyList.get(_)??[])}getTransitiveDependents(_){let $=new Set,Q=[_];while(Q.length>0){let J=Q.shift();for(let Y of this.reverseAdjacencyList.get(J)??[])if(!$.has(Y))$.add(Y),Q.push(Y)}return Array.from($)}hasCycle(){let _=new Set,$=new Set;for(let Q of this.adjacencyList.keys()){if(_.has(Q))continue;let J=[{node:Q,entered:!1}];while(J.length>0){let Y=J.pop();if(Y.entered){$.delete(Y.node);continue}if($.has(Y.node))return!0;if(_.has(Y.node))continue;_.add(Y.node),$.add(Y.node),J.push({node:Y.node,entered:!0});for(let W of this.adjacencyList.get(Y.node)??[]){if($.has(W))return!0;if(!_.has(W))J.push({node:W,entered:!1})}}}return!1}getAffectedByChange(_){let $=new Set;for(let Q of _)for(let J of this.getTransitiveDependents(Q))$.add(J);return Array.from($)}getAdjacencyList(){let _=new Map;for(let[$,Q]of this.adjacencyList)_.set($,Array.from(Q));return _}getTransitiveDependencies(_){let $=new Set,Q=[_];while(Q.length>0){let J=Q.shift();for(let Y of this.adjacencyList.get(J)??[])if(!$.has(Y))$.add(Y),Q.push(Y)}return Array.from($)}getCyclePaths(_){let $=_?.maxCycles??1/0;if($<=0)return[];let Q=new Map;for(let[J,Y]of this.adjacencyList)Q.set(J,Array.from(Y));return aJ(Q,$)}}var lJ=(_,$)=>_.localeCompare($);function nJ(_){let $=_.length>1&&_[0]===_[_.length-1]?_.slice(0,-1):[..._];if($.length===0)return[];let Q=$;for(let J=1;J<$.length;J++){let Y=$.slice(J).concat($.slice(0,J));if(Y.join("::")<Q.join("::"))Q=Y}return[...Q]}function t0(_,$,Q){let J=nJ(Q);if(J.length===0)return!1;let Y=J.join("->");if(_.has(Y))return!1;return _.add(Y),$.push(J),!0}function iJ(_){let $=0,Q=[],J=new Set,Y=new Map,W=new Map,z=[],Z=(X)=>{Y.set(X,$),W.set(X,$),$+=1,Q.push(X),J.add(X);for(let K of _.get(X)??[])if(!Y.has(K))Z(K),W.set(X,Math.min(W.get(X)??0,W.get(K)??0));else if(J.has(K))W.set(X,Math.min(W.get(X)??0,Y.get(K)??0));if(W.get(X)===Y.get(X)){let K=[],U="";do U=Q.pop()??"",J.delete(U),K.push(U);while(U!==X&&Q.length>0);z.push(K)}};for(let X of _.keys())if(!Y.has(X))Z(X);return{components:z}}function cJ(_,$,Q){let J=[],Y=new Set,W=[..._].sort(lJ),z=(Z,X,K)=>{X.delete(Z);let U=K.get(Z);if(!U)return;for(let M of U)if(X.has(M))z(M,X,K);U.clear()};for(let Z=0;Z<W.length&&J.length<Q;Z++){let X=W[Z]??"",K=new Set(W.slice(Z)),U=new Set,M=new Map,w=[],q=(C)=>($.get(C)??[]).filter((E)=>K.has(E)),G=(C)=>{if(J.length>=Q)return!0;let E=!1;w.push(C),U.add(C);for(let R of q(C)){if(J.length>=Q)break;if(R===X)t0(Y,J,w.concat(X)),E=!0;else if(!U.has(R)){if(G(R))E=!0}}if(E)z(C,U,M);else for(let R of q(C)){let u=M.get(R)??new Set;u.add(C),M.set(R,u)}return w.pop(),E};G(X)}return J}function aJ(_,$){let{components:Q}=iJ(_),J=[],Y=new Set;for(let W of Q){if(J.length>=$)break;if(W.length===0)continue;if(W.length===1){let X=W[0]??"";if((_.get(X)??[]).includes(X))t0(Y,J,[X,X]);continue}let z=$-J.length,Z=cJ(W,_,z);for(let X of Z){if(J.length>=$)break;t0(Y,J,X)}}return J}var sJ=15000;function O0(_){_.graphCache=null,_.graphCacheKey=null,_.graphCacheBuiltAt=null}function k_(_,$){let Q=$??"__cross__";if(_.graphCache&&_.graphCacheBuiltAt!==null){if(Date.now()-_.graphCacheBuiltAt>sJ)_.graphCache=null,_.graphCacheKey=null,_.graphCacheBuiltAt=null}if(_.graphCache&&_.graphCacheKey===Q)return _.graphCache;let J=new M0({relationRepo:_.relationRepo,project:$??_.defaultProject,additionalProjects:$?void 0:_.boundaries?.map((Y)=>Y.project)});return J.build(),_.graphCache=J,_.graphCacheKey=Q,_.graphCacheBuiltAt=Date.now(),J}function h1(_,$,Q,J=1e4){return k(_,"search","getDependencies",()=>_.relationSearchFn({relationRepo:_.relationRepo,projectRoot:_.projectRoot,project:Q??_.defaultProject,query:{srcFilePath:$,type:"imports",project:Q??_.defaultProject,limit:J}}).filter((Y)=>Y.dstFilePath!==null).map((Y)=>Y.dstFilePath))}function m1(_,$,Q,J=1e4){return k(_,"search","getDependents",()=>_.relationSearchFn({relationRepo:_.relationRepo,projectRoot:_.projectRoot,project:Q??_.defaultProject,query:{dstFilePath:$,type:"imports",project:Q??_.defaultProject,limit:J}}).map((Y)=>Y.srcFilePath))}async function p1(_,$,Q){return k(_,"search","getAffected",()=>{return k_(_,Q).getAffectedByChange($.map((Y)=>K_(_.projectRoot,Y)))})}async function d1(_,$){return k(_,"search","hasCycle",()=>{return k_(_,$).hasCycle()})}async function l1(_,$){return k(_,"search","getImportGraph",()=>{return k_(_,$).getAdjacencyList()})}async function n1(_,$,Q){return k(_,"search","getTransitiveDependencies",()=>{return k_(_,Q).getTransitiveDependencies(K_(_.projectRoot,$))})}async function i1(_,$,Q){return k(_,"search","getTransitiveDependents",()=>{return k_(_,Q).getTransitiveDependents(K_(_.projectRoot,$))})}async function c1(_,$,Q){return k(_,"search","getCyclePaths",()=>{return k_(_,$).getCyclePaths(Q)})}async function a1(_,$,Q){return k(_,"search","getFanMetrics",()=>{let J=k_(_,Q),Y=K_(_.projectRoot,$);return{filePath:$,fanIn:J.getDependents(Y).length,fanOut:J.getDependencies(Y).length}})}var tJ=30000,s1=15000,eJ=10;function _6(_,$){_.boundaries=$,_.defaultProject=$[0]?.project??f_.basename(_.projectRoot)}function $6(_,$){return(Q)=>{for(let J of _.onFileChangedCallbacks)try{J(Q)}catch(Y){_.logger.error("[Gildash] onFileChanged callback threw:",Y)}if($.handleWatcherEvent?.(Q),_.semanticLayer)if(Q.eventType==="delete")try{_.semanticLayer.notifyFileDeleted(Q.filePath)}catch(J){_.logger.error("[Gildash] semanticLayer.notifyFileDeleted threw:",J);for(let Y of _.onErrorCallbacks)try{Y(J instanceof N?J:new N("semantic","semantic notifyFileDeleted failed",{cause:J}))}catch{}}else _.readFileFn(Q.filePath).then((J)=>{try{_.semanticLayer?.notifyFileChanged(Q.filePath,J)}catch(Y){_.logger.error("[Gildash] semanticLayer.notifyFileChanged threw:",Y);for(let W of _.onErrorCallbacks)try{W(Y instanceof N?Y:new N("semantic","semantic notifyFileChanged failed",{cause:Y}))}catch{}}}).catch((J)=>{_.logger.error("[Gildash] failed to read file for semantic layer",Q.filePath,J);try{_.semanticLayer?.notifyFileDeleted(Q.filePath)}catch(Y){_.logger.error("[Gildash] semanticLayer.notifyFileDeleted threw during read error recovery:",Y)}})}}async function Q6(_){if(!_.semanticLayer)return;let $=_.fileRepo.getAllFiles(_.defaultProject);await Promise.all($.map(async(Q)=>{try{let J=f_.resolve(_.projectRoot,Q.filePath),Y=await _.readFileFn(J);_.semanticLayer?.notifyFileChanged(J,Y)}catch{}}))}async function r1(_,$){let Q=_.coordinatorFactory?_.coordinatorFactory():new u0({projectRoot:_.projectRoot,boundaries:_.boundaries,extensions:_.extensions,ignorePatterns:_.ignorePatterns,dbConnection:_.db,parseCache:_.parseCache,fileRepo:_.fileRepo,symbolRepo:_.symbolRepo,relationRepo:_.relationRepo,annotationRepo:_.annotationRepo??void 0,changelogRepo:_.changelogRepo??void 0,onBoundariesChanged:(J)=>_6(_,J),logger:_.logger});_.coordinator=Q;for(let J of _.onIndexedCallbacks)Q.onIndexed(J);if(Q.onIndexed((J)=>{let Y=J.changedFiles.length+J.deletedFiles.length;if(_.graphCache&&Y>0&&Y<100){let W=_.relationRepo;_.graphCache.patchFiles(J.changedFiles,J.deletedFiles,(z)=>{return[_.defaultProject,..._.boundaries.map((X)=>X.project)].flatMap((X)=>W.getByType(X,"imports").concat(W.getByType(X,"type-references")).concat(W.getByType(X,"re-exports"))).filter((X)=>X.dstFilePath!==null&&(X.srcFilePath===z||X.dstFilePath===z)).map((X)=>({srcFilePath:X.srcFilePath,dstFilePath:X.dstFilePath}))}),_.graphCacheBuiltAt=Date.now()}else O0(_)}),$.isWatchMode){let J=_.watcherFactory?_.watcherFactory():new S0({projectRoot:_.projectRoot,ignorePatterns:_.ignorePatterns,extensions:_.extensions},void 0,_.logger);await J.start($6(_,Q)).then((Y)=>{if(t_(Y))throw Y.data}),_.watcher=J,_.timer=setInterval(()=>{if(_.closed)return;_.updateHeartbeatFn(_.db,process.pid)},tJ)}await Q.fullIndex(),await Q6(_)}function J6(_,$){let Q=["SIGTERM","SIGINT","beforeExit"];for(let J of Q){let Y=()=>{$().catch((W)=>_.logger.error("[Gildash] close error during signal",J,W))};if(J==="beforeExit")process.on("beforeExit",Y);else process.on(J,Y);_.signalHandlers.push([J,Y])}}async function o1(_){let{projectRoot:$,extensions:Q=[".ts",".mts",".cts"],ignorePatterns:J=["**/node_modules/**"],parseCacheCapacity:Y=500,logger:W=console,existsSyncFn:z=oJ,dbConnectionFactory:Z,watcherFactory:X,coordinatorFactory:K,repositoryFactory:U,acquireWatcherRoleFn:M=S1,releaseWatcherRoleFn:w=T1,updateHeartbeatFn:q=E1,discoverProjectsFn:G=_0,parseSourceFn:C=u_,extractSymbolsFn:E=T_,extractRelationsFn:R=c_,symbolSearchFn:u=P0,relationSearchFn:P=y0,patternSearchFn:m=f0,loadTsconfigPathsFn:i=n_,readFileFn:c=async(o)=>Bun.file(o).text(),unlinkFn:z_=async(o)=>{await Bun.file(o).unlink()},watchMode:X_,semantic:G_,semanticLayerFactory:M_}=_;if(!f_.isAbsolute($))throw new N("validation",`Gildash: projectRoot must be an absolute path, got: "${$}"`);if(!z($))throw new N("validation",`Gildash: projectRoot does not exist: "${$}"`);let U_=Z?Z():new w0({projectRoot:$}),s=U_.open();if(t_(s))throw s.data;try{let o=await G($),C_=o[0]?.project??f_.basename($),H=U?U():(()=>{let S=U_;return{fileRepo:new D0(S),symbolRepo:new A0(S),relationRepo:new q0(S),parseCache:new b0(Y)}})(),A=U?null:U_,B=A?new s0(A):null,D=A?new r0(A):null,V=X_??!0,O=crypto.randomUUID(),I;if(V)I=await Promise.resolve(M(U_,process.pid,{instanceId:O}));else I="owner";let L={projectRoot:$,extensions:Q,ignorePatterns:J,logger:W,defaultProject:C_,role:I,db:U_,symbolRepo:H.symbolRepo,relationRepo:H.relationRepo,fileRepo:H.fileRepo,parseCache:H.parseCache,annotationRepo:B,changelogRepo:D,annotationSearchFn:x1,releaseWatcherRoleFn:w,parseSourceFn:C,extractSymbolsFn:E,extractRelationsFn:R,symbolSearchFn:u,relationSearchFn:P,patternSearchFn:m,readFileFn:c,unlinkFn:z_,existsSyncFn:z,acquireWatcherRoleFn:M,updateHeartbeatFn:q,watcherFactory:X,coordinatorFactory:K,instanceId:O,closed:!1,coordinator:null,watcher:null,timer:null,signalHandlers:[],tsconfigPaths:null,boundaries:o,onIndexedCallbacks:new Set,onFileChangedCallbacks:new Set,onErrorCallbacks:new Set,onRoleChangedCallbacks:new Set,graphCache:null,graphCacheKey:null,graphCacheBuiltAt:null,semanticLayer:null};if($0($),L.tsconfigPaths=await i($),G_){let S=f_.join($,"tsconfig.json");try{if(M_)L.semanticLayer=M_(S);else{let T=K0.create(S);if(t_(T))throw T.data;L.semanticLayer=T}}catch(T){if(T instanceof N)throw T;throw new N("semantic","Gildash: semantic layer creation failed",{cause:T})}}if(I==="owner")await r1(L,{isWatchMode:V});else{let S=0,T=async()=>{try{let f=await Promise.resolve(L.acquireWatcherRoleFn(L.db,process.pid,{instanceId:L.instanceId}));if(S=0,f==="owner"){L.role="owner";for(let j of L.onRoleChangedCallbacks)try{j("owner")}catch(v){L.logger.error("[Gildash] onRoleChanged callback threw:",v)}clearInterval(L.timer),L.timer=null;try{await r1(L,{isWatchMode:!0})}catch(j){if(L.logger.error("[Gildash] owner promotion failed, reverting to reader",j),L.role="reader",L.timer!==null)clearInterval(L.timer),L.timer=null;if(L.watcher){let v=await L.watcher.close();if(t_(v))L.logger.error("[Gildash] watcher close error during promotion rollback",v.data);L.watcher=null}if(L.coordinator)await L.coordinator.shutdown().catch((v)=>L.logger.error("[Gildash] coordinator shutdown error during promotion rollback",v)),L.coordinator=null;try{L.releaseWatcherRoleFn(L.db,process.pid)}catch(v){L.logger.error("[Gildash] failed to release watcher role during promotion rollback",v)}L.timer=setInterval(T,s1)}}}catch(f){S++;let j=f instanceof N?f:new N("watcher","Gildash: healthcheck error",{cause:f});for(let v of L.onErrorCallbacks)try{v(j)}catch(y){L.logger.error("[Gildash] onError callback threw:",y)}if(L.logger.error("[Gildash] healthcheck error",f),S>=eJ)L.logger.error("[Gildash] healthcheck failed too many times, shutting down"),clearInterval(L.timer),L.timer=null,L0(L).catch((v)=>L.logger.error("[Gildash] close error during healthcheck shutdown",v))}};L.timer=setInterval(T,s1)}if(V)J6(L,()=>L0(L));return L}catch(o){if(U_.close(),o instanceof N)throw o;throw new N("store","Gildash: initialization failed",{cause:o})}}async function L0(_,$){if(_.closed)return;_.closed=!0;let Q=[];for(let[J,Y]of _.signalHandlers)if(J==="beforeExit")process.off("beforeExit",Y);else process.off(J,Y);if(_.signalHandlers=[],_.semanticLayer){try{_.semanticLayer.dispose()}catch(J){Q.push(J instanceof Error?J:Error(String(J)))}_.semanticLayer=null}if(_.coordinator)try{await _.coordinator.shutdown()}catch(J){Q.push(J instanceof Error?J:Error(String(J)))}if(_.watcher){let J=await _.watcher.close();if(t_(J))Q.push(J.data)}if(_.timer!==null)clearInterval(_.timer),_.timer=null;try{_.releaseWatcherRoleFn(_.db,process.pid)}catch(J){Q.push(J instanceof Error?J:Error(String(J)))}try{_.db.close()}catch(J){Q.push(J instanceof Error?J:Error(String(J)))}if($?.cleanup)for(let J of["","-wal","-shm"])try{await _.unlinkFn(f_.join(_.projectRoot,q_,e_+J))}catch{}if(Q.length>0)throw new N("close","Gildash: one or more errors occurred during close()",{cause:Q})}import{isErr as t1}from"@zipbul/result";function e1(_,$,Q,J){__(_);let Y=_.parseSourceFn($,Q,J);if(t1(Y))throw Y.data;return _.parseCache.set($,Y),Y}async function _$(_,$,Q){__(_);let J=new Map,Y=[];return await Promise.all($.map(async(W)=>{try{let z=await _.readFileFn(W),Z=_.parseSourceFn(W,z,Q);if(!t1(Z))J.set(W,Z);else Y.push({filePath:W,error:Z.data})}catch(z){Y.push({filePath:W,error:z instanceof Error?z:Error(String(z))})}})),{parsed:J,failures:Y}}function $$(_,$){return __(_),_.parseCache.get($)}function Q$(_,$){return __(_),_.extractSymbolsFn($)}function J$(_,$){return __(_),_.extractRelationsFn($.program,$.filePath,_.tsconfigPaths??void 0)}import Y$ from"path";function W$(_,$){return k(_,"store","getStats",()=>_.symbolRepo.getStats($??_.defaultProject))}function e0(_,$){return k(_,"search","searchSymbols",()=>_.symbolSearchFn({symbolRepo:_.symbolRepo,projectRoot:_.projectRoot,project:_.defaultProject,query:$}))}function Z$(_,$){return k(_,"search","searchRelations",()=>_.relationSearchFn({relationRepo:_.relationRepo,projectRoot:_.projectRoot,project:_.defaultProject,query:$}))}function z$(_,$){return k(_,"search","searchAllSymbols",()=>_.symbolSearchFn({symbolRepo:_.symbolRepo,projectRoot:_.projectRoot,project:void 0,query:$}))}function X$(_,$){return k(_,"search","searchAllRelations",()=>_.relationSearchFn({relationRepo:_.relationRepo,projectRoot:_.projectRoot,project:void 0,query:$}))}function U$(_,$){return k(_,"store","listIndexedFiles",()=>_.fileRepo.getAllFiles($??_.defaultProject))}function V$(_,$,Q){return k(_,"search","getInternalRelations",()=>_.relationSearchFn({relationRepo:_.relationRepo,projectRoot:_.projectRoot,project:Q??_.defaultProject,query:{srcFilePath:$,dstFilePath:$,limit:1e4}}))}function H$(_,$,Q,J){return k(_,"search","getFullSymbol",()=>{let Y=J??_.defaultProject,W=_.symbolSearchFn({symbolRepo:_.symbolRepo,projectRoot:_.projectRoot,project:Y,query:{text:$,exact:!0,filePath:Q,limit:1}});if(W.length===0)return null;let z=W[0],Z=z.detail,X={...z,members:Z.members,jsDoc:Z.jsDoc,parameters:Z.parameters,returnType:Z.returnType,heritage:Z.heritage,decorators:Z.decorators,typeParameters:Z.typeParameters,initializer:Z.initializer};if(_.semanticLayer)try{let K=Y$.isAbsolute(Q)?Q:Y$.resolve(_.projectRoot,Q),U=_.semanticLayer.lineColumnToPosition(K,z.span.start.line,z.span.start.column);if(U!==null){let M=_.semanticLayer.findNamePosition(K,U,z.name)??U,w=_.semanticLayer.collectTypeAt(K,M);if(w)X.resolvedType=w}}catch{}return X})}function K$(_,$,Q){return k(_,"store","getFileStats",()=>{let J=Q??_.defaultProject,Y=K_(_.projectRoot,$),W=_.fileRepo.getFile(J,Y);if(!W)throw new N("search",`Gildash: file '${$}' is not in the index`);let z=_.symbolRepo.getFileSymbols(J,Y),Z=_.relationRepo.getOutgoing(J,Y);return{filePath:W.filePath,lineCount:W.lineCount??0,size:W.size,symbolCount:z.length,exportedSymbolCount:z.filter((X)=>X.isExported).length,relationCount:Z.length}})}function M$(_,$,Q){return k(_,"store","getFileInfo",()=>_.fileRepo.getFile(Q??_.defaultProject,K_(_.projectRoot,$)))}function O$(_,$,Q){return e0(_,{filePath:$,project:Q??void 0,limit:1e4})}function L$(_,$,Q){return k(_,"search","getModuleInterface",()=>{let Y=_.symbolSearchFn({symbolRepo:_.symbolRepo,projectRoot:_.projectRoot,project:Q??_.defaultProject,query:{filePath:$,isExported:!0}}).map((W)=>({name:W.name,kind:W.kind,parameters:W.detail.parameters?`(${W.detail.parameters.map((z)=>`${z.name}${z.isOptional?"?":""}: ${z.type??"unknown"}`).join(", ")})`:void 0,returnType:W.detail.returnType??void 0,jsDoc:W.detail.jsDoc?.description??void 0}));return{filePath:$,exports:Y}})}import g from"path";function x_(_,$,Q,J){let Y=J??_.defaultProject,W=_.symbolSearchFn({symbolRepo:_.symbolRepo,projectRoot:_.projectRoot,project:Y,query:{text:$,exact:!0,filePath:Q,limit:1}});if(W.length===0)return null;let z=W[0],Z=g.isAbsolute(Q)?Q:g.resolve(_.projectRoot,Q),X=_.semanticLayer.lineColumnToPosition(Z,z.span.start.line,z.span.start.column);if(X===null)return null;let K=_.semanticLayer.findNamePosition(Z,X,z.name)??X;return{sym:z,position:K,absPath:Z}}function B$(_,$,Q,J){return k(_,"search","getResolvedType",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Y=x_(_,$,Q,J);if(!Y)return null;return _.semanticLayer.collectTypeAt(Y.absPath,Y.position)})}function G$(_,$,Q,J){return k(_,"search","getSemanticReferences",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Y=x_(_,$,Q,J);if(!Y)throw new N("search",`Gildash: symbol '${$}' not found in '${Q}'`);return _.semanticLayer.findReferences(Y.absPath,Y.position)})}function I$(_,$,Q,J){return k(_,"search","getEnrichedReferences",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Y=x_(_,$,Q,J);if(!Y)throw new N("search",`Gildash: symbol '${$}' not found in '${Q}'`);return _.semanticLayer.findEnrichedReferences(Y.absPath,Y.position)})}function w$(_,$,Q,J){return k(_,"search","getImplementations",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Y=x_(_,$,Q,J);if(!Y)throw new N("search",`Gildash: symbol '${$}' not found in '${Q}'`);return _.semanticLayer.findImplementations(Y.absPath,Y.position)})}function D$(_,$,Q,J,Y,W){return k(_,"semantic","isTypeAssignableTo",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let z=x_(_,$,Q,W);if(!z)throw new N("search",`Gildash: source symbol '${$}' not found in '${Q}'`);let Z=x_(_,J,Y,W);if(!Z)throw new N("search",`Gildash: target symbol '${J}' not found in '${Y}'`);return _.semanticLayer.isTypeAssignableTo(z.absPath,z.position,Z.absPath,Z.position)})}function C$(_,$){return k(_,"semantic","getFileTypes",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Q=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.collectFileTypes(Q)})}function A$(_,$,Q,J){return k(_,"semantic","getResolvedTypeAt",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Y=g.isAbsolute($)?$:g.resolve(_.projectRoot,$),W=_.semanticLayer.lineColumnToPosition(Y,Q,J);if(W===null)return null;return _.semanticLayer.collectTypeAt(Y,W)})}function q$(_,$){return k(_,"semantic","isTypeAssignableToAt",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Q=g.isAbsolute($.source.filePath)?$.source.filePath:g.resolve(_.projectRoot,$.source.filePath),J=g.isAbsolute($.target.filePath)?$.target.filePath:g.resolve(_.projectRoot,$.target.filePath),Y=_.semanticLayer.lineColumnToPosition(Q,$.source.line,$.source.column);if(Y===null)return null;let W=_.semanticLayer.lineColumnToPosition(J,$.target.line,$.target.column);if(W===null)return null;return _.semanticLayer.isTypeAssignableTo(Q,Y,J,W)})}function N$(_,$){return k(_,"search","getSemanticModuleInterface",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");return _.semanticLayer.getModuleInterface($)})}function R$(_,$,Q){return k(_,"semantic","getBaseTypes",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.getBaseTypes(J,Q)})}function S$(_,$,Q){return k(_,"semantic","getResolvedTypesAtPositions",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.collectTypesAtPositions(J,Q)})}function T$(_,$,Q){return k(_,"semantic","getExpressionTypeAtSpan",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.collectAtSpan(J,Q)})}function E$(_,$,Q,J){return k(_,"semantic","isThenableAtSpan",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Y=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.isThenableAtSpan(Y,Q,J)})}function F$(_,$,Q){return k(_,"semantic","getContextualCallReturnsAtSpan",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.contextualCallReturnsAtSpan(J,Q)})}function j$(_,$,Q,J,Y){return k(_,"semantic","isTypeAssignableToTypeAtSpan",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let W=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.isTypeAssignableToTypeAtSpan(W,Q,J,Y)})}function k$(_,$,Q){return k(_,"semantic","getResolvedTypeAtPosition",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.collectTypeAt(J,Q)})}function v$(_,$,Q){return k(_,"semantic","getSemanticReferencesAtPosition",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.findReferences(J,Q)})}function g$(_,$,Q){return k(_,"semantic","getEnrichedReferencesAtPosition",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.findEnrichedReferences(J,Q)})}function u$(_,$){return k(_,"semantic","getFileBindings",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Q=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.getFileBindings(Q)})}function b$(_,$){return k(_,"semantic","getFileBindingsBatch",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Q=$.map((W)=>({orig:W.filePath,abs:g.isAbsolute(W.filePath)?W.filePath:g.resolve(_.projectRoot,W.filePath),content:W.content})),J=_.semanticLayer.getFileBindingsBatch(Q.map((W)=>({filePath:W.abs,content:W.content}))),Y=new Map;for(let W of Q)Y.set(W.orig,J.get(W.abs)??[]);return Y})}function P$(_,$,Q){return k(_,"semantic","getStandaloneFileBindings",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.getStandaloneFileBindings(J,Q)})}function y$(_,$,Q){return k(_,"semantic","notifyFileChanged",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);_.semanticLayer.notifyFileChanged(J,Q)})}function f$(_,$){return k(_,"semantic","notifyFileDeleted",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Q=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);_.semanticLayer.notifyFileDeleted(Q)})}function x$(_,$,Q){return k(_,"semantic","getImplementationsAtPosition",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.findImplementations(J,Q)})}function h$(_,$,Q,J,Y){return k(_,"semantic","isTypeAssignableToAtPosition",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let W=g.isAbsolute($)?$:g.resolve(_.projectRoot,$),z=g.isAbsolute(J)?J:g.resolve(_.projectRoot,J);return _.semanticLayer.isTypeAssignableTo(W,Q,z,Y)})}function m$(_,$,Q,J,Y){return k(_,"semantic","isTypeAssignableToType",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let W=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.isTypeAssignableToType(W,Q,J,Y)})}function p$(_,$,Q,J,Y){return k(_,"semantic","isTypeAssignableToTypeAtPositions",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let W=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.isTypeAssignableToTypeAtPositions(W,Q,J,Y)})}function d$(_,$,Q,J){return k(_,"semantic","lineColumnToPosition",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Y=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.lineColumnToPosition(Y,Q,J)})}function l$(_,$,Q,J){return k(_,"semantic","findNamePosition",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let Y=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.findNamePosition(Y,Q,J)})}function n$(_,$,Q){return k(_,"semantic","getSymbolNode",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.getSymbolNode(J,Q)})}function i$(_,$,Q){return k(_,"semantic","getSemanticDiagnostics",()=>{if(!_.semanticLayer)throw new N("semantic","Gildash: semantic layer is not enabled");let J=g.isAbsolute($)?$:g.resolve(_.projectRoot,$);return _.semanticLayer.getDiagnostics(J,Q)})}import X6 from"path";function c$(_,$){let Q=new Map(_.map((Z)=>[`${Z.name}::${Z.filePath}`,Z])),J=new Map($.map((Z)=>[`${Z.name}::${Z.filePath}`,Z])),Y=[],W=[],z=[];for(let[Z,X]of J){let K=Q.get(Z);if(!K)Y.push(X);else if(K.fingerprint!==X.fingerprint)z.push({before:K,after:X})}for(let[Z,X]of Q)if(!J.has(Z))W.push(X);return{added:Y,removed:W,modified:z}}function a$(_,$){if(__(_),_.onIndexedCallbacks.add($),!_.coordinator)return()=>{_.onIndexedCallbacks.delete($)};let Q=_.coordinator.onIndexed($);return()=>{_.onIndexedCallbacks.delete($),Q()}}async function s$(_){return o0(_,"index","reindex",async()=>{if(!_.coordinator)throw new N("closed","Gildash: reindex() is not available for readers");let $=await _.coordinator.fullIndex();return O0(_),$})}function r$(_,$,Q,J){return k(_,"search","resolveSymbol",()=>{let Y=J??_.defaultProject,W=new Set,z=[],Z=$,X=Q;for(;;){let K=`${X}::${Z}`;if(W.has(K))return{originalName:Z,originalFilePath:X,reExportChain:z,circular:!0};W.add(K);let U=_.relationSearchFn({relationRepo:_.relationRepo,projectRoot:_.projectRoot,project:Y,query:{type:"re-exports",srcFilePath:X,limit:500}}),M,w;for(let q of U){let G;if(q.metaJson)try{let E=JSON.parse(q.metaJson);if(Array.isArray(E.specifiers))G=E.specifiers}catch{}if(!G)continue;let C=G.find((E)=>E.exported===Z);if(!C)continue;M=q.dstFilePath??void 0,w=C.local;break}if(!M||!w)return{originalName:Z,originalFilePath:X,reExportChain:z,circular:!1};z.push({filePath:X,exportedAs:Z}),X=M,Z=w}})}function o$(_,$){return __(_),_.onFileChangedCallbacks.add($),()=>{_.onFileChangedCallbacks.delete($)}}function t$(_,$){return __(_),_.onErrorCallbacks.add($),()=>{_.onErrorCallbacks.delete($)}}function e$(_,$){return __(_),_.onRoleChangedCallbacks.add($),()=>{_.onRoleChangedCallbacks.delete($)}}async function _Q(_,$,Q){return o0(_,"search","findPattern",async()=>{let J=Q?.project??_.defaultProject,Y=Q?.filePaths?Q.filePaths:_.fileRepo.getAllFiles(J).map((W)=>W.filePath);return await _.patternSearchFn({pattern:$,filePaths:Y})})}async function $Q(_,$,Q,J){return k(_,"search","getHeritageChain",()=>{let Y=J??_.defaultProject,W=new Set,z=(X,K,U)=>{let M=`${X}::${K}`;if(W.has(M))return{symbolName:X,filePath:K,kind:U,children:[]};W.add(M);let G=_.relationSearchFn({relationRepo:_.relationRepo,projectRoot:_.projectRoot,project:Y,query:{srcFilePath:K,srcSymbolName:X,limit:1000}}).filter((C)=>C.type==="extends"||C.type==="implements").filter((C)=>C.dstSymbolName!=null&&C.dstFilePath!=null).map((C)=>z(C.dstSymbolName,C.dstFilePath,C.type));return{symbolName:X,filePath:K,kind:U,children:G}},Z=X6.isAbsolute(Q)?N_(_.projectRoot,Q):Q;return z($,Z)})}function QQ(_,$){if(__(_),!_.annotationRepo||!_.annotationSearchFn)return[];let{annotationRepo:Q,annotationSearchFn:J}=_;return k(_,"search","searchAnnotations",()=>J({annotationRepo:Q,project:$.project??_.defaultProject,query:$}))}function JQ(_,$,Q){if(__(_),!_.changelogRepo)return[];let J=$ instanceof Date?$.toISOString():$,Y=Q?.project??_.defaultProject,W=Q?.limit??1000;return _.changelogRepo.getSince({project:Y,since:J,symbolName:Q?.symbolName,changeTypes:Q?.changeTypes,filePath:Q?.filePath,includeFullIndex:Q?.includeFullIndex,indexRunId:Q?.indexRunId,afterId:Q?.afterId,limit:W}).map((Z)=>({changeType:Z.changeType,symbolName:Z.symbolName,symbolKind:Z.symbolKind,filePath:Z.filePath,oldName:Z.oldName,oldFilePath:Z.oldFilePath,fingerprint:Z.fingerprint,changedAt:Z.changedAt,isFullIndex:Z.isFullIndex===1,indexRunId:Z.indexRunId}))}function YQ(_,$){if(__(_),!_.changelogRepo)return 0;let Q=$ instanceof Date?$.toISOString():$,J=0,Y=[_.defaultProject,..._.boundaries.map((z)=>z.project)],W=[...new Set(Y)];for(let z of W)J+=_.changelogRepo.pruneOlderThan(z,Q);return J}class _1{_ctx;get projectRoot(){return this._ctx.projectRoot}get role(){return this._ctx.role}get projects(){return[...this._ctx.boundaries]}constructor(_){this._ctx=_}static async open(_){let $=await o1(_);return new _1($)}async close(_){return L0(this._ctx,_)}parseSource(_,$,Q){return e1(this._ctx,_,$,Q)}async batchParse(_,$){return _$(this._ctx,_,$)}getParsedAst(_){return $$(this._ctx,_)}extractSymbols(_){return Q$(this._ctx,_)}extractRelations(_){return J$(this._ctx,_)}getStats(_){return W$(this._ctx,_)}searchSymbols(_){return e0(this._ctx,_)}searchRelations(_){return Z$(this._ctx,_)}searchAllSymbols(_){return z$(this._ctx,_)}searchAllRelations(_){return X$(this._ctx,_)}listIndexedFiles(_){return U$(this._ctx,_)}getInternalRelations(_,$){return V$(this._ctx,_,$)}getFullSymbol(_,$,Q){return H$(this._ctx,_,$,Q)}getFileStats(_,$){return K$(this._ctx,_,$)}getFileInfo(_,$){return M$(this._ctx,_,$)}getSymbolsByFile(_,$){return O$(this._ctx,_,$)}getModuleInterface(_,$){return L$(this._ctx,_,$)}getDependencies(_,$,Q=1e4){return h1(this._ctx,_,$,Q)}getDependents(_,$,Q=1e4){return m1(this._ctx,_,$,Q)}async getAffected(_,$){return p1(this._ctx,_,$)}async hasCycle(_){return d1(this._ctx,_)}async getImportGraph(_){return l1(this._ctx,_)}async getTransitiveDependencies(_,$){return n1(this._ctx,_,$)}async getTransitiveDependents(_,$){return i1(this._ctx,_,$)}async getCyclePaths(_,$){return c1(this._ctx,_,$)}async getFanMetrics(_,$){return a1(this._ctx,_,$)}getResolvedType(_,$,Q){return B$(this._ctx,_,$,Q)}getSemanticReferences(_,$,Q){return G$(this._ctx,_,$,Q)}getEnrichedReferences(_,$,Q){return I$(this._ctx,_,$,Q)}getImplementations(_,$,Q){return w$(this._ctx,_,$,Q)}isTypeAssignableTo(_,$,Q,J,Y){return D$(this._ctx,_,$,Q,J,Y)}getSemanticModuleInterface(_){return N$(this._ctx,_)}getFileTypes(_){return C$(this._ctx,_)}getResolvedTypeAt(_,$,Q){return A$(this._ctx,_,$,Q)}isTypeAssignableToAt(_){return q$(this._ctx,_)}getResolvedTypeAtPosition(_,$){return k$(this._ctx,_,$)}getResolvedTypesAtPositions(_,$){return S$(this._ctx,_,$)}getExpressionTypeAtSpan(_,$){return T$(this._ctx,_,$)}isThenableAtSpan(_,$,Q){return E$(this._ctx,_,$,Q)}getContextualCallReturnsAtSpan(_,$){return F$(this._ctx,_,$)}isTypeAssignableToTypeAtSpan(_,$,Q,J){return j$(this._ctx,_,$,Q,J)}getSemanticReferencesAtPosition(_,$){return v$(this._ctx,_,$)}getEnrichedReferencesAtPosition(_,$){return g$(this._ctx,_,$)}getFileBindings(_){return u$(this._ctx,_)}getFileBindingsBatch(_){return b$(this._ctx,_)}getStandaloneFileBindings(_,$){return P$(this._ctx,_,$)}notifyFileChanged(_,$){y$(this._ctx,_,$)}notifyFileDeleted(_){f$(this._ctx,_)}getImplementationsAtPosition(_,$){return x$(this._ctx,_,$)}isTypeAssignableToAtPosition(_,$,Q,J){return h$(this._ctx,_,$,Q,J)}isTypeAssignableToType(_,$,Q,J){return m$(this._ctx,_,$,Q,J)}isTypeAssignableToTypeAtPositions(_,$,Q,J){return p$(this._ctx,_,$,Q,J)}lineColumnToPosition(_,$,Q){return d$(this._ctx,_,$,Q)}findNamePosition(_,$,Q){return l$(this._ctx,_,$,Q)}getSymbolNode(_,$){return n$(this._ctx,_,$)}getBaseTypes(_,$){return R$(this._ctx,_,$)}getSemanticDiagnostics(_,$){return i$(this._ctx,_,$)}diffSymbols(_,$){return c$(_,$)}onIndexed(_){return a$(this._ctx,_)}async reindex(){return s$(this._ctx)}resolveSymbol(_,$,Q){return r$(this._ctx,_,$,Q)}async findPattern(_,$){return _Q(this._ctx,_,$)}async getHeritageChain(_,$,Q){return $Q(this._ctx,_,$,Q)}onFileChanged(_){return o$(this._ctx,_)}onError(_){return t$(this._ctx,_)}onRoleChanged(_){return e$(this._ctx,_)}searchAnnotations(_){return QQ(this._ctx,_)}getSymbolChanges(_,$){return JQ(this._ctx,_,$)}pruneChangelog(_){return YQ(this._ctx,_)}}import{Visitor as S2,visitorKeys as T2}from"oxc-parser";import{walk as F2,parseAndWalk as j2,ScopeTracker as k2}from"oxc-walker";export{F2 as walk,T2 as visitorKeys,P0 as symbolSearch,y0 as relationSearch,f0 as patternSearch,u_ as parseSource,j2 as parseAndWalk,Y_ as normalizePath,XJ as isVariableDeclaration,zJ as isTSQualifiedName,ZJ as isMemberExpression,WJ as isIdentifier,eQ as isFunctionNode,YJ as isFunctionExpression,JJ as isFunctionDeclaration,QJ as isCallExpression,$J as isAssignmentExpression,_J as isArrowFunctionExpression,UJ as is,O_ as getLineColumn,T_ as extractSymbols,c_ as extractRelations,i_ as buildLineOffsets,S2 as Visitor,k2 as ScopeTracker,N as GildashError,_1 as Gildash,M0 as DependencyGraph};
|