@github/copilot-language-server 1.405.0 → 1.407.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -38,7 +38,7 @@ ${f.join(`
38
38
  `),l=t[t.length-1];return{file:e,text:a,rawText:a,isFullFile:u&&o,range:new St(t[0].lineNumber+1,1,l.lineNumber+1,l.text.length+1)}}};function Zo(n){let e=[],t="";for(let r=0;r<n.length;r++){let i=n[r];t+=i,i===`
39
39
  `?(e.push(t),t=""):i==="\r"&&(r+1<n.length&&n[r+1]===`
40
40
  `&&(t+=`
41
- `,r++),e.push(t),t="")}return t.length>0&&e.push(t),e}s(Zo,"splitLines");function eu(n){return n?n.trim().length===0:!0}s(eu,"isFalsyOrWhitespace");function tu(n,e){let t=nu(n,e);return n.substring(0,t)}s(tu,"commonLeadingStr");function nu(n,e){let t=Math.min(n.length,e.length),r=0;for(;r<t&&n[r]===e[r];)r++;return r}s(nu,"commonPrefixLength");var jt=class{constructor(){this.naiveChunkers=new Map}static{s(this,"NaiveChunkingService")}chunkFile(e,t,r,i={},o){let u=i?.maxTokenLength??sr,l=this.getNaiveChunker(e).chunkFile(t,r,{maxTokenLength:u,removeEmptyLines:i?.removeEmptyLines??!0},o);return o?.isCancellationRequested?[]:l.filter(c=>c.text)}getNaiveChunker(e){let t=this.naiveChunkers.get(e);if(t)return t;let r=new qt(e);return this.naiveChunkers.set(e,r),r}clearCache(){this.naiveChunkers.clear()}};d();d();var or=":memory:";d();var Bt=class{constructor(e,t=-1/0){this.maxSize=e;this.minScore=t;this.store=[]}static{s(this,"SimpleHeap")}toArray(e){if(this.store.length&&typeof e=="number"){let t=this.store.at(0).score*(1-e);return this.store.filter(r=>r.score>=t).map(r=>r.value)}return this.store.map(t=>t.value)}add(e,t){if(e<=this.minScore)return;let r=this.store.findIndex(i=>i.score<e);for(this.store.splice(r>=0?r:this.store.length,0,{score:e,value:t});this.store.length>this.maxSize;)this.store.pop();this.store.length===this.maxSize&&(this.minScore=this.store.at(-1)?.score??this.minScore)}get size(){return this.store.length}get currentMinScore(){return this.minScore}clear(){this.store.length=0,this.minScore=-1/0}};d();function ur(n){let e=Object.create(null);for(let t of n)e[t]=(e[t]??0)+1;return e}s(ur,"countRecordFrom");function ar(n){return ur(ru(n))}s(ar,"termFrequencies");function*ru(n){let e=s(t=>t.toLowerCase(),"normalize");for(let[t]of n.matchAll(/(?<![\p{Alphabetic}\p{Number}_$])[\p{Letter}_$][\p{Alphabetic}\p{Number}_$]{2,}(?![\p{Alphabetic}\p{Number}_$])/gu)){let r=new Set;r.add(e(t));let i=[],o=t.split(/(?<=[a-z$])(?=[A-Z])/g);o.length>1&&i.push(...o);let u=t.split("_");u.length>1&&i.push(...u);let a=t.match(new RegExp("^([\\D]+)\\p{Number}+$","u"));a&&i.push(a[1]);for(let l of i)l.length>2&&/[\p{Alphabetic}_$]{3,}/gu.test(l)&&r.add(e(l));yield*r}}s(ru,"splitTerms");var bo=me(po()),yo=me(rs()),Co=me(require("fs")),is=me(require("node:sqlite")),wo=me(require("path"));var qn=class{static{s(this,"PersistentTfIdf")}constructor(e){let t={open:!0};if(e!==or)try{Co.default.mkdirSync(wo.default.dirname(e),{recursive:!0}),this.db=new is.default.DatabaseSync(e,t)}catch(r){console.error("Failed to open SQLite database on disk. Trying memory db",r)}this.db||(this.db=new is.default.DatabaseSync(or,t)),this.db.exec(`
41
+ `,r++),e.push(t),t="")}return t.length>0&&e.push(t),e}s(Zo,"splitLines");function eu(n){return n?n.trim().length===0:!0}s(eu,"isFalsyOrWhitespace");function tu(n,e){let t=nu(n,e);return n.substring(0,t)}s(tu,"commonLeadingStr");function nu(n,e){let t=Math.min(n.length,e.length),r=0;for(;r<t&&n[r]===e[r];)r++;return r}s(nu,"commonPrefixLength");var jt=class{constructor(){this.naiveChunkers=new Map}static{s(this,"NaiveChunkingService")}chunkFile(e,t,r,i={},o){let u=i?.maxTokenLength??sr,l=this.getNaiveChunker(e).chunkFile(t,r,{maxTokenLength:u,removeEmptyLines:i?.removeEmptyLines??!0},o);return o?.isCancellationRequested?[]:l.filter(c=>c.text)}getNaiveChunker(e){let t=this.naiveChunkers.get(e);if(t)return t;let r=new qt(e);return this.naiveChunkers.set(e,r),r}clearCache(){this.naiveChunkers.clear()}};d();d();var or=":memory:";d();var Bt=class{constructor(e,t=-1/0){this.maxSize=e;this.minScore=t;this.store=[]}static{s(this,"SimpleHeap")}toArray(e){if(this.store.length&&typeof e=="number"){let t=this.store.at(0).score*(1-e);return this.store.filter(r=>r.score>=t).map(r=>r.value)}return this.store.map(t=>t.value)}add(e,t){if(e<=this.minScore)return;let r=this.store.findIndex(i=>i.score<e);for(this.store.splice(r>=0?r:this.store.length,0,{score:e,value:t});this.store.length>this.maxSize;)this.store.pop();this.store.length===this.maxSize&&(this.minScore=this.store.at(-1)?.score??this.minScore)}get size(){return this.store.length}get currentMinScore(){return this.minScore}clear(){this.store.length=0,this.minScore=-1/0}};d();function ur(n){let e=Object.create(null);for(let t of n)e[t]=(e[t]??0)+1;return e}s(ur,"countRecordFrom");function ar(n){return ur(ru(n))}s(ar,"termFrequencies");function*ru(n){let e=s(t=>t.toLowerCase(),"normalize");for(let[t]of n.matchAll(/(?<![\p{Alphabetic}\p{Number}_$])[\p{Letter}_$][\p{Alphabetic}\p{Number}_$]{2,}(?![\p{Alphabetic}\p{Number}_$])/gu)){let r=new Set;r.add(e(t));let i=[],o=t.split(/(?<=[a-z$])(?=[A-Z])/g);o.length>1&&i.push(...o);let u=t.split("_");u.length>1&&i.push(...u);let a=t.match(new RegExp("^([\\D]+)\\p{Number}+$","u"));a&&i.push(a[1]);for(let l of i)l.length>2&&/[\p{Alphabetic}_$]{3,}/gu.test(l)&&r.add(e(l));yield*r}}s(ru,"splitTerms");var bo=me(po()),yo=me(rs()),Co=me(require("fs")),is=me(require("node:sqlite")),wo=me(require("path"));var qn=class{static{s(this,"PersistentTfIdf")}constructor(e,t){this.hostApi=t;let r={open:!0};if(e!==or)try{Co.default.mkdirSync(wo.default.dirname(e),{recursive:!0}),this.db=new is.default.DatabaseSync(e,r)}catch(i){this.hostApi.logWarn("Failed to open SQLite database on disk. Trying memory db",i)}this.db||(this.db=new is.default.DatabaseSync(or,r)),this.db.exec(`
42
42
  PRAGMA foreign_keys = ON;
43
43
  PRAGMA journal_mode = OFF;
44
44
  PRAGMA synchronous = 0;
@@ -72,14 +72,14 @@ ${f.join(`
72
72
 
73
73
  CREATE INDEX IF NOT EXISTS idx_documents_uri ON Documents(uri);
74
74
  CREATE INDEX IF NOT EXISTS idx_chunks_documentId ON Chunks(documentId);
75
- `)}initialize(e){let t=new Map;for(let{uri:l,contentId:c}of e)t.set(l,c);let r=this.db.prepare("SELECT * FROM Documents").all(),i=new Map;for(let l of r)try{let c=l.uri;i.set(c,l.contentVersionId)}catch(c){console.error(`Failed to parse URI from database entry: ${l.uri}`,c)}let o=new Set,u=new Set;for(let[l,c]of i){let f=t.get(l);f?f!==c&&u.add(l):o.add(l)}let a=new Set;for(let l of t.keys())i.has(l)||a.add(l);return this.delete(Array.from(o)),{outOfSyncDocs:u,newDocs:a,deletedDocs:o}}async isUpToDate(e){return this.getDocContentVersionId(e.uri)===await e.getContentVersionId()}getDocContentVersionId(e){return this.db.prepare("SELECT contentVersionId FROM Documents WHERE uri = ?").get(e)?.contentVersionId}async addOrUpdate(e){let t=new bo.Limiter(20);try{let r=await Promise.all(e.map(async i=>{try{return await this.isUpToDate(i)?void 0:{uri:i.uri,getDoc:s(async()=>{let o=[];for(let u of await t.queue(()=>i.getChunks())){let a=ar(u.text);o.push({chunk:u,tf:a})}return{contentVersionId:await i.getContentVersionId(),chunks:o}},"getDoc")}}catch{}}));await this.addOrUpdateDocs(r.filter(i=>!!i))}finally{t.dispose()}}delete(e){this.db.exec("BEGIN TRANSACTION");for(let t of e){let r=this.getDoc(t);if(!r)continue;this.db.prepare("DELETE FROM Documents WHERE uri = ?").run(t),this._cachedChunkCount=void 0;let i=ur(r.chunks.flatMap(o=>Object.keys(o.tf)));for(let[o,u]of Object.entries(i))this.db.prepare(`
75
+ `)}initialize(e){let t=new Map;for(let{uri:l,contentId:c}of e)t.set(l,c);let r=this.db.prepare("SELECT * FROM Documents").all(),i=new Map;for(let l of r)try{let c=l.uri;i.set(c,l.contentVersionId)}catch(c){this.hostApi.logWarn(`Failed to parse URI from database entry, skip processing it: ${l.uri}`,c)}let o=new Set,u=new Set;for(let[l,c]of i){let f=t.get(l);f?f!==c&&u.add(l):o.add(l)}let a=new Set;for(let l of t.keys())i.has(l)||a.add(l);return this.delete(Array.from(o)),{outOfSyncDocs:u,newDocs:a,deletedDocs:o}}async isUpToDate(e){return this.getDocContentVersionId(e.uri)===await e.getContentVersionId()}getDocContentVersionId(e){return this.db.prepare("SELECT contentVersionId FROM Documents WHERE uri = ?").get(e)?.contentVersionId}async addOrUpdate(e){let t=new bo.Limiter(20);try{let r=await Promise.all(e.map(async i=>{try{return await this.isUpToDate(i)?void 0:{uri:i.uri,getDoc:s(async()=>{let o=[];for(let u of await t.queue(()=>i.getChunks())){let a=ar(u.text);o.push({chunk:u,tf:a})}return{contentVersionId:await i.getContentVersionId(),chunks:o}},"getDoc")}}catch{}}));await this.addOrUpdateDocs(r.filter(i=>!!i))}finally{t.dispose()}}delete(e){this.db.exec("BEGIN TRANSACTION");for(let t of e){let r=this.getDoc(t);if(!r)continue;this.db.prepare("DELETE FROM Documents WHERE uri = ?").run(t),this._cachedChunkCount=void 0;let i=ur(r.chunks.flatMap(o=>Object.keys(o.tf)));for(let[o,u]of Object.entries(i))this.db.prepare(`
76
76
  UPDATE ChunkOccurrences
77
77
  SET chunkCount = chunkCount - ?
78
78
  WHERE term = ?;
79
79
  `).run(u,o)}this.db.exec("COMMIT"),this.db.prepare(`
80
80
  DELETE FROM ChunkOccurrences
81
81
  WHERE chunkCount < 1;
82
- `).run()}get fileCount(){return this.db.prepare("SELECT COUNT(*) as count FROM Documents").get()?.count??0}search(e,t){let r=new Bt(t?.maxResults??1/0,-1/0),i=this.computeEmbeddings(e);if(!i.size)return[];let o=new Map;for(let u of this.getAllChunksWithTerms(Array.from(i.keys()))){let a=this.score(u,i,o);a>0&&r.add(a,u.chunk)}return r.toArray(t?.maxSpread)}computeEmbeddings(e){let t=ar(e);return this.computeTfidf(t)}score(e,t,r){let i=0;for(let[o,u]of t.entries()){let a=e.tf[o];if(!a)continue;let l=r.get(o);typeof l!="number"&&(l=this.idf(o),r.set(o,l));let c=a*l;i+=c*u}return i}idf(e){let t=this.getChunkOccurrences(e)??0;return t>0?Math.log((this.getChunkCount()+1)/t):0}computeTfidf(e){let t=new Map;for(let[r,i]of Object.entries(e)){let o=this.idf(r);o>0&&t.set(r,i*o)}return t}getChunkCount(){return typeof this._cachedChunkCount=="number"?this._cachedChunkCount:this.db.prepare("SELECT COUNT(*) as count FROM Chunks").get()?.count??0}getChunkOccurrences(e){return this.db.prepare("SELECT chunkCount FROM ChunkOccurrences WHERE term = ?").get(e)?.chunkCount??0}async addOrUpdateDocs(e){this._cachedChunkCount=void 0;let t=Object.create(null),r=s(a=>{this.delete(a.map(l=>l.uri)),this.db.exec("BEGIN TRANSACTION");try{for(let{uri:l,doc:c}of a){let f=this.db.prepare("INSERT OR REPLACE INTO Documents (uri, contentVersionId) VALUES (?, ?)").run(l,c.contentVersionId).lastInsertRowid,h=this.db.prepare("INSERT INTO Chunks (documentId, text, startLineNumber, startColumn, endLineNumber, endColumn, isFullFile, termFrequencies) VALUES (?, ?, ?, ?, ?, ?, ?, jsonb(?))");for(let _ of c.chunks){h.run(f,_.chunk.text,_.chunk.range.startLineNumber,_.chunk.range.startColumn,_.chunk.range.endLineNumber,_.chunk.range.endColumn,_.chunk.isFullFile?1:0,JSON.stringify(_.tf));for(let A of Object.keys(_.tf))t[A]=(t[A]??0)+1}}this.db.exec("COMMIT")}catch(l){throw this.db.exec("ROLLBACK"),l}},"processBatch"),i=200,o=[];for(let a of e){try{o.push({uri:a.uri,doc:await a.getDoc()})}catch(l){console.warn(`Failed to get document data for ${a.uri}, skip processing it:`,l);continue}o.length>=i&&(r(o),o.length=0)}r(o);let u=this.db.prepare(`
82
+ `).run()}get fileCount(){return this.db.prepare("SELECT COUNT(*) as count FROM Documents").get()?.count??0}search(e,t){let r=new Bt(t?.maxResults??1/0,-1/0),i=this.computeEmbeddings(e);if(!i.size)return[];let o=new Map;for(let u of this.getAllChunksWithTerms(Array.from(i.keys()))){let a=this.score(u,i,o);a>0&&r.add(a,u.chunk)}return r.toArray(t?.maxSpread)}computeEmbeddings(e){let t=ar(e);return this.computeTfidf(t)}score(e,t,r){let i=0;for(let[o,u]of t.entries()){let a=e.tf[o];if(!a)continue;let l=r.get(o);typeof l!="number"&&(l=this.idf(o),r.set(o,l));let c=a*l;i+=c*u}return i}idf(e){let t=this.getChunkOccurrences(e)??0;return t>0?Math.log((this.getChunkCount()+1)/t):0}computeTfidf(e){let t=new Map;for(let[r,i]of Object.entries(e)){let o=this.idf(r);o>0&&t.set(r,i*o)}return t}getChunkCount(){return typeof this._cachedChunkCount=="number"?this._cachedChunkCount:this.db.prepare("SELECT COUNT(*) as count FROM Chunks").get()?.count??0}getChunkOccurrences(e){return this.db.prepare("SELECT chunkCount FROM ChunkOccurrences WHERE term = ?").get(e)?.chunkCount??0}async addOrUpdateDocs(e){this._cachedChunkCount=void 0;let t=Object.create(null),r=s(a=>{this.delete(a.map(l=>l.uri)),this.db.exec("BEGIN TRANSACTION");try{for(let{uri:l,doc:c}of a){let f=this.db.prepare("INSERT OR REPLACE INTO Documents (uri, contentVersionId) VALUES (?, ?)").run(l,c.contentVersionId).lastInsertRowid,h=this.db.prepare("INSERT INTO Chunks (documentId, text, startLineNumber, startColumn, endLineNumber, endColumn, isFullFile, termFrequencies) VALUES (?, ?, ?, ?, ?, ?, ?, jsonb(?))");for(let _ of c.chunks){h.run(f,_.chunk.text,_.chunk.range.startLineNumber,_.chunk.range.startColumn,_.chunk.range.endLineNumber,_.chunk.range.endColumn,_.chunk.isFullFile?1:0,JSON.stringify(_.tf));for(let A of Object.keys(_.tf))t[A]=(t[A]??0)+1}}this.db.exec("COMMIT")}catch(l){throw this.db.exec("ROLLBACK"),l}},"processBatch"),i=200,o=[];for(let a of e){try{o.push({uri:a.uri,doc:await a.getDoc()})}catch(l){this.hostApi.logWarn(`Failed to get document data for ${a.uri}, skip processing it:`,l);continue}o.length>=i&&(r(o),o.length=0)}r(o);let u=this.db.prepare(`
83
83
  INSERT INTO ChunkOccurrences (term, chunkCount)
84
84
  VALUES (?, ?)
85
85
  ON CONFLICT(term) DO UPDATE SET chunkCount = chunkCount + ?;
@@ -92,7 +92,7 @@ ${f.join(`
92
92
  SELECT 1 FROM json_each(c.termFrequencies)
93
93
  WHERE json_each.key IN (${e.map(r=>"?").join(",")})
94
94
  )
95
- `).all(...e).map(r=>this.reviveDocumentChunkEntry(r)):[]}reviveDocumentChunkEntry(e){return{tf:JSON.parse(e.termFrequencies),get chunk(){return{file:e.uri,text:e.text,rawText:e.text,range:new yo.Range(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn),isFullFile:!!e.isFullFile}}}}};d();var ss=me(rs());function jn(n,e){if(!n)return n;if(Array.isArray(n))return n.map(t=>jn(t,e));if(typeof n=="object"){let t=e(n);if(t)return t;let r={},i=n;for(let o in i){let u=i[o];r[o]=jn(u,e)}return r}return n}s(jn,"rewriteObject");function os(n){return jn(n,e=>{if(e instanceof ss.Range)return{$mid:"range",startLineNumber:e.startLineNumber,startColumn:e.startColumn,endLineNumber:e.endLineNumber,endColumn:e.endColumn}})}s(os,"serialize");function Q2(n){return n.$mid==="range"}s(Q2,"isSerializedRange");function us(n){return jn(n,e=>{let t=e;if(Q2(t))return new ss.Range(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn)})}s(us,"revive");d();var Bn=class{constructor(){this.nextId=1;this.handlers=new Map}static{s(this,"RpcResponseHandler")}createHandler(){let e=this.nextId++,t,r,i=new Promise((o,u)=>{t=o,r=u});return this.handlers.set(e,{resolve:t,reject:r}),{id:e,result:i}}handleResponse(e){let t=this.handlers.get(e.id);t&&(this.handlers.delete(e.id),e.err?t.reject(e.err):t.resolve(e.res))}handleError(e){for(let t of this.handlers.values())t.reject(e);this.handlers.clear()}clear(){this.handlers.clear()}};function vo(n){let e={get:s((t,r)=>{if(typeof r=="string")return t[r]||(t[r]=(...i)=>n(r,i)),t[r]},"get")};return new Proxy(Object.create(null),e)}s(vo,"createRpcProxy");var ko=me(_n()),as=me(Xr());var ls=class{constructor(e,t){this.responseHandler=new Bn;this.port=e,this.worker=t,this.port.on("message",r=>{"fn"in r?this.handleRequest(r):this.responseHandler.handleResponse(r)}),this.proxy=vo((r,i)=>{let{id:o,result:u}=this.responseHandler.createHandler();return this.port.postMessage({id:o,fn:r,args:os(i)}),u.then(a=>us(a))})}static{s(this,"Host")}async handleRequest(e){try{let t=us(e.args),r=this.worker[e.fn];if(typeof r!="function")throw new Error(`Unknown method: ${e.fn}`);let i=await r.apply(this.worker,Array.isArray(t)?t:[t]);this.port.postMessage({id:e.id,res:os(i)})}catch(t){this.port.postMessage({id:e.id,err:t instanceof Error?t:new Error(String(t))})}}},Wn=class{constructor(e,t){this._pendingChanges=new Map;let r=t.dbPath;this._tfIdf=new qn(r),this._chunker=new jt,this._tokenizerName=t.tokenizer,this._host=new ls(e,this)}static{s(this,"TfidfWorker")}initialize(e){let t=new as.StopWatch,{outOfSyncDocs:r,newDocs:i,deletedDocs:o}=this._tfIdf.initialize(e.map(a=>({uri:a.uri,contentId:a.contentId})));for(let a of[...r,...i])this._pendingChanges.set(a,"update");let u=t.elapsed();return{newFileCount:i.size,outOfSyncFileCount:r.size,deletedFileCount:o.size,initTime:u}}addOrUpdate(e){for(let t of e)this._pendingChanges.set(t,"update")}delete(e){for(let t of e)this._pendingChanges.set(t,"delete")}async search(e,t){let r=new as.StopWatch,i=this._pendingChanges.size;await this._flushPendingChanges();let o=r.elapsed();r.reset();let u=this._tfIdf.search(e,t),a=r.elapsed();return{chunks:u,telemetry:{fileCount:this._tfIdf.fileCount,updatedFileCount:i,updateTime:o,searchTime:a}}}async _flushPendingChanges(){if(!this._pendingChanges.size)return;let e=[];for(let[r,i]of this._pendingChanges.entries())i==="delete"&&e.push(r);e.length&&this._tfIdf.delete(e);let t=[];for(let[r,i]of this._pendingChanges.entries())if(i==="update"){let o=new ko.Lazy(()=>this._host.proxy.getContentVersionId(r));t.push({uri:r,getContentVersionId:s(()=>o.value,"getContentVersionId"),getChunks:s(async()=>{let u=await this._host.proxy.readFile(r);return this.getRawNaiveChunks(r,u)},"getChunks")})}t.length&&await this._tfIdf.addOrUpdate(t),this._pendingChanges.clear()}getRawNaiveChunks(e,t){try{return this._chunker.chunkFile(this._tokenizerName,e,t,{}).map(i=>({file:e,text:i.text,rawText:i.rawText,range:i.range,isFullFile:i.isFullFile}))}catch(r){return console.error(`Could not chunk: ${e}`,r),[]}}};var Nt=require("worker_threads");function X2(){let n=Nt.parentPort;if(!n)throw new Error("This module should only be used in a worker thread.");if(!Nt.workerData)throw new Error("Expected 'workerData' to be provided to the worker thread.");new Wn(n,Nt.workerData)}s(X2,"main");X2();
95
+ `).all(...e).map(r=>this.reviveDocumentChunkEntry(r)):[]}reviveDocumentChunkEntry(e){return{tf:JSON.parse(e.termFrequencies),get chunk(){return{file:e.uri,text:e.text,rawText:e.text,range:new yo.Range(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn),isFullFile:!!e.isFullFile}}}}};d();var ss=me(rs());function jn(n,e){if(!n)return n;if(Array.isArray(n))return n.map(t=>jn(t,e));if(typeof n=="object"){let t=e(n);if(t)return t;let r={},i=n;for(let o in i){let u=i[o];r[o]=jn(u,e)}return r}return n}s(jn,"rewriteObject");function os(n){return jn(n,e=>{if(e instanceof ss.Range)return{$mid:"range",startLineNumber:e.startLineNumber,startColumn:e.startColumn,endLineNumber:e.endLineNumber,endColumn:e.endColumn}})}s(os,"serialize");function Q2(n){return n.$mid==="range"}s(Q2,"isSerializedRange");function us(n){return jn(n,e=>{let t=e;if(Q2(t))return new ss.Range(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn)})}s(us,"revive");d();var Bn=class{constructor(){this.nextId=1;this.handlers=new Map}static{s(this,"RpcResponseHandler")}createHandler(){let e=this.nextId++,t,r,i=new Promise((o,u)=>{t=o,r=u});return this.handlers.set(e,{resolve:t,reject:r}),{id:e,result:i}}handleResponse(e){let t=this.handlers.get(e.id);t&&(this.handlers.delete(e.id),e.err?t.reject(e.err):t.resolve(e.res))}handleError(e){for(let t of this.handlers.values())t.reject(e);this.handlers.clear()}clear(){this.handlers.clear()}};function vo(n){let e={get:s((t,r)=>{if(typeof r=="string")return t[r]||(t[r]=(...i)=>n(r,i)),t[r]},"get")};return new Proxy(Object.create(null),e)}s(vo,"createRpcProxy");var ko=me(_n()),as=me(Xr());var ls=class{constructor(e,t){this.responseHandler=new Bn;this.port=e,this.worker=t,this.port.on("message",r=>{"fn"in r?this.handleRequest(r):this.responseHandler.handleResponse(r)}),this.proxy=vo((r,i)=>{let{id:o,result:u}=this.responseHandler.createHandler();return this.port.postMessage({id:o,fn:r,args:os(i)}),u.then(a=>us(a))})}static{s(this,"Host")}async handleRequest(e){try{let t=us(e.args),r=this.worker[e.fn];if(typeof r!="function")throw new Error(`Unknown method: ${e.fn}`);let i=await r.apply(this.worker,Array.isArray(t)?t:[t]);this.port.postMessage({id:e.id,res:os(i)})}catch(t){this.port.postMessage({id:e.id,err:t instanceof Error?t:new Error(String(t))})}}},Wn=class{constructor(e,t){this._pendingChanges=new Map;let r=t.dbPath;this._host=new ls(e,this),this._tfIdf=new qn(r,this._host.proxy),this._chunker=new jt,this._tokenizerName=t.tokenizer}static{s(this,"TfidfWorker")}initialize(e){let t=new as.StopWatch,{outOfSyncDocs:r,newDocs:i,deletedDocs:o}=this._tfIdf.initialize(e.map(a=>({uri:a.uri,contentId:a.contentId})));for(let a of[...r,...i])this._pendingChanges.set(a,"update");let u=t.elapsed();return{newFileCount:i.size,outOfSyncFileCount:r.size,deletedFileCount:o.size,initTime:u}}addOrUpdate(e){for(let t of e)this._pendingChanges.set(t,"update")}delete(e){for(let t of e)this._pendingChanges.set(t,"delete")}async search(e,t){let r=new as.StopWatch,i=this._pendingChanges.size;await this._flushPendingChanges();let o=r.elapsed();r.reset();let u=this._tfIdf.search(e,t),a=r.elapsed();return{chunks:u,telemetry:{fileCount:this._tfIdf.fileCount,updatedFileCount:i,updateTime:o,searchTime:a}}}async _flushPendingChanges(){if(!this._pendingChanges.size)return;let e=[];for(let[r,i]of this._pendingChanges.entries())i==="delete"&&e.push(r);e.length&&this._tfIdf.delete(e);let t=[];for(let[r,i]of this._pendingChanges.entries())if(i==="update"){let o=new ko.Lazy(()=>this._host.proxy.getContentVersionId(r));t.push({uri:r,getContentVersionId:s(()=>o.value,"getContentVersionId"),getChunks:s(async()=>{let u=await this._host.proxy.readFile(r);return this.getRawNaiveChunks(r,u)},"getChunks")})}t.length&&await this._tfIdf.addOrUpdate(t),this._pendingChanges.clear()}getRawNaiveChunks(e,t){try{return this._chunker.chunkFile(this._tokenizerName,e,t,{}).map(i=>({file:e,text:i.text,rawText:i.rawText,range:i.range,isFullFile:i.isFullFile}))}catch(r){return this._host.proxy.logError(`Could not chunk: ${e}`,r),[]}}};var Nt=require("worker_threads");function X2(){let n=Nt.parentPort;if(!n)throw new Error("This module should only be used in a worker thread.");if(!Nt.workerData)throw new Error("Expected 'workerData' to be provided to the worker thread.");new Wn(n,Nt.workerData)}s(X2,"main");X2();
96
96
  //!!! DO NOT modify, this file was COPIED from 'microsoft/vscode'
97
97
  /*! Bundled license information:
98
98