@bud.sh/app 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/bud/design.js +1 -1
- package/dist/client/assets/canvas-C8hyPWoT.js +1 -0
- package/dist/client/assets/difference-worker-BfF4_N3e.js +8 -0
- package/dist/client/assets/files-D_Tm7gCK.js +1 -0
- package/dist/client/assets/i18n-BtfXum8P.js +1 -0
- package/dist/client/assets/index-Dpxjiok1.js +2 -0
- package/dist/client/assets/pages-B-_CKvDS.js +1 -0
- package/dist/client/assets/project-branches-DzXdaT9L.js +1 -0
- package/dist/client/assets/project-comments-CQkB2jbE.js +1 -0
- package/dist/client/assets/project-thread-links-BN7zL0AX.js +1 -0
- package/dist/client/assets/{project-threads-DezXiVK6.js → project-threads-CHGG-6fo.js} +104 -104
- package/dist/client/assets/{project-work-CB1JHqGW.js → project-work-L5fYMSOu.js} +1 -1
- package/dist/client/assets/task-design-DYqcqq1b.js +23 -0
- package/dist/client/assets/tasks-A2FKo3_h.js +1 -0
- package/dist/client/assets/tasks-request-DGigNdyK.js +1 -0
- package/dist/client/assets/workspace-CvWmU2RK.js +2 -0
- package/dist/client/index.html +2 -1
- package/dist/hosted/assets/{canvas-C69-96GR.js → canvas-MWtOwaWm.js} +69 -41
- package/dist/hosted/assets/{comment-data-CiDuvXi2.js → comment-data-DsgJWq4n.js} +7195 -1067
- package/dist/hosted/assets/{files-DQL5hzs3.js → files-Wvo11G2A.js} +92 -89
- package/dist/hosted/assets/{pages-DFs7jB6M.js → pages-BAmRFVtU.js} +31 -22
- package/dist/hosted/assets/{project-branches-CffV4IS1.js → project-branches-BNloVosX.js} +5 -5
- package/dist/hosted/assets/{project-thread-links-B1Y2bDUx.js → project-thread-links-BmY8HQXt.js} +12 -12
- package/dist/hosted/assets/{screen-BroBb1Z_.js → screen-QmqmI2Aq.js} +18 -18
- package/dist/hosted/assets/{tasks-mzmNhe2d.js → tasks-C8iWPrWg.js} +29 -29
- package/dist/hosted/assets/{tasks-request-Dcrpd2_8.js → tasks-request-C89fN1dK.js} +7 -7
- package/dist/hosted/hosted.js +48 -29
- package/dist/node/design.js +6235 -139
- package/dist/node/index.js +4 -2
- package/dist/node-host/assets/{canvas-BZhzizzt.js → canvas-D_F8SIlm.js} +70 -42
- package/dist/node-host/assets/{comment-data-nUlI0szN.js → comment-data-q_8INiZz.js} +7221 -1093
- package/dist/node-host/assets/{files-CTzcWGjb.js → files-xazOrNCX.js} +92 -89
- package/dist/node-host/assets/{pages-0aWH7z1j.js → pages-D6VkmdfQ.js} +31 -22
- package/dist/node-host/assets/{project-branches-1zs_0J_y.js → project-branches-C26hwmo3.js} +5 -5
- package/dist/node-host/assets/{project-thread-links-LpUAGcDr.js → project-thread-links-BOzjws5W.js} +12 -12
- package/dist/node-host/assets/{screen-DQoTOWYR.js → screen-Dog-YByu.js} +18 -18
- package/dist/node-host/assets/{tasks-C0WqnM7Q.js → tasks-A1_bpb3_.js} +30 -30
- package/dist/node-host/assets/{tasks-request-Bwky5ORf.js → tasks-request-Bie1PpQP.js} +7 -7
- package/dist/node-host/node-host.js +48 -29
- package/dist/server/assets/{branch-previews-BryeA_kA.js → branch-previews-ClkoJ0lM.js} +4 -2
- package/dist/server/assets/{canvas-D6tIkONI.js → canvas-Dn4RYoU2.js} +70 -42
- package/dist/server/assets/{comment-data-BuArfgcc.js → comment-data-B0OLHBGp.js} +7219 -1091
- package/dist/server/assets/{files-DkrEB48U.js → files-C5Vilfe4.js} +92 -89
- package/dist/server/assets/{listener-oKd5ETMj.js → listener-o1STuLju.js} +43 -29
- package/dist/server/assets/{pages-iEdmK_o2.js → pages-BNa0MHEc.js} +31 -22
- package/dist/server/assets/{project-branches-B7rtrvMl.js → project-branches-GtQYyOH5.js} +5 -5
- package/dist/server/assets/{project-thread-links-ue_ad9IX.js → project-thread-links-Nfz9NIny.js} +12 -12
- package/dist/server/assets/{project-work-6aOyja4v.js → project-work-Cy_BpHwR.js} +2 -2
- package/dist/server/assets/{screen-DMUB9a-K.js → screen-BtcJmZwj.js} +18 -18
- package/dist/server/assets/{server-DN5uwE4k.js → server-CYvuOSBA.js} +1 -1
- package/dist/server/assets/{services-Ber8opFE.js → services-DK4fqrlF.js} +2 -2
- package/dist/server/assets/{tasks-C2oa2wSC.js → tasks-B82tHwyQ.js} +31 -31
- package/dist/server/assets/{tasks-request-Bk5EoY_p.js → tasks-request-BtJBlkxV.js} +7 -6
- package/dist/server/capture.js +1 -1
- package/dist/server/migration.js +3 -3
- package/dist/server/runtime.js +4 -4
- package/dist/server/server.js +3 -3
- package/dist/types/assets/{config-Cuauq8xY.d.ts → config-DIC2cf_S.d.ts} +3 -0
- package/dist/types/assets/{contract-BsCQbbxD.d.ts → contract-CAT-XFNq.d.ts} +3 -1
- package/dist/types/companion.d.ts +1 -1
- package/dist/types/hosted.d.ts +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/node-host.d.ts +2 -2
- package/dist/types/screen.d.ts +1 -1
- package/package.json +1 -1
- package/dist/client/assets/canvas-DxaIItAs.js +0 -1
- package/dist/client/assets/difference-worker-BpqPBs5g.js +0 -8
- package/dist/client/assets/files-C-7xoSt4.js +0 -1
- package/dist/client/assets/index-GPPa1XPO.js +0 -2
- package/dist/client/assets/pages-BVrTX_Eq.js +0 -1
- package/dist/client/assets/project-branches-DpxQx-T4.js +0 -1
- package/dist/client/assets/project-comments-D897aU5O.js +0 -1
- package/dist/client/assets/project-thread-links-Bp_TseD0.js +0 -1
- package/dist/client/assets/task-design-bktfn_Ok.js +0 -23
- package/dist/client/assets/tasks-Cqfj4fQN.js +0 -1
- package/dist/client/assets/tasks-request-mWMk9pBo.js +0 -1
- package/dist/client/assets/workspace-CznMN7F6.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./lru-BkhKJhvt.js";import{n}from"./i18n-BtfXum8P.js";import{t as r}from"./jsx-B4XNFIzB.js";import{n as i}from"./attrs-mixin-CmlG_FtV.js";import{t as a}from"./preload-helper-BLdHbfdN.js";import{l as o}from"./loader-Q6-HPKft.js";import{t as s}from"./screen-Dfvzj6n2.js";import{$t as c,Bt as l,Ft as u,Gt as d,Ht as f,Jt as p,Kt as m,Lt as h,Pt as g,Qt as _,Rt as v,T as y,Vt as b,Wt as ee,Xt as te,Yt as ne,cn as re,dn as x,ht as S,jt as ie,ln as ae,nn as C,rn as oe,un as se,zt as w}from"./task-design-DYqcqq1b.js";import{B as T,C as E,S as ce,x as D}from"./cloneFileDiffMetadata-CWfw01dG.js";import{$t as O,A as le,At as k,B as ue,Bt as de,Ct as A,D as fe,Et as j,F as pe,Ft as M,Gt as N,Ht as P,I as F,It as I,Jt as L,K as me,Kt as R,L as z,Lt as B,M as V,Mt as he,N as H,Nt as ge,O as _e,P as ve,Pt as ye,Qt as U,R as be,Rt as xe,St as Se,Tt as W,Ut as Ce,Vt as we,W as Te,Wt as Ee,Xt as De,Yt as Oe,Zt as ke,_t as Ae,a as je,at as Me,b as G,bt as Ne,c as Pe,d as Fe,dt as K,en as q,f as J,ft as Ie,gt as Le,ht as Re,j as ze,jt as Be,k as Ve,lt as He,mt as Ue,nn as We,pt as Ge,qt as Y,s as Ke,st as qe,tn as Je,u as Ye,ut as Xe,vt as Ze,wt as Qe,xt as $e,y as et,yt as tt,z as nt,zt as rt}from"./project-threads-CHGG-6fo.js";import{t as it}from"./project-comments-CQkB2jbE.js";import{t as at}from"./project-thread-links-BN7zL0AX.js";function ot(e){let t=[];for(let n of e){let e=We.get(n);if(e==null)throw Error(`getResolvedLanguages: ${n} is not resolved. Please resolve languages before calling getResolvedLanguages`);t.push(e)}return t}function st(e){for(let t of Array.isArray(e)?e:[e])if(!We.has(t))return!1;return!0}async function ct(e){let t=[],n=[];for(let r of e){if(r===`text`||r===`ansi`)continue;let e=O(r)??q(r);`then`in e?n.push(e):t.push(e)}return n.length>0&&await Promise.all(n).then(e=>{for(let n of e){if(n==null)throw Error(`resolvedLanguages: unable to resolve language`);t.push(n)}}),t}function lt(e){return ke.getResolvedThemes(e)}async function ut(e){for(let t of e)L(t);let t=await ke.resolveThemes(e);for(let n=0;n<e.length;n++)Oe(e[n],t[n]);return t}var dt=e(t(),1),ft=Symbol(`IGNORE_RESPONSE`),pt=1e4,mt=class{options;highlighter;preferredHighlighter;renderOptions;renderOptionsRequestVersion=0;renderOptionsVersion=0;initialized=!1;workers=[];queuedTasks=[];queuedTaskByInstance=new Map;taskByHighlightKey=new Map;activeTaskById=new Map;activeRequestByInstance=new Map;nextRequestId=0;themeSubscribers=new Set;workersFailed=!1;statSubscribers=new Set;fileCache;diffCache;_queuedBroadcast;lifecycleGeneration=0;constructor(e,{langs:t,theme:n=T,useTokenTransformer:r=!1,lineDiffType:i=`word-alt`,maxLineDiffLength:a=1e3,tokenizeMaxLineLength:o=1e3,preferredHighlighter:s=`shiki-js`}){this.options=e,this.preferredHighlighter=s,this.renderOptions={theme:n,useTokenTransformer:r,lineDiffType:i,maxLineDiffLength:a,tokenizeMaxLineLength:o},this.fileCache=new dt.default.LRUMap(e.totalASTLRUCacheSize??100),this.diffCache=new dt.default.LRUMap(e.totalASTLRUCacheSize??100),this.queueInitialization(t)}isWorkingPool(){return!this.workersFailed}getFileResultCache(e){return e.cacheKey==null?void 0:this.fileCache.get(e.cacheKey)}getDiffResultCache(e){return e.cacheKey==null?void 0:this.diffCache.get(e.cacheKey)}inspectCaches(){let{fileCache:e,diffCache:t}=this;return{fileCache:e,diffCache:t}}evictFileFromCache(e){try{return this.fileCache.delete(e)!==void 0}finally{this.queueBroadcastStateChanges()}}evictDiffFromCache(e){try{return this.diffCache.delete(e)!==void 0}finally{this.queueBroadcastStateChanges()}}async setRenderOptions({theme:e=this.renderOptions.theme??T,useTokenTransformer:t=this.renderOptions.useTokenTransformer??!1,lineDiffType:n=this.renderOptions.lineDiffType??`word-alt`,maxLineDiffLength:r=this.renderOptions.maxLineDiffLength??1e3,tokenizeMaxLineLength:i=this.renderOptions.tokenizeMaxLineLength??1e3}){let{lifecycleGeneration:a}=this,o=++this.renderOptionsRequestVersion,s=()=>this.isCurrentLifecycle(a)&&this.renderOptionsRequestVersion===o;try{let a={theme:e,useTokenTransformer:t,lineDiffType:n,maxLineDiffLength:r,tokenizeMaxLineLength:i};if(this.isInitialized()||await this.initialize(),!s()||ye(a,this.renderOptions))return;let o=U(e),c=[];if(R(a.theme,this.renderOptions.theme)||(c=N(o)?lt(o):await ut(o)),!s())return;if(this.highlighter!=null)De(c,this.highlighter);else{let e=await Y({themes:o,langs:[`text`],preferredHighlighter:this.preferredHighlighter});if(!s())return;this.highlighter=e}let l=this.setRenderOptionsOnWorkers(a,c);this.renderOptions=a,this.renderOptionsVersion++,this.diffCache.clear(),this.fileCache.clear(),this.invalidateRenderTasks();for(let e of this.themeSubscribers)e.onThemeChange();await l}catch(e){if(e instanceof xe||!s())return;throw e}}getPreferredHighlighter(){return this.preferredHighlighter}getFileRenderOptions(){let{tokenizeMaxLineLength:e,theme:t,useTokenTransformer:n}=this.renderOptions;return{theme:t,useTokenTransformer:n,tokenizeMaxLineLength:e}}getDiffRenderOptions(){return{...this.renderOptions}}async setRenderOptionsOnWorkers(e,t){if(this.workersFailed)return;this.isInitialized()||await this.initialize();let n=[];for(let r of this.workers){if(!r.initialized)throw console.log({managedWorker:r}),Error(`setRenderOptionsOnWorkers: Somehow we have an uninitialized worker`);n.push(new Promise((n,i)=>{let a=this.generateRequestId(),o={type:`set-render-options`,id:a,request:{type:`set-render-options`,id:a,renderOptions:e,resolvedThemes:t},resolve:n,reject:i,requestStart:Date.now()};this.activeTaskById.set(a,o),r.pendingSetupRequestId=a,r.worker.postMessage(o.request)}))}await Promise.all(n)}subscribeToThemeChanges(e){return this.themeSubscribers.add(e),this.queueBroadcastStateChanges(),()=>{this.unsubscribeToThemeChanges(e),this.queueBroadcastStateChanges()}}unsubscribeToThemeChanges(e){this.themeSubscribers.delete(e),this.queueBroadcastStateChanges()}subscribeToStatChanges(e){return this.statSubscribers.add(e),e(this.getStats()),()=>{this.statSubscribers.delete(e)}}queueBroadcastStateChanges(){this._queuedBroadcast??=requestAnimationFrame(this._broadcastStateChanges)}_broadcastStateChanges=()=>{this._queuedBroadcast!=null&&(cancelAnimationFrame(this._queuedBroadcast),this._queuedBroadcast=void 0);let e=this.getStats();for(let t of this.statSubscribers)t(e)};cleanUpTasks(e){this.detachInstanceFromQueuedTasks(e);let t=this.activeRequestByInstance.get(e);if(t!=null){let n=this.activeTaskById.get(t);X(n)?(this.detachInstanceFromRenderTask(n,e),!n.primeCache&&n.instances.size===0&&this.removeActiveTask(n)):this.activeTaskById.delete(t)}this.activeRequestByInstance.delete(e),this.queueBroadcastStateChanges()}isInitialized(){return this.initialized===!0}async initialize(e=[]){if(this.initialized!==!0){if(this.initialized===!1){let{lifecycleGeneration:t}=this,n=new Promise((n,r)=>{(async()=>{try{let r=U(this.renderOptions.theme),i=[];if(i=N(r)?lt(r):await ut(r),!this.isCurrentLifecycle(t)){n();return}let a=[];if(a=st(e)?ot(e):await ct(e),!this.isCurrentLifecycle(t)){n();return}let[o]=await Promise.all([Y({themes:r,langs:[`text`,...e],preferredHighlighter:this.preferredHighlighter}),this.initializeWorkers(i,a)]);if(!this.isCurrentLifecycle(t)){this.terminateWorkers(),n();return}this.highlighter=o,this.initialized=!0,this.diffCache.clear(),this.fileCache.clear(),this.drainQueue(),this.queueBroadcastStateChanges(),n()}catch(e){if(e instanceof xe||!this.isCurrentLifecycle(t)){n();return}this.initialized=!1,this.workersFailed=!0,this.cancelActiveWorkerTasks(),this.terminateWorkers(),this.activeTaskById.clear();for(let t of this.queuedTasks)this.rejectRenderTaskCallbacks(t,vt(e));this.queueBroadcastStateChanges(),r(e)}})()});return this.initialized=n,this.queueBroadcastStateChanges(),n}return this.initialized}}async initializeWorkers(e,t){this.workersFailed=!1;let n=[],r=ce(),i=r>0?D():void 0;this.workers.length>0&&this.terminateWorkers();for(let a=0;a<(this.options.poolSize??8);a++){let a=this.options.workerFactory(),o={worker:a,requestId:void 0,pendingSetupRequestId:void 0,initialized:!1,langs:new Set([`text`,...t.map(({name:e})=>e)]),customExtensionsVersion:0};a.addEventListener(`message`,e=>{this.handleWorkerMessage(o,e.data)}),a.addEventListener(`error`,e=>this.handleWorkerError(o,e)),this.workers.push(o),n.push(new Promise((n,a)=>{let s=this.generateRequestId(),c={type:`initialize`,id:s,request:{type:`initialize`,id:s,renderOptions:this.renderOptions,preferredHighlighter:this.preferredHighlighter,resolvedThemes:e,resolvedLanguages:t,customExtensionsVersion:i==null?void 0:r,customExtensionMap:i},resolve(){o.initialized=!0,n()},reject:a,requestStart:Date.now()};o.pendingSetupRequestId=s,this.activeTaskById.set(s,c),this.executeTask(o,c)}))}let a=this.options.workerInitializationTimeout??pt,o;try{await Promise.race([Promise.all(n),new Promise((e,t)=>{o=setTimeout(()=>{t(Error(`WorkerPoolManager: worker initialization timed out after ${a}ms`))},a)})])}finally{o!=null&&clearTimeout(o)}}handleWorkerError(e,t){let{onWorkerError:n}=this.options;if(n!=null)try{n(t,e.worker)}catch(e){console.error(`WorkerPoolManager: onWorkerError threw:`,e)}else console.error(`Worker error:`,t,e);let{pendingSetupRequestId:r}=e;if(r==null)return;let i=this.activeTaskById.get(r);if(i?.type!==`initialize`)return;let a=yt(t);n!=null&&we(a),i.reject(a),this.cleanWorkerAndTask(e,i)}drainQueue=()=>{if(this._queuedDrain=void 0,this.initialized===!0&&this.queuedTasks.length!==0){for(let e=0;e<this.queuedTasks.length;){let t=this.queuedTasks[e];if(this.hasActiveRequest(t)){e++;continue}let n=gt(t),r=this.getAvailableWorker(n);if(r==null)break;this.queuedTasks.splice(e,1),this.assignWorkerToTask(t,r),this.resolveLanguagesAndExecuteTask(r,t,n)}this.queueBroadcastStateChanges()}};highlightFileAST(e,t){let n=this.getFileResultCache(t);P(t)||n!=null&&Ee(n.options,this.getFileRenderOptions())||this.hasMatchingFileInstanceTask(e,t)||this.submitTask(e,{type:`file`,file:t})}primeFileHighlightCache(e){if(!this.isWorkingPool())return Promise.reject(Error(`WorkerPoolManager.primeFileHighlightCache: worker pool is not working`));let t=this.getOrCreateFileHighlightCacheTask(e);return t==null?Promise.resolve():this.createRenderTaskCallbacks(t)}getOrCreateFileHighlightCacheTask(e){if(e.cacheKey==null){console.warn(`WorkerPoolManager.primeFileHighlightCache: priming highlight cache requires file.cacheKey; skipping "${e.name}".`);return}let t=this.getFileResultCache(e),n=this.getFileHighlightKey(e);if(n==null||P(e)||t!=null&&Ee(t.options,this.getFileRenderOptions()))return;let r=this.getTaskByHighlightKey(n);if(r!=null)return r.primeCache=!0,r.type===`file`?r:void 0;{let t=this.submitCacheTask({type:`file`,file:e},n);return t.type===`file`?t:void 0}}getPlainFileAST(e,t,n,r){if(this.highlighter==null)this.queueInitialization();else return Ce(e,this.highlighter,this.renderOptions,{forcePlainText:!0,startingLine:t,totalLines:n,lines:r})}highlightDiffAST(e,t){let n=this.getDiffResultCache(t);he(t)||n!=null&&ye(n.options,this.getDiffRenderOptions())||this.hasMatchingDiffInstanceTask(e,t)||this.submitTask(e,{type:`diff`,diff:t})}primeDiffHighlightCache(e){if(!this.isWorkingPool())return Promise.reject(Error(`WorkerPoolManager.primeDiffHighlightCache: worker pool is not working`));let t=this.getOrCreateDiffHighlightCacheTask(e);return t==null?Promise.resolve():this.createRenderTaskCallbacks(t)}getOrCreateDiffHighlightCacheTask(e){if(e.cacheKey==null){console.warn(`WorkerPoolManager.primeDiffHighlightCache: priming highlight cache requires diff.cacheKey; skipping "${e.prevName??e.name}" -> "${e.name}".`);return}let t=this.getDiffResultCache(e),n=this.getDiffHighlightKey(e);if(n==null||he(e)||t!=null&&ye(t.options,this.getDiffRenderOptions()))return;let r=this.getTaskByHighlightKey(n);if(r!=null)return r.primeCache=!0,r.type===`diff`?r:void 0;{let t=this.submitCacheTask({type:`diff`,diff:e},n);return t.type===`diff`?t:void 0}}getPlainDiffAST(e,t,n,r,i){return this.highlighter==null?void 0:ge(e,this.highlighter,this.renderOptions,{forcePlainText:!0,startingLine:t,totalLines:n,expandedHunks:r,collapsedContextThreshold:i})}terminate(){this.lifecycleGeneration++,this.cancelActiveWorkerTasks(),this.terminateWorkers();let e=new xe;for(let t of this.queuedTasks)this.rejectRenderTaskCallbacks(t,e);this.fileCache.clear(),this.diffCache.clear(),this.activeRequestByInstance.clear(),this.queuedTasks.length=0,this.queuedTaskByInstance.clear(),this.taskByHighlightKey.clear(),this.activeTaskById.clear(),this.highlighter=void 0,this.initialized=!1,this.workersFailed=!1,this.queueBroadcastStateChanges()}isCurrentLifecycle(e){return this.lifecycleGeneration===e}queueInitialization(e){this.initialize(e).catch(e=>{de(e)||console.error(e)})}cancelActiveWorkerTasks(){let e=new xe;for(let t of this.activeTaskById.values())`reject`in t?t.reject(e):X(t)&&this.rejectRenderTaskCallbacks(t,e)}terminateWorkers(){for(let e of this.workers)e.worker.terminate();this.workers.length=0}getStats(){return{managerState:this.initialized===!1?`waiting`:this.initialized===!0?`initialized`:`initializing`,totalWorkers:this.workers.length,workersFailed:this.workersFailed,busyWorkers:this.workers.filter(e=>e.requestId!=null||e.pendingSetupRequestId!=null).length,queuedTasks:this.queuedTasks.length,activeTasks:this.activeTaskById.size,themeSubscribers:this.themeSubscribers.size,fileCacheSize:this.fileCache.size,diffCacheSize:this.diffCache.size}}submitTask(e,t){this.initialized===!1&&this.queueInitialization();let n=this.getHighlightKeyForRequest(t),r=n==null?void 0:this.getTaskByHighlightKey(n);if(r!=null){this.detachInstanceFromQueuedTasks(e,r),this.addInstanceToTask(r,e),this.queueBroadcastStateChanges();return}this.detachInstanceFromQueuedTasks(e);let i=this.generateRequestId(),a=Date.now(),{renderOptionsVersion:o}=this,s=(()=>{switch(t.type){case`file`:return{type:`file`,id:i,request:{...t,id:i},instances:new Set([e]),primeCache:!1,highlightKey:n,callbacks:new Set,renderOptionsVersion:o,requestStart:a};case`diff`:return{type:`diff`,id:i,request:{...t,id:i},instances:new Set([e]),primeCache:!1,highlightKey:n,callbacks:new Set,renderOptionsVersion:o,requestStart:a}}})();this.enqueueRenderTask(s,e)}submitCacheTask(e,t){this.initialized===!1&&this.queueInitialization();let n=this.generateRequestId(),r=Date.now(),{renderOptionsVersion:i}=this,a=(()=>{switch(e.type){case`file`:return{type:`file`,id:n,request:{...e,id:n},instances:new Set,primeCache:!0,highlightKey:t,callbacks:new Set,renderOptionsVersion:i,requestStart:r};case`diff`:return{type:`diff`,id:n,request:{...e,id:n},instances:new Set,primeCache:!0,highlightKey:t,callbacks:new Set,renderOptionsVersion:i,requestStart:r}}})();return this.enqueueRenderTask(a),a}enqueueRenderTask(e,t){this.queuedTasks.push(e),t!=null&&this.queuedTaskByInstance.set(t,e),e.highlightKey!=null&&this.taskByHighlightKey.set(e.highlightKey,e),this.queueDrain()}async resolveLanguagesAndExecuteTask(e,t,n){try{let r=n.filter(e=>!Je(e));r.length>0&&Y({themes:U(this.renderOptions.theme),langs:[`text`,...r],preferredHighlighter:this.preferredHighlighter}).catch(e=>{console.error(e)});let i=n.filter(t=>!e.langs.has(t));if(i.length>0&&(st(i)?t.request.resolvedLanguages=ot(i):t.request.resolvedLanguages=await ct(i)),!this.activeTaskById.has(t.id)){e.requestId===t.id&&(this.cleanWorkerAndTask(e,t),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain());return}this.executeTask(e,t)}catch(n){this.rejectRenderTaskCallbacks(t,vt(n)),this.cleanWorkerAndTask(e,t),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain()}}handleWorkerMessage(e,t){let n=this.activeTaskById.get(t.id);try{if(n==null)throw ft;if(t.type===`error`){let e=Error(t.error);if(t.stack&&(e.stack=t.stack),`reject`in n)n.reject(e);else if(X(n))this.notifyHighlightError(n,e),this.rejectRenderTaskCallbacks(n,e);else throw Error(`handleWorkerMessage: unknown task type`);throw e}if(X(n))for(let{name:t}of n.request.resolvedLanguages??[])e.langs.add(t);switch(t.requestType){case`initialize`:if(n.type!==`initialize`)throw Error(`handleWorkerMessage: task/response dont match`);this.syncCustomExtensionVersion(e,n.request),n.resolve();break;case`set-render-options`:if(n.type!==`set-render-options`)throw Error(`handleWorkerMessage: task/response dont match`);n.resolve();break;case`file`:{if(n.type!==`file`)throw Error(`handleWorkerMessage: task/response dont match`);let{result:r,options:i}=t;if(!this.isCurrentRenderTask(n)||!Ee(i,this.getFileRenderOptions()))throw ft;let{request:a}=n;this.syncCustomExtensionVersion(e,a),n.cacheKeyAtDispatch!=null&&this.fileCache.set(n.cacheKeyAtDispatch,{result:r,options:i}),this.resolveRenderTaskCallbacks(n),this.notifyFileInstances(n,r,i);break}case`diff`:{if(n.type!==`diff`)throw Error(`handleWorkerMessage: task/response dont match`);let{result:r,options:i}=t;if(!this.isCurrentRenderTask(n)||!ye(i,this.getDiffRenderOptions()))throw ft;let{request:a}=n;this.syncCustomExtensionVersion(e,a),n.cacheKeyAtDispatch!=null&&this.diffCache.set(n.cacheKeyAtDispatch,{result:r,options:i}),this.resolveRenderTaskCallbacks(n),this.notifyDiffInstances(n,r,i);break}}}catch(e){e!==ft&&console.error(e,n,t)}this.cleanWorkerAndTask(e,n,t.id),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain()}_queuedDrain;queueDrain(){this._queuedDrain??(this._queuedDrain=Promise.resolve().then(this.drainQueue),this.queueBroadcastStateChanges())}assignWorkerToTask(e,t){t.requestId=e.id,X(e)&&(this.clearQueuedInstanceRequests(e),this.trackInstanceRequests(e)),this.activeTaskById.set(e.id,e)}cleanWorkerAndTask(e,t,n=t?.id){e.requestId===n&&(e.requestId=void 0),e.pendingSetupRequestId===n&&(e.pendingSetupRequestId=void 0),t!=null&&(X(t)&&(this.rejectRenderTaskCallbacks(t,new B),this.clearInstanceRequests(t),this.clearHighlightKey(t)),this.activeTaskById.delete(t.id))}executeTask(e,t){ht(t.request)&&this.maybeAttachCustomExtensions(e,t.request),this.activeTaskById.has(t.id)||this.assignWorkerToTask(t,e);try{t.type===`file`?t.cacheKeyAtDispatch=t.request.file.cacheKey:t.type===`diff`&&(t.cacheKeyAtDispatch=t.request.diff.cacheKey),e.worker.postMessage(t.request)}catch(n){console.error(`Failed to post message to worker:`,n),X(t)?(this.notifyHighlightError(t,n),this.rejectRenderTaskCallbacks(t,vt(n))):`reject`in t&&t.reject(n),this.cleanWorkerAndTask(e,t),this.queuedTasks.length>0&&this.queueDrain()}this.queueBroadcastStateChanges()}maybeAttachCustomExtensions(e,t){if(t.customExtensionsVersion!=null)return;let n=ce();e.customExtensionsVersion>=n||(t.customExtensionsVersion=n,t.customExtensionMap=D())}syncCustomExtensionVersion(e,t){t.customExtensionsVersion!=null&&(e.customExtensionsVersion=t.customExtensionsVersion)}getAvailableWorker(e){let t;for(let n of this.workers){if(n.requestId!=null||n.pendingSetupRequestId!=null||!n.initialized)continue;if(t=n,e.length===0)break;let r=!0;for(let t of e)if(!n.langs.has(t)){r=!1;break}if(r)break}return t}getFileHighlightKey(e){if(e.cacheKey!=null)return`file:${e.cacheKey}:${this.renderOptionsVersion}`}getDiffHighlightKey(e){if(e.cacheKey!=null)return`diff:${e.cacheKey}:${this.renderOptionsVersion}`}getHighlightKeyForRequest(e){switch(e.type){case`file`:return this.getFileHighlightKey(e.file);case`diff`:return this.getDiffHighlightKey(e.diff)}}hasActiveRequest(e){for(let t of _t(e))if(this.activeRequestByInstance.has(t))return!0;return!1}addInstanceToTask(e,t){e.type,e.instances.add(t),this.activeTaskById.has(e.id)?this.activeRequestByInstance.set(t,e.id):this.queuedTaskByInstance.set(t,e)}detachInstanceFromQueuedTasks(e,t){let n=this.queuedTaskByInstance.get(e);n!=null&&n!==t&&(this.queuedTaskByInstance.delete(e),this.detachInstanceFromRenderTask(n,e),!n.primeCache&&n.instances.size===0&&this.removeQueuedTask(n))}detachInstanceFromRenderTask(e,t){e.type,e.instances.delete(t)}removeQueuedTask(e){let t=this.queuedTasks.indexOf(e);t!==-1&&this.queuedTasks.splice(t,1),this.rejectRenderTaskCallbacks(e,new B),this.clearQueuedInstanceRequests(e),this.clearHighlightKey(e)}removeActiveTask(e){this.rejectRenderTaskCallbacks(e,new B),this.clearInstanceRequests(e),this.clearHighlightKey(e),this.activeTaskById.delete(e.id)}createRenderTaskCallbacks(e){return new Promise((t,n)=>{e.callbacks.add({resolve:t,reject:n})})}resolveRenderTaskCallbacks(e){for(let t of e.callbacks)t.resolve();e.callbacks.clear()}rejectRenderTaskCallbacks(e,t){for(let n of e.callbacks)n.reject(t);e.callbacks.clear()}invalidateRenderTasks(){for(let e=this.queuedTasks.length-1;e>=0;e--){let t=this.queuedTasks[e];t.renderOptionsVersion!==this.renderOptionsVersion&&this.removeQueuedTask(t)}for(let e of Array.from(this.activeTaskById.values()))X(e)&&e.renderOptionsVersion!==this.renderOptionsVersion&&this.removeActiveTask(e)}clearQueuedInstanceRequests(e){for(let t of _t(e))this.queuedTaskByInstance.get(t)===e&&this.queuedTaskByInstance.delete(t)}clearHighlightKey(e){e.highlightKey!=null&&this.taskByHighlightKey.get(e.highlightKey)===e&&this.taskByHighlightKey.delete(e.highlightKey)}trackInstanceRequests(e){for(let t of _t(e))this.activeRequestByInstance.set(t,e.id)}clearInstanceRequests(e){for(let t of _t(e))this.activeRequestByInstance.get(t)===e.id&&this.activeRequestByInstance.delete(t)}notifyFileInstances(e,t,n){for(let r of e.instances)this.activeRequestByInstance.get(r)===e.id&&r.onHighlightSuccess(e.request.file,t,n)}notifyDiffInstances(e,t,n){for(let r of e.instances)this.activeRequestByInstance.get(r)===e.id&&r.onHighlightSuccess(e.request.diff,t,n)}notifyHighlightError(e,t){for(let n of _t(e))this.activeRequestByInstance.get(n)===e.id&&n.onHighlightError(t)}hasMatchingFileInstanceTask(e,t){for(let n of this.iterateRenderTasks())if(n.type===`file`&&this.isCurrentRenderTask(n)&&n.instances.has(e)&&M(t,n.request.file))return!0;return!1}hasMatchingDiffInstanceTask(e,t){for(let n of this.iterateRenderTasks())if(n.type===`diff`&&this.isCurrentRenderTask(n)&&n.instances.has(e)&&I(n.request.diff,t))return!0;return!1}getTaskByHighlightKey(e){let t=this.taskByHighlightKey.get(e);return t!=null&&this.isCurrentRenderTask(t)?t:void 0}isCurrentRenderTask(e){return e.renderOptionsVersion===this.renderOptionsVersion}*iterateRenderTasks(){for(let e of this.queuedTasks)yield e;for(let e of this.activeTaskById.values())X(e)&&(yield e)}generateRequestId(){return`req_${++this.nextRequestId}`}};function ht(e){return e.type===`initialize`||e.type===`file`||e.type===`diff`}function gt(e){let t=new Set;if(e.type===`initialize`||e.type===`set-render-options`)return[];switch(e.type){case`file`:t.add(e.request.file.lang??E(e.request.file.name));break;case`diff`:t.add(e.request.diff.lang??E(e.request.diff.name)),t.add(e.request.diff.lang??E(e.request.diff.prevName??`-`))}return t.delete(`text`),Array.from(t)}function X(e){return e?.type===`file`||e?.type===`diff`}function _t(e){return e.instances}function vt(e){if(e instanceof Error)return e;if(typeof e==`object`&&e){if(`error`in e&&e.error instanceof Error)return e.error;if(`message`in e&&typeof e.message==`string`)return Error(e.message)}return Error(String(e))}function yt(e){let t=`error`in e?e.error:void 0,n=`message`in e&&typeof e.message==`string`&&e.message!==``?e.message:t instanceof Error?t.message:`the worker script failed to load (the error event carries no message)`;return new rt(`WorkerPoolManager: worker failed: ${n}`,t instanceof Error?{cause:t}:void 0)}async function bt(e={}){let{signal:t,renderOptions:n,...r}=e;t?.throwIfAborted();let i=e.workerFactory??(await a(async()=>{let{createCodeWorker:e}=await import(`./worker-factory-CAZ4aPuv.js`);return{createCodeWorker:e}},[])).createCodeWorker;t?.throwIfAborted();let o=new mt({poolSize:2,...r,workerFactory:i},n??{}),s=!1;function c(){s||(s=!0,t?.removeEventListener(`abort`,c),o.terminate())}return t?.addEventListener(`abort`,c,{once:!0}),{pool:o,ready:o.initialize().then(()=>{s&&o.terminate()}),dispose:c}}var xt=new Set([G.filesApi,G.fileSearchApi,G.fileReviewApi,G.fileMutationsApi,G.fileSavesApi,G.fileReviewActionsApi].flatMap(e=>Object.values(e).map(e=>e.href()))),Z=class extends Error{code;status;constructor(e,t=`request`,n=0){super(e),this.name=`FilesRequestError`,this.code=t,this.status=n}};async function Q(e,t,r,i,a=fetch,o){let s=new URL(e,`http://bud.invalid`),c=s.pathname===`/api/files/mutations/prepare`||s.pathname===`/api/files/mutations/apply`||s.pathname===`/api/files/review-actions/prepare`||s.pathname===`/api/files/review-actions/apply`||s.pathname===`/api/files/save`;if(!e.startsWith(`/api/files`)||e.startsWith(`//`)||s.origin!==`http://bud.invalid`||s.hash||!xt.has(s.pathname)||(s.pathname===`/api/files/refresh`||s.pathname===`/api/files/save`||s.pathname.startsWith(`/api/files/review-actions/`)||s.pathname.startsWith(`/api/files/mutations/`))&&s.search||c!==!!o)throw new Z(n(`app.client.filesRequest.invalidEndpoint`),`input`);r.throwIfAborted();let l=await a(e,{method:c||s.pathname===`/api/files/refresh`?`POST`:`GET`,headers:{"X-Bud-Token":t,...c?{"Content-Type":`application/json`}:{}},...o?{body:JSON.stringify(o.body)}:{},credentials:`same-origin`,redirect:`error`,cache:`no-store`,signal:r}),u=l.body?.getReader();if(!u)throw new Z(n(`app.client.filesRequest.emptyResponse`),`response`,l.status);let d=[],f=0,p=()=>{u.cancel(r.reason).catch(()=>{})};r.addEventListener(`abort`,p,{once:!0});try{for(;;){r.throwIfAborted();let e=await u.read();if(r.throwIfAborted(),e.done)break;if(f+=e.value.byteLength,f>16777216)throw new Z(n(`app.client.filesRequest.responseExceedsDisplayLimit`),`limit`,l.status);d.push(e.value)}}catch(e){throw await u.cancel().catch(()=>{}),e}finally{r.removeEventListener(`abort`,p),u.releaseLock()}let m=new Uint8Array(f),h=0;for(let e of d)m.set(e,h),h+=e.byteLength;let g;try{g=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(m))}catch{throw new Z(n(`app.client.filesRequest.invalidData`),`response`,l.status)}if(!l.ok)throw new Z(g&&typeof g==`object`&&`error`in g&&typeof g.error==`string`?g.error.slice(0,1e3):n(`app.client.filesRequest.couldNotLoadFiles`),g&&typeof g==`object`&&`code`in g&&typeof g.code==`string`?g.code.slice(0,100):`request`,l.status);try{return i(g)}catch{throw new Z(n(`app.client.filesRequest.unexpectedData`),`response`,l.status)}}function St(){let e=new Set;return{register(t,n){n.aborted||(e.add(t),n.addEventListener(`abort`,()=>e.delete(t),{once:!0}))},async beforeApply(t,n,r){for(let i of e){r.throwIfAborted();let e=await i.beforeApply(t,n,r);if(r.throwIfAborted(),e)throw Error(e)}},async afterApply(t,n){for(let r of e)await r.afterApply(t,n)}}}function Ct(e){return e instanceof Error?e.message:n(`app.client.fileMutationController.actionCouldNotBeCompleted`)}function wt(e,t){if(e.kind!==t.kind)throw Error(n(`app.client.fileMutationController.differentFileAction`));if(e.kind===`restore`)return;let r=`entries`in e?e.entries.map(e=>[e.path,e.destination]):e.kind===`delete`?e.paths.map(e=>[e,null]):[[null,e.path]],i=t.items.map(e=>[e.source,e.destination]);if(JSON.stringify(r)!==JSON.stringify(i))throw Error(n(`app.client.fileMutationController.differentFilePaths`))}function Tt(e,t){if(t.id!==e.id||t.items.length!==e.items.length||t.items.some((t,n)=>t.source!==e.items[n].source||t.destination!==e.items[n].destination))throw Error(n(`app.client.fileMutationController.resultDoesNotMatchPlan`))}function Et(e){let t=null,r=!1,i=null,a=!1,o=``,s,c,l=null,u=0;function d(){e.signal.aborted||e.onChange()}function f(){return t?.phase===`preparing`||t?.phase===`applying`}function p(){t?.phase!==`applying`&&(s?.abort(),u++,t=null,l=null,d())}async function m(n,r){if(!t||t.phase===`applying`)return;s?.abort();let i=new AbortController;s=i;let a=AbortSignal.any([e.signal,i.signal]),o=++u;l=n,t={...t,phase:`preparing`,plan:null,result:null,error:``},d();try{let i=await e.transport.prepare(n,a);if(a.throwIfAborted(),wt(n,i),o!==u||!t)return;t={...t,plan:i,phase:`confirming`},d(),r&&await h()}catch(e){!a.aborted&&o===u&&t&&(t={...t,phase:`editing`,error:Ct(e)},d())}}async function h(){if(!t?.plan||!l||f())return;let r=l,i=t.plan;if(Date.parse(i.expiresAt)<=Date.now()){t={...t,phase:`editing`,plan:null,error:n(`app.client.fileMutationController.confirmationExpired`)},d();return}s?.abort();let a=new AbortController;s=a;let o=AbortSignal.any([e.signal,a.signal]),c=++u,p=!1;t={...t,phase:`applying`,error:``},d();try{await e.guards.beforeApply(r,i,o),o.throwIfAborted(),p=!0;let a=await e.transport.apply(i,o);if(o.throwIfAborted(),Tt(i,a),c!==u||!t)return;t={...t,phase:`result`,result:a};let s=``;try{await e.guards.afterApply(r,a)}catch(e){s=n(`app.client.fileMutationController.draftMetadataCouldNotBeUpdated`,{error:Ct(e)})}if(await e.onApplied(r,a),c!==u||!t)return;t={...t,error:s},a.status===`applied`&&!s&&![`delete`,`restore`].includes(r.kind)&&(t=null,l=null),d()}catch(r){if(o.aborted||c!==u||!t)return;t={...t,phase:`editing`,plan:null,error:Ct(r)},p&&(await e.onUncertain().catch(()=>{}),t&&c===u&&(t={...t,error:n(`app.client.fileMutationController.refreshAndCheckRecovery`,{error:Ct(r)})})),d()}}function g(n,i=!1){if(f())return;s?.abort(),c?.abort(),u++,r=!1,l=null;let a=``,o=``;try{a=z(n,e.index())}catch(e){o=Ct(e)}t={request:n,destination:a,phase:`editing`,plan:null,result:null,error:o},d(),!o&&(n.action===`delete`||n.action===`restore`||i)&&_()}async function _(){if(t&&!f()){if(t.phase===`confirming`)await h();else try{let n=t.result&&l?ue(l,t.result):be(t.request,t.destination,e.index());if(!n)return;await m(n,![`delete`,`restore`].includes(n.kind))}catch(e){t&&={...t,error:Ct(e),phase:`editing`},d()}}}async function v(){c?.abort();let t=new AbortController;c=t;let n=AbortSignal.any([e.signal,t.signal]);a=!0,o=``,d();try{let t=await e.transport.recoveries(n);n.aborted||(i=t)}catch(e){n.aborted||(o=Ct(e))}finally{c===t&&(a=!1,d())}}return e.signal.addEventListener(`abort`,()=>{s?.abort(),c?.abort()},{once:!0}),{get state(){return t},get busy(){return f()},get recovery(){return{open:r,recoveries:i,loading:a,error:o}},open:g,close:p,submit:_,destination(e){t&&!f()&&(l=null,t={...t,destination:e,plan:null,result:null,phase:`editing`,error:``},d())},recoveries(){f()||(p(),r=!0,v(),d())},refreshRecoveries:v,closeRecoveries(){c?.abort(),r=!1,d()}}}function Dt(e){return new URLSearchParams(e.mode===`commits`?{mode:e.mode,base:e.base,target:e.target}:{mode:e.mode})}async function Ot(e,t,r,i,a=fetch){if(t.length>20||t.some(t=>!e.entries.some(e=>e.path===t)))throw new Z(n(`app.client.projectFileReviewData.filesOutsidePage`),`input`);let o=new Map,s={},c=0,l=0,u=new AbortController,d=AbortSignal.any([i,u.signal]),f;async function m(){try{for(;c<t.length;){d.throwIfAborted();let i=t[c++],u=Dt(e.comparison);u.set(`path`,i),u.set(`expectedRevision`,e.revision);try{let t=await Q(`${G.fileReviewApi.diff.href()}?${u}`,r,d,p,a);if(t.entry.path!==i||t.metadataRevision!==e.revision||JSON.stringify(t.comparison)!==JSON.stringify(e.comparison))throw new Z(n(`app.client.projectFileReviewData.comparisonChanged`),`changed`,409);let c=[t.oldFile,t.newFile,t.conflict?.base,t.conflict?.ours,t.conflict?.theirs].reduce((e,t)=>e+(t?.contents?.length??0)*2,0);l+c>33554432?s[i]=n(`app.client.projectFileReviewData.memoryLimit`):(l+=c,o.set(i,t))}catch(e){if(d.aborted||e instanceof Z&&(e.status===409||e.status===401||e.status===403))throw e;s[i]=e instanceof Error?e.message:n(`app.client.projectFileReviewData.couldNotReadComparison`)}}}catch(e){f??=e,u.abort(e)}}if(await Promise.all(Array.from({length:Math.min(3,t.length)},m)),f)throw f;return i.throwIfAborted(),{diffs:t.flatMap(e=>o.get(e)??[]),failures:s}}var kt={getItem:e=>{let t=k(e);return typeof t==`string`?t:null},setItem:(e,t)=>Be(e,t)},At=16,jt=At*f*2,Mt=3145728,Nt=new TextEncoder;function $(e){return e.contents!==e.baseContents}function Pt(e){return Nt.encode(e.contents).length+Nt.encode(e.baseContents).length}function Ft(e,t){return e===t||e.startsWith(`${t}/`)}function It(e,t){if(!e)return[];if(e.length>Mt)throw Error(n(`app.client.fileDrafts.recordExceedsLimit`));let r=JSON.parse(e);if(!r||typeof r!=`object`||Array.isArray(r))throw Error(n(`app.client.fileDrafts.invalidRecord`));let i=r;if(i.version!==1||i.projectId!==t||!Array.isArray(i.drafts)||i.drafts.length>At||Object.keys(i).some(e=>![`version`,`projectId`,`drafts`].includes(e)))throw Error(n(`app.client.fileDrafts.invalidRecord`));let a=new Set,o=0;return i.drafts.map(e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw Error(n(`app.client.fileDrafts.invalidDraft`));let t=e;if(Object.keys(t).some(e=>![`id`,`path`,`baseRevision`,`baseContents`,`contents`,`updatedAt`].includes(e))||typeof t.id!=`string`||!/^[a-zA-Z0-9-]{1,80}$/.test(t.id)||!Number.isSafeInteger(t.updatedAt)||Number(t.updatedAt)<0)throw Error(n(`app.client.fileDrafts.invalidDraft`));l({path:t.path,expectedRevision:t.baseRevision,contents:t.baseContents}),l({path:t.path,expectedRevision:t.baseRevision,contents:t.contents});let r=t;if(a.has(r.path))throw Error(n(`app.client.fileDrafts.duplicateDraftPath`));if(a.add(r.path),o+=Pt(r),o>jt)throw Error(n(`app.client.fileDrafts.draftsExceedMemoryLimit`));return{...r}})}function Lt(e,t,r=Date.now){let i=new Map,a=``,o=`bud:drafts:${e}:v1`;try{for(let n of It(t?.getItem(o)??null,e))i.set(n.path,n)}catch{a=n(`app.client.fileDrafts.readFailed`)}let s=!!a;function c(){if(s)return!1;let r=JSON.stringify({version:1,projectId:e,drafts:[...i.values()].filter($)});try{if(!t||r.length>Mt)throw Error(`Storage unavailable`);return t.setItem(o,r),a=``,!0}catch{return a=n(`app.client.fileDrafts.tabOnlyWarning`),!1}}function u(e){if(Nt.encode(e.contents).length>2097152||!e.contents.isWellFormed()||e.contents.includes(`\0`))throw Error(n(`app.client.fileDrafts.unsupportedDraftText`));let t=[...i.values()].filter(t=>t.path!==e.path&&!$(t));for(let e of t)i.delete(e.path);let r=[...i.values()].filter(t=>t.path!==e.path);if(r.length>=At||r.reduce((e,t)=>e+Pt(t),Pt(e))>jt)throw Error(n(`app.client.fileDrafts.draftLimitReached`));return i.set(e.path,e),c(),e}return{get warning(){return a},get dirty(){return[...i.values()].filter($)},get(e){return i.get(e)},open(e,t,n){let a=i.get(e);return a&&$(a)?a:(l({path:e,expectedRevision:t,contents:n}),u({id:crypto.randomUUID(),path:e,baseRevision:t,baseContents:n,contents:n,updatedAt:r()}))},change(e,t){let a=i.get(e);if(!a)throw Error(n(`app.client.fileDrafts.draftNoLongerOpen`));return u({...a,contents:t,updatedAt:r()})},acknowledge(e,t,n){let a=i.get(e);if(a)return u({...a,baseRevision:n,baseContents:t,updatedAt:r()})},rebase(e,t,a){let o=i.get(e);if(!o)throw Error(n(`app.client.fileDrafts.draftNoLongerOpen`));return u({...o,id:crypto.randomUUID(),baseRevision:t,baseContents:a,updatedAt:r()})},discard(e){i.delete(e),c()},persist:c,beforeMutation(e,t){let r=[...i.values()].filter($);if(e.kind===`delete`&&r.some(t=>e.paths.some(e=>Ft(t.path,e))))return n(`app.client.fileDrafts.deleteWithUnsavedDrafts`);if(e.kind===`restore`&&r.some(e=>t.items.some(t=>t.destination&&Ft(e.path,t.destination))))return n(`app.client.fileDrafts.restoreWithUnsavedDrafts`);if(e.kind===`move`){if(r.some(t=>e.entries.some(e=>Ft(t.path,e.destination)&&!Ft(t.path,e.path))))return n(`app.client.fileDrafts.destinationHasDraft`);if(r.some(t=>e.entries.some(e=>Ft(t.path,e.path)))&&!c())return n(`app.client.fileDrafts.storageUnavailableForMove`)}return null},afterMutation(e,t){if(e.kind!==`move`)return;let r=t.items.filter(e=>e.status===`applied`&&e.source&&e.destination),a=[],o=new Map(i);for(let e of i.values()){let t=r.find(t=>Ft(e.path,t.source));if(!t)continue;let n=x(t.destination+e.path.slice(t.source.length));a.push({draft:e,path:n}),o.delete(e.path)}for(let{draft:e,path:t}of a){let r=o.get(t);if(r&&$(r))throw Error(n(`app.client.fileDrafts.destinationDraftConflict`));o.set(t,{...e,id:crypto.randomUUID(),path:t})}i=o,c()}}}var Rt=new Map,zt=!1;function Bt(e,t){zt||(zt=!0,window.addEventListener(`beforeunload`,e=>{if([...Rt.values()].some(e=>e.dirty.length)){for(let e of Rt.values())e.persist();e.preventDefault(),e.returnValue=``}}));let r=Rt.get(e);if(r)return r;for(let[e,t]of Rt)t.dirty.length||Rt.delete(e);if(Rt.size>=4)throw Error(n(`app.client.fileDrafts.projectDraftLimitReached`));let i=Lt(e,t);return Rt.set(e,i),i}function Vt(e){return e instanceof Error?e.message:n(`app.client.fileEditorController.saveFailed`)}function Ht(e,t){if(e.entry.path!==t)throw Error(n(`app.client.fileEditorController.wrongFileResponse`));if(e.contents===null||!e.revision)throw Error(n(`app.client.fileEditorController.unsupportedFile`));return{revision:e.revision,contents:e.contents}}function Ut(e,t){return e===t||e.startsWith(`${t}/`)}function Wt(e){let t=null,r=!1,i=null,a=``,o,s=new Set,c=0;function l(){e.signal.aborted||e.onChange()}function u(){o?.abort(),c++,t=null,i=null,r=!1,a=``,e.drafts.persist(),l()}function d(e){i!==e&&u()}function f(e){!t||t.draft.path!==e.entry.path||t.saving||t.latest||e.revision!==t.draft.baseRevision&&(t={...t,conflict:!0,error:n(`app.client.fileEditorController.changedOutsideEditor`)},l())}async function p(u,d=`file`,f){o?.abort();let p=new AbortController;o=p;let m=AbortSignal.any([p.signal,e.signal]),h=++c;i=u,r=!0,a=``,l();try{let r=await e.read(u,m);m.throwIfAborted();let i=Ht(r,u),a=e.drafts.open(u,i.revision,i.contents),o=a.baseRevision!==i.revision,c=d===`diff`&&f?.workingRevision===i.revision;t={key:`${a.id}:${h}`,draft:a,file:{name:u,contents:a.contents},oldFile:c?f.file:{name:u,contents:a.baseContents},mode:d,baselineLabel:n(c?`app.client.fileEditorController.index`:`app.client.fileEditorController.openedVersion`),saving:s.has(u),conflict:o,latest:null,error:o?n(`app.client.fileEditorController.recoveredDraftOldVersion`):``,status:$(a)?n(`app.client.fileEditorController.recoveredUnsavedDraft`):``}}catch(r){if(!m.aborted){let i=e.drafts.get(u);i&&$(i)?t={key:`${i.id}:recovery:${h}`,draft:i,file:{name:u,contents:i.contents},oldFile:{name:u,contents:i.baseContents},mode:`file`,baselineLabel:n(`app.client.fileEditorController.openedVersion`),saving:s.has(u),conflict:!0,latest:null,error:n(`app.client.fileEditorController.projectFileUnreadable`,{detail:Vt(r)}),status:n(`app.client.fileEditorController.unsavedDraftAvailable`)}:a=Vt(r)}}finally{h===c&&(r=!1,l())}}function m(n){if(t){try{let r=e.drafts.change(t.draft.path,n);t={...t,draft:r,status:``,error:t.conflict?t.error:``}}catch(e){t={...t,error:Vt(e)}}l()}}async function h(){if(!t||t.saving||t.conflict||t.latest||!$(t.draft))return;let r=t.draft;s.add(r.path),t={...t,saving:!0,error:``,status:``},l();try{let i=await e.save({path:r.path,expectedRevision:r.baseRevision,contents:r.contents},e.signal);if(i.path!==r.path||i.previousRevision!==r.baseRevision)throw Error(n(`app.client.fileEditorController.saveRevisionMismatch`));let a=e.drafts.acknowledge(r.path,r.contents,i.revision);t?.draft.path===r.path&&a&&(t={...t,draft:a,status:``,error:``},i.refresh===`failed`?y.error(n(`app.client.fileEditorController.savedRefreshFailed`),{description:n(`app.client.fileEditorController.refreshBeforeContinuing`)}):$(a)?y.success(n(`app.client.fileEditorController.savedToProject`),{description:n(`app.client.fileEditorController.newerEditsUnsaved`)}):y.success(n(`app.client.fileEditorController.savedToProject`))),e.onSaved()}catch(e){t?.draft.path===r.path&&(t={...t,error:Vt(e),conflict:!0})}finally{s.delete(r.path),t?.draft.path===r.path&&(t={...t,saving:!1}),l()}}async function g(){if(!t||t.saving)return;let r=t;o?.abort();let i=new AbortController;o=i;let a=AbortSignal.any([i.signal,e.signal]),s=++c;try{let i=await e.read(r.draft.path,a);a.throwIfAborted();let o=Ht(i,r.draft.path);if(!t||t.draft.path!==r.draft.path)return;let c=e.drafts.get(r.draft.path);t={...t,key:`${c.id}:merge:${s}`,file:{name:c.path,contents:c.contents},oldFile:{name:c.path,contents:o.contents},mode:`diff`,baselineLabel:n(`app.client.fileEditorController.latestFile`),latest:i,conflict:!0,error:``,status:n(`app.client.fileEditorController.draftOnNewSide`)}}catch(e){!a.aborted&&t&&(t={...t,error:Vt(e)})}finally{l()}}function _(){if(!t?.latest)return;let r=Ht(t.latest,t.draft.path),i=e.drafts.rebase(t.draft.path,r.revision,r.contents);t={...t,draft:i,latest:null,conflict:!1,error:``,status:n(`app.client.fileEditorController.reviewedAgainstLatest`)},l()}async function v(){if(!t||t.saving)return;let n=t.draft.path;e.drafts.discard(n),u(),await p(n)}return{get state(){return t},get opening(){return r},get openError(){return a},begin:p,change:m,save:h,close:u,closeOtherPath:d,observe:f,checkLatest:g,acceptMerge:_,discard:v,guard:{async beforeApply(t,r,i){return i.throwIfAborted(),[...s].some(e=>r.items.some(t=>t.source&&Ut(e,t.source)||t.destination&&Ut(e,t.destination)))?n(`app.client.fileEditorController.waitForSave`):e.drafts.beforeMutation(t,r)},afterApply(n,r){e.drafts.afterMutation(n,r),t&&n.kind===`move`&&r.items.some(e=>e.status===`applied`&&e.source&&Ut(t.draft.path,e.source))&&u(),l()}}}}function Gt(e){return e instanceof Error?e.message:n(`app.client.fileReviewActionsController.actionCouldNotBeCompleted`)}function Kt(e){let t=null,r,i=0;function a(){e.signal.aborted||e.onChange()}function o(n){return r?.abort(),r=new AbortController,i++,t={phase:n,plan:null,result:null,recoveries:null,error:``},a(),{signal:AbortSignal.any([e.signal,r.signal]),turn:i}}function s(){t?.phase!==`applying`&&(r?.abort(),i++,t=null,a())}async function c(r){if(t?.phase===`applying`)return;let{signal:s,turn:c}=o(`preparing`);try{r.kind!==`undo`&&e.guard([r.path],r.kind===`discard`?`worktree`:`index`);let a=await e.prepare(r,s);if(s.throwIfAborted(),a.kind!==r.kind||r.kind!==`undo`&&!a.paths.includes(r.path))throw Error(n(`app.client.fileReviewActionsController.preparedReviewMismatch`));e.guard(a.paths,a.target),c===i&&(t={phase:`ready`,plan:a,result:null,recoveries:null,error:``})}catch(e){!s.aborted&&c===i&&(t={phase:`error`,plan:null,result:null,recoveries:null,error:Gt(e)})}finally{c===i&&a()}}async function l(){if(t?.phase!==`ready`||!t.plan)return;let o=t.plan,s=i,c=AbortSignal.any([e.signal,r.signal]);try{e.guard(o.paths,o.target),t={...t,phase:`applying`,error:``},a();let r=await e.apply({id:o.id,revision:o.revision},c);if(c.throwIfAborted(),r.id!==o.id||r.target!==o.target||r.changedPaths.some(e=>!o.paths.includes(e)))throw Error(n(`app.client.fileReviewActionsController.writeResponseUnconfirmed`));if(s===i){let n=``;try{await e.onApplied(r)}catch(e){n=Gt(e)}c.throwIfAborted(),s===i&&(t={...t,phase:`done`,result:r,error:n})}}catch(e){!c.aborted&&s===i&&t&&(t={...t,phase:`error`,error:Gt(e)})}finally{s===i&&a()}}async function u(){if(t?.phase===`applying`)return;let{signal:n,turn:r}=o(`preparing`);try{let a=await e.recoveries(n);!n.aborted&&r===i&&(t={phase:`recoveries`,plan:null,result:null,recoveries:a,error:``})}catch(e){!n.aborted&&r===i&&(t={phase:`error`,plan:null,result:null,recoveries:null,error:Gt(e)})}finally{r===i&&a()}}return e.signal.addEventListener(`abort`,()=>{r?.abort(),t=null},{once:!0}),{get state(){return t},prepare:c,apply:l,recoveries:u,close:s}}function qt(e){return e.resolution.state===`outdated`?null:{selection:{path:e.source.viewPath??e.source.path,start:e.resolution.startLine,end:e.resolution.endLine,...e.source.side?{side:e.source.side===`old`?`deletions`:`additions`}:{}},revision:e.resolution.revision}}function Jt(e,t,n){return n?[{path:n.path,revision:n.file?.revision??null,contents:n.file?.contents??null,commit:n.commit}]:e?[{path:e.entry.path,revision:e.revision,contents:e.contents,commit:null}]:t.flatMap(e=>[{path:e.oldFile?.name??e.entry.originalPath??e.entry.path,revision:e.oldFile?.revision??null,contents:e.oldFile?.contents??null,viewPath:e.entry.path,side:`old`,commit:e.base},{path:e.entry.path,previousPath:e.entry.originalPath,revision:e.newFile?.revision??null,contents:e.newFile?.contents??null,viewPath:e.entry.path,side:`new`,commit:e.target}])}function Yt(e,t,r){if(e.endSide&&e.endSide!==e.side)throw Error(n(`app.client.projectCodeComments.selectConsecutiveLines`));let i=e.side===`deletions`?`old`:`new`,a=t.find(t=>(t.viewPath??t.path)===e.path&&(!t.side||t.side===i));if(!a||a.contents===null||!a.revision)throw Error(n(`app.client.projectCodeComments.commentsRequireReadableText`));if(r&&a.revision!==r)throw Error(n(`app.client.projectCodeComments.linesBelongToOlderSource`));return ie({path:a.path,revision:a.revision,commit:a.commit??null,side:i,startLine:Math.min(e.start,e.end),endLine:Math.max(e.start,e.end)},a.contents)}function Xt(e){let t=new URLSearchParams({query:e.query,regex:String(e.regex),caseSensitive:String(e.caseSensitive),wholeWord:String(e.wholeWord),directory:e.directory,includeDotfiles:String(e.includeDotfiles),includeIgnored:String(e.includeIgnored),limit:String(e.limit)});for(let n of e.include)t.append(`include`,n);for(let n of e.exclude)t.append(`exclude`,n);return t}function Zt(e){let t,r={loading:!1,result:null,error:``,notice:``};function i(){e.signal.aborted||e.onChange()}function a(e=n(`app.client.fileSearchController.searchCancelled`)){t?.abort(),t=void 0,r={...r,loading:!1,notice:e,error:``},i()}return e.signal.addEventListener(`abort`,()=>a(``),{once:!0}),{get state(){return r},cancel:a,async search(o){a(``);let s=new AbortController;t=s;let c=AbortSignal.any([s.signal,e.signal]);r={loading:!0,result:null,error:``,notice:``},i();try{let i=C(o),a=await e.request(i,c);if(Xt(a.query).toString()!==Xt(i).toString())throw new Z(n(`app.client.fileSearchController.differentSearchResults`),`response`);if(c.aborted||t!==s)return;r={loading:!1,result:a,error:``,notice:``}}catch(e){if(c.aborted||t!==s)return;r={loading:!1,result:null,error:e instanceof Error?e.message:n(`app.client.fileSearchController.searchFailed`),notice:``}}finally{t===s&&(t=void 0,i()),s.abort()}}}}function Qt(e,t){if(e.entry.path!==t.path||e.revision!==t.revision||e.entry.content!==`text`||typeof e.contents!=`string`||t.start<0||t.end<t.start||t.end>e.contents.length)throw Error(n(`app.client.fileSearchController.outdatedResult`));let r=t=>{let n=1,r=0;for(let i of e.contents.matchAll(/\r\n|\r|\n/g)){let e=i.index+i[0].length;if(e>t)break;n++,r=e}return{line:n,column:t-r+1}},i=r(t.start),a=r(t.end);if(i.line!==t.startLine||i.column!==t.startColumn||a.line!==t.endLine||a.column!==t.endColumn)throw Error(n(`app.client.fileSearchController.invalidCoordinates`));return{page:0,scroll:0,revision:t.revision,selection:{path:t.path,start:t.startLine,end:Math.max(t.startLine,t.endLine-Number(t.endColumn===1&&t.endLine>t.startLine))}}}function $t(e){return e instanceof Error?e.message:n(`app.client.projectFileReview.readProjectError`)}function en(e){let t=e.props.project,a={version:1,projectId:t.id,view:Ge(),positions:{}},s=null,l=null,d=[],f={},p=``,m=!1,g=null,y=!1,ee=!1,te=``,re=`light`,x,S=!1,ie,C,oe,se=!1,T=``,E,ce,D=``,O=``,ue=``,de=e.props.refresh,A=``,j,M,N=le(),P=e.props.path,F,I,L=null,R=null,z=!1,B,V,he=``,H=null,ge=null,ye=[],U=[],be=``,xe,Se=null,W,Ce,we=0,Te=``,Ee,De,Oe,ke=``,je=!1,Me=e.props.store;Me||Ke(t).then(e=>{Me=e});function Ne(){if(!z){let e=window.document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;De=e instanceof HTMLElement?e:void 0}z=!0}function Pe(){z=!1,V=void 0,K(),e.queueTask(()=>{(De?.isConnected?De:Oe?.querySelector(`diffs-container`)?.shadowRoot?.querySelector(`[contenteditable=true]`)??Oe?.querySelector(`[data-bud-code-review]`))?.focus({preventScroll:!0}),De=void 0})}function K(){e.signal.aborted||e.update()}function q(){return L?JSON.stringify([Ze(a.view,e.props.path),L.commit]):Ze(a.view,e.props.path)}function J(){return a.positions[q()]??Ie()}function We(){clearTimeout(oe),oe=setTimeout(()=>Be(`bud:review:${t.id}:v1`,JSON.stringify(a)),200)}function Y(e,t=!1){let n=J(),r={...n,...e};a=Le(a,q(),r),We(),(t||JSON.stringify(n.selection)!==JSON.stringify(r.selection)||n.revision!==r.revision)&&K()}function Je(){let t=tt(e.props.path,a.view);window.location.pathname+window.location.search+window.location.hash!==t&&(ce=new URL(t,window.location.origin).href,window.history.pushState({...window.history.state},``,t))}function $e(e){L=null,R=null,a={...a,view:{...a.view,...e}},We(),Je(),K()}let et;async function nt(){let r;et=new Promise(e=>{r=e}),ie?.abort();let i=new AbortController;ie=i;let o=AbortSignal.any([e.signal,i.signal]),u=e.props.path,h=a.view,g=L&&L.path===u?L:null,v=q(),y=JSON.stringify([v,J().page,u]),b=Ae(h);m=!0,p=``,O!==y&&(s=null,l=null,d=[],R=null,f={}),K();try{if(g){let e=await Q(`${G.fileReviewApi.source.href()}?${new URLSearchParams(g)}`,t.token,o,c);if(e.path!==g.path||e.commit!==g.commit)throw new Z(n(`app.client.projectFileReview.sourceResponseCommitMismatch`),`response`);o.aborted||(R=e,O=y)}else if(b)for(let e=0;e<2;e++){let r=await Q(`${G.fileReviewApi.compare.href()}?${Dt(b)}`,t.token,o,_);if(r.comparison.mode!==b.mode)throw new Z(n(`app.client.projectFileReview.comparisonMismatch`),`response`);let i=Math.min(J().page,Math.max(0,Math.ceil(r.entries.length/20)-1)),a=J().selection?.path;a&&h.multiple&&r.entries.some(e=>e.path===a)&&(i=Math.floor(r.entries.findIndex(e=>e.path===a)/20)),i!==J().page&&Y({...J(),page:i});let s=h.multiple?r.entries.slice(i*20,(i+1)*20).map(e=>e.path):r.entries.filter(e=>e.path===u).map(e=>e.path);try{let e=await Ot(r,s,t.token,o);!o.aborted&&q()===v&&(l=r,d=e.diffs,f=e.failures,O=JSON.stringify([v,i,u]));break}catch(t){if(e===0&&t instanceof Z&&t.status===409)continue;throw t}}else if(u){let e=O!==y&&Me?Fe(Me,u):null;e&&(s=e,O=y,m=!1,K());let r=await Q(`${G.filesApi.read.href()}?${new URLSearchParams({path:u})}`,t.token,o,ae);if(r.entry.path!==u)throw new Z(n(`app.client.projectFileReview.sourceResponseFileMismatch`),`response`);if(Me&&Ye(Me,r).catch(()=>{}),!o.aborted&&(s=s?.revision===r.revision&&s.entry.path===r.entry.path?s:r,O=y,M?.observe(r),Ee?.path===u)){let e=Ee;Ee=void 0;try{Y(Qt(r,e),!0),Te=n(`app.client.projectFileReview.searchMatchNotice`,{line:e.startLine,column:e.startColumn})}catch(e){Te=$t(e)}}}}catch(e){o.aborted||(p=$t(e))}finally{ie===i&&(m=!1,K()),r()}}async function rt(r=!1){C?.abort();let i=e.props.path;if(!i){g=null;return}let o=new AbortController;C=o;let s=AbortSignal.any([e.signal,o.signal]),c=new URLSearchParams({path:i,limit:`25`});r&&g?.nextCursor&&g.revision?(c.set(`revision`,g.revision),c.set(`cursor`,g.nextCursor)):a.view.mode===`commits`&&c.set(`revision`,a.view.target),ee=!0,te=``,K();try{let e=await Q(`${G.fileReviewApi.history.href()}?${c}`,t.token,s,ne);if(e.path!==i)throw new Z(n(`app.client.projectFileReview.historyPathMismatch`),`response`);s.aborted||(g=e)}catch(e){s.aborted||(te=$t(e))}finally{C===o&&(ee=!1,K())}}function it(t){if(a.view.multiple&&l){let e=l.entries.findIndex(e=>e.path===t);Y({...Ie(),page:Math.max(0,Math.floor(e/20))}),D=``}e.props.onSelect(t),K()}function ot(t,n){let r=n===`parent`&&t.parents[0]?{base:t.parents[0],target:t.commit}:n===`base`?{base:t.commit}:{target:t.commit};y=!1,$e({mode:`commits`,...r}),t.path!==e.props.path&&e.props.onSelect(t.path)}async function st(){let t=e.props.path,n=a.view.mode;if(!t||!M)return;if(n===`working`){for((!l||l.comparison.mode!==`working`)&&await nt();m&&et;)if(await et,e.signal.aborted||e.props.path!==t||a.view.mode!==n)return;if(e.signal.aborted||e.props.path!==t||a.view.mode!==n)return}let r=d.find(e=>e.entry.path===t),i=a.view.mode===`working`&&r?.newFile?.contents!==null&&r?.newFile?.revision;M.begin(t,i?`diff`:`file`,i?{workingRevision:r.newFile.revision,file:r.oldFile?.contents!==null&&r.oldFile?{name:r.oldFile.name,contents:r.oldFile.contents}:null}:void 0)}function ct(e){N=e,Be(`bud:editor-preferences:v1`,JSON.stringify(e)),K()}function lt(){let e=M?.state?.draft;if(!e)return;let t=URL.createObjectURL(new Blob([new TextEncoder().encode(e.contents)],{type:`application/octet-stream`})),n=window.document.createElement(`a`);n.href=t,n.download=e.path.split(`/`).at(-1)??`draft.txt`,n.click(),setTimeout(()=>URL.revokeObjectURL(t),0)}async function ut(t){let n=u(t.conflict);n&&M&&(t.entry.path!==e.props.path&&e.props.onSelect(t.entry.path),I={path:t.entry.path,conflict:n},await M.begin(t.entry.path),K())}function dt(t,n=!1){if(!He(t)){window.location.assign(qe(t.id));return}B=t.id,e.props.comments.loadThread(t.id),Ne(),V=void 0,he=``;let r=U.find(e=>e.thread.id===t.id);if(M?.state?.draft.path===t.anchor.path&&!n){K();return}let i=t.anchor.side===`old`&&r?.source.side===void 0&&r?.resolution.state===`outdated`,o=!n&&!i?r:void 0,s=o?.source.viewPath??o?.source.path??t.anchor.path;t.anchor.commit&&(n||!o)?(L={path:t.anchor.path,commit:t.anchor.commit},s=t.anchor.path,a={...a,view:{...a.view,mode:`source`,multiple:!1}},M?.close()):o||(L=null,a={...a,view:{...a.view,mode:t.anchor.side===`old`?`working`:`source`,multiple:!1}}),s!==e.props.path&&e.props.onSelect(s),Se=t.id,(!o||s!==e.props.path)&&(D=``),K()}function ft(t,r=!1){if(e.props.comments.ready&&e.props.comments.snapshot.capabilities.create){Ne(),ge=H,B=void 0,he=``;try{let e=M?.state;if(r&&e&&($(e.draft)||e.conflict||e.saving))throw Error(n(`app.client.projectFileReview.saveDraftBeforeComment`));V=Yt(t,r&&e&&t.side!==`deletions`?[{path:e.draft.path,revision:e.draft.baseRevision,contents:e.draft.contents,commit:null}]:ye,r?void 0:J().revision)}catch(e){V=void 0,he=$t(e)}K()}}async function pt(t){if(!V)throw Error(n(`app.client.projectFileReview.selectCodeLinesAgain`));if(M?.state&&$(M.state.draft))throw Error(n(`app.client.projectFileReview.saveDraftBeforeSendingComment`));B=(await e.props.comments.write({anchor:V,body:t})).thread.id,V=void 0,K()}let mt=i((r,i)=>{Oe=r,se=!0;try{j=Bt(t.id,kt);let e=k(`bud:editor-preferences:v1`);N=ze(JSON.parse(typeof e==`string`?e:`null`))}catch(e){p=$t(e)}j&&(M=Wt({signal:i,drafts:j,read:(e,n)=>Q(`${G.filesApi.read.href()}?${new URLSearchParams({path:e})}`,t.token,n,ae),save:(e,n)=>Q(G.fileSavesApi.save.href(),t.token,n,b,fetch,{body:e}),onChange:K,onSaved:()=>{D=``,K()}}),e.props.registerDraftGuard?.(M.guard,i)),F=Kt({signal:i,prepare:(e,n)=>Q(G.fileReviewActionsApi.prepare.href(),t.token,n,h,fetch,{body:e}),apply:(e,n)=>Q(G.fileReviewActionsApi.apply.href(),t.token,n,w,fetch,{body:e}),recoveries:e=>Q(G.fileReviewActionsApi.recoveries.href(),t.token,e,v),guard(e){if(M?.state?.saving)throw Error(n(`app.client.projectFileReview.waitForSaveBeforeReview`));if(e.some(e=>{let t=j?.get(e);return t&&$(t)}))throw Error(n(`app.client.projectFileReview.saveOrDiscardDraftBeforeActions`))},async onApplied(t){t.target===`worktree`&&M?.close(),I&&t.changedPaths.includes(I.path)&&t.target===`index`&&(I=void 0,M?.close()),D=JSON.stringify([q(),J().page,e.props.path]),de=e.props.refresh;let r=nt();for(;;){let t=et;if(await r,e.signal.aborted||et===t||!et)break;r=et}if(p)throw Error(n(`app.client.projectFileReview.writeCompletedRefreshError`,{error:p}))},onChange:K}),window.addEventListener(`beforeunload`,e=>{j?.persist(),j?.dirty.length&&(e.preventDefault(),e.returnValue=``)},{signal:i});try{a=Ue(k(`bud:review:${t.id}:v1`),t.id)}catch{}ht(e.props.href),T=e.props.href;let o=()=>{re=window.document.documentElement.dataset.theme===`dark`?`dark`:`light`,K()},s=new MutationObserver(o);s.observe(window.document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]}),o(),bt({signal:i,renderOptions:{theme:pe,lineDiffType:a.view.highlights}}).then(async e=>{await e.ready,i.aborted||(x=e,S=!0,K())}).catch(()=>{S=!0,K()}),i.addEventListener(`abort`,()=>{ie?.abort(),C?.abort(),s.disconnect(),clearTimeout(oe),x?.dispose(),j?.persist(),Be(`bud:review:${t.id}:v1`,JSON.stringify(a))},{once:!0})});function ht(n){let r=new URL(n);H=e.props.conversation?.id??null,ge=null,H||(L=null,R=null);let i=Re(r,t.id);Qe(r,t.id).foreign&&(i={view:{mode:`source`,multiple:!1}}),i&&(a={...a,view:{...a.view,...i.view}},i.position&&(a=Le(a,Ze(a.view,i.position.selection?.path??e.props.path),i.position))),D=``}return()=>{if(se){(T!==e.props.href||E!==e.props.conversation?.id)&&(T=e.props.href,E=e.props.conversation?.id,ce!==T&&ht(T),ce=void 0);let t=e.props.searchSelection;t&&t.id!==we&&(we=t.id,Ee=t.match,Te=``,e.queueTask(()=>{M?.close(),I=void 0,$e({mode:`source`,multiple:!1}),D=``,K()})),P!==e.props.path&&(P=e.props.path,I=void 0,L?.path!==e.props.path&&(L=null,R=null),e.queueTask(()=>M?.closeOtherPath(e.props.path)));let r=JSON.stringify([q(),J().page,e.props.path]);(r!==D||de!==e.props.refresh)&&(D=r,de=e.props.refresh,e.queueTask(()=>{nt()}));let i=JSON.stringify([e.props.path,a.view.mode===`commits`?a.view.target:e.props.repository?.head]);if(y&&i!==ue&&(ue=i,e.queueTask(()=>{rt()})),x&&A!==a.view.highlights){A=a.view.highlights;let t=x;e.queueTask(()=>{t.pool.setRenderOptions({lineDiffType:a.view.highlights}).catch(t=>{e.signal.aborted||(p=n(`app.client.projectFileReview.updateHighlightingError`,{error:$t(t)}),K())})})}}let i=M?.state,c=e.props.comments;if(B&&c.ready&&!c.snapshot.threads.find(e=>e.id===B)?.messagesLoaded&&!c.loadingThread(B)){let t=B;e.queueTask(()=>{c.loadThread(t)})}let u=JSON.stringify([s?.entry.path,s?.revision,R?.path,R?.commit,R?.file?.revision,d.map(e=>e.revision),i?.key,i?.draft.baseRevision]);if((u!==be||xe!==c.version)&&(be=u,xe=c.version,ye=Jt(s,d,R),U=Xe(c.snapshot.threads,ye)),Ce!==i?.key&&(Ce=i?.key,W=void 0),i&&W&&(U=[...W]),H&&H!==ge&&c.loaded&&!m&&(s||R||l||p)){let t=c.snapshot.threads.find(e=>e.id===H);if(t)ge=H,e.queueTask(()=>dt(t,e.props.conversation?.original??!1));else{z=!0;let t=H;e.queueTask(()=>{c.loadThread(t)})}}if(Se&&!m){let t=U.find(e=>e.thread.id===Se);if(t){Se=null;let n=qt(t);n&&e.queueTask(()=>Y(n,!0))}}let h=z&&c.ready;h!==je&&(je=h,e.queueTask(()=>e.props.onComments?.(h)));let _=j?.dirty.map(e=>e.path)??[];_.join(`\0`)!==ke&&(ke=_.join(`\0`),e.queueTask(()=>e.props.onDrafts?.(_)));let v={threads:c.snapshot.threads,locations:U,version:c.version,selected:B,onShow:()=>{Ne(),K()},onOpen:e=>{let t=c.snapshot.threads.find(t=>t.id===e);t&&dt(t)},onCreate:c.snapshot.capabilities.create?e=>ft(e):void 0,onLocations:e=>{M?.state?.key===i?.key&&(W=e,K())}};return r(`div`,{class:`flex h-full min-h-0 flex-col`,mix:mt,children:[(c.loaded?!c.ready:t.storage.threads?.state!==`ready`)?r(o,{as:`p`,variant:`ui-caption`,tone:`muted`,role:`status`,class:`shrink-0 border-b border-line px-3 py-1.5`,children:n(`app.client.projectFileReview.commentsUnavailable`)}):null,Te?r(o,{as:`p`,variant:`ui-caption`,role:`status`,class:`shrink-0 border-b border-line px-3 py-1.5`,children:Te}):null,M?.openError?r(o,{as:`p`,variant:`ui-caption`,role:`alert`,class:`shrink-0 border-b border-line px-3 py-1.5 text-red-600 dark:text-red-400`,children:M.openError}):null,M?.opening?r(o,{as:`p`,variant:`ui-caption`,role:`status`,class:`sr-only`,children:n(`app.client.projectFileReview.readingFileForEditing`)}):null,i&&M&&I?.path===i.draft.path?r(fe,{chrome:e.props.chrome,file:{name:i.draft.path,contents:i.draft.contents,cacheKey:i.draft.baseRevision},dirty:$(i.draft),saving:i.saving,stale:i.conflict,error:i.error,status:i.status,theme:re,workerPool:x?.pool,onChange:M.change,onSave:()=>{M?.save()},onMarkResolved:()=>{I&&F?.prepare({kind:`mark-resolved`,path:I.path,expectedRevision:i.draft.baseRevision,conflict:I.conflict})},onEdit:()=>{I=void 0,M?.begin(i.draft.path),K()},onClose:()=>{I=void 0,M?.close(),D=``,K()}},`merge:${i.key}`):i&&M?r(Ve,{chrome:e.props.chrome,file:i.file,oldFile:i.oldFile,initialMode:i.mode,sessionKey:i.key,comments:c.ready?{...v,onCreate:c.snapshot.capabilities.create?e=>ft(e,!0):void 0}:void 0,commentRevision:i.draft.baseRevision,baselineLabel:i.baselineLabel,dirty:$(i.draft),saving:i.saving,conflict:i.conflict,reviewingConflict:!!i.latest,status:i.status,error:i.error,storageWarning:j?.warning??``,preferences:N,theme:re,workerPool:x?.pool,onChange:M.change,onSave:()=>{M?.save()},onClose:()=>{M?.close(),D=``,K()},onDiscard:()=>{M?.discard()},onDownload:lt,onCheckLatest:()=>{M?.checkLatest()},onAcceptMerge:M.acceptMerge,onPreferences:ct},i.key):r(ve,{chrome:e.props.chrome,path:e.props.path,repository:e.props.repository,contextKey:q(),view:a.view,position:J(),document:S?s:null,source:S?R:null,comments:c.ready?v:void 0,snapshot:l,diffs:S?d:[],failures:f,loading:m||!S,error:p,history:g,historyOpen:y,historyLoading:ee,historyError:te,theme:re,workerPool:x?.pool,onEdit:t.files.edit&&M&&e.props.path&&!L?st:void 0,onReviewAction:F?e=>{F?.prepare(e)}:void 0,onReviewUndo:F?()=>{F?.recoveries()}:void 0,onResolve:e=>{ut(e)},editLabel:e.props.path&&j?.get(e.props.path)&&$(j.get(e.props.path))?n(`app.client.projectFileReview.resumeDraft`):n(`app.client.projectFileReview.editFile`),onChange:$e,onPosition:Y,onSelect:it,onPage:e=>{Y({...Ie(),page:e},!0)},onRetry:()=>{nt()},onHistory:()=>{y=!y,y?ue=``:C?.abort(),K()},onHistoryPage:e=>{rt(e)},onHistoryRevision:ot,onCopyLink:async t=>{let n=t.selection?.path??e.props.path,r=l?.comparison.mode===`commits`?{...a.view,...l.comparison}:a.view,i=tt(n,r,t);await navigator.clipboard.writeText(new URL(i,window.location.origin).href)}}),z&&c.ready?r(me,{threads:c.snapshot.threads.filter(He),renderThreadLinks:e=>r(at,{part:`links`,project:t,thread:e,canLink:c.snapshot.capabilities.link,busy:c.busy,onChange:async()=>{await c.load(),await c.loadThread(e.id,!0)}}),renderThreadActions:e=>r(at,{part:`action`,project:t,thread:e,canLink:c.snapshot.capabilities.link,busy:c.busy,onChange:async()=>{await c.load(),await c.loadThread(e.id,!0)}}),capabilities:c.snapshot.capabilities,selected:B,currentPath:e.props.path,locations:U,draft:V,loaded:c.loaded,busy:c.busy,now:c.now,error:he||c.error,onSelect:e=>dt(e),onCloseThread:()=>{B=void 0,K()},onClose:Pe,onWrite:c.write,onCreate:pt,onCancelDraft:()=>{V=void 0,K()},onReload:()=>{c.load()},onSync:c.snapshot.capabilities.sync?()=>{c.sync().catch(()=>{})}:void 0,onOriginal:e=>dt(e,!0),onCopyLink:e=>navigator.clipboard.writeText(new URL(qe(e.id),window.location.origin).href)}):null,F?.state?r(_e,{state:F.state,theme:re,onApply:()=>{F?.apply()},onClose:F.close,onUndo:e=>{F?.prepare({kind:`undo`,recoveryId:e})},onRecoveries:()=>{F?.recoveries()}}):null]})}}function tn(e){return e instanceof Error?e.message:n(`app.client.projectFiles.couldNotLoadProjectFiles`)}function nn(e,t,n){let r=new URLSearchParams({includeIgnored:String(t.includeIgnored),includeDotfiles:`true`});return Promise.all([Q(`${G.filesApi.index.href()}?${r}`,e,n,se),Q(G.fileReviewApi.repository.href(),e,n,te)])}async function rn(e,t,n){let r;try{r=A(k(`bud:files:${e.id}:v1`),e.id)}catch{r=$e(e.id)}let i=Qe(n,e.id);i.explicit&&(r=j(r,i.path));let a=await Ke(e),o=J(a);if(o&&o.includeIgnored===r.includeIgnored){let{index:e,repository:t}=o;return r=W(r,null,e,t),{view:r,index:e,repository:t,error:``,store:a,stored:!0}}try{let[n,i]=await nn(e.token,r,t);return await Pe(a,n,i,r.includeIgnored),{view:W(r,null,n,i),index:n,repository:i,error:``,store:a,stored:!1}}catch(e){return t.throwIfAborted(),{view:r,index:null,repository:null,error:tn(e),store:a,stored:!1}}}function an(e){let t=e.props.project,{view:a,index:o,repository:s,error:c,store:l}=e.props.initial,u=()=>{let e=J(l);if(!e||e.includeIgnored!==a.includeIgnored)return;let t=a.selected,n=a.selected!==null&&f(a.selected);a=W(a,n?null:o,e.index,e.repository),o=e.index,s=e.repository,t!==a.selected&&I(!0),N()};function f(e){try{return Bt(t.id,kt).dirty.some(t=>t.path===e)}catch{return!1}}let p=[l.listings.subscribeChanges(u),l.files.subscribeChanges(u),l.repositories.subscribeChanges(u)],h=!1,_=e.props.href,v,b=!1,te=``,ne,x,S,ie=!1,ae=!1,C=!1,se=!1,w=!1,T=0,E=!1,ce=0,D,O=[],le=!1,k=Zt({signal:e.signal,onChange:N,request:(e,n)=>Q(`${G.fileSearchApi.search.href()}?${Xt(e)}`,t.token,n,oe)});function ue(){k.cancel(``),E=!1,N()}let de=St(),A=it({store:Ke(t),token:t.token,signal:e.signal,onChange:N}),fe,pe={},M=Et({signal:e.signal,index:()=>o,guards:de,onChange(){M.state?.phase===`applying`&&(ne?.abort(),se=!0),N()},transport:{prepare:(e,n)=>Q(G.fileMutationsApi.prepare.href(),t.token,n,ee,fetch,{body:e}),apply:(e,n)=>Q(G.fileMutationsApi.apply.href(),t.token,n,d,fetch,{body:{id:e.id,revision:e.revision}}),recoveries:e=>Q(G.fileMutationsApi.recoveries.href(),t.token,e,m)},async onApplied(e,t){a=nt(a,e.kind,t);let r=t.items.filter(e=>e.status===`applied`).length;r?y.success(n(`app.client.projectFiles.fileActionsCompleted`,{count:r}),{description:t.recoveryId?n(`app.client.projectFiles.originalContentsAvailableInRecovery`):void 0}):y.error(n(`app.client.projectFiles.fileActionCouldNotBeApplied`),{description:n(`app.client.projectFiles.projectWasRefreshed`)}),I(!0),P(),w=!0,await z(!0),se=!1},async onUncertain(){w=!0,await z(!0),se=!1}});function N(){e.signal.aborted||e.update()}function P(){clearTimeout(x),x=setTimeout(()=>Be(`bud:files:${t.id}:v1`,JSON.stringify(a)),200)}function I(n){let r=Se(null),i=K(window.location.href)===e.props.conversation?.id;if(!e.props.active||!i&&window.location.pathname!==r&&!window.location.pathname.startsWith(`${r}/`)){b=!0;return}if(b=!1,i&&n)return;let o=Re(i?e.props.href:window.location.href,t.id),s=o?.view.mode&&o.view.mode!==`source`?tt(a.selected,{...Ge(),...o.view}):Se(a.selected);window.location.pathname+window.location.search+window.location.hash!==s&&(v=new URL(s,window.location.origin).href,window.history[n?`replaceState`:`pushState`]({...window.history.state,budFile:a.selected},``,s))}function L(e){let t={...a,...e},n=t.includeIgnored!==a.includeIgnored;a=t,P(),N(),n&&B()}function me(e,t){let n=a.selected;a=j(a,e,t),te=``,P(),n!==e&&I(!1),N()}function R(e){if(O.includes(e)){me(e,[e]),y(n(`app.client.projectFiles.saveOrDiscardDraftToCloseTab`)),N();return}let t=a.selected;a=Ne(a,e),P(),t!==a.selected&&I(!1),N()}async function z(n=!1){if(!n&&M.state?.phase===`applying`||ae){C=!0;return}ae=!0,h=!0,c=``;let r=new AbortController;ne=r;let i=AbortSignal.any([e.signal,r.signal]);N();try{let[e,n]=await nn(t.token,a,i);if(i.aborted)return;let r=a.selected;a=W(a,o,e,n),o=e,s=n,await Pe(l,e,n,a.includeIgnored),P(),r!==a.selected&&I(!0),w&&T++,w=!1}catch(e){i.aborted||(c=tn(e))}finally{r.abort(),ae=!1,h=!1,N(),C&&!e.signal.aborted&&(C=!1,B())}}function B(){clearTimeout(S),S=setTimeout(()=>{z()},100)}async function he(){if(h)return;let n=new AbortController;try{await Q(G.filesApi.refresh.href(),t.token,AbortSignal.any([e.signal,n.signal]),re),w=!0,await z()}catch(t){e.signal.aborted||(c=tn(t),N())}finally{n.abort()}}let ge=i((n,r)=>{if(ie)return;ie=!0;let i=Qe(e.props.href,t.id);_e(i.foreign),!i.foreign&&(i.explicit?i.path!==a.selected:!a.selected)&&I(!0),P();let o=et(t.token).subscribe(`files`,{onEvent(e){let t=g(e);if(w=!0,se)C=!0;else{if(t.change.reset||ae||a.includeIgnored)return B();je(l,t).then(()=>{T++,w=!1,N()})}},onResync(){w=!0,B()}});e.props.initial.stored&&B(),A.load(),r.addEventListener(`abort`,()=>{o();for(let e of p)e.unsubscribe();ne?.abort(),clearTimeout(x),clearTimeout(S),Be(`bud:files:${t.id}:v1`,JSON.stringify(a))},{once:!0})});function _e(e){te=e?n(`app.client.projectFiles.fileLinkBelongsToAnotherProject`):``}return()=>{if(_!==e.props.href){if(_=e.props.href,v!==_){b=!1;let e=Qe(_,t.id);e.explicit&&(a=j(a,e.path)),_e(e.foreign)}v=void 0}return b&&e.props.active&&e.queueTask(()=>I(!0)),fe!==A.version&&(fe=A.version,pe=Me(A.snapshot.threads)),r(`div`,{class:`relative h-full min-h-0 ${le?`md:pe-80`:``}`,mix:ge,children:[r(F,{projectName:t.name,view:a,index:o,repository:s,loading:h,error:c,notice:te,commentCounts:pe,dirty:O,onViewChange:L,onSelect:me,onCloseTab:R,onSearch:()=>{E=!0,N()},onRefresh:()=>{he()},mutations:t.files.edit?{busy:M.busy,open:e=>M.open(e),move:(e,t)=>M.open({action:t===`rename`?`rename`:`move`,paths:e.map(e=>e.path),entries:e},!0),recoveries:()=>M.recoveries()}:void 0,sidebar:E?r(Te,{...k.state,onSearch:e=>{k.search(e)},onCancel:()=>k.cancel(),onClose:ue,onSelect:e=>{D={id:++ce,match:e},me(e.path,[e.path]),window.matchMedia(`(min-width: 768px)`).matches||ue()}}):void 0,content:n=>r(en,{project:t,href:e.props.href,path:a.selected,repository:s,refresh:T,store:l,chrome:n,onSelect:e=>me(e,[e]),onComments:e=>{le=e,N()},onDrafts:e=>{e.join(`\0`)!==O.join(`\0`)&&(O=e,N())},registerDraftGuard:de.register,comments:A,conversation:e.props.conversation,searchSelection:D})}),M.state?r(H,{state:M.state,onDestination:M.destination,onSubmit:()=>{M.submit()},onClose:M.close,onRecovery:M.recoveries}):null,M.recovery.open?r(V,{recoveries:M.recovery.recoveries,loading:M.recovery.loading,error:M.recovery.error,onClose:M.closeRecoveries,onRefresh:()=>{M.refreshRecoveries()},onRestore:(e,t)=>M.open({action:`restore`,recoveryId:e,paths:t})}):null]})}}var on=s({routes:S,load:({project:e,signal:t,url:n})=>rn(e,t,n),render:(e,{project:t,url:n,active:i,conversation:a})=>r(an,{project:t,initial:e,href:n.href,active:i,conversation:a})});export{on as default};
|