@bud.sh/app 0.4.0 → 0.5.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.
Files changed (74) hide show
  1. package/dist/client/assets/bud/design.js +1 -1
  2. package/dist/client/assets/{canvas-C8hyPWoT.js → canvas-Cu6R6xxT.js} +1 -1
  3. package/dist/client/assets/difference-worker-jfTSn-Tw.js +8 -0
  4. package/dist/client/assets/{edit-B050x0rV.js → edit-DUotSxjS.js} +12 -12
  5. package/dist/client/assets/files-js6ElfkU.js +1 -0
  6. package/dist/client/assets/i18n-DxqFr2mi.js +1 -0
  7. package/dist/client/assets/index-CFFxP0gS.css +2 -0
  8. package/dist/client/assets/{index-Dpxjiok1.js → index-ChANGtl-.js} +2 -2
  9. package/dist/client/assets/lru-DzKYIXMA.js +1 -0
  10. package/dist/client/assets/pages-6_lhiQmz.js +1 -0
  11. package/dist/client/assets/{project-branches-DzXdaT9L.js → project-branches-DO897zM6.js} +1 -1
  12. package/dist/client/assets/project-comments-DFFKVpia.js +1 -0
  13. package/dist/client/assets/project-thread-links-NLFWQRD2.js +1 -0
  14. package/dist/client/assets/{project-threads-CHGG-6fo.js → project-threads-Lay351p4.js} +105 -105
  15. package/dist/client/assets/{project-work-L5fYMSOu.js → project-work-du0Y-L5Y.js} +1 -1
  16. package/dist/client/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  17. package/dist/client/assets/task-design-Avb2RO4w.js +23 -0
  18. package/dist/client/assets/tasks-CA-E8bbK.js +1 -0
  19. package/dist/client/assets/{tasks-request-DGigNdyK.js → tasks-request-C55IeuiP.js} +1 -1
  20. package/dist/client/assets/workspace-Cw5HvX5d.js +2 -0
  21. package/dist/client/index.html +3 -3
  22. package/dist/hosted/assets/{canvas-MWtOwaWm.js → canvas-V36732ER.js} +6 -4
  23. package/dist/hosted/assets/{comment-data-DsgJWq4n.js → comment-data-CF2ZV_3k.js} +4162 -3659
  24. package/dist/hosted/assets/{files-Wvo11G2A.js → files-DjSCjfU7.js} +5 -3
  25. package/dist/hosted/assets/{pages-BAmRFVtU.js → pages-BzjzeuPu.js} +3 -3
  26. package/dist/hosted/assets/{project-branches-BNloVosX.js → project-branches-BT97J9i7.js} +1 -1
  27. package/dist/hosted/assets/{project-thread-links-BmY8HQXt.js → project-thread-links-BRLgByEe.js} +2 -2
  28. package/dist/hosted/assets/{screen-QmqmI2Aq.js → screen-CKp2C7kx.js} +68 -137
  29. package/dist/hosted/assets/{tasks-C8iWPrWg.js → tasks-Dj7AyBJB.js} +12 -5
  30. package/dist/hosted/assets/{tasks-request-C89fN1dK.js → tasks-request-DZob623r.js} +1 -1
  31. package/dist/hosted/hosted.js +174 -18
  32. package/dist/node/assets/{src-BdvZ2mYc.js → src-CerrKjID.js} +57 -1
  33. package/dist/node/design.js +969 -809
  34. package/dist/node/server.js +25 -3
  35. package/dist/node-host/assets/{canvas-D_F8SIlm.js → canvas-TRUfxfL5.js} +6 -4
  36. package/dist/node-host/assets/{comment-data-q_8INiZz.js → comment-data-DyIZNpfG.js} +4143 -3640
  37. package/dist/node-host/assets/{files-xazOrNCX.js → files-Dh2TiQZq.js} +5 -3
  38. package/dist/node-host/assets/{pages-D6VkmdfQ.js → pages-BxpjbYhs.js} +3 -3
  39. package/dist/node-host/assets/{project-branches-C26hwmo3.js → project-branches-B7HUGiVK.js} +1 -1
  40. package/dist/node-host/assets/{project-thread-links-BOzjws5W.js → project-thread-links-CauJF0Cz.js} +2 -2
  41. package/dist/node-host/assets/{screen-Dog-YByu.js → screen-CZXWJEds.js} +68 -137
  42. package/dist/node-host/assets/{tasks-A1_bpb3_.js → tasks-Bs1IOpeU.js} +12 -5
  43. package/dist/node-host/assets/{tasks-request-Bie1PpQP.js → tasks-request-ZWmbc8fE.js} +1 -1
  44. package/dist/node-host/node-host.js +174 -18
  45. package/dist/server/assets/{canvas-Dn4RYoU2.js → canvas-Dc1mYCwQ.js} +7 -5
  46. package/dist/server/assets/{comment-data-B0OLHBGp.js → comment-data-CsjukwAW.js} +3911 -3619
  47. package/dist/server/assets/{events-6z5v7Uca.js → events-iHpLGr3k.js} +213 -2
  48. package/dist/server/assets/{files-C5Vilfe4.js → files-E9mSFeoc.js} +6 -4
  49. package/dist/server/assets/{listener-o1STuLju.js → listener-DN5TyOjJ.js} +45 -11
  50. package/dist/server/assets/{pages-BNa0MHEc.js → pages-BBBXyJWV.js} +4 -4
  51. package/dist/server/assets/{project-branches-GtQYyOH5.js → project-branches-B0YIK6Ur.js} +2 -2
  52. package/dist/server/assets/{project-thread-links-Nfz9NIny.js → project-thread-links-CBOpf6zk.js} +3 -3
  53. package/dist/server/assets/{project-work-Cy_BpHwR.js → project-work-qSKFO5yj.js} +3 -3
  54. package/dist/server/assets/{screen-BtcJmZwj.js → screen-BIQA2mr4.js} +69 -138
  55. package/dist/server/assets/{server-CYvuOSBA.js → server-DxK-UB_Z.js} +30 -4
  56. package/dist/server/assets/{services-DK4fqrlF.js → services-BRrgXYlT.js} +105 -9
  57. package/dist/server/assets/{tasks-B82tHwyQ.js → tasks-CiXodsLN.js} +14 -7
  58. package/dist/server/assets/{tasks-request-BtJBlkxV.js → tasks-request-DhwCzpRi.js} +2 -2
  59. package/dist/server/migration.js +3 -3
  60. package/dist/server/runtime.js +3 -3
  61. package/dist/server/server.js +2 -2
  62. package/dist/types/server.d.ts +11 -1
  63. package/package.json +1 -1
  64. package/dist/client/assets/difference-worker-BfF4_N3e.js +0 -8
  65. package/dist/client/assets/files-D_Tm7gCK.js +0 -1
  66. package/dist/client/assets/i18n-BtfXum8P.js +0 -1
  67. package/dist/client/assets/index-CjhJtepP.css +0 -2
  68. package/dist/client/assets/lru-BkhKJhvt.js +0 -1
  69. package/dist/client/assets/pages-B-_CKvDS.js +0 -1
  70. package/dist/client/assets/project-comments-CQkB2jbE.js +0 -1
  71. package/dist/client/assets/project-thread-links-BN7zL0AX.js +0 -1
  72. package/dist/client/assets/task-design-DYqcqq1b.js +0 -23
  73. package/dist/client/assets/tasks-A2FKo3_h.js +0 -1
  74. package/dist/client/assets/workspace-CvWmU2RK.js +0 -2
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{r as t}from"./i18n-DxqFr2mi.js";import{t as n}from"./jsx-B4XNFIzB.js";import{n as r}from"./attrs-mixin-CmlG_FtV.js";import{t as i}from"./preload-helper-BLdHbfdN.js";import{l as a}from"./loader-Q6-HPKft.js";import{t as o}from"./screen-Dfvzj6n2.js";import{$t as s,Gt as c,Ht as l,Jt as u,Kt as d,Qt as f,Sn as p,Xt as m,Yt as h,Zt as g,an as _,bn as v,f as y,ln as ee,mn as te,nn as ne,on as re,pn as b,rn as ie,sn as x,tn as ae,un as oe,xn as S,yn as se,yt as C}from"./task-design-Avb2RO4w.js";import{B as w,C as T,S as E,x as ce}from"./cloneFileDiffMetadata-CWfw01dG.js";import{$t as D,A as le,At as ue,B as O,Bt as de,Ct as fe,D as pe,Et as me,F as he,Ft as k,Gt as A,Ht as j,I as ge,It as M,Jt as N,K as _e,Kt as P,L as F,Lt as I,M as L,Mt as R,N as ve,Nt as z,O as ye,P as be,Pt as B,Qt as xe,R as V,Rt as Se,St as Ce,Tt as H,Ut as we,Vt as Te,W as Ee,Wt as U,Xt as De,Yt as Oe,Zt as ke,_t as Ae,a as je,at as Me,b as W,bt as Ne,c as Pe,d as Fe,dt as Ie,en as G,f as K,ft as Le,gt as Re,ht as ze,j as Be,jt as Ve,k as He,lt as Ue,mt as We,nn as q,pt as Ge,qt as Ke,s as qe,st as Je,tn as Ye,u as Xe,ut as Ze,vt as Qe,wt as $e,xt as et,y as tt,yt as nt,z as J,zt as rt}from"./project-threads-Lay351p4.js";import{t as it}from"./lru-DzKYIXMA.js";import{t as at}from"./project-comments-DFFKVpia.js";import{t as ot}from"./project-thread-links-NLFWQRD2.js";function st(e){let t=[];for(let n of e){let e=q.get(n);if(e==null)throw Error(`getResolvedLanguages: ${n} is not resolved. Please resolve languages before calling getResolvedLanguages`);t.push(e)}return t}function ct(e){for(let t of Array.isArray(e)?e:[e])if(!q.has(t))return!1;return!0}async function lt(e){let t=[],n=[];for(let r of e){if(r===`text`||r===`ansi`)continue;let e=D(r)??G(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 ut(e){return ke.getResolvedThemes(e)}async function dt(e){for(let t of e)N(t);let t=await ke.resolveThemes(e);for(let n=0;n<e.length;n++)Oe(e[n],t[n]);return t}var ft=e(it(),1),pt=Symbol(`IGNORE_RESPONSE`),mt=1e4,ht=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=w,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 ft.default.LRUMap(e.totalASTLRUCacheSize??100),this.diffCache=new ft.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??w,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()||B(a,this.renderOptions))return;let o=xe(e),c=[];if(P(a.theme,this.renderOptions.theme)||(c=A(o)?ut(o):await dt(o)),!s())return;if(this.highlighter!=null)De(c,this.highlighter);else{let e=await Ke({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 Se||!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);Y(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=xe(this.renderOptions.theme),i=[];if(i=A(r)?ut(r):await dt(r),!this.isCurrentLifecycle(t)){n();return}let a=[];if(a=ct(e)?st(e):await lt(e),!this.isCurrentLifecycle(t)){n();return}let[o]=await Promise.all([Ke({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 Se||!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,yt(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=E(),i=r>0?ce():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??mt,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=bt(t);n!=null&&Te(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=_t(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);j(t)||n!=null&&U(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||j(e)||t!=null&&U(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 we(e,this.highlighter,this.renderOptions,{forcePlainText:!0,startingLine:t,totalLines:n,lines:r})}highlightDiffAST(e,t){let n=this.getDiffResultCache(t);R(t)||n!=null&&B(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||R(e)||t!=null&&B(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:z(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 Se;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 Se;for(let t of this.activeTaskById.values())`reject`in t?t.reject(e):Y(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=>!Ye(e));r.length>0&&Ke({themes:xe(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&&(ct(i)?t.request.resolvedLanguages=st(i):t.request.resolvedLanguages=await lt(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,yt(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 pt;if(t.type===`error`){let e=Error(t.error);if(t.stack&&(e.stack=t.stack),`reject`in n)n.reject(e);else if(Y(n))this.notifyHighlightError(n,e),this.rejectRenderTaskCallbacks(n,e);else throw Error(`handleWorkerMessage: unknown task type`);throw e}if(Y(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)||!U(i,this.getFileRenderOptions()))throw pt;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)||!B(i,this.getDiffRenderOptions()))throw pt;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!==pt&&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,Y(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&&(Y(t)&&(this.rejectRenderTaskCallbacks(t,new I),this.clearInstanceRequests(t),this.clearHighlightKey(t)),this.activeTaskById.delete(t.id))}executeTask(e,t){gt(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),Y(t)?(this.notifyHighlightError(t,n),this.rejectRenderTaskCallbacks(t,yt(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=E();e.customExtensionsVersion>=n||(t.customExtensionsVersion=n,t.customExtensionMap=ce())}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 vt(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 I),this.clearQueuedInstanceRequests(e),this.clearHighlightKey(e)}removeActiveTask(e){this.rejectRenderTaskCallbacks(e,new I),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()))Y(e)&&e.renderOptionsVersion!==this.renderOptionsVersion&&this.removeActiveTask(e)}clearQueuedInstanceRequests(e){for(let t of vt(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 vt(e))this.activeRequestByInstance.set(t,e.id)}clearInstanceRequests(e){for(let t of vt(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 vt(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)&&k(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)&&M(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())Y(e)&&(yield e)}generateRequestId(){return`req_${++this.nextRequestId}`}};function gt(e){return e.type===`initialize`||e.type===`file`||e.type===`diff`}function _t(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??T(e.request.file.name));break;case`diff`:t.add(e.request.diff.lang??T(e.request.diff.name)),t.add(e.request.diff.lang??T(e.request.diff.prevName??`-`))}return t.delete(`text`),Array.from(t)}function Y(e){return e?.type===`file`||e?.type===`diff`}function vt(e){return e.instances}function yt(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 bt(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 xt(e={}){let{signal:t,renderOptions:n,...r}=e;t?.throwIfAborted();let a=e.workerFactory??(await i(async()=>{let{createCodeWorker:e}=await import(`./worker-factory-CAZ4aPuv.js`);return{createCodeWorker:e}},[])).createCodeWorker;t?.throwIfAborted();let o=new ht({poolSize:2,...r,workerFactory:a},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 St=new Set([W.filesApi,W.fileSearchApi,W.fileReviewApi,W.fileMutationsApi,W.fileSavesApi,W.fileReviewActionsApi].flatMap(e=>Object.values(e).map(e=>e.href()))),X=class extends Error{code;status;constructor(e,t=`request`,n=0){super(e),this.name=`FilesRequestError`,this.code=t,this.status=n}};async function Z(e,n,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||!St.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 X(t(`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":n,...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 X(t(`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 X(t(`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 X(t(`app.client.filesRequest.invalidData`),`response`,l.status)}if(!l.ok)throw new X(g&&typeof g==`object`&&`error`in g&&typeof g.error==`string`?g.error.slice(0,1e3):t(`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 X(t(`app.client.filesRequest.unexpectedData`),`response`,l.status)}}function Ct(){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 wt(e){return e instanceof Error?e.message:t(`app.client.fileMutationController.actionCouldNotBeCompleted`)}function Tt(e,n){if(e.kind!==n.kind)throw Error(t(`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=n.items.map(e=>[e.source,e.destination]);if(JSON.stringify(r)!==JSON.stringify(i))throw Error(t(`app.client.fileMutationController.differentFilePaths`))}function Et(e,n){if(n.id!==e.id||n.items.length!==e.items.length||n.items.some((t,n)=>t.source!==e.items[n].source||t.destination!==e.items[n].destination))throw Error(t(`app.client.fileMutationController.resultDoesNotMatchPlan`))}function Dt(e){let n=null,r=!1,i=null,a=!1,o=``,s,c,l=null,u=0;function d(){e.signal.aborted||e.onChange()}function f(){return n?.phase===`preparing`||n?.phase===`applying`}function p(){n?.phase!==`applying`&&(s?.abort(),u++,n=null,l=null,d())}async function m(t,r){if(!n||n.phase===`applying`)return;s?.abort();let i=new AbortController;s=i;let a=AbortSignal.any([e.signal,i.signal]),o=++u;l=t,n={...n,phase:`preparing`,plan:null,result:null,error:``},d();try{let i=await e.transport.prepare(t,a);if(a.throwIfAborted(),Tt(t,i),o!==u||!n)return;n={...n,plan:i,phase:`confirming`},d(),r&&await h()}catch(e){!a.aborted&&o===u&&n&&(n={...n,phase:`editing`,error:wt(e)},d())}}async function h(){if(!n?.plan||!l||f())return;let r=l,i=n.plan;if(Date.parse(i.expiresAt)<=Date.now()){n={...n,phase:`editing`,plan:null,error:t(`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;n={...n,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(),Et(i,a),c!==u||!n)return;n={...n,phase:`result`,result:a};let s=``;try{await e.guards.afterApply(r,a)}catch(e){s=t(`app.client.fileMutationController.draftMetadataCouldNotBeUpdated`,{error:wt(e)})}if(await e.onApplied(r,a),c!==u||!n)return;n={...n,error:s},a.status===`applied`&&!s&&![`delete`,`restore`].includes(r.kind)&&(n=null,l=null),d()}catch(r){if(o.aborted||c!==u||!n)return;n={...n,phase:`editing`,plan:null,error:wt(r)},p&&(await e.onUncertain().catch(()=>{}),n&&c===u&&(n={...n,error:t(`app.client.fileMutationController.refreshAndCheckRecovery`,{error:wt(r)})})),d()}}function g(t,i=!1){if(f())return;s?.abort(),c?.abort(),u++,r=!1,l=null;let a=``,o=``;try{a=F(t,e.index())}catch(e){o=wt(e)}n={request:t,destination:a,phase:`editing`,plan:null,result:null,error:o},d(),!o&&(t.action===`delete`||t.action===`restore`||i)&&_()}async function _(){if(n&&!f()){if(n.phase===`confirming`)await h();else try{let t=n.result&&l?O(l,n.result):V(n.request,n.destination,e.index());if(!t)return;await m(t,![`delete`,`restore`].includes(t.kind))}catch(e){n&&={...n,error:wt(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=wt(e))}finally{c===t&&(a=!1,d())}}return e.signal.addEventListener(`abort`,()=>{s?.abort(),c?.abort()},{once:!0}),{get state(){return n},get busy(){return f()},get recovery(){return{open:r,recoveries:i,loading:a,error:o}},open:g,close:p,submit:_,destination(e){n&&!f()&&(l=null,n={...n,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 Ot(e){return new URLSearchParams(e.mode===`commits`?{mode:e.mode,base:e.base,target:e.target}:{mode:e.mode})}async function kt(e,n,r,i,a=fetch){if(n.length>20||n.some(t=>!e.entries.some(e=>e.path===t)))throw new X(t(`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 p(){try{for(;c<n.length;){d.throwIfAborted();let i=n[c++],u=Ot(e.comparison);u.set(`path`,i),u.set(`expectedRevision`,e.revision);try{let n=await Z(`${W.fileReviewApi.diff.href()}?${u}`,r,d,_,a);if(n.entry.path!==i||n.metadataRevision!==e.revision||JSON.stringify(n.comparison)!==JSON.stringify(e.comparison))throw new X(t(`app.client.projectFileReviewData.comparisonChanged`),`changed`,409);let c=[n.oldFile,n.newFile,n.conflict?.base,n.conflict?.ours,n.conflict?.theirs].reduce((e,t)=>e+(t?.contents?.length??0)*2,0);l+c>33554432?s[i]=t(`app.client.projectFileReviewData.memoryLimit`):(l+=c,o.set(i,n))}catch(e){if(d.aborted||e instanceof X&&(e.status===409||e.status===401||e.status===403))throw e;s[i]=e instanceof Error?e.message:t(`app.client.projectFileReviewData.couldNotReadComparison`)}}}catch(e){f??=e,u.abort(e)}}if(await Promise.all(Array.from({length:Math.min(3,n.length)},p)),f)throw f;return i.throwIfAborted(),{diffs:n.flatMap(e=>o.get(e)??[]),failures:s}}var At={getItem:e=>{let t=ue(e);return typeof t==`string`?t:null},setItem:(e,t)=>Ve(e,t)},jt=16,Mt=jt*s*2,Nt=3145728,Pt=new TextEncoder;function Q(e){return e.contents!==e.baseContents}function Ft(e){return Pt.encode(e.contents).length+Pt.encode(e.baseContents).length}function It(e,t){return e===t||e.startsWith(`${t}/`)}function Lt(e,n){if(!e)return[];if(e.length>Nt)throw Error(t(`app.client.fileDrafts.recordExceedsLimit`));let r=JSON.parse(e);if(!r||typeof r!=`object`||Array.isArray(r))throw Error(t(`app.client.fileDrafts.invalidRecord`));let i=r;if(i.version!==1||i.projectId!==n||!Array.isArray(i.drafts)||i.drafts.length>jt||Object.keys(i).some(e=>![`version`,`projectId`,`drafts`].includes(e)))throw Error(t(`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(t(`app.client.fileDrafts.invalidDraft`));let n=e;if(Object.keys(n).some(e=>![`id`,`path`,`baseRevision`,`baseContents`,`contents`,`updatedAt`].includes(e))||typeof n.id!=`string`||!/^[a-zA-Z0-9-]{1,80}$/.test(n.id)||!Number.isSafeInteger(n.updatedAt)||Number(n.updatedAt)<0)throw Error(t(`app.client.fileDrafts.invalidDraft`));g({path:n.path,expectedRevision:n.baseRevision,contents:n.baseContents}),g({path:n.path,expectedRevision:n.baseRevision,contents:n.contents});let r=n;if(a.has(r.path))throw Error(t(`app.client.fileDrafts.duplicateDraftPath`));if(a.add(r.path),o+=Ft(r),o>Mt)throw Error(t(`app.client.fileDrafts.draftsExceedMemoryLimit`));return{...r}})}function Rt(e,n,r=Date.now){let i=new Map,a=``,o=`bud:drafts:${e}:v1`;try{for(let t of Lt(n?.getItem(o)??null,e))i.set(t.path,t)}catch{a=t(`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(Q)});try{if(!n||r.length>Nt)throw Error(`Storage unavailable`);return n.setItem(o,r),a=``,!0}catch{return a=t(`app.client.fileDrafts.tabOnlyWarning`),!1}}function l(e){if(Pt.encode(e.contents).length>2097152||!e.contents.isWellFormed()||e.contents.includes(`\0`))throw Error(t(`app.client.fileDrafts.unsupportedDraftText`));let n=[...i.values()].filter(t=>t.path!==e.path&&!Q(t));for(let e of n)i.delete(e.path);let r=[...i.values()].filter(t=>t.path!==e.path);if(r.length>=jt||r.reduce((e,t)=>e+Ft(t),Ft(e))>Mt)throw Error(t(`app.client.fileDrafts.draftLimitReached`));return i.set(e.path,e),c(),e}return{get warning(){return a},get dirty(){return[...i.values()].filter(Q)},get(e){return i.get(e)},open(e,t,n){let a=i.get(e);return a&&Q(a)?a:(g({path:e,expectedRevision:t,contents:n}),l({id:crypto.randomUUID(),path:e,baseRevision:t,baseContents:n,contents:n,updatedAt:r()}))},change(e,n){let a=i.get(e);if(!a)throw Error(t(`app.client.fileDrafts.draftNoLongerOpen`));return l({...a,contents:n,updatedAt:r()})},acknowledge(e,t,n){let a=i.get(e);if(a)return l({...a,baseRevision:n,baseContents:t,updatedAt:r()})},rebase(e,n,a){let o=i.get(e);if(!o)throw Error(t(`app.client.fileDrafts.draftNoLongerOpen`));return l({...o,id:crypto.randomUUID(),baseRevision:n,baseContents:a,updatedAt:r()})},discard(e){i.delete(e),c()},persist:c,beforeMutation(e,n){let r=[...i.values()].filter(Q);if(e.kind===`delete`&&r.some(t=>e.paths.some(e=>It(t.path,e))))return t(`app.client.fileDrafts.deleteWithUnsavedDrafts`);if(e.kind===`restore`&&r.some(e=>n.items.some(t=>t.destination&&It(e.path,t.destination))))return t(`app.client.fileDrafts.restoreWithUnsavedDrafts`);if(e.kind===`move`){if(r.some(t=>e.entries.some(e=>It(t.path,e.destination)&&!It(t.path,e.path))))return t(`app.client.fileDrafts.destinationHasDraft`);if(r.some(t=>e.entries.some(e=>It(t.path,e.path)))&&!c())return t(`app.client.fileDrafts.storageUnavailableForMove`)}return null},afterMutation(e,n){if(e.kind!==`move`)return;let r=n.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=>It(e.path,t.source));if(!t)continue;let n=p(t.destination+e.path.slice(t.source.length));a.push({draft:e,path:n}),o.delete(e.path)}for(let{draft:e,path:n}of a){let r=o.get(n);if(r&&Q(r))throw Error(t(`app.client.fileDrafts.destinationDraftConflict`));o.set(n,{...e,id:crypto.randomUUID(),path:n})}i=o,c()}}}var $=new Map,zt=!1;function Bt(e,n){zt||(zt=!0,window.addEventListener(`beforeunload`,e=>{if([...$.values()].some(e=>e.dirty.length)){for(let e of $.values())e.persist();e.preventDefault(),e.returnValue=``}}));let r=$.get(e);if(r)return r;for(let[e,t]of $)t.dirty.length||$.delete(e);if($.size>=4)throw Error(t(`app.client.fileDrafts.projectDraftLimitReached`));let i=Rt(e,n);return $.set(e,i),i}function Vt(e){return e instanceof Error?e.message:t(`app.client.fileEditorController.saveFailed`)}function Ht(e,n){if(e.entry.path!==n)throw Error(t(`app.client.fileEditorController.wrongFileResponse`));if(e.contents===null||!e.revision)throw Error(t(`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 n=null,r=!1,i=null,a=``,o,s=new Set,c=0;function l(){e.signal.aborted||e.onChange()}function u(){o?.abort(),c++,n=null,i=null,r=!1,a=``,e.drafts.persist(),l()}function d(e){i!==e&&u()}function f(e){!n||n.draft.path!==e.entry.path||n.saving||n.latest||e.revision!==n.draft.baseRevision&&(n={...n,conflict:!0,error:t(`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;n={key:`${a.id}:${h}`,draft:a,file:{name:u,contents:a.contents},oldFile:c?f.file:{name:u,contents:a.baseContents},mode:d,baselineLabel:t(c?`app.client.fileEditorController.index`:`app.client.fileEditorController.openedVersion`),saving:s.has(u),conflict:o,latest:null,error:o?t(`app.client.fileEditorController.recoveredDraftOldVersion`):``,status:Q(a)?t(`app.client.fileEditorController.recoveredUnsavedDraft`):``}}catch(r){if(!m.aborted){let i=e.drafts.get(u);i&&Q(i)?n={key:`${i.id}:recovery:${h}`,draft:i,file:{name:u,contents:i.contents},oldFile:{name:u,contents:i.baseContents},mode:`file`,baselineLabel:t(`app.client.fileEditorController.openedVersion`),saving:s.has(u),conflict:!0,latest:null,error:t(`app.client.fileEditorController.projectFileUnreadable`,{detail:Vt(r)}),status:t(`app.client.fileEditorController.unsavedDraftAvailable`)}:a=Vt(r)}}finally{h===c&&(r=!1,l())}}function m(t){if(n){try{let r=e.drafts.change(n.draft.path,t);n={...n,draft:r,status:``,error:n.conflict?n.error:``}}catch(e){n={...n,error:Vt(e)}}l()}}async function h(){if(!n||n.saving||n.conflict||n.latest||!Q(n.draft))return;let r=n.draft;s.add(r.path),n={...n,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(t(`app.client.fileEditorController.saveRevisionMismatch`));let a=e.drafts.acknowledge(r.path,r.contents,i.revision);n?.draft.path===r.path&&a&&(n={...n,draft:a,status:``,error:``},i.refresh===`failed`?y.error(t(`app.client.fileEditorController.savedRefreshFailed`),{description:t(`app.client.fileEditorController.refreshBeforeContinuing`)}):Q(a)?y.success(t(`app.client.fileEditorController.savedToProject`),{description:t(`app.client.fileEditorController.newerEditsUnsaved`)}):y.success(t(`app.client.fileEditorController.savedToProject`))),e.onSaved()}catch(e){n?.draft.path===r.path&&(n={...n,error:Vt(e),conflict:!0})}finally{s.delete(r.path),n?.draft.path===r.path&&(n={...n,saving:!1}),l()}}async function g(){if(!n||n.saving)return;let r=n;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(!n||n.draft.path!==r.draft.path)return;let c=e.drafts.get(r.draft.path);n={...n,key:`${c.id}:merge:${s}`,file:{name:c.path,contents:c.contents},oldFile:{name:c.path,contents:o.contents},mode:`diff`,baselineLabel:t(`app.client.fileEditorController.latestFile`),latest:i,conflict:!0,error:``,status:t(`app.client.fileEditorController.draftOnNewSide`)}}catch(e){!a.aborted&&n&&(n={...n,error:Vt(e)})}finally{l()}}function _(){if(!n?.latest)return;let r=Ht(n.latest,n.draft.path),i=e.drafts.rebase(n.draft.path,r.revision,r.contents);n={...n,draft:i,latest:null,conflict:!1,error:``,status:t(`app.client.fileEditorController.reviewedAgainstLatest`)},l()}async function v(){if(!n||n.saving)return;let t=n.draft.path;e.drafts.discard(t),u(),await p(t)}return{get state(){return n},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(n,r,i){return i.throwIfAborted(),[...s].some(e=>r.items.some(t=>t.source&&Ut(e,t.source)||t.destination&&Ut(e,t.destination)))?t(`app.client.fileEditorController.waitForSave`):e.drafts.beforeMutation(n,r)},afterApply(t,r){e.drafts.afterMutation(t,r),n&&t.kind===`move`&&r.items.some(e=>e.status===`applied`&&e.source&&Ut(n.draft.path,e.source))&&u(),l()}}}}function Gt(e){return e instanceof Error?e.message:t(`app.client.fileReviewActionsController.actionCouldNotBeCompleted`)}function Kt(e){let n=null,r,i=0;function a(){e.signal.aborted||e.onChange()}function o(t){return r?.abort(),r=new AbortController,i++,n={phase:t,plan:null,result:null,recoveries:null,error:``},a(),{signal:AbortSignal.any([e.signal,r.signal]),turn:i}}function s(){n?.phase!==`applying`&&(r?.abort(),i++,n=null,a())}async function c(r){if(n?.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(t(`app.client.fileReviewActionsController.preparedReviewMismatch`));e.guard(a.paths,a.target),c===i&&(n={phase:`ready`,plan:a,result:null,recoveries:null,error:``})}catch(e){!s.aborted&&c===i&&(n={phase:`error`,plan:null,result:null,recoveries:null,error:Gt(e)})}finally{c===i&&a()}}async function l(){if(n?.phase!==`ready`||!n.plan)return;let o=n.plan,s=i,c=AbortSignal.any([e.signal,r.signal]);try{e.guard(o.paths,o.target),n={...n,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(t(`app.client.fileReviewActionsController.writeResponseUnconfirmed`));if(s===i){let t=``;try{await e.onApplied(r)}catch(e){t=Gt(e)}c.throwIfAborted(),s===i&&(n={...n,phase:`done`,result:r,error:t})}}catch(e){!c.aborted&&s===i&&n&&(n={...n,phase:`error`,error:Gt(e)})}finally{s===i&&a()}}async function u(){if(n?.phase===`applying`)return;let{signal:t,turn:r}=o(`preparing`);try{let a=await e.recoveries(t);!t.aborted&&r===i&&(n={phase:`recoveries`,plan:null,result:null,recoveries:a,error:``})}catch(e){!t.aborted&&r===i&&(n={phase:`error`,plan:null,result:null,recoveries:null,error:Gt(e)})}finally{r===i&&a()}}return e.signal.addEventListener(`abort`,()=>{r?.abort(),n=null},{once:!0}),{get state(){return n},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,n,r){if(e.endSide&&e.endSide!==e.side)throw Error(t(`app.client.projectCodeComments.selectConsecutiveLines`));let i=e.side===`deletions`?`old`:`new`,a=n.find(t=>(t.viewPath??t.path)===e.path&&(!t.side||t.side===i));if(!a||a.contents===null||!a.revision)throw Error(t(`app.client.projectCodeComments.commentsRequireReadableText`));if(r&&a.revision!==r)throw Error(t(`app.client.projectCodeComments.linesBelongToOlderSource`));return l({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 n,r={loading:!1,result:null,error:``,notice:``};function i(){e.signal.aborted||e.onChange()}function a(e=t(`app.client.fileSearchController.searchCancelled`)){n?.abort(),n=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;n=s;let c=AbortSignal.any([s.signal,e.signal]);r={loading:!0,result:null,error:``,notice:``},i();try{let i=b(o),a=await e.request(i,c);if(Xt(a.query).toString()!==Xt(i).toString())throw new X(t(`app.client.fileSearchController.differentSearchResults`),`response`);if(c.aborted||n!==s)return;r={loading:!1,result:a,error:``,notice:``}}catch(e){if(c.aborted||n!==s)return;r={loading:!1,result:null,error:e instanceof Error?e.message:t(`app.client.fileSearchController.searchFailed`),notice:``}}finally{n===s&&(n=void 0,i()),s.abort()}}}}function Qt(e,n){if(e.entry.path!==n.path||e.revision!==n.revision||e.entry.content!==`text`||typeof e.contents!=`string`||n.start<0||n.end<n.start||n.end>e.contents.length)throw Error(t(`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(n.start),a=r(n.end);if(i.line!==n.startLine||i.column!==n.startColumn||a.line!==n.endLine||a.column!==n.endColumn)throw Error(t(`app.client.fileSearchController.invalidCoordinates`));return{page:0,scroll:0,revision:n.revision,selection:{path:n.path,start:n.startLine,end:Math.max(n.startLine,n.endLine-Number(n.endColumn===1&&n.endLine>n.startLine))}}}function $t(e){return e instanceof Error?e.message:t(`app.client.projectFileReview.readProjectError`)}function en(e){let i=e.props.project,o={version:1,projectId:i.id,view:Ge(),positions:{}},s=null,c=null,l=[],p={},g=``,_=!1,y=null,te=!1,ne=!1,b=``,ie=`light`,x,ae=!1,S,se,C,w=!1,T=``,E,ce,D=``,O=``,de=``,fe=e.props.refresh,me=``,k,A,j=le(),ge=e.props.path,M,N,P=null,F=null,I=!1,L,R,ve=``,z=null,B=null,xe=[],V=[],Se=``,Ce,H=null,we,Te,Ee=0,U=``,De,Oe,ke,je=``,Me=!1,Ne=e.props.store;Ne||qe(i).then(e=>{Ne=e});function Pe(){if(!I){let e=window.document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;Oe=e instanceof HTMLElement?e:void 0}I=!0}function Ie(){I=!1,R=void 0,G(),e.queueTask(()=>{(Oe?.isConnected?Oe:ke?.querySelector(`diffs-container`)?.shadowRoot?.querySelector(`[contenteditable=true]`)??ke?.querySelector(`[data-bud-code-review]`))?.focus({preventScroll:!0}),Oe=void 0})}function G(){e.signal.aborted||e.update()}function K(){return P?JSON.stringify([Qe(o.view,e.props.path),P.commit]):Qe(o.view,e.props.path)}function q(){return o.positions[K()]??Le()}function Ke(){clearTimeout(C),C=setTimeout(()=>Ve(`bud:review:${i.id}:v1`,JSON.stringify(o)),200)}function Ye(e,t=!1){let n=q(),r={...n,...e};o=Re(o,K(),r),Ke(),(t||JSON.stringify(n.selection)!==JSON.stringify(r.selection)||n.revision!==r.revision)&&G()}function et(){let t=nt(e.props.path,o.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 tt(e){P=null,F=null,o={...o,view:{...o.view,...e}},Ke(),et(),G()}let J;async function rt(){let n;J=new Promise(e=>{n=e}),S?.abort();let r=new AbortController;S=r;let a=AbortSignal.any([e.signal,r.signal]),u=e.props.path,d=o.view,f=P&&P.path===u?P:null,m=K(),h=JSON.stringify([m,q().page,u]),y=Ae(d);_=!0,g=``,O!==h&&(s=null,c=null,l=[],F=null,p={}),G();try{if(f){let e=await Z(`${W.fileReviewApi.source.href()}?${new URLSearchParams(f)}`,i.token,a,oe);if(e.path!==f.path||e.commit!==f.commit)throw new X(t(`app.client.projectFileReview.sourceResponseCommitMismatch`),`response`);a.aborted||(F=e,O=h)}else if(y)for(let e=0;e<2;e++){let n=await Z(`${W.fileReviewApi.compare.href()}?${Ot(y)}`,i.token,a,ee);if(n.comparison.mode!==y.mode)throw new X(t(`app.client.projectFileReview.comparisonMismatch`),`response`);let r=Math.min(q().page,Math.max(0,Math.ceil(n.entries.length/20)-1)),o=q().selection?.path;o&&d.multiple&&n.entries.some(e=>e.path===o)&&(r=Math.floor(n.entries.findIndex(e=>e.path===o)/20)),r!==q().page&&Ye({...q(),page:r});let s=d.multiple?n.entries.slice(r*20,(r+1)*20).map(e=>e.path):n.entries.filter(e=>e.path===u).map(e=>e.path);try{let e=await kt(n,s,i.token,a);!a.aborted&&K()===m&&(c=n,l=e.diffs,p=e.failures,O=JSON.stringify([m,r,u]));break}catch(t){if(e===0&&t instanceof X&&t.status===409)continue;throw t}}else if(u){let e=O!==h&&Ne?Fe(Ne,u):null;e&&(s=e,O=h,_=!1,G());let n=await Z(`${W.filesApi.read.href()}?${new URLSearchParams({path:u})}`,i.token,a,v);if(n.entry.path!==u)throw new X(t(`app.client.projectFileReview.sourceResponseFileMismatch`),`response`);if(Ne&&Xe(Ne,n).catch(()=>{}),!a.aborted&&(s=s?.revision===n.revision&&s.entry.path===n.entry.path?s:n,O=h,A?.observe(n),De?.path===u)){let e=De;De=void 0;try{Ye(Qt(n,e),!0),U=t(`app.client.projectFileReview.searchMatchNotice`,{line:e.startLine,column:e.startColumn})}catch(e){U=$t(e)}}}}catch(e){a.aborted||(g=$t(e))}finally{S===r&&(_=!1,G()),n()}}async function it(n=!1){se?.abort();let r=e.props.path;if(!r){y=null;return}let a=new AbortController;se=a;let s=AbortSignal.any([e.signal,a.signal]),c=new URLSearchParams({path:r,limit:`25`});n&&y?.nextCursor&&y.revision?(c.set(`revision`,y.revision),c.set(`cursor`,y.nextCursor)):o.view.mode===`commits`&&c.set(`revision`,o.view.target),ne=!0,b=``,G();try{let e=await Z(`${W.fileReviewApi.history.href()}?${c}`,i.token,s,re);if(e.path!==r)throw new X(t(`app.client.projectFileReview.historyPathMismatch`),`response`);s.aborted||(y=e)}catch(e){s.aborted||(b=$t(e))}finally{se===a&&(ne=!1,G())}}function at(t){if(o.view.multiple&&c){let e=c.entries.findIndex(e=>e.path===t);Ye({...Le(),page:Math.max(0,Math.floor(e/20))}),D=``}e.props.onSelect(t),G()}function st(t,n){let r=n===`parent`&&t.parents[0]?{base:t.parents[0],target:t.commit}:n===`base`?{base:t.commit}:{target:t.commit};te=!1,tt({mode:`commits`,...r}),t.path!==e.props.path&&e.props.onSelect(t.path)}async function ct(){let t=e.props.path,n=o.view.mode;if(!t||!A)return;if(n===`working`){for((!c||c.comparison.mode!==`working`)&&await rt();_&&J;)if(await J,e.signal.aborted||e.props.path!==t||o.view.mode!==n)return;if(e.signal.aborted||e.props.path!==t||o.view.mode!==n)return}let r=l.find(e=>e.entry.path===t),i=o.view.mode===`working`&&r?.newFile?.contents!==null&&r?.newFile?.revision;A.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 lt(e){j=e,Ve(`bud:editor-preferences:v1`,JSON.stringify(e)),G()}function ut(){let e=A?.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 dt(t){let n=d(t.conflict);n&&A&&(t.entry.path!==e.props.path&&e.props.onSelect(t.entry.path),N={path:t.entry.path,conflict:n},await A.begin(t.entry.path),G())}function ft(t,n=!1){if(!Ue(t)){window.location.assign(Je(t.id));return}L=t.id,e.props.comments.loadThread(t.id),Pe(),R=void 0,ve=``;let r=V.find(e=>e.thread.id===t.id);if(A?.state?.draft.path===t.anchor.path&&!n){G();return}let i=t.anchor.side===`old`&&r?.source.side===void 0&&r?.resolution.state===`outdated`,a=!n&&!i?r:void 0,s=a?.source.viewPath??a?.source.path??t.anchor.path;t.anchor.commit&&(n||!a)?(P={path:t.anchor.path,commit:t.anchor.commit},s=t.anchor.path,o={...o,view:{...o.view,mode:`source`,multiple:!1}},A?.close()):a||(P=null,o={...o,view:{...o.view,mode:t.anchor.side===`old`?`working`:`source`,multiple:!1}}),s!==e.props.path&&e.props.onSelect(s),H=t.id,(!a||s!==e.props.path)&&(D=``),G()}function pt(n,r=!1){if(e.props.comments.ready&&e.props.comments.snapshot.capabilities.create){Pe(),B=z,L=void 0,ve=``;try{let e=A?.state;if(r&&e&&(Q(e.draft)||e.conflict||e.saving))throw Error(t(`app.client.projectFileReview.saveDraftBeforeComment`));R=Yt(n,r&&e&&n.side!==`deletions`?[{path:e.draft.path,revision:e.draft.baseRevision,contents:e.draft.contents,commit:null}]:xe,r?void 0:q().revision)}catch(e){R=void 0,ve=$t(e)}G()}}async function mt(n){if(!R)throw Error(t(`app.client.projectFileReview.selectCodeLinesAgain`));if(A?.state&&Q(A.state.draft))throw Error(t(`app.client.projectFileReview.saveDraftBeforeSendingComment`));L=(await e.props.comments.write({anchor:R,body:n})).thread.id,R=void 0,G()}let ht=r((n,r)=>{ke=n,w=!0;try{k=Bt(i.id,At);let e=ue(`bud:editor-preferences:v1`);j=Be(JSON.parse(typeof e==`string`?e:`null`))}catch(e){g=$t(e)}k&&(A=Wt({signal:r,drafts:k,read:(e,t)=>Z(`${W.filesApi.read.href()}?${new URLSearchParams({path:e})}`,i.token,t,v),save:(e,t)=>Z(W.fileSavesApi.save.href(),i.token,t,f,fetch,{body:e}),onChange:G,onSaved:()=>{D=``,G()}}),e.props.registerDraftGuard?.(A.guard,r)),M=Kt({signal:r,prepare:(e,t)=>Z(W.fileReviewActionsApi.prepare.href(),i.token,t,u,fetch,{body:e}),apply:(e,t)=>Z(W.fileReviewActionsApi.apply.href(),i.token,t,m,fetch,{body:e}),recoveries:e=>Z(W.fileReviewActionsApi.recoveries.href(),i.token,e,h),guard(e){if(A?.state?.saving)throw Error(t(`app.client.projectFileReview.waitForSaveBeforeReview`));if(e.some(e=>{let t=k?.get(e);return t&&Q(t)}))throw Error(t(`app.client.projectFileReview.saveOrDiscardDraftBeforeActions`))},async onApplied(n){n.target===`worktree`&&A?.close(),N&&n.changedPaths.includes(N.path)&&n.target===`index`&&(N=void 0,A?.close()),D=JSON.stringify([K(),q().page,e.props.path]),fe=e.props.refresh;let r=rt();for(;;){let t=J;if(await r,e.signal.aborted||J===t||!J)break;r=J}if(g)throw Error(t(`app.client.projectFileReview.writeCompletedRefreshError`,{error:g}))},onChange:G}),window.addEventListener(`beforeunload`,e=>{k?.persist(),k?.dirty.length&&(e.preventDefault(),e.returnValue=``)},{signal:r});try{o=We(ue(`bud:review:${i.id}:v1`),i.id)}catch{}gt(e.props.href),T=e.props.href;let a=()=>{ie=window.document.documentElement.dataset.theme===`dark`?`dark`:`light`,G()},s=new MutationObserver(a);s.observe(window.document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]}),a(),xt({signal:r,renderOptions:{theme:he,lineDiffType:o.view.highlights}}).then(async e=>{await e.ready,r.aborted||(x=e,ae=!0,G())}).catch(()=>{ae=!0,G()}),r.addEventListener(`abort`,()=>{S?.abort(),se?.abort(),s.disconnect(),clearTimeout(C),x?.dispose(),k?.persist(),Ve(`bud:review:${i.id}:v1`,JSON.stringify(o))},{once:!0})});function gt(t){let n=new URL(t);z=e.props.conversation?.id??null,B=null,z||(P=null,F=null);let r=ze(n,i.id);$e(n,i.id).foreign&&(r={view:{mode:`source`,multiple:!1}}),r&&(o={...o,view:{...o.view,...r.view}},r.position&&(o=Re(o,Qe(o.view,r.position.selection?.path??e.props.path),r.position))),D=``}return()=>{if(w){(T!==e.props.href||E!==e.props.conversation?.id)&&(T=e.props.href,E=e.props.conversation?.id,ce!==T&&gt(T),ce=void 0);let n=e.props.searchSelection;n&&n.id!==Ee&&(Ee=n.id,De=n.match,U=``,e.queueTask(()=>{A?.close(),N=void 0,tt({mode:`source`,multiple:!1}),D=``,G()})),ge!==e.props.path&&(ge=e.props.path,N=void 0,P?.path!==e.props.path&&(P=null,F=null),e.queueTask(()=>A?.closeOtherPath(e.props.path)));let r=JSON.stringify([K(),q().page,e.props.path]);(r!==D||fe!==e.props.refresh)&&(D=r,fe=e.props.refresh,e.queueTask(()=>{rt()}));let i=JSON.stringify([e.props.path,o.view.mode===`commits`?o.view.target:e.props.repository?.head]);if(te&&i!==de&&(de=i,e.queueTask(()=>{it()})),x&&me!==o.view.highlights){me=o.view.highlights;let n=x;e.queueTask(()=>{n.pool.setRenderOptions({lineDiffType:o.view.highlights}).catch(n=>{e.signal.aborted||(g=t(`app.client.projectFileReview.updateHighlightingError`,{error:$t(n)}),G())})})}}let r=A?.state,u=e.props.comments;if(L&&u.ready&&!u.snapshot.threads.find(e=>e.id===L)?.messagesLoaded&&!u.loadingThread(L)){let t=L;e.queueTask(()=>{u.loadThread(t)})}let d=JSON.stringify([s?.entry.path,s?.revision,F?.path,F?.commit,F?.file?.revision,l.map(e=>e.revision),r?.key,r?.draft.baseRevision]);if((d!==Se||Ce!==u.version)&&(Se=d,Ce=u.version,xe=Jt(s,l,F),V=Ze(u.snapshot.threads,xe)),Te!==r?.key&&(Te=r?.key,we=void 0),r&&we&&(V=[...we]),z&&z!==B&&u.loaded&&!_&&(s||F||c||g)){let t=u.snapshot.threads.find(e=>e.id===z);if(t)B=z,e.queueTask(()=>ft(t,e.props.conversation?.original??!1));else{I=!0;let t=z;e.queueTask(()=>{u.loadThread(t)})}}if(H&&!_){let t=V.find(e=>e.thread.id===H);if(t){H=null;let n=qt(t);n&&e.queueTask(()=>Ye(n,!0))}}let f=I&&u.ready;f!==Me&&(Me=f,e.queueTask(()=>e.props.onComments?.(f)));let m=k?.dirty.map(e=>e.path)??[];m.join(`\0`)!==je&&(je=m.join(`\0`),e.queueTask(()=>e.props.onDrafts?.(m)));let h={threads:u.snapshot.threads,locations:V,version:u.version,selected:L,onShow:()=>{Pe(),G()},onOpen:e=>{let t=u.snapshot.threads.find(t=>t.id===e);t&&ft(t)},onCreate:u.snapshot.capabilities.create?e=>pt(e):void 0,onLocations:e=>{A?.state?.key===r?.key&&(we=e,G())}};return n(`div`,{class:`flex h-full min-h-0 flex-col`,mix:ht,children:[(u.loaded?!u.ready:i.storage.threads?.state!==`ready`)?n(a,{as:`p`,variant:`ui-caption`,tone:`muted`,role:`status`,class:`shrink-0 border-b border-line px-3 py-1.5`,children:t(`app.client.projectFileReview.commentsUnavailable`)}):null,U?n(a,{as:`p`,variant:`ui-caption`,role:`status`,class:`shrink-0 border-b border-line px-3 py-1.5`,children:U}):null,A?.openError?n(a,{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:A.openError}):null,A?.opening?n(a,{as:`p`,variant:`ui-caption`,role:`status`,class:`sr-only`,children:t(`app.client.projectFileReview.readingFileForEditing`)}):null,r&&A&&N?.path===r.draft.path?n(pe,{chrome:e.props.chrome,file:{name:r.draft.path,contents:r.draft.contents,cacheKey:r.draft.baseRevision},dirty:Q(r.draft),saving:r.saving,stale:r.conflict,error:r.error,status:r.status,theme:ie,workerPool:x?.pool,onChange:A.change,onSave:()=>{A?.save()},onMarkResolved:()=>{N&&M?.prepare({kind:`mark-resolved`,path:N.path,expectedRevision:r.draft.baseRevision,conflict:N.conflict})},onEdit:()=>{N=void 0,A?.begin(r.draft.path),G()},onClose:()=>{N=void 0,A?.close(),D=``,G()}},`merge:${r.key}`):r&&A?n(He,{chrome:e.props.chrome,file:r.file,oldFile:r.oldFile,initialMode:r.mode,sessionKey:r.key,comments:u.ready?{...h,onCreate:u.snapshot.capabilities.create?e=>pt(e,!0):void 0}:void 0,commentRevision:r.draft.baseRevision,baselineLabel:r.baselineLabel,dirty:Q(r.draft),saving:r.saving,conflict:r.conflict,reviewingConflict:!!r.latest,status:r.status,error:r.error,storageWarning:k?.warning??``,preferences:j,theme:ie,workerPool:x?.pool,onChange:A.change,onSave:()=>{A?.save()},onClose:()=>{A?.close(),D=``,G()},onDiscard:()=>{A?.discard()},onDownload:ut,onCheckLatest:()=>{A?.checkLatest()},onAcceptMerge:A.acceptMerge,onPreferences:lt},r.key):n(be,{chrome:e.props.chrome,path:e.props.path,repository:e.props.repository,contextKey:K(),view:o.view,position:q(),document:ae?s:null,source:ae?F:null,comments:u.ready?h:void 0,snapshot:c,diffs:ae?l:[],failures:p,loading:_||!ae,error:g,history:y,historyOpen:te,historyLoading:ne,historyError:b,theme:ie,workerPool:x?.pool,onEdit:i.files.edit&&A&&e.props.path&&!P?ct:void 0,onReviewAction:M?e=>{M?.prepare(e)}:void 0,onReviewUndo:M?()=>{M?.recoveries()}:void 0,onResolve:e=>{dt(e)},editLabel:e.props.path&&k?.get(e.props.path)&&Q(k.get(e.props.path))?t(`app.client.projectFileReview.resumeDraft`):t(`app.client.projectFileReview.editFile`),onChange:tt,onPosition:Ye,onSelect:at,onPage:e=>{Ye({...Le(),page:e},!0)},onRetry:()=>{rt()},onHistory:()=>{te=!te,te?de=``:se?.abort(),G()},onHistoryPage:e=>{it(e)},onHistoryRevision:st,onCopyLink:async t=>{let n=t.selection?.path??e.props.path,r=c?.comparison.mode===`commits`?{...o.view,...c.comparison}:o.view,i=nt(n,r,t);await navigator.clipboard.writeText(new URL(i,window.location.origin).href)}}),I&&u.ready?n(_e,{threads:u.snapshot.threads.filter(Ue),renderThreadLinks:e=>n(ot,{part:`links`,project:i,thread:e,canLink:u.snapshot.capabilities.link,busy:u.busy,onChange:async()=>{await u.load(),await u.loadThread(e.id,!0)}}),renderThreadActions:e=>n(ot,{part:`action`,project:i,thread:e,canLink:u.snapshot.capabilities.link,busy:u.busy,onChange:async()=>{await u.load(),await u.loadThread(e.id,!0)}}),capabilities:u.snapshot.capabilities,selected:L,currentPath:e.props.path,locations:V,draft:R,loaded:u.loaded,busy:u.busy,now:u.now,error:ve||u.error,onSelect:e=>ft(e),onCloseThread:()=>{L=void 0,G()},onClose:Ie,onWrite:u.write,viewerId:u.viewer?.id,onDelete:(e,t)=>u.remove(e.id,t),onCreate:mt,onCancelDraft:()=>{R=void 0,G()},onReload:()=>{u.load()},onSync:u.snapshot.capabilities.sync?()=>{u.sync().catch(()=>{})}:void 0,onOriginal:e=>ft(e,!0),onCopyLink:e=>navigator.clipboard.writeText(new URL(Je(e.id),window.location.origin).href)}):null,M?.state?n(ye,{state:M.state,theme:ie,onApply:()=>{M?.apply()},onClose:M.close,onUndo:e=>{M?.prepare({kind:`undo`,recoveryId:e})},onRecoveries:()=>{M?.recoveries()}}):null]})}}function tn(e){return e instanceof Error?e.message:t(`app.client.projectFiles.couldNotLoadProjectFiles`)}function nn(e,t,n){let r=new URLSearchParams({includeIgnored:String(t.includeIgnored),includeDotfiles:`true`});return Promise.all([Z(`${W.filesApi.index.href()}?${r}`,e,n,S),Z(W.fileReviewApi.repository.href(),e,n,x)])}async function rn(e,t,n){let r;try{r=fe(ue(`bud:files:${e.id}:v1`),e.id)}catch{r=et(e.id)}let i=$e(n,e.id);i.explicit&&(r=me(r,i.path));let a=await qe(e),o=K(a);if(o&&o.includeIgnored===r.includeIgnored){let{index:e,repository:t}=o;return r=H(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:H(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 i=e.props.project,{view:a,index:o,repository:s,error:l,store:u}=e.props.initial,d=()=>{let e=K(u);if(!e||e.includeIgnored!==a.includeIgnored)return;let t=a.selected,n=a.selected!==null&&f(a.selected);a=H(a,n?null:o,e.index,e.repository),o=e.index,s=e.repository,t!==a.selected&&N(!0),j()};function f(e){try{return Bt(i.id,At).dirty.some(t=>t.path===e)}catch{return!1}}let p=[u.listings.subscribeChanges(d),u.files.subscribeChanges(d),u.repositories.subscribeChanges(d)],m=!1,h=e.props.href,g,_=!1,v=``,ee,re,b,x=!1,oe=!1,S=!1,C=!1,w=!1,T=0,E=!1,ce=0,D,le=[],ue=!1,O=Zt({signal:e.signal,onChange:j,request:(e,t)=>Z(`${W.fileSearchApi.search.href()}?${Xt(e)}`,i.token,t,te)});function de(){O.cancel(``),E=!1,j()}let fe=Ct(),pe=at({store:qe(i),token:i.token,signal:e.signal,onChange:j}),he,k={},A=Dt({signal:e.signal,index:()=>o,guards:fe,onChange(){A.state?.phase===`applying`&&(ee?.abort(),C=!0),j()},transport:{prepare:(e,t)=>Z(W.fileMutationsApi.prepare.href(),i.token,t,ae,fetch,{body:e}),apply:(e,t)=>Z(W.fileMutationsApi.apply.href(),i.token,t,ne,fetch,{body:{id:e.id,revision:e.revision}}),recoveries:e=>Z(W.fileMutationsApi.recoveries.href(),i.token,e,ie)},async onApplied(e,n){a=J(a,e.kind,n);let r=n.items.filter(e=>e.status===`applied`).length;r?y.success(t(`app.client.projectFiles.fileActionsCompleted`,{count:r}),{description:n.recoveryId?t(`app.client.projectFiles.originalContentsAvailableInRecovery`):void 0}):y.error(t(`app.client.projectFiles.fileActionCouldNotBeApplied`),{description:t(`app.client.projectFiles.projectWasRefreshed`)}),N(!0),M(),w=!0,await I(!0),C=!1},async onUncertain(){w=!0,await I(!0),C=!1}});function j(){e.signal.aborted||e.update()}function M(){clearTimeout(re),re=setTimeout(()=>Ve(`bud:files:${i.id}:v1`,JSON.stringify(a)),200)}function N(t){let n=Ce(null),r=Ie(window.location.href)===e.props.conversation?.id;if(!e.props.active||!r&&window.location.pathname!==n&&!window.location.pathname.startsWith(`${n}/`)){_=!0;return}if(_=!1,r&&t)return;let o=ze(r?e.props.href:window.location.href,i.id),s=o?.view.mode&&o.view.mode!==`source`?nt(a.selected,{...Ge(),...o.view}):Ce(a.selected);window.location.pathname+window.location.search+window.location.hash!==s&&(g=new URL(s,window.location.origin).href,window.history[t?`replaceState`:`pushState`]({...window.history.state,budFile:a.selected},``,s))}function _e(e){let t={...a,...e},n=t.includeIgnored!==a.includeIgnored;a=t,M(),j(),n&&R()}function P(e,t){let n=a.selected;a=me(a,e,t),v=``,M(),n!==e&&N(!1),j()}function F(e){if(le.includes(e)){P(e,[e]),y(t(`app.client.projectFiles.saveOrDiscardDraftToCloseTab`)),j();return}let n=a.selected;a=Ne(a,e),M(),n!==a.selected&&N(!1),j()}async function I(t=!1){if(!t&&A.state?.phase===`applying`||oe){S=!0;return}oe=!0,m=!0,l=``;let n=new AbortController;ee=n;let r=AbortSignal.any([e.signal,n.signal]);j();try{let[e,t]=await nn(i.token,a,r);if(r.aborted)return;let n=a.selected;a=H(a,o,e,t),o=e,s=t,await Pe(u,e,t,a.includeIgnored),M(),n!==a.selected&&N(!0),w&&T++,w=!1}catch(e){r.aborted||(l=tn(e))}finally{n.abort(),oe=!1,m=!1,j(),S&&!e.signal.aborted&&(S=!1,R())}}function R(){clearTimeout(b),b=setTimeout(()=>{I()},100)}async function z(){if(m)return;let t=new AbortController;try{await Z(W.filesApi.refresh.href(),i.token,AbortSignal.any([e.signal,t.signal]),se),w=!0,await I()}catch(t){e.signal.aborted||(l=tn(t),j())}finally{t.abort()}}let ye=r((t,n)=>{if(x)return;x=!0;let r=$e(e.props.href,i.id);be(r.foreign),!r.foreign&&(r.explicit?r.path!==a.selected:!a.selected)&&N(!0),M();let o=tt(i.token).subscribe(`files`,{onEvent(e){let t=c(e);if(w=!0,C)S=!0;else{if(t.change.reset||oe||a.includeIgnored)return R();je(u,t).then(()=>{T++,w=!1,j()})}},onResync(){w=!0,R()}});e.props.initial.stored&&R(),pe.load(),n.addEventListener(`abort`,()=>{o();for(let e of p)e.unsubscribe();ee?.abort(),clearTimeout(re),clearTimeout(b),Ve(`bud:files:${i.id}:v1`,JSON.stringify(a))},{once:!0})});function be(e){v=e?t(`app.client.projectFiles.fileLinkBelongsToAnotherProject`):``}return()=>{if(h!==e.props.href){if(h=e.props.href,g!==h){_=!1;let e=$e(h,i.id);e.explicit&&(a=me(a,e.path)),be(e.foreign)}g=void 0}return _&&e.props.active&&e.queueTask(()=>N(!0)),he!==pe.version&&(he=pe.version,k=Me(pe.snapshot.threads)),n(`div`,{class:`relative h-full min-h-0 ${ue?`md:pe-80`:``}`,mix:ye,children:[n(ge,{projectName:i.name,view:a,index:o,repository:s,loading:m,error:l,notice:v,commentCounts:k,dirty:le,onViewChange:_e,onSelect:P,onCloseTab:F,onSearch:()=>{E=!0,j()},onRefresh:()=>{z()},mutations:i.files.edit?{busy:A.busy,open:e=>A.open(e),move:(e,t)=>A.open({action:t===`rename`?`rename`:`move`,paths:e.map(e=>e.path),entries:e},!0),recoveries:()=>A.recoveries()}:void 0,sidebar:E?n(Ee,{...O.state,onSearch:e=>{O.search(e)},onCancel:()=>O.cancel(),onClose:de,onSelect:e=>{D={id:++ce,match:e},P(e.path,[e.path]),window.matchMedia(`(min-width: 768px)`).matches||de()}}):void 0,content:t=>n(en,{project:i,href:e.props.href,path:a.selected,repository:s,refresh:T,store:u,chrome:t,onSelect:e=>P(e,[e]),onComments:e=>{ue=e,j()},onDrafts:e=>{e.join(`\0`)!==le.join(`\0`)&&(le=e,j())},registerDraftGuard:fe.register,comments:pe,conversation:e.props.conversation,searchSelection:D})}),A.state?n(ve,{state:A.state,onDestination:A.destination,onSubmit:()=>{A.submit()},onClose:A.close,onRecovery:A.recoveries}):null,A.recovery.open?n(L,{recoveries:A.recovery.recoveries,loading:A.recovery.loading,error:A.recovery.error,onClose:A.closeRecoveries,onRefresh:()=>{A.refreshRecoveries()},onRestore:(e,t)=>A.open({action:`restore`,recoveryId:e,paths:t})}):null]})}}var on=o({routes:C,load:({project:e,signal:t,url:n})=>rn(e,t,n),render:(e,{project:t,url:r,active:i,conversation:a})=>n(an,{project:t,initial:e,href:r.href,active:i,conversation:a})});export{on as default};