@succsoft/succapp 5.0.1 → 5.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -9
- package/dist/cli/l10n/bundle.l10n.json +210 -100
- package/dist/cli/l10n/bundle.l10n.zh-cn.json +211 -101
- package/dist/cli/succapp.js +87 -75
- package/package.json +1 -5
- package/resources/contents.properties +8 -1
- package/resources/workspace-templates/succapp-workspace/.agents/README.md +10 -31
- package/resources/workspace-templates/succapp-workspace/.agents/gitignore.template +2 -0
- package/resources/workspace-templates/succapp-workspace/.agents/rules/workspace-rules.md +23 -94
- package/resources/workspace-templates/succapp-workspace/.succapp/gitignore.template +9 -0
- package/resources/workspace-templates/succapp-workspace/AGENTS.md +19 -36
- package/resources/workspace-templates/succapp-workspace/agent-workspace-template.jsonc +1 -3
- package/resources/workspace-templates/succapp-workspace/gitignore.template +7 -0
- package/resources/workspace-templates/succapp-workspace/.agents/skills/succbi-frontend-development/SKILL.md +0 -76
- /package/resources/workspace-templates/succapp-workspace/.agents/plans/{.gitignore → gitignore.template} +0 -0
- /package/resources/workspace-templates/succapp-workspace/.agents/reports/{.gitignore → gitignore.template} +0 -0
- /package/resources/workspace-templates/succapp-workspace/.agents/reviews/{.gitignore → gitignore.template} +0 -0
package/dist/cli/succapp.js
CHANGED
|
@@ -1,46 +1,48 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`)}function
|
|
4
|
-
`)}function
|
|
5
|
-
`):t.stack??"",this.cause=t.cause,t.properties&&(this.properties={...t.properties})}}});function
|
|
6
|
-
${n}`:t}function
|
|
7
|
-
Wrapped by: ${d}`:f)}remoteError;static createProperties(t,n,o,i,a,s){let c={...t,status:n,statusText:o};if(i!==void 0&&(c.contentType=i),!s){let l=r.createResponsePreview(a);l!==void 0&&(c.responsePreview=l)}return c}static formatSummary(t,n,o,i,a){return i||a?i?.message||pt(i)||a?.message||pt(a)||n.trim()||"Request failed":r.isServerStack(t)?n.trim()||"Request failed":r.isHtmlResponse(t,o)?n.trim()||"server returned HTML error response":t.split(/\r?\n/).map(s=>s.trim()).find(Boolean)?.slice(0,240)||"Request failed"}static createResponsePreview(t){let n=t.trim();if(n)return n.length>512?`${n.slice(0,512)}...`:n}static isHtmlResponse(t,n){return(n?.toLowerCase()??"").includes("text/html")?!0:/^<!doctype html\b|^<html[\s>]/i.test(t.trimStart())}static isServerStack(t){let n=t.trim();return!n||n.startsWith("{")||n.startsWith("[")?!1:n.split(/\r?\n/).some(o=>{let i=o.trimStart();return i.startsWith("at ")||i.startsWith("... ")||i.startsWith("Caused by:")||i.startsWith("Wrapped by:")})}static getDisplayStyle(t,n){return t==="info"?"info":t==="warn"?"warn":t===void 0&&n==="quietly"?"info":"error"}};E=class extends _e{constructor(e,t={},n={}){super(e,{...n,category:n.category??"usage",style:n.style??"warn",properties:t}),this.name="UsageError"}},St=class extends _e{constructor(e,t={},n={}){super(e,{...n,style:n.style??"warn",properties:t}),this.name="OperationBlockedError"}},Ot=class extends _e{constructor(e,t={},n={}){super(e,{...n,category:n.category??"conflict",style:n.style??"error",properties:t}),this.name="ConflictError"}},za=class extends _e{constructor(e,t={}){super(e,{...t,style:t.style??"warn",category:t.category??"usage"}),this.name="CommandError"}},dt=class extends _e{constructor(e,t){super("err.net.connectionFailed",{category:"networkAuth",properties:{url:e,causeMessage:t?` - ${t.message}`:""},cause:t}),this.name="ConnectionError"}},ut=class extends _e{constructor(e={}){super("err.login.notlogin",{category:"networkAuth",hint:"Log in again, then retry the command."}),this.name="AuthError",this.withContext(e)}withContext(e){return e.workspaceRoot&&!this.workspaceRoot&&this.setProperty("workspaceRoot",e.workspaceRoot),e.serverUrl&&!this.serverUrl&&this.setProperty("serverUrl",e.serverUrl),this}get context(){return{workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl}}get workspaceRoot(){return typeof this.properties.workspaceRoot=="string"?this.properties.workspaceRoot:void 0}get serverUrl(){return typeof this.properties.serverUrl=="string"?this.properties.serverUrl:void 0}};Ri=class extends _e{constructor(t,n,o={}){super("err.workspace.problem",{style:"warn",properties:{root:t,code:n,count:o.count??o.projectPaths?.length??o.remotePaths?.length??0}});this.root=t;this.code=n;this.options=o;this.name="WorkspaceProblemError"}get projectPaths(){return this.options.projectPaths}get remotePaths(){return this.options.remotePaths}get count(){return this.options.count}},Ka=class extends E{constructor(t,n){super("err.net.invalidUrl",{url:t},{cause:n});this.url=t;this.name="InvalidUrlError"}},jn=class extends _e{constructor(t,n,o,i){super("err.lock.busy",{category:"lockBusy",style:"warn",properties:{attemptedCommand:t,conflictScope:o,...i?{pid:i.pid,host:i.hostname,command:i.command,source:i.source,scope:i.scope,startTime:i.startTime,lastHeartbeat:i.lastHeartbeat}:{}},hint:"Wait for the running SuccApp process to finish, then retry."});this.attemptedCommand=t;this.attemptedScopes=n;this.conflictScope=o;this.holder=i;this.name="LockBusyError"}},Ir=class extends _e{constructor(t,n={}){super("err.lock.compromised",{category:"lockCompromised",style:"warn",properties:{attemptedCommand:t},cause:n.cause});this.attemptedCommand=t;this.name="LockCompromisedError"}},Kt=class extends _e{constructor(){super("err.base.cancel",{category:"cancel",style:"silent"}),this.name="CancelledError"}}});function ap(r){return r.reason instanceof Error?r.reason:new Kt}function mt(r){if(r?.aborted)throw ap(r)}function qh(...r){let e=r.filter(n=>n!==void 0);if(e.length===0)return Xa;if(e.length===1)return e[0];let t=new AbortController;for(let n of e){let o=()=>{t.signal.aborted||t.abort(n.reason instanceof Error?n.reason:new Kt)};n.addEventListener("abort",o),n.aborted&&o()}return t.signal}var nE,Xa,$n=pe(()=>{D();nE=new AbortController,Xa=nE.signal});var go,ht,Ar=pe(()=>{D();Ce();$n();go=class r{children=[];parent;weight;signal;total=0;done=0;ratio=0;message;constructor(e,t=0,n){this.parent=e,this.weight=Math.max(t,0),this.signal=n??Xa}start(e){this.total=Math.max(e??0,0),this.done=0,this.ratio=0,this.children.length=0,this.doStart(e),this.reportToParent()}progress(e){this.assertNoSubTasks(),this.reportProgress(Math.max(this.done,e,0))}step(e){this.assertNoSubTasks(),this.reportProgress(Math.max(this.done+Math.max(e??1,0),0))}setMessage(e){this.message=e||void 0,this.parent&&this.parent.setMessage(this.message)}finish(){this.total<=0&&(this.total=Math.max(this.done,1),this.doStart(this.total),this.reportToParent()),this.reportProgress(Math.max(this.done,this.total))}subTaskMonitor(e){let t=new r(this,e);return this.children.push(t),t}isCancellationRequested(){return this.parent?this.parent.isCancellationRequested():this.signal.aborted}getAbortSignal(){return this.parent?this.parent.getAbortSignal():this.signal}setAbortSignal(e){this.parent?this.parent.setAbortSignal(e):this.signal=e}throwIfAborted(){this.parent?this.parent.throwIfAborted():mt(this.signal)}onSubTaskProgress(){let e=this.children.reduce((o,i)=>o+i.getWeight(),0);if(e<=0){this.reportProgress(this.done);return}let t=this.children.reduce((o,i)=>o+i.getWeight()*i.getCompletionRatio(),0),n=this.total>0?this.total:e;this.reportProgress(Math.max(this.done,n*t/e))}doStart(e){}doProgress(e,t){}getProgressTotal(){return this.total}reportProgress(e){let t=this.done;this.done=e,this.refreshRatio(),this.doProgress(this.done,t),this.reportToParent()}assertNoSubTasks(){U(this.children.length===0,"TaskMonitor with subtasks must report progress from subtasks")}refreshRatio(){let e=this.getProgressTotal();e>0&&(this.ratio=Math.max(this.ratio,Math.min(this.done/e,1)))}reportToParent(){this.parent?.onSubTaskProgress()}getWeight(){return this.weight}getCompletionRatio(){return this.ratio}},ht=class r{static INSTANCE=new r;start(e){}progress(e){}step(e){}setMessage(e){}finish(){}subTaskMonitor(e){return this}isCancellationRequested(){return!1}getAbortSignal(){return Xa}setAbortSignal(e){}throwIfAborted(){}}});var Qh=z((l_,Xh)=>{var an=require("constants"),bE=process.cwd,es=null,TE=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return es||(es=bE.call(process)),es};try{process.cwd()}catch{}typeof process.chdir=="function"&&(hp=process.chdir,process.chdir=function(r){es=null,hp.call(process,r)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,hp));var hp;Xh.exports=xE;function xE(r){an.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&e(r),r.lutimes||t(r),r.chown=i(r.chown),r.fchown=i(r.fchown),r.lchown=i(r.lchown),r.chmod=n(r.chmod),r.fchmod=n(r.fchmod),r.lchmod=n(r.lchmod),r.chownSync=a(r.chownSync),r.fchownSync=a(r.fchownSync),r.lchownSync=a(r.lchownSync),r.chmodSync=o(r.chmodSync),r.fchmodSync=o(r.fchmodSync),r.lchmodSync=o(r.lchmodSync),r.stat=s(r.stat),r.fstat=s(r.fstat),r.lstat=s(r.lstat),r.statSync=c(r.statSync),r.fstatSync=c(r.fstatSync),r.lstatSync=c(r.lstatSync),r.chmod&&!r.lchmod&&(r.lchmod=function(p,m,g){g&&process.nextTick(g)},r.lchmodSync=function(){}),r.chown&&!r.lchown&&(r.lchown=function(p,m,g,d){d&&process.nextTick(d)},r.lchownSync=function(){}),TE==="win32"&&(r.rename=typeof r.rename!="function"?r.rename:function(p){function m(g,d,f){var y=Date.now(),C=0;p(g,d,function v(P){if(P&&(P.code==="EACCES"||P.code==="EPERM"||P.code==="EBUSY")&&Date.now()-y<6e4){setTimeout(function(){r.stat(d,function(u,S){u&&u.code==="ENOENT"?p(g,d,v):f(P)})},C),C<100&&(C+=10);return}f&&f(P)})}return Object.setPrototypeOf&&Object.setPrototypeOf(m,p),m}(r.rename)),r.read=typeof r.read!="function"?r.read:function(p){function m(g,d,f,y,C,v){var P;if(v&&typeof v=="function"){var u=0;P=function(S,k,R){if(S&&S.code==="EAGAIN"&&u<10)return u++,p.call(r,g,d,f,y,C,P);v.apply(this,arguments)}}return p.call(r,g,d,f,y,C,P)}return Object.setPrototypeOf&&Object.setPrototypeOf(m,p),m}(r.read),r.readSync=typeof r.readSync!="function"?r.readSync:function(p){return function(m,g,d,f,y){for(var C=0;;)try{return p.call(r,m,g,d,f,y)}catch(v){if(v.code==="EAGAIN"&&C<10){C++;continue}throw v}}}(r.readSync);function e(p){p.lchmod=function(m,g,d){p.open(m,an.O_WRONLY|an.O_SYMLINK,g,function(f,y){if(f){d&&d(f);return}p.fchmod(y,g,function(C){p.close(y,function(v){d&&d(C||v)})})})},p.lchmodSync=function(m,g){var d=p.openSync(m,an.O_WRONLY|an.O_SYMLINK,g),f=!0,y;try{y=p.fchmodSync(d,g),f=!1}finally{if(f)try{p.closeSync(d)}catch{}else p.closeSync(d)}return y}}function t(p){an.hasOwnProperty("O_SYMLINK")&&p.futimes?(p.lutimes=function(m,g,d,f){p.open(m,an.O_SYMLINK,function(y,C){if(y){f&&f(y);return}p.futimes(C,g,d,function(v){p.close(C,function(P){f&&f(v||P)})})})},p.lutimesSync=function(m,g,d){var f=p.openSync(m,an.O_SYMLINK),y,C=!0;try{y=p.futimesSync(f,g,d),C=!1}finally{if(C)try{p.closeSync(f)}catch{}else p.closeSync(f)}return y}):p.futimes&&(p.lutimes=function(m,g,d,f){f&&process.nextTick(f)},p.lutimesSync=function(){})}function n(p){return p&&function(m,g,d){return p.call(r,m,g,function(f){l(f)&&(f=null),d&&d.apply(this,arguments)})}}function o(p){return p&&function(m,g){try{return p.call(r,m,g)}catch(d){if(!l(d))throw d}}}function i(p){return p&&function(m,g,d,f){return p.call(r,m,g,d,function(y){l(y)&&(y=null),f&&f.apply(this,arguments)})}}function a(p){return p&&function(m,g,d){try{return p.call(r,m,g,d)}catch(f){if(!l(f))throw f}}}function s(p){return p&&function(m,g,d){typeof g=="function"&&(d=g,g=null);function f(y,C){C&&(C.uid<0&&(C.uid+=4294967296),C.gid<0&&(C.gid+=4294967296)),d&&d.apply(this,arguments)}return g?p.call(r,m,g,f):p.call(r,m,f)}}function c(p){return p&&function(m,g){var d=g?p.call(r,m,g):p.call(r,m);return d&&(d.uid<0&&(d.uid+=4294967296),d.gid<0&&(d.gid+=4294967296)),d}}function l(p){if(!p||p.code==="ENOSYS")return!0;var m=!process.getuid||process.getuid()!==0;return!!(m&&(p.code==="EINVAL"||p.code==="EPERM"))}}});var tf=z((p_,ef)=>{var Zh=require("stream").Stream;ef.exports=FE;function FE(r){return{ReadStream:e,WriteStream:t};function e(n,o){if(!(this instanceof e))return new e(n,o);Zh.call(this);var i=this;this.path=n,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,o=o||{};for(var a=Object.keys(o),s=0,c=a.length;s<c;s++){var l=a[s];this[l]=o[l]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){i._read()});return}r.open(this.path,this.flags,this.mode,function(p,m){if(p){i.emit("error",p),i.readable=!1;return}i.fd=m,i.emit("open",m),i._read()})}function t(n,o){if(!(this instanceof t))return new t(n,o);Zh.call(this),this.path=n,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,o=o||{};for(var i=Object.keys(o),a=0,s=i.length;a<s;a++){var c=i[a];this[c]=o[c]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=r.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}});var nf=z((d_,rf)=>{"use strict";rf.exports=DE;var ME=Object.getPrototypeOf||function(r){return r.__proto__};function DE(r){if(r===null||typeof r!="object")return r;if(r instanceof Object)var e={__proto__:ME(r)};else var e=Object.create(null);return Object.getOwnPropertyNames(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}});var Cp=z((u_,yp)=>{var we=require("fs"),IE=Qh(),AE=tf(),OE=nf(),ts=require("util"),rt,ns;typeof Symbol=="function"&&typeof Symbol.for=="function"?(rt=Symbol.for("graceful-fs.queue"),ns=Symbol.for("graceful-fs.previous")):(rt="___graceful-fs.queue",ns="___graceful-fs.previous");function _E(){}function sf(r,e){Object.defineProperty(r,rt,{get:function(){return e}})}var Hn=_E;ts.debuglog?Hn=ts.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(Hn=function(){var r=ts.format.apply(ts,arguments);r="GFS4: "+r.split(/\n/).join(`
|
|
8
|
-
GFS4: `),console.error(r)});we[rt]||(of=global[rt]||[],sf(we,of),we.close=function(r){function e(t,n){return r.call(we,t,function(o){o||af(),typeof n=="function"&&n.apply(this,arguments)})}return Object.defineProperty(e,ns,{value:r}),e}(we.close),we.closeSync=function(r){function e(t){r.apply(we,arguments),af()}return Object.defineProperty(e,ns,{value:r}),e}(we.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){Hn(we[rt]),require("assert").equal(we[rt].length,0)}));var of;global[rt]||sf(global,we[rt]);yp.exports=fp(OE(we));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!we.__patched&&(yp.exports=fp(we),we.__patched=!0);function fp(r){IE(r),r.gracefulify=fp,r.createReadStream=k,r.createWriteStream=R;var e=r.readFile;r.readFile=t;function t(x,j,L){return typeof j=="function"&&(L=j,j=null),ie(x,j,L);function ie(ee,B,K,oe){return e(ee,B,function(re){re&&(re.code==="EMFILE"||re.code==="ENFILE")?yo([ie,[ee,B,K],re,oe||Date.now(),Date.now()]):typeof K=="function"&&K.apply(this,arguments)})}}var n=r.writeFile;r.writeFile=o;function o(x,j,L,ie){return typeof L=="function"&&(ie=L,L=null),ee(x,j,L,ie);function ee(B,K,oe,re,M){return n(B,K,oe,function(W){W&&(W.code==="EMFILE"||W.code==="ENFILE")?yo([ee,[B,K,oe,re],W,M||Date.now(),Date.now()]):typeof re=="function"&&re.apply(this,arguments)})}}var i=r.appendFile;i&&(r.appendFile=a);function a(x,j,L,ie){return typeof L=="function"&&(ie=L,L=null),ee(x,j,L,ie);function ee(B,K,oe,re,M){return i(B,K,oe,function(W){W&&(W.code==="EMFILE"||W.code==="ENFILE")?yo([ee,[B,K,oe,re],W,M||Date.now(),Date.now()]):typeof re=="function"&&re.apply(this,arguments)})}}var s=r.copyFile;s&&(r.copyFile=c);function c(x,j,L,ie){return typeof L=="function"&&(ie=L,L=0),ee(x,j,L,ie);function ee(B,K,oe,re,M){return s(B,K,oe,function(W){W&&(W.code==="EMFILE"||W.code==="ENFILE")?yo([ee,[B,K,oe,re],W,M||Date.now(),Date.now()]):typeof re=="function"&&re.apply(this,arguments)})}}var l=r.readdir;r.readdir=m;var p=/^v[0-5]\./;function m(x,j,L){typeof j=="function"&&(L=j,j=null);var ie=p.test(process.version)?function(K,oe,re,M){return l(K,ee(K,oe,re,M))}:function(K,oe,re,M){return l(K,oe,ee(K,oe,re,M))};return ie(x,j,L);function ee(B,K,oe,re){return function(M,W){M&&(M.code==="EMFILE"||M.code==="ENFILE")?yo([ie,[B,K,oe],M,re||Date.now(),Date.now()]):(W&&W.sort&&W.sort(),typeof oe=="function"&&oe.call(this,M,W))}}}if(process.version.substr(0,4)==="v0.8"){var g=AE(r);v=g.ReadStream,u=g.WriteStream}var d=r.ReadStream;d&&(v.prototype=Object.create(d.prototype),v.prototype.open=P);var f=r.WriteStream;f&&(u.prototype=Object.create(f.prototype),u.prototype.open=S),Object.defineProperty(r,"ReadStream",{get:function(){return v},set:function(x){v=x},enumerable:!0,configurable:!0}),Object.defineProperty(r,"WriteStream",{get:function(){return u},set:function(x){u=x},enumerable:!0,configurable:!0});var y=v;Object.defineProperty(r,"FileReadStream",{get:function(){return y},set:function(x){y=x},enumerable:!0,configurable:!0});var C=u;Object.defineProperty(r,"FileWriteStream",{get:function(){return C},set:function(x){C=x},enumerable:!0,configurable:!0});function v(x,j){return this instanceof v?(d.apply(this,arguments),this):v.apply(Object.create(v.prototype),arguments)}function P(){var x=this;H(x.path,x.flags,x.mode,function(j,L){j?(x.autoClose&&x.destroy(),x.emit("error",j)):(x.fd=L,x.emit("open",L),x.read())})}function u(x,j){return this instanceof u?(f.apply(this,arguments),this):u.apply(Object.create(u.prototype),arguments)}function S(){var x=this;H(x.path,x.flags,x.mode,function(j,L){j?(x.destroy(),x.emit("error",j)):(x.fd=L,x.emit("open",L))})}function k(x,j){return new r.ReadStream(x,j)}function R(x,j){return new r.WriteStream(x,j)}var w=r.open;r.open=H;function H(x,j,L,ie){return typeof L=="function"&&(ie=L,L=null),ee(x,j,L,ie);function ee(B,K,oe,re,M){return w(B,K,oe,function(W,ae){W&&(W.code==="EMFILE"||W.code==="ENFILE")?yo([ee,[B,K,oe,re],W,M||Date.now(),Date.now()]):typeof re=="function"&&re.apply(this,arguments)})}}return r}function yo(r){Hn("ENQUEUE",r[0].name,r[1]),we[rt].push(r),gp()}var rs;function af(){for(var r=Date.now(),e=0;e<we[rt].length;++e)we[rt][e].length>2&&(we[rt][e][3]=r,we[rt][e][4]=r);gp()}function gp(){if(clearTimeout(rs),rs=void 0,we[rt].length!==0){var r=we[rt].shift(),e=r[0],t=r[1],n=r[2],o=r[3],i=r[4];if(o===void 0)Hn("RETRY",e.name,t),e.apply(null,t);else if(Date.now()-o>=6e4){Hn("TIMEOUT",e.name,t);var a=t.pop();typeof a=="function"&&a.call(null,n)}else{var s=Date.now()-i,c=Math.max(i-o,1),l=Math.min(c*1.2,100);s>=l?(Hn("RETRY",e.name,t),e.apply(null,t.concat([o]))):we[rt].push(r)}rs===void 0&&(rs=setTimeout(gp,0))}}});var lf=z((m_,cf)=>{function Gt(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}cf.exports=Gt;Gt.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};Gt.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null};Gt.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),t=this._timeouts.shift();else return!1;var n=this,o=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t);return this._options.unref&&o.unref(),!0};Gt.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Gt.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Gt.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Gt.prototype.start=Gt.prototype.try;Gt.prototype.errors=function(){return this._errors};Gt.prototype.attempts=function(){return this._attempts};Gt.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,a=(r[i]||0)+1;r[i]=a,a>=t&&(e=o,t=a)}return e}});var pf=z(zn=>{var LE=lf();zn.operation=function(r){var e=zn.timeouts(r);return new LE(e,{forever:r&&r.forever,unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};zn.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,a){return i-a}),n};zn.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*e.minTimeout*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};zn.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],a=r[i];r[i]=function(c){var l=zn.operation(e),p=Array.prototype.slice.call(arguments,1),m=p.pop();p.push(function(g){l.retry(g)||(g&&(arguments[0]=l.mainError()),m.apply(this,arguments))}),l.attempt(function(){c.apply(r,p)})}.bind(r,a),r[i].options=e}}});var uf=z((f_,df)=>{df.exports=pf()});var mf=z((g_,os)=>{os.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&os.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&os.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var Cf=z((y_,vo)=>{var ve=global.process,Kn=function(r){return r&&typeof r=="object"&&typeof r.removeListener=="function"&&typeof r.emit=="function"&&typeof r.reallyExit=="function"&&typeof r.listeners=="function"&&typeof r.kill=="function"&&typeof r.pid=="number"&&typeof r.on=="function"};Kn(ve)?(hf=require("assert"),Co=mf(),ff=/^win/i.test(ve.platform),Fi=require("events"),typeof Fi!="function"&&(Fi=Fi.EventEmitter),ve.__signal_exit_emitter__?Ze=ve.__signal_exit_emitter__:(Ze=ve.__signal_exit_emitter__=new Fi,Ze.count=0,Ze.emitted={}),Ze.infinite||(Ze.setMaxListeners(1/0),Ze.infinite=!0),vo.exports=function(r,e){if(!Kn(global.process))return function(){};hf.equal(typeof r,"function","a callback must be provided for exit handler"),So===!1&&Sp();var t="exit";e&&e.alwaysLast&&(t="afterexit");var n=function(){Ze.removeListener(t,r),Ze.listeners("exit").length===0&&Ze.listeners("afterexit").length===0&&is()};return Ze.on(t,r),n},is=function(){!So||!Kn(global.process)||(So=!1,Co.forEach(function(e){try{ve.removeListener(e,as[e])}catch{}}),ve.emit=ss,ve.reallyExit=vp,Ze.count-=1)},vo.exports.unload=is,Gn=function(e,t,n){Ze.emitted[e]||(Ze.emitted[e]=!0,Ze.emit(e,t,n))},as={},Co.forEach(function(r){as[r]=function(){if(Kn(global.process)){var t=ve.listeners(r);t.length===Ze.count&&(is(),Gn("exit",null,r),Gn("afterexit",null,r),ff&&r==="SIGHUP"&&(r="SIGINT"),ve.kill(ve.pid,r))}}}),vo.exports.signals=function(){return Co},So=!1,Sp=function(){So||!Kn(global.process)||(So=!0,Ze.count+=1,Co=Co.filter(function(e){try{return ve.on(e,as[e]),!0}catch{return!1}}),ve.emit=yf,ve.reallyExit=gf)},vo.exports.load=Sp,vp=ve.reallyExit,gf=function(e){Kn(global.process)&&(ve.exitCode=e||0,Gn("exit",ve.exitCode,null),Gn("afterexit",ve.exitCode,null),vp.call(ve,ve.exitCode))},ss=ve.emit,yf=function(e,t){if(e==="exit"&&Kn(global.process)){t!==void 0&&(ve.exitCode=t);var n=ss.apply(this,arguments);return Gn("exit",ve.exitCode,null),Gn("afterexit",ve.exitCode,null),n}else return ss.apply(this,arguments)}):vo.exports=function(){return function(){}};var hf,Co,ff,Fi,Ze,is,Gn,as,So,Sp,vp,gf,ss,yf});var vf=z((C_,kp)=>{"use strict";var Sf=Symbol();function NE(r,e,t){let n=e[Sf];if(n)return e.stat(r,(i,a)=>{if(i)return t(i);t(null,a.mtime,n)});let o=new Date(Math.ceil(Date.now()/1e3)*1e3+5);e.utimes(r,o,o,i=>{if(i)return t(i);e.stat(r,(a,s)=>{if(a)return t(a);let c=s.mtime.getTime()%1e3===0?"s":"ms";Object.defineProperty(e,Sf,{value:c}),t(null,s.mtime,c)})})}function WE(r){let e=Date.now();return r==="s"&&(e=Math.ceil(e/1e3)*1e3),new Date(e)}kp.exports.probe=NE;kp.exports.getMtime=WE});var Ef=z((S_,Di)=>{"use strict";var UE=require("path"),Rp=Cp(),jE=uf(),BE=Cf(),kf=vf(),Or={};function Mi(r,e){return e.lockfilePath||`${r}.lock`}function Ep(r,e,t){if(!e.realpath)return t(null,UE.resolve(r));e.fs.realpath(r,t)}function Pp(r,e,t){let n=Mi(r,e);e.fs.mkdir(n,o=>{if(!o)return kf.probe(n,e.fs,(i,a,s)=>{if(i)return e.fs.rmdir(n,()=>{}),t(i);t(null,a,s)});if(o.code!=="EEXIST")return t(o);if(e.stale<=0)return t(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file:r}));e.fs.stat(n,(i,a)=>{if(i)return i.code==="ENOENT"?Pp(r,{...e,stale:0},t):t(i);if(!wf(a,e))return t(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file:r}));Pf(r,e,s=>{if(s)return t(s);Pp(r,{...e,stale:0},t)})})})}function wf(r,e){return r.mtime.getTime()<Date.now()-e.stale}function Pf(r,e,t){e.fs.rmdir(Mi(r,e),n=>{if(n&&n.code!=="ENOENT")return t(n);t()})}function cs(r,e){let t=Or[r];t.updateTimeout||(t.updateDelay=t.updateDelay||e.update,t.updateTimeout=setTimeout(()=>{t.updateTimeout=null,e.fs.stat(t.lockfilePath,(n,o)=>{let i=t.lastUpdate+e.stale<Date.now();if(n)return n.code==="ENOENT"||i?wp(r,t,Object.assign(n,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,cs(r,e));if(!(t.mtime.getTime()===o.mtime.getTime()))return wp(r,t,Object.assign(new Error("Unable to update lock within the stale threshold"),{code:"ECOMPROMISED"}));let s=kf.getMtime(t.mtimePrecision);e.fs.utimes(t.lockfilePath,s,s,c=>{let l=t.lastUpdate+e.stale<Date.now();if(!t.released){if(c)return c.code==="ENOENT"||l?wp(r,t,Object.assign(c,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,cs(r,e));t.mtime=s,t.lastUpdate=Date.now(),t.updateDelay=null,cs(r,e)}})})},t.updateDelay),t.updateTimeout.unref&&t.updateTimeout.unref())}function wp(r,e,t){e.released=!0,e.updateTimeout&&clearTimeout(e.updateTimeout),Or[r]===e&&delete Or[r],e.options.onCompromised(t)}function VE(r,e,t){e={stale:1e4,update:null,realpath:!0,retries:0,fs:Rp,onCompromised:n=>{throw n},...e},e.retries=e.retries||0,e.retries=typeof e.retries=="number"?{retries:e.retries}:e.retries,e.stale=Math.max(e.stale||0,2e3),e.update=e.update==null?e.stale/2:e.update||0,e.update=Math.max(Math.min(e.update,e.stale/2),1e3),Ep(r,e,(n,o)=>{if(n)return t(n);let i=jE.operation(e.retries);i.attempt(()=>{Pp(o,e,(a,s,c)=>{if(i.retry(a))return;if(a)return t(i.mainError());let l=Or[o]={lockfilePath:Mi(o,e),mtime:s,mtimePrecision:c,options:e,lastUpdate:Date.now()};cs(o,e),t(null,p=>{if(l.released)return p&&p(Object.assign(new Error("Lock is already released"),{code:"ERELEASED"}));Rf(o,{...e,realpath:!1},p)})})})})}function Rf(r,e,t){e={fs:Rp,realpath:!0,...e},Ep(r,e,(n,o)=>{if(n)return t(n);let i=Or[o];if(!i)return t(Object.assign(new Error("Lock is not acquired/owned by you"),{code:"ENOTACQUIRED"}));i.updateTimeout&&clearTimeout(i.updateTimeout),i.released=!0,delete Or[o],Pf(o,e,t)})}function qE(r,e,t){e={stale:1e4,realpath:!0,fs:Rp,...e},e.stale=Math.max(e.stale||0,2e3),Ep(r,e,(n,o)=>{if(n)return t(n);e.fs.stat(Mi(o,e),(i,a)=>i?i.code==="ENOENT"?t(null,!1):t(i):t(null,!wf(a,e)))})}function $E(){return Or}BE(()=>{for(let r in Or){let e=Or[r].options;try{e.fs.rmdirSync(Mi(r,e))}catch{}}});Di.exports.lock=VE;Di.exports.unlock=Rf;Di.exports.check=qE;Di.exports.getLocks=$E});var Tf=z((v_,bf)=>{"use strict";var HE=Cp();function zE(r){let e=["mkdir","realpath","stat","rmdir","utimes"],t={...r};return e.forEach(n=>{t[n]=(...o)=>{let i=o.pop(),a;try{a=r[`${n}Sync`](...o)}catch(s){return i(s)}i(null,a)}}),t}function KE(r){return(...e)=>new Promise((t,n)=>{e.push((o,i)=>{o?n(o):t(i)}),r(...e)})}function GE(r){return(...e)=>{let t,n;if(e.push((o,i)=>{t=o,n=i}),r(...e),t)throw t;return n}}function JE(r){if(r={...r},r.fs=zE(r.fs||HE),typeof r.retries=="number"&&r.retries>0||r.retries&&typeof r.retries.retries=="number"&&r.retries.retries>0)throw Object.assign(new Error("Cannot use retries with the sync api"),{code:"ESYNC"});return r}bf.exports={toPromise:KE,toSync:GE,toSyncOptions:JE}});var Tp=z((k_,sn)=>{"use strict";var ko=Ef(),{toPromise:ls,toSync:ps,toSyncOptions:bp}=Tf();async function xf(r,e){let t=await ls(ko.lock)(r,e);return ls(t)}function YE(r,e){let t=ps(ko.lock)(r,bp(e));return ps(t)}function XE(r,e){return ls(ko.unlock)(r,e)}function QE(r,e){return ps(ko.unlock)(r,bp(e))}function ZE(r,e){return ls(ko.check)(r,e)}function eb(r,e){return ps(ko.check)(r,bp(e))}sn.exports=xf;sn.exports.lock=xf;sn.exports.unlock=XE;sn.exports.lockSync=YE;sn.exports.unlockSync=QE;sn.exports.check=ZE;sn.exports.checkSync=eb});async function Fp(r){return lr.promises.readFile(r,"utf8")}async function Le(r,e=""){try{return await Fp(r)}catch(t){if(F(t))return xp.debug("optional text file does not exist: %s",r),e;throw t}}async function He(r,e){await lr.promises.mkdir(ds.dirname(r),{recursive:!0}),await lr.promises.writeFile(r,e,"utf8")}async function If(r,e,t={}){await lr.promises.mkdir(ds.dirname(r),{recursive:!0});let n,o=t.timeoutMs??tb,i=t.retryDelayMs??rb;try{n=await Df.lock(r,{lockfilePath:r,realpath:!1,stale:t.staleMs??nb,retries:{retries:Math.ceil(o/i),factor:1,minTimeout:i,maxTimeout:i}})}catch(a){throw Ja(a)?new St("err.lock.busy",{lockPath:r,timeoutMs:o},{category:"lockBusy",cause:a instanceof Error?a:void 0,message:`file lock is held by another process: ${r}`}):a}try{return await e()}finally{if(n)try{await n()}catch(a){xp.warn(`release file lock failed: ${r}`,a)}}}async function cn(r,e){await lr.promises.mkdir(ds.dirname(r),{recursive:!0});let t=`${r}.succapp-tmp.${process.pid}.${Date.now()}.${(0,Ff.randomUUID)()}`;try{typeof e=="string"||Buffer.isBuffer(e)?await lr.promises.writeFile(t,e):await(0,Mf.pipeline)(e,lr.createWriteStream(t)),await lr.promises.rename(t,r)}catch(n){throw await lr.promises.rm(t,{force:!0}).catch(o=>{xp.debug("cleanup temporary write file failed: %s",t,o)}),n}}var lr,ds,Ff,Mf,Df,xp,tb,rb,nb,vt=pe(()=>{lr=b(require("fs")),ds=b(require("path")),Ff=require("crypto"),Mf=require("stream/promises"),Df=b(Tp());D();J();G();xp=T("common.file");tb=5e3,rb=100,nb=3e4});function Np(r){return Bb(r)??Vb(hs(r))}function hs(r){if(!r)return"";let e=r.replace(/\\/g,"/"),t=e.substring(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return(n>=0?t.substring(n+1):t).toLowerCase()}function Wb(r){if(!r)return!1;let e=Wp(r);return e.startsWith("text/")?!0:e==="image/svg+xml"||e==="application/json"||e==="application/javascript"||e==="application/xml"||e==="application/xhtml+xml"||e==="application/x-javascript"}function Ub(r){return r?Wp(r)==="application/json":!1}function hg(r){if(!r)return!1;let e=Wp(r);return e==="application/json"||e.endsWith("+json")}function fg(r){return Wb(Np(r))}function gg(r){return Ub(Np(r))}function jb(r){let e=new Map;for(let t of r.split(/\r?\n/)){let n=t.trim();if(!n||n.startsWith("#")||n.startsWith("!"))continue;let o=n.indexOf(":");o<0||e.set(yg(n.substring(0,o)),n.substring(o+1).trim())}return e}function Bb(r){let e=r.replace(/\\/g,"/").toLowerCase(),t=e.substring(e.lastIndexOf("/")+1),n=t.lastIndexOf("."),o=n>=0?t.substring(n+1):"";for(let i of Nb)if(i.basename===t||i.extension===o)return i.contentType}function Vb(r,e=Ob){return qb().get(yg(r))??e}function qb(){let r=$b(),e=Yn.statSync(r);return(!Ni||Ni.filePath!==r||Ni.mtimeMs!==e.mtimeMs)&&(Ni={filePath:r,mtimeMs:e.mtimeMs,contents:jb(Yn.readFileSync(r,"utf8"))}),Ni.contents}function yg(r){return(r??"").trim().replace(/^\./,"").toLowerCase()}function Wp(r){let e=r.indexOf(";");return(e>=0?r.substring(0,e):r).trim().toLowerCase()}function $b(){let r=bo.join(Hb(),"resources",_b);return U(Yn.existsSync(r),`Content-Type resource not found: ${r}. Run build/watch to sync it from BI project.`),r}function Hb(){for(let r=__dirname;;r=bo.dirname(r)){if(Yn.existsSync(bo.join(r,Lb)))return r;bo.dirname(r)===r&&uo(`Extension root not found from ${__dirname}`)}}var Yn,bo,Ob,_b,Lb,Ni,Nb,To=pe(()=>{Yn=b(require("fs")),bo=b(require("path"));Ce();Ob="application/octet-stream",_b="contents.properties",Lb="package.json",Nb=[]});async function Mg(r,e,t){let n=typeof e=="function"?e:t;if(U(n,"runConcurrently task is required"),r.length===0)return;let o=typeof e=="function"?void 0:e,i=new ze(o);await Promise.all(r.map(a=>i.addTask(()=>n(a))))}var rT,ze,pn=pe(()=>{$n();Ce();D();rT=8,ze=class{activeCount=0;canceledError;pendingSlots=[];idleWaiters=[];signal;abortListener;maxConcurrency;constructor(e){typeof e=="number"?this.maxConcurrency=e:(this.maxConcurrency=e?.maxConcurrency??rT,this.signal=e?.signal),this.maxConcurrency=Math.max(1,this.maxConcurrency),this.signal&&(this.abortListener=()=>this.cancel(ap(this.signal)),this.signal.aborted?this.abortListener():this.signal.addEventListener("abort",this.abortListener,{once:!0}))}async addTask(e){let t=await this.acquire();try{return mt(this.signal),await e()}catch(n){throw n instanceof Kt&&this.cancel(n),n}finally{t.release()}}async acquire(){if(mt(this.signal),this.canceledError)throw this.canceledError;if(this.activeCount<this.maxConcurrency)return this.activeCount++,this.createSlot();if(await new Promise((e,t)=>{this.pendingSlots.push({resolve:e,reject:t})}),mt(this.signal),this.canceledError)throw this.canceledError;return this.createSlot()}async waitAll(){this.isIdle()||await new Promise(e=>this.idleWaiters.push(e))}cancel(e){if(this.canceledError)return;this.canceledError=e instanceof Error?e:new Error(String(e??"ConTasksRunner cancelled")),this.disposeAbortListener();let t=this.pendingSlots.splice(0);for(let n of t)n.reject(this.canceledError);this.notifyIdleIfNeeded()}createSlot(){let e=!1;return{release:()=>{e||(e=!0,this.releaseSlot())}}}releaseSlot(){let e=this.pendingSlots.shift();if(e){e.resolve();return}this.activeCount--,this.notifyIdleIfNeeded()}isIdle(){return this.activeCount===0&&this.pendingSlots.length===0}notifyIdleIfNeeded(){if(this.isIdle())for(let e of this.idleWaiters.splice(0))e()}disposeAbortListener(){this.signal&&this.abortListener&&this.signal.removeEventListener("abort",this.abortListener)}}});function Pe(r){let e=r.replace(iT,"/").replace(/^\/+|\/+$/g,"");return e?"/"+e:"/"}function Og(r){let e=Pe(r);if(e.split("/").filter(Boolean).includes(aT))throw new Error(`Unsafe metadata path: ${r}`);return e}function _g(r){if(!r.startsWith("/"))throw new E("err.meta.invalidPath",{path:r,reason:"notAbsolute"});try{return Og(r)}catch(e){throw new E("err.meta.invalidPath",{path:r,reason:"unsafe"},{cause:e})}}function te(r,e){return ue.join(r,Pe(e).replace(/^\//,""))}function Lg(r,e){let t=ue.resolve(r),n=ue.resolve(t,Og(e).replace(/^\//,""));if(n!==t&&!n.startsWith(t+ue.sep))throw new Error(`Metadata path escapes root: ${e}`);return n}function pr(r){return ue.join(r,Xt)}function Wr(r,...e){return ue.join(pr(r),...e)}function dr(r){return ue.join(r,pT,dT)}function Xn(r){let e=r.replace(sT,"/");if(!e||ue.posix.isAbsolute(e)||ue.win32.isAbsolute(r)||ue.win32.isAbsolute(e))return;let t=e.split("/");return t.some(hT)?void 0:t.join("/")}function dn(r,e="relative path"){let t=Xn(r);if(!t)throw new Error(`invalid ${e}: ${r}`);return t}function Ng(r,e,t="relative path"){return ue.join(r,...dn(e,t).split("/"))}function Wt(r,e){return ue.isAbsolute(e)?ue.normalize(e):ue.resolve(r,e)}async function Z(r){try{return await vs.promises.access(r),!0}catch(e){if(F(e))return Ag.debug(`path does not exist: ${r}`),!1;throw e}}async function ks(r){let e;try{e=await vs.promises.stat(r)}catch(t){throw F(t)?new E("err.file.notFound",{path:r},{cause:t}):t}if(!e.isDirectory())throw new E("err.file.notDirectory",{path:r})}function vr(r){return r.trim().replace(nT,"").replace(oT,"-")}function kr(r,e){let t=ue.resolve(r),n=ue.resolve(e);if(n===t||!n.startsWith(t+ue.sep))return;let o=ue.relative(t,n);if(!o)return"/";let i=o.split(ue.sep);if(!i[0].startsWith("."))return Pe(i.join("/"))}function Ne(r){return r.replace(/^\//,"")}function We(r){let e=Pe(r);if(e==="/")return;let[t]=e.slice(1).split("/");return t?`/${t}`:void 0}function Tt(r){let e=r.trim();if(!e||e.startsWith(".")||e.includes("/")||e.includes("\\"))throw new Error(`invalid project name: ${r}`);return`/${e}`}function Q(r,e){let t=Ig(r),n=Ig(e);return t===n||n==="/"?!0:t.length<=n.length?!1:t.charCodeAt(n.length)===47&&t.startsWith(n)}function Fo(r,e,t,n){return Ss(r,t)||e&&Ss(e,t)?!0:!!n&&(Ss(r,n)||!!e&&Ss(e,n))}function Ss(r,e){return Q(r,e)||Q(e,r)}function Wg(r){let e;for(let t of r){let n=uT(t);if(!e){e=n;continue}e=mT(e,n)}if(e)return Pe(e.join("/"))}function uT(r){let e=Pe(r);if(e==="/")return[];let t=e.split("/").filter(Boolean);return t.pop(),t}function mT(r,e){let t=Math.min(r.length,e.length),n=[];for(let o=0;o<t&&r[o]===e[o];o++)n.push(r[o]);return n}function ft(r){let e=[...r].sort((n,o)=>{let i=Dg(n)-Dg(o);return i===0?n.localeCompare(o):i}),t=[];for(let n of e)t.some(o=>Q(n,o))||t.push(n);return t}function Dg(r){return r.split("/").filter(Boolean).length}function Ig(r){return ue.posix.normalize(Pe(r))}function hT(r){return!r||r===cT||r===lT}async function Qt(r){try{await vs.promises.rm(r,{recursive:!0,force:!0})}catch(e){if(!F(e))throw e;Ag.debug(`remove ignored missing path: ${r}`)}}function wr(r){return r.split("/").filter(Boolean).length}var vs,ue,Ag,nT,oT,iT,aT,sT,cT,lT,Xt,pT,dT,$=pe(()=>{vs=b(require("fs")),ue=b(require("path"));D();J();G();Ag=T("common.path"),nT=/^https?:\/\/|\/+$/gi,oT=/[^a-zA-Z0-9.]+/g,iT=/[\\/]+/g,aT="..",sT=/\\/g,cT=".",lT="..",Xt=".succapp",pT=".vscode",dT="settings.json"});var Pd=z((bU,lC)=>{lC.exports={LOCHDR:30,LOCSIG:67324752,LOCVER:4,LOCFLG:6,LOCHOW:8,LOCTIM:10,LOCCRC:14,LOCSIZ:18,LOCLEN:22,LOCNAM:26,LOCEXT:28,EXTSIG:134695760,EXTHDR:16,EXTCRC:4,EXTSIZ:8,EXTLEN:12,CENHDR:46,CENSIG:33639248,CENVEM:4,CENVER:6,CENFLG:8,CENHOW:10,CENTIM:12,CENCRC:16,CENSIZ:20,CENLEN:24,CENNAM:28,CENEXT:30,CENCOM:32,CENDSK:34,CENATT:36,CENATX:38,CENOFF:42,ENDHDR:22,ENDSIG:101010256,ENDSUB:8,ENDTOT:10,ENDSIZ:12,ENDOFF:16,ENDCOM:20,END64HDR:20,END64SIG:117853008,END64START:4,END64OFF:8,END64NUMDISKS:16,ZIP64SIG:101075792,ZIP64HDR:56,ZIP64LEAD:12,ZIP64SIZE:4,ZIP64VEM:12,ZIP64VER:14,ZIP64DSK:16,ZIP64DSKDIR:20,ZIP64SUB:24,ZIP64TOT:32,ZIP64SIZB:40,ZIP64OFF:48,ZIP64EXTRA:56,STORED:0,SHRUNK:1,REDUCED1:2,REDUCED2:3,REDUCED3:4,REDUCED4:5,IMPLODED:6,DEFLATED:8,ENHANCED_DEFLATED:9,PKWARE:10,BZIP2:12,LZMA:14,IBM_TERSE:18,IBM_LZ77:19,AES_ENCRYPT:99,FLG_ENC:1,FLG_COMP1:2,FLG_COMP2:4,FLG_DESC:8,FLG_ENH:16,FLG_PATCH:32,FLG_STR:64,FLG_EFS:2048,FLG_MSK:4096,FILE:2,BUFFER:1,NONE:0,EF_ID:0,EF_SIZE:2,ID_ZIP64:1,ID_AVINFO:7,ID_PFS:8,ID_OS2:9,ID_NTFS:10,ID_OPENVMS:12,ID_UNIX:13,ID_FORK:14,ID_PATCH:15,ID_X509_PKCS7:20,ID_X509_CERTID_F:21,ID_X509_CERTID_C:22,ID_STRONGENC:23,ID_RECORD_MGT:24,ID_X509_PKCS7_RL:25,ID_IBM1:101,ID_IBM2:102,ID_POSZIP:18064,EF_ZIP64_OR_32:4294967295,EF_ZIP64_OR_16:65535,EF_ZIP64_SUNCOMP:0,EF_ZIP64_SCOMP:8,EF_ZIP64_RHO:16,EF_ZIP64_DSN:24}});var _s=z(dC=>{var pC={INVALID_LOC:"Invalid LOC header (bad signature)",INVALID_CEN:"Invalid CEN header (bad signature)",INVALID_END:"Invalid END header (bad signature)",DESCRIPTOR_NOT_EXIST:"No descriptor present",DESCRIPTOR_UNKNOWN:"Unknown descriptor format",DESCRIPTOR_FAULTY:"Descriptor data is malformed",NO_DATA:"Nothing to decompress",BAD_CRC:"CRC32 checksum failed {0}",FILE_IN_THE_WAY:"There is a file in the way: {0}",UNKNOWN_METHOD:"Invalid/unsupported compression method",AVAIL_DATA:"inflate::Available inflate data did not terminate",INVALID_DISTANCE:"inflate::Invalid literal/length or distance code in fixed or dynamic block",TO_MANY_CODES:"inflate::Dynamic block code description: too many length or distance codes",INVALID_REPEAT_LEN:"inflate::Dynamic block code description: repeat more than specified lengths",INVALID_REPEAT_FIRST:"inflate::Dynamic block code description: repeat lengths with no first length",INCOMPLETE_CODES:"inflate::Dynamic block code description: code lengths codes incomplete",INVALID_DYN_DISTANCE:"inflate::Dynamic block code description: invalid distance code lengths",INVALID_CODES_LEN:"inflate::Dynamic block code description: invalid literal/length code lengths",INVALID_STORE_BLOCK:"inflate::Stored block length did not match one's complement",INVALID_BLOCK_TYPE:"inflate::Invalid block type (type == 3)",CANT_EXTRACT_FILE:"Could not extract the file",CANT_OVERRIDE:"Target file already exists",DISK_ENTRY_TOO_LARGE:"Number of disk entries is too large",NO_ZIP:"No zip file was loaded",NO_ENTRY:"Entry doesn't exist",DIRECTORY_CONTENT_ERROR:"A directory cannot have content",FILE_NOT_FOUND:'File not found: "{0}"',NOT_IMPLEMENTED:"Not implemented",INVALID_FILENAME:"Invalid filename",INVALID_FORMAT:"Invalid or unsupported zip format. No END header found",INVALID_PASS_PARAM:"Incompatible password parameter",WRONG_PASSWORD:"Wrong Password",COMMENT_TOO_LONG:"Comment is too long",EXTRA_FIELD_PARSE_ERROR:"Extra field parsing error"};function ax(r){return function(...e){return e.length&&(r=r.replace(/\{(\d)\}/g,(t,n)=>e[n]||"")),new Error("ADM-ZIP: "+r)}}for(let r of Object.keys(pC))dC[r]=ax(pC[r])});var gC=z((xU,fC)=>{var sx=require("fs"),Ge=require("path"),uC=Pd(),cx=_s(),lx=typeof process=="object"&&process.platform==="win32",mC=r=>typeof r=="object"&&r!==null,hC=new Uint32Array(256).map((r,e)=>{for(let t=0;t<8;t++)e&1?e=3988292384^e>>>1:e>>>=1;return e>>>0});function Me(r){this.sep=Ge.sep,this.fs=sx,mC(r)&&mC(r.fs)&&typeof r.fs.statSync=="function"&&(this.fs=r.fs)}fC.exports=Me;Me.prototype.makeDir=function(r){let e=this;function t(n){let o=n.split(e.sep)[0];n.split(e.sep).forEach(function(i){if(!(!i||i.substr(-1,1)===":")){o+=e.sep+i;var a;try{a=e.fs.statSync(o)}catch(s){if(s.message&&s.message.startsWith("ENOENT"))e.fs.mkdirSync(o);else throw s}if(a&&a.isFile())throw cx.FILE_IN_THE_WAY(`"${o}"`)}})}t(r)};Me.prototype.writeFileTo=function(r,e,t,n){let o=this;if(o.fs.existsSync(r)){if(!t)return!1;var i=o.fs.statSync(r);if(i.isDirectory())return!1}var a=Ge.dirname(r);o.fs.existsSync(a)||o.makeDir(a);var s;try{s=o.fs.openSync(r,"w",438)}catch{o.fs.chmodSync(r,438),s=o.fs.openSync(r,"w",438)}if(s)try{o.fs.writeSync(s,e,0,e.length,0)}finally{o.fs.closeSync(s)}return o.fs.chmodSync(r,n||438),!0};Me.prototype.writeFileToAsync=function(r,e,t,n,o){typeof n=="function"&&(o=n,n=void 0);let i=this;i.fs.exists(r,function(a){if(a&&!t)return o(!1);i.fs.stat(r,function(s,c){if(a&&c.isDirectory())return o(!1);var l=Ge.dirname(r);i.fs.exists(l,function(p){p||i.makeDir(l),i.fs.open(r,"w",438,function(m,g){m?i.fs.chmod(r,438,function(){i.fs.open(r,"w",438,function(d,f){i.fs.write(f,e,0,e.length,0,function(){i.fs.close(f,function(){i.fs.chmod(r,n||438,function(){o(!0)})})})})}):g?i.fs.write(g,e,0,e.length,0,function(){i.fs.close(g,function(){i.fs.chmod(r,n||438,function(){o(!0)})})}):i.fs.chmod(r,n||438,function(){o(!0)})})})})})};Me.prototype.findFiles=function(r){let e=this;function t(n,o,i){typeof o=="boolean"&&(i=o,o=void 0);let a=[];return e.fs.readdirSync(n).forEach(function(s){let c=Ge.join(n,s),l=e.fs.statSync(c);(!o||o.test(c))&&a.push(Ge.normalize(c)+(l.isDirectory()?e.sep:"")),l.isDirectory()&&i&&(a=a.concat(t(c,o,i)))}),a}return t(r,void 0,!0)};Me.prototype.findFilesAsync=function(r,e){let t=this,n=[];t.fs.readdir(r,function(o,i){if(o)return e(o);let a=i.length;if(!a)return e(null,n);i.forEach(function(s){s=Ge.join(r,s),t.fs.stat(s,function(c,l){if(c)return e(c);l&&(n.push(Ge.normalize(s)+(l.isDirectory()?t.sep:"")),l.isDirectory()?t.findFilesAsync(s,function(p,m){if(p)return e(p);n=n.concat(m),--a||e(null,n)}):--a||e(null,n))})})})};Me.prototype.getAttributes=function(){};Me.prototype.setAttributes=function(){};Me.crc32update=function(r,e){return hC[(r^e)&255]^r>>>8};Me.crc32=function(r){typeof r=="string"&&(r=Buffer.from(r,"utf8"));let e=r.length,t=-1;for(let n=0;n<e;)t=Me.crc32update(t,r[n++]);return~t>>>0};Me.methodToString=function(r){switch(r){case uC.STORED:return"STORED ("+r+")";case uC.DEFLATED:return"DEFLATED ("+r+")";default:return"UNSUPPORTED ("+r+")"}};Me.canonical=function(r){if(!r)return"";let e=Ge.posix.normalize("/"+r.split("\\").join("/"));return Ge.join(".",e)};Me.zipnamefix=function(r){if(!r)return"";let e=Ge.posix.normalize("/"+r.split("\\").join("/"));return Ge.posix.join(".",e)};Me.findLast=function(r,e){if(!Array.isArray(r))throw new TypeError("arr is not array");let t=r.length>>>0;for(let n=t-1;n>=0;n--)if(e(r[n],n,r))return r[n]};Me.sanitize=function(r,e){r=Ge.resolve(Ge.normalize(r));for(var t=e.split("/"),n=0,o=t.length;n<o;n++){var i=Ge.normalize(Ge.join(r,t.slice(n,o).join(Ge.sep)));if(i.indexOf(r)===0)return i}return Ge.normalize(Ge.join(r,Ge.basename(e)))};Me.toBuffer=function(e,t){return Buffer.isBuffer(e)?e:e instanceof Uint8Array?Buffer.from(e):typeof e=="string"?t(e):Buffer.alloc(0)};Me.readBigUInt64LE=function(r,e){let t=r.readUInt32LE(e);return r.readUInt32LE(e+4)*4294967296+t};Me.fromDOS2Date=function(r){return new Date((r>>25&127)+1980,Math.max((r>>21&15)-1,0),Math.max(r>>16&31,1),r>>11&31,r>>5&63,(r&31)<<1)};Me.fromDate2DOS=function(r){let e=0,t=0;return r.getFullYear()>1979&&(e=(r.getFullYear()-1980&127)<<9|r.getMonth()+1<<5|r.getDate(),t=r.getHours()<<11|r.getMinutes()<<5|r.getSeconds()>>1),e<<16|t};Me.isWin=lx;Me.crcTable=hC});var CC=z((FU,yC)=>{var px=require("path");yC.exports=function(r,{fs:e}){var t=r||"",n=i(),o=null;function i(){return{directory:!1,readonly:!1,hidden:!1,executable:!1,mtime:0,atime:0}}return t&&e.existsSync(t)?(o=e.statSync(t),n.directory=o.isDirectory(),n.mtime=o.mtime,n.atime=o.atime,n.executable=(73&o.mode)!==0,n.readonly=(128&o.mode)===0,n.hidden=px.basename(t)[0]==="."):console.warn("Invalid path: "+t),{get directory(){return n.directory},get readOnly(){return n.readonly},get hidden(){return n.hidden},get mtime(){return n.mtime},get atime(){return n.atime},get executable(){return n.executable},decodeAttributes:function(){},encodeAttributes:function(){},toJSON:function(){return{path:t,isDirectory:n.directory,isReadOnly:n.readonly,isHidden:n.hidden,isExecutable:n.executable,mTime:n.mtime,aTime:n.atime}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var vC=z((MU,SC)=>{SC.exports={efs:!0,encode:r=>Buffer.from(r,"utf8"),decode:r=>r.toString("utf8")}});var $o=z((DU,qo)=>{qo.exports=gC();qo.exports.Constants=Pd();qo.exports.Errors=_s();qo.exports.FileAttr=CC();qo.exports.decoder=vC()});var wC=z((IU,kC)=>{var wn=$o(),I=wn.Constants;kC.exports=function(){var r=20,e=10,t=0,n=0,o=0,i=0,a=0,s=0,c=0,l=0,p=0,m=0,g=0,d=0,f=0;r|=wn.isWin?2560:768,t|=I.FLG_EFS;let y={extraLen:0},C=u=>Math.max(0,u)>>>0,v=u=>Math.max(0,u)&65535,P=u=>Math.max(0,u)&255;return o=wn.fromDate2DOS(new Date),{get made(){return r},set made(u){r=u},get version(){return e},set version(u){e=u},get flags(){return t},set flags(u){t=u},get flags_efs(){return(t&I.FLG_EFS)>0},set flags_efs(u){u?t|=I.FLG_EFS:t&=~I.FLG_EFS},get flags_desc(){return(t&I.FLG_DESC)>0},set flags_desc(u){u?t|=I.FLG_DESC:t&=~I.FLG_DESC},get method(){return n},set method(u){switch(u){case I.STORED:this.version=10;case I.DEFLATED:default:this.version=20}n=u},get time(){return wn.fromDOS2Date(this.timeval)},set time(u){u=new Date(u),this.timeval=wn.fromDate2DOS(u)},get timeval(){return o},set timeval(u){o=C(u)},get timeHighByte(){return P(o>>>8)},get crc(){return i},set crc(u){i=C(u)},get compressedSize(){return a},set compressedSize(u){a=C(u)},get size(){return s},set size(u){s=C(u)},get fileNameLength(){return c},set fileNameLength(u){c=u},get extraLength(){return l},set extraLength(u){l=u},get extraLocalLength(){return y.extraLen},set extraLocalLength(u){y.extraLen=u},get commentLength(){return p},set commentLength(u){p=u},get diskNumStart(){return m},set diskNumStart(u){m=C(u)},get inAttr(){return g},set inAttr(u){g=C(u)},get attr(){return d},set attr(u){d=C(u)},get fileAttr(){return(d||0)>>16&4095},get offset(){return f},set offset(u){f=C(u)},get encrypted(){return(t&I.FLG_ENC)===I.FLG_ENC},get centralHeaderSize(){return I.CENHDR+c+l+p},get realDataOffset(){return f+I.LOCHDR+y.fnameLen+y.extraLen},get localHeader(){return y},loadLocalHeaderFromBinary:function(u){var S=u.slice(f,f+I.LOCHDR);if(S.readUInt32LE(0)!==I.LOCSIG)throw wn.Errors.INVALID_LOC();y.version=S.readUInt16LE(I.LOCVER),y.flags=S.readUInt16LE(I.LOCFLG),y.flags_desc=(y.flags&I.FLG_DESC)>0,y.method=S.readUInt16LE(I.LOCHOW),y.time=S.readUInt32LE(I.LOCTIM),y.crc=S.readUInt32LE(I.LOCCRC),y.compressedSize=S.readUInt32LE(I.LOCSIZ),y.size=S.readUInt32LE(I.LOCLEN),y.fnameLen=S.readUInt16LE(I.LOCNAM),y.extraLen=S.readUInt16LE(I.LOCEXT);let k=f+I.LOCHDR+y.fnameLen,R=k+y.extraLen;return u.slice(k,R)},loadFromBinary:function(u){if(u.length!==I.CENHDR||u.readUInt32LE(0)!==I.CENSIG)throw wn.Errors.INVALID_CEN();r=u.readUInt16LE(I.CENVEM),e=u.readUInt16LE(I.CENVER),t=u.readUInt16LE(I.CENFLG),n=u.readUInt16LE(I.CENHOW),o=u.readUInt32LE(I.CENTIM),i=u.readUInt32LE(I.CENCRC),a=u.readUInt32LE(I.CENSIZ),s=u.readUInt32LE(I.CENLEN),c=u.readUInt16LE(I.CENNAM),l=u.readUInt16LE(I.CENEXT),p=u.readUInt16LE(I.CENCOM),m=u.readUInt16LE(I.CENDSK),g=u.readUInt16LE(I.CENATT),d=u.readUInt32LE(I.CENATX),f=u.readUInt32LE(I.CENOFF)},localHeaderToBinary:function(){var u=Buffer.alloc(I.LOCHDR);return u.writeUInt32LE(I.LOCSIG,0),u.writeUInt16LE(e,I.LOCVER),u.writeUInt16LE(t,I.LOCFLG),u.writeUInt16LE(n,I.LOCHOW),u.writeUInt32LE(o,I.LOCTIM),u.writeUInt32LE(i,I.LOCCRC),u.writeUInt32LE(a,I.LOCSIZ),u.writeUInt32LE(s,I.LOCLEN),u.writeUInt16LE(c,I.LOCNAM),u.writeUInt16LE(y.extraLen,I.LOCEXT),u},centralHeaderToBinary:function(){var u=Buffer.alloc(I.CENHDR+c+l+p);return u.writeUInt32LE(I.CENSIG,0),u.writeUInt16LE(r,I.CENVEM),u.writeUInt16LE(e,I.CENVER),u.writeUInt16LE(t,I.CENFLG),u.writeUInt16LE(n,I.CENHOW),u.writeUInt32LE(o,I.CENTIM),u.writeUInt32LE(i,I.CENCRC),u.writeUInt32LE(a,I.CENSIZ),u.writeUInt32LE(s,I.CENLEN),u.writeUInt16LE(c,I.CENNAM),u.writeUInt16LE(l,I.CENEXT),u.writeUInt16LE(p,I.CENCOM),u.writeUInt16LE(m,I.CENDSK),u.writeUInt16LE(g,I.CENATT),u.writeUInt32LE(d,I.CENATX),u.writeUInt32LE(f,I.CENOFF),u},toJSON:function(){let u=function(S){return S+" bytes"};return{made:r,version:e,flags:t,method:wn.methodToString(n),time:this.time,crc:"0x"+i.toString(16).toUpperCase(),compressedSize:u(a),size:u(s),fileNameLength:u(c),extraLength:u(l),commentLength:u(p),diskNumStart:m,inAttr:g,attr:d,offset:f,centralHeaderSize:u(I.CENHDR+c+l+p)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var RC=z((AU,PC)=>{var Ho=$o(),Ee=Ho.Constants;PC.exports=function(){var r=0,e=0,t=0,n=0,o=0;return{get diskEntries(){return r},set diskEntries(i){r=e=i},get totalEntries(){return e},set totalEntries(i){e=r=i},get size(){return t},set size(i){t=i},get offset(){return n},set offset(i){n=i},get commentLength(){return o},set commentLength(i){o=i},get mainHeaderSize(){return Ee.ENDHDR+o},loadFromBinary:function(i){if((i.length!==Ee.ENDHDR||i.readUInt32LE(0)!==Ee.ENDSIG)&&(i.length<Ee.ZIP64HDR||i.readUInt32LE(0)!==Ee.ZIP64SIG))throw Ho.Errors.INVALID_END();i.readUInt32LE(0)===Ee.ENDSIG?(r=i.readUInt16LE(Ee.ENDSUB),e=i.readUInt16LE(Ee.ENDTOT),t=i.readUInt32LE(Ee.ENDSIZ),n=i.readUInt32LE(Ee.ENDOFF),o=i.readUInt16LE(Ee.ENDCOM)):(r=Ho.readBigUInt64LE(i,Ee.ZIP64SUB),e=Ho.readBigUInt64LE(i,Ee.ZIP64TOT),t=Ho.readBigUInt64LE(i,Ee.ZIP64SIZE),n=Ho.readBigUInt64LE(i,Ee.ZIP64OFF),o=0)},toBinary:function(){var i=Buffer.alloc(Ee.ENDHDR+o);return i.writeUInt32LE(Ee.ENDSIG,0),i.writeUInt32LE(0,4),i.writeUInt16LE(r,Ee.ENDSUB),i.writeUInt16LE(e,Ee.ENDTOT),i.writeUInt32LE(t,Ee.ENDSIZ),i.writeUInt32LE(n,Ee.ENDOFF),i.writeUInt16LE(o,Ee.ENDCOM),i.fill(" ",Ee.ENDHDR),i},toJSON:function(){let i=function(a,s){let c=a.toString(16).toUpperCase();for(;c.length<s;)c="0"+c;return"0x"+c};return{diskEntries:r,totalEntries:e,size:t+" bytes",offset:i(n,4),commentLength:o}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var Ed=z(Rd=>{Rd.EntryHeader=wC();Rd.MainHeader=RC()});var bC=z((_U,EC)=>{EC.exports=function(r){var e=require("zlib"),t={chunkSize:(parseInt(r.length/1024)+1)*1024};return{deflate:function(){return e.deflateRawSync(r,t)},deflateAsync:function(n){var o=e.createDeflateRaw(t),i=[],a=0;o.on("data",function(s){i.push(s),a+=s.length}),o.on("end",function(){var s=Buffer.alloc(a),c=0;s.fill(0);for(var l=0;l<i.length;l++){var p=i[l];p.copy(s,c),c+=p.length}n&&n(s)}),o.end(r)}}}});var xC=z((LU,TC)=>{var dx=+(process.versions?process.versions.node:"").split(".")[0]||0;TC.exports=function(r,e){var t=require("zlib");let n=dx>=15&&e>0?{maxOutputLength:e}:{};return{inflate:function(){return t.inflateRawSync(r,n)},inflateAsync:function(o){var i=t.createInflateRaw(n),a=[],s=0;i.on("data",function(c){a.push(c),s+=c.length}),i.on("end",function(){var c=Buffer.alloc(s),l=0;c.fill(0);for(var p=0;p<a.length;p++){var m=a[p];m.copy(c,l),l+=m.length}o&&o(c)}),i.end(r)}}}});var AC=z((NU,IC)=>{"use strict";var{randomFillSync:FC}=require("crypto"),ux=_s(),mx=new Uint32Array(256).map((r,e)=>{for(let t=0;t<8;t++)e&1?e=e>>>1^3988292384:e>>>=1;return e>>>0}),DC=(r,e)=>Math.imul(r,e)>>>0,MC=(r,e)=>mx[(r^e)&255]^r>>>8,$i=()=>typeof FC=="function"?FC(Buffer.alloc(12)):$i.node();$i.node=()=>{let r=Buffer.alloc(12),e=r.length;for(let t=0;t<e;t++)r[t]=Math.random()*256&255;return r};var Ls={genSalt:$i};function Ns(r){let e=Buffer.isBuffer(r)?r:Buffer.from(r);this.keys=new Uint32Array([305419896,591751049,878082192]);for(let t=0;t<e.length;t++)this.updateKeys(e[t])}Ns.prototype.updateKeys=function(r){let e=this.keys;return e[0]=MC(e[0],r),e[1]+=e[0]&255,e[1]=DC(e[1],134775813)+1,e[2]=MC(e[2],e[1]>>>24),r};Ns.prototype.next=function(){let r=(this.keys[2]|2)>>>0;return DC(r,r^1)>>8&255};function hx(r){let e=new Ns(r);return function(t){let n=Buffer.alloc(t.length),o=0;for(let i of t)n[o++]=e.updateKeys(i^e.next());return n}}function fx(r){let e=new Ns(r);return function(t,n,o=0){n||(n=Buffer.alloc(t.length));for(let i of t){let a=e.next();n[o++]=i^a,e.updateKeys(i)}return n}}function gx(r,e,t){if(!r||!Buffer.isBuffer(r)||r.length<12)return Buffer.alloc(0);let n=hx(t),o=n(r.slice(0,12)),i=(e.flags&8)===8?e.timeHighByte:e.crc>>>24;if(o[11]!==i)throw ux.WRONG_PASSWORD();return n(r.slice(12))}function yx(r){Buffer.isBuffer(r)&&r.length>=12?Ls.genSalt=function(){return r.slice(0,12)}:r==="node"?Ls.genSalt=$i.node:Ls.genSalt=$i}function Cx(r,e,t,n=!1){r==null&&(r=Buffer.alloc(0)),Buffer.isBuffer(r)||(r=Buffer.from(r.toString()));let o=fx(t),i=Ls.genSalt();i[11]=e.crc>>>24&255,n&&(i[10]=e.crc>>>16&255);let a=Buffer.alloc(r.length+12);return o(i,a),o(r,a,12)}IC.exports={decrypt:gx,encrypt:Cx,_salter:yx}});var OC=z(Ws=>{Ws.Deflater=bC();Ws.Inflater=xC();Ws.ZipCrypto=AC()});var Td=z((UU,_C)=>{var le=$o(),Sx=Ed(),De=le.Constants,bd=OC();_C.exports=function(r,e){var t=new Sx.EntryHeader,n=Buffer.alloc(0),o=Buffer.alloc(0),i=!1,a=null,s=Buffer.alloc(0),c=Buffer.alloc(0),l=!0;let p=r,m=typeof p.decoder=="object"?p.decoder:le.decoder;l=m.hasOwnProperty("efs")?m.efs:!1;function g(){return!e||!(e instanceof Uint8Array)?Buffer.alloc(0):(c=t.loadLocalHeaderFromBinary(e),e.slice(t.realDataOffset,t.realDataOffset+t.compressedSize))}function d(u){if(!t.flags_desc&&!t.localHeader.flags_desc){if(le.crc32(u)!==t.localHeader.crc)return!1}else{let S={},k=t.realDataOffset+t.compressedSize;if(e.readUInt32LE(k)==De.LOCSIG||e.readUInt32LE(k)==De.CENSIG)throw le.Errors.DESCRIPTOR_NOT_EXIST();if(e.readUInt32LE(k)==De.EXTSIG)S.crc=e.readUInt32LE(k+De.EXTCRC),S.compressedSize=e.readUInt32LE(k+De.EXTSIZ),S.size=e.readUInt32LE(k+De.EXTLEN);else if(e.readUInt16LE(k+12)===19280)S.crc=e.readUInt32LE(k+De.EXTCRC-4),S.compressedSize=e.readUInt32LE(k+De.EXTSIZ-4),S.size=e.readUInt32LE(k+De.EXTLEN-4);else throw le.Errors.DESCRIPTOR_UNKNOWN();if(S.compressedSize!==t.compressedSize||S.size!==t.size||S.crc!==t.crc)throw le.Errors.DESCRIPTOR_FAULTY();if(le.crc32(u)!==S.crc)return!1}return!0}function f(u,S,k){if(typeof S>"u"&&typeof u=="string"&&(k=u,u=void 0),i)return u&&S&&S(Buffer.alloc(0),le.Errors.DIRECTORY_CONTENT_ERROR()),Buffer.alloc(0);var R=g();if(R.length===0)return u&&S&&S(R),R;if(t.encrypted){if(typeof k!="string"&&!Buffer.isBuffer(k))throw le.Errors.INVALID_PASS_PARAM();R=bd.ZipCrypto.decrypt(R,t,k)}var w=Buffer.alloc(t.size);switch(t.method){case le.Constants.STORED:if(R.copy(w),d(w))return u&&S&&S(w),w;throw u&&S&&S(w,le.Errors.BAD_CRC()),le.Errors.BAD_CRC();case le.Constants.DEFLATED:var H=new bd.Inflater(R,t.size);if(u)H.inflateAsync(function(x){x.copy(x,0),S&&(d(x)?S(x):S(x,le.Errors.BAD_CRC()))});else{if(H.inflate(w).copy(w,0),!d(w))throw le.Errors.BAD_CRC(`"${m.decode(n)}"`);return w}break;default:throw u&&S&&S(Buffer.alloc(0),le.Errors.UNKNOWN_METHOD()),le.Errors.UNKNOWN_METHOD()}}function y(u,S){if((!a||!a.length)&&Buffer.isBuffer(e))return u&&S&&S(g()),g();if(a.length&&!i){var k;switch(t.method){case le.Constants.STORED:return t.compressedSize=t.size,k=Buffer.alloc(a.length),a.copy(k),u&&S&&S(k),k;default:case le.Constants.DEFLATED:var R=new bd.Deflater(a);if(u)R.deflateAsync(function(H){k=Buffer.alloc(H.length),t.compressedSize=H.length,H.copy(k),S&&S(k)});else{var w=R.deflate();return t.compressedSize=w.length,w}R=null;break}}else if(u&&S)S(Buffer.alloc(0));else return Buffer.alloc(0)}function C(u,S){return le.readBigUInt64LE(u,S)}function v(u){try{for(var S=0,k,R,w;S+4<u.length;)k=u.readUInt16LE(S),S+=2,R=u.readUInt16LE(S),S+=2,w=u.slice(S,S+R),S+=R,De.ID_ZIP64===k&&P(w)}catch{throw le.Errors.EXTRA_FIELD_PARSE_ERROR()}}function P(u){var S,k,R,w;u.length>=De.EF_ZIP64_SCOMP&&(S=C(u,De.EF_ZIP64_SUNCOMP),t.size===De.EF_ZIP64_OR_32&&(t.size=S)),u.length>=De.EF_ZIP64_RHO&&(k=C(u,De.EF_ZIP64_SCOMP),t.compressedSize===De.EF_ZIP64_OR_32&&(t.compressedSize=k)),u.length>=De.EF_ZIP64_DSN&&(R=C(u,De.EF_ZIP64_RHO),t.offset===De.EF_ZIP64_OR_32&&(t.offset=R)),u.length>=De.EF_ZIP64_DSN+4&&(w=u.readUInt32LE(De.EF_ZIP64_DSN),t.diskNumStart===De.EF_ZIP64_OR_16&&(t.diskNumStart=w))}return{get entryName(){return m.decode(n)},get rawEntryName(){return n},set entryName(u){n=le.toBuffer(u,m.encode);var S=n[n.length-1];i=S===47||S===92,t.fileNameLength=n.length},get efs(){return typeof l=="function"?l(this.entryName):l},get extra(){return s},set extra(u){s=u,t.extraLength=u.length,v(u)},get comment(){return m.decode(o)},set comment(u){if(o=le.toBuffer(u,m.encode),t.commentLength=o.length,o.length>65535)throw le.Errors.COMMENT_TOO_LONG()},get name(){var u=m.decode(n);return i?u.substr(u.length-1).split("/").pop():u.split("/").pop()},get isDirectory(){return i},getCompressedData:function(){return y(!1,null)},getCompressedDataAsync:function(u){y(!0,u)},setData:function(u){a=le.toBuffer(u,le.decoder.encode),!i&&a.length?(t.size=a.length,t.method=le.Constants.DEFLATED,t.crc=le.crc32(u),t.changed=!0):t.method=le.Constants.STORED},getData:function(u){return t.changed?a:f(!1,null,u)},getDataAsync:function(u,S){t.changed?u(a):f(!0,u,S)},set attr(u){t.attr=u},get attr(){return t.attr},set header(u){t.loadFromBinary(u)},get header(){return t},packCentralHeader:function(){t.flags_efs=this.efs,t.extraLength=s.length;var u=t.centralHeaderToBinary(),S=le.Constants.CENHDR;return n.copy(u,S),S+=n.length,s.copy(u,S),S+=t.extraLength,o.copy(u,S),u},packLocalHeader:function(){let u=0;t.flags_efs=this.efs,t.extraLocalLength=c.length;let S=t.localHeaderToBinary(),k=Buffer.alloc(S.length+n.length+t.extraLocalLength);return S.copy(k,u),u+=S.length,n.copy(k,u),u+=n.length,c.copy(k,u),u+=c.length,k},toJSON:function(){let u=function(S){return"<"+(S&&S.length+" bytes buffer"||"null")+">"};return{entryName:this.entryName,name:this.name,comment:this.comment,isDirectory:this.isDirectory,header:t.toJSON(),compressedData:u(e),data:u(a)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var WC=z((jU,NC)=>{var LC=Td(),vx=Ed(),ot=$o();NC.exports=function(r,e){var t=[],n={},o=Buffer.alloc(0),i=new vx.MainHeader,a=!1,s=null;let c=new Set,l=e,{noSort:p,decoder:m}=l;r?f(l.readEntries):a=!0;function g(){let C=new Set;for(let v of Object.keys(n)){let P=v.split("/");if(P.pop(),!!P.length)for(let u=0;u<P.length;u++){let S=P.slice(0,u+1).join("/")+"/";C.add(S)}}for(let v of C)if(!(v in n)){let P=new LC(l);P.entryName=v,P.attr=16,P.temporary=!0,t.push(P),n[P.entryName]=P,c.add(P)}}function d(){if(a=!0,n={},i.diskEntries>(r.length-i.offset)/ot.Constants.CENHDR)throw ot.Errors.DISK_ENTRY_TOO_LARGE();t=new Array(i.diskEntries);for(var C=i.offset,v=0;v<t.length;v++){var P=C,u=new LC(l,r);u.header=r.slice(P,P+=ot.Constants.CENHDR),u.entryName=r.slice(P,P+=u.header.fileNameLength),u.header.extraLength&&(u.extra=r.slice(P,P+=u.header.extraLength)),u.header.commentLength&&(u.comment=r.slice(P,P+u.header.commentLength)),C+=u.header.centralHeaderSize,t[v]=u,n[u.entryName]=u}c.clear(),g()}function f(C){var v=r.length-ot.Constants.ENDHDR,P=Math.max(0,v-65535),u=P,S=r.length,k=-1,R=0;for((typeof l.trailingSpace=="boolean"?l.trailingSpace:!1)&&(P=0),v;v>=u;v--)if(r[v]===80){if(r.readUInt32LE(v)===ot.Constants.ENDSIG){k=v,R=v,S=v+ot.Constants.ENDHDR,u=v-ot.Constants.END64HDR;continue}if(r.readUInt32LE(v)===ot.Constants.END64SIG){u=P;continue}if(r.readUInt32LE(v)===ot.Constants.ZIP64SIG){k=v,S=v+ot.readBigUInt64LE(r,v+ot.Constants.ZIP64SIZE)+ot.Constants.ZIP64LEAD;break}}if(k==-1)throw ot.Errors.INVALID_FORMAT();i.loadFromBinary(r.slice(k,S)),i.commentLength&&(o=r.slice(R+ot.Constants.ENDHDR)),C&&d()}function y(){t.length>1&&!p&&t.sort((C,v)=>C.entryName.toLowerCase().localeCompare(v.entryName.toLowerCase()))}return{get entries(){return a||d(),t.filter(C=>!c.has(C))},get comment(){return m.decode(o)},set comment(C){o=ot.toBuffer(C,m.encode),i.commentLength=o.length},getEntryCount:function(){return a?t.length:i.diskEntries},forEach:function(C){this.entries.forEach(C)},getEntry:function(C){return a||d(),n[C]||null},setEntry:function(C){a||d(),t.push(C),n[C.entryName]=C,i.totalEntries=t.length},deleteFile:function(C,v=!0){a||d();let P=n[C];this.getEntryChildren(P,v).map(S=>S.entryName).forEach(this.deleteEntry)},deleteEntry:function(C){a||d();let v=n[C],P=t.indexOf(v);P>=0&&(t.splice(P,1),delete n[C],i.totalEntries=t.length)},getEntryChildren:function(C,v=!0){if(a||d(),typeof C=="object")if(C.isDirectory&&v){let P=[],u=C.entryName;for(let S of t)S.entryName.startsWith(u)&&P.push(S);return P}else return[C];return[]},getChildCount:function(C){if(C&&C.isDirectory){let v=this.getEntryChildren(C);return v.includes(C)?v.length-1:v.length}return 0},compressToBuffer:function(){a||d(),y();let C=[],v=[],P=0,u=0;i.size=0,i.offset=0;let S=0;for(let w of this.entries){let H=w.getCompressedData();w.header.offset=u;let x=w.packLocalHeader(),j=x.length+H.length;u+=j,C.push(x),C.push(H);let L=w.packCentralHeader();v.push(L),i.size+=L.length,P+=j+L.length,S++}P+=i.mainHeaderSize,i.offset=u,i.totalEntries=S,u=0;let k=Buffer.alloc(P);for(let w of C)w.copy(k,u),u+=w.length;for(let w of v)w.copy(k,u),u+=w.length;let R=i.toBinary();return o&&o.copy(R,ot.Constants.ENDHDR),R.copy(k,u),r=k,a=!1,k},toAsyncBuffer:function(C,v,P,u){try{a||d(),y();let S=[],k=[],R=0,w=0,H=0;i.size=0,i.offset=0;let x=function(j){if(j.length>0){let L=j.shift(),ie=L.entryName+L.extra.toString();P&&P(ie),L.getCompressedDataAsync(function(ee){u&&u(ie),L.header.offset=w;let B=L.packLocalHeader(),K=B.length+ee.length;w+=K,S.push(B),S.push(ee);let oe=L.packCentralHeader();k.push(oe),i.size+=oe.length,R+=K+oe.length,H++,x(j)})}else{R+=i.mainHeaderSize,i.offset=w,i.totalEntries=H,w=0;let L=Buffer.alloc(R);S.forEach(function(ee){ee.copy(L,w),w+=ee.length}),k.forEach(function(ee){ee.copy(L,w),w+=ee.length});let ie=i.toBinary();o&&o.copy(ie,ot.Constants.ENDHDR),ie.copy(L,w),r=L,a=!1,C(L)}};x(Array.from(this.entries))}catch(S){v(S)}}}}});var BC=z((BU,jC)=>{var Te=$o(),be=require("path"),kx=Td(),wx=WC(),eo=(...r)=>Te.findLast(r,e=>typeof e=="boolean"),UC=(...r)=>Te.findLast(r,e=>typeof e=="string"),Px=(...r)=>Te.findLast(r,e=>typeof e=="function"),Rx={noSort:!1,readEntries:!1,method:Te.Constants.NONE,fs:null};jC.exports=function(r,e){let t=null,n=Object.assign(Object.create(null),Rx);r&&typeof r=="object"&&(r instanceof Uint8Array||(Object.assign(n,r),r=n.input?n.input:void 0,n.input&&delete n.input),Buffer.isBuffer(r)&&(t=r,n.method=Te.Constants.BUFFER,r=void 0)),Object.assign(n,e);let o=new Te(n);if((typeof n.decoder!="object"||typeof n.decoder.encode!="function"||typeof n.decoder.decode!="function")&&(n.decoder=Te.decoder),r&&typeof r=="string")if(o.fs.existsSync(r))n.method=Te.Constants.FILE,n.filename=r,t=o.fs.readFileSync(r);else throw Te.Errors.INVALID_FILENAME();let i=new wx(t,n),{canonical:a,sanitize:s,zipnamefix:c}=Te;function l(d){if(d&&i){var f;if(typeof d=="string"&&(f=i.getEntry(be.posix.normalize(d))),typeof d=="object"&&typeof d.entryName<"u"&&typeof d.header<"u"&&(f=i.getEntry(d.entryName)),f)return f}return null}function p(d){let{join:f,normalize:y,sep:C}=be.posix;return f(be.isAbsolute(d)?"/":".",y(C+d.split("\\").join(C)+C))}function m(d){return d instanceof RegExp?function(f){return function(y){return f.test(y)}}(d):typeof d!="function"?()=>!0:d}let g=(d,f)=>{let y=f.slice(-1);return y=y===o.sep?o.sep:"",be.relative(d,f)+y};return{readFile:function(d,f){var y=l(d);return y&&y.getData(f)||null},childCount:function(d){let f=l(d);if(f)return i.getChildCount(f)},readFileAsync:function(d,f){var y=l(d);y?y.getDataAsync(f):f(null,"getEntry failed for:"+d)},readAsText:function(d,f){var y=l(d);if(y){var C=y.getData();if(C&&C.length)return C.toString(f||"utf8")}return""},readAsTextAsync:function(d,f,y){var C=l(d);C?C.getDataAsync(function(v,P){if(P){f(v,P);return}v&&v.length?f(v.toString(y||"utf8")):f("")}):f("")},deleteFile:function(d,f=!0){var y=l(d);y&&i.deleteFile(y.entryName,f)},deleteEntry:function(d){var f=l(d);f&&i.deleteEntry(f.entryName)},addZipComment:function(d){i.comment=d},getZipComment:function(){return i.comment||""},addZipEntryComment:function(d,f){var y=l(d);y&&(y.comment=f)},getZipEntryComment:function(d){var f=l(d);return f&&f.comment||""},updateFile:function(d,f){var y=l(d);y&&y.setData(f)},addLocalFile:function(d,f,y,C){if(o.fs.existsSync(d)){f=f?p(f):"";let v=be.win32.basename(be.win32.normalize(d));f+=y||v;let P=o.fs.statSync(d),u=P.isFile()?o.fs.readFileSync(d):Buffer.alloc(0);P.isDirectory()&&(f+=o.sep),this.addFile(f,u,C,P)}else throw Te.Errors.FILE_NOT_FOUND(d)},addLocalFileAsync:function(d,f){d=typeof d=="object"?d:{localPath:d};let y=be.resolve(d.localPath),{comment:C}=d,{zipPath:v,zipName:P}=d,u=this;o.fs.stat(y,function(S,k){if(S)return f(S,!1);v=v?p(v):"";let R=be.win32.basename(be.win32.normalize(y));if(v+=P||R,k.isFile())o.fs.readFile(y,function(w,H){return w?f(w,!1):(u.addFile(v,H,C,k),setImmediate(f,void 0,!0))});else if(k.isDirectory())return v+=o.sep,u.addFile(v,Buffer.alloc(0),C,k),setImmediate(f,void 0,!0)})},addLocalFolder:function(d,f,y){if(y=m(y),f=f?p(f):"",d=be.normalize(d),o.fs.existsSync(d)){let C=o.findFiles(d),v=this;if(C.length)for(let P of C){let u=be.join(f,g(d,P));y(u)&&v.addLocalFile(P,be.dirname(u))}}else throw Te.Errors.FILE_NOT_FOUND(d)},addLocalFolderAsync:function(d,f,y,C){C=m(C),y=y?p(y):"",d=be.normalize(d);var v=this;o.fs.open(d,"r",function(P){if(P&&P.code==="ENOENT")f(void 0,Te.Errors.FILE_NOT_FOUND(d));else if(P)f(void 0,P);else{var u=o.findFiles(d),S=-1,k=function(){if(S+=1,S<u.length){var R=u[S],w=g(d,R).split("\\").join("/");w=w.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,""),C(w)?o.fs.stat(R,function(H,x){H&&f(void 0,H),x.isFile()?o.fs.readFile(R,function(j,L){j?f(void 0,j):(v.addFile(y+w,L,"",x),k())}):(v.addFile(y+w+"/",Buffer.alloc(0),"",x),k())}):process.nextTick(()=>{k()})}else f(!0,void 0)};k()}})},addLocalFolderAsync2:function(d,f){let y=this;d=typeof d=="object"?d:{localPath:d},localPath=be.resolve(p(d.localPath));let{zipPath:C,filter:v,namefix:P}=d;v instanceof RegExp?v=function(k){return function(R){return k.test(R)}}(v):typeof v!="function"&&(v=function(){return!0}),C=C?p(C):"",P=="latin1"&&(P=k=>k.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,"")),typeof P!="function"&&(P=k=>k);let u=k=>be.join(C,P(g(localPath,k))),S=k=>be.win32.basename(be.win32.normalize(P(k)));o.fs.open(localPath,"r",function(k){k&&k.code==="ENOENT"?f(void 0,Te.Errors.FILE_NOT_FOUND(localPath)):k?f(void 0,k):o.findFilesAsync(localPath,function(R,w){if(R)return f(R);w=w.filter(H=>v(u(H))),w.length||f(void 0,!1),setImmediate(w.reverse().reduce(function(H,x){return function(j,L){if(j||L===!1)return setImmediate(H,j,!1);y.addLocalFileAsync({localPath:x,zipPath:be.dirname(u(x)),zipName:S(x)},H)}},f))})})},addLocalFolderPromise:function(d,f){return new Promise((y,C)=>{this.addLocalFolderAsync2(Object.assign({localPath:d},f),(v,P)=>{v&&C(v),P&&y(this)})})},addFile:function(d,f,y,C){d=c(d);let v=l(d),P=v!=null;P||(v=new kx(n),v.entryName=d),v.comment=y||"";let u=typeof C=="object"&&C instanceof o.fs.Stats;u&&(v.header.time=C.mtime);var S=v.isDirectory?16:0;let k=v.isDirectory?16384:32768;return u?k|=4095&C.mode:typeof C=="number"?k|=4095&C:k|=v.isDirectory?493:420,S=(S|k<<16)>>>0,v.attr=S,v.setData(f),P||i.setEntry(v),v},getEntries:function(d){return i.password=d,i?i.entries:[]},getEntry:function(d){return l(d)},getEntryCount:function(){return i.getEntryCount()},forEach:function(d){return i.forEach(d)},extractEntryTo:function(d,f,y,C,v,P){C=eo(!1,C),v=eo(!1,v),y=eo(!0,y),P=UC(v,P);var u=l(d);if(!u)throw Te.Errors.NO_ENTRY();var S=a(u.entryName),k=s(f,P&&!u.isDirectory?P:y?S:be.basename(S));if(u.isDirectory){var R=i.getEntryChildren(u);return R.forEach(function(x){if(x.isDirectory)return;var j=x.getData();if(!j)throw Te.Errors.CANT_EXTRACT_FILE();var L=a(x.entryName),ie=s(f,y?L:be.basename(L));let ee=v?x.header.fileAttr:void 0;o.writeFileTo(ie,j,C,ee)}),!0}var w=u.getData(i.password);if(!w)throw Te.Errors.CANT_EXTRACT_FILE();if(o.fs.existsSync(k)&&!C)throw Te.Errors.CANT_OVERRIDE();let H=v?d.header.fileAttr:void 0;return o.writeFileTo(k,w,C,H),!0},test:function(d){if(!i)return!1;for(var f in i.entries)try{if(f.isDirectory)continue;var y=i.entries[f].getData(d);if(!y)return!1}catch{return!1}return!0},extractAllTo:function(d,f,y,C){if(y=eo(!1,y),C=UC(y,C),f=eo(!1,f),!i)throw Te.Errors.NO_ZIP();i.entries.forEach(function(v){var P=s(d,a(v.entryName));if(v.isDirectory){o.makeDir(P);return}var u=v.getData(C);if(!u)throw Te.Errors.CANT_EXTRACT_FILE();let S=y?v.header.fileAttr:void 0;o.writeFileTo(P,u,f,S);try{o.fs.utimesSync(P,v.header.time,v.header.time)}catch{throw Te.Errors.CANT_EXTRACT_FILE()}})},extractAllToAsync:function(d,f,y,C){if(C=Px(f,y,C),y=eo(!1,y),f=eo(!1,f),!C)return new Promise((k,R)=>{this.extractAllToAsync(d,f,y,function(w){w?R(w):k(this)})});if(!i){C(Te.Errors.NO_ZIP());return}d=be.resolve(d);let v=k=>s(d,be.normalize(a(k.entryName))),P=(k,R)=>new Error(k+': "'+R+'"'),u=[],S=[];i.entries.forEach(k=>{k.isDirectory?u.push(k):S.push(k)});for(let k of u){let R=v(k),w=y?k.header.fileAttr:void 0;try{o.makeDir(R),w&&o.fs.chmodSync(R,w),o.fs.utimesSync(R,k.header.time,k.header.time)}catch{C(P("Unable to create folder",R))}}S.reverse().reduce(function(k,R){return function(w){if(w)k(w);else{let H=be.normalize(a(R.entryName)),x=s(d,H);R.getDataAsync(function(j,L){if(L)k(L);else if(!j)k(Te.Errors.CANT_EXTRACT_FILE());else{let ie=y?R.header.fileAttr:void 0;o.writeFileToAsync(x,j,f,ie,function(ee){ee||k(P("Unable to write file",x)),o.fs.utimes(x,R.header.time,R.header.time,function(B){B?k(P("Unable to set times",x)):k()})})}})}}},C)()},writeZip:function(d,f){if(arguments.length===1&&typeof d=="function"&&(f=d,d=""),!d&&n.filename&&(d=n.filename),!!d){var y=i.compressToBuffer();if(y){var C=o.writeFileTo(d,y,!0);typeof f=="function"&&f(C?null:new Error("failed"),"")}}},writeZipPromise:function(d,f){let{overwrite:y,perm:C}=Object.assign({overwrite:!0},f);return new Promise((v,P)=>{!d&&n.filename&&(d=n.filename),d||P("ADM-ZIP: ZIP File Name Missing"),this.toBufferPromise().then(u=>{let S=k=>k?v(k):P("ADM-ZIP: Wasn't able to write zip file");o.writeFileToAsync(d,u,y,C,S)},P)})},toBufferPromise:function(){return new Promise((d,f)=>{i.toAsyncBuffer(d,f)})},toBuffer:function(d,f,y,C){return typeof d=="function"?(i.toAsyncBuffer(d,f,y,C),null):i.compressToBuffer()}}}});var mr,Kd=pe(()=>{mr=class extends Error{constructor(e,t){super(`${e} at position ${t}`),this.position=t}}});function bS(r){return/^[0-9A-Fa-f]$/.test(r)}function En(r){return r>="0"&&r<="9"}function TS(r){return r>=" "}function Yi(r){return`,:[]/{}()
|
|
9
|
-
+`.includes(r)}function
|
|
10
|
-
+`.includes(r)}function
|
|
11
|
-
`||r==="\r"||r===" "||r==="\b"||r==="\f"}function
|
|
12
|
-
`;)e++;return!0}return!1}function l(
|
|
2
|
+
"use strict";var dE=Object.create;var gs=Object.defineProperty;var uE=Object.getOwnPropertyDescriptor;var mE=Object.getOwnPropertyNames;var hE=Object.getPrototypeOf,fE=Object.prototype.hasOwnProperty;var fe=(r,e)=>()=>(r&&(e=r(r=0)),e);var X=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),$p=(r,e)=>{for(var t in e)gs(r,t,{get:e[t],enumerable:!0})},Ef=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of mE(e))!fE.call(r,o)&&o!==t&&gs(r,o,{get:()=>e[o],enumerable:!(n=uE(e,o))||n.enumerable});return r};var E=(r,e,t)=>(t=r!=null?dE(hE(r)):{},Ef(e||!r||!r.__esModule?gs(t,"default",{value:r,enumerable:!0}):t,r)),Tf=r=>Ef(gs({},"__esModule",{value:!0}),r);var er=fe(()=>{});function z(r,e,t){if(!r)throw new Cs(e,t)}function Uo(r,e){throw new Cs(r,e)}var Cs,Ee=fe(()=>{Cs=class extends Error{cause;constructor(e,t={}){super(e),this.name="AssertError",this.cause=t.cause}}});function Ff(r){let e=r.trim();return z(e,"logger module name cannot be empty"),e}function CE(r,e){let t=Ff(e);return r?`${r}.${t}`:t}function Xi(r,e){return r?`[${r}] ${e}`:e}function SE(r,e){let t=jo(e);if(!r)return t;let n=`[${r}]`;return typeof t[0]=="string"?[`${n} ${t[0]}`,...t.slice(1)]:[n,...t]}function Qi(r,e){if(e.length===0||!Ss.test(r))return Ss.lastIndex=0,{message:r,args:e};Ss.lastIndex=0;let t=new Set;return{message:r.replace(Ss,(o,i)=>{let a=Number(i);return!Number.isSafeInteger(a)||a<0||a>=e.length?o:(t.add(a),String(e[a]))}),args:e.filter((o,i)=>!t.has(i))}}function jo(r){let e;for(let t=0;t<r.length;t++){let n=r[t];n instanceof Error?(e??=r.slice(0,t),e.push(vE(n))):e?.push(n)}return e??r}function vE(r){return r.stack?r.stack:r.name&&r.message?`${r.name}: ${r.message}`:r.message||String(r)}function If(r){return new vs(r===void 0?void 0:Ff(r))}function T(r){return If(r)}function Df(r){vs.setAppender(r)}var zp,vs,Ss,gN,Y=fe(()=>{Ee();zp=class{isTraceEnabled(){return!1}isDebugEnabled(){return!1}isInfoEnabled(){return!1}isWarnEnabled(){return!1}isErrorEnabled(){return!1}trace(e,...t){}debug(e,...t){}info(e,...t){}warn(e,...t){}error(e,...t){}},vs=class r{constructor(e){this.moduleName=e}static appender=new zp;static setAppender(e){r.appender=e}static getAppender(){return r.appender}isTraceEnabled(){return r.appender.isTraceEnabled()}isDebugEnabled(){return r.appender.isDebugEnabled()}createModuleLogger(e){return new r(CE(this.moduleName,e))}trace(e,...t){let n=r.appender;if(!n.isTraceEnabled())return;let o=Qi(e,t);n.trace(Xi(this.moduleName,o.message),...jo(o.args))}debug(e,...t){let n=r.appender;if(!n.isDebugEnabled())return;let o=Qi(e,t);n.debug(Xi(this.moduleName,o.message),...jo(o.args))}info(e,...t){let n=r.appender;if(!n.isInfoEnabled())return;let o=Qi(e,t);n.info(Xi(this.moduleName,o.message),...jo(o.args))}warn(e,...t){let n=r.appender;if(!n.isWarnEnabled())return;let o=Qi(e,t);n.warn(Xi(this.moduleName,o.message),...jo(o.args))}error(e,...t){let n=r.appender;if(!n.isErrorEnabled())return;if(e instanceof Error){n.error(e,...SE(this.moduleName,t));return}let o=Qi(e,t);n.error(Xi(this.moduleName,o.message),...jo(o.args))}};Ss=/\{(\d+)\}/g;gN=If()});function d(r,...e){return Kp.t(r,...e)}function bt(r,...e){let t=Kp.t(r,...e);return t===r?void 0:t}function Of(r){Kp=r}function gn(r,...e){return ws(e)?bE(r,e[0]):e.reduce((t,n,o)=>t.split(`{${o}}`).join(String(n)),r)}function ws(r){return r.length===1&&typeof r[0]=="object"&&r[0]!==null&&!Array.isArray(r[0])}function bE(r,e){return r.replace(RE,(t,n)=>Object.hasOwn(e,n)?String(e[n]):t)}function EE(){let r=Gp(__dirname);if(!r)return{};let e=fn.join(r,Af);try{let t=JSON.parse(ks.readFileSync(e,"utf8"));return TE(t)?t:{}}catch(t){return ME(t)?{}:(kE.warn("failed to load default l10n bundle: {0}",e,t),{})}}function Gp(r){let e=fn.resolve(r),t=[fn.join(e,"l10n"),fn.resolve(e,"..","..","l10n"),fn.resolve(e,"..","..","..","l10n")];for(let n of t)if(ks.existsSync(fn.join(n,Af)))return n}function TE(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)&&Object.values(r).every(e=>typeof e=="string")}function ME(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="ENOENT"}var ks,fn,Af,kE,wE,PE,Kp,RE,D=fe(()=>{ks=E(require("fs")),fn=E(require("path"));Y();Af="bundle.l10n.json",kE=T("i18n"),wE=EE(),PE={t(r,...e){let t=wE[r]??r;return ws(e)?gn(t,e[0]):gn(t,...e)}},Kp=PE;RE=/\{([A-Za-z_][A-Za-z0-9_]*)\}/g});var B=fe(()=>{});function q(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function $t(r){return typeof r=="string"&&r.length>0?r:void 0}function to(r){if(!Array.isArray(r))return;let e=r.filter(t=>typeof t=="string"&&t.length>0);return e.length>0?e:void 0}function O(r){let e={};for(let[t,n]of Object.entries(r))n!==void 0&&(e[t]=n);return e}function Rs(r){return r.startsWith("{")||r.startsWith("[")}function Vo(r){if(Array.isArray(r))return r.map(e=>Vo(e));if(q(r)){let e={};return Object.keys(r).forEach(t=>{e[t]=Vo(r[t])}),e}return r}function rr(r,e){if(r===e)return!0;if(Array.isArray(r)||Array.isArray(e))return Array.isArray(r)&&Array.isArray(e)&&r.length===e.length&&r.every((o,i)=>rr(o,e[i]));if(!q(r)||!q(e))return!1;let t=Object.keys(r),n=Object.keys(e);return t.length===n.length&&t.every(o=>Object.prototype.hasOwnProperty.call(e,o)&&rr(r[o],e[o]))}var re=fe(()=>{});function HE(r){let e=zE(r);if(Rs(e))try{let t=JSON.parse(e);return!q(t)||q(t.errorInfo)?void 0:Zp(t)}catch{return}}function zf(r){let e=HE(r);return e?ta(e):void 0}function ta(r){let e=new Qp(r.message??"",{platform:r.platform,stack:r.stack,properties:r.properties});return e.name=r.className||r.name||e.name,e.errorCode=r.errorCode,e.errorType=r.errorType,e.errorDialogStyle=r.errorDialogStyle,e.hintMessage=r.hintMessage,e.locationPath=r.locationPath,e.__httpStatusErrorCode__=r.__httpStatusErrorCode__,r.cause&&(e.cause=ta(r.cause)),Array.isArray(r.suppressed)&&(e.suppressed=r.suppressed.map(t=>ta(t))),e}function yn(r){let e=r,t=new Set;for(let n=0;n<100&&!t.has(e);n++){t.add(e);let o=Jf(e);if(!o)break;e=o}return e}function Kf(r){let e=[],t=r,n=new Set;for(;t&&!n.has(t)&&e.length<100;)e.push(t),n.add(t),t=Jf(t);return e.reverse().map((o,i)=>XE(o,i===0?"":"Wrapped by: ")).join(`
|
|
3
|
+
`)}function ot(r){return ra(r)||q(r)?nr(r.errorCode):void 0}function gr(r){return ra(r)?r.errorType:q(r)?Gf(r.errorType):void 0}function Ot(r){return ra(r)||q(r)&&q(r.properties)?r.properties:void 0}function zE(r){let e=r.indexOf(Hf);return(e>=0?r.slice(e+Hf.length):r).trim()}function Zp(r){if(!KE(r))return;let e={};e.message=nr(r.message),e.name=nr(r.name),e.errorCode=nr(r.errorCode),e.errorType=Gf(r.errorType),e.className=nr(r.className),e.platform=nr(r.platform),e.hintMessage=nr(r.hintMessage),e.errorDialogStyle=nr(r.errorDialogStyle),e.__httpStatusErrorCode__=GE(r.__httpStatusErrorCode__),q(r.properties)&&(e.properties=r.properties);let t=JE(r.locationPath);t&&(e.locationPath=t);let n=YE(r.stack);if(n&&(e.stack=n),q(r.cause)&&(e.cause=Zp(r.cause)),Array.isArray(r.suppressed)){let o=r.suppressed.filter(q).map(i=>Zp(i)).filter(i=>i!==void 0);o.length>0&&(e.suppressed=o)}return e}function KE(r){return["message","name","errorCode","errorType","className","platform","hintMessage","locationPath","errorDialogStyle","__httpStatusErrorCode__","properties","cause","suppressed","stack"].some(e=>e in r)}function nr(r){return typeof r=="string"&&r.length>0?r:void 0}function Gf(r){return r===null?null:nr(r)}function GE(r){return typeof r=="number"?r:void 0}function JE(r){if(!Array.isArray(r))return;let e=r.filter(q).map(t=>({type:nr(t.type),value:nr(t.value)})).filter(t=>t.type!==void 0&&t.value!==void 0);return e.length>0?e:void 0}function YE(r){if(typeof r=="string")return r.split(/\r?\n/).filter(t=>t.length>0);if(!Array.isArray(r))return;let e=r.filter(t=>typeof t=="string");return e.length>0?e:void 0}function Jf(r){let e=r.cause;return e instanceof Error?e:void 0}function ra(r){return r instanceof Error}function XE(r,e){let t=[],n=QE(r);t.push(e?`${e}${n}`:n),ea(t,"errorCode",ot(r));let o=gr(r);if(ea(t,"errorType",o==null?void 0:String(o)),ra(r)&&(ea(t,"errorDialogStyle",r.errorDialogStyle),ea(t,"hintMessage",r.hintMessage),ZE(t,r.locationPath),r.properties))for(let[a,s]of Object.entries(r.properties))ea(t,a,eT(s));let i=r.stack?.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.startsWith("at ")||a.startsWith("... "));return i&&t.push(...i),t.join(`
|
|
4
|
+
`)}function QE(r){let e=r.name||ra(r)&&r.platform||"Error";return r.message?`${e}: ${r.message}`:e}function ea(r,e,t){t&&r.push(`${e}: ${t}`)}function ZE(r,e){if(!(!e||e.length===0))for(let t of e)r.push(`location: ${t.type} ${t.value}`)}function eT(r){if(r!=null){if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);try{return JSON.stringify(r)}catch{return String(r)}}}var Hf,Qp,Cn=fe(()=>{re();Hf="===SUCC=ERROR=INFO=START===",Qp=class extends Error{platform;errorCode;errorType;errorDialogStyle;hintMessage;locationPath;properties;__httpStatusErrorCode__;cause;suppressed;constructor(e="",t={}){super(e),this.name="RemotePlatformError",this.platform=t.platform,this.stack=Array.isArray(t.stack)?t.stack.join(`
|
|
5
|
+
`):t.stack??"",this.cause=t.cause,t.properties&&(this.properties={...t.properties})}}});function x(r){return no(r)==="ENOENT"}function oa(r){let e=no(r);return e!==void 0&&tT.has(e)}function Yf(r){return Ms(r)&&r.status===404}function Es(r){return no(r)==="ENOTDIR"}function Ts(r){return no(r)==="ELOCKED"}function Ms(r){return r instanceof or}function no(r){if(!r||typeof r!="object"||!("code"in r))return;let e=r.code;return typeof e=="string"?e:void 0}function ed(r){if(!(!r||typeof r!="object"||!("cause"in r)))return r.cause}function Xf(r){return Qf(r,0)}function Qf(r,e){if(e>nT||!r||typeof r!="object"||ia(r)||Ms(r))return!1;let t=no(r);return t!==void 0&&rT.has(t)?!0:Qf(ed(r),e+1)}function ia(r){return r instanceof ge}function oo(r,e){return ia(r)&&r.errorCode===e}function Zf(r){let e=td(r.properties),t=bt(r.errorCode,e);if(!t)return r.message||r.errorCode;let n=bt(`${r.errorCode}.desc`,e);return n?`${t}
|
|
6
|
+
${n}`:t}function eg(r){if(r.hintMessage)return r.hintMessage;if(r.hint)return d(r.hint,td(r.properties))}function io(r){if(r==null)return"";if(r instanceof Error)return r.message;if(typeof r=="string")return r;let e=oT(r);if(e)return e;try{return JSON.stringify(r)}catch{return String(r)}}function oT(r){if(typeof r!="object"||r===null||Array.isArray(r))return"";let e=r.message;return typeof e=="string"?e:""}function iT(r,e){let t=td(e);return bt(r,t)??r}function td(r){let e={};for(let[t,n]of Object.entries(r))aT(n)&&(e[t]=n);return e}function aT(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"}function tg(r){return r instanceof Le||oo(r,"err.login.notlogin")}var tT,rT,nT,ge,or,R,ct,Ht,gt,Le,na,bs,ro,Gr,ir,F=fe(()=>{D();B();Cn();tT=new Set(["ENOENT","EACCES","EPERM","EISDIR","ENOTDIR","ELOOP","ENAMETOOLONG"]);rT=new Set(["ECONNRESET","EPIPE","ETIMEDOUT","ECONNABORTED","UND_ERR_SOCKET","UND_ERR_BODY_TIMEOUT","UND_ERR_HEADERS_TIMEOUT"]),nT=4;ge=class extends Error{errorCode;style;category;properties;errorType;errorDialogStyle;hintMessage;locationPath;hint;cause;constructor(e,t={}){let n=t.properties??{};super(t.message??iT(e,n)),this.name="BaseError",this.errorCode=e,this.style=t.style??"error",this.category=t.category??"generic",this.properties=n,this.errorType=t.errorType,this.errorDialogStyle=t.errorDialogStyle,this.hintMessage=t.hintMessage,this.locationPath=t.locationPath,this.hint=t.hint,this.cause=t.cause}setProperty(e,t){return this.properties[e]=t,this}setPropertyIf(e,t){return t!=null&&t!==""&&(this.properties[e]=t),this}setProperties(e){return Object.assign(this.properties,e),this}},or=class r extends ge{constructor(t,n,o,i,a){let s=zf(n),c=s?yn(s):void 0,l=Ot(c)??Ot(s)??{},p=r.formatSummary(n,o,a,c,s),u=gr(c)??gr(s),g=c?.errorDialogStyle??s?.errorDialogStyle;super(ot(c)??ot(s)??"err.net.httpStatusUnexpected",{message:`HTTP ${t}: ${p}`,properties:r.createProperties(l,t,o,a,n,s),style:r.getDisplayStyle(u,g),errorType:u,errorDialogStyle:g,hintMessage:c?.hintMessage??s?.hintMessage,locationPath:c?.locationPath??s?.locationPath,cause:s});this.status=t;this.responseText=n;this.statusText=o;this.contentType=a;this.name="SuccHttpError",this.remoteError=s;let m=i?.stack??this.stack,f=s?Kf(s):r.isServerStack(n)?n.trim():"";f&&(this.stack=m?`${f}
|
|
7
|
+
Wrapped by: ${m}`:f)}remoteError;static createProperties(t,n,o,i,a,s){let c={...t,status:n,statusText:o};if(i!==void 0&&(c.contentType=i),!s){let l=r.createResponsePreview(a);l!==void 0&&(c.responsePreview=l)}return c}static formatSummary(t,n,o,i,a){return i||a?i?.message||ot(i)||a?.message||ot(a)||n.trim()||"Request failed":r.isServerStack(t)?n.trim()||"Request failed":r.isHtmlResponse(t,o)?n.trim()||"server returned HTML error response":t.split(/\r?\n/).map(s=>s.trim()).find(Boolean)?.slice(0,240)||"Request failed"}static createResponsePreview(t){let n=t.trim();if(n)return n.length>512?`${n.slice(0,512)}...`:n}static isHtmlResponse(t,n){return(n?.toLowerCase()??"").includes("text/html")?!0:/^<!doctype html\b|^<html[\s>]/i.test(t.trimStart())}static isServerStack(t){let n=t.trim();return!n||n.startsWith("{")||n.startsWith("[")?!1:n.split(/\r?\n/).some(o=>{let i=o.trimStart();return i.startsWith("at ")||i.startsWith("... ")||i.startsWith("Caused by:")||i.startsWith("Wrapped by:")})}static getDisplayStyle(t,n){return t==="info"?"info":t==="warn"?"warn":t===void 0&&n==="quietly"?"info":"error"}};R=class extends ge{constructor(e,t={},n={}){super(e,{...n,category:n.category??"usage",style:n.style??"warn",properties:t}),this.name="UsageError"}},ct=class extends ge{constructor(e,t={},n={}){super(e,{...n,style:n.style??"warn",properties:t}),this.name="OperationBlockedError"}},Ht=class extends ge{constructor(e,t={},n={}){super(e,{...n,category:n.category??"conflict",style:n.style??"error",properties:t}),this.name="ConflictError"}},gt=class extends ge{constructor(e,t){super("err.net.connectionFailed",{category:"networkAuth",properties:{url:e,causeMessage:t?` - ${t.message}`:""},cause:t}),this.name="ConnectionError"}},Le=class extends ge{constructor(e={}){super("err.login.notlogin",{category:"networkAuth",hint:"Log in again, then retry the command."}),this.name="AuthError",this.withContext(e)}withContext(e){return e.workspaceRoot&&!this.workspaceRoot&&this.setProperty("workspaceRoot",e.workspaceRoot),e.serverUrl&&!this.serverUrl&&this.setProperty("serverUrl",e.serverUrl),this}get context(){return{workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl}}get workspaceRoot(){return typeof this.properties.workspaceRoot=="string"?this.properties.workspaceRoot:void 0}get serverUrl(){return typeof this.properties.serverUrl=="string"?this.properties.serverUrl:void 0}};na=class extends ge{constructor(t,n,o={}){super("err.workspace.problem",{style:"warn",properties:{root:t,code:n,count:o.count??o.projectPaths?.length??o.remotePaths?.length??0}});this.root=t;this.code=n;this.options=o;this.name="WorkspaceProblemError"}get projectPaths(){return this.options.projectPaths}get remotePaths(){return this.options.remotePaths}get count(){return this.options.count}},bs=class extends R{constructor(t,n){super("err.net.invalidUrl",{url:t},{cause:n});this.url=t;this.name="InvalidUrlError"}},ro=class extends ge{constructor(t,n,o,i){super("err.lock.busy",{category:"lockBusy",style:"warn",properties:{attemptedCommand:t,conflictScope:o,...i?{pid:i.pid,host:i.hostname,command:i.command,source:i.source,scope:i.scope,startTime:i.startTime,lastHeartbeat:i.lastHeartbeat}:{}},hint:"Wait for the running SuccApp process to finish, then retry."});this.attemptedCommand=t;this.attemptedScopes=n;this.conflictScope=o;this.holder=i;this.name="LockBusyError"}},Gr=class extends ge{constructor(t,n={}){super("err.lock.compromised",{category:"lockCompromised",style:"warn",properties:{attemptedCommand:t},cause:n.cause});this.attemptedCommand=t;this.name="LockCompromisedError"}},ir=class extends ge{constructor(){super("err.base.cancel",{category:"cancel",style:"silent"}),this.name="CancelledError"}}});function rd(r){return r.reason instanceof Error?r.reason:new ir}function yt(r){if(r?.aborted)throw rd(r)}function Is(...r){let e=r.filter(n=>n!==void 0);if(e.length===0)return Fs;if(e.length===1)return e[0];let t=new AbortController;for(let n of e){let o=()=>{t.signal.aborted||t.abort(n.reason instanceof Error?n.reason:new ir)};n.addEventListener("abort",o),n.aborted&&o()}return t.signal}var dT,Fs,Sn=fe(()=>{F();dT=new AbortController,Fs=dT.signal});var vn,Ds,Xe,Ir=fe(()=>{F();Ee();Sn();vn=class r{children=[];parent;weight;signal;total=0;done=0;ratio=0;message;constructor(e,t=0,n){this.parent=e,this.weight=Math.max(t,0),this.signal=n??Fs}retainOnFinish=!1;retainedFinishReported=!1;start(e,t){this.total=Math.max(e??0,0),this.done=0,this.ratio=0,this.children.length=0,this.retainOnFinish=t?.retainOnFinish===!0,this.retainedFinishReported=!1,t?.message!==void 0&&this.setMessage(t.message),this.doStart(e),this.reportToParent()}progress(e){this.assertNoSubTasks(),this.reportProgress(Math.max(this.done,e,0))}step(e){this.assertNoSubTasks(),this.reportProgress(Math.max(this.done+Math.max(e??1,0),0))}setMessage(e){this.message=e||void 0,this.parent&&this.parent.setMessage(this.message)}finish(){this.total<=0&&(this.total=Math.max(this.done,1),this.doStart(this.total),this.reportToParent()),this.reportProgress(Math.max(this.done,this.total)),this.reportRetainedFinish()}subTaskMonitor(e){let t=new r(this,e);return this.children.push(t),t}isCancellationRequested(){return this.parent?this.parent.isCancellationRequested():this.signal.aborted}getAbortSignal(){return this.parent?this.parent.getAbortSignal():this.signal}setAbortSignal(e){this.parent?this.parent.setAbortSignal(e):this.signal=e}throwIfAborted(){this.parent?this.parent.throwIfAborted():yt(this.signal)}onSubTaskProgress(){let e=this.children.reduce((o,i)=>o+i.getWeight(),0);if(e<=0){this.reportProgress(this.done);return}let t=this.children.reduce((o,i)=>o+i.getWeight()*i.getCompletionRatio(),0),n=this.total>0?this.total:e;this.reportProgress(Math.max(this.done,n*t/e))}doStart(e){}doProgress(e,t){}doRetainedFinish(e){}getProgressTotal(){return this.total}reportProgress(e){let t=this.done;this.done=e,this.refreshRatio(),this.doProgress(this.done,t),this.reportToParent()}assertNoSubTasks(){z(this.children.length===0,"TaskMonitor with subtasks must report progress from subtasks")}refreshRatio(){let e=this.getProgressTotal();e>0&&(this.ratio=Math.max(this.ratio,Math.min(this.done/e,1)))}reportToParent(){this.parent?.onSubTaskProgress()}reportRetainedFinish(){!this.retainOnFinish||this.retainedFinishReported||!this.message||(this.retainedFinishReported=!0,this.reportRetainedFinishMessage(this.message))}reportRetainedFinishMessage(e){this.parent?this.parent.reportRetainedFinishMessage(e):this.doRetainedFinish(e)}getWeight(){return this.weight}getCompletionRatio(){return this.ratio}},Ds=class{constructor(e){this.delegate=e}start(e,t){this.delegate.start(e,t)}progress(e){this.delegate.progress(e)}step(e){this.delegate.step(e)}setMessage(e){this.delegate.setMessage(e)}finish(){this.delegate.finish()}subTaskMonitor(e){return this.delegate.subTaskMonitor(e)}isCancellationRequested(){return this.delegate.isCancellationRequested()}getAbortSignal(){return this.delegate.getAbortSignal()}setAbortSignal(e){this.delegate.setAbortSignal(e)}throwIfAborted(){this.delegate.throwIfAborted()}},Xe=class r{static INSTANCE=new r;start(e,t){}progress(e){}step(e){}setMessage(e){}finish(){}subTaskMonitor(e){return this}isCancellationRequested(){return!1}getAbortSignal(){return Fs}setAbortSignal(e){}throwIfAborted(){}}});function pd(r){return $T(r)??HT(Ns(r))}function Ns(r){if(!r)return"";let e=r.replace(/\\/g,"/"),t=e.substring(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return(n>=0?t.substring(n+1):t).toLowerCase()}function BT(r){if(!r)return!1;let e=dd(r);return e.startsWith("text/")?!0:e==="image/svg+xml"||e==="application/json"||e==="application/manifest+json"||e==="application/yaml"||e==="application/atom+xml"||e==="application/rss+xml"||e==="application/javascript"||e==="application/xml"||e==="application/xhtml+xml"||e==="application/x-javascript"}function VT(r){return r?dd(r)==="application/json":!1}function Sg(r){if(!r)return!1;let e=dd(r);return e==="application/json"||e.endsWith("+json")}function vg(r){return BT(pd(r))}function kg(r){return VT(pd(r))}function qT(r){let e=new Map;for(let t of r.split(/\r?\n/)){let n=t.trim();if(!n||n.startsWith("#")||n.startsWith("!"))continue;let o=n.indexOf(":");o<0||e.set(wg(n.substring(0,o)),n.substring(o+1).trim())}return e}function $T(r){let e=r.replace(/\\/g,"/").toLowerCase(),t=e.substring(e.lastIndexOf("/")+1),n=t.lastIndexOf("."),o=n>=0?t.substring(n+1):"";for(let i of jT)if(i.basename===t||i.extension===o)return i.contentType}function HT(r,e=NT){return zT().get(wg(r))??e}function zT(){let r=KT(),e=so.statSync(r);return(!sa||sa.filePath!==r||sa.mtimeMs!==e.mtimeMs)&&(sa={filePath:r,mtimeMs:e.mtimeMs,contents:qT(so.readFileSync(r,"utf8"))}),sa.contents}function wg(r){return(r??"").trim().replace(/^\./,"").toLowerCase()}function dd(r){let e=r.indexOf(";");return(e>=0?r.substring(0,e):r).trim().toLowerCase()}function KT(){let r=$o.join(GT(),"resources",WT);return z(so.existsSync(r),`Content-Type resource not found: ${r}. Run build/watch to sync it from BI project.`),r}function GT(){for(let r=__dirname;;r=$o.dirname(r)){if(so.existsSync($o.join(r,UT)))return r;$o.dirname(r)===r&&Uo(`Extension root not found from ${__dirname}`)}}var so,$o,NT,WT,UT,sa,jT,Ho=fe(()=>{so=E(require("fs")),$o=E(require("path"));Ee();NT="application/octet-stream",WT="contents.properties",UT="package.json",jT=[]});var Hg=X((NW,$g)=>{var Pn=require("constants"),mM=process.cwd,$s=null,hM=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return $s||($s=mM.call(process)),$s};try{process.cwd()}catch{}typeof process.chdir=="function"&&(vd=process.chdir,process.chdir=function(r){$s=null,vd.call(process,r)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,vd));var vd;$g.exports=fM;function fM(r){Pn.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&e(r),r.lutimes||t(r),r.chown=i(r.chown),r.fchown=i(r.fchown),r.lchown=i(r.lchown),r.chmod=n(r.chmod),r.fchmod=n(r.fchmod),r.lchmod=n(r.lchmod),r.chownSync=a(r.chownSync),r.fchownSync=a(r.fchownSync),r.lchownSync=a(r.lchownSync),r.chmodSync=o(r.chmodSync),r.fchmodSync=o(r.fchmodSync),r.lchmodSync=o(r.lchmodSync),r.stat=s(r.stat),r.fstat=s(r.fstat),r.lstat=s(r.lstat),r.statSync=c(r.statSync),r.fstatSync=c(r.fstatSync),r.lstatSync=c(r.lstatSync),r.chmod&&!r.lchmod&&(r.lchmod=function(p,u,g){g&&process.nextTick(g)},r.lchmodSync=function(){}),r.chown&&!r.lchown&&(r.lchown=function(p,u,g,m){m&&process.nextTick(m)},r.lchownSync=function(){}),hM==="win32"&&(r.rename=typeof r.rename!="function"?r.rename:function(p){function u(g,m,f){var y=Date.now(),C=0;p(g,m,function v(w){if(w&&(w.code==="EACCES"||w.code==="EPERM"||w.code==="EBUSY")&&Date.now()-y<6e4){setTimeout(function(){r.stat(m,function(h,S){h&&h.code==="ENOENT"?p(g,m,v):f(w)})},C),C<100&&(C+=10);return}f&&f(w)})}return Object.setPrototypeOf&&Object.setPrototypeOf(u,p),u}(r.rename)),r.read=typeof r.read!="function"?r.read:function(p){function u(g,m,f,y,C,v){var w;if(v&&typeof v=="function"){var h=0;w=function(S,k,b){if(S&&S.code==="EAGAIN"&&h<10)return h++,p.call(r,g,m,f,y,C,w);v.apply(this,arguments)}}return p.call(r,g,m,f,y,C,w)}return Object.setPrototypeOf&&Object.setPrototypeOf(u,p),u}(r.read),r.readSync=typeof r.readSync!="function"?r.readSync:function(p){return function(u,g,m,f,y){for(var C=0;;)try{return p.call(r,u,g,m,f,y)}catch(v){if(v.code==="EAGAIN"&&C<10){C++;continue}throw v}}}(r.readSync);function e(p){p.lchmod=function(u,g,m){p.open(u,Pn.O_WRONLY|Pn.O_SYMLINK,g,function(f,y){if(f){m&&m(f);return}p.fchmod(y,g,function(C){p.close(y,function(v){m&&m(C||v)})})})},p.lchmodSync=function(u,g){var m=p.openSync(u,Pn.O_WRONLY|Pn.O_SYMLINK,g),f=!0,y;try{y=p.fchmodSync(m,g),f=!1}finally{if(f)try{p.closeSync(m)}catch{}else p.closeSync(m)}return y}}function t(p){Pn.hasOwnProperty("O_SYMLINK")&&p.futimes?(p.lutimes=function(u,g,m,f){p.open(u,Pn.O_SYMLINK,function(y,C){if(y){f&&f(y);return}p.futimes(C,g,m,function(v){p.close(C,function(w){f&&f(v||w)})})})},p.lutimesSync=function(u,g,m){var f=p.openSync(u,Pn.O_SYMLINK),y,C=!0;try{y=p.futimesSync(f,g,m),C=!1}finally{if(C)try{p.closeSync(f)}catch{}else p.closeSync(f)}return y}):p.futimes&&(p.lutimes=function(u,g,m,f){f&&process.nextTick(f)},p.lutimesSync=function(){})}function n(p){return p&&function(u,g,m){return p.call(r,u,g,function(f){l(f)&&(f=null),m&&m.apply(this,arguments)})}}function o(p){return p&&function(u,g){try{return p.call(r,u,g)}catch(m){if(!l(m))throw m}}}function i(p){return p&&function(u,g,m,f){return p.call(r,u,g,m,function(y){l(y)&&(y=null),f&&f.apply(this,arguments)})}}function a(p){return p&&function(u,g,m){try{return p.call(r,u,g,m)}catch(f){if(!l(f))throw f}}}function s(p){return p&&function(u,g,m){typeof g=="function"&&(m=g,g=null);function f(y,C){C&&(C.uid<0&&(C.uid+=4294967296),C.gid<0&&(C.gid+=4294967296)),m&&m.apply(this,arguments)}return g?p.call(r,u,g,f):p.call(r,u,f)}}function c(p){return p&&function(u,g){var m=g?p.call(r,u,g):p.call(r,u);return m&&(m.uid<0&&(m.uid+=4294967296),m.gid<0&&(m.gid+=4294967296)),m}}function l(p){if(!p||p.code==="ENOSYS")return!0;var u=!process.getuid||process.getuid()!==0;return!!(u&&(p.code==="EINVAL"||p.code==="EPERM"))}}});var Gg=X((WW,Kg)=>{var zg=require("stream").Stream;Kg.exports=gM;function gM(r){return{ReadStream:e,WriteStream:t};function e(n,o){if(!(this instanceof e))return new e(n,o);zg.call(this);var i=this;this.path=n,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,o=o||{};for(var a=Object.keys(o),s=0,c=a.length;s<c;s++){var l=a[s];this[l]=o[l]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){i._read()});return}r.open(this.path,this.flags,this.mode,function(p,u){if(p){i.emit("error",p),i.readable=!1;return}i.fd=u,i.emit("open",u),i._read()})}function t(n,o){if(!(this instanceof t))return new t(n,o);zg.call(this),this.path=n,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,o=o||{};for(var i=Object.keys(o),a=0,s=i.length;a<s;a++){var c=i[a];this[c]=o[c]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=r.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}});var Yg=X((UW,Jg)=>{"use strict";Jg.exports=CM;var yM=Object.getPrototypeOf||function(r){return r.__proto__};function CM(r){if(r===null||typeof r!="object")return r;if(r instanceof Object)var e={__proto__:yM(r)};else var e=Object.create(null);return Object.getOwnPropertyNames(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}});var Rd=X((jW,Pd)=>{var Fe=require("fs"),SM=Hg(),vM=Gg(),kM=Yg(),Hs=require("util"),lt,Ks;typeof Symbol=="function"&&typeof Symbol.for=="function"?(lt=Symbol.for("graceful-fs.queue"),Ks=Symbol.for("graceful-fs.previous")):(lt="___graceful-fs.queue",Ks="___graceful-fs.previous");function wM(){}function Zg(r,e){Object.defineProperty(r,lt,{get:function(){return e}})}var lo=wM;Hs.debuglog?lo=Hs.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(lo=function(){var r=Hs.format.apply(Hs,arguments);r="GFS4: "+r.split(/\n/).join(`
|
|
8
|
+
GFS4: `),console.error(r)});Fe[lt]||(Xg=global[lt]||[],Zg(Fe,Xg),Fe.close=function(r){function e(t,n){return r.call(Fe,t,function(o){o||Qg(),typeof n=="function"&&n.apply(this,arguments)})}return Object.defineProperty(e,Ks,{value:r}),e}(Fe.close),Fe.closeSync=function(r){function e(t){r.apply(Fe,arguments),Qg()}return Object.defineProperty(e,Ks,{value:r}),e}(Fe.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){lo(Fe[lt]),require("assert").equal(Fe[lt].length,0)}));var Xg;global[lt]||Zg(global,Fe[lt]);Pd.exports=kd(kM(Fe));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!Fe.__patched&&(Pd.exports=kd(Fe),Fe.__patched=!0);function kd(r){SM(r),r.gracefulify=kd,r.createReadStream=k,r.createWriteStream=b;var e=r.readFile;r.readFile=t;function t(M,H,L){return typeof H=="function"&&(L=H,H=null),Z(M,H,L);function Z(U,V,G,te){return e(U,V,function(oe){oe&&(oe.code==="EMFILE"||oe.code==="ENFILE")?Jo([Z,[U,V,G],oe,te||Date.now(),Date.now()]):typeof G=="function"&&G.apply(this,arguments)})}}var n=r.writeFile;r.writeFile=o;function o(M,H,L,Z){return typeof L=="function"&&(Z=L,L=null),U(M,H,L,Z);function U(V,G,te,oe,I){return n(V,G,te,function(j){j&&(j.code==="EMFILE"||j.code==="ENFILE")?Jo([U,[V,G,te,oe],j,I||Date.now(),Date.now()]):typeof oe=="function"&&oe.apply(this,arguments)})}}var i=r.appendFile;i&&(r.appendFile=a);function a(M,H,L,Z){return typeof L=="function"&&(Z=L,L=null),U(M,H,L,Z);function U(V,G,te,oe,I){return i(V,G,te,function(j){j&&(j.code==="EMFILE"||j.code==="ENFILE")?Jo([U,[V,G,te,oe],j,I||Date.now(),Date.now()]):typeof oe=="function"&&oe.apply(this,arguments)})}}var s=r.copyFile;s&&(r.copyFile=c);function c(M,H,L,Z){return typeof L=="function"&&(Z=L,L=0),U(M,H,L,Z);function U(V,G,te,oe,I){return s(V,G,te,function(j){j&&(j.code==="EMFILE"||j.code==="ENFILE")?Jo([U,[V,G,te,oe],j,I||Date.now(),Date.now()]):typeof oe=="function"&&oe.apply(this,arguments)})}}var l=r.readdir;r.readdir=u;var p=/^v[0-5]\./;function u(M,H,L){typeof H=="function"&&(L=H,H=null);var Z=p.test(process.version)?function(G,te,oe,I){return l(G,U(G,te,oe,I))}:function(G,te,oe,I){return l(G,te,U(G,te,oe,I))};return Z(M,H,L);function U(V,G,te,oe){return function(I,j){I&&(I.code==="EMFILE"||I.code==="ENFILE")?Jo([Z,[V,G,te],I,oe||Date.now(),Date.now()]):(j&&j.sort&&j.sort(),typeof te=="function"&&te.call(this,I,j))}}}if(process.version.substr(0,4)==="v0.8"){var g=vM(r);v=g.ReadStream,h=g.WriteStream}var m=r.ReadStream;m&&(v.prototype=Object.create(m.prototype),v.prototype.open=w);var f=r.WriteStream;f&&(h.prototype=Object.create(f.prototype),h.prototype.open=S),Object.defineProperty(r,"ReadStream",{get:function(){return v},set:function(M){v=M},enumerable:!0,configurable:!0}),Object.defineProperty(r,"WriteStream",{get:function(){return h},set:function(M){h=M},enumerable:!0,configurable:!0});var y=v;Object.defineProperty(r,"FileReadStream",{get:function(){return y},set:function(M){y=M},enumerable:!0,configurable:!0});var C=h;Object.defineProperty(r,"FileWriteStream",{get:function(){return C},set:function(M){C=M},enumerable:!0,configurable:!0});function v(M,H){return this instanceof v?(m.apply(this,arguments),this):v.apply(Object.create(v.prototype),arguments)}function w(){var M=this;J(M.path,M.flags,M.mode,function(H,L){H?(M.autoClose&&M.destroy(),M.emit("error",H)):(M.fd=L,M.emit("open",L),M.read())})}function h(M,H){return this instanceof h?(f.apply(this,arguments),this):h.apply(Object.create(h.prototype),arguments)}function S(){var M=this;J(M.path,M.flags,M.mode,function(H,L){H?(M.destroy(),M.emit("error",H)):(M.fd=L,M.emit("open",L))})}function k(M,H){return new r.ReadStream(M,H)}function b(M,H){return new r.WriteStream(M,H)}var P=r.open;r.open=J;function J(M,H,L,Z){return typeof L=="function"&&(Z=L,L=null),U(M,H,L,Z);function U(V,G,te,oe,I){return P(V,G,te,function(j,ie){j&&(j.code==="EMFILE"||j.code==="ENFILE")?Jo([U,[V,G,te,oe],j,I||Date.now(),Date.now()]):typeof oe=="function"&&oe.apply(this,arguments)})}}return r}function Jo(r){lo("ENQUEUE",r[0].name,r[1]),Fe[lt].push(r),wd()}var zs;function Qg(){for(var r=Date.now(),e=0;e<Fe[lt].length;++e)Fe[lt][e].length>2&&(Fe[lt][e][3]=r,Fe[lt][e][4]=r);wd()}function wd(){if(clearTimeout(zs),zs=void 0,Fe[lt].length!==0){var r=Fe[lt].shift(),e=r[0],t=r[1],n=r[2],o=r[3],i=r[4];if(o===void 0)lo("RETRY",e.name,t),e.apply(null,t);else if(Date.now()-o>=6e4){lo("TIMEOUT",e.name,t);var a=t.pop();typeof a=="function"&&a.call(null,n)}else{var s=Date.now()-i,c=Math.max(i-o,1),l=Math.min(c*1.2,100);s>=l?(lo("RETRY",e.name,t),e.apply(null,t.concat([o]))):Fe[lt].push(r)}zs===void 0&&(zs=setTimeout(wd,0))}}});var ty=X((BW,ey)=>{function ar(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}ey.exports=ar;ar.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};ar.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null};ar.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),t=this._timeouts.shift();else return!1;var n=this,o=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t);return this._options.unref&&o.unref(),!0};ar.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};ar.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};ar.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};ar.prototype.start=ar.prototype.try;ar.prototype.errors=function(){return this._errors};ar.prototype.attempts=function(){return this._attempts};ar.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,a=(r[i]||0)+1;r[i]=a,a>=t&&(e=o,t=a)}return e}});var ry=X(po=>{var PM=ty();po.operation=function(r){var e=po.timeouts(r);return new PM(e,{forever:r&&r.forever,unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};po.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,a){return i-a}),n};po.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*e.minTimeout*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};po.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],a=r[i];r[i]=function(c){var l=po.operation(e),p=Array.prototype.slice.call(arguments,1),u=p.pop();p.push(function(g){l.retry(g)||(g&&(arguments[0]=l.mainError()),u.apply(this,arguments))}),l.attempt(function(){c.apply(r,p)})}.bind(r,a),r[i].options=e}}});var oy=X((qW,ny)=>{ny.exports=ry()});var iy=X(($W,Gs)=>{Gs.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Gs.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Gs.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var py=X((HW,Qo)=>{var Te=global.process,uo=function(r){return r&&typeof r=="object"&&typeof r.removeListener=="function"&&typeof r.emit=="function"&&typeof r.reallyExit=="function"&&typeof r.listeners=="function"&&typeof r.kill=="function"&&typeof r.pid=="number"&&typeof r.on=="function"};uo(Te)?(ay=require("assert"),Yo=iy(),sy=/^win/i.test(Te.platform),pa=require("events"),typeof pa!="function"&&(pa=pa.EventEmitter),Te.__signal_exit_emitter__?it=Te.__signal_exit_emitter__:(it=Te.__signal_exit_emitter__=new pa,it.count=0,it.emitted={}),it.infinite||(it.setMaxListeners(1/0),it.infinite=!0),Qo.exports=function(r,e){if(!uo(global.process))return function(){};ay.equal(typeof r,"function","a callback must be provided for exit handler"),Xo===!1&&bd();var t="exit";e&&e.alwaysLast&&(t="afterexit");var n=function(){it.removeListener(t,r),it.listeners("exit").length===0&&it.listeners("afterexit").length===0&&Js()};return it.on(t,r),n},Js=function(){!Xo||!uo(global.process)||(Xo=!1,Yo.forEach(function(e){try{Te.removeListener(e,Ys[e])}catch{}}),Te.emit=Xs,Te.reallyExit=Ed,it.count-=1)},Qo.exports.unload=Js,mo=function(e,t,n){it.emitted[e]||(it.emitted[e]=!0,it.emit(e,t,n))},Ys={},Yo.forEach(function(r){Ys[r]=function(){if(uo(global.process)){var t=Te.listeners(r);t.length===it.count&&(Js(),mo("exit",null,r),mo("afterexit",null,r),sy&&r==="SIGHUP"&&(r="SIGINT"),Te.kill(Te.pid,r))}}}),Qo.exports.signals=function(){return Yo},Xo=!1,bd=function(){Xo||!uo(global.process)||(Xo=!0,it.count+=1,Yo=Yo.filter(function(e){try{return Te.on(e,Ys[e]),!0}catch{return!1}}),Te.emit=ly,Te.reallyExit=cy)},Qo.exports.load=bd,Ed=Te.reallyExit,cy=function(e){uo(global.process)&&(Te.exitCode=e||0,mo("exit",Te.exitCode,null),mo("afterexit",Te.exitCode,null),Ed.call(Te,Te.exitCode))},Xs=Te.emit,ly=function(e,t){if(e==="exit"&&uo(global.process)){t!==void 0&&(Te.exitCode=t);var n=Xs.apply(this,arguments);return mo("exit",Te.exitCode,null),mo("afterexit",Te.exitCode,null),n}else return Xs.apply(this,arguments)}):Qo.exports=function(){return function(){}};var ay,Yo,sy,pa,it,Js,mo,Ys,Xo,bd,Ed,cy,Xs,ly});var uy=X((zW,Td)=>{"use strict";var dy=Symbol();function RM(r,e,t){let n=e[dy];if(n)return e.stat(r,(i,a)=>{if(i)return t(i);t(null,a.mtime,n)});let o=new Date(Math.ceil(Date.now()/1e3)*1e3+5);e.utimes(r,o,o,i=>{if(i)return t(i);e.stat(r,(a,s)=>{if(a)return t(a);let c=s.mtime.getTime()%1e3===0?"s":"ms";Object.defineProperty(e,dy,{value:c}),t(null,s.mtime,c)})})}function bM(r){let e=Date.now();return r==="s"&&(e=Math.ceil(e/1e3)*1e3),new Date(e)}Td.exports.probe=RM;Td.exports.getMtime=bM});var yy=X((KW,ua)=>{"use strict";var EM=require("path"),Fd=Rd(),TM=oy(),MM=py(),my=uy(),Jr={};function da(r,e){return e.lockfilePath||`${r}.lock`}function Id(r,e,t){if(!e.realpath)return t(null,EM.resolve(r));e.fs.realpath(r,t)}function xd(r,e,t){let n=da(r,e);e.fs.mkdir(n,o=>{if(!o)return my.probe(n,e.fs,(i,a,s)=>{if(i)return e.fs.rmdir(n,()=>{}),t(i);t(null,a,s)});if(o.code!=="EEXIST")return t(o);if(e.stale<=0)return t(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file:r}));e.fs.stat(n,(i,a)=>{if(i)return i.code==="ENOENT"?xd(r,{...e,stale:0},t):t(i);if(!hy(a,e))return t(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file:r}));fy(r,e,s=>{if(s)return t(s);xd(r,{...e,stale:0},t)})})})}function hy(r,e){return r.mtime.getTime()<Date.now()-e.stale}function fy(r,e,t){e.fs.rmdir(da(r,e),n=>{if(n&&n.code!=="ENOENT")return t(n);t()})}function Qs(r,e){let t=Jr[r];t.updateTimeout||(t.updateDelay=t.updateDelay||e.update,t.updateTimeout=setTimeout(()=>{t.updateTimeout=null,e.fs.stat(t.lockfilePath,(n,o)=>{let i=t.lastUpdate+e.stale<Date.now();if(n)return n.code==="ENOENT"||i?Md(r,t,Object.assign(n,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,Qs(r,e));if(!(t.mtime.getTime()===o.mtime.getTime()))return Md(r,t,Object.assign(new Error("Unable to update lock within the stale threshold"),{code:"ECOMPROMISED"}));let s=my.getMtime(t.mtimePrecision);e.fs.utimes(t.lockfilePath,s,s,c=>{let l=t.lastUpdate+e.stale<Date.now();if(!t.released){if(c)return c.code==="ENOENT"||l?Md(r,t,Object.assign(c,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,Qs(r,e));t.mtime=s,t.lastUpdate=Date.now(),t.updateDelay=null,Qs(r,e)}})})},t.updateDelay),t.updateTimeout.unref&&t.updateTimeout.unref())}function Md(r,e,t){e.released=!0,e.updateTimeout&&clearTimeout(e.updateTimeout),Jr[r]===e&&delete Jr[r],e.options.onCompromised(t)}function xM(r,e,t){e={stale:1e4,update:null,realpath:!0,retries:0,fs:Fd,onCompromised:n=>{throw n},...e},e.retries=e.retries||0,e.retries=typeof e.retries=="number"?{retries:e.retries}:e.retries,e.stale=Math.max(e.stale||0,2e3),e.update=e.update==null?e.stale/2:e.update||0,e.update=Math.max(Math.min(e.update,e.stale/2),1e3),Id(r,e,(n,o)=>{if(n)return t(n);let i=TM.operation(e.retries);i.attempt(()=>{xd(o,e,(a,s,c)=>{if(i.retry(a))return;if(a)return t(i.mainError());let l=Jr[o]={lockfilePath:da(o,e),mtime:s,mtimePrecision:c,options:e,lastUpdate:Date.now()};Qs(o,e),t(null,p=>{if(l.released)return p&&p(Object.assign(new Error("Lock is already released"),{code:"ERELEASED"}));gy(o,{...e,realpath:!1},p)})})})})}function gy(r,e,t){e={fs:Fd,realpath:!0,...e},Id(r,e,(n,o)=>{if(n)return t(n);let i=Jr[o];if(!i)return t(Object.assign(new Error("Lock is not acquired/owned by you"),{code:"ENOTACQUIRED"}));i.updateTimeout&&clearTimeout(i.updateTimeout),i.released=!0,delete Jr[o],fy(o,e,t)})}function FM(r,e,t){e={stale:1e4,realpath:!0,fs:Fd,...e},e.stale=Math.max(e.stale||0,2e3),Id(r,e,(n,o)=>{if(n)return t(n);e.fs.stat(da(o,e),(i,a)=>i?i.code==="ENOENT"?t(null,!1):t(i):t(null,!hy(a,e)))})}function IM(){return Jr}MM(()=>{for(let r in Jr){let e=Jr[r].options;try{e.fs.rmdirSync(da(r,e))}catch{}}});ua.exports.lock=xM;ua.exports.unlock=gy;ua.exports.check=FM;ua.exports.getLocks=IM});var Sy=X((GW,Cy)=>{"use strict";var DM=Rd();function AM(r){let e=["mkdir","realpath","stat","rmdir","utimes"],t={...r};return e.forEach(n=>{t[n]=(...o)=>{let i=o.pop(),a;try{a=r[`${n}Sync`](...o)}catch(s){return i(s)}i(null,a)}}),t}function OM(r){return(...e)=>new Promise((t,n)=>{e.push((o,i)=>{o?n(o):t(i)}),r(...e)})}function _M(r){return(...e)=>{let t,n;if(e.push((o,i)=>{t=o,n=i}),r(...e),t)throw t;return n}}function LM(r){if(r={...r},r.fs=AM(r.fs||DM),typeof r.retries=="number"&&r.retries>0||r.retries&&typeof r.retries.retries=="number"&&r.retries.retries>0)throw Object.assign(new Error("Cannot use retries with the sync api"),{code:"ESYNC"});return r}Cy.exports={toPromise:OM,toSync:_M,toSyncOptions:LM}});var Ad=X((JW,Rn)=>{"use strict";var Zo=yy(),{toPromise:Zs,toSync:ec,toSyncOptions:Dd}=Sy();async function vy(r,e){let t=await Zs(Zo.lock)(r,e);return Zs(t)}function NM(r,e){let t=ec(Zo.lock)(r,Dd(e));return ec(t)}function WM(r,e){return Zs(Zo.unlock)(r,e)}function UM(r,e){return ec(Zo.unlock)(r,Dd(e))}function jM(r,e){return Zs(Zo.check)(r,e)}function BM(r,e){return ec(Zo.check)(r,Dd(e))}Rn.exports=vy;Rn.exports.lock=vy;Rn.exports.unlock=WM;Rn.exports.lockSync=NM;Rn.exports.unlockSync=UM;Rn.exports.check=jM;Rn.exports.checkSync=BM});async function _d(r){return Sr.promises.readFile(r,"utf8")}async function ke(r,e=""){try{return await _d(r)}catch(t){if(x(t))return Od.debug("optional text file does not exist: %s",r),e;throw t}}async function pt(r,e){await Sr.promises.mkdir(tc.dirname(r),{recursive:!0}),await Sr.promises.writeFile(r,e,"utf8")}async function Ry(r,e,t={}){await Sr.promises.mkdir(tc.dirname(r),{recursive:!0});let n,o=t.timeoutMs??VM,i=t.retryDelayMs??qM;try{n=await Py.lock(r,{lockfilePath:r,realpath:!1,stale:t.staleMs??$M,retries:{retries:Math.ceil(o/i),factor:1,minTimeout:i,maxTimeout:i}})}catch(a){throw Ts(a)?new ct("err.lock.busy",{lockPath:r,timeoutMs:o},{category:"lockBusy",cause:a instanceof Error?a:void 0,message:`file lock is held by another process: ${r}`}):a}try{return await e()}finally{if(n)try{await n()}catch(a){Od.warn(`release file lock failed: ${r}`,a)}}}async function sr(r,e){await Sr.promises.mkdir(tc.dirname(r),{recursive:!0});let t=`${r}.succapp-tmp.${process.pid}.${Date.now()}.${(0,ky.randomUUID)()}`;try{typeof e=="string"||Buffer.isBuffer(e)?await Sr.promises.writeFile(t,e):await(0,wy.pipeline)(e,Sr.createWriteStream(t)),await Sr.promises.rename(t,r)}catch(n){throw await Sr.promises.rm(t,{force:!0}).catch(o=>{Od.debug("cleanup temporary write file failed: %s",t,o)}),n}}var Sr,tc,ky,wy,Py,Od,VM,qM,$M,Et=fe(()=>{Sr=E(require("fs")),tc=E(require("path")),ky=require("crypto"),wy=require("stream/promises"),Py=E(Ad());F();B();Y();Od=T("common.file");VM=5e3,qM=100,$M=3e4});async function rC(r,e,t){let n=typeof e=="function"?e:t;if(z(n,"runConcurrently task is required"),r.length===0)return;let o=typeof e=="function"?void 0:e,i=new Qe(o);await Promise.all(r.map(a=>i.addTask(()=>n(a))))}var Sx,Qe,bn=fe(()=>{Sn();Ee();F();Sx=8,Qe=class{activeCount=0;canceledError;pendingSlots=[];idleWaiters=[];signal;abortListener;maxConcurrency;constructor(e){typeof e=="number"?this.maxConcurrency=e:(this.maxConcurrency=e?.maxConcurrency??Sx,this.signal=e?.signal),this.maxConcurrency=Math.max(1,this.maxConcurrency),this.signal&&(this.abortListener=()=>this.cancel(rd(this.signal)),this.signal.aborted?this.abortListener():this.signal.addEventListener("abort",this.abortListener,{once:!0}))}async addTask(e){let t=await this.acquire();try{return yt(this.signal),await e()}catch(n){throw n instanceof ir&&this.cancel(n),n}finally{t.release()}}async acquire(){if(yt(this.signal),this.canceledError)throw this.canceledError;if(this.activeCount<this.maxConcurrency)return this.activeCount++,this.createSlot();if(await new Promise((e,t)=>{this.pendingSlots.push({resolve:e,reject:t})}),yt(this.signal),this.canceledError)throw this.canceledError;return this.createSlot()}async waitAll(){this.isIdle()||await new Promise(e=>this.idleWaiters.push(e))}cancel(e){if(this.canceledError)return;this.canceledError=e instanceof Error?e:new Error(String(e??"ConTasksRunner cancelled")),this.disposeAbortListener();let t=this.pendingSlots.splice(0);for(let n of t)n.reject(this.canceledError);this.notifyIdleIfNeeded()}createSlot(){let e=!1;return{release:()=>{e||(e=!0,this.releaseSlot())}}}releaseSlot(){let e=this.pendingSlots.shift();if(e){e.resolve();return}this.activeCount--,this.notifyIdleIfNeeded()}isIdle(){return this.activeCount===0&&this.pendingSlots.length===0}notifyIdleIfNeeded(){if(this.isIdle())for(let e of this.idleWaiters.splice(0))e()}disposeAbortListener(){this.signal&&this.abortListener&&this.signal.removeEventListener("abort",this.abortListener)}}});function le(r){let e=r.replace(Px,"/").replace(/^\/+|\/+$/g,"");return e?"/"+e:"/"}function iC(r){let e=le(r);if(e.split("/").filter(Boolean).includes(Rx))throw new Error(`Unsafe metadata path: ${r}`);return e}function aC(r){if(!r.startsWith("/"))throw new R("err.meta.invalidPath",{path:r,reason:"notAbsolute"});try{return iC(r)}catch(e){throw new R("err.meta.invalidPath",{path:r,reason:"unsafe"},{cause:e})}}function ae(r,e){return pe.join(r,le(e).replace(/^\//,""))}function sC(r,e){let t=pe.resolve(r),n=pe.resolve(t,iC(e).replace(/^\//,""));if(n!==t&&!n.startsWith(t+pe.sep))throw new Error(`Metadata path escapes root: ${e}`);return n}function cr(r){return pe.join(r,Gt)}function ya(r,...e){return pe.join(cr(r),...e)}function Qr(r){return pe.join(r,Mx,xx)}function Zr(r){let e=r.replace(bx,"/");if(!e||pe.posix.isAbsolute(e)||pe.win32.isAbsolute(r)||pe.win32.isAbsolute(e))return;let t=e.split("/");return t.some(Ax)?void 0:t.join("/")}function En(r,e="relative path"){let t=Zr(r);if(!t)throw new Error(`invalid ${e}: ${r}`);return t}function Tn(r,e,t="relative path"){return pe.join(r,...En(e,t).split("/"))}function Tt(r,e){return pe.isAbsolute(e)?pe.normalize(e):pe.resolve(r,e)}async function ne(r){try{return await sc.promises.access(r),!0}catch(e){if(x(e))return!1;throw e}}async function cc(r){let e;try{e=await sc.promises.stat(r)}catch(t){throw x(t)?new R("err.file.notFound",{path:r},{cause:t}):t}if(!e.isDirectory())throw new R("err.file.notDirectory",{path:r})}function kr(r){return r.trim().replace(kx,"").replace(wx,"-")}function Or(r,e){let t=pe.resolve(r),n=pe.resolve(e);if(n===t||!n.startsWith(t+pe.sep))return;let o=pe.relative(t,n);if(!o)return"/";let i=o.split(pe.sep);if(!i[0].startsWith("."))return le(i.join("/"))}function Me(r){return r.replace(/^\//,"")}function Ve(r){let e=le(r);if(e==="/")return;let[t]=e.slice(1).split("/");return t?`/${t}`:void 0}function Ct(r){let e=r.trim();if(!e||e.startsWith(".")||e.includes("/")||e.includes("\\"))throw new Error(`invalid project name: ${r}`);return`/${e}`}function ee(r,e){let t=oC(r),n=oC(e);return t===n||n==="/"?!0:t.length<=n.length?!1:t.charCodeAt(n.length)===47&&t.startsWith(n)}function Mn(r,e,t,n){return ac(r,t)||e&&ac(e,t)?!0:!!n&&(ac(r,n)||!!e&&ac(e,n))}function ac(r,e){return ee(r,e)||ee(e,r)}function cC(r){let e;for(let t of r){let n=Fx(t);if(!e){e=n;continue}e=Ix(e,n)}if(e)return le(e.join("/"))}function Fx(r){let e=le(r);if(e==="/")return[];let t=e.split("/").filter(Boolean);return t.pop(),t}function Ix(r,e){let t=Math.min(r.length,e.length),n=[];for(let o=0;o<t&&r[o]===e[o];o++)n.push(r[o]);return n}function St(r){let e=[...r].sort((n,o)=>{let i=nC(n)-nC(o);return i===0?n.localeCompare(o):i}),t=[];for(let n of e)Dx(n,r)||t.push(n);return t}function Dx(r,e){let t=pe.posix.dirname(r);for(;t!==r;){if(e.has(t))return!0;if(t==="/")return!1;r=t,t=pe.posix.dirname(r)}return!1}function nC(r){return r.split("/").filter(Boolean).length}function oC(r){return pe.posix.normalize(le(r))}function Ax(r){return!r||r===Ex||r===Tx}async function lr(r){try{await sc.promises.rm(r,{recursive:!0,force:!0})}catch(e){if(!x(e))throw e;vx.debug(`remove ignored missing path: ${r}`)}}function _r(r){return r.split("/").filter(Boolean).length}var sc,pe,vx,kx,wx,Px,Rx,bx,Ex,Tx,Gt,Mx,xx,K=fe(()=>{sc=E(require("fs")),pe=E(require("path"));F();B();Y();vx=T("common.path"),kx=/^https?:\/\/|\/+$/gi,wx=/[^a-zA-Z0-9.]+/g,Px=/[\\/]+/g,Rx="..",bx=/\\/g,Ex=".",Tx="..",Gt=".succapp",Mx=".vscode",xx="settings.json"});var Mu=X((e2,AS)=>{AS.exports={LOCHDR:30,LOCSIG:67324752,LOCVER:4,LOCFLG:6,LOCHOW:8,LOCTIM:10,LOCCRC:14,LOCSIZ:18,LOCLEN:22,LOCNAM:26,LOCEXT:28,EXTSIG:134695760,EXTHDR:16,EXTCRC:4,EXTSIZ:8,EXTLEN:12,CENHDR:46,CENSIG:33639248,CENVEM:4,CENVER:6,CENFLG:8,CENHOW:10,CENTIM:12,CENCRC:16,CENSIZ:20,CENLEN:24,CENNAM:28,CENEXT:30,CENCOM:32,CENDSK:34,CENATT:36,CENATX:38,CENOFF:42,ENDHDR:22,ENDSIG:101010256,ENDSUB:8,ENDTOT:10,ENDSIZ:12,ENDOFF:16,ENDCOM:20,END64HDR:20,END64SIG:117853008,END64START:4,END64OFF:8,END64NUMDISKS:16,ZIP64SIG:101075792,ZIP64HDR:56,ZIP64LEAD:12,ZIP64SIZE:4,ZIP64VEM:12,ZIP64VER:14,ZIP64DSK:16,ZIP64DSKDIR:20,ZIP64SUB:24,ZIP64TOT:32,ZIP64SIZB:40,ZIP64OFF:48,ZIP64EXTRA:56,STORED:0,SHRUNK:1,REDUCED1:2,REDUCED2:3,REDUCED3:4,REDUCED4:5,IMPLODED:6,DEFLATED:8,ENHANCED_DEFLATED:9,PKWARE:10,BZIP2:12,LZMA:14,IBM_TERSE:18,IBM_LZ77:19,AES_ENCRYPT:99,FLG_ENC:1,FLG_COMP1:2,FLG_COMP2:4,FLG_DESC:8,FLG_ENH:16,FLG_PATCH:32,FLG_STR:64,FLG_EFS:2048,FLG_MSK:4096,FILE:2,BUFFER:1,NONE:0,EF_ID:0,EF_SIZE:2,ID_ZIP64:1,ID_AVINFO:7,ID_PFS:8,ID_OS2:9,ID_NTFS:10,ID_OPENVMS:12,ID_UNIX:13,ID_FORK:14,ID_PATCH:15,ID_X509_PKCS7:20,ID_X509_CERTID_F:21,ID_X509_CERTID_C:22,ID_STRONGENC:23,ID_RECORD_MGT:24,ID_X509_PKCS7_RL:25,ID_IBM1:101,ID_IBM2:102,ID_POSZIP:18064,EF_ZIP64_OR_32:4294967295,EF_ZIP64_OR_16:65535,EF_ZIP64_SUNCOMP:0,EF_ZIP64_SCOMP:8,EF_ZIP64_RHO:16,EF_ZIP64_DSN:24}});var Pc=X(_S=>{var OS={INVALID_LOC:"Invalid LOC header (bad signature)",INVALID_CEN:"Invalid CEN header (bad signature)",INVALID_END:"Invalid END header (bad signature)",DESCRIPTOR_NOT_EXIST:"No descriptor present",DESCRIPTOR_UNKNOWN:"Unknown descriptor format",DESCRIPTOR_FAULTY:"Descriptor data is malformed",NO_DATA:"Nothing to decompress",BAD_CRC:"CRC32 checksum failed {0}",FILE_IN_THE_WAY:"There is a file in the way: {0}",UNKNOWN_METHOD:"Invalid/unsupported compression method",AVAIL_DATA:"inflate::Available inflate data did not terminate",INVALID_DISTANCE:"inflate::Invalid literal/length or distance code in fixed or dynamic block",TO_MANY_CODES:"inflate::Dynamic block code description: too many length or distance codes",INVALID_REPEAT_LEN:"inflate::Dynamic block code description: repeat more than specified lengths",INVALID_REPEAT_FIRST:"inflate::Dynamic block code description: repeat lengths with no first length",INCOMPLETE_CODES:"inflate::Dynamic block code description: code lengths codes incomplete",INVALID_DYN_DISTANCE:"inflate::Dynamic block code description: invalid distance code lengths",INVALID_CODES_LEN:"inflate::Dynamic block code description: invalid literal/length code lengths",INVALID_STORE_BLOCK:"inflate::Stored block length did not match one's complement",INVALID_BLOCK_TYPE:"inflate::Invalid block type (type == 3)",CANT_EXTRACT_FILE:"Could not extract the file",CANT_OVERRIDE:"Target file already exists",DISK_ENTRY_TOO_LARGE:"Number of disk entries is too large",NO_ZIP:"No zip file was loaded",NO_ENTRY:"Entry doesn't exist",DIRECTORY_CONTENT_ERROR:"A directory cannot have content",FILE_NOT_FOUND:'File not found: "{0}"',NOT_IMPLEMENTED:"Not implemented",INVALID_FILENAME:"Invalid filename",INVALID_FORMAT:"Invalid or unsupported zip format. No END header found",INVALID_PASS_PARAM:"Incompatible password parameter",WRONG_PASSWORD:"Wrong Password",COMMENT_TOO_LONG:"Comment is too long",EXTRA_FIELD_PARSE_ERROR:"Extra field parsing error"};function KF(r){return function(...e){return e.length&&(r=r.replace(/\{(\d)\}/g,(t,n)=>e[n]||"")),new Error("ADM-ZIP: "+r)}}for(let r of Object.keys(OS))_S[r]=KF(OS[r])});var jS=X((r2,US)=>{var GF=require("fs"),et=require("path"),LS=Mu(),JF=Pc(),YF=typeof process=="object"&&process.platform==="win32",NS=r=>typeof r=="object"&&r!==null,WS=new Uint32Array(256).map((r,e)=>{for(let t=0;t<8;t++)e&1?e=3988292384^e>>>1:e>>>=1;return e>>>0});function Ne(r){this.sep=et.sep,this.fs=GF,NS(r)&&NS(r.fs)&&typeof r.fs.statSync=="function"&&(this.fs=r.fs)}US.exports=Ne;Ne.prototype.makeDir=function(r){let e=this;function t(n){let o=n.split(e.sep)[0];n.split(e.sep).forEach(function(i){if(!(!i||i.substr(-1,1)===":")){o+=e.sep+i;var a;try{a=e.fs.statSync(o)}catch(s){if(s.message&&s.message.startsWith("ENOENT"))e.fs.mkdirSync(o);else throw s}if(a&&a.isFile())throw JF.FILE_IN_THE_WAY(`"${o}"`)}})}t(r)};Ne.prototype.writeFileTo=function(r,e,t,n){let o=this;if(o.fs.existsSync(r)){if(!t)return!1;var i=o.fs.statSync(r);if(i.isDirectory())return!1}var a=et.dirname(r);o.fs.existsSync(a)||o.makeDir(a);var s;try{s=o.fs.openSync(r,"w",438)}catch{o.fs.chmodSync(r,438),s=o.fs.openSync(r,"w",438)}if(s)try{o.fs.writeSync(s,e,0,e.length,0)}finally{o.fs.closeSync(s)}return o.fs.chmodSync(r,n||438),!0};Ne.prototype.writeFileToAsync=function(r,e,t,n,o){typeof n=="function"&&(o=n,n=void 0);let i=this;i.fs.exists(r,function(a){if(a&&!t)return o(!1);i.fs.stat(r,function(s,c){if(a&&c.isDirectory())return o(!1);var l=et.dirname(r);i.fs.exists(l,function(p){p||i.makeDir(l),i.fs.open(r,"w",438,function(u,g){u?i.fs.chmod(r,438,function(){i.fs.open(r,"w",438,function(m,f){i.fs.write(f,e,0,e.length,0,function(){i.fs.close(f,function(){i.fs.chmod(r,n||438,function(){o(!0)})})})})}):g?i.fs.write(g,e,0,e.length,0,function(){i.fs.close(g,function(){i.fs.chmod(r,n||438,function(){o(!0)})})}):i.fs.chmod(r,n||438,function(){o(!0)})})})})})};Ne.prototype.findFiles=function(r){let e=this;function t(n,o,i){typeof o=="boolean"&&(i=o,o=void 0);let a=[];return e.fs.readdirSync(n).forEach(function(s){let c=et.join(n,s),l=e.fs.statSync(c);(!o||o.test(c))&&a.push(et.normalize(c)+(l.isDirectory()?e.sep:"")),l.isDirectory()&&i&&(a=a.concat(t(c,o,i)))}),a}return t(r,void 0,!0)};Ne.prototype.findFilesAsync=function(r,e){let t=this,n=[];t.fs.readdir(r,function(o,i){if(o)return e(o);let a=i.length;if(!a)return e(null,n);i.forEach(function(s){s=et.join(r,s),t.fs.stat(s,function(c,l){if(c)return e(c);l&&(n.push(et.normalize(s)+(l.isDirectory()?t.sep:"")),l.isDirectory()?t.findFilesAsync(s,function(p,u){if(p)return e(p);n=n.concat(u),--a||e(null,n)}):--a||e(null,n))})})})};Ne.prototype.getAttributes=function(){};Ne.prototype.setAttributes=function(){};Ne.crc32update=function(r,e){return WS[(r^e)&255]^r>>>8};Ne.crc32=function(r){typeof r=="string"&&(r=Buffer.from(r,"utf8"));let e=r.length,t=-1;for(let n=0;n<e;)t=Ne.crc32update(t,r[n++]);return~t>>>0};Ne.methodToString=function(r){switch(r){case LS.STORED:return"STORED ("+r+")";case LS.DEFLATED:return"DEFLATED ("+r+")";default:return"UNSUPPORTED ("+r+")"}};Ne.canonical=function(r){if(!r)return"";let e=et.posix.normalize("/"+r.split("\\").join("/"));return et.join(".",e)};Ne.zipnamefix=function(r){if(!r)return"";let e=et.posix.normalize("/"+r.split("\\").join("/"));return et.posix.join(".",e)};Ne.findLast=function(r,e){if(!Array.isArray(r))throw new TypeError("arr is not array");let t=r.length>>>0;for(let n=t-1;n>=0;n--)if(e(r[n],n,r))return r[n]};Ne.sanitize=function(r,e){r=et.resolve(et.normalize(r));for(var t=e.split("/"),n=0,o=t.length;n<o;n++){var i=et.normalize(et.join(r,t.slice(n,o).join(et.sep)));if(i.indexOf(r)===0)return i}return et.normalize(et.join(r,et.basename(e)))};Ne.toBuffer=function(e,t){return Buffer.isBuffer(e)?e:e instanceof Uint8Array?Buffer.from(e):typeof e=="string"?t(e):Buffer.alloc(0)};Ne.readBigUInt64LE=function(r,e){let t=r.readUInt32LE(e);return r.readUInt32LE(e+4)*4294967296+t};Ne.fromDOS2Date=function(r){return new Date((r>>25&127)+1980,Math.max((r>>21&15)-1,0),Math.max(r>>16&31,1),r>>11&31,r>>5&63,(r&31)<<1)};Ne.fromDate2DOS=function(r){let e=0,t=0;return r.getFullYear()>1979&&(e=(r.getFullYear()-1980&127)<<9|r.getMonth()+1<<5|r.getDate(),t=r.getHours()<<11|r.getMinutes()<<5|r.getSeconds()>>1),e<<16|t};Ne.isWin=YF;Ne.crcTable=WS});var VS=X((n2,BS)=>{var XF=require("path");BS.exports=function(r,{fs:e}){var t=r||"",n=i(),o=null;function i(){return{directory:!1,readonly:!1,hidden:!1,executable:!1,mtime:0,atime:0}}return t&&e.existsSync(t)?(o=e.statSync(t),n.directory=o.isDirectory(),n.mtime=o.mtime,n.atime=o.atime,n.executable=(73&o.mode)!==0,n.readonly=(128&o.mode)===0,n.hidden=XF.basename(t)[0]==="."):console.warn("Invalid path: "+t),{get directory(){return n.directory},get readOnly(){return n.readonly},get hidden(){return n.hidden},get mtime(){return n.mtime},get atime(){return n.atime},get executable(){return n.executable},decodeAttributes:function(){},encodeAttributes:function(){},toJSON:function(){return{path:t,isDirectory:n.directory,isReadOnly:n.readonly,isHidden:n.hidden,isExecutable:n.executable,mTime:n.mtime,aTime:n.atime}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var $S=X((o2,qS)=>{qS.exports={efs:!0,encode:r=>Buffer.from(r,"utf8"),decode:r=>r.toString("utf8")}});var gi=X((i2,fi)=>{fi.exports=jS();fi.exports.Constants=Mu();fi.exports.Errors=Pc();fi.exports.FileAttr=VS();fi.exports.decoder=$S()});var zS=X((a2,HS)=>{var Wn=gi(),A=Wn.Constants;HS.exports=function(){var r=20,e=10,t=0,n=0,o=0,i=0,a=0,s=0,c=0,l=0,p=0,u=0,g=0,m=0,f=0;r|=Wn.isWin?2560:768,t|=A.FLG_EFS;let y={extraLen:0},C=h=>Math.max(0,h)>>>0,v=h=>Math.max(0,h)&65535,w=h=>Math.max(0,h)&255;return o=Wn.fromDate2DOS(new Date),{get made(){return r},set made(h){r=h},get version(){return e},set version(h){e=h},get flags(){return t},set flags(h){t=h},get flags_efs(){return(t&A.FLG_EFS)>0},set flags_efs(h){h?t|=A.FLG_EFS:t&=~A.FLG_EFS},get flags_desc(){return(t&A.FLG_DESC)>0},set flags_desc(h){h?t|=A.FLG_DESC:t&=~A.FLG_DESC},get method(){return n},set method(h){switch(h){case A.STORED:this.version=10;case A.DEFLATED:default:this.version=20}n=h},get time(){return Wn.fromDOS2Date(this.timeval)},set time(h){h=new Date(h),this.timeval=Wn.fromDate2DOS(h)},get timeval(){return o},set timeval(h){o=C(h)},get timeHighByte(){return w(o>>>8)},get crc(){return i},set crc(h){i=C(h)},get compressedSize(){return a},set compressedSize(h){a=C(h)},get size(){return s},set size(h){s=C(h)},get fileNameLength(){return c},set fileNameLength(h){c=h},get extraLength(){return l},set extraLength(h){l=h},get extraLocalLength(){return y.extraLen},set extraLocalLength(h){y.extraLen=h},get commentLength(){return p},set commentLength(h){p=h},get diskNumStart(){return u},set diskNumStart(h){u=C(h)},get inAttr(){return g},set inAttr(h){g=C(h)},get attr(){return m},set attr(h){m=C(h)},get fileAttr(){return(m||0)>>16&4095},get offset(){return f},set offset(h){f=C(h)},get encrypted(){return(t&A.FLG_ENC)===A.FLG_ENC},get centralHeaderSize(){return A.CENHDR+c+l+p},get realDataOffset(){return f+A.LOCHDR+y.fnameLen+y.extraLen},get localHeader(){return y},loadLocalHeaderFromBinary:function(h){var S=h.slice(f,f+A.LOCHDR);if(S.readUInt32LE(0)!==A.LOCSIG)throw Wn.Errors.INVALID_LOC();y.version=S.readUInt16LE(A.LOCVER),y.flags=S.readUInt16LE(A.LOCFLG),y.flags_desc=(y.flags&A.FLG_DESC)>0,y.method=S.readUInt16LE(A.LOCHOW),y.time=S.readUInt32LE(A.LOCTIM),y.crc=S.readUInt32LE(A.LOCCRC),y.compressedSize=S.readUInt32LE(A.LOCSIZ),y.size=S.readUInt32LE(A.LOCLEN),y.fnameLen=S.readUInt16LE(A.LOCNAM),y.extraLen=S.readUInt16LE(A.LOCEXT);let k=f+A.LOCHDR+y.fnameLen,b=k+y.extraLen;return h.slice(k,b)},loadFromBinary:function(h){if(h.length!==A.CENHDR||h.readUInt32LE(0)!==A.CENSIG)throw Wn.Errors.INVALID_CEN();r=h.readUInt16LE(A.CENVEM),e=h.readUInt16LE(A.CENVER),t=h.readUInt16LE(A.CENFLG),n=h.readUInt16LE(A.CENHOW),o=h.readUInt32LE(A.CENTIM),i=h.readUInt32LE(A.CENCRC),a=h.readUInt32LE(A.CENSIZ),s=h.readUInt32LE(A.CENLEN),c=h.readUInt16LE(A.CENNAM),l=h.readUInt16LE(A.CENEXT),p=h.readUInt16LE(A.CENCOM),u=h.readUInt16LE(A.CENDSK),g=h.readUInt16LE(A.CENATT),m=h.readUInt32LE(A.CENATX),f=h.readUInt32LE(A.CENOFF)},localHeaderToBinary:function(){var h=Buffer.alloc(A.LOCHDR);return h.writeUInt32LE(A.LOCSIG,0),h.writeUInt16LE(e,A.LOCVER),h.writeUInt16LE(t,A.LOCFLG),h.writeUInt16LE(n,A.LOCHOW),h.writeUInt32LE(o,A.LOCTIM),h.writeUInt32LE(i,A.LOCCRC),h.writeUInt32LE(a,A.LOCSIZ),h.writeUInt32LE(s,A.LOCLEN),h.writeUInt16LE(c,A.LOCNAM),h.writeUInt16LE(y.extraLen,A.LOCEXT),h},centralHeaderToBinary:function(){var h=Buffer.alloc(A.CENHDR+c+l+p);return h.writeUInt32LE(A.CENSIG,0),h.writeUInt16LE(r,A.CENVEM),h.writeUInt16LE(e,A.CENVER),h.writeUInt16LE(t,A.CENFLG),h.writeUInt16LE(n,A.CENHOW),h.writeUInt32LE(o,A.CENTIM),h.writeUInt32LE(i,A.CENCRC),h.writeUInt32LE(a,A.CENSIZ),h.writeUInt32LE(s,A.CENLEN),h.writeUInt16LE(c,A.CENNAM),h.writeUInt16LE(l,A.CENEXT),h.writeUInt16LE(p,A.CENCOM),h.writeUInt16LE(u,A.CENDSK),h.writeUInt16LE(g,A.CENATT),h.writeUInt32LE(m,A.CENATX),h.writeUInt32LE(f,A.CENOFF),h},toJSON:function(){let h=function(S){return S+" bytes"};return{made:r,version:e,flags:t,method:Wn.methodToString(n),time:this.time,crc:"0x"+i.toString(16).toUpperCase(),compressedSize:h(a),size:h(s),fileNameLength:h(c),extraLength:h(l),commentLength:h(p),diskNumStart:u,inAttr:g,attr:m,offset:f,centralHeaderSize:h(A.CENHDR+c+l+p)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var GS=X((s2,KS)=>{var yi=gi(),Ae=yi.Constants;KS.exports=function(){var r=0,e=0,t=0,n=0,o=0;return{get diskEntries(){return r},set diskEntries(i){r=e=i},get totalEntries(){return e},set totalEntries(i){e=r=i},get size(){return t},set size(i){t=i},get offset(){return n},set offset(i){n=i},get commentLength(){return o},set commentLength(i){o=i},get mainHeaderSize(){return Ae.ENDHDR+o},loadFromBinary:function(i){if((i.length!==Ae.ENDHDR||i.readUInt32LE(0)!==Ae.ENDSIG)&&(i.length<Ae.ZIP64HDR||i.readUInt32LE(0)!==Ae.ZIP64SIG))throw yi.Errors.INVALID_END();i.readUInt32LE(0)===Ae.ENDSIG?(r=i.readUInt16LE(Ae.ENDSUB),e=i.readUInt16LE(Ae.ENDTOT),t=i.readUInt32LE(Ae.ENDSIZ),n=i.readUInt32LE(Ae.ENDOFF),o=i.readUInt16LE(Ae.ENDCOM)):(r=yi.readBigUInt64LE(i,Ae.ZIP64SUB),e=yi.readBigUInt64LE(i,Ae.ZIP64TOT),t=yi.readBigUInt64LE(i,Ae.ZIP64SIZE),n=yi.readBigUInt64LE(i,Ae.ZIP64OFF),o=0)},toBinary:function(){var i=Buffer.alloc(Ae.ENDHDR+o);return i.writeUInt32LE(Ae.ENDSIG,0),i.writeUInt32LE(0,4),i.writeUInt16LE(r,Ae.ENDSUB),i.writeUInt16LE(e,Ae.ENDTOT),i.writeUInt32LE(t,Ae.ENDSIZ),i.writeUInt32LE(n,Ae.ENDOFF),i.writeUInt16LE(o,Ae.ENDCOM),i.fill(" ",Ae.ENDHDR),i},toJSON:function(){let i=function(a,s){let c=a.toString(16).toUpperCase();for(;c.length<s;)c="0"+c;return"0x"+c};return{diskEntries:r,totalEntries:e,size:t+" bytes",offset:i(n,4),commentLength:o}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var Fu=X(xu=>{xu.EntryHeader=zS();xu.MainHeader=GS()});var YS=X((l2,JS)=>{JS.exports=function(r){var e=require("zlib"),t={chunkSize:(parseInt(r.length/1024)+1)*1024};return{deflate:function(){return e.deflateRawSync(r,t)},deflateAsync:function(n){var o=e.createDeflateRaw(t),i=[],a=0;o.on("data",function(s){i.push(s),a+=s.length}),o.on("end",function(){var s=Buffer.alloc(a),c=0;s.fill(0);for(var l=0;l<i.length;l++){var p=i[l];p.copy(s,c),c+=p.length}n&&n(s)}),o.end(r)}}}});var QS=X((p2,XS)=>{var QF=+(process.versions?process.versions.node:"").split(".")[0]||0;XS.exports=function(r,e){var t=require("zlib");let n=QF>=15&&e>0?{maxOutputLength:e}:{};return{inflate:function(){return t.inflateRawSync(r,n)},inflateAsync:function(o){var i=t.createInflateRaw(n),a=[],s=0;i.on("data",function(c){a.push(c),s+=c.length}),i.on("end",function(){var c=Buffer.alloc(s),l=0;c.fill(0);for(var p=0;p<a.length;p++){var u=a[p];u.copy(c,l),l+=u.length}o&&o(c)}),i.end(r)}}}});var nv=X((d2,rv)=>{"use strict";var{randomFillSync:ZS}=require("crypto"),ZF=Pc(),eI=new Uint32Array(256).map((r,e)=>{for(let t=0;t<8;t++)e&1?e=e>>>1^3988292384:e>>>=1;return e>>>0}),tv=(r,e)=>Math.imul(r,e)>>>0,ev=(r,e)=>eI[(r^e)&255]^r>>>8,Ra=()=>typeof ZS=="function"?ZS(Buffer.alloc(12)):Ra.node();Ra.node=()=>{let r=Buffer.alloc(12),e=r.length;for(let t=0;t<e;t++)r[t]=Math.random()*256&255;return r};var Rc={genSalt:Ra};function bc(r){let e=Buffer.isBuffer(r)?r:Buffer.from(r);this.keys=new Uint32Array([305419896,591751049,878082192]);for(let t=0;t<e.length;t++)this.updateKeys(e[t])}bc.prototype.updateKeys=function(r){let e=this.keys;return e[0]=ev(e[0],r),e[1]+=e[0]&255,e[1]=tv(e[1],134775813)+1,e[2]=ev(e[2],e[1]>>>24),r};bc.prototype.next=function(){let r=(this.keys[2]|2)>>>0;return tv(r,r^1)>>8&255};function tI(r){let e=new bc(r);return function(t){let n=Buffer.alloc(t.length),o=0;for(let i of t)n[o++]=e.updateKeys(i^e.next());return n}}function rI(r){let e=new bc(r);return function(t,n,o=0){n||(n=Buffer.alloc(t.length));for(let i of t){let a=e.next();n[o++]=i^a,e.updateKeys(i)}return n}}function nI(r,e,t){if(!r||!Buffer.isBuffer(r)||r.length<12)return Buffer.alloc(0);let n=tI(t),o=n(r.slice(0,12)),i=(e.flags&8)===8?e.timeHighByte:e.crc>>>24;if(o[11]!==i)throw ZF.WRONG_PASSWORD();return n(r.slice(12))}function oI(r){Buffer.isBuffer(r)&&r.length>=12?Rc.genSalt=function(){return r.slice(0,12)}:r==="node"?Rc.genSalt=Ra.node:Rc.genSalt=Ra}function iI(r,e,t,n=!1){r==null&&(r=Buffer.alloc(0)),Buffer.isBuffer(r)||(r=Buffer.from(r.toString()));let o=rI(t),i=Rc.genSalt();i[11]=e.crc>>>24&255,n&&(i[10]=e.crc>>>16&255);let a=Buffer.alloc(r.length+12);return o(i,a),o(r,a,12)}rv.exports={decrypt:nI,encrypt:iI,_salter:oI}});var ov=X(Ec=>{Ec.Deflater=YS();Ec.Inflater=QS();Ec.ZipCrypto=nv()});var Du=X((m2,iv)=>{var he=gi(),aI=Fu(),We=he.Constants,Iu=ov();iv.exports=function(r,e){var t=new aI.EntryHeader,n=Buffer.alloc(0),o=Buffer.alloc(0),i=!1,a=null,s=Buffer.alloc(0),c=Buffer.alloc(0),l=!0;let p=r,u=typeof p.decoder=="object"?p.decoder:he.decoder;l=u.hasOwnProperty("efs")?u.efs:!1;function g(){return!e||!(e instanceof Uint8Array)?Buffer.alloc(0):(c=t.loadLocalHeaderFromBinary(e),e.slice(t.realDataOffset,t.realDataOffset+t.compressedSize))}function m(h){if(!t.flags_desc&&!t.localHeader.flags_desc){if(he.crc32(h)!==t.localHeader.crc)return!1}else{let S={},k=t.realDataOffset+t.compressedSize;if(e.readUInt32LE(k)==We.LOCSIG||e.readUInt32LE(k)==We.CENSIG)throw he.Errors.DESCRIPTOR_NOT_EXIST();if(e.readUInt32LE(k)==We.EXTSIG)S.crc=e.readUInt32LE(k+We.EXTCRC),S.compressedSize=e.readUInt32LE(k+We.EXTSIZ),S.size=e.readUInt32LE(k+We.EXTLEN);else if(e.readUInt16LE(k+12)===19280)S.crc=e.readUInt32LE(k+We.EXTCRC-4),S.compressedSize=e.readUInt32LE(k+We.EXTSIZ-4),S.size=e.readUInt32LE(k+We.EXTLEN-4);else throw he.Errors.DESCRIPTOR_UNKNOWN();if(S.compressedSize!==t.compressedSize||S.size!==t.size||S.crc!==t.crc)throw he.Errors.DESCRIPTOR_FAULTY();if(he.crc32(h)!==S.crc)return!1}return!0}function f(h,S,k){if(typeof S>"u"&&typeof h=="string"&&(k=h,h=void 0),i)return h&&S&&S(Buffer.alloc(0),he.Errors.DIRECTORY_CONTENT_ERROR()),Buffer.alloc(0);var b=g();if(b.length===0)return h&&S&&S(b),b;if(t.encrypted){if(typeof k!="string"&&!Buffer.isBuffer(k))throw he.Errors.INVALID_PASS_PARAM();b=Iu.ZipCrypto.decrypt(b,t,k)}var P=Buffer.alloc(t.size);switch(t.method){case he.Constants.STORED:if(b.copy(P),m(P))return h&&S&&S(P),P;throw h&&S&&S(P,he.Errors.BAD_CRC()),he.Errors.BAD_CRC();case he.Constants.DEFLATED:var J=new Iu.Inflater(b,t.size);if(h)J.inflateAsync(function(M){M.copy(M,0),S&&(m(M)?S(M):S(M,he.Errors.BAD_CRC()))});else{if(J.inflate(P).copy(P,0),!m(P))throw he.Errors.BAD_CRC(`"${u.decode(n)}"`);return P}break;default:throw h&&S&&S(Buffer.alloc(0),he.Errors.UNKNOWN_METHOD()),he.Errors.UNKNOWN_METHOD()}}function y(h,S){if((!a||!a.length)&&Buffer.isBuffer(e))return h&&S&&S(g()),g();if(a.length&&!i){var k;switch(t.method){case he.Constants.STORED:return t.compressedSize=t.size,k=Buffer.alloc(a.length),a.copy(k),h&&S&&S(k),k;default:case he.Constants.DEFLATED:var b=new Iu.Deflater(a);if(h)b.deflateAsync(function(J){k=Buffer.alloc(J.length),t.compressedSize=J.length,J.copy(k),S&&S(k)});else{var P=b.deflate();return t.compressedSize=P.length,P}b=null;break}}else if(h&&S)S(Buffer.alloc(0));else return Buffer.alloc(0)}function C(h,S){return he.readBigUInt64LE(h,S)}function v(h){try{for(var S=0,k,b,P;S+4<h.length;)k=h.readUInt16LE(S),S+=2,b=h.readUInt16LE(S),S+=2,P=h.slice(S,S+b),S+=b,We.ID_ZIP64===k&&w(P)}catch{throw he.Errors.EXTRA_FIELD_PARSE_ERROR()}}function w(h){var S,k,b,P;h.length>=We.EF_ZIP64_SCOMP&&(S=C(h,We.EF_ZIP64_SUNCOMP),t.size===We.EF_ZIP64_OR_32&&(t.size=S)),h.length>=We.EF_ZIP64_RHO&&(k=C(h,We.EF_ZIP64_SCOMP),t.compressedSize===We.EF_ZIP64_OR_32&&(t.compressedSize=k)),h.length>=We.EF_ZIP64_DSN&&(b=C(h,We.EF_ZIP64_RHO),t.offset===We.EF_ZIP64_OR_32&&(t.offset=b)),h.length>=We.EF_ZIP64_DSN+4&&(P=h.readUInt32LE(We.EF_ZIP64_DSN),t.diskNumStart===We.EF_ZIP64_OR_16&&(t.diskNumStart=P))}return{get entryName(){return u.decode(n)},get rawEntryName(){return n},set entryName(h){n=he.toBuffer(h,u.encode);var S=n[n.length-1];i=S===47||S===92,t.fileNameLength=n.length},get efs(){return typeof l=="function"?l(this.entryName):l},get extra(){return s},set extra(h){s=h,t.extraLength=h.length,v(h)},get comment(){return u.decode(o)},set comment(h){if(o=he.toBuffer(h,u.encode),t.commentLength=o.length,o.length>65535)throw he.Errors.COMMENT_TOO_LONG()},get name(){var h=u.decode(n);return i?h.substr(h.length-1).split("/").pop():h.split("/").pop()},get isDirectory(){return i},getCompressedData:function(){return y(!1,null)},getCompressedDataAsync:function(h){y(!0,h)},setData:function(h){a=he.toBuffer(h,he.decoder.encode),!i&&a.length?(t.size=a.length,t.method=he.Constants.DEFLATED,t.crc=he.crc32(h),t.changed=!0):t.method=he.Constants.STORED},getData:function(h){return t.changed?a:f(!1,null,h)},getDataAsync:function(h,S){t.changed?h(a):f(!0,h,S)},set attr(h){t.attr=h},get attr(){return t.attr},set header(h){t.loadFromBinary(h)},get header(){return t},packCentralHeader:function(){t.flags_efs=this.efs,t.extraLength=s.length;var h=t.centralHeaderToBinary(),S=he.Constants.CENHDR;return n.copy(h,S),S+=n.length,s.copy(h,S),S+=t.extraLength,o.copy(h,S),h},packLocalHeader:function(){let h=0;t.flags_efs=this.efs,t.extraLocalLength=c.length;let S=t.localHeaderToBinary(),k=Buffer.alloc(S.length+n.length+t.extraLocalLength);return S.copy(k,h),h+=S.length,n.copy(k,h),h+=n.length,c.copy(k,h),h+=c.length,k},toJSON:function(){let h=function(S){return"<"+(S&&S.length+" bytes buffer"||"null")+">"};return{entryName:this.entryName,name:this.name,comment:this.comment,isDirectory:this.isDirectory,header:t.toJSON(),compressedData:h(e),data:h(a)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var cv=X((h2,sv)=>{var av=Du(),sI=Fu(),dt=gi();sv.exports=function(r,e){var t=[],n={},o=Buffer.alloc(0),i=new sI.MainHeader,a=!1,s=null;let c=new Set,l=e,{noSort:p,decoder:u}=l;r?f(l.readEntries):a=!0;function g(){let C=new Set;for(let v of Object.keys(n)){let w=v.split("/");if(w.pop(),!!w.length)for(let h=0;h<w.length;h++){let S=w.slice(0,h+1).join("/")+"/";C.add(S)}}for(let v of C)if(!(v in n)){let w=new av(l);w.entryName=v,w.attr=16,w.temporary=!0,t.push(w),n[w.entryName]=w,c.add(w)}}function m(){if(a=!0,n={},i.diskEntries>(r.length-i.offset)/dt.Constants.CENHDR)throw dt.Errors.DISK_ENTRY_TOO_LARGE();t=new Array(i.diskEntries);for(var C=i.offset,v=0;v<t.length;v++){var w=C,h=new av(l,r);h.header=r.slice(w,w+=dt.Constants.CENHDR),h.entryName=r.slice(w,w+=h.header.fileNameLength),h.header.extraLength&&(h.extra=r.slice(w,w+=h.header.extraLength)),h.header.commentLength&&(h.comment=r.slice(w,w+h.header.commentLength)),C+=h.header.centralHeaderSize,t[v]=h,n[h.entryName]=h}c.clear(),g()}function f(C){var v=r.length-dt.Constants.ENDHDR,w=Math.max(0,v-65535),h=w,S=r.length,k=-1,b=0;for((typeof l.trailingSpace=="boolean"?l.trailingSpace:!1)&&(w=0),v;v>=h;v--)if(r[v]===80){if(r.readUInt32LE(v)===dt.Constants.ENDSIG){k=v,b=v,S=v+dt.Constants.ENDHDR,h=v-dt.Constants.END64HDR;continue}if(r.readUInt32LE(v)===dt.Constants.END64SIG){h=w;continue}if(r.readUInt32LE(v)===dt.Constants.ZIP64SIG){k=v,S=v+dt.readBigUInt64LE(r,v+dt.Constants.ZIP64SIZE)+dt.Constants.ZIP64LEAD;break}}if(k==-1)throw dt.Errors.INVALID_FORMAT();i.loadFromBinary(r.slice(k,S)),i.commentLength&&(o=r.slice(b+dt.Constants.ENDHDR)),C&&m()}function y(){t.length>1&&!p&&t.sort((C,v)=>C.entryName.toLowerCase().localeCompare(v.entryName.toLowerCase()))}return{get entries(){return a||m(),t.filter(C=>!c.has(C))},get comment(){return u.decode(o)},set comment(C){o=dt.toBuffer(C,u.encode),i.commentLength=o.length},getEntryCount:function(){return a?t.length:i.diskEntries},forEach:function(C){this.entries.forEach(C)},getEntry:function(C){return a||m(),n[C]||null},setEntry:function(C){a||m(),t.push(C),n[C.entryName]=C,i.totalEntries=t.length},deleteFile:function(C,v=!0){a||m();let w=n[C];this.getEntryChildren(w,v).map(S=>S.entryName).forEach(this.deleteEntry)},deleteEntry:function(C){a||m();let v=n[C],w=t.indexOf(v);w>=0&&(t.splice(w,1),delete n[C],i.totalEntries=t.length)},getEntryChildren:function(C,v=!0){if(a||m(),typeof C=="object")if(C.isDirectory&&v){let w=[],h=C.entryName;for(let S of t)S.entryName.startsWith(h)&&w.push(S);return w}else return[C];return[]},getChildCount:function(C){if(C&&C.isDirectory){let v=this.getEntryChildren(C);return v.includes(C)?v.length-1:v.length}return 0},compressToBuffer:function(){a||m(),y();let C=[],v=[],w=0,h=0;i.size=0,i.offset=0;let S=0;for(let P of this.entries){let J=P.getCompressedData();P.header.offset=h;let M=P.packLocalHeader(),H=M.length+J.length;h+=H,C.push(M),C.push(J);let L=P.packCentralHeader();v.push(L),i.size+=L.length,w+=H+L.length,S++}w+=i.mainHeaderSize,i.offset=h,i.totalEntries=S,h=0;let k=Buffer.alloc(w);for(let P of C)P.copy(k,h),h+=P.length;for(let P of v)P.copy(k,h),h+=P.length;let b=i.toBinary();return o&&o.copy(b,dt.Constants.ENDHDR),b.copy(k,h),r=k,a=!1,k},toAsyncBuffer:function(C,v,w,h){try{a||m(),y();let S=[],k=[],b=0,P=0,J=0;i.size=0,i.offset=0;let M=function(H){if(H.length>0){let L=H.shift(),Z=L.entryName+L.extra.toString();w&&w(Z),L.getCompressedDataAsync(function(U){h&&h(Z),L.header.offset=P;let V=L.packLocalHeader(),G=V.length+U.length;P+=G,S.push(V),S.push(U);let te=L.packCentralHeader();k.push(te),i.size+=te.length,b+=G+te.length,J++,M(H)})}else{b+=i.mainHeaderSize,i.offset=P,i.totalEntries=J,P=0;let L=Buffer.alloc(b);S.forEach(function(U){U.copy(L,P),P+=U.length}),k.forEach(function(U){U.copy(L,P),P+=U.length});let Z=i.toBinary();o&&o.copy(Z,dt.Constants.ENDHDR),Z.copy(L,P),r=L,a=!1,C(L)}};M(Array.from(this.entries))}catch(S){v(S)}}}}});var dv=X((f2,pv)=>{var _e=gi(),Oe=require("path"),cI=Du(),lI=cv(),So=(...r)=>_e.findLast(r,e=>typeof e=="boolean"),lv=(...r)=>_e.findLast(r,e=>typeof e=="string"),pI=(...r)=>_e.findLast(r,e=>typeof e=="function"),dI={noSort:!1,readEntries:!1,method:_e.Constants.NONE,fs:null};pv.exports=function(r,e){let t=null,n=Object.assign(Object.create(null),dI);r&&typeof r=="object"&&(r instanceof Uint8Array||(Object.assign(n,r),r=n.input?n.input:void 0,n.input&&delete n.input),Buffer.isBuffer(r)&&(t=r,n.method=_e.Constants.BUFFER,r=void 0)),Object.assign(n,e);let o=new _e(n);if((typeof n.decoder!="object"||typeof n.decoder.encode!="function"||typeof n.decoder.decode!="function")&&(n.decoder=_e.decoder),r&&typeof r=="string")if(o.fs.existsSync(r))n.method=_e.Constants.FILE,n.filename=r,t=o.fs.readFileSync(r);else throw _e.Errors.INVALID_FILENAME();let i=new lI(t,n),{canonical:a,sanitize:s,zipnamefix:c}=_e;function l(m){if(m&&i){var f;if(typeof m=="string"&&(f=i.getEntry(Oe.posix.normalize(m))),typeof m=="object"&&typeof m.entryName<"u"&&typeof m.header<"u"&&(f=i.getEntry(m.entryName)),f)return f}return null}function p(m){let{join:f,normalize:y,sep:C}=Oe.posix;return f(Oe.isAbsolute(m)?"/":".",y(C+m.split("\\").join(C)+C))}function u(m){return m instanceof RegExp?function(f){return function(y){return f.test(y)}}(m):typeof m!="function"?()=>!0:m}let g=(m,f)=>{let y=f.slice(-1);return y=y===o.sep?o.sep:"",Oe.relative(m,f)+y};return{readFile:function(m,f){var y=l(m);return y&&y.getData(f)||null},childCount:function(m){let f=l(m);if(f)return i.getChildCount(f)},readFileAsync:function(m,f){var y=l(m);y?y.getDataAsync(f):f(null,"getEntry failed for:"+m)},readAsText:function(m,f){var y=l(m);if(y){var C=y.getData();if(C&&C.length)return C.toString(f||"utf8")}return""},readAsTextAsync:function(m,f,y){var C=l(m);C?C.getDataAsync(function(v,w){if(w){f(v,w);return}v&&v.length?f(v.toString(y||"utf8")):f("")}):f("")},deleteFile:function(m,f=!0){var y=l(m);y&&i.deleteFile(y.entryName,f)},deleteEntry:function(m){var f=l(m);f&&i.deleteEntry(f.entryName)},addZipComment:function(m){i.comment=m},getZipComment:function(){return i.comment||""},addZipEntryComment:function(m,f){var y=l(m);y&&(y.comment=f)},getZipEntryComment:function(m){var f=l(m);return f&&f.comment||""},updateFile:function(m,f){var y=l(m);y&&y.setData(f)},addLocalFile:function(m,f,y,C){if(o.fs.existsSync(m)){f=f?p(f):"";let v=Oe.win32.basename(Oe.win32.normalize(m));f+=y||v;let w=o.fs.statSync(m),h=w.isFile()?o.fs.readFileSync(m):Buffer.alloc(0);w.isDirectory()&&(f+=o.sep),this.addFile(f,h,C,w)}else throw _e.Errors.FILE_NOT_FOUND(m)},addLocalFileAsync:function(m,f){m=typeof m=="object"?m:{localPath:m};let y=Oe.resolve(m.localPath),{comment:C}=m,{zipPath:v,zipName:w}=m,h=this;o.fs.stat(y,function(S,k){if(S)return f(S,!1);v=v?p(v):"";let b=Oe.win32.basename(Oe.win32.normalize(y));if(v+=w||b,k.isFile())o.fs.readFile(y,function(P,J){return P?f(P,!1):(h.addFile(v,J,C,k),setImmediate(f,void 0,!0))});else if(k.isDirectory())return v+=o.sep,h.addFile(v,Buffer.alloc(0),C,k),setImmediate(f,void 0,!0)})},addLocalFolder:function(m,f,y){if(y=u(y),f=f?p(f):"",m=Oe.normalize(m),o.fs.existsSync(m)){let C=o.findFiles(m),v=this;if(C.length)for(let w of C){let h=Oe.join(f,g(m,w));y(h)&&v.addLocalFile(w,Oe.dirname(h))}}else throw _e.Errors.FILE_NOT_FOUND(m)},addLocalFolderAsync:function(m,f,y,C){C=u(C),y=y?p(y):"",m=Oe.normalize(m);var v=this;o.fs.open(m,"r",function(w){if(w&&w.code==="ENOENT")f(void 0,_e.Errors.FILE_NOT_FOUND(m));else if(w)f(void 0,w);else{var h=o.findFiles(m),S=-1,k=function(){if(S+=1,S<h.length){var b=h[S],P=g(m,b).split("\\").join("/");P=P.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,""),C(P)?o.fs.stat(b,function(J,M){J&&f(void 0,J),M.isFile()?o.fs.readFile(b,function(H,L){H?f(void 0,H):(v.addFile(y+P,L,"",M),k())}):(v.addFile(y+P+"/",Buffer.alloc(0),"",M),k())}):process.nextTick(()=>{k()})}else f(!0,void 0)};k()}})},addLocalFolderAsync2:function(m,f){let y=this;m=typeof m=="object"?m:{localPath:m},localPath=Oe.resolve(p(m.localPath));let{zipPath:C,filter:v,namefix:w}=m;v instanceof RegExp?v=function(k){return function(b){return k.test(b)}}(v):typeof v!="function"&&(v=function(){return!0}),C=C?p(C):"",w=="latin1"&&(w=k=>k.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,"")),typeof w!="function"&&(w=k=>k);let h=k=>Oe.join(C,w(g(localPath,k))),S=k=>Oe.win32.basename(Oe.win32.normalize(w(k)));o.fs.open(localPath,"r",function(k){k&&k.code==="ENOENT"?f(void 0,_e.Errors.FILE_NOT_FOUND(localPath)):k?f(void 0,k):o.findFilesAsync(localPath,function(b,P){if(b)return f(b);P=P.filter(J=>v(h(J))),P.length||f(void 0,!1),setImmediate(P.reverse().reduce(function(J,M){return function(H,L){if(H||L===!1)return setImmediate(J,H,!1);y.addLocalFileAsync({localPath:M,zipPath:Oe.dirname(h(M)),zipName:S(M)},J)}},f))})})},addLocalFolderPromise:function(m,f){return new Promise((y,C)=>{this.addLocalFolderAsync2(Object.assign({localPath:m},f),(v,w)=>{v&&C(v),w&&y(this)})})},addFile:function(m,f,y,C){m=c(m);let v=l(m),w=v!=null;w||(v=new cI(n),v.entryName=m),v.comment=y||"";let h=typeof C=="object"&&C instanceof o.fs.Stats;h&&(v.header.time=C.mtime);var S=v.isDirectory?16:0;let k=v.isDirectory?16384:32768;return h?k|=4095&C.mode:typeof C=="number"?k|=4095&C:k|=v.isDirectory?493:420,S=(S|k<<16)>>>0,v.attr=S,v.setData(f),w||i.setEntry(v),v},getEntries:function(m){return i.password=m,i?i.entries:[]},getEntry:function(m){return l(m)},getEntryCount:function(){return i.getEntryCount()},forEach:function(m){return i.forEach(m)},extractEntryTo:function(m,f,y,C,v,w){C=So(!1,C),v=So(!1,v),y=So(!0,y),w=lv(v,w);var h=l(m);if(!h)throw _e.Errors.NO_ENTRY();var S=a(h.entryName),k=s(f,w&&!h.isDirectory?w:y?S:Oe.basename(S));if(h.isDirectory){var b=i.getEntryChildren(h);return b.forEach(function(M){if(M.isDirectory)return;var H=M.getData();if(!H)throw _e.Errors.CANT_EXTRACT_FILE();var L=a(M.entryName),Z=s(f,y?L:Oe.basename(L));let U=v?M.header.fileAttr:void 0;o.writeFileTo(Z,H,C,U)}),!0}var P=h.getData(i.password);if(!P)throw _e.Errors.CANT_EXTRACT_FILE();if(o.fs.existsSync(k)&&!C)throw _e.Errors.CANT_OVERRIDE();let J=v?m.header.fileAttr:void 0;return o.writeFileTo(k,P,C,J),!0},test:function(m){if(!i)return!1;for(var f in i.entries)try{if(f.isDirectory)continue;var y=i.entries[f].getData(m);if(!y)return!1}catch{return!1}return!0},extractAllTo:function(m,f,y,C){if(y=So(!1,y),C=lv(y,C),f=So(!1,f),!i)throw _e.Errors.NO_ZIP();i.entries.forEach(function(v){var w=s(m,a(v.entryName));if(v.isDirectory){o.makeDir(w);return}var h=v.getData(C);if(!h)throw _e.Errors.CANT_EXTRACT_FILE();let S=y?v.header.fileAttr:void 0;o.writeFileTo(w,h,f,S);try{o.fs.utimesSync(w,v.header.time,v.header.time)}catch{throw _e.Errors.CANT_EXTRACT_FILE()}})},extractAllToAsync:function(m,f,y,C){if(C=pI(f,y,C),y=So(!1,y),f=So(!1,f),!C)return new Promise((k,b)=>{this.extractAllToAsync(m,f,y,function(P){P?b(P):k(this)})});if(!i){C(_e.Errors.NO_ZIP());return}m=Oe.resolve(m);let v=k=>s(m,Oe.normalize(a(k.entryName))),w=(k,b)=>new Error(k+': "'+b+'"'),h=[],S=[];i.entries.forEach(k=>{k.isDirectory?h.push(k):S.push(k)});for(let k of h){let b=v(k),P=y?k.header.fileAttr:void 0;try{o.makeDir(b),P&&o.fs.chmodSync(b,P),o.fs.utimesSync(b,k.header.time,k.header.time)}catch{C(w("Unable to create folder",b))}}S.reverse().reduce(function(k,b){return function(P){if(P)k(P);else{let J=Oe.normalize(a(b.entryName)),M=s(m,J);b.getDataAsync(function(H,L){if(L)k(L);else if(!H)k(_e.Errors.CANT_EXTRACT_FILE());else{let Z=y?b.header.fileAttr:void 0;o.writeFileToAsync(M,H,f,Z,function(U){U||k(w("Unable to write file",M)),o.fs.utimes(M,b.header.time,b.header.time,function(V){V?k(w("Unable to set times",M)):k()})})}})}}},C)()},writeZip:function(m,f){if(arguments.length===1&&typeof m=="function"&&(f=m,m=""),!m&&n.filename&&(m=n.filename),!!m){var y=i.compressToBuffer();if(y){var C=o.writeFileTo(m,y,!0);typeof f=="function"&&f(C?null:new Error("failed"),"")}}},writeZipPromise:function(m,f){let{overwrite:y,perm:C}=Object.assign({overwrite:!0},f);return new Promise((v,w)=>{!m&&n.filename&&(m=n.filename),m||w("ADM-ZIP: ZIP File Name Missing"),this.toBufferPromise().then(h=>{let S=k=>k?v(k):w("ADM-ZIP: Wasn't able to write zip file");o.writeFileToAsync(m,h,y,C,S)},w)})},toBufferPromise:function(){return new Promise((m,f)=>{i.toAsyncBuffer(m,f)})},toBuffer:function(m,f,y,C){return typeof m=="function"?(i.toAsyncBuffer(m,f,y,C),null):i.compressToBuffer()}}}});var Rr,Zu=fe(()=>{Rr=class extends Error{constructor(e,t){super(`${e} at position ${t}`),this.position=t}}});function sk(r){return/^[0-9A-Fa-f]$/.test(r)}function Bn(r){return r>="0"&&r<="9"}function ck(r){return r>=" "}function Ma(r){return`,:[]/{}()
|
|
9
|
+
+`.includes(r)}function em(r){return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$"}function tm(r){return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$"||r>="0"&&r<="9"}function om(r){return`,[]/{}
|
|
10
|
+
+`.includes(r)}function im(r){return xa(r)||OI.test(r)}function lk(r){return r===`
|
|
11
|
+
`||r==="\r"||r===" "||r==="\b"||r==="\f"}function jn(r,e){let t=r.charCodeAt(e);return t===32||t===10||t===9||t===13}function pk(r,e){let t=r.charCodeAt(e);return t===32||t===9||t===13}function dk(r,e){let t=r.charCodeAt(e);return t===160||t>=8192&&t<=8202||t===8239||t===8287||t===12288}function xa(r){return am(r)||qc(r)}function am(r){return r==='"'||r==="\u201C"||r==="\u201D"}function sm(r){return r==='"'}function qc(r){return r==="'"||r==="\u2018"||r==="\u2019"||r==="`"||r==="\xB4"}function cm(r){return r==="'"}function bi(r,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=r.lastIndexOf(e);return n!==-1?r.substring(0,n)+(t?"":r.substring(n+1)):r}function pr(r,e){let t=r.length;if(!jn(r,t-1))return r+e;for(;jn(r,t-1);)t--;return r.substring(0,t)+e+r.substring(t)}function uk(r,e,t){return r.substring(0,e)+r.substring(e+t)}function mk(r){return/[,\n][ \t\r]*$/.test(r)}var rm,nm,OI,hk=fe(()=>{rm=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,nm=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;OI=/^[[{\w-]$/});function fk(r){let e=0,t="";l(["```","[```","{```"]),i()||V(),l(["```","```]","```}"]);let o=u(",");for(o&&a(),im(r[e])&&mk(t)?(o||(t=pr(t,",")),v()):o&&(t=bi(t,","));r[e]==="}"||r[e]==="]";)e++,a();if(e>=r.length)return t;U();function i(){a();let I=y()||C()||w()||S()||k()||P(!1)||J();return a(),I}function a(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,j=e,ie=s(I);do ie=c(),ie&&(ie=s(I));while(ie);return e>j}function s(I){let j=I?jn:pk,ie="";for(;;)if(j(r,e))ie+=r[e],e++;else if(dk(r,e))ie+=" ",e++;else break;return ie.length>0?(t+=ie,!0):!1}function c(){if(r[e]==="/"&&r[e+1]==="*"){for(;e<r.length&&!NI(r,e);)e++;return e+=2,!0}if(r[e]==="/"&&r[e+1]==="/"){for(;e<r.length&&r[e]!==`
|
|
12
|
+
`;)e++;return!0}return!1}function l(I){if(p(I)){if(em(r[e]))for(;e<r.length&&tm(r[e]);)e++;return a(),!0}return!1}function p(I){s(!0);for(let j of I){let ie=e+j.length;if(r.slice(e,ie)===j)return e=ie,!0}return!1}function u(I){return r[e]===I?(t+=r[e],e++,!0):!1}function g(I){return r[e]===I?(e++,!0):!1}function m(){return g("\\")}function f(){return a(),r[e]==="."&&r[e+1]==="."&&r[e+2]==="."?(e+=3,a(),g(","),!0):!1}function y(){if(r[e]==="{"){t+="{",e++,a(),g(",")&&a();let I=!0;for(;e<r.length&&r[e]!=="}";){let j;if(I?(j=!0,I=!1):(j=u(","),j||(t=pr(t,",")),a()),f(),!(w()||P(!0))){r[e]==="}"||r[e]==="{"||r[e]==="]"||r[e]==="["||r[e]===void 0?t=bi(t,","):G();break}a();let hn=u(":"),fr=e>=r.length;hn||(im(r[e])||fr?t=pr(t,":"):te()),i()||(hn||fr?t+="null":te())}return r[e]==="}"?(t+="}",e++):t=pr(t,"}"),!0}return!1}function C(){if(r[e]==="["){t+="[",e++,a(),g(",")&&a();let I=!0;for(;e<r.length&&r[e]!=="]";)if(I?I=!1:u(",")||(t=pr(t,",")),f(),!i()){t=bi(t,",");break}return r[e]==="]"?(t+="]",e++):t=pr(t,"]"),!0}return!1}function v(){let I=!0,j=!0;for(;j;)I?I=!1:u(",")||(t=pr(t,",")),j=i();j||(t=bi(t,",")),t=`[
|
|
13
13
|
${t}
|
|
14
|
-
]`}function
|
|
15
|
-
`,r:"\r",t:" "}});var
|
|
14
|
+
]`}function w(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,ie=r[e]==="\\";if(ie&&(e++,ie=!0),xa(r[e])){let hn=sm(r[e])?sm:cm(r[e])?cm:qc(r[e])?qc:am,fr=e,be=t.length,se='"';for(e++;;){if(e>=r.length){let Je=M(e-1);return!I&&Ma(r.charAt(Je))?(e=fr,t=t.substring(0,be),w(!0)):(se=pr(se,'"'),t+=se,!0)}if(e===j)return se=pr(se,'"'),t+=se,!0;if(hn(r[e])){let Je=e,Gi=se.length;if(se+='"',e++,t+=se,a(!1),I||e>=r.length||Ma(r[e])||xa(r[e])||Bn(r[e]))return h(),!0;let Vt=M(Je-1),Qn=r.charAt(Vt);if(Qn===",")return e=fr,t=t.substring(0,be),w(!1,Vt);if(Ma(Qn))return e=fr,t=t.substring(0,be),w(!0);t=t.substring(0,be),e=Je+1,se=`${se.substring(0,Gi)}\\${se.substring(Gi)}`}else if(I&&om(r[e])){if(r[e-1]===":"&&rm.test(r.substring(fr+1,e+2)))for(;e<r.length&&nm.test(r[e]);)se+=r[e],e++;return se=pr(se,'"'),t+=se,h(),!0}else if(r[e]==="\\"){let Je=r.charAt(e+1);if(LI[Je]!==void 0)se+=r.slice(e,e+2),e+=2;else if(Je==="u"){let Vt=2;for(;Vt<6&&sk(r[e+Vt]);)Vt++;Vt===6?(se+=r.slice(e,e+6),e+=6):e+Vt>=r.length?e=r.length:oe()}else se+=Je,e+=2}else{let Je=r.charAt(e);Je==='"'&&r[e-1]!=="\\"?(se+=`\\${Je}`,e++):lk(Je)?(se+=_I[Je],e++):(ck(Je)||Z(Je),se+=Je,e++)}ie&&m()}}return!1}function h(){let I=!1;for(a();r[e]==="+";){I=!0,e++,a(),t=bi(t,'"',!0);let j=t.length;w()?t=uk(t,j,1):t=pr(t,'"')}return I}function S(){let I=e;if(r[e]==="-"){if(e++,H())return L(I),!0;if(!Bn(r[e]))return e=I,!1}for(;Bn(r[e]);)e++;if(r[e]==="."){if(e++,H())return L(I),!0;if(!Bn(r[e]))return e=I,!1;for(;Bn(r[e]);)e++}if(r[e]==="e"||r[e]==="E"){if(e++,(r[e]==="-"||r[e]==="+")&&e++,H())return L(I),!0;if(!Bn(r[e]))return e=I,!1;for(;Bn(r[e]);)e++}if(!H())return e=I,!1;if(e>I){let j=r.slice(I,e),ie=/^0\d/.test(j);return t+=ie?`"${j}"`:j,!0}return!1}function k(){return b("true","true")||b("false","false")||b("null","null")||b("True","true")||b("False","false")||b("None","null")}function b(I,j){return r.slice(e,e+I.length)===I?(t+=j,e+=I.length,!0):!1}function P(I){let j=e;if(em(r[e])){for(;e<r.length&&tm(r[e]);)e++;let ie=e;for(;jn(r,ie);)ie++;if(r[ie]==="(")return e=ie+1,i(),r[e]===")"&&(e++,r[e]===";"&&e++),!0}for(;e<r.length&&!om(r[e])&&!xa(r[e])&&(!I||r[e]!==":");)e++;if(r[e-1]===":"&&rm.test(r.substring(j,e+2)))for(;e<r.length&&nm.test(r[e]);)e++;if(e>j){for(;jn(r,e-1)&&e>0;)e--;let ie=r.slice(j,e);return t+=ie==="undefined"?"null":JSON.stringify(ie),r[e]==='"'&&e++,!0}}function J(){if(r[e]==="/"){let I=e;for(e++;e<r.length&&(r[e]!=="/"||r[e-1]==="\\");)e++;return e++,t+=`"${r.substring(I,e)}"`,!0}}function M(I){let j=I;for(;j>0&&jn(r,j);)j--;return j}function H(){return e>=r.length||Ma(r[e])||jn(r,e)}function L(I){t+=`${r.slice(I,e)}0`}function Z(I){throw new Rr(`Invalid character ${JSON.stringify(I)}`,e)}function U(){throw new Rr(`Unexpected character ${JSON.stringify(r[e])}`,e)}function V(){throw new Rr("Unexpected end of json string",r.length)}function G(){throw new Rr("Object key expected",e)}function te(){throw new Rr("Colon expected",e)}function oe(){let I=r.slice(e,e+6);throw new Rr(`Invalid unicode character "${I}"`,e)}}function NI(r,e){return r[e]==="*"&&r[e+1]==="/"}var _I,LI,gk=fe(()=>{Zu();hk();_I={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},LI={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
|
|
15
|
+
`,r:"\r",t:" "}});var yk={};$p(yk,{JSONRepairError:()=>Rr,jsonrepair:()=>fk});var Ck=fe(()=>{gk();Zu()});function $c(r,e){let t=Qt.posix.dirname(le(e));return Qt.join(ae(r,t),Q)}function Hc(r){return Qt.posix.basename(le(r))}function pm(r){for(let e=0;e<r.length;e++){let t=r.charCodeAt(e);if(t!==32&&t!==9&&t!==10&&t!==13)return!1}return!0}function Tk(r){if(pm(r))return!0;try{let e=JSON.parse(r);return q(e)&&Object.keys(e).length===0}catch{return!1}}async function dm(r){let e;try{e=await dr.promises.stat(r)}catch(a){if(x(a))return!1;throw a}if(!e.isDirectory())return!1;let t=Qt.join(Qt.dirname(r),Q),n;try{n=await dr.promises.readFile(t,"utf-8")}catch(a){if(x(a))return!1;throw a}if(Tk(n))return!1;let o;try{o=JSON.parse(n)}catch{return!1}if(!q(o))return!1;let i=o[Qt.basename(r)];return q(i)}async function Mk(r){if(!await dm(r))return!0;let e=Qt.join(r,Q);try{let t=await dr.promises.readFile(e,"utf-8");return Tk(t)}catch(t){if(x(t))return!0;throw t}}async function zc(r){let e=Buffer.alloc(100),t=await dr.promises.open(r,"r"),n;try{let{bytesRead:a}=await t.read(e,0,e.length,0);n=e.toString("utf-8",0,a)}finally{await t.close()}let o=Rk.exec(n);if(o)return String(JSON.parse(o[1]));let i=await dr.promises.readFile(r,"utf-8");return um(i)}function um(r){let e=r.slice(0,100),t=Rk.exec(e);if(t)return String(JSON.parse(t[1]));let n=JSON.parse(r);return n.version==null?void 0:String(n.version)}async function Ia(r,e,t){let n=$c(r,e);return await Ok(n),xk(n,t)}async function Er(r,e){let t=ae(r,e);await Ok(t);try{let n=await dr.promises.readFile(t,"utf-8");if(pm(n))return{dotMeta:{},exists:!0,readable:!0};try{return{dotMeta:Fa(t,n),exists:!0,readable:!0}}catch(o){try{let i=await Fk(n),a=Fa(t,i);return ko.debug(`read repaired damaged .meta file without writing: ${t}`,o),{dotMeta:a,exists:!0,readable:!1,damaged:!0,repairable:!0}}catch(i){return ko.debug(`failed to parse damaged .meta file without writing: ${t}`,i),{dotMeta:{},exists:!0,readable:!1,damaged:!0,repairable:!1}}}}catch(n){if(x(n))return ko.debug(`.meta file does not exist: ${t}`),{dotMeta:{},exists:!1,readable:!0};throw n}}async function Da(r,e){let t=$c(r,e);await Yc(t,!0,n=>{delete n[Hc(e)]})}async function Kc(r,e,t){let n=ae(r,e),i=(on.get(n)??Promise.resolve()).catch(()=>{}).then(()=>mm(n,t));on.set(n,i);try{await i}finally{on.get(n)===i&&on.delete(n)}}async function xk(r,e={}){let t=e.strict??!1,n=e.silentMissing??!0;try{let o=await dr.promises.readFile(r,"utf-8");return pm(o)?{}:await VI(r,o)}catch(o){if(x(o))return n||ko.debug(`read missing .meta as empty: ${r}`),{};if(t)throw new Ei(r,o);return ko.warn(`failed to read .meta file: ${r}`,o),{}}}async function VI(r,e){try{return Fa(r,e)}catch(t){let n=await Fk(e),o=Fa(r,n);return await mm(r,o),ko.debug(`repaired invalid .meta file: ${r}`,t),o}}async function Fk(r){lm||(lm=Promise.resolve().then(()=>(Ck(),yk)));let e=await lm;for(let t of Ik(r))try{let n=e.jsonrepair(t);return Fa(".meta",n),n}catch(n){ko.debug("failed to repair .meta git conflict candidate",n)}return e.jsonrepair(r)}function Ik(r){let e=qI(r);if(!e)return[];let t=[$I(e.left,e.right),e.right,e.left],n=[];for(let o of t){let i=r.slice(0,e.start)+o+r.slice(e.end),a=Ik(i);a.length===0?n.push(i):n.push(...a)}return Array.from(new Set(n))}function qI(r){let e=r.indexOf("<<<<<<<");if(e<0)return;let t=r.indexOf(`
|
|
16
16
|
`,e),n=r.indexOf(`
|
|
17
17
|
=======`,t),o=r.indexOf(`
|
|
18
18
|
>>>>>>>`,n);if(t<0||n<0||o<0)return;let i=r.indexOf(`
|
|
19
|
-
`,o+1),a=i<0?r.length:i+1;return{start:e,end:a,left:r.slice(t+1,n),right:r.slice(n+8,o)}}function
|
|
20
|
-
`)}function rF(r){return/^\s*"([^"]+)"\s*:/.exec(r)?.[1]}function Qi(r,e){let t=JSON.parse(e);if(V(t))return t;throw new Xo(r,new Error(".meta root must be an object"))}async function Ie(r,e,t){return(await Zi(r,e,t))[nc(e)]}async function ta(r,e,t){let n=rc(r,e.path);await cc(n,!1,o=>{o[nc(e.path)]=Vt(e,t)})}async function XS(r,e,t){let n=new Map;for(let o of e){let i=rc(r,o.path),a=n.get(i);a?a.push(o):n.set(i,[o])}await Promise.all([...n].map(async([o,i])=>{await cc(o,!1,a=>{for(let s of i)a[nc(s.path)]=Vt(s,t)})}))}async function ac(r,e,t){let n=Bt.join(te(r,e),Y);await cc(n,!1,o=>{for(let[i,a]of Object.entries(t))a?o[i]=a:delete o[i]})}async function ro(r){return(await Promise.all(r.map(async t=>(await tr.promises.stat(t)).isDirectory()?1+await QS(t):1))).reduce((t,n)=>t+n,0)}async function QS(r){let e=await tr.promises.readdir(r,{withFileTypes:!0});return(await Promise.all(e.filter(n=>n.name!==Y).map(async n=>n.isDirectory()?1+await QS(Bt.join(r,n.name)):1))).reduce((n,o)=>n+o,0)}async function sc(r){let e=(0,US.createHash)("sha256");return await(0,BS.pipeline)(tr.createReadStream(r,{highWaterMark:64*1024}),new jS.Writable({write(t,n,o){e.update(t),o()}})),e.digest("hex")}function Vt(r,e){let t={};if(hr(t,"id",r.id),hr(t,"revision",r.revision),e?.writeContentInfo){if(r.size!==void 0){if(!Number.isSafeInteger(r.size)||r.size<0)throw new Error(`invalid file content size: ${r.path}`);t.size=r.size}if(r.hash!==void 0){let n=r.hash.trim().toLowerCase();if(!Xx.test(n))throw new Error(`invalid file content hash: ${r.path}`);t.hash=n}}return hr(t,"icon",r.icon),hr(t,"desc",r.desc),r.isFolder&&r.type&&r.type!==Yx&&(t.type=r.type),hr(t,"order",r.order),hr(t,"creator",r.creator),hr(t,"createTime",r.createTime),hr(t,"modifier",r.modifier),hr(t,"modifyTime",r.modifyTime),r.hidden&&(t.hidden=!0),hr(t,"subFileType",r.subFileType),hr(t,"labels",r.labels),WS(t,"option",r.option),WS(t,"customOption",r.customOption),ev(t)}function no(r,e,t=!0){for(let n of $S)if(!(t&&Qx.has(n))&&!nF(r,e,n))return!1;return!0}function nF(r,e,t){let n=r[t],o=e[t];return(n===""||n===!1)&&(n=void 0),(o===""||o===!1)&&(o=void 0),n===o?!0:t==="option"||t==="customOption"?(0,VS.isDeepStrictEqual)(n,o)?!0:(n&&Object.keys(n).length===0&&(n=void 0),o&&Object.keys(o).length===0&&(o=void 0),n===o):!1}function oo(r){if(!r)return{};let e={...r};for(let t of HS)delete e[t];return e}async function cc(r,e,t){let o=(Hr.get(r)??Promise.resolve()).catch(()=>{}).then(async()=>{let i=await GS(r,{strict:e});t(i),await su(r,i)});Hr.set(r,o);try{await o}finally{Hr.get(r)===o&&Hr.delete(r)}}async function ZS(r){let e=Hr.get(r);e&&await e.catch(()=>{})}async function su(r,e){await cn(r,JSON.stringify(oF(e),null,Jx))}function oF(r){let e={};for(let t of Object.keys(r))e[t]=ev(r[t]);return e}function ev(r){let e={};for(let t of $S)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}function hr(r,e,t){t==null||t===""||typeof t=="number"&&t===0||(r[e]=t)}function WS(r,e,t){!t||Object.keys(t).length===0||(r[e]=t)}var tr,Bt,US,jS,BS,VS,to,Y,Jx,Yx,qS,Xx,$S,HS,Qx,Hr,nu,Xo,Je=pe(()=>{tr=b(require("fs")),Bt=b(require("path")),US=require("node:crypto"),jS=require("node:stream"),BS=require("node:stream/promises"),VS=require("node:util");$();G();D();To();ne();vt();to=T("common.meta"),Y=".meta",Jx=" ",Yx="fold",qS=/"version"\s*:\s*("(?:\\.|[^"\\])*")/,Xx=/^[0-9a-f]{64}$/,$S=["id","revision","size","hash","icon","desc","type","order","creator","createTime","modifier","modifyTime","hidden","subFileType","labels","option","customOption"],HS=["id","revision","size","hash","type","creator","createTime","modifier","modifyTime","subFileType"],Qx=new Set(HS),Hr=new Map,Xo=class extends Error{constructor(t,n){super(`invalid .meta file: ${t}`);this.filePath=t;this.cause=n;this.name="DotMetaParseError"}}});function cu(r,e){return tv.join(te(r,e),ra)}async function pc(r,e){await lc.promises.mkdir(te(r,e),{recursive:!0}),await lc.promises.writeFile(cu(r,e),"","utf8")}async function dc(r,e){await lc.promises.rm(cu(r,e),{force:!0})}function uc(r,e){return Z(cu(r,e))}var lc,tv,ra,Qo=pe(()=>{lc=b(require("fs")),tv=b(require("path"));$();ra=".succapp-clone-in-progress"});var bn,mc,rv,Mt,Zo=pe(()=>{bn=b(require("fs")),mc=b(require("path"));$();Je();D();G();Qo();Qo();rv=T("sync.mirror-store"),Mt=class{constructor(e){this.root=e}toLocalPath(e){return te(this.root,e)}readMeta(e){return Ie(this.root,e)}readMetaStrict(e){return Ie(this.root,e,{strict:!0})}async writeMeta(e,t){t?.throwIfAborted(),await ta(this.root,e,{writeContentInfo:!0})}async writeMetas(e,t){t?.throwIfAborted(),await XS(this.root,e,{writeContentInfo:!0})}async patchMeta(e,t,n){n?.throwIfAborted(),await ac(this.root,e,t)}async listDirectChildren(e){try{return(await bn.promises.readdir(this.toLocalPath(e),{withFileTypes:!0})).filter(n=>n.name!==Y&&!n.name.startsWith(".")).map(n=>({path:this.joinRemotePath(e,n.name),isFolder:n.isDirectory()}))}catch(t){if(F(t))return rv.debug(`mirror directory does not exist: ${e}`),[];throw t}}async listDirectMetaChildren(e){let t=await Zi(this.root,this.joinRemotePath(e,Y));return Object.keys(t).map(n=>{let o=t[n];return{path:this.joinRemotePath(e,n),isFolder:!!o.type&&o.type!=="file",meta:o}})}async countMetaResources(e){if(!e)return ro([this.root]);let t=await Promise.all(e.map(async i=>{let a=this.toLocalPath(i);return await Z(a)?a:void 0})),n=t.filter(i=>i!==void 0);return t.length-n.length+await ro(n)}async exists(e){return Z(this.toLocalPath(e))}markCloneInProgress(e){return pc(this.root,e)}clearCloneInProgress(e){return dc(this.root,e)}isCloneInProgress(e){return uc(this.root,e)}async isFolder(e){try{return(await bn.promises.stat(this.toLocalPath(e))).isDirectory()}catch(t){if(F(t))return rv.debug(`mirror path is not a folder: ${e}`),!1;throw t}}async removePath(e,t){if(t?.throwIfAborted(),t){await this.removeLocalResource(this.toLocalPath(e),e,t);return}await bn.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0})}async removeLocalResource(e,t,n){let o;try{o=await bn.promises.stat(e)}catch(a){if(F(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await bn.promises.rm(e,{force:!0}),n?.step(1);return}let i=await bn.promises.readdir(e,{withFileTypes:!0});await Promise.all(i.filter(a=>a.name!==Y).map(a=>(n?.throwIfAborted(),this.removeLocalResource(mc.join(e,a.name),mc.posix.join(t,a.name),n)))),await bn.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}removeMeta(e){return ea(this.root,e)}async listProjectPaths(){return(await this.listDirectChildren("/")).filter(t=>t.isFolder).map(t=>t.path).sort((t,n)=>t.localeCompare(n))}joinRemotePath(e,t){return e==="/"?"/"+t:e+"/"+t}}});var me,ye,wt,iF,pu,aF,rr,na=pe(()=>{me=b(require("fs")),ye=b(require("path"));$();Je();G();D();pn();Qo();Qo();wt=T("sync.workspace-store"),iF=8,pu=20,aF=new Set([".git",Xt,"node_modules"]),rr=class{constructor(e,t){this.workspaceRoot=e;this.mirror=t}toLocalPath(e){return te(this.workspaceRoot,e)}async countFiles(e,t={}){let n=t.limit;if(n!==void 0&&n<=0)return 0;let o=await Promise.all(e.map(async a=>{let s=this.toLocalPath(a),c;try{c=await me.promises.stat(s)}catch(l){if(F(l)||Ga(l))return 0;throw l}return c.isDirectory()?this.countDirectoryFiles(s,n):1})),i=0;for(let a of o)if(i+=a,n!==void 0&&i>=n)return i;return i}async writeMeta(e,t){t?.throwIfAborted(),await ta(this.workspaceRoot,e)}async patchMeta(e,t,n){n?.throwIfAborted(),await ac(this.workspaceRoot,e,t)}async deletePath(e,t){t?.throwIfAborted(),t?await this.removeLocalResource(this.toLocalPath(e),e,t):await me.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0});let n=ye.dirname(this.toLocalPath(e));await Z(n)&&await ea(this.workspaceRoot,e),t?.step(1)}async removeEmptyOrphanDirectory(e){let t=this.toLocalPath(e),n;try{n=await me.promises.stat(t)}catch(s){if(F(s))return wt.debug(`orphan cleanup skip missing: remotePath=${e}`),!1;throw s}if(!n.isDirectory())return wt.debug(`orphan cleanup skip non-directory: remotePath=${e}`),!1;let i=(await me.promises.readdir(t)).filter(s=>s!==Y);if(i.length>0)return wt.debug(`orphan cleanup skip non-empty: remotePath=${e} nonMetaChildren=${i.length} samples=${i.slice(0,5).join("|")}`),!1;await me.promises.rm(t,{force:!0,recursive:!0});let a=ye.dirname(t);return await Z(a)&&await ea(this.workspaceRoot,e),wt.debug(`orphan cleanup removed: remotePath=${e}`),!0}async countResources(e){return(await Promise.all(e.map(async n=>{let o=this.toLocalPath(n),i;try{i=await Z(o)?await ro([o]):1}catch(a){if(!Ga(a))throw a;i=1}return i+1}))).reduce((n,o)=>n+o,0)}async countCheckoutResources(e){let t=this.mirror.toLocalPath(e),n=await this.statCheckoutSource(t);if(!n)return 1;if(!n.isDirectory())return 2;let[o,i,a]=await Promise.all([this.countExistingResources(e),ro([t]),this.countDirectories(t)]);return Math.max(o+i+a+1,1)}async statCheckoutSource(e){try{return await me.promises.stat(e)}catch(t){if(F(t))return;throw t}}async copyMirrorContent(e,t){t?.throwIfAborted();let n=this.toLocalPath(e);await me.promises.mkdir(ye.dirname(n),{recursive:!0}),await me.promises.copyFile(this.mirror.toLocalPath(e),n)}async checkoutFromMirror(e,t){t?.throwIfAborted();let n=Date.now(),o=this.mirror.toLocalPath(e),i=this.toLocalPath(e),s=(await me.promises.stat(o)).isDirectory();if(wt.debug(`checkout from mirror start: remotePath=${e} isFolder=${s} source=${o} target=${i}`),await this.copyMirrorMetaInfo(e,s),t?.step(1),s){await this.prepareCheckoutDirectory(e,t),await this.checkoutMirrorDirectory(e,t),wt.debug(`checkout from mirror done: remotePath=${e} elapsed=${Date.now()-n}ms`);return}await this.copyMirrorContent(e),t?.step(1),wt.debug(`checkout from mirror done: remotePath=${e} elapsed=${Date.now()-n}ms`)}async prepareCheckoutDirectory(e,t){t?.throwIfAborted();let n=this.toLocalPath(e),o=await Z(n);t&&o?await this.removeLocalResource(n,e,t):await me.promises.rm(n,{force:!0,recursive:!0}),wt.debug(`checkout prepared workspace target: remotePath=${e} targetExisted=${o}`)}async checkoutMirrorDirectory(e,t){let n=this.toLocalPath(e),o=new ze({maxConcurrency:iF,signal:t?.getAbortSignal()});try{await this.copyMirrorDirectory(e,t,o),await o.waitAll()}catch(a){throw o.cancel(a),await o.waitAll(),a}wt.debug(`checkout copied mirror tree: remotePath=${e}`),t?.step(1),await this.ensureFolderDotMetas(n,t,e);let i=await this.listResidualEntries(n);i.length>0&&wt.info(`checkout from mirror left workspace-only entries: remotePath=${e} count=${i.length} samples=${i.slice(0,pu).join("|")}`)}isCloneInProgress(e){return uc(this.workspaceRoot,e)}async listResidualEntries(e){let t=ye.join(this.mirror.toLocalPath("/"),ye.relative(this.workspaceRoot,e)),n=[];return await this.collectResidualEntries(e,t,"",n),n}async collectResidualEntries(e,t,n,o){if(o.length>=pu)return;let i;try{i=await me.promises.readdir(e,{withFileTypes:!0})}catch{return}let a;try{a=new Set(await me.promises.readdir(t))}catch{a=new Set}for(let s of i){if(s.name===Y||s.name===ra||o.length>=pu)continue;let c=n?`${n}/${s.name}`:s.name;if(!a.has(s.name)){o.push(c);continue}s.isDirectory()&&await this.collectResidualEntries(ye.join(e,s.name),ye.join(t,s.name),c,o)}}async copyMirrorDirectory(e,t,n){let o=this.mirror.toLocalPath(e),i=this.toLocalPath(e);await me.promises.mkdir(i,{recursive:!0});let a=await me.promises.readdir(o,{withFileTypes:!0});wt.debug(`copy mirror dir: remotePath=${e} children=${a.length}`),await Promise.all(a.map(async s=>{if(t?.throwIfAborted(),s.name===ra)return;let c=ye.join(o,s.name),l=ye.join(i,s.name);if(s.isDirectory()){await this.copyMirrorDirectory(ye.posix.join(e,s.name),t,n),t?.step(1);return}await n.addTask(async()=>{t?.throwIfAborted(),await me.promises.mkdir(ye.dirname(l),{recursive:!0}),await me.promises.copyFile(c,l),s.name!==Y&&t?.step(1)})}))}async countExistingResources(e){let t=this.toLocalPath(e);return await Z(t)?ro([t]):0}async countDirectoryFiles(e,t){let n;try{n=await me.promises.readdir(e,{withFileTypes:!0})}catch(c){if(F(c)||Ga(c))return 0;throw c}let o=0,i=[];for(let c of n)c.name!==Y&&(c.isDirectory()?aF.has(c.name)||i.push(c):o++);if(t!==void 0&&o>=t)return o;let a=await Promise.all(i.map(c=>this.countDirectoryFiles(ye.join(e,c.name),t))),s=o;for(let c of a)if(s+=c,t!==void 0&&s>=t)return s;return s}toParentDotMetaPath(e){return this.toFolderDotMetaPath(ye.posix.dirname(e))}toFolderDotMetaPath(e){return e==="/"?`/${Y}`:`${e}/${Y}`}async countDirectories(e){let t=await me.promises.readdir(e,{withFileTypes:!0});return 1+(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.countDirectories(ye.join(e,o.name))))).reduce((o,i)=>o+i,0)}async removeLocalResource(e,t,n){let o;try{o=await me.promises.stat(e)}catch(a){if(F(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await me.promises.rm(e,{force:!0}),n?.step(1);return}let i=await me.promises.readdir(e,{withFileTypes:!0});wt.debug(`remove local dir: remotePath=${t} children=${i.length}`+(i.length>0?` names=${i.slice(0,10).map(a=>a.name).join("|")}`:"")),await Promise.all(i.filter(a=>a.name!==Y).map(a=>(n?.throwIfAborted(),this.removeLocalResource(ye.join(e,a.name),ye.posix.join(t,a.name),n)))),await me.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}async copyMirrorMetaInfo(e,t,n){n?.throwIfAborted();let o=await Ie(this.mirror.root,e);o&&await ta(this.workspaceRoot,{...o,id:o.id??"",path:e,parentDir:ye.posix.dirname(e),name:ye.posix.basename(e),isFolder:t})}async listProjectPaths(){try{let e=await me.promises.readdir(this.workspaceRoot,{withFileTypes:!0});return(await Promise.all(e.filter(n=>n.isDirectory()&&!n.name.startsWith(".")).map(async n=>await this.hasProjectMetaFile(n.name)?"/"+n.name:void 0))).filter(n=>n!==void 0)}catch(e){if(F(e))return wt.debug(`workspace root has no local projects yet: ${this.workspaceRoot}`),[];throw e}}async ensureFolderDotMetas(e,t,n){let o=await me.promises.readdir(e,{withFileTypes:!0}),i=ye.join(e,Y);try{await me.promises.access(i)}catch(a){if(!F(a))throw a;wt.debug(`create missing folder .meta: ${i}`),await me.promises.writeFile(i,"{}","utf-8")}t?.step(1),await Promise.all(o.filter(a=>a.isDirectory()).map(a=>this.ensureFolderDotMetas(ye.join(e,a.name),t,n?ye.posix.join(n,a.name):void 0)))}async hasProjectMetaFile(e){try{let t=ye.join(this.workspaceRoot,e,Y);return(await me.promises.stat(t)).isFile()}catch(t){if(F(t))return wt.debug(`project .meta does not exist: ${e}`),!1;throw t}}}});var Tn,qe,sF,ei,du=pe(()=>{Tn=b(require("fs")),qe=b(require("path"));G();$();Je();sF=T("sync.file-mutation-baseline"),ei=class{constructor(e){this.options=e}workspaceMetaPatches=new Map;mirrorMetaPatches=new Map;physicalDeletes=new Set;mirrorPhysicalDeletes=new Set;mirrorFolderCreates=new Set;mirrorSubtreeSyncs=new Set;mirrorContentSyncs=new Set;authoritativeMetaPaths=new Set;deletedPaths=new Set;folderPathMutations=[];async apply(e,t){t?.throwIfAborted(),this.resetEffects(),await this.collectEffects(e),t?.throwIfAborted(),await this.applyPhysicalDeletes(),t?.throwIfAborted(),await this.applyMirrorFolderCreates(),t?.throwIfAborted(),await this.applyWorkspaceMetaPatches(t),t?.throwIfAborted(),await this.syncMirrorSubtrees(),t?.throwIfAborted(),await this.applyMirrorMetaPatches(t),t?.throwIfAborted(),await this.syncMirrorContents()}resetEffects(){this.workspaceMetaPatches=new Map,this.mirrorMetaPatches=new Map,this.physicalDeletes=new Set,this.mirrorPhysicalDeletes=new Set,this.mirrorFolderCreates=new Set,this.mirrorSubtreeSyncs=new Set,this.mirrorContentSyncs=new Set,this.authoritativeMetaPaths=new Set,this.deletedPaths=new Set,this.folderPathMutations=[]}async collectEffects(e){for(let t of e){if(!t.success)continue;let n=this.isNoWritableChangeResponse(t);await this.collectResponseEffects(t),n||await this.collectParentWatermarkEffects(t)}}async collectResponseEffects(e){if(e.pathMutation&&e.pathMutation!=="none"&&e.oldPath&&e.metaInfo){await this.collectPathMutationEffects(e);return}if(e.contentMutation==="deleted"){this.collectDeleteEffects(e);return}await this.collectContentOrMetaEffects(e)}async collectPathMutationEffects(e){let t=e.metaInfo,n=e.oldPath;if(this.mirrorPhysicalDeletes.add(n),this.addMetaPatch(this.workspaceMetaPatches,qe.posix.dirname(n),qe.posix.basename(n),void 0),this.addMetaPatch(this.mirrorMetaPatches,qe.posix.dirname(n),qe.posix.basename(n),void 0),this.addAuthoritativeMetaPatch(t),t.isFolder){this.folderPathMutations.push({oldPath:n,newPath:t.path}),this.collectMappedDeleteEffectsForFolderMove(n,t.path),this.mirrorSubtreeSyncs.add(t.path);for(let o of await this.getAuthoritativeDescendants(t.path))this.addAuthoritativeMetaPatch(o);return}this.mirrorContentSyncs.add(t.path)}collectDeleteEffects(e){let t=e.metaInfo?.path??e.path;this.deletedPaths.add(t),this.physicalDeletes.add(t);let n=qe.posix.dirname(t),o=qe.posix.basename(t);this.addMetaPatch(this.workspaceMetaPatches,n,o,void 0),this.addMetaPatch(this.mirrorMetaPatches,n,o,void 0);for(let i of this.folderPathMutations)this.collectMappedDeleteEffectsForFolderMove(i.oldPath,i.newPath)}collectMappedDeleteEffectsForFolderMove(e,t){for(let n of[...this.deletedPaths])this.collectMappedDeleteEffect(n,e,t)}collectMappedDeleteEffect(e,t,n){if(e===t||!Q(e,t))return;let o=n+e.slice(t.length);this.addMetaPatch(this.workspaceMetaPatches,qe.posix.dirname(o),qe.posix.basename(o),void 0),this.addMetaPatch(this.mirrorMetaPatches,qe.posix.dirname(o),qe.posix.basename(o),void 0),this.deletedPaths.add(o)}async collectContentOrMetaEffects(e){let t=e.metaInfo;if(t){if(this.isNoWritableChangeResponse(e)){await this.collectNoWritableChangeEffects(t);return}this.addAuthoritativeMetaPatch(t),t.isFolder?this.mirrorFolderCreates.add(t.path):(e.contentMutation==="created"||e.contentMutation==="modified")&&this.mirrorContentSyncs.add(t.path)}}async collectNoWritableChangeEffects(e){await this.addBaselineOnlyMetaPatch(this.workspaceMetaPatches,this.options.workspace.workspaceRoot,e),await this.addBaselineOnlyMetaPatch(this.mirrorMetaPatches,this.options.mirror.root,e),this.authoritativeMetaPaths.add(e.path)}async collectParentWatermarkEffects(e){if(typeof e.modifyTime!="number")return;let t=e.metaInfo?.path??e.path,n=e.oldPath?[e.oldPath,t]:[t];for(let o of this.getUniqueParentPaths(n))this.authoritativeMetaPaths.has(o)||await this.addParentWatermarkPatch(o,e.modifyTime)}async addParentWatermarkPatch(e,t){let n=qe.posix.dirname(e),o=qe.posix.basename(e);await this.addStoreParentWatermarkPatch(this.workspaceMetaPatches,this.options.workspace.workspaceRoot,e,n,o,t),await this.addStoreParentWatermarkPatch(this.mirrorMetaPatches,this.options.mirror.root,e,n,o,t)}async addStoreParentWatermarkPatch(e,t,n,o,i,a){let s=e.get(o);if(s&&Object.prototype.hasOwnProperty.call(s,i)){let m=s[i];m&&(s[i]={...m,modifyTime:a});return}let c=await Ie(t,n),l=this.toServerMetaFromExisting(n,c,a);if(!l)return;let p=e.get(o);p||(p={},e.set(o,p)),p[i]=Vt(l)}async applyPhysicalDeletes(){for(let e of this.physicalDeletes)await Tn.promises.rm(this.options.workspace.toLocalPath(e),{force:!0,recursive:!0}),await this.options.mirror.removePath(e);for(let e of this.mirrorPhysicalDeletes)await this.options.mirror.removePath(e)}async applyMirrorFolderCreates(){for(let e of this.mirrorFolderCreates)await Tn.promises.mkdir(this.options.mirror.toLocalPath(e),{recursive:!0})}async applyWorkspaceMetaPatches(e){for(let[t,n]of this.workspaceMetaPatches)this.isInsidePhysicalDelete(t)||await this.options.workspace.patchMeta(t,n,e)}async syncMirrorSubtrees(){for(let e of this.mirrorSubtreeSyncs)this.isInsidePhysicalDelete(e)||await this.syncWorkspaceSubtreeToMirror(e)}async applyMirrorMetaPatches(e){for(let[t,n]of this.mirrorMetaPatches)this.isInsidePhysicalDelete(t)||await this.options.mirror.patchMeta(t,n,e)}async syncMirrorContents(){for(let e of this.mirrorContentSyncs){let t=this.options.workspace.toLocalPath(e),n=this.options.mirror.toLocalPath(e);await Tn.promises.mkdir(qe.dirname(n),{recursive:!0}),await Tn.promises.copyFile(t,n)}}addAuthoritativeMetaPatch(e){let t=qe.posix.dirname(e.path),n=qe.posix.basename(e.path);this.addMetaPatch(this.workspaceMetaPatches,t,n,Vt(e)),this.addMetaPatch(this.mirrorMetaPatches,t,n,Vt(e)),this.authoritativeMetaPaths.add(e.path)}async addBaselineOnlyMetaPatch(e,t,n){this.addMetaPatch(e,n.parentDir,n.name,this.toBaselineOnlyMetaInfo(n,await Ie(t,n.path)))}toBaselineOnlyMetaInfo(e,t){return t?{...t,...e.id!==void 0?{id:e.id}:{},...e.revision!==void 0?{revision:e.revision}:{},...e.modifyTime!==void 0?{modifyTime:e.modifyTime}:{}}:Vt(e)}isNoWritableChangeResponse(e){return e.contentMutation==="none"&&(e.pathMutation===void 0||e.pathMutation==="none")&&e.metaInfoChanged===!1}async getAuthoritativeDescendants(e){try{return await(await this.options.getApiClient()).getFileDescendant(e)}catch(t){return sF.warn(`failed to fetch authoritative descendants after folder mutation: ${e}`,t),[]}}async syncWorkspaceSubtreeToMirror(e){let t=this.options.workspace.toLocalPath(e),n=this.options.mirror.toLocalPath(e);await Tn.promises.rm(n,{force:!0,recursive:!0}),await Tn.promises.mkdir(qe.dirname(n),{recursive:!0}),await Tn.promises.cp(t,n,{force:!0,recursive:!0})}addMetaPatch(e,t,n,o){let i=e.get(t);i||(i={},e.set(t,i)),i[n]=o}isInsidePhysicalDelete(e){return[...this.physicalDeletes,...this.mirrorPhysicalDeletes].some(t=>Q(e,t))}getUniqueParentPaths(e){let t=new Set;for(let n of e)for(let o of this.getParentPaths(n))t.add(o);return[...t]}getParentPaths(e){let t=e.replace(/^\/+|\/+$/g,"").split("/").filter(Boolean),n=[];for(let o=0;o<t.length-1;o++)n.push("/"+t.slice(0,o+1).join("/"));return n}toServerMetaFromExisting(e,t,n){if(t)return{...t,id:t.id??e,path:e,parentDir:qe.posix.dirname(e),name:qe.posix.basename(e),isFolder:!0,type:t.type??"fold",modifyTime:n}}}});var io,ti,uu=pe(()=>{io=b(require("path"));D();J();$();ti=class{constructor(e){this.options=e}async resolve(e,t){let n=io.resolve(this.options.workspaceRoot),o=io.resolve(e);if(o===n||o.startsWith(n+io.sep))return this.requireMetaPath(e);if(io.isAbsolute(e)){let i=Pe(e);if(await this.isKnownRemoteProjectPath(i,t))return i;throw new Ot("err.sync.pathOutOfScope",{remotePath:e,reason:"notInSyncScope"},{style:"warn"})}return Pe(e)}requireMetaPath(e){let t=kr(this.options.workspaceRoot,e);if(!t)throw new Error(`file is not in sync scope: ${e}`);return Pe(t)}async isKnownRemoteProjectPath(e,t){let n=We(e);if(!n)return!1;let o=n.replace(/^\//,"");if(t==="server-backed")return(await this.options.getServerProjects()).some(c=>c.name===o);let[i,a]=await Promise.all([this.options.workspace.listProjectPaths(),this.options.mirror.listProjectPaths()]);return i.includes(n)||a.includes(n)}}});function nv(r){let e=r.split(".").map(t=>{let n=t.match(/^\d+/);return n?Number(n[0]):Number.NaN});return e.some(Number.isNaN)?void 0:e}function oa(r){return(typeof r=="string"?r.trim():"")||void 0}function hc(r,e){if(!r||!e)return;let t=nv(r),n=nv(e);if(!t||!n)return;let o=Math.max(t.length,n.length);for(let i=0;i<o;i++){let a=t[i]??0,s=n[i]??0;if(a!==s)return a>s?1:-1}return 0}function fc(r,e){if(!r)return!0;let t=hc(r,e);return t===void 0?r!==e:t<0}function gc(r,e){let t=hc(r,e);return t!==void 0&&t>0}var ia=pe(()=>{});var mu,ri,hu=pe(()=>{mu=b(require("fs"));D();Je();ia();ri=class{client;constructor(e){this.client=e.client}async upgradeContent(e){let t=this.createContentBaseResult(e),n=e.versionInfo;if(!n?.upgradeSupported)return{...t,reason:"unsupported"};let o=n.contentVersion;if(!o)return{...t,reason:"unsupported"};let i;try{i=e.currentVersion??au(e.content)}catch(l){return{...t,reason:"invalidContent",errorInfo:l}}let a={...t,currentVersion:i,targetVersion:o};if(gc(i,o))return{...a,reason:"newerVersion"};if(!fc(i,o))return{...a,reason:"upToDate"};let s={...a,upgradeRequired:!0};if(e.checkOnly)return s;let c;try{c=await this.client.upgradeFileContent({path:e.path,content:e.content})}catch(l){return{...s,reason:"upgradeFailed",errorInfo:l}}return!c.changed||c.content===e.content?{...s,reason:"upToDate"}:{...s,content:c.content,changed:!0}}async upgradeFile(e){let t;if(e.content!==void 0)t=e.content;else try{t=await mu.promises.readFile(e.localPath,"utf-8")}catch(o){return{path:e.path,localPath:e.localPath,targetVersion:e.versionInfo?.contentVersion,content:"",changed:!1,upgradeRequired:!1,reason:F(o)?"fileNotFound":"readFailed",errorInfo:o}}let n=await this.upgradeContent({path:e.path,content:t,versionInfo:e.versionInfo,currentVersion:e.currentVersion,checkOnly:e.checkOnly});if(!n.changed||e.checkOnly)return{...n,localPath:e.localPath};try{return await mu.promises.writeFile(e.localPath,n.content,"utf-8"),{...n,localPath:e.localPath}}catch(o){return{...n,localPath:e.localPath,changed:!1,reason:"writeFailed",errorInfo:o}}}createContentBaseResult(e){return{path:e.path,targetVersion:e.versionInfo?.contentVersion,content:e.content,changed:!1,upgradeRequired:!1}}}});var iv={};Gl(iv,{SyncCommandUpgradeMetadata:()=>aa});var fu,xn,ov,cF,Kr,aa,gu=pe(()=>{fu=b(require("fs")),xn=b(require("path"));D();G();Je();pn();$();it();hu();ov=8,cF=new Set([".git",".succapp","node_modules"]),Kr=T("sync.upgrade-metadata"),aa=class extends Ae{upgrader=new ri({client:{upgradeFileContent:async e=>(await this.getApiClient()).upgradeFileContent(e)}});scannedContent=new Map;async execute(){let e=await this.resolveInputTargetPaths();if(e.length===0)return this.createResult();await this.getApiClient();let t=this.formatTargetScope(e);this.options.checkOnly?(Kr.info("metadata version check start: {0}",t),Kr.info("scan metadata version files")):(Kr.info("metadata upgrade start: {0}",t),Kr.info("scan metadata upgrade files"));let n=await this.scanCandidates(e);if(this.options.checkOnly)return n;await this.options.onChecked?.(n);let o=this.createUpgradeResult(n);return await this.upgradeCandidates(o),this.sortResult(o),Kr.info("metadata upgrade done: changed={0} candidates={1} skipped={2} failures={3} checked={4}",o.changed.length,o.candidates.length,o.skipped.length,o.failures.length,o.checked),o}formatTargetScope(e){return e.length===1?e[0]:`targets=${e.length}`}async resolveInputTargetPaths(){if(!this.options.paths||this.options.paths.length===0)return this.resolveDefaultTargetPaths();let e=new Set;for(let t of this.options.paths){this.task.throwIfAborted();let n=await this.resolveInputMetaPath(t);n&&e.add(n)}return ft(e)}async resolveDefaultTargetPaths(){let e=await this.createWorkspaceStore().listProjectPaths();return ft(new Set(e))}async resolveInputMetaPath(e){if(e==="/")return"/";let t=kr(this.context.root,e);if(t)return t;if(!(xn.isAbsolute(e)&&await Z(e))&&e.startsWith("/"))return Pe(e)}async scanCandidates(e){let t=new ze(ov),n=this.createResult(),o=[],i=0,a=s=>{i++,o.push(async()=>this.checkFile(s,n))};return await Promise.all(e.map(s=>this.scanInputPath(s,a))),this.task.start(Math.max(i,1)),await Promise.all(o.map(s=>t.addTask(async()=>{try{this.task.throwIfAborted(),await s()}finally{this.task.step()}}))),await t.waitAll(),this.task.finish(),this.sortResult(n),Kr.info("metadata version check done: candidates={0} skipped={1} failures={2} checked={3}",n.candidates.length,n.skipped.length,n.failures.length,n.checked),n}async upgradeCandidates(e){let t=e.candidates.length;if(t===0)return;Kr.info("metadata upgrade apply start: candidates={0}",t);let n=new ze(ov),o=0;await Promise.all(e.candidates.map(i=>n.addTask(async()=>{this.task.throwIfAborted();let a=await this.upgradeCandidate(i,e);o++,await this.options.onFileUpgraded?.({...a,index:o,total:t})}))),await n.waitAll()}async scanInputPath(e,t){let n=Pe(e),o=te(this.context.root,n);try{if((await fu.promises.stat(o)).isDirectory()){(this.options.recursive??!0)&&await this.scanDirectory(n,o,t);return}if(xn.basename(o)===Y)return;t({path:n,localPath:o})}catch(i){if(F(i)){t({path:n,localPath:o});return}throw i}}async scanDirectory(e,t,n){let o=(await fu.promises.readdir(t,{withFileTypes:!0})).sort((a,s)=>a.name.localeCompare(s.name)),i=[];for(let a of o){if(this.task.throwIfAborted(),a.name===Y)continue;let s=xn.join(t,a.name),c=Pe(xn.posix.join(e,a.name));if(a.isDirectory()){cF.has(a.name)||i.push(this.scanDirectory(c,s,n));continue}n({path:c,localPath:s})}await Promise.all(i)}createResult(){return{checked:0,candidates:[],changed:[],skipped:[],failures:[]}}createUpgradeResult(e){return{checked:e.checked,candidates:[...e.candidates],changed:[],skipped:[...e.skipped],failures:[...e.failures]}}sortResult(e){let t=(n,o)=>n.remotePath.localeCompare(o.remotePath);e.candidates.sort(t),e.changed.sort(t),e.skipped.sort(t),e.failures.sort(t)}async checkFile(e,t){let n=this.getMetadataVersionInfoByPath(e.path);if(!n?.upgradeSupported)return;t.checked++;let o=await this.upgrader.upgradeFile({path:e.path,localPath:e.localPath,versionInfo:n,checkOnly:!0}),i=this.createItemResult(o);if(o.upgradeRequired&&(t.candidates.push(i),this.scannedContent.set(e.localPath,{content:o.content,currentVersion:o.currentVersion})),!o.reason){o.upgradeRequired&&this.debugMetadataFile(i,"candidate","check");return}if(this.isSkippedReason(o.reason)){t.skipped.push({...i,reason:o.reason}),this.debugMetadataFile(i,o.reason,"check");return}this.logUpgradeFailure(e.path,o.errorInfo),t.failures.push({...i,reason:o.reason,errorInfo:o.errorInfo})}async upgradeCandidate(e,t){let n=this.getMetadataVersionInfoByPath(e.remotePath),o=this.scannedContent.get(e.localPath),i=await this.upgrader.upgradeFile({path:e.remotePath,localPath:e.localPath,versionInfo:n,content:o?.content,currentVersion:o?.currentVersion}),a=this.createItemResult(i);if(i.changed){let c={...a,changed:!0};return t.changed.push(c),this.debugMetadataFile(a,"changed","upgrade"),{item:c,status:"upgraded"}}if(i.reason&&this.isSkippedReason(i.reason)){let c={...a,reason:i.reason};return t.skipped.push(c),this.debugMetadataFile(a,i.reason,"upgrade"),{item:c,status:"skipped"}}if(!i.reason){let c={...a,reason:"upToDate"};return t.skipped.push(c),this.debugMetadataFile(a,"upToDate","upgrade"),{item:c,status:"skipped"}}this.logUpgradeFailure(e.remotePath,i.errorInfo);let s={...a,reason:i.reason,errorInfo:i.errorInfo};return t.failures.push(s),{item:s,status:"failed"}}logUpgradeFailure(e,t){Kr.error("metadata upgrade failed: {0}",e,t)}debugMetadataFile(e,t,n){Kr.debug("{0}: {1} current={2} target={3} result={4}",n==="check"?"metadata version check file":"metadata upgrade file",e.remotePath,e.currentVersion??"",e.targetVersion??"",t)}getMetadataVersionInfoByPath(e){return this.context.getMetadataVersionInfoByPath?.(e)}createItemResult(e){return{remotePath:e.path,localPath:e.localPath,currentVersion:e.currentVersion,targetVersion:e.targetVersion}}isSkippedReason(e){return e==="upToDate"||e==="newerVersion"}}});async function Cc(r,e,t){if(t.length===0)return[];let n=(gu(),dh(iv)),{SyncCommandUpgradeMetadata:o}=n;return(await new o(r,{paths:t,checkOnly:!0,task:e}).execute()).candidates}async function lv(r){return fg(r)?uF(r):!1}async function uF(r){let e=sv.createReadStream(r,{encoding:"utf-8"}),t=cv.createInterface({input:e,crlfDelay:1/0}),n="start",o=0;try{for await(let i of t){let a=lF.exec(i);if(a){n="separator",o=a[1].length;continue}if(n==="start")continue;let s=pF.exec(i);if(n==="separator"&&s?.[1].length===o){n="end";continue}let c=dF.exec(i);if(n==="end"&&c?.[1].length===o)return!0}return!1}finally{t.close(),e.destroy()}}function ca(r){let e=new Set([r.remotePath]);return r.oldRemotePath&&e.add(r.oldRemotePath),[...e]}function Sc(r){let e=new Set;for(let t of r)for(let n of ca(t))e.add(n);return[...e]}function pv(r){return ft(new Set(Sc(r)))}function dv(r){let e=new Set;for(let t of r)for(let n of ca(t))mF(e,n);return[...e].sort()}function mF(r,e){let t=sa.posix.dirname(e);for(;;){if(r.add(hF(t)),t==="/")return;t=sa.posix.dirname(t)}}function hF(r){return r==="/"?"/"+Y:r+"/"+Y}function at(r){return r.type==="added"||r.type==="modified"||r.type==="deleted"||r.type==="renamed"||r.type==="conflict"}function fr(r){return r.type==="remoteAdded"||r.type==="remoteModified"||r.type==="remoteDeleted"||r.type==="remoteRenamed"||r.type==="conflict"}function yu(r){return r.type!=="remoteRenamed"||!r.isFolder||!r.oldRemotePath?!1:We(r.remotePath)===r.remotePath&&We(r.oldRemotePath)===r.oldRemotePath}function Cu(r){return r.type!=="remoteRenamed"||!r.oldRemotePath?!1:We(r.remotePath)!==We(r.oldRemotePath)}function la(r){let e=r.filter(n=>fr(n)),t=new Set(Sc(e.filter(n=>n.type!=="conflict")));return t.size===0?e:e.filter(n=>n.type!=="conflict"||!ca(n).some(o=>t.has(o)))}function yc(r){return!!r.isFolder&&(r.type==="added"||r.type==="deleted"||r.type==="renamed"||r.type==="remoteAdded"||r.type==="remoteDeleted"||r.type==="remoteRenamed")}function vc(r,e){return e.some(t=>Q(r.remotePath,t)||!!r.oldRemotePath&&Q(r.oldRemotePath,t))}function uv(r,e){return e.some(t=>r.remotePath===t||r.oldRemotePath===t)}function kc(r){return[r.type,r.remotePath,r.oldRemotePath??""].join("\0")}function mv(r,e){let t=[];for(let n of e)r.some(o=>fF(o,n))&&t.push({path:n.path,remotePath:n.remotePath,...n.fileId!==void 0?{fileId:n.fileId}:{},oldPath:n.oldPath,oldRemotePath:n.oldRemotePath,type:"conflict",isFolder:n.isFolder,contentChanged:n.contentChanged,metaChanged:n.metaChanged});return t}function fF(r,e){return Fo(r.remotePath,r.oldRemotePath,e.remotePath,e.oldRemotePath)?gF(r,e):!1}function gF(r,e){return av(r)&&av(e)||!!r.metaChanged&&!!e.metaChanged||yc(r)||yc(e)}function av(r){return r.contentChanged===!0||r.type==="added"||r.type==="deleted"||r.type==="renamed"||r.type==="remoteAdded"||r.type==="remoteDeleted"||r.type==="remoteRenamed"?!0:r.contentChanged===void 0&&r.metaChanged===void 0&&(r.type==="modified"||r.type==="remoteModified")}var sv,sa,cv,lF,pF,dF,gr=pe(()=>{sv=b(require("fs")),sa=b(require("path")),cv=b(require("readline"));Je();To();$();qt();lF=/^(<{7,})(?:\s.*)?$/,pF=/^(={7,})$/,dF=/^(>{7,})(?:\s.*)?$/});function hv(r){let e=r.map(o=>o.remotePath),t=e.slice(0,yF),n=e.length-t.length;return n<=0?t.join(", "):`${t.join(", ")} (+${n})`}var Su,pa,yF,ni,oi,Dt,Ae,it=pe(()=>{Su=b(require("path"));$();Zo();na();du();uu();gr();qt();Ar();D();J();G();pa=T("sync.command"),yF=3,ni=class{runs=0;durationMs=0;api={total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0};startRun(){return this.runs++,Date.now()}finishRun(e){this.durationMs+=Date.now()-e}captureApiDiagnostics(e){this.api=e}describeForLog(){return`
|
|
21
|
-
`+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}},
|
|
19
|
+
`,o+1),a=i<0?r.length:i+1;return{start:e,end:a,left:r.slice(t+1,n),right:r.slice(n+8,o)}}function $I(r,e){let t=new Map;for(let o of[...r.split(/\r?\n/),...e.split(/\r?\n/)]){let i=HI(o);i&&t.set(i,o)}if(t.size===0)return e;let n=Array.from(t.values());return n.map((o,i)=>i>=n.length-1||/,\s*$/.test(o)?o:o+",").join(`
|
|
20
|
+
`)}function HI(r){return/^\s*"([^"]+)"\s*:/.exec(r)?.[1]}function Fa(r,e){let t=JSON.parse(e);if(q(t))return t;throw new Ei(r,new Error(".meta root must be an object"))}async function Ue(r,e,t){return(await Ia(r,e,t))[Hc(e)]}async function Aa(r,e,t){let n=$c(r,e.path);await Yc(n,!1,o=>{o[Hc(e.path)]=Zt(e,t)})}async function Dk(r,e,t){let n=new Map;for(let o of e){let i=$c(r,o.path),a=n.get(i);a?a.push(o):n.set(i,[o])}await Promise.all([...n].map(async([o,i])=>{await Yc(o,!1,a=>{for(let s of i)a[Hc(s.path)]=Zt(s,t)})}))}async function Gc(r,e,t){let n=Qt.join(ae(r,e),Q);await Yc(n,!1,o=>{for(let[i,a]of Object.entries(t))a?o[i]=a:delete o[i]})}async function wo(r){return(await Promise.all(r.map(async t=>(await dr.promises.stat(t)).isDirectory()?1+await Ak(t):1))).reduce((t,n)=>t+n,0)}async function Ak(r){let e=await dr.promises.readdir(r,{withFileTypes:!0});return(await Promise.all(e.filter(n=>n.name!==Q).map(async n=>n.isDirectory()?1+await Ak(Qt.join(r,n.name)):1))).reduce((n,o)=>n+o,0)}async function Jc(r){let e=(0,vk.createHash)("sha256");return await(0,wk.pipeline)(dr.createReadStream(r,{highWaterMark:64*1024}),new kk.Writable({write(t,n,o){e.update(t),o()}})),e.digest("hex")}function Zt(r,e){let t={};if(br(t,"id",r.id),br(t,"revision",r.revision),e?.writeContentInfo){if(r.size!==void 0){if(!Number.isSafeInteger(r.size)||r.size<0)throw new Error(`invalid file content size: ${r.path}`);t.size=r.size}if(r.hash!==void 0){let n=r.hash.trim().toLowerCase();if(!jI.test(n))throw new Error(`invalid file content hash: ${r.path}`);t.hash=n}}return br(t,"icon",r.icon),br(t,"desc",r.desc),r.isFolder&&r.type&&r.type!==UI&&(t.type=r.type),br(t,"order",r.order),br(t,"creator",r.creator),br(t,"createTime",r.createTime),br(t,"modifier",r.modifier),br(t,"modifyTime",r.modifyTime),r.hidden&&(t.hidden=!0),br(t,"subFileType",r.subFileType),br(t,"labels",r.labels),Sk(t,"option",r.option),Sk(t,"customOption",r.customOption),_k(t)}function Po(r,e,t=!0){for(let n of bk)if(!(t&&BI.has(n))&&!zI(r,e,n))return!1;return!0}function zI(r,e,t){let n=r[t],o=e[t];return(n===""||n===!1)&&(n=void 0),(o===""||o===!1)&&(o=void 0),n===o?!0:t==="option"||t==="customOption"?(0,Pk.isDeepStrictEqual)(n,o)?!0:(n&&Object.keys(n).length===0&&(n=void 0),o&&Object.keys(o).length===0&&(o=void 0),n===o):!1}function Ro(r){if(!r)return{};let e={...r};for(let t of Ek)delete e[t];return e}async function Yc(r,e,t){let o=(on.get(r)??Promise.resolve()).catch(()=>{}).then(async()=>{let i=await xk(r,{strict:e});t(i),await mm(r,i)});on.set(r,o);try{await o}finally{on.get(r)===o&&on.delete(r)}}async function Ok(r){let e=on.get(r);e&&await e.catch(()=>{})}async function mm(r,e){await sr(r,JSON.stringify(KI(e),null,WI))}function KI(r){let e={};for(let t of Object.keys(r))e[t]=_k(r[t]);return e}function _k(r){let e={};for(let t of bk)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}function br(r,e,t){t==null||t===""||typeof t=="number"&&t===0||(r[e]=t)}function Sk(r,e,t){!t||Object.keys(t).length===0||(r[e]=t)}var dr,Qt,vk,kk,wk,Pk,ko,Q,WI,UI,Rk,jI,bk,Ek,BI,on,lm,Ei,Ke=fe(()=>{dr=E(require("fs")),Qt=E(require("path")),vk=require("node:crypto"),kk=require("node:stream"),wk=require("node:stream/promises"),Pk=require("node:util");K();Y();F();Ho();re();Et();ko=T("common.meta"),Q=".meta",WI=" ",UI="fold",Rk=/"version"\s*:\s*("(?:\\.|[^"\\])*")/,jI=/^[0-9a-f]{64}$/,bk=["id","revision","size","hash","icon","desc","type","order","creator","createTime","modifier","modifyTime","hidden","subFileType","labels","option","customOption"],Ek=["id","revision","size","hash","type","creator","createTime","modifier","modifyTime","subFileType"],BI=new Set(Ek),on=new Map,Ei=class extends Error{constructor(t,n){super(`invalid .meta file: ${t}`);this.filePath=t;this.cause=n;this.name="DotMetaParseError"}}});function hm(r,e){return Lk.join(ae(r,e),Oa)}async function Qc(r,e){await Xc.promises.mkdir(ae(r,e),{recursive:!0}),await Xc.promises.writeFile(hm(r,e),"","utf8")}async function Zc(r,e){await Xc.promises.rm(hm(r,e),{force:!0})}function el(r,e){return ne(hm(r,e))}var Xc,Lk,Oa,Ti=fe(()=>{Xc=E(require("fs")),Lk=E(require("path"));K();Oa=".succapp-clone-in-progress"});var Vn,tl,Nk,kt,bo=fe(()=>{Vn=E(require("fs")),tl=E(require("path"));K();Ke();F();Y();Ti();Ti();Nk=T("sync.mirror-store"),kt=class{constructor(e){this.root=e}toLocalPath(e){return ae(this.root,e)}readMeta(e){return Ue(this.root,e)}readMetaStrict(e){return Ue(this.root,e,{strict:!0})}async writeMeta(e,t){t?.throwIfAborted(),await Aa(this.root,e,{writeContentInfo:!0})}async writeMetas(e,t){t?.throwIfAborted(),await Dk(this.root,e,{writeContentInfo:!0})}async patchMeta(e,t,n){n?.throwIfAborted(),await Gc(this.root,e,t)}async listDirectChildren(e){try{return(await Vn.promises.readdir(this.toLocalPath(e),{withFileTypes:!0})).filter(n=>n.name!==Q&&!n.name.startsWith(".")).map(n=>({path:this.joinRemotePath(e,n.name),isFolder:n.isDirectory()}))}catch(t){if(x(t))return Nk.debug(`mirror directory does not exist: ${e}`),[];throw t}}async listDirectMetaChildren(e){let t=await Ia(this.root,this.joinRemotePath(e,Q));return Object.keys(t).map(n=>{let o=t[n];return{path:this.joinRemotePath(e,n),isFolder:!!o.type&&o.type!=="file",meta:o}})}async countMetaResources(e){if(!e)return wo([this.root]);let t=await Promise.all(e.map(async i=>{let a=this.toLocalPath(i);return await ne(a)?a:void 0})),n=t.filter(i=>i!==void 0);return t.length-n.length+await wo(n)}async exists(e){return ne(this.toLocalPath(e))}markCloneInProgress(e){return Qc(this.root,e)}clearCloneInProgress(e){return Zc(this.root,e)}isCloneInProgress(e){return el(this.root,e)}async isFolder(e){try{return(await Vn.promises.stat(this.toLocalPath(e))).isDirectory()}catch(t){if(x(t))return Nk.debug(`mirror path is not a folder: ${e}`),!1;throw t}}async removePath(e,t){if(t?.throwIfAborted(),t){await this.removeLocalResource(this.toLocalPath(e),e,t);return}await Vn.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0})}async removeLocalResource(e,t,n){let o;try{o=await Vn.promises.stat(e)}catch(a){if(x(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await Vn.promises.rm(e,{force:!0}),n?.step(1);return}let i=await Vn.promises.readdir(e,{withFileTypes:!0});await Promise.all(i.filter(a=>a.name!==Q).map(a=>(n?.throwIfAborted(),this.removeLocalResource(tl.join(e,a.name),tl.posix.join(t,a.name),n)))),await Vn.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}removeMeta(e){return Da(this.root,e)}async listProjectPaths(){return(await this.listDirectChildren("/")).filter(t=>t.isFolder).map(t=>t.path).sort((t,n)=>t.localeCompare(n))}joinRemotePath(e,t){return e==="/"?"/"+t:e+"/"+t}}});var Ce,we,xt,GI,gm,JI,ur,_a=fe(()=>{Ce=E(require("fs")),we=E(require("path"));K();Ke();Y();F();bn();Ti();Ti();xt=T("sync.workspace-store"),GI=8,gm=20,JI=new Set([".git",Gt,"node_modules"]),ur=class{constructor(e,t){this.workspaceRoot=e;this.mirror=t}toLocalPath(e){return ae(this.workspaceRoot,e)}async countFiles(e,t={}){let n=t.limit;if(n!==void 0&&n<=0)return 0;let o=await Promise.all(e.map(async a=>{let s=this.toLocalPath(a),c;try{c=await Ce.promises.stat(s)}catch(l){if(x(l)||Es(l))return 0;throw l}return c.isDirectory()?this.countDirectoryFiles(s,n):1})),i=0;for(let a of o)if(i+=a,n!==void 0&&i>=n)return i;return i}async writeMeta(e,t){t?.throwIfAborted(),await Aa(this.workspaceRoot,e)}async patchMeta(e,t,n){n?.throwIfAborted(),await Gc(this.workspaceRoot,e,t)}async deletePath(e,t){t?.throwIfAborted(),t?await this.removeLocalResource(this.toLocalPath(e),e,t):await Ce.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0});let n=we.dirname(this.toLocalPath(e));await ne(n)&&await Da(this.workspaceRoot,e),t?.step(1)}async removeEmptyOrphanDirectory(e){let t=this.toLocalPath(e),n;try{n=await Ce.promises.stat(t)}catch(s){if(x(s))return xt.debug(`orphan cleanup skip missing: remotePath=${e}`),!1;throw s}if(!n.isDirectory())return xt.debug(`orphan cleanup skip non-directory: remotePath=${e}`),!1;let i=(await Ce.promises.readdir(t)).filter(s=>s!==Q);if(i.length>0)return xt.debug(`orphan cleanup skip non-empty: remotePath=${e} nonMetaChildren=${i.length} samples=${i.slice(0,5).join("|")}`),!1;await Ce.promises.rm(t,{force:!0,recursive:!0});let a=we.dirname(t);return await ne(a)&&await Da(this.workspaceRoot,e),xt.debug(`orphan cleanup removed: remotePath=${e}`),!0}async countResources(e){return(await Promise.all(e.map(async n=>{let o=this.toLocalPath(n),i;try{i=await ne(o)?await wo([o]):1}catch(a){if(!Es(a))throw a;i=1}return i+1}))).reduce((n,o)=>n+o,0)}async countCheckoutResources(e){let t=this.mirror.toLocalPath(e),n=await this.statCheckoutSource(t);if(!n)return 1;if(!n.isDirectory())return 2;let[o,i,a]=await Promise.all([this.countExistingResources(e),wo([t]),this.countDirectories(t)]);return Math.max(o+i+a+1,1)}async statCheckoutSource(e){try{return await Ce.promises.stat(e)}catch(t){if(x(t))return;throw t}}async copyMirrorContent(e,t){t?.throwIfAborted();let n=this.toLocalPath(e);await Ce.promises.mkdir(we.dirname(n),{recursive:!0}),await Ce.promises.copyFile(this.mirror.toLocalPath(e),n)}async checkoutFromMirror(e,t){t?.throwIfAborted();let n=Date.now(),o=this.mirror.toLocalPath(e),i=this.toLocalPath(e),s=(await Ce.promises.stat(o)).isDirectory();if(xt.debug(`checkout from mirror start: remotePath=${e} isFolder=${s} source=${o} target=${i}`),await this.copyMirrorMetaInfo(e,s),t?.step(1),s){await this.prepareCheckoutDirectory(e,t),await this.checkoutMirrorDirectory(e,t),xt.debug(`checkout from mirror done: remotePath=${e} elapsed=${Date.now()-n}ms`);return}await this.copyMirrorContent(e),t?.step(1),xt.debug(`checkout from mirror done: remotePath=${e} elapsed=${Date.now()-n}ms`)}async prepareCheckoutDirectory(e,t){t?.throwIfAborted();let n=this.toLocalPath(e),o=await ne(n);t&&o?await this.removeLocalResource(n,e,t):await Ce.promises.rm(n,{force:!0,recursive:!0}),xt.debug(`checkout prepared workspace target: remotePath=${e} targetExisted=${o}`)}async checkoutMirrorDirectory(e,t){let n=this.toLocalPath(e),o=new Qe({maxConcurrency:GI,signal:t?.getAbortSignal()});try{await this.copyMirrorDirectory(e,t,o),await o.waitAll()}catch(a){throw o.cancel(a),await o.waitAll(),a}xt.debug(`checkout copied mirror tree: remotePath=${e}`),t?.step(1),await this.ensureFolderDotMetas(n,t,e);let i=await this.listResidualEntries(n);i.length>0&&xt.info(`checkout from mirror left workspace-only entries: remotePath=${e} count=${i.length} samples=${i.slice(0,gm).join("|")}`)}isCloneInProgress(e){return el(this.workspaceRoot,e)}async listResidualEntries(e){let t=we.join(this.mirror.toLocalPath("/"),we.relative(this.workspaceRoot,e)),n=[];return await this.collectResidualEntries(e,t,"",n),n}async collectResidualEntries(e,t,n,o){if(o.length>=gm)return;let i;try{i=await Ce.promises.readdir(e,{withFileTypes:!0})}catch{return}let a;try{a=new Set(await Ce.promises.readdir(t))}catch{a=new Set}for(let s of i){if(s.name===Q||s.name===Oa||o.length>=gm)continue;let c=n?`${n}/${s.name}`:s.name;if(!a.has(s.name)){o.push(c);continue}s.isDirectory()&&await this.collectResidualEntries(we.join(e,s.name),we.join(t,s.name),c,o)}}async copyMirrorDirectory(e,t,n){let o=this.mirror.toLocalPath(e),i=this.toLocalPath(e);await Ce.promises.mkdir(i,{recursive:!0});let a=await Ce.promises.readdir(o,{withFileTypes:!0});xt.debug(`copy mirror dir: remotePath=${e} children=${a.length}`),await Promise.all(a.map(async s=>{if(t?.throwIfAborted(),s.name===Oa)return;let c=we.join(o,s.name),l=we.join(i,s.name);if(s.isDirectory()){await this.copyMirrorDirectory(we.posix.join(e,s.name),t,n),t?.step(1);return}await n.addTask(async()=>{t?.throwIfAborted(),await Ce.promises.mkdir(we.dirname(l),{recursive:!0}),await Ce.promises.copyFile(c,l),s.name!==Q&&t?.step(1)})}))}async countExistingResources(e){let t=this.toLocalPath(e);return await ne(t)?wo([t]):0}async countDirectoryFiles(e,t){let n;try{n=await Ce.promises.readdir(e,{withFileTypes:!0})}catch(c){if(x(c)||Es(c))return 0;throw c}let o=0,i=[];for(let c of n)c.name!==Q&&(c.isDirectory()?JI.has(c.name)||i.push(c):o++);if(t!==void 0&&o>=t)return o;let a=await Promise.all(i.map(c=>this.countDirectoryFiles(we.join(e,c.name),t))),s=o;for(let c of a)if(s+=c,t!==void 0&&s>=t)return s;return s}toParentDotMetaPath(e){return this.toFolderDotMetaPath(we.posix.dirname(e))}toFolderDotMetaPath(e){return e==="/"?`/${Q}`:`${e}/${Q}`}async countDirectories(e){let t=await Ce.promises.readdir(e,{withFileTypes:!0});return 1+(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.countDirectories(we.join(e,o.name))))).reduce((o,i)=>o+i,0)}async removeLocalResource(e,t,n){let o;try{o=await Ce.promises.stat(e)}catch(a){if(x(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await Ce.promises.rm(e,{force:!0}),n?.step(1);return}let i=await Ce.promises.readdir(e,{withFileTypes:!0});xt.debug(`remove local dir: remotePath=${t} children=${i.length}`+(i.length>0?` names=${i.slice(0,10).map(a=>a.name).join("|")}`:"")),await Promise.all(i.filter(a=>a.name!==Q).map(a=>(n?.throwIfAborted(),this.removeLocalResource(we.join(e,a.name),we.posix.join(t,a.name),n)))),await Ce.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}async copyMirrorMetaInfo(e,t,n){n?.throwIfAborted();let o=await Ue(this.mirror.root,e);o&&await Aa(this.workspaceRoot,{...o,id:o.id??"",path:e,parentDir:we.posix.dirname(e),name:we.posix.basename(e),isFolder:t})}async listProjectPaths(){try{let e=await Ce.promises.readdir(this.workspaceRoot,{withFileTypes:!0});return(await Promise.all(e.filter(n=>n.isDirectory()&&!n.name.startsWith(".")).map(async n=>await this.hasProjectMetaFile(n.name)?"/"+n.name:void 0))).filter(n=>n!==void 0)}catch(e){if(x(e))return xt.debug(`workspace root has no local projects yet: ${this.workspaceRoot}`),[];throw e}}async ensureFolderDotMetas(e,t,n){let o=await Ce.promises.readdir(e,{withFileTypes:!0}),i=we.join(e,Q);try{await Ce.promises.access(i)}catch(a){if(!x(a))throw a;xt.debug(`create missing folder .meta: ${i}`),await Ce.promises.writeFile(i,"{}","utf-8")}t?.step(1),await Promise.all(o.filter(a=>a.isDirectory()).map(a=>this.ensureFolderDotMetas(we.join(e,a.name),t,n?we.posix.join(n,a.name):void 0)))}async hasProjectMetaFile(e){try{let t=we.join(this.workspaceRoot,e,Q);return(await Ce.promises.stat(t)).isFile()}catch(t){if(x(t))return xt.debug(`project .meta does not exist: ${e}`),!1;throw t}}}});var qn,Ge,YI,Mi,ym=fe(()=>{qn=E(require("fs")),Ge=E(require("path"));Y();K();Ke();YI=T("sync.file-mutation-baseline"),Mi=class{constructor(e){this.options=e}workspaceMetaPatches=new Map;mirrorMetaPatches=new Map;physicalDeletes=new Set;mirrorPhysicalDeletes=new Set;mirrorFolderCreates=new Set;mirrorSubtreeSyncs=new Set;mirrorContentSyncs=new Set;authoritativeMetaPaths=new Set;deletedPaths=new Set;folderPathMutations=[];async apply(e,t){t?.throwIfAborted(),this.resetEffects(),await this.collectEffects(e),t?.throwIfAborted(),await this.applyPhysicalDeletes(),t?.throwIfAborted(),await this.applyMirrorFolderCreates(),t?.throwIfAborted(),await this.applyWorkspaceMetaPatches(t),t?.throwIfAborted(),await this.syncMirrorSubtrees(),t?.throwIfAborted(),await this.applyMirrorMetaPatches(t),t?.throwIfAborted(),await this.syncMirrorContents()}resetEffects(){this.workspaceMetaPatches=new Map,this.mirrorMetaPatches=new Map,this.physicalDeletes=new Set,this.mirrorPhysicalDeletes=new Set,this.mirrorFolderCreates=new Set,this.mirrorSubtreeSyncs=new Set,this.mirrorContentSyncs=new Set,this.authoritativeMetaPaths=new Set,this.deletedPaths=new Set,this.folderPathMutations=[]}async collectEffects(e){for(let t of e){if(!t.success)continue;let n=this.isNoWritableChangeResponse(t);await this.collectResponseEffects(t),n||await this.collectParentWatermarkEffects(t)}}async collectResponseEffects(e){if(e.pathMutation&&e.pathMutation!=="none"&&e.oldPath&&e.metaInfo){await this.collectPathMutationEffects(e);return}if(e.contentMutation==="deleted"){this.collectDeleteEffects(e);return}await this.collectContentOrMetaEffects(e)}async collectPathMutationEffects(e){let t=e.metaInfo,n=e.oldPath;if(this.mirrorPhysicalDeletes.add(n),this.addMetaPatch(this.workspaceMetaPatches,Ge.posix.dirname(n),Ge.posix.basename(n),void 0),this.addMetaPatch(this.mirrorMetaPatches,Ge.posix.dirname(n),Ge.posix.basename(n),void 0),this.addAuthoritativeMetaPatch(t),t.isFolder){this.folderPathMutations.push({oldPath:n,newPath:t.path}),this.collectMappedDeleteEffectsForFolderMove(n,t.path),this.mirrorSubtreeSyncs.add(t.path);for(let o of await this.getAuthoritativeDescendants(t.path))this.addAuthoritativeMetaPatch(o);return}this.mirrorContentSyncs.add(t.path)}collectDeleteEffects(e){let t=e.metaInfo?.path??e.path;this.deletedPaths.add(t),this.physicalDeletes.add(t);let n=Ge.posix.dirname(t),o=Ge.posix.basename(t);this.addMetaPatch(this.workspaceMetaPatches,n,o,void 0),this.addMetaPatch(this.mirrorMetaPatches,n,o,void 0);for(let i of this.folderPathMutations)this.collectMappedDeleteEffectsForFolderMove(i.oldPath,i.newPath)}collectMappedDeleteEffectsForFolderMove(e,t){for(let n of[...this.deletedPaths])this.collectMappedDeleteEffect(n,e,t)}collectMappedDeleteEffect(e,t,n){if(e===t||!ee(e,t))return;let o=n+e.slice(t.length);this.addMetaPatch(this.workspaceMetaPatches,Ge.posix.dirname(o),Ge.posix.basename(o),void 0),this.addMetaPatch(this.mirrorMetaPatches,Ge.posix.dirname(o),Ge.posix.basename(o),void 0),this.deletedPaths.add(o)}async collectContentOrMetaEffects(e){let t=e.metaInfo;if(t){if(this.isNoWritableChangeResponse(e)){await this.collectNoWritableChangeEffects(t);return}this.addAuthoritativeMetaPatch(t),t.isFolder?this.mirrorFolderCreates.add(t.path):(e.contentMutation==="created"||e.contentMutation==="modified")&&this.mirrorContentSyncs.add(t.path)}}async collectNoWritableChangeEffects(e){await this.addBaselineOnlyMetaPatch(this.workspaceMetaPatches,this.options.workspace.workspaceRoot,e),await this.addBaselineOnlyMetaPatch(this.mirrorMetaPatches,this.options.mirror.root,e),this.authoritativeMetaPaths.add(e.path)}async collectParentWatermarkEffects(e){if(typeof e.modifyTime!="number")return;let t=e.metaInfo?.path??e.path,n=e.oldPath?[e.oldPath,t]:[t];for(let o of this.getUniqueParentPaths(n))this.authoritativeMetaPaths.has(o)||await this.addParentWatermarkPatch(o,e.modifyTime)}async addParentWatermarkPatch(e,t){let n=Ge.posix.dirname(e),o=Ge.posix.basename(e);await this.addStoreParentWatermarkPatch(this.workspaceMetaPatches,this.options.workspace.workspaceRoot,e,n,o,t),await this.addStoreParentWatermarkPatch(this.mirrorMetaPatches,this.options.mirror.root,e,n,o,t)}async addStoreParentWatermarkPatch(e,t,n,o,i,a){let s=e.get(o);if(s&&Object.prototype.hasOwnProperty.call(s,i)){let u=s[i];u&&(s[i]={...u,modifyTime:a});return}let c=await Ue(t,n),l=this.toServerMetaFromExisting(n,c,a);if(!l)return;let p=e.get(o);p||(p={},e.set(o,p)),p[i]=Zt(l)}async applyPhysicalDeletes(){for(let e of this.physicalDeletes)await qn.promises.rm(this.options.workspace.toLocalPath(e),{force:!0,recursive:!0}),await this.options.mirror.removePath(e);for(let e of this.mirrorPhysicalDeletes)await this.options.mirror.removePath(e)}async applyMirrorFolderCreates(){for(let e of this.mirrorFolderCreates)await qn.promises.mkdir(this.options.mirror.toLocalPath(e),{recursive:!0})}async applyWorkspaceMetaPatches(e){for(let[t,n]of this.workspaceMetaPatches)this.isInsidePhysicalDelete(t)||await this.options.workspace.patchMeta(t,n,e)}async syncMirrorSubtrees(){for(let e of this.mirrorSubtreeSyncs)this.isInsidePhysicalDelete(e)||await this.syncWorkspaceSubtreeToMirror(e)}async applyMirrorMetaPatches(e){for(let[t,n]of this.mirrorMetaPatches)this.isInsidePhysicalDelete(t)||await this.options.mirror.patchMeta(t,n,e)}async syncMirrorContents(){for(let e of this.mirrorContentSyncs){let t=this.options.workspace.toLocalPath(e),n=this.options.mirror.toLocalPath(e);await qn.promises.mkdir(Ge.dirname(n),{recursive:!0}),await qn.promises.copyFile(t,n)}}addAuthoritativeMetaPatch(e){let t=Ge.posix.dirname(e.path),n=Ge.posix.basename(e.path);this.addMetaPatch(this.workspaceMetaPatches,t,n,Zt(e)),this.addMetaPatch(this.mirrorMetaPatches,t,n,Zt(e)),this.authoritativeMetaPaths.add(e.path)}async addBaselineOnlyMetaPatch(e,t,n){this.addMetaPatch(e,n.parentDir,n.name,this.toBaselineOnlyMetaInfo(n,await Ue(t,n.path)))}toBaselineOnlyMetaInfo(e,t){return t?{...t,...e.id!==void 0?{id:e.id}:{},...e.revision!==void 0?{revision:e.revision}:{},...e.modifyTime!==void 0?{modifyTime:e.modifyTime}:{}}:Zt(e)}isNoWritableChangeResponse(e){return e.contentMutation==="none"&&(e.pathMutation===void 0||e.pathMutation==="none")&&e.metaInfoChanged===!1}async getAuthoritativeDescendants(e){try{return await(await this.options.getApiClient()).getFileDescendant(e)}catch(t){return YI.warn(`failed to fetch authoritative descendants after folder mutation: ${e}`,t),[]}}async syncWorkspaceSubtreeToMirror(e){let t=this.options.workspace.toLocalPath(e),n=this.options.mirror.toLocalPath(e);await qn.promises.rm(n,{force:!0,recursive:!0}),await qn.promises.mkdir(Ge.dirname(n),{recursive:!0}),await qn.promises.cp(t,n,{force:!0,recursive:!0})}addMetaPatch(e,t,n,o){let i=e.get(t);i||(i={},e.set(t,i)),i[n]=o}isInsidePhysicalDelete(e){return[...this.physicalDeletes,...this.mirrorPhysicalDeletes].some(t=>ee(e,t))}getUniqueParentPaths(e){let t=new Set;for(let n of e)for(let o of this.getParentPaths(n))t.add(o);return[...t]}getParentPaths(e){let t=e.replace(/^\/+|\/+$/g,"").split("/").filter(Boolean),n=[];for(let o=0;o<t.length-1;o++)n.push("/"+t.slice(0,o+1).join("/"));return n}toServerMetaFromExisting(e,t,n){if(t)return{...t,id:t.id??e,path:e,parentDir:Ge.posix.dirname(e),name:Ge.posix.basename(e),isFolder:!0,type:t.type??"fold",modifyTime:n}}}});var Eo,xi,Cm=fe(()=>{Eo=E(require("path"));F();B();K();xi=class{constructor(e){this.options=e}async resolve(e,t){let n=Eo.resolve(this.options.workspaceRoot),o=Eo.resolve(e);if(o===n||o.startsWith(n+Eo.sep))return this.requireMetaPath(e);if(Eo.isAbsolute(e)){let i=le(e);if(await this.isKnownRemoteProjectPath(i,t))return i;throw new Ht("err.sync.pathOutOfScope",{remotePath:e,reason:"notInSyncScope"},{style:"warn"})}return le(e)}requireMetaPath(e){let t=Or(this.options.workspaceRoot,e);if(!t)throw new Error(`file is not in sync scope: ${e}`);return le(t)}async isKnownRemoteProjectPath(e,t){let n=Ve(e);if(!n)return!1;let o=n.replace(/^\//,"");if(t==="server-backed")return(await this.options.getServerProjects()).some(c=>c.name===o);let[i,a]=await Promise.all([this.options.workspace.listProjectPaths(),this.options.mirror.listProjectPaths()]);return i.includes(n)||a.includes(n)}}});function Wk(r){let e=r.split(".").map(t=>{let n=t.match(/^\d+/);return n?Number(n[0]):Number.NaN});return e.some(Number.isNaN)?void 0:e}function La(r){return(typeof r=="string"?r.trim():"")||void 0}function rl(r,e){if(!r||!e)return;let t=Wk(r),n=Wk(e);if(!t||!n)return;let o=Math.max(t.length,n.length);for(let i=0;i<o;i++){let a=t[i]??0,s=n[i]??0;if(a!==s)return a>s?1:-1}return 0}function nl(r,e){if(!r)return!0;let t=rl(r,e);return t===void 0?r!==e:t<0}function ol(r,e){let t=rl(r,e);return t!==void 0&&t>0}var Na=fe(()=>{});var Sm,Fi,vm=fe(()=>{Sm=E(require("fs"));F();Ke();Na();Fi=class{client;constructor(e){this.client=e.client}async upgradeContent(e){let t=this.createContentBaseResult(e),n=e.versionInfo;if(!n?.upgradeSupported)return{...t,reason:"unsupported"};let o=n.contentVersion;if(!o)return{...t,reason:"unsupported"};let i;try{i=e.currentVersion??um(e.content)}catch(l){return{...t,reason:"invalidContent",errorInfo:l}}let a={...t,currentVersion:i,targetVersion:o};if(ol(i,o))return{...a,reason:"newerVersion"};if(!nl(i,o))return{...a,reason:"upToDate"};let s={...a,upgradeRequired:!0};if(e.dryRun)return s;let c;try{c=await this.client.upgradeFileContent({path:e.path,content:e.content})}catch(l){return{...s,reason:"upgradeFailed",errorInfo:l}}return!c.changed||c.content===e.content?{...s,reason:"upToDate"}:{...s,content:c.content,changed:!0}}async upgradeFile(e){let t;if(e.content!==void 0)t=e.content;else try{t=await Sm.promises.readFile(e.localPath,"utf-8")}catch(o){return{path:e.path,localPath:e.localPath,targetVersion:e.versionInfo?.contentVersion,content:"",changed:!1,upgradeRequired:!1,reason:x(o)?"fileNotFound":"readFailed",errorInfo:o}}let n=await this.upgradeContent({path:e.path,content:t,versionInfo:e.versionInfo,currentVersion:e.currentVersion,dryRun:e.dryRun});if(!n.changed||e.dryRun)return{...n,localPath:e.localPath};try{return await Sm.promises.writeFile(e.localPath,n.content,"utf-8"),{...n,localPath:e.localPath}}catch(o){return{...n,localPath:e.localPath,changed:!1,reason:"writeFailed",errorInfo:o}}}createContentBaseResult(e){return{path:e.path,targetVersion:e.versionInfo?.contentVersion,content:e.content,changed:!1,upgradeRequired:!1}}}});var Vk={};$p(Vk,{SyncCommandUpgradeMetadata:()=>Wa});var km,$n,Uk,jk,Bk,XI,an,Wa,wm=fe(()=>{km=E(require("fs")),$n=E(require("path"));F();Y();D();Ke();bn();K();ut();vm();Uk=8,jk=5,Bk=95,XI=new Set([".git",".succapp","node_modules"]),an=T("sync.upgrade-metadata"),Wa=class extends je{upgrader=new Fi({client:{upgradeFileContent:async e=>(await this.getApiClient()).upgradeFileContent(e)}});scannedContent=new Map;async execute(){let e=await this.resolveInputTargetPaths();if(e.length===0)return this.createResult();let t=this.formatTargetScope(e);if(this.options.dryRun?(an.info("metadata version check start: {0}",t),an.info("scan metadata version files")):(an.info("metadata upgrade start: {0}",t),an.info("scan metadata upgrade files")),this.options.dryRun){let s=await this.scanCandidates(e,this.task,{finish:!1,retainOnFinish:!0});return this.task.setMessage(d("workspace.sync.progress.upgradeMeta.checked",s.checked,s.candidates.length)),this.task.finish(),s}this.task.start(jk+Bk,{message:d("workspace.sync.progress.upgradeMeta.apply"),retainOnFinish:!0});let n=this.task.subTaskMonitor(jk),o=this.task.subTaskMonitor(Bk),i=await this.scanCandidates(e,n);await this.options.onChecked?.(i);let a=this.createUpgradeResult(i);return await this.upgradeCandidates(a,o),this.sortResult(a),an.info("metadata upgrade done: changed={0} candidates={1} skipped={2} failures={3} checked={4}",a.changed.length,a.candidates.length,a.skipped.length,a.failures.length,a.checked),this.task.setMessage(d("workspace.sync.progress.upgradeMeta.done",a.changed.length,a.failures.length,a.checked)),this.task.finish(),a}formatTargetScope(e){return e.length===1?e[0]:`targets=${e.length}`}async resolveInputTargetPaths(){if(!this.options.paths||this.options.paths.length===0)return this.resolveDefaultTargetPaths();let e=new Set;for(let t of this.options.paths){this.task.throwIfAborted();let n=await this.resolveInputMetaPath(t);n&&e.add(n)}return St(e)}async resolveDefaultTargetPaths(){let e=await this.createWorkspaceStore().listProjectPaths();return St(new Set(e))}async resolveInputMetaPath(e){if(e==="/")return"/";let t=Or(this.context.root,e);if(t)return t;if(!($n.isAbsolute(e)&&await ne(e))&&e.startsWith("/"))return le(e)}async scanCandidates(e,t,n={}){let o=new Qe(Uk),i=this.createResult(),a=[],s=0,c=l=>{s++,a.push(async()=>this.checkFile(l,i))};return await Promise.all(e.map(l=>this.scanInputPath(l,c))),t.start(Math.max(s,1),{message:d("workspace.sync.progress.upgradeMeta.scan"),retainOnFinish:n.retainOnFinish===!0}),await Promise.all(a.map(l=>o.addTask(async()=>{try{t.throwIfAborted(),await l()}finally{t.step()}}))),await o.waitAll(),n.finish!==!1&&t.finish(),this.sortResult(i),an.info("metadata version check done: candidates={0} skipped={1} failures={2} checked={3}",i.candidates.length,i.skipped.length,i.failures.length,i.checked),i}async upgradeCandidates(e,t){let n=e.candidates.length;if(n===0){t.finish();return}an.info("metadata upgrade apply start: candidates={0}",n),t.start(n,{message:d("workspace.sync.progress.upgradeMeta.apply")});let o=new Qe(Uk),i=0;await Promise.all(e.candidates.map(a=>o.addTask(async()=>{try{t.throwIfAborted();let s=await this.upgradeCandidate(a,e);i++,await this.options.onFileUpgraded?.({...s,index:i,total:n})}finally{t.step()}}))),await o.waitAll(),t.finish()}async scanInputPath(e,t){let n=le(e),o=ae(this.context.root,n);try{if((await km.promises.stat(o)).isDirectory()){(this.options.recursive??!0)&&await this.scanDirectory(n,o,t);return}if($n.basename(o)===Q)return;t({path:n,localPath:o})}catch(i){if(x(i)){t({path:n,localPath:o});return}throw i}}async scanDirectory(e,t,n){let o=(await km.promises.readdir(t,{withFileTypes:!0})).sort((a,s)=>a.name.localeCompare(s.name)),i=[];for(let a of o){if(this.task.throwIfAborted(),a.name===Q)continue;let s=$n.join(t,a.name),c=le($n.posix.join(e,a.name));if(a.isDirectory()){XI.has(a.name)||i.push(this.scanDirectory(c,s,n));continue}n({path:c,localPath:s})}await Promise.all(i)}createResult(){return{checked:0,candidates:[],changed:[],skipped:[],failures:[]}}createUpgradeResult(e){return{checked:e.checked,candidates:[...e.candidates],changed:[],skipped:[...e.skipped],failures:[...e.failures]}}sortResult(e){let t=(n,o)=>n.remotePath.localeCompare(o.remotePath);e.candidates.sort(t),e.changed.sort(t),e.skipped.sort(t),e.failures.sort(t)}async checkFile(e,t){let n=(await this.context.getMetadataVersionCatalog()).getInfoByPath(e.path);if(!n?.upgradeSupported)return;t.checked++;let o=await this.upgrader.upgradeFile({path:e.path,localPath:e.localPath,versionInfo:n,dryRun:!0}),i=this.createItemResult(o);if(o.upgradeRequired&&(t.candidates.push(i),this.scannedContent.set(e.localPath,{content:o.content,currentVersion:o.currentVersion})),!o.reason){o.upgradeRequired&&this.logMetadataFile(i,"candidate","check");return}if(this.isSkippedReason(o.reason)){t.skipped.push({...i,reason:o.reason}),this.logMetadataFile(i,o.reason,"check");return}this.logUpgradeFailure(e.path,o.errorInfo),t.failures.push({...i,reason:o.reason,errorInfo:o.errorInfo})}async upgradeCandidate(e,t){let n=(await this.context.getMetadataVersionCatalog()).getInfoByPath(e.remotePath),o=this.scannedContent.get(e.localPath),i=await this.upgrader.upgradeFile({path:e.remotePath,localPath:e.localPath,versionInfo:n,content:o?.content,currentVersion:o?.currentVersion}),a=this.createItemResult(i);if(i.changed){let c={...a,changed:!0};return t.changed.push(c),this.logMetadataFile(a,"changed","upgrade"),{item:c,status:"upgraded"}}if(i.reason&&this.isSkippedReason(i.reason)){let c={...a,reason:i.reason};return t.skipped.push(c),this.logMetadataFile(a,i.reason,"upgrade"),{item:c,status:"skipped"}}if(!i.reason){let c={...a,reason:"upToDate"};return t.skipped.push(c),this.logMetadataFile(a,"upToDate","upgrade"),{item:c,status:"skipped"}}this.logUpgradeFailure(e.remotePath,i.errorInfo);let s={...a,reason:i.reason,errorInfo:i.errorInfo};return t.failures.push(s),{item:s,status:"failed"}}logUpgradeFailure(e,t){an.error("metadata upgrade failed: {0}",e,t)}logMetadataFile(e,t,n){an.info("{0}: {1} current={2} target={3} result={4}",n==="check"?"metadata version check file":"metadata upgrade file",e.remotePath,e.currentVersion??"",e.targetVersion??"",t)}createItemResult(e){return{remotePath:e.path,localPath:e.localPath,currentVersion:e.currentVersion,targetVersion:e.targetVersion}}isSkippedReason(e){return e==="upToDate"||e==="newerVersion"}}});async function al(r,e,t){if(t.length===0)return[];let n=(wm(),Tf(Vk)),{SyncCommandUpgradeMetadata:o}=n;return(await new o(r,{paths:t,dryRun:!0,task:e}).execute()).candidates}async function Kk(r){return vg(r)?tD(r):!1}async function tD(r){let e=Hk.createReadStream(r,{encoding:"utf-8"}),t=zk.createInterface({input:e,crlfDelay:1/0}),n="start",o=0;try{for await(let i of t){let a=QI.exec(i);if(a){n="separator",o=a[1].length;continue}if(n==="start")continue;let s=ZI.exec(i);if(n==="separator"&&s?.[1].length===o){n="end";continue}let c=eD.exec(i);if(n==="end"&&c?.[1].length===o)return!0}return!1}finally{t.close(),e.destroy()}}function Ua(r){let e=new Set([r.remotePath]);return r.oldRemotePath&&e.add(r.oldRemotePath),[...e]}function sl(r){let e=new Set;for(let t of r)for(let n of Ua(t))e.add(n);return[...e]}function Gk(r){return St(new Set(sl(r)))}function Jk(r){let e=new Set;for(let t of r)for(let n of Ua(t))rD(e,n);return[...e].sort()}function rD(r,e){let t=Ii.posix.dirname(e);for(;;){if(r.add(nD(t)),t==="/")return;t=Ii.posix.dirname(t)}}function nD(r){return r==="/"?"/"+Q:r+"/"+Q}function mt(r){return r.type==="added"||r.type==="modified"||r.type==="deleted"||r.type==="renamed"||r.type==="conflict"}function Tr(r){return r.type==="remoteAdded"||r.type==="remoteModified"||r.type==="remoteDeleted"||r.type==="remoteRenamed"||r.type==="conflict"}function Pm(r){return r.type!=="remoteRenamed"||!r.isFolder||!r.oldRemotePath?!1:Ve(r.remotePath)===r.remotePath&&Ve(r.oldRemotePath)===r.oldRemotePath}function Rm(r){return r.type!=="remoteRenamed"||!r.oldRemotePath?!1:Ve(r.remotePath)!==Ve(r.oldRemotePath)}function ja(r){let e=r.filter(n=>Tr(n)),t=new Set(sl(e.filter(n=>n.type!=="conflict")));return t.size===0?e:e.filter(n=>n.type!=="conflict"||!Ua(n).some(o=>t.has(o)))}function il(r){return!!r.isFolder&&(r.type==="added"||r.type==="deleted"||r.type==="renamed"||r.type==="remoteAdded"||r.type==="remoteDeleted"||r.type==="remoteRenamed")}function bm(r,e){return e.some(t=>ee(r.remotePath,t)||!!r.oldRemotePath&&ee(r.oldRemotePath,t))}function Di(r){let e=new Set(r.map(le));return t=>qk(t.remotePath,e)||!!t.oldRemotePath&&qk(t.oldRemotePath,e)}function qk(r,e){let t=le(r);for(;;){if(e.has(t))return!0;if(t==="/")return!1;t=Ii.posix.dirname(t)}}function Yk(r,e){return e.some(t=>r.remotePath===t||r.oldRemotePath===t)}function cl(r){return[r.type,r.remotePath,r.oldRemotePath??""].join("\0")}function Xk(r,e){let t=[];for(let n of e)r.some(o=>oD(o,n))&&t.push({path:n.path,remotePath:n.remotePath,...n.fileId!==void 0?{fileId:n.fileId}:{},oldPath:n.oldPath,oldRemotePath:n.oldRemotePath,type:"conflict",isFolder:n.isFolder,contentChanged:n.contentChanged,metaChanged:n.metaChanged});return t}function oD(r,e){return Mn(r.remotePath,r.oldRemotePath,e.remotePath,e.oldRemotePath)?iD(r,e):!1}function iD(r,e){return $k(r)&&$k(e)||!!r.metaChanged&&!!e.metaChanged||il(r)||il(e)}function $k(r){return r.contentChanged===!0||r.type==="added"||r.type==="deleted"||r.type==="renamed"||r.type==="remoteAdded"||r.type==="remoteDeleted"||r.type==="remoteRenamed"?!0:r.contentChanged===void 0&&r.metaChanged===void 0&&(r.type==="modified"||r.type==="remoteModified")}var Hk,Ii,zk,QI,ZI,eD,Mr=fe(()=>{Hk=E(require("fs")),Ii=E(require("path")),zk=E(require("readline"));Ke();Ho();K();er();QI=/^(<{7,})(?:\s.*)?$/,ZI=/^(={7,})$/,eD=/^(>{7,})(?:\s.*)?$/});function Qk(r){let e=r.map(o=>o.remotePath),t=e.slice(0,aD),n=e.length-t.length;return n<=0?t.join(", "):`${t.join(", ")} (+${n})`}var Em,Ba,aD,Ai,Oi,Wt,je,ut=fe(()=>{Em=E(require("path"));K();bo();_a();ym();Cm();Mr();er();Ir();F();B();Y();Ba=T("sync.command"),aD=3,Ai=class{runs=0;durationMs=0;api={total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0};startRun(){return this.runs++,Date.now()}finishRun(e){this.durationMs+=Date.now()-e}captureApiDiagnostics(e){this.api=e}describeForLog(){return`
|
|
21
|
+
`+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}},Oi=class{constructor(e,t){this.context=e;this.options=t;this.serverUrl=e.activeServerUrl,this.mirrorRoot=e.getMirrorRoot(this.serverUrl)}serverUrl;mirrorRoot;apiClientPromise;get task(){return this.options.task??Xe.INSTANCE}get workspaceRoot(){return this.context.root}createMirrorStore(){return new kt(this.mirrorRoot)}createWorkspaceStore(e=this.createMirrorStore()){return new ur(this.workspaceRoot,e)}createPathResolver(e=this.createMirrorStore()){return new xi({workspaceRoot:this.workspaceRoot,mirror:e,workspace:this.createWorkspaceStore(e),getServerProjects:async()=>(await this.getApiClient()).getProjects()})}getApiClient(){return this.apiClientPromise||(this.apiClientPromise=this.context.requireServerClient(this.serverUrl)),this.apiClientPromise}getLocalSyncChanges(){return this.context.getSyncChanges().filter(e=>mt(e))}getRemoteSyncChanges(){return this.excludeBlockedProjectRootRenameSubtree(this.context.getSyncChanges().filter(e=>Tr(e)))}excludeBlockedProjectRootRenameSubtree(e){let t=new Set;for(let i of e)Pm(i)&&(t.add(i.remotePath),i.oldRemotePath&&t.add(i.oldRemotePath));if(t.size===0)return e;let n=[...t],o=e.filter(i=>!n.some(a=>ee(i.remotePath,a)||!!i.oldRemotePath&&ee(i.oldRemotePath,a)));return Ba.warn(`skip remote project rename changes that cannot be auto applied: ${[...t].join(", ")}`),o}assertNoProjectRootRenameChanges(e,t){if(!e)return;let n=e.filter(o=>Pm(o));if(n.length!==0)throw new ct("err.sync.projectRootRenameUnsupported",{actionName:t,paths:Qk(n),changes:n})}clearSyncStatusTargets(e){this.context.clearSyncStatusTargets(e)}hasKnownChanges(e){return e!==void 0}assertNoRemoteProjectUnavailableChanges(e,t){if(!e)return;let n=e.filter(o=>o.type==="remoteProjectUnavailable");if(n.length!==0)throw new ct("err.sync.projectUnavailable",{actionName:t,paths:Qk(n),changes:n})}getKnownChangeTargetRemotePaths(e){return sl([...e])}getKnownChangeTargets(e){return new Set(Gk([...e]))}async resolveTargetRemotePaths(e,t="server-backed"){if(!e)return;let n=this.createPathResolver();return new Set(await Promise.all(e.map(o=>n.resolve(o,t))))}filterChangesByTargets(e,t){if(!t)return e;let n=Di([...t]);return e.filter(n)}expandTargetsForRenameChanges(e,t){if(!e)return;let n,o=i=>{e.has(i)||(n||(n=new Set(e)),n.add(i))};for(let i of t)i.type!=="renamed"&&i.type!=="remoteRenamed"||(o(i.remotePath),i.oldRemotePath&&o(i.oldRemotePath));return n??e}async resolveRemotePath(e,t="server-backed"){return this.createPathResolver().resolve(e,t)}reportDiagnostic(e){Ba.warn(this.createDiagnosticLogMessage(e))}createDiagnosticLogMessage(e){let t=[`sync diagnostic: ${io(e.errorInfo)||e.message}`,`workspaceRoot=${this.workspaceRoot}`,`serverUrl=${this.serverUrl}`];return e.path&&t.push(`path=${e.path}`),e.errorInfo!==void 0&&t.push(`errorInfo=${this.stringifyDiagnosticValue(e.errorInfo)}`),t.join(`
|
|
22
22
|
`)}stringifyDiagnosticValue(e){if(e instanceof Error)return`${e.message}${e.stack?`
|
|
23
|
-
`+e.stack:""}`;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}},Dt=class extends oi{},Ae=class extends oi{async applyFileMutationResponses(e){let t=this.createMirrorStore(),n=this.createWorkspaceStore(t);await new ei({workspace:n,mirror:t,getApiClient:()=>this.getApiClient()}).apply(e,this.task)}async cleanupEmptyOrphanParents(e,t,n){if(e.length===0)return;let o=new Set;pa.debug(`orphan cleanup start: deletedPaths=${e.length}`);for(let i of e)await this.cleanupAncestorsIfEmpty(Su.posix.dirname(i),o,t,n);pa.debug(`orphan cleanup done: visitedAncestors=${o.size}`)}async cleanupAncestorsIfEmpty(e,t,n,o){let i=e;for(;i!=="/"&&i!=="."&&!t.has(i);){if(t.add(i),await n.exists(i)){pa.debug(`orphan cleanup stop at tracked: remotePath=${i}`);return}if(!await o.removeEmptyOrphanDirectory(i))return;i=Su.posix.dirname(i)}}}});var Gv=z((nz,Kv)=>{var XF=function(){var r=256,e=t();function t(){for(var o=new Array(r),i=0;i<o.length;i++)o[i]=new Array(r);for(var i=0;i<r;i++)for(var a=0;a<r;a++){for(var s=i,c=a,l=0,p=0;p<4;p++){var m=Math.abs(s%4-c%4);m==3?l+=m*2:l+=m,p<3&&(s=Math.floor(s/4),c=Math.floor(c/4))}o[i][a]=l}return o}var n=function(o,i){return e[o][i]};return n}();Kv.exports=XF});var Ju=z((oz,Jv)=>{var QF=Gv(),ZF=function(r){var e=function(t){for(var n=0,o=0;o<r.length;o++)n+=QF(r[o],t.getValue(o));return n};this.calculateDifference=function(t){return e(t)},this.getValue=function(t){return r[t]}};Jv.exports=ZF});var Yu=z((iz,Yv)=>{var eM=function(r){var e=function(t,n){var o=t.length;if(o!=n.length)return!1;for(;o--;)if(t[o]!==n[o])return!1;return!0};this.calculateDifference=function(t){return e(r,t.getValue())?0:1},this.getValue=function(){return r}};Yv.exports=eM});var Xu=z((az,Xv)=>{Xv.exports=function(r){var e=(r&240)>>4&15;return e|=(r&15)<<4&240,e}});var Zv=z((sz,Qv)=>{var Qu=Xu(),tM=function(){return function(r){var e=1,t=32,n=function(l){for(var p="",m=0;m<l.length;m++)l[m]<16&&(p+="0"),p+=l[m].toString(16).toUpperCase();return p},o=function(l){for(var p=new Array(e),m=0;m<e;m++)p[m]=Qu(l.getValue()[m]);return n(p)},i=function(l){return n([Qu(l.getValue())])},a=function(l){return n([Qu(l.getValue())])},s=function(l){for(var p=new Array(t),m=0;m<t;m++)p[m]=l.getValue(t-1-m);return n(p)},c="";return c+=o(r.getChecksum()),c+=i(r.getLValue()),c+=a(r.getQ()),c+=s(r.getBody()),c}}();Qv.exports=tM});var Zu=z((cz,ek)=>{var rM=Zv(),nM=function(r,e,t,n){this.getLValue=function(){return e},this.getQ=function(){return t},this.getChecksum=function(){return r},this.getBody=function(){return n},this.calculateDifference=function(o,i){var a=0;return i&&(a+=e.calculateDifference(o.getLValue())),a+=t.calculateDifference(o.getQ()),a+=r.calculateDifference(o.getChecksum()),a+=n.calculateDifference(o.getBody()),a},this.toString=function(){return rM(this)}};ek.exports=nM});var em=z((lz,tk)=>{tk.exports=function(r,e,t){var n=Math.abs(e-r),o=t-n;return Math.min(n,o)}});var tm=z((pz,rk)=>{var oM=em(),iM=function(r){var e=256;this.calculateDifference=function(t){var n=oM(r,t.getValue(),e);return n===0?0:n===1?1:n*12},this.getValue=function(){return r}};rk.exports=iM});var rm=z((dz,ok)=>{var nk=em(),aM=function(r){this.getQLo=function(){return r&15},this.getQHi=function(){return(r&240)>>4},this.calculateDifference=function(e){var t=16,n=0,o=nk(this.getQLo(),e.getQLo(),t);o<=1?n+=o:n+=(o-1)*12;var i=nk(this.getQHi(),e.getQHi(),t);return i<=1?n+=i:n+=(i-1)*12,n},this.getValue=function(){return r}};ok.exports=aM});var ak=z((uz,ik)=>{var sM=Ju(),cM=Yu(),lM=Zu(),pM=tm(),dM=rm(),uM=function(){var r=256,e=.09531018,t=.26236426,n=.4054651,o,i,a,s,c={LOW:656,MID:3199},l=function(y){return this.checksum=new cM(y),this},p=function(y){return this.lValue=new pM(f(y)),this},m=function(y){var C=function(v,P){var u=function(S,k){return(0|S&15)&15|(k&15)<<4};return new dM(u(v,P))};return this.q=new C(y.getQ1Ratio(),y.getQ2Ratio()),this},g=function(y){return this.body=new sM(y),this},d=function(){return new lM(this.checksum,this.lValue,this.q,this.body)},f=function(y){return y<=c.LOW?Math.floor(Math.log(y)/n)%r:y<=c.MID?Math.floor(Math.log(y)/t-8.72777)%r:Math.floor(Math.log(y)/e-62.5472)%r};return{withChecksum:l,withLength:p,withQuartiles:m,withBody:g,build:d}};ik.exports=uM});var ck=z((mz,sk)=>{var mM=ak(),hM=function(r,e,t,n){var o=512,i=32,a=function(p){return e[p]>0},s=function(){for(var p=0,m=0;m<i*4;m++)a(m)&&p++;return p>i*2},c=function(){return t>=o},l=function(){for(var p=new Array(i),m=0;m<i;m++){for(var g=0,d=0;d<4;d++){var f=e[4*m+d];n.getThird()<f?g+=3<<d*2:n.getSecond()<f?g+=2<<d*2:n.getFirst()<f&&(g+=1<<d*2)}p[m]=g}return p};this.isProcessedDataTooSimple=function(){return!c()||!s()},this.buildDigest=function(){return new mM().withChecksum(r).withLength(t).withQuartiles(n).withBody(l()).build()}};sk.exports=hM});var pk=z((hz,lk)=>{var fM=function(){var r=[1,87,49,12,176,178,102,166,121,193,6,84,249,230,44,163,14,197,213,181,161,85,218,80,64,239,24,226,236,142,38,200,110,177,104,103,141,253,255,50,77,101,81,18,45,96,31,222,25,107,190,70,86,237,240,34,72,242,20,214,244,227,149,235,97,234,57,22,60,250,82,175,208,5,127,199,111,62,135,248,174,169,211,58,66,154,106,195,245,171,17,187,182,179,0,243,132,56,148,75,128,133,158,100,130,126,91,13,153,246,216,219,119,68,223,78,83,88,201,99,122,11,92,32,136,114,52,10,138,30,48,183,156,35,61,26,143,74,251,94,129,162,63,152,170,7,115,167,241,206,3,150,55,59,151,220,90,53,23,131,125,173,15,238,79,95,89,16,105,137,225,224,217,160,37,123,118,73,2,157,46,116,9,145,134,228,207,212,202,215,69,229,27,188,67,124,168,252,42,4,29,108,21,247,19,205,39,203,233,40,186,147,198,192,155,33,164,191,98,204,165,180,117,76,140,36,210,172,41,54,159,8,185,232,113,196,231,47,146,120,51,65,28,144,254,221,93,189,194,139,112,43,71,109,184,209],e=function(t){var n=0;return t.forEach(function(o){n=r[n^o]}),n};return e}();lk.exports=fM});var mk=z((fz,uk)=>{var gM=pk(),dk=function(r,e,t,n){this.c1=r,this.c2=e,this.c3=t,this.salt=n};dk.prototype.getHash=function(){return gM([this.salt,this.c1,this.c2,this.c3])};uk.exports=dk});var fk=z((gz,hk)=>{var yM=mk(),CM=function(){var r=5,e=1,t=new Array(r),n=0,o=function(s){return t[s]},i=function(s,c,l,p){return new yM(s,c,l,p).getHash()},a=function(){return n>=r};this.put=function(s){t[this.getPivot()]=s&255,n++},this.getPivot=function(){return n%r},this.getTripletHashes=function(s){if(!a())return[];var c=s,l=(c+1)%r,p=(c+2)%r,m=(c+3)%r,g=(c+4)%r;return[i(t[c],t[g],t[m],2),i(t[c],t[g],t[p],3),i(t[c],t[m],t[p],5),i(t[c],t[m],t[l],7),i(t[c],t[g],t[l],11),i(t[c],t[p],t[l],13)]},this.getChecksum=function(s,c){if(!a())return null;for(var l=(s+4)%r,p=new Array(e),m=0;m<e;m++){var g=o(s),d=o(l),f=0,y=0;c&&(f=c[m]),m!==0&&(y=p[m-1]),p[m]=i(g,d,f,y)}return p}};hk.exports=CM});var yk=z((yz,gk)=>{var SM=function(r){if(r.length<e)throw new Error;var e=128,t=16,n=r.slice(0,e).sort(function(o,i){return o-i});this.getQ1Ratio=function(){return Math.floor(this.getFirst()*100/this.getThird())%t},this.getQ2Ratio=function(){return Math.floor(this.getSecond()*100/this.getThird())%t},this.getFirst=function(){return n[e/4-1]},this.getSecond=function(){return n[e/2-1]},this.getThird=function(){return n[e-e/4-1]}};gk.exports=SM});var Sk=z((Cz,Ck)=>{var vM=ck(),kM=fk(),wM=yk(),PM=function(){var r=256,e=function(n,o,i){var a=new wM(o);return new vM(i,o,n,a)},t=function(n){for(var o=n?n.length:0,i=Array.apply(null,Array(r)).map(Number.prototype.valueOf,0),a,s=new kM,c=this,l=function(d){i[d]?i[d]++:i[d]=1},p=0;p<o;p++){var m=n.charCodeAt(p),g=s.getPivot();s.put(m),a=s.getChecksum(g,a),s.getTripletHashes(g).forEach(l)}return e(o,i,a)};return t}();Ck.exports=PM});var kk=z((Sz,vk)=>{var nl=function(r){this.name="InsufficientComplexityError",this.message=r,this.stack=new Error().stack};nl.prototype=Object.create(Error.prototype);nl.prototype.constructor=nl;vk.exports=nl});var Pk=z((vz,wk)=>{var RM=Sk(),EM=kk();wk.exports=function(r){var e=RM(r);if(e.isProcessedDataTooSimple())throw new EM("Input data hasn't enough complexity");return e.buildDigest().toString()}});var Ek=z((kz,Rk)=>{var bM=Ju(),TM=Yu(),xM=Zu(),FM=tm(),MM=rm(),nm=Xu(),DM=function(){var r=32,e,t,n,o,i=function(d){var f=s(d),y=0;return c(f[y++]),l(f[y++]),p(f[y++]),m(g(f,y)),this},a=function(){return new xM(e,t,n,o)},s=function(d){for(var f=new Array(d.length/2),y=0;y<d.length;y+=2)f[y/2]=parseInt(d.substring(y,y+2),16);return f},c=function(d){e=new TM([nm(d)])},l=function(d){t=new FM([nm(d)])},p=function(d){n=new MM([nm(d)])},m=function(d){for(var f=new Array(d.length),y=0;y<d.length;y++)f[y]=d[d.length-1-y];o=new bM(f)},g=function(d,f){return d.slice(f,d.length)};return{withHash:i,build:a}};Rk.exports=DM});var hw=z((bG,Pl)=>{function cw(r){return Array.isArray(r)?r:[r]}var JD=void 0,mm="",aw=" ",um="\\",YD=/^\s+$/,XD=/(?:[^\\]|^)\\$/,QD=/^\\!/,ZD=/^\\#/,eI=/\r?\n/g,tI=/^\.{0,2}\/|^\.{1,2}$/,rI=/\/$/,ui="/",lw="node-ignore";typeof Symbol<"u"&&(lw=Symbol.for("node-ignore"));var pw=lw,mi=(r,e,t)=>(Object.defineProperty(r,e,{value:t}),t),nI=/([0-z])-([0-z])/g,dw=()=>!1,oI=r=>r.replace(nI,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:mm),iI=r=>{let{length:e}=r;return r.slice(0,e-e%2)},aI=[[/^\uFEFF/,()=>mm],[/((?:\\\\)*?)(\\?\s+)$/,(r,e,t)=>e+(t.indexOf("\\")===0?aw:mm)],[/(\\+?)\s/g,(r,e)=>{let{length:t}=e;return e.slice(0,t-t%2)+aw}],[/[\\$.|*+(){^]/g,r=>`\\${r}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(r,e,t)=>e+6<t.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(r,e,t)=>{let n=t.replace(/\\\*/g,"[^\\/]*");return e+n}],[/\\\\\\(?=[$.|*+(){^])/g,()=>um],[/\\\\/g,()=>um],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(r,e,t,n,o)=>e===um?`\\[${t}${iI(n)}${o}`:o==="]"&&n.length%2===0?`[${oI(t)}${n}]`:"[]"],[/(?:[^*])$/,r=>/\/$/.test(r)?`${r}$`:`${r}(?=$|\\/$)`]],sI=/(^|\\\/)?\\\*$/,Ia="regex",kl="checkRegex",sw="_",cI={[Ia](r,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[kl](r,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},lI=r=>aI.reduce((e,[t,n])=>e.replace(t,n.bind(r)),r),wl=r=>typeof r=="string",pI=r=>r&&wl(r)&&!YD.test(r)&&!XD.test(r)&&r.indexOf("#")!==0,dI=r=>r.split(eI).filter(Boolean),hm=class{constructor(e,t,n,o,i,a){this.pattern=e,this.mark=t,this.negative=i,mi(this,"body",n),mi(this,"ignoreCase",o),mi(this,"regexPrefix",a)}get regex(){let e=sw+Ia;return this[e]?this[e]:this._make(Ia,e)}get checkRegex(){let e=sw+kl;return this[e]?this[e]:this._make(kl,e)}_make(e,t){let n=this.regexPrefix.replace(sI,cI[e]),o=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return mi(this,t,o)}},uI=({pattern:r,mark:e},t)=>{let n=!1,o=r;o.indexOf("!")===0&&(n=!0,o=o.substr(1)),o=o.replace(QD,"!").replace(ZD,"#");let i=lI(o);return new hm(r,e,o,t,n,i)},fm=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[pw]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(wl(e)&&(e={pattern:e}),pI(e.pattern)){let t=uI(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,cw(wl(e)?dI(e):e).forEach(this._add,this),this._added}test(e,t,n){let o=!1,i=!1,a;this._rules.forEach(c=>{let{negative:l}=c;i===l&&o!==i||l&&!o&&!i&&!t||!c[n].test(e)||(o=!l,i=l,a=l?JD:c)});let s={ignored:o,unignored:i};return a&&(s.rule=a),s}},mI=(r,e)=>{throw new e(r)},Zr=(r,e,t)=>wl(r)?r?Zr.isNotRelative(r)?t(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError):!0:t("path must not be empty",TypeError):t(`path must be a string, but got \`${e}\``,TypeError),uw=r=>tI.test(r);Zr.isNotRelative=uw;Zr.convert=r=>r;var gm=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){mi(this,pw,!0),this._rules=new fm(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,o){let i=e&&Zr.convert(e);return Zr(i,e,this._strictPathCheck?mI:dw),this._t(i,t,n,o)}checkIgnore(e){if(!rI.test(e))return this.test(e);let t=e.split(ui).filter(Boolean);if(t.pop(),t.length){let n=this._t(t.join(ui)+ui,this._testCache,!0,t);if(n.ignored)return n}return this._rules.test(e,!1,kl)}_t(e,t,n,o){if(e in t)return t[e];if(o||(o=e.split(ui).filter(Boolean)),o.pop(),!o.length)return t[e]=this._rules.test(e,n,Ia);let i=this._t(o.join(ui)+ui,t,n,o);return t[e]=i.ignored?i:this._rules.test(e,n,Ia)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return cw(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},ym=r=>new gm(r),hI=r=>Zr(r&&Zr.convert(r),r,dw),mw=()=>{let r=t=>/^\\\\\?\\/.test(t)||/["<>|\u0000-\u001F]+/u.test(t)?t:t.replace(/\\/g,"/");Zr.convert=r;let e=/^[a-z]:\//i;Zr.isNotRelative=t=>e.test(t)||uw(t)};typeof process<"u"&&process.platform==="win32"&&mw();Pl.exports=ym;ym.default=ym;Pl.exports.isPathValid=hI;mi(Pl.exports,Symbol.for("setupWindows"),mw)});var iO={};Gl(iO,{runCli:()=>rR});module.exports=dh(iO);var tR=b(require("path"));var $e=class{constructor(e,t,n){this.id=e;this.payload=t;this.source=n}};var gi=class{listeners=new Map;on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n));let o=t,i=c=>o(c),a=n.size>0;n.add(i),!a&&n.size>0&&this.fireListenerChanged(e,!0);let s=!1;return{dispose:()=>{if(s)return;s=!0;let c=this.listeners.get(e);!c||!c.delete(i)||c.size===0&&(this.listeners.delete(e),this.fireListenerChanged(e,!1))}}}fire(e){let t=this.listeners.get(e.id);if(t)for(let n of[...t])n(e)}fireAsync(e){return Promise.resolve().then(()=>this.fire(e))}dispose(){this.listeners.clear()}fireListenerChanged(e,t){e!=="event.listener.changed"&&this.fire(new $e("event.listener.changed",{id:e,hasListeners:t},this))}};qt();var yi=(n=>(n.IDE="ide",n.CLI="cli",n.AUTO_SYNC="auto-sync",n))(yi||{}),Wa="5.0.1",cR=`succapp@${Wa}`;function Jl(r){return{source:r,agentVersion:cR}}var lR=Jl("ide"),uh=lR;function mh(r){uh=r}function po(){return uh}q();G();var Wn=b(require("fs")),ep=b(require("os")),$t=b(require("path")),Th=require("crypto");var vi=["trace","debug","info","warn","error"];var Sh={trace:0,debug:1,info:2,warn:3,error:4},vh=["TRACE","DEBUG","INFO","WARN","ERROR"],kR=new Set(vi);function wR(r){return typeof r=="string"&&kR.has(r)}function ho(r){let e=r?.trim().toLowerCase();return wR(e)?e:void 0}var PR=30,RR=2e3,ER=24*60*60*1e3,bR=/^succapp-\d{4}-\d{2}-\d{2}\.log$/,TR=/^succapp-\d{8}T\d{6}\.\d{3}Z-p\d+-[0-9a-f]+\.log$/,$a=class{disabled=!1;levelOrdinal;stream;logFile;constructor(e={}){this.levelOrdinal=Sh[e.level??"info"],this.logFile=e.logFile,this.stream=e.logFile?this.createStream(e.logFile):void 0,e.startupInfo&&this.writeRaw(2,"cli log started",e.startupInfo)}async close(){let e=this.stream;!e||e.destroyed||await new Promise(t=>{let n=()=>{this.disabled=!0,t()};e.once("error",n),e.end(t)})}isTraceEnabled(){return this.isEnabled(0)}isDebugEnabled(){return this.isEnabled(1)}isInfoEnabled(){return this.isEnabled(2)}isWarnEnabled(){return this.isEnabled(3)}isErrorEnabled(){return this.isEnabled(4)}trace(e,...t){this.write(0,e,...t)}debug(e,...t){this.write(1,e,...t)}info(e,...t){this.write(2,e,...t)}warn(e,...t){this.write(3,e,...t)}error(e,...t){this.write(4,e,...t)}isEnabled(e){return!this.disabled&&this.stream!==void 0&&e>=this.levelOrdinal}write(e,t,...n){this.isEnabled(e)&&this.writeRaw(e,t,...n)}writeRaw(e,t,...n){if(this.disabled||this.stream===void 0)return;let o=[new Date().toISOString(),vh[e],bh(t),...n.map(bh)].join(" ");this.stream.write(`${o}
|
|
24
|
-
`)}createStream(e){try{let t=
|
|
25
|
-
${s}`:o}let i=n===r?void 0:
|
|
26
|
-
${a}`:i}function
|
|
27
|
-
|
|
28
|
-
`),s++,l=n,a=14;switch(u){case 123:return n++,a=1;case 125:return n++,a=2;case 91:return n++,a=3;case 93:return n++,a=4;case 58:return n++,a=6;case 44:return n++,a=5;case 34:return n++,o=y(),a=10;case 47:let S=n-1;if(r.charCodeAt(n+1)===47){for(n+=2;n<t&&!Ii(r.charCodeAt(n));)n++;return o=r.substring(S,n),a=12}if(r.charCodeAt(n+1)===42){n+=2;let k=t-1,R=!1;for(;n<k;){let w=r.charCodeAt(n);if(w===42&&r.charCodeAt(n+1)===47){n+=2,R=!0;break}n++,Ii(w)&&(w===13&&r.charCodeAt(n)===10&&n++,s++,l=n)}return R||(n++,m=1),o=r.substring(S,n),a=13}return o+=String.fromCharCode(u),n++,a=16;case 45:if(o+=String.fromCharCode(u),n++,n===t||!wo(r.charCodeAt(n)))return a=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return o+=f(),a=11;default:for(;n<t&&v(u);)n++,u=r.charCodeAt(n);if(i!==n){switch(o=r.substring(i,n),o){case"true":return a=8;case"false":return a=9;case"null":return a=7}return a=16}return o+=String.fromCharCode(u),n++,a=16}}function v(u){if(Mp(u)||Ii(u))return!1;switch(u){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function P(){let u;do u=C();while(u>=12&&u<=15);return u}return{setPosition:d,getPosition:()=>n,scan:e?P:C,getToken:()=>a,getTokenValue:()=>o,getTokenOffset:()=>i,getTokenLength:()=>n-i,getTokenStartLine:()=>c,getTokenStartCharacter:()=>i-p,getTokenError:()=>m}}function Mp(r){return r===32||r===9}function Ii(r){return r===10||r===13}function wo(r){return r>=48&&r<=57}var Af;(function(r){r[r.lineFeed=10]="lineFeed",r[r.carriageReturn=13]="carriageReturn",r[r.space=32]="space",r[r._0=48]="_0",r[r._1=49]="_1",r[r._2=50]="_2",r[r._3=51]="_3",r[r._4=52]="_4",r[r._5=53]="_5",r[r._6=54]="_6",r[r._7=55]="_7",r[r._8=56]="_8",r[r._9=57]="_9",r[r.a=97]="a",r[r.b=98]="b",r[r.c=99]="c",r[r.d=100]="d",r[r.e=101]="e",r[r.f=102]="f",r[r.g=103]="g",r[r.h=104]="h",r[r.i=105]="i",r[r.j=106]="j",r[r.k=107]="k",r[r.l=108]="l",r[r.m=109]="m",r[r.n=110]="n",r[r.o=111]="o",r[r.p=112]="p",r[r.q=113]="q",r[r.r=114]="r",r[r.s=115]="s",r[r.t=116]="t",r[r.u=117]="u",r[r.v=118]="v",r[r.w=119]="w",r[r.x=120]="x",r[r.y=121]="y",r[r.z=122]="z",r[r.A=65]="A",r[r.B=66]="B",r[r.C=67]="C",r[r.D=68]="D",r[r.E=69]="E",r[r.F=70]="F",r[r.G=71]="G",r[r.H=72]="H",r[r.I=73]="I",r[r.J=74]="J",r[r.K=75]="K",r[r.L=76]="L",r[r.M=77]="M",r[r.N=78]="N",r[r.O=79]="O",r[r.P=80]="P",r[r.Q=81]="Q",r[r.R=82]="R",r[r.S=83]="S",r[r.T=84]="T",r[r.U=85]="U",r[r.V=86]="V",r[r.W=87]="W",r[r.X=88]="X",r[r.Y=89]="Y",r[r.Z=90]="Z",r[r.asterisk=42]="asterisk",r[r.backslash=92]="backslash",r[r.closeBrace=125]="closeBrace",r[r.closeBracket=93]="closeBracket",r[r.colon=58]="colon",r[r.comma=44]="comma",r[r.dot=46]="dot",r[r.doubleQuote=34]="doubleQuote",r[r.minus=45]="minus",r[r.openBrace=123]="openBrace",r[r.openBracket=91]="openBracket",r[r.plus=43]="plus",r[r.slash=47]="slash",r[r.formFeed=12]="formFeed",r[r.tab=9]="tab"})(Af||(Af={}));var _t=new Array(20).fill(0).map((r,e)=>" ".repeat(e)),Po=200,Dp={" ":{"\n":new Array(Po).fill(0).map((r,e)=>`
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
`+"
|
|
32
|
-
`+"
|
|
23
|
+
`+e.stack:""}`;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}},Wt=class extends Oi{},je=class extends Oi{async applyFileMutationResponses(e){let t=this.createMirrorStore(),n=this.createWorkspaceStore(t);await new Mi({workspace:n,mirror:t,getApiClient:()=>this.getApiClient()}).apply(e,this.task)}async cleanupEmptyOrphanParents(e,t,n){if(e.length===0)return;let o=new Set;Ba.debug(`orphan cleanup start: deletedPaths=${e.length}`);for(let i of e)await this.cleanupAncestorsIfEmpty(Em.posix.dirname(i),o,t,n);Ba.debug(`orphan cleanup done: visitedAncestors=${o.size}`)}async cleanupAncestorsIfEmpty(e,t,n,o){let i=e;for(;i!=="/"&&i!=="."&&!t.has(i);){if(t.add(i),await n.exists(i)){Ba.debug(`orphan cleanup stop at tracked: remotePath=${i}`);return}if(!await o.removeEmptyOrphanDirectory(i))return;i=Em.posix.dirname(i)}}}});var Ow=X((L4,Aw)=>{var jD=function(){var r=256,e=t();function t(){for(var o=new Array(r),i=0;i<o.length;i++)o[i]=new Array(r);for(var i=0;i<r;i++)for(var a=0;a<r;a++){for(var s=i,c=a,l=0,p=0;p<4;p++){var u=Math.abs(s%4-c%4);u==3?l+=u*2:l+=u,p<3&&(s=Math.floor(s/4),c=Math.floor(c/4))}o[i][a]=l}return o}var n=function(o,i){return e[o][i]};return n}();Aw.exports=jD});var eh=X((N4,_w)=>{var BD=Ow(),VD=function(r){var e=function(t){for(var n=0,o=0;o<r.length;o++)n+=BD(r[o],t.getValue(o));return n};this.calculateDifference=function(t){return e(t)},this.getValue=function(t){return r[t]}};_w.exports=VD});var th=X((W4,Lw)=>{var qD=function(r){var e=function(t,n){var o=t.length;if(o!=n.length)return!1;for(;o--;)if(t[o]!==n[o])return!1;return!0};this.calculateDifference=function(t){return e(r,t.getValue())?0:1},this.getValue=function(){return r}};Lw.exports=qD});var rh=X((U4,Nw)=>{Nw.exports=function(r){var e=(r&240)>>4&15;return e|=(r&15)<<4&240,e}});var Uw=X((j4,Ww)=>{var nh=rh(),$D=function(){return function(r){var e=1,t=32,n=function(l){for(var p="",u=0;u<l.length;u++)l[u]<16&&(p+="0"),p+=l[u].toString(16).toUpperCase();return p},o=function(l){for(var p=new Array(e),u=0;u<e;u++)p[u]=nh(l.getValue()[u]);return n(p)},i=function(l){return n([nh(l.getValue())])},a=function(l){return n([nh(l.getValue())])},s=function(l){for(var p=new Array(t),u=0;u<t;u++)p[u]=l.getValue(t-1-u);return n(p)},c="";return c+=o(r.getChecksum()),c+=i(r.getLValue()),c+=a(r.getQ()),c+=s(r.getBody()),c}}();Ww.exports=$D});var oh=X((B4,jw)=>{var HD=Uw(),zD=function(r,e,t,n){this.getLValue=function(){return e},this.getQ=function(){return t},this.getChecksum=function(){return r},this.getBody=function(){return n},this.calculateDifference=function(o,i){var a=0;return i&&(a+=e.calculateDifference(o.getLValue())),a+=t.calculateDifference(o.getQ()),a+=r.calculateDifference(o.getChecksum()),a+=n.calculateDifference(o.getBody()),a},this.toString=function(){return HD(this)}};jw.exports=zD});var ih=X((V4,Bw)=>{Bw.exports=function(r,e,t){var n=Math.abs(e-r),o=t-n;return Math.min(n,o)}});var ah=X((q4,Vw)=>{var KD=ih(),GD=function(r){var e=256;this.calculateDifference=function(t){var n=KD(r,t.getValue(),e);return n===0?0:n===1?1:n*12},this.getValue=function(){return r}};Vw.exports=GD});var sh=X(($4,$w)=>{var qw=ih(),JD=function(r){this.getQLo=function(){return r&15},this.getQHi=function(){return(r&240)>>4},this.calculateDifference=function(e){var t=16,n=0,o=qw(this.getQLo(),e.getQLo(),t);o<=1?n+=o:n+=(o-1)*12;var i=qw(this.getQHi(),e.getQHi(),t);return i<=1?n+=i:n+=(i-1)*12,n},this.getValue=function(){return r}};$w.exports=JD});var zw=X((H4,Hw)=>{var YD=eh(),XD=th(),QD=oh(),ZD=ah(),eA=sh(),tA=function(){var r=256,e=.09531018,t=.26236426,n=.4054651,o,i,a,s,c={LOW:656,MID:3199},l=function(y){return this.checksum=new XD(y),this},p=function(y){return this.lValue=new ZD(f(y)),this},u=function(y){var C=function(v,w){var h=function(S,k){return(0|S&15)&15|(k&15)<<4};return new eA(h(v,w))};return this.q=new C(y.getQ1Ratio(),y.getQ2Ratio()),this},g=function(y){return this.body=new YD(y),this},m=function(){return new QD(this.checksum,this.lValue,this.q,this.body)},f=function(y){return y<=c.LOW?Math.floor(Math.log(y)/n)%r:y<=c.MID?Math.floor(Math.log(y)/t-8.72777)%r:Math.floor(Math.log(y)/e-62.5472)%r};return{withChecksum:l,withLength:p,withQuartiles:u,withBody:g,build:m}};Hw.exports=tA});var Gw=X((z4,Kw)=>{var rA=zw(),nA=function(r,e,t,n){var o=512,i=32,a=function(p){return e[p]>0},s=function(){for(var p=0,u=0;u<i*4;u++)a(u)&&p++;return p>i*2},c=function(){return t>=o},l=function(){for(var p=new Array(i),u=0;u<i;u++){for(var g=0,m=0;m<4;m++){var f=e[4*u+m];n.getThird()<f?g+=3<<m*2:n.getSecond()<f?g+=2<<m*2:n.getFirst()<f&&(g+=1<<m*2)}p[u]=g}return p};this.isProcessedDataTooSimple=function(){return!c()||!s()},this.buildDigest=function(){return new rA().withChecksum(r).withLength(t).withQuartiles(n).withBody(l()).build()}};Kw.exports=nA});var Yw=X((K4,Jw)=>{var oA=function(){var r=[1,87,49,12,176,178,102,166,121,193,6,84,249,230,44,163,14,197,213,181,161,85,218,80,64,239,24,226,236,142,38,200,110,177,104,103,141,253,255,50,77,101,81,18,45,96,31,222,25,107,190,70,86,237,240,34,72,242,20,214,244,227,149,235,97,234,57,22,60,250,82,175,208,5,127,199,111,62,135,248,174,169,211,58,66,154,106,195,245,171,17,187,182,179,0,243,132,56,148,75,128,133,158,100,130,126,91,13,153,246,216,219,119,68,223,78,83,88,201,99,122,11,92,32,136,114,52,10,138,30,48,183,156,35,61,26,143,74,251,94,129,162,63,152,170,7,115,167,241,206,3,150,55,59,151,220,90,53,23,131,125,173,15,238,79,95,89,16,105,137,225,224,217,160,37,123,118,73,2,157,46,116,9,145,134,228,207,212,202,215,69,229,27,188,67,124,168,252,42,4,29,108,21,247,19,205,39,203,233,40,186,147,198,192,155,33,164,191,98,204,165,180,117,76,140,36,210,172,41,54,159,8,185,232,113,196,231,47,146,120,51,65,28,144,254,221,93,189,194,139,112,43,71,109,184,209],e=function(t){var n=0;return t.forEach(function(o){n=r[n^o]}),n};return e}();Jw.exports=oA});var Zw=X((G4,Qw)=>{var iA=Yw(),Xw=function(r,e,t,n){this.c1=r,this.c2=e,this.c3=t,this.salt=n};Xw.prototype.getHash=function(){return iA([this.salt,this.c1,this.c2,this.c3])};Qw.exports=Xw});var tP=X((J4,eP)=>{var aA=Zw(),sA=function(){var r=5,e=1,t=new Array(r),n=0,o=function(s){return t[s]},i=function(s,c,l,p){return new aA(s,c,l,p).getHash()},a=function(){return n>=r};this.put=function(s){t[this.getPivot()]=s&255,n++},this.getPivot=function(){return n%r},this.getTripletHashes=function(s){if(!a())return[];var c=s,l=(c+1)%r,p=(c+2)%r,u=(c+3)%r,g=(c+4)%r;return[i(t[c],t[g],t[u],2),i(t[c],t[g],t[p],3),i(t[c],t[u],t[p],5),i(t[c],t[u],t[l],7),i(t[c],t[g],t[l],11),i(t[c],t[p],t[l],13)]},this.getChecksum=function(s,c){if(!a())return null;for(var l=(s+4)%r,p=new Array(e),u=0;u<e;u++){var g=o(s),m=o(l),f=0,y=0;c&&(f=c[u]),u!==0&&(y=p[u-1]),p[u]=i(g,m,f,y)}return p}};eP.exports=sA});var nP=X((Y4,rP)=>{var cA=function(r){if(r.length<e)throw new Error;var e=128,t=16,n=r.slice(0,e).sort(function(o,i){return o-i});this.getQ1Ratio=function(){return Math.floor(this.getFirst()*100/this.getThird())%t},this.getQ2Ratio=function(){return Math.floor(this.getSecond()*100/this.getThird())%t},this.getFirst=function(){return n[e/4-1]},this.getSecond=function(){return n[e/2-1]},this.getThird=function(){return n[e-e/4-1]}};rP.exports=cA});var iP=X((X4,oP)=>{var lA=Gw(),pA=tP(),dA=nP(),uA=function(){var r=256,e=function(n,o,i){var a=new dA(o);return new lA(i,o,n,a)},t=function(n){for(var o=n?n.length:0,i=Array.apply(null,Array(r)).map(Number.prototype.valueOf,0),a,s=new pA,c=this,l=function(m){i[m]?i[m]++:i[m]=1},p=0;p<o;p++){var u=n.charCodeAt(p),g=s.getPivot();s.put(u),a=s.getChecksum(g,a),s.getTripletHashes(g).forEach(l)}return e(o,i,a)};return t}();oP.exports=uA});var sP=X((Q4,aP)=>{var Bl=function(r){this.name="InsufficientComplexityError",this.message=r,this.stack=new Error().stack};Bl.prototype=Object.create(Error.prototype);Bl.prototype.constructor=Bl;aP.exports=Bl});var lP=X((Z4,cP)=>{var mA=iP(),hA=sP();cP.exports=function(r){var e=mA(r);if(e.isProcessedDataTooSimple())throw new hA("Input data hasn't enough complexity");return e.buildDigest().toString()}});var dP=X((eJ,pP)=>{var fA=eh(),gA=th(),yA=oh(),CA=ah(),SA=sh(),ch=rh(),vA=function(){var r=32,e,t,n,o,i=function(m){var f=s(m),y=0;return c(f[y++]),l(f[y++]),p(f[y++]),u(g(f,y)),this},a=function(){return new yA(e,t,n,o)},s=function(m){for(var f=new Array(m.length/2),y=0;y<m.length;y+=2)f[y/2]=parseInt(m.substring(y,y+2),16);return f},c=function(m){e=new gA([ch(m)])},l=function(m){t=new CA([ch(m)])},p=function(m){n=new SA([ch(m)])},u=function(m){for(var f=new Array(m.length),y=0;y<m.length;y++)f[y]=m[m.length-1-y];o=new fA(f)},g=function(m,f){return m.slice(f,m.length)};return{withHash:i,build:a}};pP.exports=vA});var lR=X((F8,yp)=>{function nR(r){return Array.isArray(r)?r:[r]}var C_=void 0,Eh="",tR=" ",bh="\\",S_=/^\s+$/,v_=/(?:[^\\]|^)\\$/,k_=/^\\!/,w_=/^\\#/,P_=/\r?\n/g,R_=/^\.{0,2}\/|^\.{1,2}$/,b_=/\/$/,Hi="/",oR="node-ignore";typeof Symbol<"u"&&(oR=Symbol.for("node-ignore"));var iR=oR,zi=(r,e,t)=>(Object.defineProperty(r,e,{value:t}),t),E_=/([0-z])-([0-z])/g,aR=()=>!1,T_=r=>r.replace(E_,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:Eh),M_=r=>{let{length:e}=r;return r.slice(0,e-e%2)},x_=[[/^\uFEFF/,()=>Eh],[/((?:\\\\)*?)(\\?\s+)$/,(r,e,t)=>e+(t.indexOf("\\")===0?tR:Eh)],[/(\\+?)\s/g,(r,e)=>{let{length:t}=e;return e.slice(0,t-t%2)+tR}],[/[\\$.|*+(){^]/g,r=>`\\${r}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(r,e,t)=>e+6<t.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(r,e,t)=>{let n=t.replace(/\\\*/g,"[^\\/]*");return e+n}],[/\\\\\\(?=[$.|*+(){^])/g,()=>bh],[/\\\\/g,()=>bh],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(r,e,t,n,o)=>e===bh?`\\[${t}${M_(n)}${o}`:o==="]"&&n.length%2===0?`[${T_(t)}${n}]`:"[]"],[/(?:[^*])$/,r=>/\/$/.test(r)?`${r}$`:`${r}(?=$|\\/$)`]],F_=/(^|\\\/)?\\\*$/,ds="regex",fp="checkRegex",rR="_",I_={[ds](r,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[fp](r,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},D_=r=>x_.reduce((e,[t,n])=>e.replace(t,n.bind(r)),r),gp=r=>typeof r=="string",A_=r=>r&&gp(r)&&!S_.test(r)&&!v_.test(r)&&r.indexOf("#")!==0,O_=r=>r.split(P_).filter(Boolean),Th=class{constructor(e,t,n,o,i,a){this.pattern=e,this.mark=t,this.negative=i,zi(this,"body",n),zi(this,"ignoreCase",o),zi(this,"regexPrefix",a)}get regex(){let e=rR+ds;return this[e]?this[e]:this._make(ds,e)}get checkRegex(){let e=rR+fp;return this[e]?this[e]:this._make(fp,e)}_make(e,t){let n=this.regexPrefix.replace(F_,I_[e]),o=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return zi(this,t,o)}},__=({pattern:r,mark:e},t)=>{let n=!1,o=r;o.indexOf("!")===0&&(n=!0,o=o.substr(1)),o=o.replace(k_,"!").replace(w_,"#");let i=D_(o);return new Th(r,e,o,t,n,i)},Mh=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[iR]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(gp(e)&&(e={pattern:e}),A_(e.pattern)){let t=__(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,nR(gp(e)?O_(e):e).forEach(this._add,this),this._added}test(e,t,n){let o=!1,i=!1,a;this._rules.forEach(c=>{let{negative:l}=c;i===l&&o!==i||l&&!o&&!i&&!t||!c[n].test(e)||(o=!l,i=l,a=l?C_:c)});let s={ignored:o,unignored:i};return a&&(s.rule=a),s}},L_=(r,e)=>{throw new e(r)},un=(r,e,t)=>gp(r)?r?un.isNotRelative(r)?t(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError):!0:t("path must not be empty",TypeError):t(`path must be a string, but got \`${e}\``,TypeError),sR=r=>R_.test(r);un.isNotRelative=sR;un.convert=r=>r;var xh=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){zi(this,iR,!0),this._rules=new Mh(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,o){let i=e&&un.convert(e);return un(i,e,this._strictPathCheck?L_:aR),this._t(i,t,n,o)}checkIgnore(e){if(!b_.test(e))return this.test(e);let t=e.split(Hi).filter(Boolean);if(t.pop(),t.length){let n=this._t(t.join(Hi)+Hi,this._testCache,!0,t);if(n.ignored)return n}return this._rules.test(e,!1,fp)}_t(e,t,n,o){if(e in t)return t[e];if(o||(o=e.split(Hi).filter(Boolean)),o.pop(),!o.length)return t[e]=this._rules.test(e,n,ds);let i=this._t(o.join(Hi)+Hi,t,n,o);return t[e]=i.ignored?i:this._rules.test(e,n,ds)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return nR(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Fh=r=>new xh(r),N_=r=>un(r&&un.convert(r),r,aR),cR=()=>{let r=t=>/^\\\\\?\\/.test(t)||/["<>|\u0000-\u001F]+/u.test(t)?t:t.replace(/\\/g,"/");un.convert=r;let e=/^[a-z]:\//i;un.isNotRelative=t=>e.test(t)||sR(t)};typeof process<"u"&&process.platform==="win32"&&cR();yp.exports=Fh;Fh.default=Fh;yp.exports.isPathValid=N_;zi(yp.exports,Symbol.for("setupWindows"),cR)});var eN={};$p(eN,{runCli:()=>pE});module.exports=Tf(eN);var lE=E(require("path"));var Ye=class{constructor(e,t,n){this.id=e;this.payload=t;this.source=n}};var Ji=class{listeners=new Map;on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n));let o=t,i=c=>o(c),a=n.size>0;n.add(i),!a&&n.size>0&&this.fireListenerChanged(e,!0);let s=!1;return{dispose:()=>{if(s)return;s=!0;let c=this.listeners.get(e);!c||!c.delete(i)||c.size===0&&(this.listeners.delete(e),this.fireListenerChanged(e,!1))}}}fire(e){let t=this.listeners.get(e.id);if(t)for(let n of[...t])n(e)}fireAsync(e){return Promise.resolve().then(()=>this.fire(e))}dispose(){this.listeners.clear()}fireListenerChanged(e,t){e!=="event.listener.changed"&&this.fire(new Ye("event.listener.changed",{id:e,hasListeners:t},this))}};er();var Yi=(n=>(n.IDE="ide",n.CLI="cli",n.AUTO_SYNC="auto-sync",n))(Yi||{}),ys="5.0.3",gE=`succapp@${ys}`;function Hp(r){return{source:r,agentVersion:gE}}var yE=Hp("ide"),Mf=yE;function xf(r){Mf=r}function Wo(){return Mf}D();Y();var eo=E(require("fs")),Yp=E(require("os")),tr=E(require("path")),qf=require("crypto");var Zi=["trace","debug","info","warn","error"];var _f={trace:0,debug:1,info:2,warn:3,error:4},Lf=["TRACE","DEBUG","INFO","WARN","ERROR"],xE=new Set(Zi);function FE(r){return typeof r=="string"&&xE.has(r)}function Bo(r){let e=r?.trim().toLowerCase();return FE(e)?e:void 0}var IE=30,DE=2e3,AE=24*60*60*1e3,OE=/^succapp-\d{4}-\d{2}-\d{2}\.log$/,_E=/^succapp-\d{8}T\d{6}\.\d{3}Z-p\d+-[0-9a-f]+\.log$/,Ps=class{disabled=!1;levelOrdinal;stream;logFile;constructor(e={}){this.levelOrdinal=_f[e.level??"info"],this.logFile=e.logFile,this.stream=e.logFile?this.createStream(e.logFile):void 0,e.startupInfo&&this.writeRaw(2,"cli log started",e.startupInfo)}async close(){let e=this.stream;!e||e.destroyed||await new Promise(t=>{let n=()=>{this.disabled=!0,t()};e.once("error",n),e.end(t)})}isTraceEnabled(){return this.isEnabled(0)}isDebugEnabled(){return this.isEnabled(1)}isInfoEnabled(){return this.isEnabled(2)}isWarnEnabled(){return this.isEnabled(3)}isErrorEnabled(){return this.isEnabled(4)}trace(e,...t){this.write(0,e,...t)}debug(e,...t){this.write(1,e,...t)}info(e,...t){this.write(2,e,...t)}warn(e,...t){this.write(3,e,...t)}error(e,...t){this.write(4,e,...t)}isEnabled(e){return!this.disabled&&this.stream!==void 0&&e>=this.levelOrdinal}write(e,t,...n){this.isEnabled(e)&&this.writeRaw(e,t,...n)}writeRaw(e,t,...n){if(this.disabled||this.stream===void 0)return;let o=[new Date().toISOString(),Lf[e],Vf(t),...n.map(Vf)].join(" ");this.stream.write(`${o}
|
|
24
|
+
`)}createStream(e){try{let t=eo.createWriteStream(e,{flags:"a"});return t.on("error",()=>{this.disabled=!0}),t}catch{this.disabled=!0;return}}};async function $f(r={}){let e=r.level??"info",t=r.logDir??tr.join(WE(r.env),"logs"),n=new Date,o=(0,qf.randomBytes)(3).toString("hex");try{await eo.promises.mkdir(t,{recursive:!0});let i=tr.join(t,UE(n,process.pid,o)),a=new Ps({level:e,logFile:i,startupInfo:{runId:o,pid:process.pid,cwd:r.cwd,level:e}});return LE(t,{activeLogFile:i,retentionDays:r.retentionDays,maxFiles:r.maxFiles}).catch(s=>{a.warn("cli log cleanup failed",s)}),a}catch{return new Ps({level:e})}}async function LE(r,e={}){let t=await NE(r),n=e.activeLogFile?tr.resolve(e.activeLogFile):void 0,o=VE(e.retentionDays),i=qE(e.maxFiles),a=Date.now()-o*AE,s=new Set;for(let l of t)tr.resolve(l.filePath)!==n&&l.mtimeMs<a&&await Bf(l.filePath)&&s.add(l.filePath);let c=t.filter(l=>!s.has(l.filePath)).sort((l,p)=>l.mtimeMs-p.mtimeMs);for(;c.length>i;){let l=c.shift();if(!l)break;if(tr.resolve(l.filePath)===n){c.push(l);continue}await Bf(l.filePath)&&s.add(l.filePath)}return{deletedFiles:s.size}}async function NE(r){let e;try{e=await eo.promises.readdir(r,{withFileTypes:!0})}catch(o){if(Xp(o,"ENOENT"))return[];throw o}let t=e.filter(o=>o.isFile()).map(o=>({filePath:tr.join(r,o.name),kind:BE(o.name)})).filter(o=>o.kind!==void 0);return(await Promise.all(t.map(async o=>{let i=await jE(o.filePath);if(i)return{filePath:o.filePath,mtimeMs:i.mtimeMs,size:i.size,kind:o.kind}}))).filter(o=>o!==void 0).sort((o,i)=>o.filePath.localeCompare(i.filePath))}function WE(r=process.env){return process.platform==="win32"?tr.join(r.LOCALAPPDATA||tr.join(Yp.homedir(),"AppData","Local"),"succapp"):tr.join(r.XDG_CACHE_HOME||tr.join(Yp.homedir(),".cache"),"succapp")}function UE(r,e,t){return`succapp-${r.toISOString().replace(/[-:]/g,"")}-p${e}-${t}.log`}async function jE(r){try{return await eo.promises.stat(r)}catch(e){if(Xp(e,"ENOENT"))return;throw e}}async function Bf(r){try{return await eo.promises.unlink(r),!0}catch(e){if(Xp(e,"ENOENT"))return!1;throw e}}function BE(r){if(OE.test(r))return"legacy";if(_E.test(r))return"run"}function VE(r){return r===void 0||!Number.isFinite(r)||r<0?IE:Math.floor(r)}function qE(r){return r===void 0||!Number.isFinite(r)||r<1?DE:Math.floor(r)}function Xp(r,e){return typeof r=="object"&&r!==null&&"code"in r&&r.code===e}function Vf(r){if(r instanceof Error)return $E(r);if(typeof r=="string")return r;try{return JSON.stringify(r)??String(r)}catch{return String(r)}}function $E(r){return r.stack?r.stack:r.name&&r.message?`${r.name}: ${r.message}`:r.message||String(r)}var ng=E(require("fs")),aa=E(require("path"));D();Ee();F();Y();re();var sT=T("cli.localizer"),xs=class r{constructor(e,t,n){this.defaultBundle=e;this.localeBundle=t;this.unresolvedLocale=n}static async create(e={}){let t=e.bundleDir??pT(),n=await rg(aa.join(t,"bundle.l10n.json"))??{},o=cT(e.locale);if(!o)return new r(n,{});let i=aa.join(t,`bundle.l10n.${o}.json`),a=await rg(i);return a||sT.debug("CLI l10n bundle not found, falling back to default bundle",i,e.bundleDir?"configured bundleDir":"default bundleDir"),new r(n,a??{},a?void 0:e.locale)}t(e,...t){let n=this.localeBundle[e]??this.defaultBundle[e]??e;return ws(t)?gn(n,t[0]):gn(n,...t)}};async function rg(r){try{let e=await ng.promises.readFile(r,"utf8"),t=JSON.parse(e);z(q(t),`l10n bundle root is not an object: ${r}`);let n={};for(let[o,i]of Object.entries(t))typeof i=="string"&&(n[o]=i);return n}catch(e){if(x(e))return;throw e}}function cT(r){let e=lT(r);if(!(!e||e==="en"||e.startsWith("en-")))return e==="zh"?"zh-cn":e}function lT(r){if(!r)return;let e=r.split(".")[0].trim();if(!(!e||e==="C"||e==="POSIX"))return e.replace(/_/g,"-").toLowerCase()}function pT(){return aa.resolve(__dirname,"..","..","..","..","l10n")}D();Ir();var od=100,og=100,As=class extends vn{constructor(t,n){super(void 0,0,n);this.output=t}lastProgressKey;doStart(t){this.lastProgressKey=void 0,this.emitProgress(0,t)}doProgress(t,n){this.emitProgress(t,this.getProgressTotal())}doRetainedFinish(t){this.output.progress({message:t,retained:!0,current:0},()=>t)}emitProgress(t,n){let o=uT(t,n,this.message),i=`${o.message??""}:${o.current}:${o.total??""}:${o.percent??""}`;i!==this.lastProgressKey&&(this.lastProgressKey=i,this.output.progress(o,()=>mT(o)))}};function uT(r,e,t){let n=nd(r);if(e===void 0||e<=0)return t?{message:t,current:n}:{current:n};let o=nd(e),i={current:n,total:o,percent:nd(Math.min(n/o,1)*od)};return t?{message:t,...i}:i}function mT(r){if(r.total!==void 0&&r.percent!==void 0){if(r.percent>=od)return"";let e=Math.min(Math.max(Math.round(r.percent),0),od-1);return r.message?d("cli.out.task.progressMessagePercent",r.message,e):d("cli.out.task.progressPercent",e)}return r.message?d("cli.out.task.progressMessageText",r.message,r.current):d("cli.out.task.progressText",r.current)}function nd(r){return Math.round(r*og)/og}F();D();re();function lg(r){return ia(r)?fT(r.category):1}function hT(r){return r instanceof Error?r.message||r.name:io(r)||d("common.err.unexpected")}function _s(r,e){return ia(r)?gT(r,e):{code:"error",name:r instanceof Error&&r.name||"Error",message:hT(r),internal:!0,stack:r instanceof Error?r.stack:void 0,cause:ed(r)}}function fT(r){switch(r){case"usage":return 2;case"lockBusy":return 3;case"lockCompromised":return 4;case"networkAuth":return 5;case"conflict":return 6;case"cancel":return 130;default:return 1}}function gT(r,e){let t=e?dg(r.properties,e):r.properties;return{code:r.errorCode,name:r.name,message:yT(r,t),hint:CT(r,t),details:kT(r,t,e),internal:!1,category:r.category,style:r.style,errorType:r.errorType==null?void 0:String(r.errorType),errorDialogStyle:r.errorDialogStyle,hintMessage:r.hintMessage,locationPath:r.locationPath,properties:r.properties}}function yT(r,e){return pg(r.errorCode,e)??Zf(r)}function pg(r,e){let t=sd(e),n=ad(r,e),o=bt(n,t);if(o){if(n!==r)return o;let s=bt(`${r}.desc`,t);return s?`${o}
|
|
25
|
+
${s}`:o}let i=n===r?void 0:bt(r,t);if(!i)return;let a=bt(`${r}.desc`,t);return a?`${i}
|
|
26
|
+
${a}`:i}function CT(r,e){let t=eg(r);if(t)return t;if(r.errorCode==="err.cli.unknownCommand"){let i=ST(e);if(i)return i}let n=sd(e),o=ad(r.errorCode,e);if(o!==r.errorCode){let i=bt(`${o}.hint`,n);if(i)return i}if(yr(n.sources)){let i=bt(`${r.errorCode}.hintWithSources`,n);if(i)return i}return bt(`${r.errorCode}.hint`,n)}function ST(r){let e=Ls(r.suggestedCommands);if(e.length!==0)return d("err.cli.unknownCommand.suggestion.hint",{commands:vT(e)})}function vT(r){return r.length===1?` '${r[0]}'`:`
|
|
27
|
+
${r.map(e=>` '${e}'`).join(`
|
|
28
|
+
`)}`}function ad(r,e){let t=yr(e.reason);return t?`${r}.${t}`:r}function kT(r,e,t){let n=[...TT(e.issues,t),...bT(r.errorCode,e),...MT(e.sqlInfos)];return n.length>0?n:void 0}function dg(r,e){let t=wT(e);return t.size===0?r:{...r,input:id(r.input,t),option:id(r.option,t),flag:id(r.flag,t),sources:ig(r.sources,t),inputs:ig(r.inputs,t)}}function wT(r){let e=new Map;for(let n of r.commandSpec.flags)n.alias&&e.set(n.alias,n);let t=new Map;for(let n of r.commandArgv){if(n==="--")break;if(n.startsWith("--")||!n.startsWith("-")||n.length<=1)continue;let o=n.slice(1);for(let i=0;i<o.length;i++){let a=o[i],s=e.get(a);if(s&&(t.set(s.name,`-${a}`),s.takesValue))break}}return t}function id(r,e){return typeof r=="string"?ug(r,e):r}function ig(r,e){return Array.isArray(r)?r.map(t=>typeof t=="string"?ug(t,e):t):r}function ug(r,e){let t=/^--([A-Za-z0-9-]+)(.*)$/.exec(r);if(!t)return r;let n=e.get(t[1]);if(!n)return r;let o=t[2];return o.startsWith("=")?`${n} ${o.slice(1)}`:`${n}${o}`}function PT(r){let e=Ls(r.sourceIds);return e.length===0?[]:e.flatMap(t=>{let n=RT(t,r);return n?[n]:[]})}function RT(r,e){let t=yr(e.commandName),n=yr(e.envName)??"SUCCAPP_SERVER";switch(r){case"serverPositional":return t?Os(d("cli.err.context.exampleCommandUrl",{commandName:t})):d("cli.err.context.exampleUrl");case"serverOption":return t?Os(d("cli.err.context.exampleCommandServer",{commandName:t})):d("cli.err.context.exampleServerOpt");case"workspaceRemoteAdd":return Os(d("cli.err.context.workspaceRemoteAdd"));case"environmentServer":return t?Os(d("cli.err.context.exampleEnvUrl",{envName:n,commandName:t})):d("cli.err.context.text",{envName:n});default:return}}function Os(r){return`'${r}'`}function bT(r,e){let t=Ls(e.details),n=sd(e),o=ad(r,e);if(o!==r){let a=bt(`${o}.desc`,n);a&&t.push(a)}let i=yr(e.detailKey);if(i){let a=bt(`${r}.detail.${i}`,n);a&&t.push(a)}return t}function sd(r){let e={};for(let[n,o]of Object.entries(r)){if(typeof o=="string"||typeof o=="number"||typeof o=="boolean"){e[n]=n==="value"?sg(o):o;continue}let i=Ls(o);i.length>0&&(e[n]=n==="sources"?ag(i):i.join(", "))}e.input=ET(r),Object.hasOwn(r,"value")&&(e.value=sg(r.value));let t=PT(r);return t.length>0&&(e.sources=ag(t)),e}function ag(r){return r.length<=1?r[0]??"":r.length===2?d("cli.err.context.sourceListPair",{first:r[0],second:r[1]}):d("cli.err.context.sourceListMany",{head:r.slice(0,-1).join(d("cli.err.context.sourceListSeparator")),tail:r[r.length-1]})}function ET(r){let e=yr(r.input);if(e)return e;let t=yr(r.option)??yr(r.flag);if(t)return t;let n=yr(r.argument);if(n)return n;let o=yr(r.inputId);return o?bt(`cli.input.${o}`)??o:d("cli.input.value")}function sg(r){return r==null||r===""?d("cli.out.value.none"):String(r)}function TT(r,e){return Array.isArray(r)?r.flatMap(t=>{if(!q(t))return[];let n=yr(t.errorCode);if(!n||!q(t.properties))return[];let o=e?dg(t.properties,e):t.properties,i=pg(n,o);return i?[i]:[]}):[]}function Ls(r){return Array.isArray(r)?r.flatMap(e=>typeof e=="string"&&e?[e]:[]):[]}function yr(r){return typeof r=="string"&&r?r:void 0}function MT(r){return Array.isArray(r)?r.flatMap((e,t)=>xT(e,t)):[]}function xT(r,e){if(!q(r))return[];let t=typeof r.sqlType=="string"?r.sqlType:d("cli.out.value.unknown"),n=typeof r.tableName=="string"?` ${r.tableName}`:"",o=FT(r);return[`#${e} ${t}${n}${o}`]}function FT(r){let e=[];return r.schemaMutation===!0&&e.push(d("cli.cmd.db.exec.schemaMutation")),r.dataMutation===!0&&r.manipulateAllRows===!0&&e.push(d("cli.cmd.db.exec.fullTableData")),e.length?` (${e.join(", ")})`:""}Ee();var qs=require("crypto");F();B();re();F();var IT=/\/+$/,DT=/^https?:\/\//i,AT="127.0.0.1",OT="localhost";function cd(r){let e;try{e=new URL(r.trim())}catch(t){throw new bs(r,t)}return e.hostname===AT&&(e.hostname=OT),e.pathname.length>1&&(e.pathname=e.pathname.replace(/\/+$/,"")),e}function ye(r){return cd(r).href.replace(IT,"")}function $e(r,e){let t=cd(r),n=cd(e);return t.hostname===n.hostname&&t.port===n.port&&t.pathname===n.pathname}function ao(r){return r!==void 0&&DT.test(r)}function He(r){return r&&r.trim()?r:void 0}function _t(r,e){if(r===void 0)return;let t=r.trim();if(!/^\d+$/.test(t))return;let n=Number(t);if(Number.isSafeInteger(n)&&!(e!==void 0&&n>e))return n}function hg(r,e=void 0){if(r===void 0)return e;let t=r.trim();return t===""?e:t==="1"||kn(t,"true")||kn(t,"yes")||kn(t,"on")?!0:t==="0"||kn(t,"false")||kn(t,"no")||kn(t,"off")?!1:e}function kn(r,e){if(r===e)return!0;if(r==null||e===void 0||e===null||r.length!==e.length)return!1;for(let t=0;t<r.length;t++){let n=mg(r.charCodeAt(t)),o=mg(e.charCodeAt(t));if(n!==o)return!1}return!0}function Dr(r){let e=0;for(let t of r){let n=t.codePointAt(0);n===void 0||_T(n)||(e+=LT(n)?2:1)}return e}function qo(r,e){return`${r}${" ".repeat(Math.max(0,e-Dr(r)))}`}function fg(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function ld(r){return Buffer.from(r).toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function _T(r){return r<=31||r>=127&&r<=159||r>=768&&r<=879||r>=6832&&r<=6911||r>=7616&&r<=7679||r>=8400&&r<=8447||r>=65024&&r<=65039||r>=65056&&r<=65071||r===8203||r===8204||r===8205||r===8288}function LT(r){return r>=4352&&r<=4447||r===9001||r===9002||r>=11904&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65040&&r<=65049||r>=65072&&r<=65135||r>=65280&&r<=65376||r>=65504&&r<=65510}function mg(r){return r>=65&&r<=90?r+32:r}F();var gg="SuccApp/2.0",yg="X-Requested-With",Cg="XMLHttpRequest";F();B();Cn();re();Ho();var ud=512;async function Ws(r,e){r.ok||await JT(r,e);let t=await Rg(r,e);if(t.trim().length===0)throw md(e,r,"empty response body");let n=YT(t,e,r);return bg(n,e,r),n}async function Pg(r,e){if(!Sg(r.headers.get("content-type")??void 0))return;let t=await Rg(r,e);if(t.trim().length===0)return;let n;try{n=JSON.parse(t)}catch{return}bg(n,e,r)}async function JT(r,e){if(r.status===401)throw new Le({serverUrl:e.serverUrl});let t;try{t=await r.text()}catch(n){throw new gt(e.url,n instanceof Error?n:void 0)}throw new or(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e.url}`),r.headers.get("content-type")??void 0)}async function Rg(r,e){try{return await r.text()}catch(t){throw md(e,r,"cannot read response body",t)}}function YT(r,e,t){try{return JSON.parse(r)}catch(n){throw md(e,t,"response body is not valid JSON",n,r)}}function bg(r,e,t){if(q(r)&&ZT(r))throw XT(r,e,t)}function XT(r,e,t){let n=ta(r),o=yn(n),i=ot(o)??ot(n),a=i??"err.net.invalidResponse",s={...Ot(o),...Ot(n),...Eg(e,t),...i?{}:{reason:"missingErrorCode"}};return new ge(a,{message:o.message||n.message||a,properties:s,errorType:gr(o)??gr(n),errorDialogStyle:o.errorDialogStyle??n.errorDialogStyle,hintMessage:o.hintMessage??n.hintMessage,locationPath:o.locationPath??n.locationPath,cause:n})}function md(r,e,t,n,o){return new ge("err.net.invalidResponse",{properties:{...Eg(r,e),reason:t,responsePreview:QT(o),responseTruncated:o!==void 0&&o.length>ud},cause:n})}function Eg(r,e){return{url:r.url,endpoint:r.endpoint??new URL(r.url).pathname,serverUrl:r.serverUrl,operation:r.operation,request:r.request,httpStatus:e.status,contentType:e.headers.get("content-type")??void 0}}function QT(r){if(r===void 0)return;let e=r.trim();if(e.length!==0)return e.length>ud?`${e.slice(0,ud)}...`:e}function ZT(r){return typeof r.errorCode=="string"||typeof r.className=="string"||Array.isArray(r.stack)}async function wn(r,e){try{let t=await fetch(r,{...e,headers:eM(e?.headers)});return t.status>=500&&await co(t,r),t}catch(t){throw t instanceof or||t instanceof gt?t:new gt(r,t instanceof Error?t:void 0)}}async function Us(r){let e=`${r}/api/dev-tool/v2/server/ping`,t=await wn(e);return Ws(t,{url:e,endpoint:"/server/ping",serverUrl:r})}async function co(r,e){let t;try{t=await r.text()}catch(n){throw new gt(e,n instanceof Error?n:void 0)}throw new or(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e}`),r.headers.get("content-type")??void 0)}function hd(r){if(!r)return{};if(r instanceof Headers){let e={};return r.forEach((t,n)=>{e[n]=t}),e}return Array.isArray(r)?Object.fromEntries(r):{...r}}function eM(r){let e=hd(r);return ca(e,"User-Agent",gg),ca(e,yg,Cg),ca(e,"X-Succ-Client-Type","nodejs"),ca(e,"Accept","application/json"),ca(e,"Accept-Encoding","gzip"),e}function ca(r,e,t){Object.keys(r).some(o=>kn(o,e))||(r[e]=t)}var tM="SuccApp-Devtool",rM="SUCCAPP_OAUTH_APP_ID",nM="/api/oauth2/authorize",Tg="/api/oauth2/token",Mg="/api/oauth2/refreshToken";function Bs(){return process.env[rM]?.trim()||tM}function xg(r,e){let t=new URL(`${ye(r)}${nM}`);return t.searchParams.set("appid",e.appId??Bs()),t.searchParams.set("redirect_uri",e.redirectUri),t.searchParams.set("response_type","code"),t.searchParams.set("state",e.state),t.searchParams.set("code_challenge",e.codeChallenge),t.searchParams.set("code_challenge_method","S256"),t.toString()}async function Fg(r,e){let t=ye(r),n=await Dg(`${t}${Tg}`,{grant_type:"code",appid:e.appId??Bs(),code:e.code,code_verifier:e.codeVerifier});return Ag(t,Tg,n)}async function Ig(r,e){let t=ye(r),n=await Dg(`${t}${Mg}`,{refresh_token:e.refreshToken});return Ag(t,Mg,n)}async function Dg(r,e){let t=await wn(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});return t.ok||await co(t,r),t}async function Ag(r,e,t){let n;try{n=await t.json()}catch(a){throw js(r,e,"response body is not valid JSON",a)}if(!q(n))throw js(r,e,"response body is not an object");if(n.result!==!0)throw js(r,e,"token response result is not true");let o=$t(n.access_token),i=$t(n.refresh_token);if(!o||!i)throw js(r,e,"token response misses token fields");return O({accessToken:o,refreshToken:i,expiresAt:oM(n.expires_in),scope:iM(n.scope)})}function oM(r){let e=typeof r=="number"?r:typeof r=="string"?Number(r):Number.NaN;if(!(!Number.isFinite(e)||e<=0))return new Date(Date.now()+e*1e3).toISOString()}function iM(r){return typeof r=="string"?to(r.split(/\s+/)):to(r)}function js(r,e,t,n){return new ge("err.login.oauthTokenInvalid",{properties:{serverUrl:r,endpoint:e,reason:t},cause:n})}var Wg=E(require("http"));F();B();Y();var aM=T("common.promise"),fd=new WeakMap,zo=new WeakMap;function yd(r,e){return gd(r)?.get(e)}function Cr(r,e,t){let n=gd(r);n||(n=new Map,fd.set(r,n));let o=n.get(e);if(o)return o;let i=(async()=>t())().finally(()=>{let a=gd(r);!a||a.get(e)!==i||(a.delete(e),a.size===0&&fd.delete(r))});return n.set(e,i),i}function Ko(r,e,t,n,o={}){let i=zo.get(r);i||(i=new Map,zo.set(r,i));let a=Date.now(),s=i.get(e);s&&sM(s.timer)&&i.delete(e);let c=i.get(e),l=c?.firstScheduledAt??a;c&&clearTimeout(c.timer);let p=Math.max(0,t);if(o.maxWaitMs!==void 0){let g=Math.max(0,l+o.maxWaitMs-a);p=Math.min(p,g)}let u=setTimeout(()=>{let g=zo.get(r);g?.get(e)?.timer===u&&(g.delete(e),g.size===0&&zo.delete(r)),Promise.resolve().then(n).catch(m=>aM.warn(`debounced task failed: ${e}`,m))},p);return i.set(e,{timer:u,firstScheduledAt:l}),u}function Go(r,e){let t=zo.get(r),n=t?.get(e)?.timer;return!t||!n?!1:(clearTimeout(n),t.delete(e),t.size===0&&zo.delete(r),!0)}function gd(r){return fd.get(r)}function sM(r){return!r||typeof r!="object"?!1:r._destroyed===!0}async function Og(r,e){let t;try{return await Promise.race([r,new Promise(n=>{t=setTimeout(()=>n(!1),Math.max(0,e))})])}finally{t&&clearTimeout(t)}}var Cd="127.0.0.1",_g="/callback",lM=2*60*1e3;async function Ug(r){let e=!1,t,n,o=new Promise((l,p)=>{t=l,n=p}),i=Wg.createServer((l,p)=>{let u=new URL(l.url??"/",`http://${Cd}`);if(u.pathname!==_g){la(p,404,"Not Found");return}pM(u,p,r.state).then(g=>{e||(e=!0,t(g))}).catch(g=>{e||(e=!0,n(g))})});await dM(i);let a=i.address();if(!a||typeof a=="string")throw await Vs(i),new ge("err.login.oauthLoopbackFailed",{properties:{reason:"loopback server address is unavailable"}});let s=r.timeoutMs??lM,c=()=>{e||(e=!0,n(Ng()))};if(r.abortSignal?.aborted)throw await Vs(i),Ng();return r.abortSignal?.addEventListener("abort",c,{once:!0}),{redirectUri:`http://${Cd}:${a.port}${_g}`,async waitForCallback(){try{let l=await Og(o,s);if(l===!1)throw new ge("err.login.oauthTimeout",{category:"networkAuth",style:"warn"});return l}finally{r.abortSignal?.removeEventListener("abort",c),await Vs(i)}},dispose(){return r.abortSignal?.removeEventListener("abort",c),Vs(i)}}}async function pM(r,e,t){if(r.searchParams.get("state")!==t)throw la(e,400,"Authorization state does not match."),new ge("err.login.oauthStateMismatch",{category:"networkAuth",style:"warn"});if(r.searchParams.get("error"))throw la(e,400,"Authorization failed."),Lg("authorization server returned error");let i=r.searchParams.get("code");if(!i)throw la(e,400,"Authorization code is missing."),Lg("authorization code is missing");return la(e,200,"Authorization completed. You can close this page."),{code:i}}function dM(r){return new Promise((e,t)=>{let n=o=>t(o);r.once("error",n),r.listen(0,Cd,()=>{r.off("error",n),e()})})}function Vs(r){return new Promise(e=>{if(!r.listening){e();return}r.close(()=>e())})}function la(r,e,t){r.writeHead(e,{"Content-Type":"text/html; charset=utf-8"}),r.end(`<!doctype html><html><body>${fg(t)}</body></html>`)}function Lg(r){return new ge("err.login.oauthInvalidCallback",{category:"networkAuth",style:"warn",properties:{reason:r}})}function Ng(){return new ge("err.base.cancel",{category:"cancel",style:"silent"})}async function Bg(r,e={}){let t=e.appId??Bs(),n=jg(32),o=jg(64),i=uM(o),a=await Ug({state:n,timeoutMs:e.timeoutMs,abortSignal:e.abortSignal});try{let s=xg(r,{appId:t,redirectUri:a.redirectUri,state:n,codeChallenge:i});e.onProgress?.({stage:"openingBrowser"});try{await e.openExternal?.(s)}catch{e.onProgress?.({stage:"manualAuthorizationUrl",authorizationUrl:s})}e.onProgress?.({stage:"waitingForCallback"});let c=await a.waitForCallback();e.onProgress?.({stage:"exchangingToken"});let l=await Fg(r,{appId:t,code:c.code,codeVerifier:o});return{type:"oauth",token:l.accessToken,refreshToken:l.refreshToken,expiresAt:l.expiresAt,scope:l.scope}}finally{await a.dispose()}}function jg(r){return ld((0,qs.randomBytes)(r))}function uM(r){return ld((0,qs.createHash)("sha256").update(r).digest())}Ee();F();B();re();function Sd(r,e=Date.now()){let t=qg(r);return t!==void 0&&t<=e}function Vg(r,e,t=Date.now()){let n=qg(r);return n!==void 0&&t>=n-e}function qg(r){if(!r)return;let e=Date.parse(r);return Number.isFinite(e)?e:void 0}var By=E(require("os")),Xr=E(require("path"));Et();var Ly=E(require("fs"));function ha(r,e=!1){let t=r.length,n=0,o="",i=0,a=16,s=0,c=0,l=0,p=0,u=0;function g(h,S){let k=0,b=0;for(;k<h||!S;){let P=r.charCodeAt(n);if(P>=48&&P<=57)b=b*16+P-48;else if(P>=65&&P<=70)b=b*16+P-65+10;else if(P>=97&&P<=102)b=b*16+P-97+10;else break;n++,k++}return k<h&&(b=-1),b}function m(h){n=h,o="",i=0,a=16,u=0}function f(){let h=n;if(r.charCodeAt(n)===48)n++;else for(n++;n<r.length&&ei(r.charCodeAt(n));)n++;if(n<r.length&&r.charCodeAt(n)===46)if(n++,n<r.length&&ei(r.charCodeAt(n)))for(n++;n<r.length&&ei(r.charCodeAt(n));)n++;else return u=3,r.substring(h,n);let S=n;if(n<r.length&&(r.charCodeAt(n)===69||r.charCodeAt(n)===101))if(n++,(n<r.length&&r.charCodeAt(n)===43||r.charCodeAt(n)===45)&&n++,n<r.length&&ei(r.charCodeAt(n))){for(n++;n<r.length&&ei(r.charCodeAt(n));)n++;S=n}else u=3;return r.substring(h,S)}function y(){let h="",S=n;for(;;){if(n>=t){h+=r.substring(S,n),u=2;break}let k=r.charCodeAt(n);if(k===34){h+=r.substring(S,n),n++;break}if(k===92){if(h+=r.substring(S,n),n++,n>=t){u=2;break}switch(r.charCodeAt(n++)){case 34:h+='"';break;case 92:h+="\\";break;case 47:h+="/";break;case 98:h+="\b";break;case 102:h+="\f";break;case 110:h+=`
|
|
29
|
+
`;break;case 114:h+="\r";break;case 116:h+=" ";break;case 117:let P=g(4,!0);P>=0?h+=String.fromCharCode(P):u=4;break;default:u=5}S=n;continue}if(k>=0&&k<=31)if(ma(k)){h+=r.substring(S,n),u=2;break}else u=6;n++}return h}function C(){if(o="",u=0,i=n,c=s,p=l,n>=t)return i=t,a=17;let h=r.charCodeAt(n);if(Ld(h)){do n++,o+=String.fromCharCode(h),h=r.charCodeAt(n);while(Ld(h));return a=15}if(ma(h))return n++,o+=String.fromCharCode(h),h===13&&r.charCodeAt(n)===10&&(n++,o+=`
|
|
30
|
+
`),s++,l=n,a=14;switch(h){case 123:return n++,a=1;case 125:return n++,a=2;case 91:return n++,a=3;case 93:return n++,a=4;case 58:return n++,a=6;case 44:return n++,a=5;case 34:return n++,o=y(),a=10;case 47:let S=n-1;if(r.charCodeAt(n+1)===47){for(n+=2;n<t&&!ma(r.charCodeAt(n));)n++;return o=r.substring(S,n),a=12}if(r.charCodeAt(n+1)===42){n+=2;let k=t-1,b=!1;for(;n<k;){let P=r.charCodeAt(n);if(P===42&&r.charCodeAt(n+1)===47){n+=2,b=!0;break}n++,ma(P)&&(P===13&&r.charCodeAt(n)===10&&n++,s++,l=n)}return b||(n++,u=1),o=r.substring(S,n),a=13}return o+=String.fromCharCode(h),n++,a=16;case 45:if(o+=String.fromCharCode(h),n++,n===t||!ei(r.charCodeAt(n)))return a=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return o+=f(),a=11;default:for(;n<t&&v(h);)n++,h=r.charCodeAt(n);if(i!==n){switch(o=r.substring(i,n),o){case"true":return a=8;case"false":return a=9;case"null":return a=7}return a=16}return o+=String.fromCharCode(h),n++,a=16}}function v(h){if(Ld(h)||ma(h))return!1;switch(h){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function w(){let h;do h=C();while(h>=12&&h<=15);return h}return{setPosition:m,getPosition:()=>n,scan:e?w:C,getToken:()=>a,getTokenValue:()=>o,getTokenOffset:()=>i,getTokenLength:()=>n-i,getTokenStartLine:()=>c,getTokenStartCharacter:()=>i-p,getTokenError:()=>u}}function Ld(r){return r===32||r===9}function ma(r){return r===10||r===13}function ei(r){return r>=48&&r<=57}var by;(function(r){r[r.lineFeed=10]="lineFeed",r[r.carriageReturn=13]="carriageReturn",r[r.space=32]="space",r[r._0=48]="_0",r[r._1=49]="_1",r[r._2=50]="_2",r[r._3=51]="_3",r[r._4=52]="_4",r[r._5=53]="_5",r[r._6=54]="_6",r[r._7=55]="_7",r[r._8=56]="_8",r[r._9=57]="_9",r[r.a=97]="a",r[r.b=98]="b",r[r.c=99]="c",r[r.d=100]="d",r[r.e=101]="e",r[r.f=102]="f",r[r.g=103]="g",r[r.h=104]="h",r[r.i=105]="i",r[r.j=106]="j",r[r.k=107]="k",r[r.l=108]="l",r[r.m=109]="m",r[r.n=110]="n",r[r.o=111]="o",r[r.p=112]="p",r[r.q=113]="q",r[r.r=114]="r",r[r.s=115]="s",r[r.t=116]="t",r[r.u=117]="u",r[r.v=118]="v",r[r.w=119]="w",r[r.x=120]="x",r[r.y=121]="y",r[r.z=122]="z",r[r.A=65]="A",r[r.B=66]="B",r[r.C=67]="C",r[r.D=68]="D",r[r.E=69]="E",r[r.F=70]="F",r[r.G=71]="G",r[r.H=72]="H",r[r.I=73]="I",r[r.J=74]="J",r[r.K=75]="K",r[r.L=76]="L",r[r.M=77]="M",r[r.N=78]="N",r[r.O=79]="O",r[r.P=80]="P",r[r.Q=81]="Q",r[r.R=82]="R",r[r.S=83]="S",r[r.T=84]="T",r[r.U=85]="U",r[r.V=86]="V",r[r.W=87]="W",r[r.X=88]="X",r[r.Y=89]="Y",r[r.Z=90]="Z",r[r.asterisk=42]="asterisk",r[r.backslash=92]="backslash",r[r.closeBrace=125]="closeBrace",r[r.closeBracket=93]="closeBracket",r[r.colon=58]="colon",r[r.comma=44]="comma",r[r.dot=46]="dot",r[r.doubleQuote=34]="doubleQuote",r[r.minus=45]="minus",r[r.openBrace=123]="openBrace",r[r.openBracket=91]="openBracket",r[r.plus=43]="plus",r[r.slash=47]="slash",r[r.formFeed=12]="formFeed",r[r.tab=9]="tab"})(by||(by={}));var zt=new Array(20).fill(0).map((r,e)=>" ".repeat(e)),ti=200,Nd={" ":{"\n":new Array(ti).fill(0).map((r,e)=>`
|
|
31
|
+
`+" ".repeat(e)),"\r":new Array(ti).fill(0).map((r,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(ti).fill(0).map((r,e)=>`\r
|
|
32
|
+
`+" ".repeat(e))}," ":{"\n":new Array(ti).fill(0).map((r,e)=>`
|
|
33
|
+
`+" ".repeat(e)),"\r":new Array(ti).fill(0).map((r,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(ti).fill(0).map((r,e)=>`\r
|
|
34
|
+
`+" ".repeat(e))}},Ey=[`
|
|
33
35
|
`,"\r",`\r
|
|
34
|
-
`];function
|
|
36
|
+
`];function Wd(r,e,t){let n,o,i,a,s;if(e){for(a=e.offset,s=a+e.length,i=a;i>0&&!fa(r,i-1);)i--;let k=s;for(;k<r.length&&!fa(r,k);)k++;o=r.substring(i,k),n=zM(o,t)}else o=r,n=0,i=0,a=0,s=r.length;let c=KM(t,r),l=Ey.includes(c),p=0,u=0,g;t.insertSpaces?g=zt[t.tabSize||4]??ri(zt[1],t.tabSize||4):g=" ";let m=g===" "?" ":" ",f=ha(o,!1),y=!1;function C(){if(p>1)return ri(c,p)+ri(g,n+u);let k=g.length*(n+u);return!l||k>Nd[m][c].length?c+ri(g,n+u):k<=0?c:Nd[m][c][k]}function v(){let k=f.scan();for(p=0;k===15||k===14;)k===14&&t.keepLines?p+=1:k===14&&(p=1),k=f.scan();return y=k===16||f.getTokenError()!==0,k}let w=[];function h(k,b,P){!y&&(!e||b<s&&P>a)&&r.substring(b,P)!==k&&w.push({offset:b,length:P-b,content:k})}let S=v();if(t.keepLines&&p>0&&h(ri(c,p),0,0),S!==17){let k=f.getTokenOffset()+i,b=g.length*n<20&&t.insertSpaces?zt[g.length*n]:ri(g,n);h(b,i,k)}for(;S!==17;){let k=f.getTokenOffset()+f.getTokenLength()+i,b=v(),P="",J=!1;for(;p===0&&(b===12||b===13);){let H=f.getTokenOffset()+i;h(zt[1],k,H),k=f.getTokenOffset()+f.getTokenLength()+i,J=b===12,P=J?C():"",b=v()}if(b===2)S!==1&&u--,t.keepLines&&p>0||!t.keepLines&&S!==1?P=C():t.keepLines&&(P=zt[1]);else if(b===4)S!==3&&u--,t.keepLines&&p>0||!t.keepLines&&S!==3?P=C():t.keepLines&&(P=zt[1]);else{switch(S){case 3:case 1:u++,t.keepLines&&p>0||!t.keepLines?P=C():P=zt[1];break;case 5:t.keepLines&&p>0||!t.keepLines?P=C():P=zt[1];break;case 12:P=C();break;case 13:p>0?P=C():J||(P=zt[1]);break;case 6:t.keepLines&&p>0?P=C():J||(P=zt[1]);break;case 10:t.keepLines&&p>0?P=C():b===6&&!J&&(P="");break;case 7:case 8:case 9:case 11:case 2:case 4:t.keepLines&&p>0?P=C():(b===12||b===13)&&!J?P=zt[1]:b!==5&&b!==17&&(y=!0);break;case 16:y=!0;break}p>0&&(b===12||b===13)&&(P=C())}b===17&&(t.keepLines&&p>0?P=C():P=t.insertFinalNewline?c:"");let M=f.getTokenOffset()+i;h(P,k,M),S=b}return w}function ri(r,e){let t="";for(let n=0;n<e;n++)t+=r;return t}function zM(r,e){let t=0,n=0,o=e.tabSize||4;for(;t<r.length;){let i=r.charAt(t);if(i===zt[1])n++;else if(i===" ")n+=o;else break;t++}return Math.floor(n/o)}function KM(r,e){for(let t=0;t<e.length;t++){let n=e.charAt(t);if(n==="\r")return t+1<e.length&&e.charAt(t+1)===`
|
|
35
37
|
`?`\r
|
|
36
38
|
`:"\r";if(n===`
|
|
37
39
|
`)return`
|
|
38
40
|
`}return r&&r.eol||`
|
|
39
|
-
`}function
|
|
40
|
-
`.indexOf(r.charAt(e))!==-1}var _i;(function(r){r.DEFAULT={allowTrailingComma:!1}})(_i||(_i={}));function _f(r,e=[],t=_i.DEFAULT){let n=null,o=[],i=[];function a(c){Array.isArray(o)?o.push(c):n!==null&&(o[n]=c)}return Op(r,{onObjectBegin:()=>{let c={};a(c),i.push(o),o=c,n=null},onObjectProperty:c=>{n=c},onObjectEnd:()=>{o=i.pop()},onArrayBegin:()=>{let c=[];a(c),i.push(o),o=c,n=null},onArrayEnd:()=>{o=i.pop()},onLiteralValue:a,onError:(c,l,p)=>{e.push({error:c,offset:l,length:p})}},t),o[0]}function Ap(r,e=[],t=_i.DEFAULT){let n={type:"array",offset:-1,length:-1,children:[],parent:void 0};function o(c){n.type==="property"&&(n.length=c-n.offset,n=n.parent)}function i(c){return n.children.push(c),c}Op(r,{onObjectBegin:c=>{n=i({type:"object",offset:c,length:-1,parent:n,children:[]})},onObjectProperty:(c,l,p)=>{n=i({type:"property",offset:l,length:-1,parent:n,children:[]}),n.children.push({type:"string",value:c,offset:l,length:p,parent:n})},onObjectEnd:(c,l)=>{o(c+l),n.length=c+l-n.offset,n=n.parent,o(c+l)},onArrayBegin:(c,l)=>{n=i({type:"array",offset:c,length:-1,parent:n,children:[]})},onArrayEnd:(c,l)=>{n.length=c+l-n.offset,n=n.parent,o(c+l)},onLiteralValue:(c,l,p)=>{i({type:cb(c),offset:l,length:p,parent:n,value:c}),o(l+p)},onSeparator:(c,l,p)=>{n.type==="property"&&(c===":"?n.colonOffset=l:c===","&&o(l))},onError:(c,l,p)=>{e.push({error:c,offset:l,length:p})}},t);let s=n.children[0];return s&&delete s.parent,s}function us(r,e){if(!r)return;let t=r;for(let n of e)if(typeof n=="string"){if(t.type!=="object"||!Array.isArray(t.children))return;let o=!1;for(let i of t.children)if(Array.isArray(i.children)&&i.children[0].value===n&&i.children.length===2){t=i.children[1],o=!0;break}if(!o)return}else{let o=n;if(t.type!=="array"||o<0||!Array.isArray(t.children)||o>=t.children.length)return;t=t.children[o]}return t}function Op(r,e,t=_i.DEFAULT){let n=Ai(r,!1),o=[],i=0;function a(B){return B?()=>i===0&&B(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function s(B){return B?K=>i===0&&B(K,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function c(B){return B?K=>i===0&&B(K,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice()):()=>!0}function l(B){return B?()=>{i>0?i++:B(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice())===!1&&(i=1)}:()=>!0}function p(B){return B?()=>{i>0&&i--,i===0&&B(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter())}:()=>!0}let m=l(e.onObjectBegin),g=c(e.onObjectProperty),d=p(e.onObjectEnd),f=l(e.onArrayBegin),y=p(e.onArrayEnd),C=c(e.onLiteralValue),v=s(e.onSeparator),P=a(e.onComment),u=s(e.onError),S=t&&t.disallowComments,k=t&&t.allowTrailingComma;function R(){for(;;){let B=n.scan();switch(n.getTokenError()){case 4:w(14);break;case 5:w(15);break;case 3:w(13);break;case 1:S||w(11);break;case 2:w(12);break;case 6:w(16);break}switch(B){case 12:case 13:S?w(10):P();break;case 16:w(1);break;case 15:case 14:break;default:return B}}}function w(B,K=[],oe=[]){if(u(B),K.length+oe.length>0){let re=n.getToken();for(;re!==17;){if(K.indexOf(re)!==-1){R();break}else if(oe.indexOf(re)!==-1)break;re=R()}}}function H(B){let K=n.getTokenValue();return B?C(K):(g(K),o.push(K)),R(),!0}function x(){switch(n.getToken()){case 11:let B=n.getTokenValue(),K=Number(B);isNaN(K)&&(w(2),K=0),C(K);break;case 7:C(null);break;case 8:C(!0);break;case 9:C(!1);break;default:return!1}return R(),!0}function j(){return n.getToken()!==10?(w(3,[],[2,5]),!1):(H(!1),n.getToken()===6?(v(":"),R(),ee()||w(4,[],[2,5])):w(5,[],[2,5]),o.pop(),!0)}function L(){m(),R();let B=!1;for(;n.getToken()!==2&&n.getToken()!==17;){if(n.getToken()===5){if(B||w(4,[],[]),v(","),R(),n.getToken()===2&&k)break}else B&&w(6,[],[]);j()||w(4,[],[2,5]),B=!0}return d(),n.getToken()!==2?w(7,[2],[]):R(),!0}function ie(){f(),R();let B=!0,K=!1;for(;n.getToken()!==4&&n.getToken()!==17;){if(n.getToken()===5){if(K||w(4,[],[]),v(","),R(),n.getToken()===4&&k)break}else K&&w(6,[],[]);B?(o.push(0),B=!1):o[o.length-1]++,ee()||w(4,[],[4,5]),K=!0}return y(),B||o.pop(),n.getToken()!==4?w(8,[4],[]):R(),!0}function ee(){switch(n.getToken()){case 3:return ie();case 1:return L();case 10:return H(!0);default:return x()}}return R(),n.getToken()===17?t.allowEmptyContent?!0:(w(4,[],[]),!1):ee()?(n.getToken()!==17&&w(9,[],[]),!0):(w(4,[],[]),!1)}function cb(r){switch(typeof r){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":{if(r){if(Array.isArray(r))return"array"}else return"null";return"object"}default:return"null"}}function Lf(r,e,t,n){let o=e.slice(),a=Ap(r,[]),s,c;for(;o.length>0&&(c=o.pop(),s=us(a,o),s===void 0&&t!==void 0);)typeof c=="string"?t={[c]:t}:t=[t];if(s)if(s.type==="object"&&typeof c=="string"&&Array.isArray(s.children)){let l=us(s,[c]);if(l!==void 0)if(t===void 0){if(!l.parent)throw new Error("Malformed AST");let p=s.children.indexOf(l.parent),m,g=l.parent.offset+l.parent.length;if(p>0){let d=s.children[p-1];m=d.offset+d.length}else m=s.offset+1,s.children.length>1&&(g=s.children[1].offset);return Jn(r,{offset:m,length:g-m,content:""},n)}else return Jn(r,{offset:l.offset,length:l.length,content:JSON.stringify(t)},n);else{if(t===void 0)return[];let p=`${JSON.stringify(c)}: ${JSON.stringify(t)}`,m=n.getInsertionIndex?n.getInsertionIndex(s.children.map(d=>d.children[0].value)):s.children.length,g;if(m>0){let d=s.children[m-1];g={offset:d.offset+d.length,length:0,content:","+p}}else s.children.length===0?g={offset:s.offset+1,length:0,content:p}:g={offset:s.offset+1,length:0,content:p+","};return Jn(r,g,n)}}else if(s.type==="array"&&typeof c=="number"&&Array.isArray(s.children)){let l=c;if(l===-1){let p=`${JSON.stringify(t)}`,m;if(s.children.length===0)m={offset:s.offset+1,length:0,content:p};else{let g=s.children[s.children.length-1];m={offset:g.offset+g.length,length:0,content:","+p}}return Jn(r,m,n)}else if(t===void 0&&s.children.length>=0){let p=c,m=s.children[p],g;if(s.children.length===1)g={offset:s.offset+1,length:s.length-2,content:""};else if(s.children.length-1===p){let d=s.children[p-1],f=d.offset+d.length,y=s.offset+s.length;g={offset:f,length:y-2-f,content:""}}else g={offset:m.offset,length:s.children[p+1].offset-m.offset,content:""};return Jn(r,g,n)}else if(t!==void 0){let p,m=`${JSON.stringify(t)}`;if(!n.isArrayInsertion&&s.children.length>c){let g=s.children[c];p={offset:g.offset,length:g.length,content:m}}else if(s.children.length===0||c===0)p={offset:s.offset+1,length:0,content:s.children.length===0?m:m+","};else{let g=c>s.children.length?s.children.length:c,d=s.children[g-1];p={offset:d.offset+d.length,length:0,content:","+m}}return Jn(r,p,n)}else throw new Error(`Can not ${t===void 0?"remove":n.isArrayInsertion?"insert":"modify"} Array index ${l} as length is not sufficient`)}else throw new Error(`Can not add ${typeof c!="number"?"index":"property"} to parent of type ${s.type}`);else{if(t===void 0)throw new Error("Can not delete in empty document");return Jn(r,{offset:a?a.offset:0,length:a?a.length:0,content:JSON.stringify(t)},n)}}function Jn(r,e,t){if(!t.formattingOptions)return[e];let n=ms(r,e),o=e.offset,i=e.offset+e.content.length;if(e.length===0||e.content.length===0){for(;o>0&&!Oi(n,o-1);)o--;for(;i<n.length&&!Oi(n,i);)i++}let a=Ip(n,{offset:o,length:i-o},{...t.formattingOptions,keepLines:!1});for(let c=a.length-1;c>=0;c--){let l=a[c];n=ms(n,l),o=Math.min(o,l.offset),i=Math.max(i,l.offset+l.length),i+=l.content.length-l.length}let s=r.length-(n.length-i)-o;return[{offset:o,length:s,content:n.substring(o,i)}]}function ms(r,e){return r.substring(0,e.offset)+e.content+r.substring(e.offset+e.length)}var Nf;(function(r){r[r.None=0]="None",r[r.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",r[r.UnexpectedEndOfString=2]="UnexpectedEndOfString",r[r.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",r[r.InvalidUnicode=4]="InvalidUnicode",r[r.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",r[r.InvalidCharacter=6]="InvalidCharacter"})(Nf||(Nf={}));var Wf;(function(r){r[r.OpenBraceToken=1]="OpenBraceToken",r[r.CloseBraceToken=2]="CloseBraceToken",r[r.OpenBracketToken=3]="OpenBracketToken",r[r.CloseBracketToken=4]="CloseBracketToken",r[r.CommaToken=5]="CommaToken",r[r.ColonToken=6]="ColonToken",r[r.NullKeyword=7]="NullKeyword",r[r.TrueKeyword=8]="TrueKeyword",r[r.FalseKeyword=9]="FalseKeyword",r[r.StringLiteral=10]="StringLiteral",r[r.NumericLiteral=11]="NumericLiteral",r[r.LineCommentTrivia=12]="LineCommentTrivia",r[r.BlockCommentTrivia=13]="BlockCommentTrivia",r[r.LineBreakTrivia=14]="LineBreakTrivia",r[r.Trivia=15]="Trivia",r[r.Unknown=16]="Unknown",r[r.EOF=17]="EOF"})(Wf||(Wf={}));var jf=_f;var Uf;(function(r){r[r.InvalidSymbol=1]="InvalidSymbol",r[r.InvalidNumberFormat=2]="InvalidNumberFormat",r[r.PropertyNameExpected=3]="PropertyNameExpected",r[r.ValueExpected=4]="ValueExpected",r[r.ColonExpected=5]="ColonExpected",r[r.CommaExpected=6]="CommaExpected",r[r.CloseBraceExpected=7]="CloseBraceExpected",r[r.CloseBracketExpected=8]="CloseBracketExpected",r[r.EndOfFileExpected=9]="EndOfFileExpected",r[r.InvalidCommentToken=10]="InvalidCommentToken",r[r.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",r[r.UnexpectedEndOfString=12]="UnexpectedEndOfString",r[r.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",r[r.InvalidUnicode=14]="InvalidUnicode",r[r.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",r[r.InvalidCharacter=16]="InvalidCharacter"})(Uf||(Uf={}));function Bf(r){switch(r){case 1:return"InvalidSymbol";case 2:return"InvalidNumberFormat";case 3:return"PropertyNameExpected";case 4:return"ValueExpected";case 5:return"ColonExpected";case 6:return"CommaExpected";case 7:return"CloseBraceExpected";case 8:return"CloseBracketExpected";case 9:return"EndOfFileExpected";case 10:return"InvalidCommentToken";case 11:return"UnexpectedEndOfComment";case 12:return"UnexpectedEndOfString";case 13:return"UnexpectedEndOfNumber";case 14:return"InvalidUnicode";case 15:return"InvalidEscapeCharacter";case 16:return"InvalidCharacter"}return"<unknown ParseErrorCode>"}function Vf(r,e,t,n){return Lf(r,e,t,n)}function qf(r,e){let t=e.slice(0).sort((o,i)=>{let a=o.offset-i.offset;return a===0?o.length-i.length:a}),n=r.length;for(let o=t.length-1;o>=0;o--){let i=t[o];if(i.offset+i.length<=n)r=ms(r,i);else throw new Error("Overlapping edit");n=i.offset}return r}vt();G();ne();var db=T("common.json");var Jt={allowComment:!0},ub={insertSpaces:!1,tabSize:4,eol:`
|
|
41
|
-
`,insertFinalNewline:!0};function
|
|
42
|
-
`}function
|
|
43
|
-
`)}function Lp(){let r=sg();if(r)return Nr.dirname(r);let e=Db();return e||Nr.join(Jf.homedir(),fb)}function ig(){let r=sg();return r||Nr.join(Lp(),gb)}function ag(){return Nr.join(Lp(),yb)}function Mb(){return Nr.join(Lp(),Cb)}function sg(){return cg(Sb)}function Db(){return cg(vb)}function cg(r){let e=process.env[r]?.trim();return e?Nr.resolve(e):void 0}function nt(r){return r&&r.trim()?r:void 0}function Yt(r,e){if(r===void 0)return;let t=r.trim();if(!/^\d+$/.test(t))return;let n=Number(t);if(Number.isSafeInteger(n)&&!(e!==void 0&&n>e))return n}function pg(r,e=void 0){if(r===void 0)return e;let t=r.trim();return t===""?e:t==="1"||ln(t,"true")||ln(t,"yes")||ln(t,"on")?!0:t==="0"||ln(t,"false")||ln(t,"no")||ln(t,"off")?!1:e}function ln(r,e){if(r===e)return!0;if(r==null||e===void 0||e===null||r.length!==e.length)return!1;for(let t=0;t<r.length;t++){let n=lg(r.charCodeAt(t)),o=lg(e.charCodeAt(t));if(n!==o)return!1}return!0}function Sr(r){let e=0;for(let t of r){let n=t.codePointAt(0);n===void 0||Ib(n)||(e+=Ab(n)?2:1)}return e}function Eo(r,e){return`${r}${" ".repeat(Math.max(0,e-Sr(r)))}`}function Ib(r){return r<=31||r>=127&&r<=159||r>=768&&r<=879||r>=6832&&r<=6911||r>=7616&&r<=7679||r>=8400&&r<=8447||r>=65024&&r<=65039||r>=65056&&r<=65071||r===8203||r===8204||r===8205||r===8288}function Ab(r){return r>=4352&&r<=4447||r===9001||r===9002||r>=11904&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65040&&r<=65049||r>=65072&&r<=65135||r>=65280&&r<=65376||r>=65504&&r<=65510}function lg(r){return r>=65&&r<=90?r+32:r}D();var dg="SuccApp/2.0",ug="X-Requested-With",mg="XMLHttpRequest";D();J();Un();ne();To();var Up=512;async function fs(r,e){r.ok||await zb(r,e);let t=await Sg(r,e);if(t.trim().length===0)throw jp(e,r,"empty response body");let n=Kb(t,e,r);return vg(n,e,r),n}async function Cg(r,e){if(!hg(r.headers.get("content-type")??void 0))return;let t=await Sg(r,e);if(t.trim().length===0)return;let n;try{n=JSON.parse(t)}catch{return}vg(n,e,r)}async function zb(r,e){if(r.status===401)throw new ut({serverUrl:e.serverUrl});let t;try{t=await r.text()}catch(n){throw new dt(e.url,n instanceof Error?n:void 0)}throw new zt(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e.url}`),r.headers.get("content-type")??void 0)}async function Sg(r,e){try{return await r.text()}catch(t){throw jp(e,r,"cannot read response body",t)}}function Kb(r,e,t){try{return JSON.parse(r)}catch(n){throw jp(e,t,"response body is not valid JSON",n,r)}}function vg(r,e,t){if(V(r)&&Yb(r))throw Gb(r,e,t)}function Gb(r,e,t){let n=wi(r),o=on(n),i=pt(o)??pt(n),a=i??"err.net.invalidResponse",s={...bt(o),...bt(n),...kg(e,t),...i?{}:{reason:"missingErrorCode"}};return new _e(a,{message:o.message||n.message||a,properties:s,errorType:sr(o)??sr(n),errorDialogStyle:o.errorDialogStyle??n.errorDialogStyle,hintMessage:o.hintMessage??n.hintMessage,locationPath:o.locationPath??n.locationPath,cause:n})}function jp(r,e,t,n,o){return new _e("err.net.invalidResponse",{properties:{...kg(r,e),reason:t,responsePreview:Jb(o),responseTruncated:o!==void 0&&o.length>Up},cause:n})}function kg(r,e){return{url:r.url,endpoint:r.endpoint??new URL(r.url).pathname,serverUrl:r.serverUrl,operation:r.operation,request:r.request,httpStatus:e.status,contentType:e.headers.get("content-type")??void 0}}function Jb(r){if(r===void 0)return;let e=r.trim();if(e.length!==0)return e.length>Up?`${e.slice(0,Up)}...`:e}function Yb(r){return typeof r.errorCode=="string"||typeof r.className=="string"||Array.isArray(r.stack)}async function xo(r,e){try{let t=await fetch(r,{...e,headers:Xb(e?.headers)});return t.status>=500&&await Ui(t,r),t}catch(t){throw t instanceof zt||t instanceof dt?t:new dt(r,t instanceof Error?t:void 0)}}async function gs(r){let e=`${r}/api/dev-tool/v2/server/ping`,t=await xo(e);return fs(t,{url:e,endpoint:"/server/ping",serverUrl:r})}async function Ui(r,e){let t;try{t=await r.text()}catch(n){throw new dt(e,n instanceof Error?n:void 0)}throw new zt(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e}`),r.headers.get("content-type")??void 0)}function Bp(r){if(!r)return{};if(r instanceof Headers){let e={};return r.forEach((t,n)=>{e[n]=t}),e}return Array.isArray(r)?Object.fromEntries(r):{...r}}function Xb(r){let e=Bp(r);return Wi(e,"User-Agent",dg),Wi(e,ug,mg),Wi(e,"X-Succ-Client-Type","nodejs"),Wi(e,"Accept","application/json"),Wi(e,"Accept-Encoding","gzip"),e}function Wi(r,e,t){Object.keys(r).some(o=>ln(o,e))||(r[e]=t)}async function Eg(r,e){let t=await ys(r,e);return Vp(r,t)}async function ys(r,e){let t=Se(r),n=new Date().toISOString();return e.type==="pat"?Pg(t,{authType:"pat",credentialType:"pat",token:e.token,verifiedAt:n}):Pg(t,{authType:"oauth",credentialType:"oauth",token:e.accessToken,refreshToken:e.refreshToken,expiresAt:e.expiresAt,scope:e.scope,verifiedAt:n})}async function Vp(r,e){U(Qe(r,e.serverUrl),`verified credential belongs to another server: ${e.serverUrl}`);let t=Se(r),n=new Date().toISOString(),o=A({authType:e.authType,username:e.username,userId:e.userId,lastLoginAt:e.verifiedAt??n,updatedAt:n}),i=A({authType:e.authType,token:e.authType==="pat"?e.token:void 0,accessToken:e.authType==="oauth"?e.token:void 0,refreshToken:e.refreshToken,lastSeenAt:e.verifiedAt??n,updatedAt:n}),a=await Qf({auth:{servers:{[t]:o}},session:{servers:{[t]:i}}}),s=a.auth.servers[t],c=$p(a.session.servers[t]);return{serverUrl:t,credentialType:e.credentialType,authType:e.authType,stored:!0,username:s?.username,userId:s?.userId,methods:c?["token"]:[],updatedAt:c?.updatedAt??s?.updatedAt}}async function Cs(r){let e=Se(r),{auth:t,session:n}=await _p(e),o=$p(n),i=Fg(o);if(i)return{serverUrl:e,username:t?.username,userId:t?.userId,authType:i.authType,methods:["token"],bearerToken:i,lastLoginAt:t?.lastLoginAt,updatedAt:o?.updatedAt??t?.updatedAt}}async function bg(r){let e=Se(r),{auth:t,session:n}=await _p(e),o=$p(n);return o?eT(e,t,o):void 0}async function qp(r){if(!r){let{result:n}=await Li(o=>({patch:{auth:{servers:null},session:{servers:null}},result:new Set([...Object.keys(o.auth.servers),...Object.keys(o.session.servers)]).size}));return{all:!0,removed:n}}let e=Se(r),{result:t}=await Li(n=>({patch:{auth:{servers:{[e]:null}},session:{servers:{[e]:null}}},result:n.auth.servers[e]||n.session.servers[e]?1:0}));return{all:!1,serverUrl:e,removed:t}}async function Tg(r){let e=Se(r);await Li(()=>({patch:{session:{servers:{[e]:null}}},result:void 0}))}var xg="/api/me/whoami";function $p(r){if(!V(r))return;let e=wg(r.token),t=wg(r.accessToken),n=Et(r.refreshToken),o=A({authType:Qb(r.authType),token:e,accessToken:t,refreshToken:n,lastSeenAt:Et(r.lastSeenAt),updatedAt:Et(r.updatedAt)});return e||t?o:void 0}function wg(r){if(!V(r)||r.type!=="Bearer")return;let e=Et(r.value),t=Et(r.expiresAt);if(!e||Zb(t))return;let n=Array.isArray(r.scope)?r.scope.filter(o=>typeof o=="string"&&o.length>0):void 0;return A({type:"Bearer",value:e,expiresAt:t,scope:n&&n.length>0?n:void 0,updatedAt:Et(r.updatedAt)})}function Qb(r){return r==="oauth"||r==="pat"?r:void 0}function Zb(r){if(!r)return!1;let e=Date.parse(r);return Number.isFinite(e)&&e<=Date.now()}function eT(r,e,t){let n=Fg(t);return{serverUrl:r,username:e?.username,userId:e?.userId,authType:n?.authType,methods:n?["token"]:[],expiresAt:n?.expiresAt,lastLoginAt:e?.lastLoginAt,updatedAt:t?.updatedAt??e?.updatedAt}}function Fg(r){let e=r?.token??r?.accessToken;if(!e)return;let t=r?.authType==="oauth"||r?.accessToken?"oauth":"pat";return A({type:"token",authType:t,token:e.value,expiresAt:e.expiresAt,scope:e.scope,updatedAt:e.updatedAt??r?.updatedAt})}async function Pg(r,e){let t=Et(e.token);if(!t)throw new ut({serverUrl:r});let n=await tT(r,t);return{serverUrl:r,credentialType:e.credentialType,authType:e.authType,username:n.username,userId:n.userId,methods:["token"],token:A({type:"Bearer",value:t,expiresAt:Et(e.expiresAt),scope:e.scope?.filter(o=>typeof o=="string"&&o.length>0),updatedAt:e.verifiedAt}),refreshToken:Et(e.refreshToken),verifiedAt:e.verifiedAt}}async function tT(r,e){let t=`${r}${xg}`,n=await xo(t,{headers:{Authorization:`Bearer ${e}`}});if(n.status===401)throw new ut({serverUrl:r});n.ok||await Ui(n,t);let o;try{o=await n.json()}catch(s){throw Rg(r,t,"response body is not valid JSON",s)}if(!V(o))throw Rg(r,t,"response body is not an object");let i=Et(o.userName)??Et(o.username),a=Et(o.userId)??Et(o.id);if(o.anonymous===!0||!i&&!a)throw new ut({serverUrl:r});return{username:i,userId:a}}function Rg(r,e,t,n){return new _e("err.net.invalidResponse",{properties:{url:e,endpoint:xg,serverUrl:r,reason:t},cause:n})}var Hg=b(require("fs")),zg=b(require("os")),Jp=b(require("path"));var Ug=b(require("fs")),Qn=b(require("path")),ji=require("stream");Ce();pn();$();G();var fT=T("common.promise"),Hp=new WeakMap,Mo=new WeakMap;function Kp(r,e){return zp(r)?.get(e)}function Ur(r,e,t){let n=zp(r);n||(n=new Map,Hp.set(r,n));let o=n.get(e);if(o)return o;let i=(async()=>t())().finally(()=>{let a=zp(r);!a||a.get(e)!==i||(a.delete(e),a.size===0&&Hp.delete(r))});return n.set(e,i),i}function Do(r,e,t,n,o={}){let i=Mo.get(r);i||(i=new Map,Mo.set(r,i));let a=Date.now(),s=i.get(e);s&&gT(s.timer)&&i.delete(e);let c=i.get(e),l=c?.firstScheduledAt??a;c&&clearTimeout(c.timer);let p=Math.max(0,t);if(o.maxWaitMs!==void 0){let g=Math.max(0,l+o.maxWaitMs-a);p=Math.min(p,g)}let m=setTimeout(()=>{let g=Mo.get(r);g?.get(e)?.timer===m&&(g.delete(e),g.size===0&&Mo.delete(r)),Promise.resolve().then(n).catch(d=>fT.warn(`debounced task failed: ${e}`,d))},p);return i.set(e,{timer:m,firstScheduledAt:l}),m}function Io(r,e){let t=Mo.get(r),n=t?.get(e)?.timer;return!t||!n?!1:(clearTimeout(n),t.delete(e),t.size===0&&Mo.delete(r),!0)}function zp(r){return Hp.get(r)}function gT(r){return!r||typeof r!="object"?!1:r._destroyed===!0}ne();D();J();var Ut="/api/dev-tool/v2",yT={viewFile:`${Ut}/file/view`};function Ao(r,e){let t=new URLSearchParams;return t.set("path",e.path),e[":edit"]!==void 0&&t.set(":edit",e[":edit"]),`${r}${yT.viewFile}?${t.toString()}`}var un=class{constructor(e,t={}){this.serverUrl=e;this.workspaceRoot=t.workspaceRoot,this.authPolicy=t.authPolicy??"auto",t.initialCredential&&(this.applyCredential(t.initialCredential),this.storedCredentialState="missing"),this.requestRunner=new ze}requestRunner;workspaceRoot;authPolicy;storedCredentialState="not-loaded";bearerToken;get connected(){return this.bearerToken!==void 0}get currentAuthorizationHeader(){return this.bearerToken?`Bearer ${this.bearerToken.token}`:""}getDiagnostics(e){return null}async verify(){return this.getServerInfo()}async getServerInfo(){return this.get("/server/info")}async getProjects(){return this.get("/project/list")}async createProject(e){return this.post("/project/create",e)}async listFiles(e){return(await this.get(`/file/list?path=${encodeURIComponent(e)}`)).map(n=>this.normalizeMetaFileInfo(n))}async countFiles(e){return this.get(`/file/count?path=${encodeURIComponent(e)}`)}async getFileDescendant(e){let t=[];return await this.collectFileDescendants(e,t),t}async getFile(e){return this.normalizeMetaFileInfo(await this.get(`/file/get-info?path=${encodeURIComponent(e)}`))}async getFileInfos(e){return(await this.post("/file/get-infos",{paths:e})).map(n=>this.normalizeMetaFileInfo(n))}async getFileHistory(e,t={}){return this.get(this.createEndpoint("/file/get-history",{path:e,limit:t.limit}))}isNotFoundError(e){return Oh(e)}async getFileContent(e,t){let n=await this.doGetFileContentStream(e,t),o=[];for await(let i of n.stream)o.push(Buffer.isBuffer(i)?i:Buffer.from(i));return{buffer:Buffer.concat(o),revision:n.revision,modifyTime:n.modifyTime}}async getFileContentStream(e,t){return this.doGetFileContentStream(e,t)}async doGetFileContentStream(e,t){let n=`${this.serverUrl}${Ut}/file/get-content?path=${encodeURIComponent(e)}`;t?.revision!==void 0&&(n+=`&revision=${t.revision}`),t?.upgradeContent!==void 0&&(n+=`&upgradeContent=${t.upgradeContent}`);let o=await this.requestStream(n);return{stream:o.stream,revision:Number(o.response.headers.get("X-Meta-Revision")??"0"),modifyTime:Number(o.response.headers.get("X-Meta-ModifyTime")??"0")}}async upgradeFileContent(e){return this.post("/file/upgrade-content",e)}async saveFile(e,t,n){let o={action:n?.expectedRevision===null?"create":"modify",path:e,isFolder:!1},i=`${this.serverUrl}${Ut}/file/save?path=${encodeURIComponent(e)}`;n?.desc!==void 0&&(i+=`&desc=${encodeURIComponent(n.desc)}`),n?.expectedRevision!==void 0&&(i+=`&expectedRevision=${n.expectedRevision===null?"":n.expectedRevision}`);let a=await this.requestJson(i,{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:this.toRequestBody(t),duplex:t instanceof ji.Readable?"half":void 0});return this.toFileMutationResponse(a,o)}async createFile(e){return this.postFileMutation("/file/create",e)}async modifyFile(e){return this.postFileMutation("/file/save",e)}async moveFile(e){return this.postFileMutation("/file/move",e)}async deleteFile(e,t){let n={path:e},o={action:"delete",path:e};t?.expectedRevision!==void 0&&(n.expectedRevision=t.expectedRevision),t?.expectedModifyTime!==void 0&&(n.expectedModifyTime=t.expectedModifyTime);let i=await this.post("/file/delete",n);return this.toFileMutationResponse(i,o)}buildViewFileRedirectUrl(e){return Ao(this.serverUrl,e)}async getExtensionTemplates(){return this.get("/extension/list-templates")}async downloadExtensionTemplate(e,t){let n=encodeURIComponent(e),o=encodeURIComponent(`${t}.zip`),i=`${this.serverUrl}${Ut}/extension/get-template?extensionPoint=${n}&zipFile=${o}`,a=await this.requestStream(i),s=[];for await(let c of a.stream)s.push(Buffer.isBuffer(c)?c:Buffer.from(c));return Buffer.concat(s)}async getDataSources(){return this.get("/db/list-datasources")}async getSettings(e={}){return this.post("/settings/get",e)}async setSettings(e){return this.post("/settings/set",e)}async probeDataSource(e,t){return this.post("/db/probe-datasource",{dataSource:e})}async getDataSourceConfig(e,t={}){return this.get(this.createEndpoint("/db/get-datasource-config",{dataSource:e}))}async testDataSource(e){let{projectName:t,originalDataSource:n,...o}=e,a={result:await this.post("/db/test-datasource",o)};return e.config.name!==void 0&&(a.dataSource=e.config.name),a}async createDataSource(e){let{projectName:t,...n}=e;return this.post("/db/create-datasource",n)}async updateDataSource(e){let{projectName:t,...n}=e;return this.post("/db/update-datasource",n)}async deleteDataSource(e){let{projectName:t,...n}=e;return this.post("/db/delete-datasource",n)}async listDbSchemas(e,t={}){return this.get(this.createEndpoint("/db/list-schemas",{dataSource:e,catalog:t.catalog}))}async listDbTables(e,t={}){return this.get(this.createEndpoint("/db/list-tables",{dataSource:e,schema:t.schema,tableNameContains:t.tableNameContains}))}async describeDbTable(e,t,n={}){let o={dataSource:e,tableName:t,schema:n.schema},i=this.createEndpoint("/db/describe-table",o),a=await this.get(i);if(!V(a))throw this.createInvalidEndpointResponseError("/db/describe-table","missing table metadata",{dataSource:e,tableName:t,schema:n.schema});let s=n.includeDDL?(await this.queryDbDdl(e,t,n)).ddl:void 0,c={dataSource:e,table:a};return s!==void 0&&(c.ddl=s),c}async executeDbQuery(e){return this.post("/db/exec-query-sql",this.resolveDbSqlExecRequest(e))}async queryDbDdl(e,t,n={}){let o=await this.post("/db/query-ddl",{dataSource:e,tableName:t,...n.schema!==void 0?{schema:n.schema}:{}});return{dataSource:e,tableName:t,ddl:o}}async exportDbQueryData(e){let t=this.resolveDbSqlExecRequest(e);return this.requestBuffer(`${this.serverUrl}${Ut}/db/export-query-data`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async exportDbTableData(e){let t=this.resolveDbTableRequest(e);return this.requestBuffer(`${this.serverUrl}${Ut}/db/export-table-data`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async executeDbAny(e){return this.post("/db/exec-any-sql",this.resolveDbSqlExecRequest(e))}async importDbTableData(e){return this.post("/db/import-table-data",this.resolveDbTableRequest(e))}async executeScript(e){return this.post("/script/execute-temp",e)}async checkScript(e){return{diagnostics:await this.post("/script/check",e)}}async refreshCache(){await this.post("/server/refresh-cache",{})}async getTypeScriptSupportApiLibs(){return this.get("/support/typescript-libs")}async getJsonSchemaSupport(){return this.get("/support/json-schema-manifest")}async downloadJsonSchema(e){let t="dist/json-schemas/",o=dn(e.startsWith(t)?e.slice(t.length):e,"JSON Schema source").split("/").map(i=>encodeURIComponent(i)).join("/");return this.requestText(`${this.serverUrl}${Ut}/support/json-schema?schemaFile=${o}`)}async getFrontendFrameworksManifest(){return this.get("/support/frontend-frameworks")}async get(e){return this.requestJson(`${this.serverUrl}${Ut}${e}`)}async post(e,t,n){return this.requestJson(`${this.serverUrl}${Ut}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)},n)}createEndpoint(e,t){let n=new URLSearchParams;for(let[i,a]of Object.entries(t))a!=null&&n.set(i,String(a));let o=n.toString();return o?`${e}?${o}`:e}resolveDbSqlExecRequest(e){let{projectName:t,...n}=e;return n}resolveDbTableRequest(e){let{projectName:t,...n}=e;return n}async postFileMutation(e,t){let n=e==="/file/move"?this.toMoveFileMutationMetadata(t):this.toFileMutationMetadata(t),o=this.toFileMutationContext(e,t),i=t.contentChanged?await this.postMultipartFileMutation(e,t,n):await this.post(e,n);return this.toFileMutationResponse(i,o)}async postMultipartFileMutation(e,t,n){U(t.localContentPath,`localContentPath is required when contentChanged is true: ${t.path}`);let o=this.createMultipartBoundary(),i=ji.Readable.from(this.createFileMutationMultipartBody(o,t.localContentPath,n));return this.requestJson(`${this.serverUrl}${Ut}${e}`,{method:"POST",headers:{"Content-Type":`multipart/form-data; boundary=${o}`},body:i,duplex:"half"})}async*createFileMutationMultipartBody(e,t,n){let o=JSON.stringify(n);yield Buffer.from(`--${e}\r
|
|
41
|
+
`}function fa(r,e){return`\r
|
|
42
|
+
`.indexOf(r.charAt(e))!==-1}var ga;(function(r){r.DEFAULT={allowTrailingComma:!1}})(ga||(ga={}));function Ty(r,e=[],t=ga.DEFAULT){let n=null,o=[],i=[];function a(c){Array.isArray(o)?o.push(c):n!==null&&(o[n]=c)}return jd(r,{onObjectBegin:()=>{let c={};a(c),i.push(o),o=c,n=null},onObjectProperty:c=>{n=c},onObjectEnd:()=>{o=i.pop()},onArrayBegin:()=>{let c=[];a(c),i.push(o),o=c,n=null},onArrayEnd:()=>{o=i.pop()},onLiteralValue:a,onError:(c,l,p)=>{e.push({error:c,offset:l,length:p})}},t),o[0]}function Ud(r,e=[],t=ga.DEFAULT){let n={type:"array",offset:-1,length:-1,children:[],parent:void 0};function o(c){n.type==="property"&&(n.length=c-n.offset,n=n.parent)}function i(c){return n.children.push(c),c}jd(r,{onObjectBegin:c=>{n=i({type:"object",offset:c,length:-1,parent:n,children:[]})},onObjectProperty:(c,l,p)=>{n=i({type:"property",offset:l,length:-1,parent:n,children:[]}),n.children.push({type:"string",value:c,offset:l,length:p,parent:n})},onObjectEnd:(c,l)=>{o(c+l),n.length=c+l-n.offset,n=n.parent,o(c+l)},onArrayBegin:(c,l)=>{n=i({type:"array",offset:c,length:-1,parent:n,children:[]})},onArrayEnd:(c,l)=>{n.length=c+l-n.offset,n=n.parent,o(c+l)},onLiteralValue:(c,l,p)=>{i({type:JM(c),offset:l,length:p,parent:n,value:c}),o(l+p)},onSeparator:(c,l,p)=>{n.type==="property"&&(c===":"?n.colonOffset=l:c===","&&o(l))},onError:(c,l,p)=>{e.push({error:c,offset:l,length:p})}},t);let s=n.children[0];return s&&delete s.parent,s}function rc(r,e){if(!r)return;let t=r;for(let n of e)if(typeof n=="string"){if(t.type!=="object"||!Array.isArray(t.children))return;let o=!1;for(let i of t.children)if(Array.isArray(i.children)&&i.children[0].value===n&&i.children.length===2){t=i.children[1],o=!0;break}if(!o)return}else{let o=n;if(t.type!=="array"||o<0||!Array.isArray(t.children)||o>=t.children.length)return;t=t.children[o]}return t}function jd(r,e,t=ga.DEFAULT){let n=ha(r,!1),o=[],i=0;function a(V){return V?()=>i===0&&V(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function s(V){return V?G=>i===0&&V(G,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function c(V){return V?G=>i===0&&V(G,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice()):()=>!0}function l(V){return V?()=>{i>0?i++:V(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice())===!1&&(i=1)}:()=>!0}function p(V){return V?()=>{i>0&&i--,i===0&&V(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter())}:()=>!0}let u=l(e.onObjectBegin),g=c(e.onObjectProperty),m=p(e.onObjectEnd),f=l(e.onArrayBegin),y=p(e.onArrayEnd),C=c(e.onLiteralValue),v=s(e.onSeparator),w=a(e.onComment),h=s(e.onError),S=t&&t.disallowComments,k=t&&t.allowTrailingComma;function b(){for(;;){let V=n.scan();switch(n.getTokenError()){case 4:P(14);break;case 5:P(15);break;case 3:P(13);break;case 1:S||P(11);break;case 2:P(12);break;case 6:P(16);break}switch(V){case 12:case 13:S?P(10):w();break;case 16:P(1);break;case 15:case 14:break;default:return V}}}function P(V,G=[],te=[]){if(h(V),G.length+te.length>0){let oe=n.getToken();for(;oe!==17;){if(G.indexOf(oe)!==-1){b();break}else if(te.indexOf(oe)!==-1)break;oe=b()}}}function J(V){let G=n.getTokenValue();return V?C(G):(g(G),o.push(G)),b(),!0}function M(){switch(n.getToken()){case 11:let V=n.getTokenValue(),G=Number(V);isNaN(G)&&(P(2),G=0),C(G);break;case 7:C(null);break;case 8:C(!0);break;case 9:C(!1);break;default:return!1}return b(),!0}function H(){return n.getToken()!==10?(P(3,[],[2,5]),!1):(J(!1),n.getToken()===6?(v(":"),b(),U()||P(4,[],[2,5])):P(5,[],[2,5]),o.pop(),!0)}function L(){u(),b();let V=!1;for(;n.getToken()!==2&&n.getToken()!==17;){if(n.getToken()===5){if(V||P(4,[],[]),v(","),b(),n.getToken()===2&&k)break}else V&&P(6,[],[]);H()||P(4,[],[2,5]),V=!0}return m(),n.getToken()!==2?P(7,[2],[]):b(),!0}function Z(){f(),b();let V=!0,G=!1;for(;n.getToken()!==4&&n.getToken()!==17;){if(n.getToken()===5){if(G||P(4,[],[]),v(","),b(),n.getToken()===4&&k)break}else G&&P(6,[],[]);V?(o.push(0),V=!1):o[o.length-1]++,U()||P(4,[],[4,5]),G=!0}return y(),V||o.pop(),n.getToken()!==4?P(8,[4],[]):b(),!0}function U(){switch(n.getToken()){case 3:return Z();case 1:return L();case 10:return J(!0);default:return M()}}return b(),n.getToken()===17?t.allowEmptyContent?!0:(P(4,[],[]),!1):U()?(n.getToken()!==17&&P(9,[],[]),!0):(P(4,[],[]),!1)}function JM(r){switch(typeof r){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":{if(r){if(Array.isArray(r))return"array"}else return"null";return"object"}default:return"null"}}function My(r,e,t,n){let o=e.slice(),a=Ud(r,[]),s,c;for(;o.length>0&&(c=o.pop(),s=rc(a,o),s===void 0&&t!==void 0);)typeof c=="string"?t={[c]:t}:t=[t];if(s)if(s.type==="object"&&typeof c=="string"&&Array.isArray(s.children)){let l=rc(s,[c]);if(l!==void 0)if(t===void 0){if(!l.parent)throw new Error("Malformed AST");let p=s.children.indexOf(l.parent),u,g=l.parent.offset+l.parent.length;if(p>0){let m=s.children[p-1];u=m.offset+m.length}else u=s.offset+1,s.children.length>1&&(g=s.children[1].offset);return ho(r,{offset:u,length:g-u,content:""},n)}else return ho(r,{offset:l.offset,length:l.length,content:JSON.stringify(t)},n);else{if(t===void 0)return[];let p=`${JSON.stringify(c)}: ${JSON.stringify(t)}`,u=n.getInsertionIndex?n.getInsertionIndex(s.children.map(m=>m.children[0].value)):s.children.length,g;if(u>0){let m=s.children[u-1];g={offset:m.offset+m.length,length:0,content:","+p}}else s.children.length===0?g={offset:s.offset+1,length:0,content:p}:g={offset:s.offset+1,length:0,content:p+","};return ho(r,g,n)}}else if(s.type==="array"&&typeof c=="number"&&Array.isArray(s.children)){let l=c;if(l===-1){let p=`${JSON.stringify(t)}`,u;if(s.children.length===0)u={offset:s.offset+1,length:0,content:p};else{let g=s.children[s.children.length-1];u={offset:g.offset+g.length,length:0,content:","+p}}return ho(r,u,n)}else if(t===void 0&&s.children.length>=0){let p=c,u=s.children[p],g;if(s.children.length===1)g={offset:s.offset+1,length:s.length-2,content:""};else if(s.children.length-1===p){let m=s.children[p-1],f=m.offset+m.length,y=s.offset+s.length;g={offset:f,length:y-2-f,content:""}}else g={offset:u.offset,length:s.children[p+1].offset-u.offset,content:""};return ho(r,g,n)}else if(t!==void 0){let p,u=`${JSON.stringify(t)}`;if(!n.isArrayInsertion&&s.children.length>c){let g=s.children[c];p={offset:g.offset,length:g.length,content:u}}else if(s.children.length===0||c===0)p={offset:s.offset+1,length:0,content:s.children.length===0?u:u+","};else{let g=c>s.children.length?s.children.length:c,m=s.children[g-1];p={offset:m.offset+m.length,length:0,content:","+u}}return ho(r,p,n)}else throw new Error(`Can not ${t===void 0?"remove":n.isArrayInsertion?"insert":"modify"} Array index ${l} as length is not sufficient`)}else throw new Error(`Can not add ${typeof c!="number"?"index":"property"} to parent of type ${s.type}`);else{if(t===void 0)throw new Error("Can not delete in empty document");return ho(r,{offset:a?a.offset:0,length:a?a.length:0,content:JSON.stringify(t)},n)}}function ho(r,e,t){if(!t.formattingOptions)return[e];let n=nc(r,e),o=e.offset,i=e.offset+e.content.length;if(e.length===0||e.content.length===0){for(;o>0&&!fa(n,o-1);)o--;for(;i<n.length&&!fa(n,i);)i++}let a=Wd(n,{offset:o,length:i-o},{...t.formattingOptions,keepLines:!1});for(let c=a.length-1;c>=0;c--){let l=a[c];n=nc(n,l),o=Math.min(o,l.offset),i=Math.max(i,l.offset+l.length),i+=l.content.length-l.length}let s=r.length-(n.length-i)-o;return[{offset:o,length:s,content:n.substring(o,i)}]}function nc(r,e){return r.substring(0,e.offset)+e.content+r.substring(e.offset+e.length)}var xy;(function(r){r[r.None=0]="None",r[r.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",r[r.UnexpectedEndOfString=2]="UnexpectedEndOfString",r[r.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",r[r.InvalidUnicode=4]="InvalidUnicode",r[r.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",r[r.InvalidCharacter=6]="InvalidCharacter"})(xy||(xy={}));var Fy;(function(r){r[r.OpenBraceToken=1]="OpenBraceToken",r[r.CloseBraceToken=2]="CloseBraceToken",r[r.OpenBracketToken=3]="OpenBracketToken",r[r.CloseBracketToken=4]="CloseBracketToken",r[r.CommaToken=5]="CommaToken",r[r.ColonToken=6]="ColonToken",r[r.NullKeyword=7]="NullKeyword",r[r.TrueKeyword=8]="TrueKeyword",r[r.FalseKeyword=9]="FalseKeyword",r[r.StringLiteral=10]="StringLiteral",r[r.NumericLiteral=11]="NumericLiteral",r[r.LineCommentTrivia=12]="LineCommentTrivia",r[r.BlockCommentTrivia=13]="BlockCommentTrivia",r[r.LineBreakTrivia=14]="LineBreakTrivia",r[r.Trivia=15]="Trivia",r[r.Unknown=16]="Unknown",r[r.EOF=17]="EOF"})(Fy||(Fy={}));var Dy=Ty;var Iy;(function(r){r[r.InvalidSymbol=1]="InvalidSymbol",r[r.InvalidNumberFormat=2]="InvalidNumberFormat",r[r.PropertyNameExpected=3]="PropertyNameExpected",r[r.ValueExpected=4]="ValueExpected",r[r.ColonExpected=5]="ColonExpected",r[r.CommaExpected=6]="CommaExpected",r[r.CloseBraceExpected=7]="CloseBraceExpected",r[r.CloseBracketExpected=8]="CloseBracketExpected",r[r.EndOfFileExpected=9]="EndOfFileExpected",r[r.InvalidCommentToken=10]="InvalidCommentToken",r[r.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",r[r.UnexpectedEndOfString=12]="UnexpectedEndOfString",r[r.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",r[r.InvalidUnicode=14]="InvalidUnicode",r[r.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",r[r.InvalidCharacter=16]="InvalidCharacter"})(Iy||(Iy={}));function Ay(r){switch(r){case 1:return"InvalidSymbol";case 2:return"InvalidNumberFormat";case 3:return"PropertyNameExpected";case 4:return"ValueExpected";case 5:return"ColonExpected";case 6:return"CommaExpected";case 7:return"CloseBraceExpected";case 8:return"CloseBracketExpected";case 9:return"EndOfFileExpected";case 10:return"InvalidCommentToken";case 11:return"UnexpectedEndOfComment";case 12:return"UnexpectedEndOfString";case 13:return"UnexpectedEndOfNumber";case 14:return"InvalidUnicode";case 15:return"InvalidEscapeCharacter";case 16:return"InvalidCharacter"}return"<unknown ParseErrorCode>"}function Oy(r,e,t,n){return My(r,e,t,n)}function _y(r,e){let t=e.slice(0).sort((o,i)=>{let a=o.offset-i.offset;return a===0?o.length-i.length:a}),n=r.length;for(let o=t.length-1;o>=0;o--){let i=t[o];if(i.offset+i.length<=n)r=nc(r,i);else throw new Error("Overlapping edit");n=i.offset}return r}Et();Y();re();var QM=T("common.json");var vr={allowComment:!0},ZM={insertSpaces:!1,tabSize:4,eol:`
|
|
43
|
+
`,insertFinalNewline:!0};function at(r,e={}){try{if(!r.trim())return{};let t;if(e.allowComment===!0){let n=[];if(t=Dy(r,n,tx(e)),n.length>0)throw new Error(`JSON cannot be parsed safely: ${ex(e.filePath,n)}`)}else t=JSON.parse(r);if(!q(t))throw new Error(`JSON root is not an object: ${e.filePath??"<inline>"}`);return t}catch(t){if(e.ignoreParseError===!0)return QM.warn(`ignore JSON object because it cannot be parsed safely: ${e.filePath??"<inline>"}`,t instanceof Error?t.message:String(t)),e.defaultValue;throw t}}async function Ny(r,e={}){let{attempts:t=3,delayMs:n=50,ignoreParseError:o=!0,...i}=e,a=Math.max(1,Math.floor(t)),s="",c;for(let l=0;l<a;l++){let p=await Ly.promises.readFile(r,"utf8");s=p;try{return at(p,{...i,filePath:r})}catch(u){c=u}l<a-1&&await new Promise(u=>setTimeout(u,n))}if(o)return at(s,{...i,filePath:r,ignoreParseError:!0});throw c}async function fo(r,e={}){let{defaultValue:t,ignoreParseError:n=!0,...o}=e,i=await ke(r);return i.trim()?at(i,{...o,filePath:r,defaultValue:t,ignoreParseError:n}):t??{}}function ex(r,e){let t=r??"<inline>",n=e.map(o=>`${Ay(o.error)}@${o.offset}`).join(", ");return`${t} (${n})`}function Yr(r){return r.trim()?r:`{}
|
|
44
|
+
`}function Kt(r,e,t){let n=Yr(r);return _y(n,Oy(n,e,t,{formattingOptions:ZM}))}function tx(r){let e=r.allowComment===!0;return{allowEmptyContent:!0,allowTrailingComma:e,disallowComments:!e}}Y();re();async function Vy(){let r=Gy();return ux(await fo(r,{defaultValue:{},ignoreParseError:!1}))}async function qy(){let r=Jy();return mx(await fo(r,{defaultValue:{},ignoreParseError:!0}))}async function $y(r){let[e,t]=await Promise.all([Vy(),qy()]);if(r===void 0)return{auth:e,session:t};let n=ye(r);return{serverUrl:n,auth:e.servers[n],session:t.servers[n]}}async function qd(r){return(await oc(()=>({patch:r,result:void 0}))).state}async function oc(r){return Ry(gx(),async()=>{let[e,t]=await Promise.all([Vy(),qy()]),n=r({auth:e,session:t}),o=n.patch,i=o.auth===void 0?e:lx(e,o.auth),a=o.session===void 0?t:dx(t,o.session);return await Promise.all([o.auth===void 0?void 0:jy(Gy(),i),o.session===void 0?void 0:jy(Jy(),a)]),{state:{auth:i,session:a},result:n.result}})}var Bd=1,Vd=1,rx=".succapp",nx="auth.json",ox="session.json",ix="auth-state.lock",ax="SUCCAPP_AUTH_SETTINGS_FILE",sx="SUCCAPP_AUTH_SETTINGS_DIR",cx=T("api.auth-settings");function lx(r,e){if(e.servers===void 0)return r;if(e.servers===null)return{version:Bd,servers:{}};let t={...r.servers};for(let[n,o]of Object.entries(e.servers)){let i=ye(n);if(o==null){delete t[i];continue}let a=px(t[i]??{},o);Object.keys(a).length===0?delete t[i]:t[i]=a}return{version:Bd,servers:t}}var Wy=["authType","username","userId","lastLoginAt","updatedAt"];function px(r,e){let t={};for(let n of Wy){let o=r[n];o!==void 0&&(t[n]=o)}for(let n of Wy){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let o=e[n];o==null?delete t[n]:t[n]=o}return t}function dx(r,e){if(e.servers===void 0)return r;if(e.servers===null)return{version:Vd,servers:{}};let t={...r.servers};for(let[n,o]of Object.entries(e.servers)){let i=ye(n),a=o==null?void 0:zy(o);a===void 0?delete t[i]:t[i]=a}return{version:Vd,servers:t}}function ux(r){return{version:Bd,servers:Hy(r,"auth settings",!0,hx)}}function Hy(r,e,t,n){let o={},a=(q(r)?r:{}).servers;if(a===void 0)return o;if(!q(a)){if(t)throw new Error(`${e} servers must be an object`);return o}for(let[s,c]of Object.entries(a)){let l=fx(s,e,t);if(!l)continue;if(!q(c)){if(!t)continue;throw new Error(`${e} server entry must be an object: ${s}`)}let p=n(c);p!==void 0&&(o[l]=p)}return o}function mx(r){return{version:Vd,servers:Hy(r,"session settings",!1,zy)}}function hx(r){if(!q(r))return;let e=O({authType:Ky(r.authType),username:Ar(r.username),userId:Ar(r.userId),lastLoginAt:Ar(r.lastLoginAt),updatedAt:Ar(r.updatedAt)});return Object.keys(e).length===0?void 0:e}function zy(r){if(!q(r))return;let e=Uy(r.token),t=Uy(r.accessToken),n=Ar(r.refreshToken),o=Ky(r.authType);!o&&(t||n)&&(o="oauth"),!o&&e&&(o="pat");let i=O({authType:o,token:e??t,refreshToken:n,lastSeenAt:Ar(r.lastSeenAt),updatedAt:Ar(r.updatedAt)});return Object.keys(i).length===0?void 0:i}function Uy(r){if(!q(r)||r.type!=="Bearer")return;let e=Ar(r.value);if(e)return O({type:"Bearer",value:e,expiresAt:Ar(r.expiresAt),scope:to(r.scope),updatedAt:Ar(r.updatedAt)})}function Ky(r){return r==="oauth"||r==="pat"?r:void 0}function Ar(r){return typeof r=="string"?r:void 0}function fx(r,e,t){try{return ye(r)}catch(n){if(t)throw new Error(`invalid ${e} server key: ${r}`,{cause:n instanceof Error?n:void 0});cx.warn(`ignored invalid ${e} server key: ${r}`,n);return}}async function jy(r,e){await sr(r,`${JSON.stringify(e,void 0," ")}
|
|
45
|
+
`)}function $d(){let r=Yy();if(r)return Xr.dirname(r);let e=yx();return e||Xr.join(By.homedir(),rx)}function Gy(){let r=Yy();return r||Xr.join($d(),nx)}function Jy(){return Xr.join($d(),ox)}function gx(){return Xr.join($d(),ix)}function Yy(){return Xy(ax)}function yx(){return Xy(sx)}function Xy(r){let e=process.env[r]?.trim();return e?Xr.resolve(e):void 0}async function Hd(r,e){let t=await ic(r,e);return zd(r,t)}async function ic(r,e){let t=ye(r),n=new Date().toISOString();return e.type==="pat"?Qy(t,{authType:"pat",token:e.token,verifiedAt:n}):Qy(t,{authType:"oauth",token:e.token,refreshToken:e.refreshToken,expiresAt:e.expiresAt,scope:e.scope,verifiedAt:n})}async function zd(r,e){z($e(r,e.serverUrl),`verified credential belongs to another server: ${e.serverUrl}`);let t=ye(r),n=new Date().toISOString(),o=$t(e.token);if(!o)throw new Le({serverUrl:t});let i=O({authType:e.authType,username:e.username,userId:e.userId,lastLoginAt:e.verifiedAt??n,updatedAt:n}),a=O({authType:e.authType,token:O({type:"Bearer",value:o,expiresAt:e.expiresAt,scope:e.scope,updatedAt:e.verifiedAt??n}),refreshToken:e.refreshToken,lastSeenAt:e.verifiedAt??n,updatedAt:n}),s=await qd({auth:{servers:{[t]:i}},session:{servers:{[t]:a}}}),c=Gd(t,s.auth.servers[t],s.session.servers[t]);if(!c)throw new Le({serverUrl:t});return c}async function go(r){let e=ye(r),{auth:t,session:n}=await $y(e);return Gd(e,t,n)}async function Kd(r){if(!r){let{result:n}=await oc(o=>({patch:{auth:{servers:null},session:{servers:null}},result:new Set([...Object.keys(o.auth.servers),...Object.keys(o.session.servers)]).size}));return{all:!0,removed:n}}let e=ye(r),{result:t}=await oc(n=>({patch:{auth:{servers:{[e]:null}},session:{servers:{[e]:null}}},result:n.auth.servers[e]||n.session.servers[e]?1:0}));return{all:!1,serverUrl:e,removed:t}}async function eC(r,e){let t=ye(r),n=e??await go(t),o=n?.authType==="oauth"?$t(n.refreshToken):void 0;if(!o)throw new Le({serverUrl:t});let i=await Ig(t,{refreshToken:o}),a=new Date().toISOString(),s=O({authType:"oauth",token:O({type:"Bearer",value:i.accessToken,expiresAt:i.expiresAt,scope:i.scope,updatedAt:a}),refreshToken:i.refreshToken,lastSeenAt:a,updatedAt:a}),c=await qd({auth:{servers:{[t]:{authType:"oauth",updatedAt:a}}},session:{servers:{[t]:s}}}),l=Gd(t,c.auth.servers[t],c.session.servers[t]);if(!l)throw new Le({serverUrl:t});return l}var tC="/api/me/whoami";function Gd(r,e,t){if(!t?.authType)return;if(t.authType==="pat")return!t.token||Sd(t.token.expiresAt)?void 0:{serverUrl:r,username:e?.username,userId:e?.userId,authType:"pat",token:t.token.value,expiresAt:t.token.expiresAt,scope:t.token.scope,tokenExpired:!1,lastLoginAt:e?.lastLoginAt,updatedAt:t.updatedAt??e?.updatedAt};if(!t.refreshToken)return;let n=Sd(t.token?.expiresAt),o=t.token&&!n?t.token:void 0;return{serverUrl:r,username:e?.username,userId:e?.userId,authType:"oauth",token:o?.value,expiresAt:o?.expiresAt??t.token?.expiresAt,scope:o?.scope,refreshToken:t.refreshToken,tokenExpired:n,lastLoginAt:e?.lastLoginAt,updatedAt:t.updatedAt??e?.updatedAt}}async function Qy(r,e){let t=$t(e.token);if(!t)throw new Le({serverUrl:r});let n=await Cx(r,t);return{serverUrl:r,authType:e.authType,username:n.username,userId:n.userId,token:t,expiresAt:$t(e.expiresAt),scope:to(e.scope),refreshToken:$t(e.refreshToken),verifiedAt:e.verifiedAt}}async function Cx(r,e){let t=`${r}${tC}`,n=await wn(t,{headers:{Authorization:`Bearer ${e}`}});if(n.status===401)throw new Le({serverUrl:r});n.ok||await co(n,t);let o;try{o=await n.json()}catch(s){throw Zy(r,t,"response body is not valid JSON",s)}if(!q(o))throw Zy(r,t,"response body is not an object");let i=$t(o.userName)??$t(o.username),a=$t(o.userId)??$t(o.id);if(o.anonymous===!0||!i&&!a)throw new Le({serverUrl:r});return{username:i,userId:a}}function Zy(r,e,t,n){return new ge("err.net.invalidResponse",{properties:{url:e,endpoint:tC,serverUrl:r,reason:t},cause:n})}var vC=E(require("fs")),kC=E(require("os")),Xd=E(require("path"));var hC=E(require("fs")),Co=E(require("path")),Ca=require("stream");Ee();bn();K();re();Ho();function Ox(r){let e="";for(let t=0;t<r.length;t++){let n=r[t];n==="*"&&r[t+1]==="*"?r[t+2]==="/"?(e+="(?:.*/)?",t+=2):(e+=".*",t++):n==="*"?e+="[^/]*":n==="?"?e+="[^/]":".+^$()|{}[]\\".includes(n)?e+="\\"+n:e+=n}return new RegExp("^"+e+"$")}var lC=new Map;function Jd(r){let e=lC.get(r);return e||(e=Ox(r),lC.set(r,e)),e}function pC(r){let e=r.map(Jd);return{matches(t){if(e.length===0)return!1;let n=t.replace(/^\/+/,"");return e.some(o=>o.test(n)||o.test("/"+n))}}}function lc(r,e){if(!e||e.length===0)return!1;let t=r.replace(/^\/+/,"");return e.some(n=>Jd(n).test(t)||Jd(n).test("/"+t))}K();var dC=/^[a-z0-9]+$/,yo=class r{constructor(e){this.infos=e;this.infoByExtension=_x(e),this.patternInfos=Lx(e)}infoByExtension;patternInfos;static empty(){return new r({})}static fromServerVersions(e){let t={};for(let[n,o]of Object.entries(e??{})){let i=Nx(n,o);t[i.metaType]=i}return new r(t)}isEmpty(){return Object.keys(this.infos).length===0}getInfos(){return this.infos}getInfo(e){return this.infos[e]??this.infos[e.toLowerCase()]}getInfoByPath(e){let t=Me(le(e)),n=this.infoByExtension.get(Ns(t));return n||this.patternInfos.find(o=>o.matcher.matches(t))?.info}};function _x(r){let e=new Map;for(let t of Object.values(r))uC(t)&&e.set(t.metaType,t);return e}function Lx(r){return Object.values(r).filter(e=>e.fileMatch.length>0&&!uC(e)).map(e=>({info:e,matcher:pC(e.fileMatch),specificity:Ux(e)})).sort((e,t)=>t.specificity-e.specificity)}function uC(r){return dC.test(r.metaType)&&r.fileMatch.length===1&&r.fileMatch[0]===`**/*.${r.metaType}`}function Nx(r,e){let t=r.trim(),n=t.toLowerCase();if(dC.test(n))return{metaType:n,fileMatch:[`**/*.${n}`],contentVersion:e,upgradeSupported:!0};let o=Wx(t);return{metaType:o,fileMatch:[o],contentVersion:e,upgradeSupported:!0}}function Wx(r){return Me(le(r))}function Ux(r){return Math.max(0,...r.fileMatch.map(e=>e.replace(/[*?]/g,"").length))}F();B();Cn();var Jt="/api/dev-tool/v2",jx={viewFile:`${Jt}/file/view`},Bx=5*60*1e3;function ni(r,e){let t=new URLSearchParams;return t.set("path",e.path),e[":edit"]!==void 0&&t.set(":edit",e[":edit"]),`${r}${jx.viewFile}?${t.toString()}`}var Lr=class{constructor(e,t={}){this.serverUrl=e;this.workspaceRoot=t.workspaceRoot,t.initialCredential&&(this.authCredential=t.initialCredential),this.requestRunner=new Qe}requestRunner;workspaceRoot;authCredential;rejectedAuthCredentialSignature;get connected(){return this.authCredential?.token!==void 0}get currentAuthorizationHeader(){let e=this.authCredential?.token;return e?`Bearer ${e}`:""}getDiagnostics(e){return null}async verify(){if(this.authCredential===null?await this.doEnsureAuthCredentialLoaded():await this.ensureAuthCredentialLoaded(),await this.refreshOAuthCredentialIfNeeded(!1),!this.authCredential?.token)throw new Le({workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl})}async getServerInfo(){return this.get("/server/info")}async getServerDetailInfo(){return this.get("/server/detail-info")}async getMetadataVersions(){return yo.fromServerVersions((await this.getServerInfo()).metadataVersions)}async getProjects(){return this.get("/project/list")}async createProject(e){return this.post("/project/create",e)}async listFiles(e){return(await this.get(`/file/list?path=${encodeURIComponent(e)}`)).map(n=>this.normalizeMetaFileInfo(n))}async countFiles(e){return this.get(`/file/count?path=${encodeURIComponent(e)}`)}async getFileDescendant(e){let t=[];return await this.collectFileDescendants(e,t),t}async getFile(e){return this.normalizeMetaFileInfo(await this.get(`/file/get-info?path=${encodeURIComponent(e)}`))}async getFileInfos(e){return(await this.post("/file/get-infos",{paths:e})).map(n=>this.normalizeMetaFileInfo(n))}async getFileHistory(e,t={}){return this.get(this.createEndpoint("/file/get-history",{path:e,limit:t.limit}))}isNotFoundError(e){return Yf(e)}async getFileContent(e,t){let n=await this.doGetFileContentStream(e,t),o=[];for await(let i of n.stream)o.push(Buffer.isBuffer(i)?i:Buffer.from(i));return{buffer:Buffer.concat(o),revision:n.revision,modifyTime:n.modifyTime}}async getFileContentStream(e,t){return this.doGetFileContentStream(e,t)}async doGetFileContentStream(e,t){let n=`${this.serverUrl}${Jt}/file/get-content?path=${encodeURIComponent(e)}`;t?.revision!==void 0&&(n+=`&revision=${t.revision}`),t?.upgradeContent!==void 0&&(n+=`&upgradeContent=${t.upgradeContent}`);let o=await this.requestStream(n);return{stream:o.stream,revision:Number(o.response.headers.get("X-Meta-Revision")??"0"),modifyTime:Number(o.response.headers.get("X-Meta-ModifyTime")??"0")}}async upgradeFileContent(e){return this.post("/file/upgrade-content",e)}async saveFile(e,t,n){let o={action:n?.expectedRevision===null?"create":"modify",path:e,isFolder:!1},i=`${this.serverUrl}${Jt}/file/save?path=${encodeURIComponent(e)}`;n?.desc!==void 0&&(i+=`&desc=${encodeURIComponent(n.desc)}`),n?.expectedRevision!==void 0&&(i+=`&expectedRevision=${n.expectedRevision===null?"":n.expectedRevision}`);let a=await this.requestJson(i,{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:this.toRequestBody(t),duplex:t instanceof Ca.Readable?"half":void 0});return this.toFileMutationResponse(a,o)}async createFile(e){return this.postFileMutation("/file/create",e)}async modifyFile(e){return this.postFileMutation("/file/save",e)}async moveFile(e){return this.postFileMutation("/file/move",e)}async deleteFile(e,t){let n={path:e},o={action:"delete",path:e};t?.expectedRevision!==void 0&&(n.expectedRevision=t.expectedRevision),t?.expectedModifyTime!==void 0&&(n.expectedModifyTime=t.expectedModifyTime);let i=await this.post("/file/delete",n);return this.toFileMutationResponse(i,o)}buildViewFileRedirectUrl(e){return ni(this.serverUrl,e)}async getExtensionTemplates(){return this.get("/extension/list-templates")}async downloadExtensionTemplate(e,t){let n=encodeURIComponent(e),o=encodeURIComponent(`${t}.zip`),i=`${this.serverUrl}${Jt}/extension/get-template?extensionPoint=${n}&zipFile=${o}`,a=await this.requestStream(i),s=[];for await(let c of a.stream)s.push(Buffer.isBuffer(c)?c:Buffer.from(c));return Buffer.concat(s)}async getDataSources(){return this.get("/db/list-datasources")}async getSettings(e={}){return this.post("/settings/get",e)}async setSettings(e){return this.post("/settings/set",e)}async probeDataSource(e,t){return this.post("/db/probe-datasource",{dataSource:e})}async getDataSourceConfig(e,t={}){return this.get(this.createEndpoint("/db/get-datasource-config",{dataSource:e}))}async testDataSource(e){let{projectName:t,originalDataSource:n,...o}=e,a={result:await this.post("/db/test-datasource",o)};return e.config.name!==void 0&&(a.dataSource=e.config.name),a}async createDataSource(e){let{projectName:t,...n}=e;return this.post("/db/create-datasource",n)}async updateDataSource(e){let{projectName:t,...n}=e;return this.post("/db/update-datasource",n)}async deleteDataSource(e){let{projectName:t,...n}=e;return this.post("/db/delete-datasource",n)}async listDbSchemas(e,t={}){return this.get(this.createEndpoint("/db/list-schemas",{dataSource:e,catalog:t.catalog}))}async listDbTables(e,t={}){return this.get(this.createEndpoint("/db/list-tables",{dataSource:e,schema:t.schema,tableNameContains:t.tableNameContains}))}async describeDbTable(e,t,n={}){let o={dataSource:e,tableName:t,schema:n.schema},i=this.createEndpoint("/db/describe-table",o),a=await this.get(i);if(!q(a))throw this.createInvalidEndpointResponseError("/db/describe-table","missing table metadata",{dataSource:e,tableName:t,schema:n.schema});let s=n.includeDDL?(await this.queryDbDdl(e,t,n)).ddl:void 0,c={dataSource:e,table:a};return s!==void 0&&(c.ddl=s),c}async executeDbQuery(e){return this.post("/db/exec-query-sql",this.resolveDbSqlExecRequest(e))}async queryDbDdl(e,t,n={}){let o=await this.post("/db/query-ddl",{dataSource:e,tableName:t,...n.schema!==void 0?{schema:n.schema}:{}});return{dataSource:e,tableName:t,ddl:o}}async exportDbQueryData(e){let t=this.resolveDbSqlExecRequest(e);return this.requestBuffer(`${this.serverUrl}${Jt}/db/export-query-data`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async exportDbTableData(e){let t=this.resolveDbTableRequest(e);return this.requestBuffer(`${this.serverUrl}${Jt}/db/export-table-data`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async executeDbAny(e){return this.post("/db/exec-any-sql",this.resolveDbSqlExecRequest(e))}async importDbTableData(e){return this.post("/db/import-table-data",this.resolveDbTableRequest(e))}async executeScript(e){return this.post("/script/execute-temp",e)}async checkScript(e){return{diagnostics:await this.post("/script/check",e)}}async refreshCache(){await this.post("/server/refresh-cache",{})}async getTypeScriptSupportApiLibs(){return this.get("/support/typescript-libs")}async getJsonSchemaSupport(){return this.get("/support/json-schema-manifest")}async downloadJsonSchema(e){let t="dist/json-schemas/",o=En(e.startsWith(t)?e.slice(t.length):e,"JSON Schema source").split("/").map(i=>encodeURIComponent(i)).join("/");return this.requestText(`${this.serverUrl}${Jt}/support/json-schema?schemaFile=${o}`)}async getFrontendFrameworksManifest(){return this.get("/support/frontend-frameworks")}async get(e){return this.requestJson(`${this.serverUrl}${Jt}${e}`)}async post(e,t){return this.requestJson(`${this.serverUrl}${Jt}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}createEndpoint(e,t){let n=new URLSearchParams;for(let[i,a]of Object.entries(t))a!=null&&n.set(i,String(a));let o=n.toString();return o?`${e}?${o}`:e}resolveDbSqlExecRequest(e){let{projectName:t,...n}=e;return n}resolveDbTableRequest(e){let{projectName:t,...n}=e;return n}async postFileMutation(e,t){let n=e==="/file/move"?this.toMoveFileMutationMetadata(t):this.toFileMutationMetadata(t),o=this.toFileMutationContext(e,t),i=t.contentChanged?await this.postMultipartFileMutation(e,t,n):await this.post(e,n);return this.toFileMutationResponse(i,o)}async postMultipartFileMutation(e,t,n){z(t.localContentPath,`localContentPath is required when contentChanged is true: ${t.path}`);let o=this.createMultipartBoundary(),i=Ca.Readable.from(this.createFileMutationMultipartBody(o,t.localContentPath,n));return this.requestJson(`${this.serverUrl}${Jt}${e}`,{method:"POST",headers:{"Content-Type":`multipart/form-data; boundary=${o}`},body:i,duplex:"half"})}async*createFileMutationMultipartBody(e,t,n){let o=JSON.stringify(n);yield Buffer.from(`--${e}\r
|
|
44
46
|
Content-Disposition: form-data; name="metadata"\r
|
|
45
47
|
Content-Type: application/json; charset=utf-8\r
|
|
46
48
|
\r
|
|
@@ -49,54 +51,64 @@ Content-Type: application/json; charset=utf-8\r
|
|
|
49
51
|
Content-Disposition: form-data; name="content"; filename="content.bin"\r
|
|
50
52
|
Content-Type: application/octet-stream\r
|
|
51
53
|
\r
|
|
52
|
-
`,"utf-8");for await(let i of
|
|
54
|
+
`,"utf-8");for await(let i of hC.createReadStream(t))yield Buffer.isBuffer(i)?i:Buffer.from(i);yield Buffer.from(`\r
|
|
53
55
|
--${e}--\r
|
|
54
|
-
`,"utf-8")}toFileMutationMetadata(e){let{localContentPath:t,contentChanged:n,...o}=e;return o}toMoveFileMutationMetadata(e){let{isFolder:t,...n}=this.toFileMutationMetadata(e);return n}toFileMutationContext(e,t){return e==="/file/create"?{action:"create",path:t.path,isFolder:t.isFolder}:e==="/file/move"?{action:"move",path:t.path,targetPath:t.targetPath,isFolder:t.isFolder}:{action:"modify",path:t.path,isFolder:t.isFolder}}toFileMutationResponse(e,t){let n=e.fileInfo?this.normalizeMetaFileInfo(e.fileInfo):void 0,o=n?.path??(t.action==="move"?t.targetPath??t.path:t.path),i={path:o,success:!0,contentMutation:this.getContentMutation(e,t.action),pathMutation:this.getPathMutation(t,o)};t.action==="move"&&(i.oldPath=t.path),e.modifyTime!==void 0&&(i.modifyTime=e.modifyTime);let a=this.getMetaInfoChanged(e,t);return a!==void 0&&(i.metaInfoChanged=a),n!==void 0&&(i.metaInfo=n),i}getContentMutation(e,t){return t==="delete"?"deleted":e.created===!0?"created":e.contentChanged===!0?"modified":"none"}getPathMutation(e,t){if(e.action!=="move"||e.path===t)return"none";let n=Qn.posix.dirname(e.path)!==Qn.posix.dirname(t),o=Qn.posix.basename(e.path)!==Qn.posix.basename(t);return n&&o?"renamedAndMoved":n?"moved":"renamed"}getMetaInfoChanged(e,t){return t.action==="create"&&t.isFolder===!0&&e.created!==!0?!0:e.metaInfoChanged}createMultipartBoundary(){return"----succapp-"+Date.now().toString(36)+"-"+Math.random().toString(36).slice(2)}toRequestBody(e){return e instanceof ji.Readable||Buffer.isBuffer(e)?e:Buffer.from(e,"utf-8")}normalizeMetaFileInfo(e){return{...e,parentDir:Qn.posix.dirname(e.path),name:Qn.posix.basename(e.path)}}async collectFileDescendants(e,t){let n=await this.listFiles(e);t.push(...n);for(let o of n)o.isFolder&&await this.collectFileDescendants(o.path,t)}async requestJson(e,t,n){return this.requestRunner.addTask(async()=>{let o=await this.fetchWithAuth(e,t,n);return await fs(o,this.createRequestContext(e,t))})}async requestText(e,t,n){return this.requestRunner.addTask(async()=>await(await this.fetchWithAuth(e,t,n)).text())}async requestBuffer(e,t,n){return this.requestRunner.addTask(async()=>{let o=await this.fetchWithAuth(e,t,n);return Buffer.from(await o.arrayBuffer())})}async requestStream(e,t,n){let o=await this.requestRunner.acquire();try{let i=await this.fetchWithAuth(e,t,n);if(await Cg(i.clone(),this.createRequestContext(e,t)),!i.body)throw new dt(e);let a=ji.Readable.fromWeb(i.body);return this.releaseRequestSlotAfterStream(a,o),{response:i,stream:a}}catch(i){throw o.release(),i}}async fetchWithAuth(e,t,n){let o=n?.authPolicy??this.authPolicy;await this.ensureStoredCredentialLoaded(o);let i=Bp(t?.headers),a=o==="auto"?this.bearerToken?.token:void 0;a&&(i.Authorization=`Bearer ${a}`);let s=await xo(e,{...t,headers:i});if(s.status===401)throw o==="auto"&&await this.handleAuthFailure(),new ut({workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl});return s.ok||await Ui(s,e),s}createRequestContext(e,t){return{url:e,endpoint:CT(e),serverUrl:this.serverUrl,request:ST(t?.body)}}createInvalidEndpointResponseError(e,t,n){return new _e("err.net.invalidResponse",{properties:{url:`${this.serverUrl}${Ut}${e}`,endpoint:e,serverUrl:this.serverUrl,reason:t,request:n}})}async ensureStoredCredentialLoaded(e){if(e!=="none"&&this.storedCredentialState==="not-loaded")return Ur(this,"storedCredential",()=>this.doEnsureStoredCredentialLoaded())}async doEnsureStoredCredentialLoaded(){let e=await Cs(this.serverUrl);if(!e){this.storedCredentialState="missing";return}if(!this.applyCredential(e)){this.storedCredentialState="missing";return}this.storedCredentialState="loaded"}applyCredential(e){let t=e.bearerToken;return t?.token?(this.bearerToken=t,!0):!1}async handleAuthFailure(){this.storedCredentialState==="loaded"&&await Tg(this.serverUrl),this.bearerToken=void 0,this.resetPersistedCredentialState()}resetPersistedCredentialState(){this.storedCredentialState="not-loaded"}releaseRequestSlotAfterStream(e,t){e.once("close",()=>t.release()),e.once("error",()=>t.release())}};function CT(r){try{let e=new URL(r),t=e.pathname.indexOf(Ut);return t<0?e.pathname:e.pathname.slice(t+Ut.length)||"/"}catch{return}}function ST(r){if(typeof r=="string")try{let e=JSON.parse(r);return V(e)?e:void 0}catch{return}}var jr={workspace:"SUCCAPP_WORKSPACE",server:"SUCCAPP_SERVER",json:"SUCCAPP_JSON",logLevel:"SUCCAPP_LOG_LEVEL",locale:"SUCCAPP_LOCALE"},ws={lcAll:"LC_ALL",lcMessages:"LC_MESSAGES",lang:"LANG"};var Pr=[{name:"workspace",alias:"C",takesValue:!0,valueHint:"path",description:"cli.opt.workspace",acceptWorkspaceTarget:!0},{name:"server",takesValue:!0,valueHint:"url",description:"cli.opt.server",acceptServerTarget:!0},{name:"json",takesValue:!1,description:"cli.opt.json"},{name:"quiet",alias:"q",takesValue:!1,description:"cli.opt.quiet"},{name:"verbose",alias:"v",takesValue:!1,description:"cli.opt.verbose"},{name:"lock-timeout",takesValue:!0,valueHint:"seconds",description:"cli.opt.lockTimeout",acceptDomains:["workspace"],acceptLockUsages:["workspace-write"],showInTopLevelHelp:!1},{name:"log-level",takesValue:!0,valueHint:"level",description:"cli.opt.logLevel"},{name:"locale",takesValue:!0,valueHint:"locale",description:"cli.opt.locale"},{name:"help",alias:"h",takesValue:!1,description:"cli.opt.help"},{name:"version",alias:"V",takesValue:!1,description:"cli.opt.version"}],Gp=Pr.filter(r=>r.showInTopLevelHelp!==!1);function jg(r){return{workspace:r.value("workspace"),server:r.value("server"),json:r.has("json"),quiet:r.has("quiet"),verbose:r.has("verbose"),lockTimeout:r.value("lock-timeout"),logLevel:r.value("log-level"),locale:r.value("locale"),help:r.has("help"),version:r.has("version")}}function Br(r,e){if(r.spec.flags.some(a=>a.name===e))return!0;let n=Pr.find(a=>a.name===e);if(!n)return!1;let o=n.acceptDomains;if(o&&o.length>0&&!o.includes(r.domain)||n.acceptWorkspaceTarget&&r.workspaceTarget==="none"||n.acceptServerTarget&&r.serverTarget==="none")return!1;let i=n.acceptLockUsages;return!(i&&!i.includes(r.lockUsage??"none"))}D();J();function Bg(r,e="param"){return r.map(t=>vT(t,e))}function Vg(r){let e={};for(let t of r)e[t.key]=t.value;return e}function Fe(r){return r.startsWith("-")?r:r.length===1?`-${r}`:`--${r}`}function Oo(r){return r.startsWith("-")&&r!=="-"}function vT(r,e){let t=Fe(e),n=r.indexOf("=");if(n<=0)throw new E("err.cli.invalidKeyValue",{input:t,option:t,flag:e,value:r});let o=r.slice(0,n).trim();if(!o)throw new E("err.cli.invalidNonEmptyKeyValue",{input:t,option:t,flag:e,value:r});return{key:o,value:r.slice(n+1)}}J();D();vt();$();var qg=b(require("fs")),Bi=b(require("path"));D();$();var kT=8;async function $g(r){let e=Bi.resolve(r.startPath),t=new Set((r.excludedRoots??[]).map(o=>Bi.resolve(o))),n=r.maxDepth??kT;for(let o=0;o<=n;o++){if(!t.has(e)&&await wT(e))return e;let i=Bi.dirname(e);if(i===e)return;e=i}}async function wT(r){try{return(await qg.promises.stat(pr(r))).isDirectory()}catch(e){if(F(e))return!1;throw e}}async function Rs(r,e){let t=r.command,n=t?.serverTarget??e.serverTarget??"required",o=t?.spec.positionals.some(C=>C.role==="server-url")??e.explicitServerUrl!==void 0,i=t?Br(t,"server"):!0,a=n!=="none"&&(t?t.workspaceTarget!=="none":!0),s=n!=="none",c=r.workspace;c&&a&&await c.config.ensureLoaded();let l=o?e.explicitServerUrl:void 0,p=i?r.config.server:void 0,m=a?c?.activeServerUrl:void 0,g=s?r.config.envServer:void 0,d=l??p??m??g;if(!d)throw new E("err.cli.missingInput",{inputId:"server",sourceIds:PT({positionalServerUrl:o,serverOption:i,workspaceServer:a,environmentServer:s}),commandName:r.command?.spec.name,envName:jr.server});let f=c?.config.resolveServerUrl(d);if(f!==void 0)return f;if(l!==void 0||p===void 0)return Vr(d);let y=Fe("server");return Vr(d,{input:y,option:y,flag:"server"})}function Vr(r,e={inputId:"server"}){try{return Se(r)}catch(t){throw Vn(t,"err.net.invalidUrl")?new E("err.cli.invalidUrl",{...e,value:r,url:r},{cause:t}):t}}async function Rr(r,e){let t=r.config.server;await e.config.ensureLoaded();let n=e.activeServerUrl;if(!n)throw new E("err.cli.missingInput",{inputId:"activeServer",sourceIds:["workspaceRemoteAdd"]});if(!t)return;let o=Fe("server"),i=Vr(t,{input:o,option:o,flag:"server"});if(!Qe(i,n))throw new E("err.cli.serverMismatch",{input:o,option:o,value:i,expected:n,context:{target:i,active:n}})}function PT(r){let e=[];return r.positionalServerUrl&&e.push("serverPositional"),r.serverOption&&e.push("serverOption"),r.workspaceServer&&e.push("workspaceRemoteAdd"),r.environmentServer&&e.push("environmentServer"),e}async function Kg(r,e){let t=r.workspace?.config.resolveServerUrl(e);return r.workspace&&t?r.workspace.requireServerClient(t):new un(e,{workspaceRoot:r.workspace?.root})}async function Gg(r){let e=r.workspace?Jp.resolve(r.cwd,r.workspace):Jp.resolve(r.cwd);r.workspace!==void 0&&await ks(e);let t=await $g({startPath:e,excludedRoots:[RT(r.env)],maxDepth:r.maxDepth});if(!t&&r.required!==!1)throw new E("err.cli.invalidWorkspace",{inputId:"workspace",source:e});return t}async function _o(r){try{return await Fp(r)}catch(e){throw Yg(r,e)}}async function Jg(r){try{return await Hg.promises.stat(r)}catch(e){throw Yg(r,e)}}function se(r,e){return{...r.workspace?{workspace:r.workspace.root}:{},server:e}}function RT(r=process.env){return r.HOME||r.USERPROFILE||zg.homedir()}function Yg(r,e){return F(e)?new E("err.file.notFound",{path:r},{cause:e}):new E("err.cli.invalidReadableFile",{inputId:"inputFile",source:r,path:r},{cause:e})}Ce();var de=class{toOptions(e){return{}}async execute(e,t){return await this.validateOptions(e,t),this.executeCommand(e,t)}validateOptions(e,t){}requireWorkspace(e){return U(e.workspace,"CLI command requires a workspace context"),e.workspace}async resolveServerUrl(e,t){return Rs(e,{explicitServerUrl:t})}createServerApiClient(e,t){return Kg(e,t)}},ce=class extends de{async executeCommand(e,t){let n=this.requireWorkspace(e);return this.executeWorkspaceCommand(n,e,t)}};D();J();q();D();async function mn(){let r=process.stdin,e=[];for await(let t of r)e.push(ET(t));return Buffer.concat(e).toString("utf8")}async function Xg(r=""){let e=process.stdin,t=process.stderr,n=e.isRaw===!0;return r&&t.write(r),e.isTTY&&e.setRawMode(!0),e.resume(),new Promise((o,i)=>{let a="",s=!1,c=f=>{for(let y of bT(f)){if(s)break;switch(y){case"\r":case`
|
|
55
|
-
`:case"":g(a,o);break;case"":
|
|
56
|
-
`)},g=(f,y)=>{s||(s=!0,m(),y(f))},d=(f,y)=>{s||(s=!0,m(),y(f))};e.on("data",c),e.on("error",l),e.on("end",p),e.on("close",p)})}function ET(r){return typeof r=="string"?Buffer.from(r):Buffer.isBuffer(r)?r:Buffer.from(r)}function bT(r){return typeof r=="string"?r:Buffer.isBuffer(r)?r.toString("utf8"):r instanceof Uint8Array?Buffer.from(r).toString("utf8"):String(r??"")}var Yp=class extends de{readStdin;constructor(e=mn){super(),this.readStdin=e}toOptions(e){let t=e.has("oauth"),n=e.has("pat");return{serverUrl:e.positional[0],mode:n?"pat":"oauth",oauthRequested:t,patRequested:n}}validateOptions(e,t){if(t.oauthRequested&&t.patRequested)throw new E("err.cli.conflictingInputs",{inputs:["oauth","pat"]})}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.serverUrl);if(t.mode==="oauth")throw xT();let o=await TT(this.readStdin),i=await Eg(n,{type:"pat",token:o});return e.output.result({server:n,loggedIn:!0,authType:i.authType,stored:i.stored,username:i.username,userId:i.userId,methods:i.methods,token:i.methods.includes("token")},()=>h("cli.cmd.auth.login.loggedIn",n)),0}},Zg={path:["auth","login"],domain:"auth",spec:{name:"auth login",flags:[{name:"oauth",takesValue:!1},{name:"pat",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth login http://localhost:8080","succapp auth login --pat http://localhost:8080",'printf "%s" "$PAT" | succapp auth login --pat http://localhost:8080']},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Yp};async function TT(r){let e=!!process.stdin.isTTY,t=(e?await Xg(h("cli.cmd.auth.login.patPrompt")):await r()).trim();if(!t)throw new E("err.cli.missingInput",{inputId:"token",sources:e?void 0:["stdin"]});return t}function xT(){return new za("err.cli.unsupportedAuthFlow",{properties:{authType:"oauth",supportedAuthType:"pat"}})}q();D();J();var Xp=class extends de{toOptions(e){return{serverUrl:e.positional[0],all:e.has("all")}}validateOptions(e,t){if(t.all&&t.serverUrl)throw new E("err.cli.conflictingInputs",{inputs:["<url>","--all"]})}async executeCommand(e,t){if(t.all){let a=await qp();return e.output.result({all:a.all,removed:a.removed},()=>h("cli.cmd.auth.logout.removedAllAuth",a.removed)),0}let n=await this.resolveServerUrl(e,t.serverUrl),o=await qp(n),i=o.removed>0;return e.output.result({server:o.serverUrl??n,removed:i},()=>i?h("cli.cmd.auth.logout.removedAuth",n):h("cli.cmd.auth.logout.storedAuth",n)),0}},ey={path:["auth","logout"],domain:"auth",spec:{name:"auth logout",flags:[{name:"all",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth logout","succapp auth logout https://bi.example.com","succapp auth logout --all"]},workspaceTarget:"optional",serverTarget:"optional",createExecutor:()=>new Xp};q();var Qp=class extends de{toOptions(e){return{serverUrl:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.serverUrl),o=await bg(n);return e.output.result({server:n,...FT(o)},()=>MT(n,o)),0}},ty={path:["auth","status"],domain:"auth",spec:{name:"auth status",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth status","succapp --server=https://bi.example.com auth status"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Qp};function FT(r){let e=r?.methods??[],t=e.includes("token");return{storedAuth:r!==void 0,authType:r?.authType,username:r?.username,userId:r?.userId,methods:e,token:t,expiresAt:r?.expiresAt,lastLoginAt:r?.lastLoginAt,updatedAt:r?.updatedAt}}function MT(r,e){return e?e.methods.length===0?h("cli.cmd.auth.storedAuthNoCred",r):h("cli.cmd.auth.storedAuth",r,e.methods.join(", ")):h("cli.cmd.auth.noStoredAuth",r)}var ry=[Zg,ey,ty];q();ne();$();D();J();var Zp=b(require("fs")),oy=b(require("path")),hn="file",Wo="input",Uo="mode",ed="dry-run",td="output",xt="force",Vi="config",jo="test",gt="timeout",rd="catalog",Ft="schema",nd="table-name-contains",gn="max-rows",Lo="query",No="query-file",yn=30,Re=class extends de{async executeCommand(e,t){let n=await this.prepareDbCommand(e,t),o=await this.resolveServerUrl(e),i=await this.createServerApiClient(e,o);return this.executeDbCommand(e,o,i,n)}prepareDbCommand(e,t){return Promise.resolve(t)}readDbInputTextFile(e,t){return _o(Wt(e.cwd,t))}readDbStdinText(){return mn()}isDbStdinInteractive(){return process.stdin.isTTY}async readDbSqlFromSource(e,t){return BT(t,{hasInteractiveStdin:()=>this.isDbStdinInteractive(),readFileText:n=>this.readDbInputTextFile(e,n),readStdin:()=>this.readDbStdinText()})}readDbImportContent(e,t){if(t.type==="file")return this.readDbInputTextFile(e,t.file);if(this.isDbStdinInteractive())throw new E("err.cli.missingInput",{inputId:"inputFile",sources:[`--${Wo}=<csv-file>`,"stdin"]});return this.readDbStdinText()}},fn=class extends Re{async readConfig(e,t){let n=t.type==="file"?await this.readDbInputTextFile(e,t.file):await this.readConfigFromStdin();return VT(n,t.type==="file"?t.file:"stdin")}async readConfigFromStdin(){if(this.isDbStdinInteractive())throw new E("err.cli.missingInput",{inputId:"dataSourceConfig",sources:[`--${Vi}=<json-file>`,"stdin"]});return this.readDbStdinText()}};function Bo(r){return[{name:Vi,takesValue:!0,valueHint:"json-file|-"},...r]}function iy(r){return A({name:r.name,desc:r.desc,defaultSchema:r.defaultSchema,defaultCatalog:r.defaultCatalog,readonly:r.readonly})}function Es(r){return A({schema:r.schema,tableName:r.tableName,tableType:r.tableType,tableComment:r.tableComment})}function ay(r){return A({name:r.name,primaryKey:r.primaryKey,unique:r.unique,dataType:r.dataType,dbType:r.dbType,length:r.length,scale:r.scale,defaultValue:r.defaultValue,autoInc:r.autoInc,nullable:r.nullable,comment:r.comment})}function sy(r){return A({elapsedMs:r.elapsedMs,fields:r.fields,data:r.data,rowCount:r.rowCount,maxRows:r.maxRows,truncated:r.truncated})}function cy(r){return A({dataSource:r.dataSource,resultType:r.resultType,force:r.force,updateCount:r.updateCount,results:r.results,sqlInfos:r.sqlInfos?.map(DT),fields:r.fields,data:r.data,columns:r.columns,rowCount:r.rowCount,maxRows:r.maxRows,truncated:r.truncated,elapsedMs:r.elapsedMs,timeoutMs:r.timeoutMs})}function ly(r){return A({dataSource:r.dataSource,schema:r.schema,tableName:r.tableName,mode:r.mode,dryRun:r.dryRun,importedRows:r.importedRows,skippedRows:r.skippedRows,elapsedMs:r.elapsedMs,timeoutMs:r.timeoutMs})}function DT(r){return A({datasource:r.datasource,schema:r.schema,sql:r.sql,sqlType:r.sqlType,tableName:r.tableName,dataMutation:r.dataMutation,schemaMutation:r.schemaMutation,manipulateAllRows:r.manipulateAllRows,dangerous:r.dangerous})}function Cn(r){let e=r;return A({result:r.result,dataSource:r.dataSource,originalDataSource:e.originalDataSource,config:e.config?bs(e.config):void 0})}function bs(r){let e=A({...r});return delete e.password,e}function py(r){return{columns:[h("cli.cmd.db.dataSource"),h("cli.out.header.description"),h("cli.cmd.db.defaultSchema"),h("cli.cmd.db.readonly")],rows:r.map(e=>[e.name??"",e.desc??"",e.defaultSchema??e.defaultCatalog??"",e.readonly===void 0?"":h(e.readonly?"cli.out.value.yes":"cli.out.value.no")])}}function dy(r){let e=bs(r);return{columns:[h("cli.out.header.field"),h("cli.out.header.value")],rows:Object.keys(e).sort().map(t=>[t,Cy(e[t])])}}function uy(r){return{columns:[h("cli.out.header.schema"),h("cli.out.header.table"),h("cli.out.header.type"),h("cli.out.header.comment")],rows:r.map(e=>[e.schema??"",e.tableName,e.tableType??"",e.tableComment??""])}}function my(r){let e=r.table.columns??[],t=_T(r.table);return{columns:[h("cli.out.header.field"),h("cli.out.header.type"),h("cli.out.header.null"),h("cli.out.header.key"),h("cli.out.header.default"),h("cli.out.header.extra"),h("cli.out.header.comment")],rows:e.map(n=>[n.name,IT(n),AT(n),OT(n,t),WT(n),UT(n),n.comment??""])}}function IT(r){let e=r.dbType??r.dataType??"";return!e||r.length===void 0||r.length<=0||e.includes("(")?e:r.scale!==void 0&&r.scale>0?`${e}(${r.length},${r.scale})`:`${e}(${r.length})`}function AT(r){return r.nullable===void 0?"":r.nullable?"YES":"NO"}function OT(r,e){return r.primaryKey?"PRI":r.unique?"UNI":e.get(od(r.name))??""}function _T(r){let e=new Map;for(let t of r.primaryKeys??[])e.set(od(t),"PRI");for(let t of r.indexes??[]){let n=t.primaryKey?"PRI":t.unique?"UNI":"MUL";for(let o of LT(t.parts))NT(e,o,n)}return e}function LT(r){if(!r)return[];let e=[];for(let t of r)typeof t=="string"?e.push(t):t.column&&e.push(t.column);return e}function NT(r,e,t){let n=od(e),o=r.get(n);o==="PRI"||o==="UNI"&&t==="MUL"||r.set(n,t)}function od(r){return r.toLowerCase()}function WT(r){return r.defaultValue===void 0?"":r.defaultValue??"NULL"}function UT(r){return r.autoInc?"auto_increment":""}function hy(r){return jT(r)?gy(r.fields,r.data):typeof r.updateCount=="number"?h("cli.cmd.db.sqlUpdateCount",String(r.updateCount)):h("cli.cmd.db.sqlExecutedSuccess")}function fy(r){return gy(r.fields,r.data)}function gy(r,e){return r.length?{columns:r,rows:e.map(t=>t.map(Cy))}:h("cli.cmd.db.sqlExecutedSuccess")}function yy(r){let e=r.skippedRows===void 0?"":h("cli.cmd.db.skipped",String(r.skippedRows)),t=r.dryRun?h("cli.cmd.db.dryImport"):h("cli.cmd.db.imported");return h("cli.cmd.db.rowsModeDry",t,String(r.importedRows),r.tableName,e,r.mode,String(r.dryRun))}function jT(r){return Array.isArray(r.fields)&&Array.isArray(r.data)}function Cy(r){return r==null?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function Ts(r,e){let t=r.value(hn);if(e&&t)throw new E("err.cli.conflictingInputs",{inputs:["<sql>",`--${hn}=<sql-file>`]});return t?{type:"file",file:t}:e?{type:"argument",sql:e}:{type:"stdin"}}function Sy(r){let e=r.positional[1],t=ny(r,Lo),n=ny(r,No);if(t!==void 0&&n!==void 0)throw new E("err.cli.conflictingInputs",{inputs:[`--${Lo}=<sql>`,`--${No}=<sql-file>`]});if(e!==void 0&&(t!==void 0||n!==void 0))throw new E("err.cli.conflictingInputs",{inputs:["<table>",`--${Lo}`,`--${No}`]});if(t!==void 0)return{type:"query",sqlSource:{type:"argument",sql:t}};if(n!==void 0)return{type:"query",sqlSource:{type:"file",file:n}};if(e===void 0)throw new E("err.cli.missingInput",{inputId:"exportTarget",sources:["<table>",`--${Lo}=<sql>`,`--${No}=<sql-file>`]});let o=qi(r,e);return{type:"table",schema:o.schema,tableName:o.tableName}}function vy(r){let e=r.value(Wo);if(!e)throw new E("err.cli.missingInput",{inputId:"inputFile",sources:[`--${Wo}=<csv-file>`,`--${Wo}=-`]});return e==="-"?{type:"stdin"}:{type:"file",file:e}}async function BT(r,e){if(r.type==="argument")return r.sql;if(r.type==="file")return e.readFileText(r.file);if(e.hasInteractiveStdin())throw new E("err.cli.missingInput",{inputId:"sql",sources:["<sql>",`--${hn}=<sql-file>`,"stdin"]});let t=await e.readStdin();if(!nt(t))throw new E("err.cli.missingInput",{inputId:"sql",sources:["<sql>",`--${hn}=<sql-file>`,"stdin"]});return t}function Vo(r){let e=r.value(Vi);if(!e)throw new E("err.cli.missingInput",{inputId:"dataSourceConfig",sources:[`--${Vi}=<json-file>`,`--${Vi}=-`]});return e==="-"?{type:"stdin"}:{type:"file",file:e}}function VT(r,e){let t;try{t=JSON.parse(r)}catch(n){throw new E("err.cli.invalidJsonObject",{inputId:"dataSourceConfig",source:e},{cause:n})}if(!V(t))throw new E("err.cli.invalidJsonObject",{inputId:"dataSourceConfig",source:e});return t}async function ky(r,e,t){await Zp.promises.mkdir(oy.dirname(r),{recursive:!0});try{await Zp.promises.writeFile(r,e,{flag:t?"w":"wx"})}catch(n){throw!t&&$T(n)?new E("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:`--${xt}`,path:r},{cause:n}):n}}function qT(r){let e=r.lastIndexOf(".");return e<=0||e===r.length-1?{tableName:r}:{schema:r.slice(0,e),tableName:r.slice(e+1)}}function qi(r,e){let t=r.value(Ft);return t!==void 0?{schema:t,tableName:e}:qT(e)}function Sn(r,e,t){if(r===void 0)return t;let n=Number(r);if(!Number.isInteger(n)||n<=0){let o=Fe(e);throw new E("err.cli.invalidPositiveInteger",{input:o,option:o,flag:e,value:r})}return n}function xs(r,e){if(r===void 0)return;let t=Number(r);if(!Number.isInteger(t)||t<0){let n=Fe(e);throw new E("err.cli.invalidNonNegativeInteger",{input:n,option:n,flag:e,value:r})}return t}function wy(r){if(r===void 0)return"append";if(r==="append"||r==="truncate"||r==="replace")return r;throw new E("err.cli.invalidChoice",{input:`--${Uo}`,option:`--${Uo}`,flag:Uo,value:r,allowedValues:["append","truncate","replace"]})}function $T(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="EEXIST"}function ny(r,e){let t=r.value(e);return t===void 0||t.trim()===""?void 0:t}J();D();var id=class extends Re{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Ft),sqlSource:Ts(e,e.positional[1]),timeoutSeconds:Sn(e.value(gt),gt,yn),maxRows:xs(e.value(gn),gn),force:e.has(xt)}}async prepareDbCommand(e,t){return{...t,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.sqlSource)}}}async executeDbCommand(e,t,n,o){let i=await this.readDbSqlFromSource(e,o.sqlSource),a=await this.executeAnySql(n,{dataSource:o.dataSource,schema:o.schema,sql:i,timeoutMs:o.timeoutSeconds*1e3,maxRows:o.maxRows,force:o.force});return e.output.result({...se(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},timeoutSeconds:o.timeoutSeconds,...o.maxRows!==void 0?{maxRows:o.maxRows}:{},...o.force?{force:!0}:{},...cy(a)},()=>hy(a)),0}async executeAnySql(e,t){try{return await e.executeDbAny({dataSource:t.dataSource,...t.schema!==void 0?{schema:t.schema}:{},sql:t.sql,timeoutMs:t.timeoutMs,...t.maxRows!==void 0?{maxRows:t.maxRows}:{},...t.force?{force:!0}:{}})}catch(n){throw Vn(n,"err.sql.forceRequired")?new E("err.cli.confirmationRequired",{reason:"dbSqlMutation",flag:`--${xt}`,sqlInfos:n.properties.sqlInfos,context:{forceRequired:!0}},{cause:n}):n}}},Py={path:["db","exec"],domain:"db",spec:{name:"db exec",flags:[{name:hn,takesValue:!0,valueHint:"sql-file"},{name:Ft,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"},{name:gn,takesValue:!0,valueHint:"n"},{name:xt,takesValue:!1}],positionals:[{name:"datasource",required:!0},{name:"sql"}],usageArgs:"[<options>] <datasource> [<sql>]",examples:['succapp db exec default "update orders set status = 1 where id = 42"',"succapp db exec default --file=./change.sql --max-rows=10",'succapp db exec default "create table TEMP_ORDERS (ID int)" --force']},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new id};q();$();var ad=class extends Re{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Ft),target:Sy(e),timeoutSeconds:Sn(e.value(gt),gt,yn),output:e.value(td),force:e.has(xt)}}async prepareDbCommand(e,t){return t.target.type!=="query"?t:{...t,target:{...t.target,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.target.sqlSource)}}}}async executeDbCommand(e,t,n,o){let i=o.target.type==="table"?{tableName:o.target.tableName}:{query:!0},a=o.target.type==="table"?await n.exportDbTableData({dataSource:o.dataSource,...o.target.schema!==void 0?{schema:o.target.schema}:{},tableName:o.target.tableName,timeoutMs:o.timeoutSeconds*1e3}):await n.exportDbQueryData({dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},sql:await this.readDbSqlFromSource(e,o.target.sqlSource),timeoutMs:o.timeoutSeconds*1e3}),s={...se(e,t),dataSource:o.dataSource,...o.target.type==="table"&&o.target.schema!==void 0?{schema:o.target.schema}:{},...o.target.type==="query"&&o.schema!==void 0?{schema:o.schema}:{},...i,timeoutSeconds:o.timeoutSeconds,size:a.length};if(o.output){let c=Wt(e.cwd,o.output);return await ky(c,a,o.force),e.output.result({...s,output:c},()=>h("cli.cmd.db.export.exportedData",c)),0}return e.output.content(s,a),0}},Ry={path:["db","export"],domain:"db",spec:{name:"db export",flags:[{name:Lo,takesValue:!0,valueHint:"sql"},{name:No,takesValue:!0,valueHint:"sql-file"},{name:Ft,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"},{name:td,takesValue:!0,valueHint:"csv-file"},{name:xt,takesValue:!1}],positionals:[{name:"datasource",required:!0},{name:"table"}],usageArgs:"[<options>] <datasource> [<table>]",examples:["succapp db export default orders --output=orders.csv","succapp db export default --query-file=./query.sql"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ad};var sd=class extends Re{toOptions(e){let t=qi(e,e.positional[1]);return{dataSource:e.positional[0],schema:t.schema,tableName:t.tableName,inputSource:vy(e),mode:wy(e.value(Uo)),dryRun:e.has(ed),timeoutSeconds:Sn(e.value(gt),gt,yn)}}async executeDbCommand(e,t,n,o){let i=await this.readDbImportContent(e,o.inputSource),a=await n.importDbTableData({dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},tableName:o.tableName,content:i,format:"csv",mode:o.mode,dryRun:o.dryRun,timeoutMs:o.timeoutSeconds*1e3}),s={...a,mode:a.mode??o.mode,dryRun:a.dryRun??o.dryRun};return e.output.result({...se(e,t),...ly(s),timeoutSeconds:o.timeoutSeconds},()=>yy(s)),0}},Ey={path:["db","import"],domain:"db",spec:{name:"db import",flags:[{name:Wo,takesValue:!0,valueHint:"csv-file|-"},{name:Uo,takesValue:!0,valueHint:"append|truncate|replace"},{name:ed,takesValue:!1},{name:Ft,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"}],positionals:[{name:"datasource",required:!0},{name:"table",required:!0}],usageArgs:"[<options>] <datasource> <table>",examples:["succapp db import default orders --input=./orders.csv","succapp db import default public.orders --input=./orders.csv --mode=truncate --dry-run","cat orders.csv | succapp db import default public.orders --input=- --mode=append"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new sd};J();D();var cd=class extends Re{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Ft),sqlSource:Ts(e,e.positional[1]),timeoutSeconds:Sn(e.value(gt),gt,yn),maxRows:xs(e.value(gn),gn)}}async prepareDbCommand(e,t){return{...t,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.sqlSource)}}}async executeDbCommand(e,t,n,o){let i=await this.readDbSqlFromSource(e,o.sqlSource),a=await this.executeQuerySql(n,{dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},sql:i,timeoutMs:o.timeoutSeconds*1e3,...o.maxRows!==void 0?{maxRows:o.maxRows}:{}});return e.output.result({...se(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},readOnly:!0,timeoutSeconds:o.timeoutSeconds,...o.maxRows!==void 0?{maxRows:o.maxRows}:{},...sy(a)},()=>fy(a)),0}async executeQuerySql(e,t){try{return await e.executeDbQuery(t)}catch(n){throw Vn(n,"err.db.nonReadOnlySql")?new E("err.cli.confirmationRequired",{reason:"dbQueryWriteSql",flag:`--${xt}`,context:{backendErrorCode:"err.db.nonReadOnlySql"}},{cause:n}):n}}},by={path:["db","query"],domain:"db",spec:{name:"db query",flags:[{name:hn,takesValue:!0,valueHint:"sql-file"},{name:Ft,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"},{name:gn,takesValue:!0,valueHint:"n"}],positionals:[{name:"datasource",required:!0},{name:"sql"}],usageArgs:"[<options>] <datasource> [<sql>]",examples:['succapp db query default "select * from orders"',"succapp db query default --file=./query.sql --schema=PUBLIC --timeout=10 --max-rows=100"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new cd};q();ne();var ld=class extends Re{toOptions(e){return{dataSource:e.positional[0],catalog:e.value(rd)}}async executeDbCommand(e,t,n,o){let i=await n.listDbSchemas(o.dataSource,{...o.catalog!==void 0?{catalog:o.catalog}:{}});return e.output.result({...se(e,t),dataSource:o.dataSource,...o.catalog!==void 0?{catalog:o.catalog}:{},schemas:i.map(a=>A({...a}))},()=>({columns:[h("cli.out.header.schema"),h("cli.cmd.db.schema.list.catalog")],rows:i.map(a=>[a.name,a.catalog??""])})),0}},Ty={path:["db","schema","list"],domain:"db",spec:{name:"db schema list",flags:[{name:rd,takesValue:!0,valueHint:"catalog"}],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db schema list default","succapp db schema list default --catalog=PUBLIC"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ld};q();var pd=class extends fn{toOptions(e){return{configSource:Vo(e),testBeforeSave:e.has(jo)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.createDataSource({config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...se(e,t),...Cn(a)},()=>h("cli.cmd.db.source.create.created",a.dataSource??i.name??"")),0}},xy={path:["db","source","create"],domain:"db",spec:{name:"db source create",flags:Bo([{name:jo,takesValue:!1}]),positionals:[],usageArgs:"[<options>]",examples:["succapp db source create --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new pd};var dd=class extends Re{async executeDbCommand(e,t,n){let o=await n.getDataSources();return e.output.result({...se(e,t),dataSources:o.map(iy)},()=>py(o)),0}},Fy={path:["db","source","list"],domain:"db",spec:{name:"db source list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp db source list","succapp --server=http://localhost:8180 db source list --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new dd};q();D();J();var ud=class extends Re{toOptions(e){return{dataSource:e.positional[0],force:e.has(xt)}}validateOptions(e,t){if(!t.force)throw new E("err.cli.confirmationRequired",{reason:"dbSourceDelete",flag:`--${xt}`,inputId:"dataSourceConfig"})}async executeDbCommand(e,t,n,o){let i=await n.deleteDataSource({dataSource:o.dataSource});return e.output.result({...se(e,t),...Cn(i)},()=>h("cli.cmd.db.source.remove.deleted",i.dataSource??o.dataSource)),0}},My={path:["db","source","remove"],domain:"db",spec:{name:"db source remove",flags:[{name:xt,takesValue:!1}],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source remove oldDs --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ud};var md=class extends Re{toOptions(e){return{dataSource:e.positional[0]}}async executeDbCommand(e,t,n,o){let i=await n.getDataSourceConfig(o.dataSource);return e.output.result({...se(e,t),dataSource:o.dataSource,config:bs(i)},()=>dy(i)),0}},Dy={path:["db","source","show"],domain:"db",spec:{name:"db source show",flags:[],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source show default"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new md};q();var hd=class extends fn{toOptions(e){return{configSource:Vo(e)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.testDataSource({config:i});return e.output.result({...se(e,t),...Cn(a)},()=>h("cli.cmd.db.source.test.testOk",a.dataSource??i.name??"")),0}},Iy={path:["db","source","test"],domain:"db",spec:{name:"db source test",flags:Bo([]),positionals:[],usageArgs:"[<options>]",examples:["succapp db source test --config=./datasource.json","cat datasource.json | succapp db source test --config=-"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new hd};q();var fd=class extends fn{toOptions(e){return{dataSource:e.positional[0],configSource:Vo(e),testBeforeSave:e.has(jo)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.updateDataSource({dataSource:o.dataSource,config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...se(e,t),...Cn(a)},()=>h("cli.cmd.db.source.update.updated",a.dataSource??i.name??o.dataSource)),0}},Ay={path:["db","source","update"],domain:"db",spec:{name:"db source update",flags:Bo([{name:jo,takesValue:!1}]),positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source update oldDs --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new fd};var gd=class extends Re{toOptions(e){let t=qi(e,e.positional[1]);return{dataSource:e.positional[0],schema:t.schema,tableName:t.tableName}}async executeDbCommand(e,t,n,o){let i=await n.describeDbTable(o.dataSource,o.tableName,{...o.schema!==void 0?{schema:o.schema}:{}});return e.output.result({...se(e,t),dataSource:o.dataSource,table:Es(i.table),columns:i.table.columns?.map(ay)??[]},()=>my(i)),0}},Oy={path:["db","table","describe"],domain:"db",spec:{name:"db table describe",flags:[{name:Ft,takesValue:!0,valueHint:"schema"}],positionals:[{name:"datasource",required:!0},{name:"table",required:!0}],usageArgs:"[<options>] <datasource> <table>",examples:["succapp db table describe default orders","succapp db table describe default public.orders"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new gd};var yd=class extends Re{toOptions(e){return{dataSource:e.positional[0],schema:e.positional[1],tableNameContains:e.value(nd)}}async executeDbCommand(e,t,n,o){let i=await n.listDbTables(o.dataSource,{...o.schema!==void 0?{schema:o.schema}:{},...o.tableNameContains!==void 0?{tableNameContains:o.tableNameContains}:{}});return e.output.result({...se(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},...o.tableNameContains!==void 0?{tableNameContains:o.tableNameContains}:{},tables:i.map(Es)},()=>uy(i)),0}},_y={path:["db","table","list"],domain:"db",spec:{name:"db table list",flags:[{name:nd,takesValue:!0,valueHint:"text"}],positionals:[{name:"datasource",required:!0},{name:"schema"}],usageArgs:"[<options>] <datasource> [<schema>]",examples:["succapp db table list default","succapp db table list default PUBLIC --table-name-contains=order"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new yd};var Ly=[Fy,Dy,Iy,xy,Ay,My,Ty,_y,Oy,by,Py,Ey,Ry];var zT=2,Cd=class{constructor(e,t={}){this.model=e;this.columnGap=KT(t.columnGap)}columnGap;columnWidths;render(){return this.model.columns.length===0?"":(this.columnWidths=this.calculateColumnWidths(),[this.renderRow(this.model.columns),...this.model.rows.map(t=>this.renderRow(t))].join(`
|
|
57
|
-
`))}calculateColumnWidths(){return this.model.columns.map((e,t)=>{let n=this.model.rows.map(o=>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
`)}function tx(r){return A({name:r.name,desc:r.desc,version:r.version})}function rx(r){return ke({columns:[h("cli.out.header.path")],rows:r.map(e=>[e])})}function nx(r){return ke({columns:[h("cli.out.header.path"),h("cli.out.header.error")],rows:r.map(e=>[e.path,kn(e.errorInfo)])})}function ox(r){return ke({columns:[h("cli.out.header.path"),h("cli.out.workspace.ext.version"),h("cli.out.workspace.ext.targetVersion"),h("cli.out.workspace.ext.kind")],rows:r.map(e=>[e.path,e.currentVersion??"",e.targetVersion,Is(e.kind)])})}ne();var Us=b(require("fs")),ur=b(require("path"));G();D();J();$();var sC=b(require("path"));vt();G();var ix=T("workspace.extension-dev.package");async function cC(r,e){let t=sC.join(r,"package.json"),n=await Le(t);if(!n.trim())return ix.warn(`extension package.json is missing or empty: ${t}`),!1;let o=Nt(n,["name"],e);return o===n?!1:(await He(t,o),!0)}var Ex=BC(),bx=/^[a-z0-9]+(?:-[a-z0-9]+){2,}$/,Tx=T("workspace.extension-dev.create"),js=class{workspace;cachedClient;cachedOptions;constructor(e){this.workspace=e}async prepare(){if(!await wd(this.workspace.root))throw new St("err.extension.sysdataNotCloned",{extensionsDir:ur.join(this.workspace.root,$r)});let t=await(await this.requireClient()).getExtensionTemplates(),n=xd(t);if(n.length===0)throw new St("err.extension.templateUnavailable");return this.cachedOptions=n,n}groupOptionsByExtensionPoint(){let e=this.cachedOptions??[],t=new Map;for(let n of e){let o=t.get(n.extensionPoint)??[];o.push(n),t.set(n.extensionPoint,o)}return t}async validate(e){let t=e.extensionName.trim();if(!t)return{ok:!1,error:"empty"};if(!bx.test(t))return{ok:!1,error:"invalidFormat"};let o=t.split("-")[1];return o!==e.extensionPoint?{ok:!1,error:"extensionPointMismatch",actualExtensionPoint:o}:await Z(Os(this.workspace.root,t))?{ok:!1,error:"targetExists"}:{ok:!0}}async execute(e){let{extensionPoint:t,templateName:n,extensionName:o}=e;if(!await wd(this.workspace.root))throw new St("err.extension.sysdataNotCloned",{extensionsDir:ur.join(this.workspace.root,$r)});let i=await this.requireOption(t,n),a=Os(this.workspace.root,o);if(await Z(a))throw new Error(`target extension directory already exists: ${a}`);let c=await(await this.requireClient()).downloadExtensionTemplate(t,n);return await xx(c,a),await cC(a,o),await this.workspace.refreshSyncStatus(),{extensionRoot:a,packageJsonPath:ur.join(a,"package.json"),extensionPoint:t,templateName:n,templateSummary:i.summary}}async requireClient(){return this.cachedClient||(this.cachedClient=await this.workspace.requireClient()),this.cachedClient}async requireOption(e,t){let o=(this.cachedOptions??await this.prepare()).find(i=>i.extensionPoint===e&&i.templateName===t);if(!o)throw new Error(`extension template not found: ${e}/${t}`);return o}};function xd(r){let e=[],t=r.templates??{};for(let[n,o]of Object.entries(t))if(o)for(let[i,a]of Object.entries(o))e.push({extensionPoint:n,templateName:i,summary:a});return e}async function xx(r,e){let n=new Ex(r).getEntries();if(n.length===0)throw new Error("extension template zip is empty");await Us.promises.mkdir(e,{recursive:!0});try{let o=ur.resolve(e),i=o+ur.sep,a=[],s=new Set;for(let c of n){let l=c.entryName.replace(/\\/g,"/"),p=dn(l.endsWith("/")?l.slice(0,-1):l,"extension template entry"),m=ur.resolve(o,p);if(m!==o&&!m.startsWith(i))throw new Error(`extension template entry escapes target directory: ${l}`);if(l.endsWith("/")||c.isDirectory){s.add(m);continue}s.add(ur.dirname(m)),a.push({destination:m,entry:c})}await Promise.all(Array.from(s).map(c=>Us.promises.mkdir(c,{recursive:!0}))),await Promise.all(a.map(({destination:c,entry:l})=>Us.promises.writeFile(c,l.getData())))}catch(o){try{await Qt(e)}catch(i){Tx.debug(`cleanup partial extension directory failed: ${e}`,i)}throw o}}var Fd=class extends de{toOptions(e){return{extensionPoint:e.value("extension-point")}}async executeCommand(e,t){let n=await this.resolveServerUrl(e),o=await this.createServerApiClient(e,n),i=Fx(xd(await o.getExtensionTemplates()),t.extensionPoint);return e.output.result(A({workspace:e.workspace?.root,server:n,extensionPoint:t.extensionPoint,templates:i.map(eC)}),()=>nC(i)),0}},VC={path:["server","extension","template","list"],domain:"server",spec:{name:"server extension template list",flags:[{name:"extension-point",takesValue:!0,valueHint:"point"}],positionals:[],usageArgs:"[<options>]",examples:["succapp server extension template list","succapp --server=https://bi.example.com server extension template list --extension-point=component"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Fd};function Fx(r,e){return e?r.filter(t=>t.extensionPoint===e):[...r]}J();Un();function qC(r,e={}){return Bs(r,e)!==void 0}function Hi(r,e={}){let t=Bs(r,e);if(!t||!r||typeof r!="object")return r;let n={...bt(r),suggestedAction:t,retryable:!1},o=pt(r);return t==="fixMeta"&&typeof n.backendErrorCode!="string"&&typeof o=="string"&&(n.backendErrorCode=o),(typeof n.path!="string"||n.path.length===0)&&(n.path=e.targetPath??e.path),r.properties=n,sr(r)==null&&(r.errorType=Mx(r)),r}function Bs(r,e={}){let t=bt(r)?.suggestedAction;if(Dx(t))return t;let n=pt(r);if(n==="err.meta.fileExists"||n==="err.meta.file.notfound"||n==="err.meta.saveConcurrent")return"pull";if(n==="err.meta.filefolder.notfound")return"fixMeta";if(n==="err.meta.fileExistsIgnoreCase")return"rename";if(n==="err.meta.delete.project")return"refresh";if(n==="err.permission.denied")return e.action==="delete"&&Ix(e.path)?"refresh":"contactAdmin"}function Mx(r){let e=pt(r);return e==="err.permission.denied"||e==="err.meta.delete.project"?"error":"warn"}function Dx(r){return r==="pull"||r==="rename"||r==="refresh"||r==="fixMeta"||r==="contactAdmin"}function Ix(r){return typeof r=="string"&&/^\/[^/]+$/.test(r)}D();J();Un();q();ne();$();var Vs=b(require("fs")),Ve=class extends de{async resolveServerFileTarget(e,t){return{serverUrl:await this.resolveServerUrl(e,t.url),remotePath:_g(t.path)}}createServerFileClient(e,t){return this.createServerApiClient(e,t.serverUrl)}};function et(r,e={}){let[t,n]=r.positional,o=e.defaultPath;return t===void 0?(o===void 0&&$C(),{path:o}):n===void 0?xi(t)?(o===void 0&&$C(),{url:t,path:o}):{path:t}:{url:t,path:n}}function $C(){throw new E("err.cli.missingInput",{inputId:"serverFilePath",sources:["<path>"]})}function Pn(r,e="--revision"){if(r===void 0)return;let t=Yt(r);if(t===void 0)throw new E("err.cli.invalidNonNegativeInteger",{input:e,option:e,value:r});return t}function qs(r){let e=nt(r.value("file")),t=r.has("stdin");if(e&&t)throw new E("err.cli.conflictingInputs",{inputs:["--file=<local-file>","--stdin"]});if(!e&&!t)throw new E("err.cli.missingInput",{inputId:"contentSource",sources:["--file=<local-file>","--stdin"]});return e?{kind:"file",file:e}:{kind:"stdin"}}async function $s(r,e,t){if(e.kind==="stdin")return{source:"stdin",content:await t()};let n=Wt(r.cwd,e.file);if(!(await Jg(n)).isFile())throw new E("err.cli.invalidRegularFile",{inputId:"inputFile",source:n,path:n});return{source:"file",localFile:n,content:Vs.createReadStream(n)}}function HC(r){let e=nt(r.value("output"));if(!e)throw new E("err.cli.missingInput",{inputId:"outputFile",sources:["--output=<file>"]});return e}async function zC(r,e){try{await Vs.promises.stat(r)}catch(t){if(F(t))return;throw t}if(!e)throw new E("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:"--force",path:r})}function Hs(r,e,t){if(r!==void 0&&e)throw new E("err.cli.conflictingInputs",{inputs:["--expected-revision","--force"],context:{command:t}});if(r===void 0&&!e)throw new E("err.cli.missingInput",{inputId:"revisionOrForce",sources:["--expected-revision=<revision>","--force"],context:{command:t}})}function Ki(r){return A({id:r.id,projectName:r.projectName,path:r.path,parentDir:r.parentDir,name:r.name,isFolder:r.isFolder,type:r.type,size:r.size,hash:r.hash,revision:r.revision,modifyTime:r.modifyTime,modifier:r.modifier,desc:r.desc,labels:r.labels,hidden:r.hidden,order:r.order})}function Ax(r){return A({path:r.path,oldPath:r.oldPath,modifyTime:r.modifyTime,contentMutation:r.contentMutation,pathMutation:r.pathMutation,metaInfoChanged:r.metaInfoChanged,metaInfo:r.metaInfo?Ki(r.metaInfo):void 0,warnings:r.warnings})}function zo(r,e,t,n){return A({workspace:r.workspace?.root,server:e,path:t.path,source:n?.source,localFile:n?.localFile,result:Ax(t)})}async function Ko(r,e,t){try{let n=await t();return Ox(r,n),n}catch(n){let o=_x(n,r,e);if(!o)throw n;KC(r,e,o)}}function Ox(r,e){e.success||KC(r,e.path,Hi(e.errorInfo,{action:r,path:e.path}))}function KC(r,e,t){let n=kn(t)||h("cli.cmd.server.file.unknownServerFile"),o={action:r,remotePath:e,reason:n,errorInfo:t};throw Lx(t)?new Ot("err.base.operationFailed",o,{cause:t}):new St("err.base.operationFailed",o,{cause:t})}function _x(r,e,t){if(!(!(r instanceof zt)||!r.remoteError))return Hi(on(r.remoteError),{action:e,path:t})}function Lx(r){let e=Bs(r);return e==="pull"||e==="rename"}function GC(r){return r.length===0?h("cli.cmd.server.file.files"):ke({columns:[h("cli.out.header.type"),h("cli.cmd.server.file.name"),h("cli.out.header.path"),h("cli.out.header.revision"),h("cli.cmd.server.file.size")],rows:r.map(e=>[e.isFolder?h("cli.cmd.server.file.folder"):h("cli.cmd.server.file.file"),e.name,e.path,zi(e.revision),zi(e.size)])})}function JC(r){return ke({columns:[h("cli.out.header.field"),h("cli.out.header.value")],rows:[[h("cli.out.header.path"),r.path],[h("cli.out.header.type"),r.isFolder?h("cli.cmd.server.file.folder"):h("cli.cmd.server.file.file")],[h("cli.cmd.server.file.id"),r.id],[h("cli.out.header.revision"),zi(r.revision)],[h("cli.cmd.server.file.size"),zi(r.size)],[h("cli.cmd.server.file.modifyTime"),zi(r.modifyTime)],[h("cli.out.header.description"),r.desc??""]]})}function Go(r,e){return h("cli.cmd.server.file.success",r,e.path)}function zi(r){return r===void 0?"":String(r)}var Md=class extends Ve{constructor(t=mn){super();this.readStdin=t}toOptions(t){return{...et(t),source:qs(t)}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await $s(t,n.source,this.readStdin),s=await Ko("Create",o.remotePath,()=>i.saveFile(o.remotePath,a.content,{expectedRevision:null}));return t.output.result(zo(t,o.serverUrl,s,a),()=>Go("Create",s)),0}},YC={path:["server","file","create"],domain:"server",spec:{name:"server file create",flags:[{name:"file",takesValue:!0,valueHint:"local-file"},{name:"stdin",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file create /DEMO/apps/new.view --file=./new.view",'printf "{}" | succapp server file create /DEMO/apps/new.view --stdin',"succapp server file create https://bi.example.com /DEMO/apps/new.view --file=./new.view"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Md};q();D();J();ne();$();var XC=b(require("fs")),QC=require("stream/promises"),Dd=class extends Ve{toOptions(e){return{...et(e),revision:Pn(e.value("revision")),upgradeContent:e.has("upgrade-content"),output:HC(e),force:e.has("force")}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),o=Wt(e.cwd,t.output);await zC(o,t.force);let a=await(await this.createServerFileClient(e,n)).getFileContentStream(n.remotePath,{revision:t.revision,upgradeContent:t.upgradeContent});try{await(0,QC.pipeline)(a.stream,XC.createWriteStream(o,{flags:t.force?"w":"wx"}))}catch(s){throw!t.force&&Nx(s)?new E("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:"--force",path:o},{cause:s}):s}return e.output.result(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,output:o,revision:a.revision,modifyTime:a.modifyTime}),()=>h("cli.cmd.server.file.download.downloaded",n.remotePath,o)),0}},ZC={path:["server","file","download"],domain:"server",spec:{name:"server file download",flags:[{name:"revision",takesValue:!0,valueHint:"n"},{name:"upgrade-content",takesValue:!1},{name:"output",takesValue:!0,valueHint:"local-file"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file download /DEMO/apps/a.view --output=./a.view","succapp server file download --revision=12 /DEMO/apps/a.view --output=./a.view","succapp server file download /DEMO/apps/a.view --output=./a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Dd};function Nx(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="EEXIST"}J();D();q();ne();function zs(r){let e=Yt(r);if(r===void 0||e!==void 0&&e>0)return e;throw new E("err.cli.invalidPositiveInteger",{input:"--limit",option:"--limit",value:r})}function Ks(r){return r.length===0?h("cli.out.workspace.file.hist.empty"):ke({columns:[h("cli.out.header.revision"),h("cli.out.header.action"),h("cli.out.header.modified"),h("cli.out.header.modifier"),h("cli.out.header.path"),h("cli.out.header.message")],rows:r.map(e=>[Wx(e.revision),e.action??"",Ux(e.modifyTime),e.modifierName??e.modifier??"",e.path,e.message??""])})}function Gs(r){return A({id:r.id,fileId:r.fileId,path:r.path,revision:r.revision,action:r.action,modifyTime:r.modifyTime,modifier:r.modifier,modifierName:r.modifierName,message:r.message,detail:r.detail})}function Wx(r){return r===void 0?"":String(r)}function Ux(r){return r===void 0?"":new Date(r).toISOString()}ne();var Id=class extends Ve{toOptions(e){return{...et(e),limit:zs(e.value("limit"))}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFileHistory(n.remotePath,{limit:t.limit});return e.output.result(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{histories:i.length},histories:i.map(Gs)}),()=>Ks(i)),0}},eS={path:["server","file","history"],domain:"server",spec:{name:"server file history",flags:[{name:"limit",takesValue:!0,valueHint:"n"}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file history /DEMO/views/sales.view","succapp server file history https://bi.example.com /DEMO/views/sales.view","succapp server file history --limit=20 /DEMO/views/sales.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Id};ne();var Ad=class extends Ve{toOptions(e){return et(e)}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFile(n.remotePath);return e.output.result(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,file:Ki(i)}),()=>JC(i)),0}},tS={path:["server","file","info"],domain:"server",spec:{name:"server file info",flags:[],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file info /DEMO/apps/a.view","succapp server file info https://bi.example.com /DEMO/apps/a.view","succapp server file info /DEMO/apps/a.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ad};ne();var Od=class extends Ve{toOptions(e){return et(e,{defaultPath:"/"})}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).listFiles(n.remotePath);return e.output.result(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{files:i.length},files:i.map(Ki)}),()=>GC(i)),0}},rS={path:["server","file","list"],domain:"server",spec:{name:"server file list",flags:[],positionals:[{name:"url",role:"server-url"},{name:"path"}],usageArgs:"[<options>] [<url>] [<path>]",examples:["succapp --server=https://bi.example.com server file list /DEMO","succapp server file list https://bi.example.com /DEMO/apps","succapp server file list --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Od};var nS=require("node:child_process"),oS=require("node:util"),jx=(0,oS.promisify)(nS.execFile);async function Js(r,e){let t=Bx(r);await jx(t.command,t.args,{signal:e})}function Bx(r){return process.platform==="darwin"?{command:"open",args:[r]}:process.platform==="win32"?{command:"rundll32",args:["url.dll,FileProtocolHandler",r]}:{command:"xdg-open",args:[r]}}q();ne();var _d=class extends Ve{constructor(t=Js){super();this.opener=t}toOptions(t){return{...et(t),edit:t.has("edit")}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=n.edit===!0,a=Ao(o.serverUrl,{path:o.remotePath,...i?{":edit":"true"}:{}});return await this.opener(a,t.abortSignal),t.output.result(A({workspace:t.workspace?.root,server:o.serverUrl,path:o.remotePath,edit:i,url:a}),()=>Vx(a,i)),0}},iS={path:["server","file","open"],domain:"server",spec:{name:"server file open",flags:[{name:"edit",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file open /DEMO/views/sales.view","succapp server file open https://bi.example.com /DEMO/views/sales.view","succapp server file open --edit /DEMO/views/sales.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new _d};function Vx(r,e){return h(e?"cli.cmd.server.file.open.openedEdit":"cli.cmd.server.file.open.openedView",r)}var Ld=class extends Ve{toOptions(e){return{...et(e),expectedRevision:Pn(e.value("expected-revision"),"--expected-revision"),force:e.has("force")}}async executeCommand(e,t){Hs(t.expectedRevision,t.force,"server file remove");let n=await this.resolveServerFileTarget(e,t),o=await this.createServerFileClient(e,n),i=await Ko("Delete",n.remotePath,()=>o.deleteFile(n.remotePath,t.force?void 0:{expectedRevision:t.expectedRevision}));return e.output.result(zo(e,n.serverUrl,i),()=>Go("Delete",i)),0}},aS={path:["server","file","remove"],domain:"server",spec:{name:"server file remove",flags:[{name:"expected-revision",takesValue:!0,valueHint:"n"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file remove /DEMO/apps/a.view --expected-revision=12","succapp server file remove https://bi.example.com /DEMO/apps/a.view --expected-revision=12","succapp server file remove /DEMO/apps/a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ld};ne();var Nd=class extends Ve{toOptions(e){return{...et(e),revision:Pn(e.value("revision")),upgradeContent:e.has("upgrade-content")}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFileContent(n.remotePath,{revision:t.revision,upgradeContent:t.upgradeContent});return e.output.content(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,revision:i.revision,modifyTime:i.modifyTime,size:i.buffer.length}),i.buffer),0}},sS={path:["server","file","show"],domain:"server",spec:{name:"server file show",flags:[{name:"revision",takesValue:!0,valueHint:"n"},{name:"upgrade-content",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file show /DEMO/apps/a.view","succapp server file show --revision=12 /DEMO/apps/a.view","succapp server file show /DEMO/apps/a.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Nd};var Wd=class extends Ve{constructor(t=mn){super();this.readStdin=t}toOptions(t){return{...et(t),source:qs(t),expectedRevision:Pn(t.value("expected-revision"),"--expected-revision"),force:t.has("force")}}async executeCommand(t,n){Hs(n.expectedRevision,n.force,"server file update");let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await $s(t,n.source,this.readStdin),s=await Ko("Put",o.remotePath,()=>i.saveFile(o.remotePath,a.content,n.force?void 0:{expectedRevision:n.expectedRevision}));return t.output.result(zo(t,o.serverUrl,s,a),()=>Go("Put",s)),0}},cS={path:["server","file","update"],domain:"server",spec:{name:"server file update",flags:[{name:"file",takesValue:!0,valueHint:"local-file"},{name:"stdin",takesValue:!1},{name:"expected-revision",takesValue:!0,valueHint:"n"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file update /DEMO/apps/a.view --file=./a.view --expected-revision=12",'printf "{}" | succapp server file update /DEMO/apps/a.view --stdin --expected-revision=12',"succapp server file update /DEMO/apps/a.view --file=./a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Wd};var Ud=class extends de{toOptions(e){return{url:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).getProjects();return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,projects:i.map(Fs)},()=>qy(i)),0}},lS={path:["server","project","list"],domain:"server",spec:{name:"server project list",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server project list","succapp --server=https://bi.example.com server project list","succapp server project list http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ud};J();D();q();var jd=class extends de{toOptions(e){return{...qx(e),desc:nt(e.value("desc"))}}validateOptions(e,t){!e.workspace&&!t.url&&!e.config.server&&uS()}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).createProject({name:t.projectName,desc:t.desc});return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,project:Fs(i)},()=>$x(i)),0}},dS={path:["server","project","create"],domain:"server",spec:{name:"server project create",flags:[{name:"desc",takesValue:!0,valueHint:"text",description:"cli.cmd.server.proj.create.descOption"}],positionals:[{name:"url",role:"server-url"},{name:"project"}],usageArgs:"[<options>] [<url>] <project>",examples:["succapp server project create SALES",'succapp server project create SALES --desc="Sales demo"',"succapp server project create http://localhost:8180 SALES --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new jd};function qx(r){let[e,t]=r.positional;return e===void 0&&pS(),t===void 0?(xi(e)&&pS(),{projectName:e}):(xi(e)||uS(),{url:e,projectName:t})}function pS(){throw new E("err.cli.missingInput",{inputId:"projectName",sources:["<project>"]})}function uS(){throw new E("err.cli.missingInput",{inputId:"server",sources:["--server=<url>","<url> <project>"]})}function $x(r){return h("cli.cmd.server.proj.create.created",r.name)}q();D();J();ne();var Bd="input",Vd="param",Jo=class extends de{async executeCommand(e,t){let n=await this.resolveServerUrl(e),o=await this.createServerApiClient(e,n);return this.executeScriptCommand(e,n,o,t)}};function Ys(r){return A({result:"result"in r?r.result:void 0,elapsedMs:"elapsedMs"in r?r.elapsedMs:void 0,diagnostics:"diagnostics"in r?r.diagnostics:void 0})}function Xs(){return h("cli.cmd.server.script.done")}function mS(r,e){let t=r.trim();if(!Ha(t))return r;try{return JSON.parse(t)}catch(n){throw new E("err.cli.invalidJson",{inputId:"inputFile",source:e,context:{file:e}},{cause:n})}}$();var qd=class extends Jo{constructor(t=_o){super();this.readFileText=t}toOptions(t){return{scriptPath:t.positional[0]}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(Wt(t.cwd,i.scriptPath)),s=await o.checkScript({script:a});return t.output.result({...se(t,n),path:i.scriptPath,...Ys(s)},()=>Xs()),0}},hS={path:["server","script","check"],domain:"server",spec:{name:"server script check",flags:[],positionals:[{name:"file",required:!0}],usageArgs:"[<options>] <file>",examples:["succapp server script check ./scripts/job.js"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new qd};ne();$();var $d=class extends Jo{constructor(t=_o){super();this.readFileText=t}toOptions(t){return{scriptPath:t.positional[0],inputFile:t.value(Bd),params:Bg(t.values(Vd))}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(Wt(t.cwd,i.scriptPath)),s=i.inputFile?mS(await this.readFileText(Wt(t.cwd,i.inputFile)),i.inputFile):void 0,c=Vg(i.params),l=await o.executeScript({script:a,args:A({input:s,params:c})});return t.output.result({...se(t,n),path:i.scriptPath,params:c,...Ys(l)},()=>Xs()),0}},fS={path:["server","script","exec"],domain:"server",spec:{name:"server script exec",flags:[{name:Bd,takesValue:!0,valueHint:"file"},{name:Vd,takesValue:!0,repeatable:!0,valueHint:"key=value"}],positionals:[{name:"file",required:!0}],usageArgs:"[<options>] <file>",examples:["succapp server script exec ./scripts/job.js","succapp server script exec ./scripts/job.js --input=./input.json --param=mode=preview"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new $d};var gS=[Jy,Gy,lS,dS,rS,tS,sS,ZC,iS,eS,YC,cS,aS,fS,hS,Yy,VC];q();D();J();ne();var yS=["missing-baseline","workspace-config","missing-meta","state-file"];function Zs(r){return r.map(e=>{if(yS.includes(e))return e;throw new E("err.cli.invalidChoice",{input:"--only",option:"--only",value:e,allowedValues:yS})})}function Ji(r){return A({checks:r.checks.length>0?r.checks:void 0,targetRemotePaths:r.paths.length>0?r.paths:void 0})}function CS(r){let e=r.issues.filter(t=>t.repairable).length;return{workspace:r.workspaceRootPath,server:r.serverUrl,status:r.issues.length===0?"ok":"problems",summary:{issues:r.issues.length,repairable:e,unrepairable:r.issues.length-e},issues:r.issues.map(Gi)}}function SS(r){let e=r.issues.filter(t=>t.repairable).length;return{workspace:r.workspaceRootPath,server:r.serverUrl,dryRun:!0,summary:{issues:r.issues.length,repairable:e,unrepairable:r.issues.length-e},issues:r.issues.map(Gi)}}function vS(r){return{workspace:r.workspaceRootPath,server:r.serverUrl,dryRun:!1,summary:{issues:r.issues.length,repaired:r.repaired.length,unresolved:r.unresolved.length},issues:r.issues.map(Gi),repaired:r.repaired.map(Gi),unresolved:r.unresolved.map(Gi)}}function kS(r){if(r.issues.length===0)return h("cli.cmd.workspace.repair.checkClean");let e=r.issues.filter(t=>t.repairable).length;return[h("cli.cmd.workspace.repair.checkIssue",r.issues.length,e),Qs(r.issues)].join(`
|
|
61
|
-
`)}function
|
|
62
|
-
`)}function PS(r){if(r.issues.length===0)return h("cli.cmd.workspace.repair.clean");let e=[h("cli.cmd.workspace.repair.repaired",r.repaired.length,r.unresolved.length)];return r.repaired.length>0&&(e.push(h("cli.cmd.workspace.repair.repairedIssues")),e.push(Qs(r.repaired))),r.unresolved.length>0&&(e.push(h("cli.cmd.workspace.repair.unresolved")),e.push(Qs(r.unresolved))),e.join(`
|
|
63
|
-
`)}function Gi(r){return A({checkId:r.checkId,strategy:r.strategy,repairable:r.repairable,remotePaths:r.remotePaths,message:r.message,details:r.details})}function Qs(r){return ke({columns:[h("cli.cmd.workspace.repair.check"),h("cli.cmd.workspace.repair.strategy"),h("cli.cmd.workspace.repair.repairable"),h("cli.cmd.workspace.repair.remotePaths"),h("cli.out.header.message")],rows:r.map(e=>[e.checkId,e.strategy,h(e.repairable?"cli.out.value.yes":"cli.out.value.no"),e.remotePaths.join(", "),e.message])})}var ge=class extends ce{async executeWorkspaceCommand(e,t,n){return!t.command||t.command.serverTarget!=="none"?await Rr(t,e):await e.config.ensureLoaded(),this.executeSyncCommand(e,e.createSyncService(),t,n)}};var Hd=class extends ge{toOptions(e){return{checks:Zs(e.values("only")),paths:e.positional}}async executeSyncCommand(e,t,n,o){let i=await t.fsckWorkspace({...Ji(o),task:n.task});return n.output.result(CS(i),()=>kS(i)),i.issues.length>0?1:0}},RS={path:["workspace","check"],domain:"workspace",spec:{name:"workspace check",flags:[{name:"only",takesValue:!0,repeatable:!0,valueHint:"item"}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace check","succapp workspace check --only=missing-baseline","succapp workspace check /DEMO_BLANK --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Hd};q();Ce();D();J();$();var Ew=b(require("path"));var Tl=b(require("fs")),yr=b(require("path"));var ec=class{total=0;byApi=new Map;byPath=new Map;pathKeyCount=0;droppedPathKeys=0;recentCallsDropped=0;recentCalls=[];maxPathKeys;maxRecentCalls;constructor(e={}){this.maxPathKeys=e.maxPathKeys??500,this.maxRecentCalls=e.maxRecentCalls??200}record(e){this.total++,this.byApi.set(e.name,(this.byApi.get(e.name)??0)+1),e.path!==void 0&&this.recordPath(e.name,e.path),this.recordRecentCall(e)}getSnapshot(e={}){let t={total:this.total,byApi:Object.fromEntries(this.byApi),byPath:this.createByPathSnapshot(),droppedPathKeys:this.droppedPathKeys,recentCallsDropped:this.recentCallsDropped,...e.includeRecentCalls?{recentCalls:this.recentCalls.map(n=>({...n}))}:{}};return e.reset&&this.reset(),t}reset(){this.total=0,this.byApi.clear(),this.byPath.clear(),this.pathKeyCount=0,this.droppedPathKeys=0,this.recentCallsDropped=0,this.recentCalls.length=0}recordPath(e,t){let n=this.byPath.get(e);if(n?.has(t)){n.set(t,(n.get(t)??0)+1);return}if(this.pathKeyCount>=this.maxPathKeys){this.droppedPathKeys++;return}n||(n=new Map,this.byPath.set(e,n)),n.set(t,1),this.pathKeyCount++}recordRecentCall(e){if(this.maxRecentCalls<=0){this.recentCallsDropped++;return}this.recentCalls.length>=this.maxRecentCalls&&(this.recentCalls.shift(),this.recentCallsDropped++),this.recentCalls.push({...e})}createByPathSnapshot(){let e={};for(let[t,n]of this.byPath)e[t]=Object.fromEntries(n);return e}};var zd=class{constructor(e){this.delegate=e}diagnostics=new ec;get serverUrl(){return this.delegate.serverUrl}get currentAuthorizationHeader(){return this.delegate.currentAuthorizationHeader}getDiagnostics(e){return this.diagnostics.getSnapshot(e)}async getServerInfo(){return this.recordApiCall("getServerInfo"),this.delegate.getServerInfo()}async getProjects(){return this.recordApiCall("getProjects"),this.delegate.getProjects()}async createProject(e){return this.recordApiCall("createProject",e.name),this.delegate.createProject(e)}async listFiles(e){return this.recordApiCall("listFiles",e),this.delegate.listFiles(e)}async countFiles(e){return this.recordApiCall("countFiles",e),this.delegate.countFiles(e)}async getFileDescendant(e){return this.recordApiCall("getFileDescendant",e),this.delegate.getFileDescendant(e)}async getFile(e){return this.recordApiCall("getFile",e),this.delegate.getFile(e)}async getFileInfos(e){return this.recordApiCall("getFileInfos"),this.delegate.getFileInfos(e)}async getFileHistory(e,t){return this.recordApiCall("getFileHistory",e),this.delegate.getFileHistory(e,t)}isNotFoundError(e){return this.delegate.isNotFoundError(e)}async getFileContent(e,t){return this.recordApiCall("getFileContent",e),this.delegate.getFileContent(e,t)}async getFileContentStream(e,t){return this.recordApiCall("getFileContentStream",e),this.delegate.getFileContentStream(e,t)}async saveFile(e,t,n){return this.recordApiCall("saveFile",e),this.delegate.saveFile(e,t,n)}async createFile(e){return this.recordApiCall("createFile",e.path),this.delegate.createFile(e)}async modifyFile(e){return this.recordApiCall("modifyFile",e.path),this.delegate.modifyFile(e)}async moveFile(e){return this.recordApiCall("moveFile",e.path),this.delegate.moveFile(e)}async upgradeFileContent(e){return this.recordApiCall("upgradeFileContent",e.path),this.delegate.upgradeFileContent(e)}async deleteFile(e,t){return this.recordApiCall("deleteFile",e),this.delegate.deleteFile(e,t)}async getExtensionTemplates(){return this.recordApiCall("getExtensionTemplates"),this.delegate.getExtensionTemplates()}async downloadExtensionTemplate(e,t){return this.recordApiCall("downloadExtensionTemplate",`${e}/${t}`),this.delegate.downloadExtensionTemplate(e,t)}async getDataSources(){return this.recordApiCall("getDataSources"),this.delegate.getDataSources()}async getSettings(e){return this.recordApiCall("getSettings",e?.path),this.delegate.getSettings(e)}async setSettings(e){return this.recordApiCall("setSettings",e.path),this.delegate.setSettings(e)}async probeDataSource(e,t){return this.recordApiCall("probeDataSource",e),this.delegate.probeDataSource(e,t)}async getDataSourceConfig(e,t){return this.recordApiCall("getDataSourceConfig",e),this.delegate.getDataSourceConfig(e,t)}async testDataSource(e){return this.recordApiCall("testDataSource",e.originalDataSource??e.config.name),this.delegate.testDataSource(e)}async createDataSource(e){return this.recordApiCall("createDataSource",e.config.name),this.delegate.createDataSource(e)}async updateDataSource(e){return this.recordApiCall("updateDataSource",e.dataSource),this.delegate.updateDataSource(e)}async deleteDataSource(e){return this.recordApiCall("deleteDataSource",e.dataSource),this.delegate.deleteDataSource(e)}async listDbSchemas(e,t){return this.recordApiCall("listDbSchemas",e),this.delegate.listDbSchemas(e,t)}async listDbTables(e,t){return this.recordApiCall("listDbTables",e),this.delegate.listDbTables(e,t)}async describeDbTable(e,t,n){return this.recordApiCall("describeDbTable",`${e}/${t}`),this.delegate.describeDbTable(e,t,n)}async queryDbDdl(e,t,n){return this.recordApiCall("queryDbDdl",`${e}/${t}`),this.delegate.queryDbDdl(e,t,n)}async executeDbQuery(e){return this.recordApiCall("executeDbQuery",e.dataSource),this.delegate.executeDbQuery(e)}async exportDbQueryData(e){return this.recordApiCall("exportDbQueryData",e.dataSource),this.delegate.exportDbQueryData(e)}async exportDbTableData(e){return this.recordApiCall("exportDbTableData",`${e.dataSource}/${e.tableName}`),this.delegate.exportDbTableData(e)}async executeDbAny(e){return this.recordApiCall("executeDbAny",e.dataSource),this.delegate.executeDbAny(e)}async importDbTableData(e){return this.recordApiCall("importDbTableData",`${e.dataSource}/${e.tableName}`),this.delegate.importDbTableData(e)}async executeScript(e){return this.recordApiCall("executeScript","<temporary-script>"),this.delegate.executeScript(e)}async checkScript(e){return this.recordApiCall("checkScript","<temporary-script>"),this.delegate.checkScript(e)}async refreshCache(){return this.recordApiCall("refreshCache"),this.delegate.refreshCache()}buildViewFileRedirectUrl(e){return this.delegate.buildViewFileRedirectUrl(e)}async getTypeScriptSupportApiLibs(){return this.recordApiCall("getTypeScriptSupportApiLibs"),this.delegate.getTypeScriptSupportApiLibs()}async getJsonSchemaSupport(){return this.recordApiCall("getJsonSchemaSupport"),this.delegate.getJsonSchemaSupport()}async downloadJsonSchema(e){return this.recordApiCall("downloadJsonSchema"),this.delegate.downloadJsonSchema(e)}async getFrontendFrameworksManifest(){return this.recordApiCall("getFrontendFrameworksManifest"),this.delegate.getFrontendFrameworksManifest()}recordApiCall(e,t){this.diagnostics.record({name:e,path:t})}};function ES(r){return new zd(r)}$();Ar();$n();it();gr();qt();var wc=class extends Dt{async execute(){this.task.throwIfAborted();let e=this.options.scope??"both",t=e==="local",n=this.options.refreshAll?await this.context.refreshSyncStatusState({scope:e,forceRefresh:this.options.forceRefresh,rootRemotePath:this.options.rootRemotePath,source:this.options.source,task:this.task}):void 0,o=this.context.getSyncChanges();if(t&&(o=o.filter(a=>a.type!=="conflict"&&at(a))),this.options.paths?.length){let a=await this.resolveTargetRemotePaths(this.options.paths,t?"mirror-only":"server-backed");o=this.filterChangesByTargets(o,a)}let i=n?.warnings??[];return{changes:o,localChanges:o.filter(a=>at(a)),remoteChanges:t?[]:o.filter(a=>fr(a)),conflicts:t?[]:o.filter(a=>a.type==="conflict"),...i.length>0?{warnings:i}:{}}}};var kv=b(require("fs"));G();$();it();var Gr=b(require("fs")),Jr=b(require("path")),Pu=require("node:util");$();$n();Ce();D();Je();G();it();pn();$n();D();G();vt();var CF=T("sync.file-fetcher"),SF=3,vF=20,kF=300,Pc=class{constructor(e){this.options=e;let t={};e.maxConcurrency!==void 0&&(t.maxConcurrency=e.maxConcurrency),e.signal&&(t.signal=e.signal),this.runner=new ze(t),this.maxAttemptsPerFile=Math.max(1,e.maxAttemptsPerFile??SF),this.maxRetries=Math.max(0,e.maxRetries??vF),this.retryBaseDelayMs=Math.max(0,e.retryBaseDelayMs??kF)}runner;maxAttemptsPerFile;maxRetries;retryBaseDelayMs;retryCount=0;stoppedError;fetchToLocal(e,t){return mt(this.options.signal),this.stoppedError?Promise.reject(this.stoppedError):this.runner.addTask(()=>this.fetchToLocalWithRetry(e,t))}async fetchToLocalWithRetry(e,t){let n;for(let o=1;o<=this.maxAttemptsPerFile;o++){if(mt(this.options.signal),this.stoppedError)throw this.stoppedError;try{let i=await this.options.getContentStream(e);return mt(this.options.signal),await cn(t,i.stream),i}catch(i){if(i instanceof Kt)throw i;if(n=i,!this.shouldRetryContentDownload(i))throw this.stop(i),i;if(o>=this.maxAttemptsPerFile){let s=new Error(`download file content failed: ${e}: ${qn(i)}`);throw this.stop(s),s}if(!this.consumeRetryBudget()){let s=new Error(`download file content retry budget exhausted after ${this.maxRetries} retries: ${e}: ${qn(i)}`);throw this.stop(s),s}let a=this.retryBaseDelayMs*o;CF.warn(`content download interrupted, retrying file attempt ${o+1}/${this.maxAttemptsPerFile}, fetch retry budget ${this.retryCount}/${this.maxRetries}: `+e,i),await new Promise(s=>setTimeout(s,a)),mt(this.options.signal)}}throw n instanceof Error?n:new Error(String(n??"content download failed"))}stop(e){this.stoppedError||(this.stoppedError=e instanceof Error?e:new Error(String(e??"content download failed")),this.runner.cancel(this.stoppedError))}consumeRetryBudget(){return this.retryCount>=this.maxRetries?!1:(this.retryCount++,!0)}shouldRetryContentDownload(e){return Lh(e)}};var ku=b(require("fs")),Rc=b(require("path"));$();Je();G();pn();D();qt();Zo();function gv(r){let e=new Map(r.serverProjects.map(a=>[a.remotePath,a])),t=wF(r.serverProjects),n=new Map(r.mirrorProjects.map(a=>[a.remotePath,a])),o=PF(r.mirrorProjects),i={scannableProjectPaths:new Set,unavailableProjects:[],renamedProjects:[]};for(let a of r.trackedProjects){let s=n.get(a),c=s?.id,l=e.get(a);if(l){c&&l.id&&c!==l.id?i.unavailableProjects.push(fv(a,s)):i.scannableProjectPaths.add(a);continue}let p=c&&!o.has(c)?t.get(c):void 0;if(p&&p.remotePath!==a){i.renamedProjects.push({oldProject:s??{name:yv(a),remotePath:a,id:c},newProject:p});continue}i.unavailableProjects.push(fv(a,s))}return i}function wF(r){let e=new Map,t=new Set;for(let n of r)if(n.id){if(e.has(n.id)){t.add(n.id);continue}e.set(n.id,n)}for(let n of t)e.delete(n);return e}function PF(r){let e=new Set,t=new Set;for(let n of r)n.id&&(e.has(n.id)&&t.add(n.id),e.add(n.id));return t}function fv(r,e){return e||{name:yv(r),remotePath:r}}function yv(r){let e=r.lastIndexOf("/");return e>=0?r.slice(e+1):r}var RF=8,Cv=100,EF=/^[0-9a-f]{64}$/,Pt=T("sync.detector.remote"),wu=class{detectRuns=0;serverFileInfoRequests=0;serverFileInfoHits=0;serverFileInfoMisses=0;serverFoldersListed=0;serverFoldersSkippedByScope=0;serverFoldersSkippedByWaterline=0;mirrorFoldersScanned=0;mirrorEntriesCollected=0;mirrorContentStatChecks=0;mirrorContentHashChecks=0;changesByType={};changesByKind=bF();scanScope=TF();visitorEvents={};api={total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0};describeForLog(){return`
|
|
64
|
-
`+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}createSnapshot(){return{detectRuns:this.detectRuns,serverFileInfoRequests:this.serverFileInfoRequests,serverFileInfoHits:this.serverFileInfoHits,serverFileInfoMisses:this.serverFileInfoMisses,serverFoldersListed:this.serverFoldersListed,serverFoldersSkippedByScope:this.serverFoldersSkippedByScope,serverFoldersSkippedByWaterline:this.serverFoldersSkippedByWaterline,mirrorFoldersScanned:this.mirrorFoldersScanned,mirrorEntriesCollected:this.mirrorEntriesCollected,mirrorContentStatChecks:this.mirrorContentStatChecks,mirrorContentHashChecks:this.mirrorContentHashChecks,changesByType:{...this.changesByType},changesByKind:{...this.changesByKind},scanScope:{...this.scanScope},visitorEvents:{...this.visitorEvents},api:this.api}}},Er=class{constructor(e){this.options=e;this.serverRequestRunner=new ze({maxConcurrency:RF,signal:e.task.getAbortSignal()})}diagnostics=Sv();workspaceState;workspaceStateInitialized=!1;expandedServerFolders=new Set;serverRequestRunner;loggedChangeDetailCount=0;changeDetailLimitLogged=!1;loggedChangeDetailKeys=new Set;visitorTasks=[];visitorChangeKeys=new Set;getDiagnostics(e={}){this.diagnostics.api=this.workspaceStateInitialized?this.workspaceState.client.getDiagnostics({reset:e.reset,includeRecentCalls:e.includeApiRecentCalls})??vu():vu();let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}async detect(){this.diagnostics.detectRuns++;let e=Date.now();Pt.debug(`detect start targets=${this.options.targets?.size??"<all>"}`);try{if(this.isSignalAborted()||!await this.initializeWorkspaceState())return[];this.resetChangeDetailLogState();let t=await this.createSnapshot(),n=Date.now(),o=await this.matchSnapshot(t);for(Pt.debug(`match snapshot done elapsed=${Date.now()-n}ms changes=${o.changes.length} renamedFolders=${o.renamedFolders.length}`);await this.expandRenamedFolderChildren(t,o.renamedFolders);)n=Date.now(),o=await this.matchSnapshot(t),Pt.debug(`rematch after folder expansion done elapsed=${Date.now()-n}ms changes=${o.changes.length} renamedFolders=${o.renamedFolders.length}`);let i=o.changes.filter(a=>this.isTargetChange(a));for(let a of i)this.incrementRecordCounter(this.diagnostics.changesByType,a.type),this.recordChangeKind(a),this.dispatchChange(a,t);return await this.waitVisitorTasks(),Pt.debug(`detect diagnostics ${this.describeDiagnosticsForLog()}`),Pt.debug(`detect done elapsed=${Date.now()-e}ms changes=${i.length}`),i}catch(t){throw this.serverRequestRunner.cancel(t),await this.serverRequestRunner.waitAll(),t}}async initializeWorkspaceState(){if(this.workspaceStateInitialized)return!0;let e=this.options.workspace,t=await e.requireServerClient(e.activeServerUrl);if(this.isSignalAborted())return!1;let n=new Mt(e.getMirrorRoot()),o=await e.listWorkspaceProjects();return this.isSignalAborted()?!1:(this.workspaceState={client:t,mirror:n,trackedProjects:new Set(o.map(i=>"/"+i))},this.workspaceStateInitialized=!0,!0)}isSignalAborted(){return this.options.signal?.aborted===!0}async createSnapshot(){let e=Date.now(),t={server:new Map,mirror:new Map,skippedServerFolders:new Set,explicitMissingTargets:new Set};return this.diagnostics.scanScope.trackedProjects=this.workspaceState.trackedProjects.size,this.options.targets||(t.projectCompare=await this.computeProjectCompare()),await Promise.all([this.collectMirrorSnapshot(t),this.collectServerSnapshot(t)]),await this.collectMirrorRenameCandidates(t),Pt.debug(`create snapshot done elapsed=${Date.now()-e}ms serverEntries=${t.server.size} mirrorEntries=${t.mirror.size} skippedServerFolders=${t.skippedServerFolders.size} explicitMissingTargets=${t.explicitMissingTargets.size}`),t}async collectServerSnapshot(e){let t=Date.now();if(this.options.targets){let a=await this.filterCloneInProgressPaths(ft(this.options.targets));await Promise.all(a.map(s=>this.collectServerTarget(s,e))),Pt.debug(`collect server targets done elapsed=${Date.now()-t}ms targets=${this.options.targets.size} serverEntries=${e.server.size}`);return}let n=e.projectCompare,o=n?[...n.scannableProjectPaths]:[],i=n?n.renamedProjects.map(a=>a.newProject.remotePath):[];await Promise.all([...o.map(a=>this.collectServerEntry(a,e,!0)),...i.map(a=>this.collectServerEntry(a,e,!1))]),Pt.debug(`collect server projects done elapsed=${Date.now()-t}ms scannableProjects=${o.length} renameTargets=${i.length} trackedProjects=${this.workspaceState.trackedProjects.size} serverEntries=${e.server.size} skippedServerFolders=${e.skippedServerFolders.size}`)}async computeProjectCompare(){let[e,t]=await Promise.all([this.workspaceState.client.getProjects(),this.listMirrorProjectPaths()]),n=e.map(s=>({name:s.name,remotePath:"/"+s.name,id:s.id,desc:s.desc})),o=await Promise.all([...t].map(async s=>{let c=await this.workspaceState.mirror.readMeta(s);return{name:s.slice(1),remotePath:s,id:c?.id,desc:c?.desc}})),i=new Set(await this.filterCloneInProgressPaths([...this.workspaceState.trackedProjects])),a=gv({trackedProjects:i,serverProjects:n,mirrorProjects:o});return this.recordProjectCompareScanScope(a,e.length,t),a}recordProjectCompareScanScope(e,t,n){let o=e.scannableProjectPaths.size+e.renamedProjects.length,i=[...e.scannableProjectPaths].filter(s=>n.has(s)).length+e.renamedProjects.filter(s=>n.has(s.oldProject.remotePath)).length,a=this.diagnostics.scanScope;a.serverProjects=t,a.probedProjects=o,a.missingTrackedProjects=e.unavailableProjects.length,a.skippedUntrackedProjects=Math.max(t-o,0),a.mirrorProjectsScanned=i,a.skippedUntrackedMirrorProjects=[...n].filter(s=>!this.workspaceState.trackedProjects.has(s)).length}async collectServerTarget(e,t){let[n,o]=await Promise.all([this.collectServerEntry(e,t,!0),this.workspaceState.mirror.readMeta(e)]);n||!o||(t.explicitMissingTargets.add(e),await this.collectServerEntry(We(e)??"/",t,!0))}async collectServerEntry(e,t,n){this.options.task.throwIfAborted();let o=await this.getRemoteFileInfo(e);return o?(await this.collectKnownServerEntry(o,t,n),!0):!1}async collectKnownServerEntry(e,t,n){let o=this.createServerEntry(e);if(o.shouldReport=n,o.isFolder||await this.enrichFileContentState(o),t.server.set(o.remotePath,o),!o.isFolder)return;if(!n){t.skippedServerFolders.add(o.remotePath),this.diagnostics.serverFoldersSkippedByScope++;return}if(await this.canSkipServerFolder(o.remotePath,e)){t.skippedServerFolders.add(o.remotePath),this.diagnostics.serverFoldersSkippedByWaterline++,this.dispatchFolderSkipped(o.remotePath,e);return}let i=await this.listRemoteFiles(o.remotePath);await this.dispatchFolderScanned(o.remotePath,e,i),await Promise.all(i.map(a=>this.collectServerChild(a,t)))}async collectServerChild(e,t){await this.collectKnownServerEntry(e,t,!0)}async canSkipServerFolder(e,t){if(this.options.forceRefresh||this.expandedServerFolders.has(e))return!1;let n=await this.workspaceState.mirror.readMeta(e);return!n||n.modifyTime!==t.modifyTime||!await this.workspaceState.mirror.exists(e)?!1:this.hasHealthyDirectMirrorChildren(e)}async hasHealthyDirectMirrorChildren(e){let t;try{t=(await ku.promises.readdir(this.workspaceState.mirror.toLocalPath(e),{withFileTypes:!0})).filter(a=>a.name!==Y).map(a=>a.name).sort()}catch(i){if(F(i))return Pt.debug(`mirror folder baseline cannot be listed: ${e}`),!1;throw i}let n=await zr(this.workspaceState.mirror.root,Rc.posix.join(e,Y));if(!n.exists||n.damaged)return!1;let o=Object.keys(n.dotMeta).sort();return t.length===o.length&&t.every((i,a)=>i===o[a])}async enrichFileContentState(e){!this.options.forceRefresh||!e.serverInfo||(e.contentMatchesMirror=await this.getContentMatchesMirrorPath(e,e.remotePath))}async getContentMatchesMirrorPath(e,t){if(!e.serverInfo)return;let n=this.getValidServerHash(e.serverInfo),o=this.getValidServerSize(e.serverInfo);if(!(n===void 0||o===void 0)){try{this.diagnostics.mirrorContentStatChecks++;let i=await ku.promises.stat(this.workspaceState.mirror.toLocalPath(t));if(!i.isFile()||i.size!==o)return!1}catch(i){if(F(i))return Pt.debug(`mirror file content cannot be verified during remote detection: ${t}`),!1;throw i}return this.diagnostics.mirrorContentHashChecks++,await sc(this.workspaceState.mirror.toLocalPath(t))===n}}getValidServerHash(e){if(e.hash===void 0||e.hash===null)return;if(typeof e.hash!="string")throw new Error(`invalid file content hash: ${e.path}`);let t=e.hash.trim().toLowerCase();if(!EF.test(t))throw new Error(`invalid file content hash: ${e.path}`);return t}getValidServerSize(e){if(!(e.size===void 0||e.size===null)){if(!Number.isSafeInteger(e.size)||e.size<0)throw new Error(`invalid file content size: ${e.path}`);return e.size}}async collectMirrorSnapshot(e){if(this.options.targets){let i=await this.filterCloneInProgressPaths(ft(this.options.targets));await Promise.all(i.map(a=>this.collectMirrorRootAndSubtree(a,e)));return}let t=e.projectCompare,n=t?[...t.scannableProjectPaths]:[],o=t?t.renamedProjects.map(i=>i.oldProject.remotePath):[];await Promise.all([...n.map(i=>this.collectMirrorRootAndSubtree(i,e)),...o.map(i=>this.collectMirrorRootEntry(i,e))])}async collectMirrorRenameCandidates(e){if(!this.options.targets)return;let t=new Set;for(let i of e.mirror.values())i.meta.id&&t.add(i.meta.id);let n=new Set,o=new Set;for(let i of e.server.values()){let a=i.meta.id;if(!a||t.has(a))continue;n.add(a);let s=Rc.posix.dirname(i.remotePath);s!=="/"&&o.add(s)}n.size!==0&&await Promise.all([...o].map(i=>this.collectMirrorDirectMetaCandidates(i,n,e)))}async collectMirrorDirectMetaCandidates(e,t,n){this.options.task.throwIfAborted(),this.diagnostics.mirrorFoldersScanned++;let o=await this.workspaceState.mirror.listDirectMetaChildren(e);await Promise.all(o.map(async i=>{let a=i.meta.id;if(!a||!t.has(a)||n.mirror.has(i.path))return;let[s,c]=await Promise.all([this.workspaceState.mirror.exists(i.path),this.workspaceState.mirror.isFolder(i.path)]);n.mirror.set(i.path,{remotePath:i.path,isFolder:s?c:i.isFolder,meta:i.meta,exists:s}),this.diagnostics.mirrorEntriesCollected++}))}async listMirrorProjectPaths(){let[e,t]=await Promise.all([this.workspaceState.mirror.listDirectChildren("/"),this.workspaceState.mirror.listDirectMetaChildren("/")]);return new Set([...e,...t].map(n=>n.path))}async filterCloneInProgressPaths(e){return(await Promise.all(e.map(async n=>await this.shouldSkipCloneInProgressProject(n)?void 0:n))).filter(n=>n!==void 0)}async shouldSkipCloneInProgressProject(e){if(this.options.visitor)return!1;let t=We(e);if(!t)return!1;let n=await this.workspaceState.mirror.isCloneInProgress(t);return n&&Pt.debug(`skip clone in-progress mirror project: ${t}`),n}async collectMirrorRootAndSubtree(e,t){if(e==="/"){await this.collectMirrorSubtree(e,t);return}(await this.collectMirrorRootEntry(e,t))?.isFolder&&await this.collectMirrorSubtree(e,t)}async collectMirrorRootEntry(e,t){let[n,o,i]=await Promise.all([this.workspaceState.mirror.readMeta(e),this.workspaceState.mirror.exists(e),this.workspaceState.mirror.isFolder(e)]);if(n||o){let a={remotePath:e,isFolder:o?i:!!n?.type&&n.type!=="file",meta:n??{},exists:o};return t.mirror.set(e,a),this.diagnostics.mirrorEntriesCollected++,a}}async collectMirrorSubtree(e,t){this.options.task.throwIfAborted(),this.diagnostics.mirrorFoldersScanned++;let[n,o]=await Promise.all([this.workspaceState.mirror.listDirectChildren(e),this.workspaceState.mirror.listDirectMetaChildren(e)]),i=new Map(o.map(a=>[a.path,a]));await Promise.all(n.map(async a=>{let c=i.get(a.path)?.meta;(c||!a.isFolder)&&(t.mirror.set(a.path,{remotePath:a.path,isFolder:a.isFolder,meta:c??{},exists:!0}),this.diagnostics.mirrorEntriesCollected++),a.isFolder&&await this.collectMirrorSubtree(a.path,t)}));for(let a of o)t.mirror.has(a.path)||(t.mirror.set(a.path,{remotePath:a.path,isFolder:a.isFolder,meta:a.meta,exists:!1}),this.diagnostics.mirrorEntriesCollected++)}async matchSnapshot(e){let t=new Set,n=new Set,o=[],i=[];return await this.matchByPath(e,t,n,o,i),await this.matchById(e,t,n,o,i),this.addUnmatchedChanges(e,t,n,o),{changes:o,renamedFolders:i}}async matchByPath(e,t,n,o,i){let a=this.groupMirrorEntriesById(e.mirror);for(let s of e.server.values()){let c=e.mirror.get(s.remotePath);if(!c)continue;t.add(s.remotePath),n.add(c.remotePath);let l=this.findUnmatchedMirrorEntryById(a,s.meta.id,n);if(!s.meta.id||s.meta.id!==c.meta.id){if(l){if(!c.meta.id){await this.addRemoteRenameChange(e,s,l,n,o,i);continue}n.add(l.remotePath),this.addChange(o,this.createConflictChange(s,l.remotePath),e);continue}if(s.meta.id&&!c.meta.id){this.addChange(o,this.createMirrorRecoveryChange(s,c),e);continue}this.addChange(o,this.createConflictChange(s),e);continue}if(l){await this.addRemoteRenameChange(e,s,l,n,o,i);continue}this.addComparedChange(s,c,o,e)}}async matchById(e,t,n,o,i){let a=this.indexUniqueById(e.server,t),s=this.indexUniqueById(e.mirror,n);for(let c of e.server.values()){if(t.has(c.remotePath)||!c.meta.id)continue;let l=s.get(c.meta.id);if(!(!l||n.has(l.remotePath))&&a.get(c.meta.id)===c){if(t.add(c.remotePath),c.isFolder!==l.isFolder){n.add(l.remotePath),this.addChange(o,this.createConflictChange(c,l.remotePath),e);continue}await this.addRemoteRenameChange(e,c,l,n,o,i)}}}async addRemoteRenameChange(e,t,n,o,i,a){o.add(n.remotePath);let s=await this.createRenamedChange(t,n);this.addChange(i,s,e),t.isFolder&&a.push(s)}addUnmatchedChanges(e,t,n,o){this.addUnavailableTrackedProjectChanges(e,o);for(let i of e.server.values())t.has(i.remotePath)||i.shouldReport===!1||!this.isUnmatchedChangeInTargetSubtree(i.remotePath)||this.addChange(o,this.createRemoteChange(i,"remoteAdded"),e);for(let i of e.mirror.values())n.has(i.remotePath)||this.isUnmatchedChangeInTargetSubtree(i.remotePath)&&(!this.isUnderExplicitMissingTarget(e,i.remotePath)&&this.isUnderSkippedServerFolder(e,i.remotePath)||this.addChange(o,this.createRemoteChange(i,"remoteDeleted"),e))}addUnavailableTrackedProjectChanges(e,t){for(let n of e.projectCompare?.unavailableProjects??[])this.addChange(t,this.createProjectUnavailableChange(n),e)}async expandRenamedFolderChildren(e,t){let n=!1;return await Promise.all(t.map(async o=>{!o.isFolder||this.expandedServerFolders.has(o.remotePath)||this.isProjectRootRenameChange(o)||(this.expandedServerFolders.add(o.remotePath),e.skippedServerFolders.delete(o.remotePath),await this.collectServerEntry(o.remotePath,e,!0),n=!0)})),n}isProjectRootRenameChange(e){return!!e.oldRemotePath&&We(e.remotePath)===e.remotePath&&We(e.oldRemotePath)===e.oldRemotePath}addComparedChange(e,t,n,o){if(e.isFolder!==t.isFolder){this.addChange(n,this.createConflictChange(e),o);return}let i=this.isRemoteMetaChanged(t.meta,e.meta)||this.isRemoteContentBaselineChanged(t,e,e.contentMatchesMirror),a=!e.isFolder&&(t.exists===!1||this.isRemoteFileContentChanged(t,e,e.contentMatchesMirror,i));(a||i)&&this.addChange(n,this.createRemoteChange(e,"remoteModified",{contentChanged:a,metaChanged:i}),o)}indexUniqueById(e,t){let n=new Map,o=new Set;for(let i of e.values()){let a=i.meta.id;if(!(!a||t.has(i.remotePath))){if(n.has(a)){o.add(a);continue}n.set(a,i)}}for(let i of o)n.delete(i);return n}groupMirrorEntriesById(e){let t=new Map;for(let n of e.values()){let o=n.meta.id;if(!o)continue;let i=t.get(o);i?i.push(n):t.set(o,[n])}return t}findUnmatchedMirrorEntryById(e,t,n){if(!t)return;let o=e.get(t);if(!o)return;let i;for(let a of o)if(!n.has(a.remotePath)){if(i)return;i=a}return i}isUnderSkippedServerFolder(e,t){for(let n of e.skippedServerFolders)if(t!==n&&Q(t,n))return!0;return!1}isUnmatchedChangeInTargetSubtree(e){let t=this.options.targets;if(!t||t.size===0)return!0;for(let n of t)if(Q(e,n))return!0;return!1}isUnderExplicitMissingTarget(e,t){for(let n of e.explicitMissingTargets)if(Q(t,n))return!0;return!1}isTargetChange(e){let t=this.options.targets;return!t||t.size===0?!0:[...t].some(n=>Q(e.remotePath,n)||Q(n,e.remotePath)||!!e.oldRemotePath&&(Q(e.oldRemotePath,n)||Q(n,e.oldRemotePath)))}async getRemoteFileInfo(e){this.diagnostics.serverFileInfoRequests++;try{let t=await this.serverRequestRunner.addTask(()=>this.workspaceState.client.getFile(e));return this.diagnostics.serverFileInfoHits++,t}catch(t){if(this.workspaceState.client.isNotFoundError(t)){Pt.debug(`remote file disappeared during remote change detection: ${e}`),this.diagnostics.serverFileInfoMisses++;return}throw t}}async listRemoteFiles(e){return this.diagnostics.serverFoldersListed++,this.serverRequestRunner.addTask(()=>this.workspaceState.client.listFiles(e))}createServerEntry(e){return{remotePath:e.path,isFolder:!!e.isFolder,meta:Vt(e),contentMeta:Vt(e,{writeContentInfo:!0}),serverInfo:e}}isRemoteMetaChanged(e,t){return!no(e,t)}isRemoteContentBaselineChanged(e,t,n){return!t.contentMeta||t.isFolder||n===!1||t.contentMeta.hash===void 0||t.contentMeta.size===void 0?!1:n===!0&&((e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0))?!0:this.hasCompleteContentBaseline(e.meta)?e.meta.hash!==t.contentMeta.hash||e.meta.size!==t.contentMeta.size?n===!0:(e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0):!0}isRemoteFileContentChanged(e,t,n,o){return n===!1?!0:n===!0?!1:t.contentMeta&&this.hasCompleteContentBaseline(e.meta)&&t.contentMeta.hash!==void 0&&t.contentMeta.size!==void 0?e.meta.hash!==t.contentMeta.hash||e.meta.size!==t.contentMeta.size:t.contentMeta?.hash!==void 0&&t.contentMeta.size!==void 0?(e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0):(e.meta.revision??0)!==(t.meta.revision??0)?!0:!o&&(e.meta.modifyTime??0)!==(t.meta.modifyTime??0)}hasCompleteContentBaseline(e){return e.hash!==void 0&&e.size!==void 0}resetChangeDetailLogState(){this.loggedChangeDetailCount=0,this.changeDetailLimitLogged=!1,this.loggedChangeDetailKeys.clear(),this.visitorChangeKeys.clear(),this.visitorTasks.length=0}addChange(e,t,n){e.push(t),this.logChangeDetail(t,n)}dispatchChange(e,t){if(!this.options.visitor?.onChange||!this.isTargetChange(e))return;let n=this.getChangeDetailLogKey(e);if(this.visitorChangeKeys.has(n))return;this.visitorChangeKeys.add(n),this.incrementRecordCounter(this.diagnostics.visitorEvents,"change");let o={change:e,serverEntry:t.server.get(e.remotePath),mirrorEntry:t.mirror.get(e.oldRemotePath??e.remotePath)};this.addVisitorTask(()=>this.options.visitor?.onChange?.(o))}async dispatchFolderScanned(e,t,n){if(!this.options.visitor?.onFolderScanned)return;this.incrementRecordCounter(this.diagnostics.visitorEvents,"folderScanned");let o=await this.workspaceState.mirror.listDirectMetaChildren(e),i={remotePath:e,folderInfo:t,children:n,mirrorChildMetas:new Map(o.map(a=>[Rc.posix.basename(a.path),a.meta])),serverChildPaths:new Set(n.map(a=>a.path))};this.addVisitorTask(()=>this.options.visitor?.onFolderScanned?.(i))}dispatchFolderSkipped(e,t){if(!this.options.visitor?.onFolderSkipped)return;this.incrementRecordCounter(this.diagnostics.visitorEvents,"folderSkipped");let n={remotePath:e,folderInfo:t,reason:"waterlineUnchanged"};this.addVisitorTask(()=>this.options.visitor?.onFolderSkipped?.(n))}addVisitorTask(e){this.visitorTasks.push(()=>Promise.resolve(e()))}async waitVisitorTasks(){for(let e of this.visitorTasks)await e()}logChangeDetail(e,t){if(!Pt.isDebugEnabled()||!this.isTargetChange(e))return;let n=this.getChangeDetailLogKey(e);if(!this.loggedChangeDetailKeys.has(n)){if(this.loggedChangeDetailKeys.add(n),this.loggedChangeDetailCount>=Cv){this.changeDetailLimitLogged||(Pt.debug(`change detail ... displayed=${Cv} further changes omitted`),this.changeDetailLimitLogged=!0);return}this.loggedChangeDetailCount++,Pt.debug(`change detail ${this.loggedChangeDetailCount} ${this.describeChange(e,t)}`)}}getChangeDetailLogKey(e){return`${e.type}|${e.remotePath}|${e.oldRemotePath??""}`}describeChange(e,t){let n=t.server.get(e.remotePath),o=t.mirror.get(e.oldRemotePath??e.remotePath);return[`type=${e.type}`,`remotePath=${e.remotePath}`,`oldRemotePath=${e.oldRemotePath??"<none>"}`,`fileId=${e.fileId??"<none>"}`,`isFolder=${e.isFolder}`,`contentChanged=${e.contentChanged}`,`metaChanged=${e.metaChanged}`,`serverRevision=${this.formatLogValue(n?.meta.revision)}`,`mirrorRevision=${this.formatLogValue(o?.meta.revision)}`,`serverModifyTime=${this.formatLogValue(n?.meta.modifyTime)}`,`mirrorModifyTime=${this.formatLogValue(o?.meta.modifyTime)}`,`serverModifier=${this.formatLogValue(n?.meta.modifier)}`,`mirrorModifier=${this.formatLogValue(o?.meta.modifier)}`].join(" ")}formatLogValue(e){return e===void 0?"<none>":String(e)}describeDiagnosticsForLog(){return this.diagnostics.api=this.workspaceState.client.getDiagnostics()??vu(),this.diagnostics.describeForLog()}recordChangeKind(e){switch(e.type){case"remoteModified":e.contentChanged?this.diagnostics.changesByKind.contentModified++:e.metaChanged&&this.diagnostics.changesByKind.metaOnlyModified++;break;case"remoteDeleted":this.diagnostics.changesByKind.remoteDeleted++;break;case"remoteProjectUnavailable":this.diagnostics.changesByKind.remoteProjectUnavailable++;break;case"remoteAdded":this.diagnostics.changesByKind.remoteAdded++;break;case"remoteRenamed":this.diagnostics.changesByKind.remoteRenamed++;break;case"conflict":this.diagnostics.changesByKind.conflict++;break;default:break}}incrementRecordCounter(e,t){e[t]=(e[t]??0)+1}resetDiagnostics(){this.diagnostics=Sv()}createRemoteChange(e,t,n){return{path:Ne(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},type:t,isFolder:e.isFolder,contentChanged:n?.contentChanged??(t!=="remoteDeleted"&&!e.isFolder),metaChanged:n?.metaChanged??t!=="remoteDeleted",...t==="remoteDeleted"?{}:{modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}}createProjectUnavailableChange(e){return{path:Ne(e.remotePath),remotePath:e.remotePath,...e.id!==void 0?{fileId:e.id}:{},type:"remoteProjectUnavailable",isFolder:!0,contentChanged:!1,metaChanged:!1}}async createRenamedChange(e,t){let n=e.remotePath===t.remotePath?e.contentMatchesMirror:this.options.forceRefresh?await this.getContentMatchesMirrorPath(e,t.remotePath):void 0,o=this.isRemoteMetaChanged(t.meta,e.meta)||this.isRemoteContentBaselineChanged(t,e,n),i=!e.isFolder&&this.isRemoteFileContentChanged(t,e,n,o);return{path:Ne(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:Ne(t.remotePath),oldRemotePath:t.remotePath,type:"remoteRenamed",isFolder:e.isFolder,contentChanged:i,metaChanged:o,modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}createMirrorRecoveryChange(e,t){return this.createRemoteChange(e,"remoteModified",{contentChanged:this.isMirrorRecoveryContentChanged(e,t),metaChanged:!0})}isMirrorRecoveryContentChanged(e,t){return e.isFolder?!1:t?t.exists===!1?!0:this.isRemoteFileContentChanged(t,e,e.contentMatchesMirror,!0):e.contentMatchesMirror!==!0}createConflictChange(e,t){return{path:Ne(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:t?Ne(t):void 0,oldRemotePath:t,type:"conflict",isFolder:e.isFolder,contentChanged:!e.isFolder,metaChanged:!0,modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}};function Sv(){return new wu}function bF(){return{contentModified:0,metaOnlyModified:0,remoteDeleted:0,remoteProjectUnavailable:0,remoteAdded:0,remoteRenamed:0,conflict:0}}function TF(){return{trackedProjects:0,serverProjects:0,probedProjects:0,missingTrackedProjects:0,skippedUntrackedProjects:0,mirrorProjectsScanned:0,skippedUntrackedMirrorProjects:0}}function vu(){return{total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0}}gr();qt();var xF=4,he=T("sync.fetch"),Ru=class extends ni{projectTargets=0;resourceTargets=0;countedResources=0;remoteResourceCountRequests=0;mirrorResourceCountRequests=0;contentDownloadsScheduled=0;mirrorFilesMoved=0;mirrorResourcesRemoved=0;mirrorPhysicalChildrenRemoved=0;mirrorMetaWrites=0;downloaded=0;deleted=0;skippedFolders=0;updatedMetas=0;detector;setDetector(e){this.detector=e}createSnapshot(){return{runs:this.runs,durationMs:this.durationMs,projectTargets:this.projectTargets,resourceTargets:this.resourceTargets,countedResources:this.countedResources,remoteResourceCountRequests:this.remoteResourceCountRequests,mirrorResourceCountRequests:this.mirrorResourceCountRequests,contentDownloadsScheduled:this.contentDownloadsScheduled,mirrorFilesMoved:this.mirrorFilesMoved,mirrorResourcesRemoved:this.mirrorResourcesRemoved,mirrorPhysicalChildrenRemoved:this.mirrorPhysicalChildrenRemoved,mirrorMetaWrites:this.mirrorMetaWrites,downloaded:this.downloaded,deleted:this.deleted,skippedFolders:this.skippedFolders,updatedMetas:this.updatedMetas,...this.detector?{detector:this.detector}:{},api:this.api}}},Fn=class extends Ae{mirror;fileFetcher;fetchResult;diagnostics=vv();downloadTask;downloadTotal=0;constructor(e,t){super(e,t),this.mirror=this.createMirrorStore(),this.fileFetcher=new Pc({maxConcurrency:xF,signal:this.task.getAbortSignal(),getContentStream:async n=>{mt(this.task.getAbortSignal());let o=await this.getApiClient();return mt(this.task.getAbortSignal()),o.getFileContentStream(n)}}),this.fetchResult={mirrorRoot:this.mirrorRoot,downloaded:[],deleted:[],skippedFolders:[],updatedMetas:[]}}execute(){return this.fetchTrackedMirror()}getDiagnostics(e={}){this.syncResultDiagnostics();let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}async fetchTrackedMirror(){let e=this.diagnostics.startRun(),t=!1;he.info("fetch start: {0}",this.createFetchScopeLog()),this.task.start(100);let n=this.task.subTaskMonitor(5),o=this.task.subTaskMonitor(5),i=this.task.subTaskMonitor(90),a=[];if(this.hasKnownChanges(this.options.changes)){n.start(1),he.info("fetch prepare start"),this.task.throwIfAborted(),await Gr.promises.mkdir(this.mirrorRoot,{recursive:!0}),n.step(1),he.info("fetch prepare done: knownChanges={0}",this.options.changes.length),this.downloadTask=i;try{return await this.fetchKnownChanges(o),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}finally{t||this.finishRunDiagnostics(e),this.downloadTask=void 0,this.downloadTotal=0}}n.start(1);let s=this.resolveFetchProjectPaths(),c=await this.getApiClient(),l=c.getProjects();he.info("fetch prepare start"),this.task.throwIfAborted(),await Gr.promises.mkdir(this.mirrorRoot,{recursive:!0});let p=this.createWorkspaceStore(this.mirror).listProjectPaths(),[m,g,d]=await Promise.all([l,this.readMirrorChildMetas("/"),p]),f=new Set(d),y=new Set([...m.map(C=>"/"+C.name),...f]);await this.removeMissingMirrorChildren("/",y,g),s&&(a=await this.markNewFetchProjects(s)),n.step(1),he.info("fetch prepare done: serverProjects={0}",m.length),this.downloadTask=i;try{if(s){this.diagnostics.projectTargets=s.length,he.info("fetch count resources start: {0}",this.createFetchScopeLog());let S=await this.countFetchResources(o,()=>this.countRemoteFiles(s));return he.info("fetch count resources done: resources={0}",S),this.startFetchProgress(S),s.length===0&&this.completeDownloadProgress(),he.info("fetch mirror update start: targets={0}",s.length),await this.fetchWithRemoteChangeDetector({targets:new Set(s),forceRefresh:this.options.forceRefresh===!0}),this.completeDownloadProgress(),await this.clearNewFetchProjectMarkers(a),he.info("fetch mirror update done: targets={0}",s.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}let C=await this.resolveTargetRemotePaths(this.options.paths);if(C){let S=ft(C);this.diagnostics.resourceTargets=S.length,he.info("fetch count resources start: {0}",this.createFetchScopeLog());let k=await this.countFetchResources(o,()=>(this.diagnostics.mirrorResourceCountRequests++,this.mirror.countMetaResources(S)));return he.info("fetch count resources done: resources={0}",k),this.startFetchProgress(k),S.length===0&&this.completeDownloadProgress(),he.info("fetch mirror update start: targets={0}",S.length),await this.fetchWithRemoteChangeDetector({targets:new Set(S),forceRefresh:!1}),this.completeDownloadProgress(),he.info("fetch mirror update done: targets={0}",S.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}let v=m.filter(S=>f.has("/"+S.name)),P=v.map(S=>"/"+S.name);a=await this.markNewFetchProjects(P),this.diagnostics.projectTargets=P.length,he.info("fetch count resources start: {0}",this.createFetchScopeLog());let u=await this.countFetchResources(o,()=>this.countRemoteFiles(P));return he.info("fetch count resources done: resources={0}",u),this.startFetchProgress(u),v.length===0&&this.completeDownloadProgress(),he.info("fetch mirror update start: targets={0}",v.length),await this.fetchWithRemoteChangeDetector({forceRefresh:!1}),this.completeDownloadProgress(),await this.clearNewFetchProjectMarkers(a),he.info("fetch mirror update done: targets={0}",v.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}finally{t||(await this.cleanupNewFetchProjectsAfterFailure(a),this.finishRunDiagnostics(e)),this.downloadTask=void 0,this.downloadTotal=0}}async markNewFetchProjects(e){let t=[];try{for(let n of e){let[o,i]=await Promise.all([this.mirror.isCloneInProgress(n),this.mirror.exists(n)]);!o&&i||(o&&(await this.mirror.removePath(n),await this.mirror.removeMeta(n)),t.push(n),await this.mirror.markCloneInProgress(n))}return t}catch(n){throw await this.cleanupNewFetchProjectsAfterFailure(t),n}}async clearNewFetchProjectMarkers(e){await Promise.all(e.map(t=>this.mirror.clearCloneInProgress(t)))}async cleanupNewFetchProjectsAfterFailure(e){if(e.length!==0)try{await Promise.all(e.map(async t=>{await this.mirror.removePath(t),await this.mirror.removeMeta(t)}))}catch(t){he.warn(`fetch failed, cleanup new mirror projects failed: ${e.join(", ")}`,t)}}createFetchScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.projectNames?`projects=${this.options.projectNames.join(", ")}`:this.options.paths?`paths=${this.options.paths.join(", ")}`:"<tracked>"}logFetchDone(){this.syncResultDiagnostics(),he.info("fetch done: downloaded={0} deleted={1} updatedMetas={2} skippedFolders={3}",this.fetchResult.downloaded.length,this.fetchResult.deleted.length,this.fetchResult.updatedMetas.length,this.fetchResult.skippedFolders.length),he.debug(`fetch diagnostics ${this.diagnostics.describeForLog()}`)}resolveFetchProjectPaths(){if(!this.options.projectNames){U(!this.options.forceRefresh,"FetchOptions.forceRefresh can only be used with FetchOptions.projectNames");return}return U(!this.options.paths,"FetchOptions.projectNames and FetchOptions.paths cannot be used together"),ft(new Set(this.options.projectNames.map(e=>Tt(e))))}startFetchProgress(e){this.downloadTotal=Math.max(e,1),this.progressTask.start(this.downloadTotal)}async countFetchResources(e,t){e.start(1);let n=await t();return this.diagnostics.countedResources+=n,e.step(1),n}completeDownloadProgress(){this.progressTask.progress(this.downloadTotal||1)}stepFetchProgress(){this.progressTask.step(1)}get progressTask(){return this.downloadTask??this.task}async countRemoteFiles(e){let t=await this.getApiClient();return this.diagnostics.remoteResourceCountRequests+=e.length,(await Promise.all(e.map(o=>t.countFiles(o)))).reduce((o,i)=>o+i,0)}async fetchWithRemoteChangeDetector(e){let t=[],n=[],o=new Map,i=new Er({workspace:this.context,targets:e.targets,task:this.progressTask,forceRefresh:e.forceRefresh,visitor:{onFolderScanned:s=>this.prepareScannedFolder(s,n),onFolderSkipped:s=>this.applySkippedFolder(s),onChange:s=>{if(this.isActionableFetchChange(s.change,e.targets))return this.applyRemoteChange(s,t,o)}}});await i.detect(),this.diagnostics.setDetector(i.getDiagnostics());let a=(await Promise.all(t)).filter(s=>s instanceof Error);if(a.length>0)throw a[0];await this.writeScannedFolderMetas(n,o)}async fetchKnownChanges(e){let t=this.getKnownFetchChanges();this.diagnostics.resourceTargets=ft(new Set(this.getKnownChangeTargetRemotePaths(t))).length,he.info("fetch count resources start: {0}",this.createFetchScopeLog());let n=await this.countFetchResources(e,async()=>t.length);if(he.info("fetch count resources done: resources={0}",n),this.startFetchProgress(n),t.length===0){this.completeDownloadProgress();return}he.info("fetch mirror update start: changes={0}",t.length);let o=await this.getApiClient(),i=[],a=new Map;for(let c of t)await this.applyKnownRemoteChange(c,o,i,a);let s=(await Promise.all(i)).filter(c=>c instanceof Error);if(s.length>0)throw s[0];this.completeDownloadProgress(),this.captureApiDiagnostics(o),he.info("fetch mirror update done: changes={0}",t.length)}getKnownFetchChanges(){return la(this.options.changes??[]).filter(e=>!Cu(e))}async applyKnownRemoteChange(e,t,n,o){if(e.type==="remoteDeleted"){await this.removeMirrorResource(e.oldRemotePath??e.remotePath),this.stepFetchProgress();return}let i=await this.getKnownRemoteFileInfo(t,e.remotePath);if(!i){await this.removeMirrorResource(e.remotePath),this.stepFetchProgress();return}if(e.type==="remoteRenamed"){await this.applyRemoteRenamedChange(e,i,n,o);return}if(e.type==="conflict"){await this.applyRemoteConflictChange(e,i,n,o);return}await this.applyRemotePresentChange(e,i,n,o)}async getKnownRemoteFileInfo(e,t){try{return await e.getFile(t)}catch(n){if(e.isNotFoundError(n)){he.debug(`known remote change target disappeared before fetch: ${t}`);return}throw n}}isActionableFetchChange(e,t){return Cu(e)?!1:!t||t.size===0?!0:[...t].some(n=>Q(e.remotePath,n)||!!e.oldRemotePath&&Q(e.oldRemotePath,n))}async prepareScannedFolder(e,t){this.task.throwIfAborted(),await Gr.promises.mkdir(this.mirror.toLocalPath(e.remotePath),{recursive:!0}),t.push(e)}async writeScannedFolderMetas(e,t){for(let n of e)await this.writeMirrorChildMetas(n.remotePath,n.mirrorChildMetas,n.children.map(o=>t.get(o.path)??o),n.serverChildPaths)&&this.addUpdatedMeta(n.remotePath),await this.removeMissingMirrorPhysicalChildren(n.remotePath,n.serverChildPaths)}async applySkippedFolder(e){this.addSkippedFolder(e.remotePath),await this.completeSkippedFolderProgress(e.remotePath)}async applyRemoteChange(e,t,n){let o=e.change;if(o.type==="remoteDeleted"){await this.removeMirrorResource(o.oldRemotePath??o.remotePath),this.stepFetchProgress();return}if(o.type==="remoteRenamed"){await this.applyRemoteRenamedChange(o,e.serverEntry?.serverInfo,t,n);return}if(o.type==="conflict"){let i=e.serverEntry?.serverInfo;U(i,`remote conflict missing server entry: ${o.remotePath}`),await this.applyRemoteConflictChange(o,i,t,n);return}if(e.serverEntry?.serverInfo){await this.applyRemotePresentChange(o,e.serverEntry.serverInfo,t,n);return}this.stepFetchProgress()}async applyRemoteConflictChange(e,t,n,o){if(e.oldRemotePath&&!t.isFolder&&e.contentChanged===!1){if(await this.moveMirrorFile(e.oldRemotePath,e.remotePath)){await this.removeMirrorMetaIfReadable(e.oldRemotePath),this.addDeleted(e.oldRemotePath),await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}await this.removeMirrorResource(e.oldRemotePath),await this.removeMirrorResource(e.remotePath),await this.applyRemotePresentChange(e,t,n,o,!0);return}if(e.oldRemotePath&&await this.removeMirrorResource(e.oldRemotePath),t.isFolder||e.contentChanged!==!1){await this.removeMirrorResource(e.remotePath),await this.applyRemotePresentChange(e,t,n,o);return}await this.applyRemotePresentChange(e,t,n,o,!t.isFolder&&!await this.mirror.exists(e.remotePath))}async applyRemoteRenamedChange(e,t,n,o){if(!e.oldRemotePath){if(t){await this.applyRemotePresentChange(e,t,n,o);return}this.stepFetchProgress();return}if(t&&!t.isFolder&&e.contentChanged===!1&&await this.moveMirrorFile(e.oldRemotePath,e.remotePath)){await this.removeMirrorMetaIfReadable(e.oldRemotePath),this.addDeleted(e.oldRemotePath),await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}if(await this.removeMirrorResource(e.oldRemotePath),t){await this.applyRemotePresentChange(e,t,n,o);return}this.stepFetchProgress()}async applyRemotePresentChange(e,t,n,o,i=!1){if(t.isFolder){await this.applyRemoteFolder(t),this.stepFetchProgress();return}if(!i&&e.contentChanged===!1){await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}this.addPendingDownload(n,this.fetchMirrorFile(t).then(a=>(o.set(a.path,a),this.writeMirrorMetaIfChanged(a,void 0))).finally(()=>this.stepFetchProgress()))}async applyRemoteFolder(e){this.task.throwIfAborted(),await Gr.promises.mkdir(this.mirror.toLocalPath(e.path),{recursive:!0}),await this.writeMirrorMetaIfChanged(e,await this.mirror.readMeta(e.path))}addPendingDownload(e,t){this.diagnostics.contentDownloadsScheduled++,e.push(t.then(()=>{},n=>n instanceof Error?n:new Error(String(n??"fetch download failed"))))}async completeSkippedFolderProgress(e){let t=Math.max(await this.mirror.countMetaResources([e])-1,0);t>0&&this.progressTask.step(t)}async fetchMirrorFile(e){let t=this.mirror.toLocalPath(e.path),n=await this.fileFetcher.fetchToLocal(e.path,t),o={...e,revision:n.revision??e.revision,modifyTime:n.modifyTime??e.modifyTime};return this.addDownloaded(e.path),o}async readMirrorChildMetas(e){let t=await Zi(this.mirror.root,Jr.posix.join(e,Y),{strict:!1});return new Map(Object.entries(t))}async writeMirrorMetaIfChanged(e,t){this.isMirrorMetaSame(t,e)||(await this.mirror.writeMeta(e,this.task),this.diagnostics.mirrorMetaWrites++)}isMirrorMetaSame(e,t){return e!==void 0&&(0,Pu.isDeepStrictEqual)(e,Vt(t,{writeContentInfo:!0}))}async writeMirrorChildMetas(e,t,n,o){let i={};for(let[c,l]of t)(!o||o.has(Jr.posix.join(e,c)))&&(i[c]=l);for(let c of n)i[Jr.posix.basename(c.path)]=Vt(c,{writeContentInfo:!0});let a=Jr.posix.join(e,Y),s=await zr(this.mirror.root,a);return s.exists&&!s.damaged&&(0,Pu.isDeepStrictEqual)(i,Object.fromEntries(t))?!1:(await ic(this.mirror.root,a,i),!0)}async removeMissingMirrorChildren(e,t,n){let o={},i=[...n.keys()].map(a=>({name:a,path:Jr.posix.join(e,a)})).filter(a=>!t.has(a.path));await Promise.all(i.map(a=>this.mirror.removePath(a.path)));for(let a of i)o[a.name]=void 0,this.addDeleted(a.path);Object.keys(o).length>0&&await this.mirror.patchMeta(e,o,this.task),await this.removeMissingMirrorPhysicalChildren(e,t)}async removeMissingMirrorPhysicalChildren(e,t){let n=this.mirror.toLocalPath(e),o;try{o=await Gr.promises.readdir(n,{withFileTypes:!0})}catch(a){if(F(a)){he.debug(`mirror folder physical children cannot be listed: ${e}`);return}throw a}let i=o.filter(a=>a.name!==Y).map(a=>Jr.posix.join(e,a.name)).filter(a=>!t.has(a));await Promise.all(i.map(a=>this.mirror.removePath(a))),this.diagnostics.mirrorPhysicalChildrenRemoved+=i.length;for(let a of i)this.addDeleted(a)}async removeMirrorResource(e){await Promise.all([this.mirror.removePath(e),this.removeMirrorMetaIfReadable(e)]),this.diagnostics.mirrorResourcesRemoved++,this.addDeleted(e)}async removeMirrorMetaIfReadable(e){try{await this.mirror.removeMeta(e)}catch(t){if(t instanceof Xo){he.debug(`skip removing mirror meta from damaged .meta during fetch: ${e}`,t);return}throw t}}async moveMirrorFile(e,t){let n=this.mirror.toLocalPath(e),o=this.mirror.toLocalPath(t);try{return this.task.throwIfAborted(),await Gr.promises.mkdir(Jr.dirname(o),{recursive:!0}),await Gr.promises.rm(o,{force:!0,recursive:!0}),await Gr.promises.rename(n,o),this.diagnostics.mirrorFilesMoved++,!0}catch(i){if(F(i))return he.debug(`mirror file cannot be moved during remote rename: ${e} -> ${t}`),!1;throw i}}addDownloaded(e){this.addUniqueResultPath(this.fetchResult.downloaded,e)}addDeleted(e){this.addUniqueResultPath(this.fetchResult.deleted,e)}addSkippedFolder(e){this.addUniqueResultPath(this.fetchResult.skippedFolders,e)}addUpdatedMeta(e){this.addUniqueResultPath(this.fetchResult.updatedMetas,e)}addUniqueResultPath(e,t){e.includes(t)||e.push(t)}captureApiDiagnostics(e){let t=e.getDiagnostics();t&&this.diagnostics.captureApiDiagnostics(t)}finishRunDiagnostics(e){this.diagnostics.finishRun(e)}syncResultDiagnostics(){this.diagnostics.downloaded=this.fetchResult.downloaded.length,this.diagnostics.deleted=this.fetchResult.deleted.length,this.diagnostics.skippedFolders=this.fetchResult.skippedFolders.length,this.diagnostics.updatedMetas=this.fetchResult.updatedMetas.length}resetDiagnostics(){this.diagnostics=vv()}};function vv(){return new Ru}var Eu=b(require("fs"));Je();$();G();it();Qo();var br=T("sync.checkout"),Ec=class extends Ae{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){br.info("checkout start: {0}",this.options.projectNames.join(", ")||"<none>");let e=await this.createCheckoutItems();if(e.length===0)return this.task.start(1),this.task.finish(),br.info("checkout done: <none>"),{projectNames:[]};let t=e.reduce((o,i)=>o+i.total,0);this.task.start(Math.max(t,1));for(let o of e)this.task.throwIfAborted(),await this.checkoutProject(o.projectPath,this.task);let n=e.map(o=>o.projectPath);return br.info("checkout cleanup status start: {0}",n.join(", ")),this.clearSyncStatusTargets(n),br.info("checkout cleanup status done"),e.some(o=>!o.workspaceProjectExists)&&this.context.notifyLocalProjectsChanged?.(),this.task.finish(),br.info("checkout done: {0}",e.map(o=>o.projectName).join(", ")),{projectNames:e.map(o=>o.projectName)}}async createCheckoutItems(){let e=[],t=[...new Set(this.options.projectNames.map(n=>Tt(n)))];for(let n of t){await this.assertMirrorProjectDirectory(n);let o=await iu(this.workspace.toLocalPath(n));e.push({projectName:n.slice(1),projectPath:n,total:Math.max(await this.workspace.countCheckoutResources(n),1),workspaceProjectExists:o})}return e}async assertMirrorProjectDirectory(e){let t=this.mirror.toLocalPath(e);if(!(await Eu.promises.stat(t)).isDirectory())throw new Error(`checkout source must be a mirror project directory: ${e}`)}async checkoutProject(e,t){let n=Date.now(),o=this.workspace.toLocalPath(e),i=await KS(o);if(br.debug(`checkout project start: projectPath=${e} projectBlank=${i}`),!i){await this.workspace.checkoutFromMirror(e,t),br.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`);return}try{await this.workspace.prepareCheckoutDirectory(e,t),await pc(this.workspaceRoot,e),await this.workspace.checkoutMirrorDirectory(e,t),t.throwIfAborted(),await this.workspace.copyMirrorMetaInfo(e,!0),t.step(1)}catch(a){throw await this.rollbackNewProjectCheckout(e,o,a),a}finally{await dc(this.workspaceRoot,e)}br.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`)}async rollbackNewProjectCheckout(e,t,n){try{await Eu.promises.rm(t,{force:!0,recursive:!0}),br.info(`checkout failed, rolled back new workspace project: projectPath=${e}`)}catch(o){br.warn(`checkout failed, rollback new workspace project failed: projectPath=${e} cause=${String(n)}`,o)}}};gr();var bc=T("sync.clone"),Tc=class extends Ae{async execute(){bc.info("clone start: {0}",this.options.projectNames?.join(", ")??"<all>"),this.task.start(100);let e=this.task.subTaskMonitor(5),t=this.task.subTaskMonitor(68),n=this.task.subTaskMonitor(17),o=this.task.subTaskMonitor(6),i=this.task.subTaskMonitor(4);e.start(1),bc.info("clone prepare start"),this.task.throwIfAborted(),await kv.promises.mkdir(this.mirrorRoot,{recursive:!0});let a=await this.resolveCloneProjects();e.step(1);let s=a.map(p=>p.name),c=s.map(p=>Tt(p));bc.info("clone prepare done: projects={0}",s.join(", ")),await new Fn(this.context,{task:t,projectNames:s,forceRefresh:!0}).execute(),a.length===0&&(t.start(1),t.step(1)),await new Ec(this.context,{task:n,projectNames:s}).execute();let l=await Cc(this.context,o,c);return i.finish(),bc.info("clone done: {0}",s.join(", ")),{projectNames:s,oldFiles:l}}async resolveCloneProjects(){if(this.options.projectNames&&this.options.projectNames.length===0)return[];let e=await this.getApiClient(),t=await e.getProjects(),n=this.options.projectNames??t.map(i=>i.name),o=[...new Set(n.map(i=>Tt(i)))];return Promise.all(o.map(i=>e.getFile(i)))}};var Yr=b(require("fs")),It=b(require("path"));it();$();Je();G();Ce();qt();var ii=b(require("fs")),Fv=b(require("os")),Tr=b(require("path")),Mv=require("node:util");var ua=b(require("fs")),xv=b(require("os")),xu=b(require("path"));$();Je();hu();var da=b(require("fs"));function Pv(r,e){let t={};for(let i=0;i<e.length;i++){let a=e[i];t[a]?t[a].push(i):t[a]=[i]}let o=[{buffer1index:-1,buffer2index:-1,chain:null}];for(let i=0;i<r.length;i++){let a=r[i],s=t[a]||[],c=0,l=o[0];for(let p=0;p<s.length;p++){let m=s[p],g;for(g=c;g<o.length&&!(o[g].buffer2index<m&&(g===o.length-1||o[g+1].buffer2index>m));g++);if(g<o.length){let d={buffer1index:i,buffer2index:m,chain:o[g]};if(c===o.length?o.push(l):o[c]=l,c=g+1,l=d,c===o.length)break}}o[c]=l}return o[o.length-1]}function wv(r,e){let t=Pv(r,e),n=[],o=r.length,i=e.length;for(let a=t;a!==null;a=a.chain){let s=o-a.buffer1index-1,c=i-a.buffer2index-1;o=a.buffer1index,i=a.buffer2index,(s||c)&&n.push({buffer1:[o+1,s],buffer1Content:r.slice(o+1,o+1+s),buffer2:[i+1,c],buffer2Content:e.slice(i+1,i+1+c)})}return n.reverse(),n}function Rv(r,e){let t=Pv(r,e),n=[],o=r.length,i=e.length;function a(s,c,l){let p=[];for(let m=0;m<l;m++)p.push(s[c+m]);return{offset:c,length:l,chunk:p}}for(let s=t;s!==null;s=s.chain){let c=o-s.buffer1index-1,l=i-s.buffer2index-1;o=s.buffer1index,i=s.buffer2index,(c||l)&&n.push({buffer1:a(r,s.buffer1index+1,c),buffer2:a(e,s.buffer2index+1,l)})}return n.reverse(),n}function FF(r,e,t){let n=[];function o(c,l){n.push({ab:l,oStart:c.buffer1[0],oLength:c.buffer1[1],abStart:c.buffer2[0],abLength:c.buffer2[1]})}wv(e,r).forEach(c=>o(c,"a")),wv(e,t).forEach(c=>o(c,"b")),n.sort((c,l)=>c.oStart-l.oStart);let i=[],a=0;function s(c){c>a&&(i.push({stable:!0,buffer:"o",bufferStart:a,bufferLength:c-a,bufferContent:e.slice(a,c)}),a=c)}for(;n.length;){let c=n.shift(),l=c.oStart,p=c.oStart+c.oLength,m=[c];for(s(l);n.length;){let g=n[0],d=g.oStart;if(d>p)break;p=Math.max(p,d+g.oLength),m.push(n.shift())}if(m.length===1){if(c.abLength>0){let g=c.ab==="a"?r:t;i.push({stable:!0,buffer:c.ab,bufferStart:c.abStart,bufferLength:c.abLength,bufferContent:g.slice(c.abStart,c.abStart+c.abLength)})}}else{let g={a:[r.length,-1,e.length,-1],b:[t.length,-1,e.length,-1]};for(;m.length;){c=m.shift();let P=c.oStart,u=P+c.oLength,S=c.abStart,k=S+c.abLength,R=g[c.ab];R[0]=Math.min(S,R[0]),R[1]=Math.max(k,R[1]),R[2]=Math.min(P,R[2]),R[3]=Math.max(u,R[3])}let d=g.a[0]+(l-g.a[2]),f=g.a[1]+(p-g.a[3]),y=g.b[0]+(l-g.b[2]),C=g.b[1]+(p-g.b[3]),v={stable:!1,aStart:d,aLength:f-d,aContent:r.slice(d,f),oStart:l,oLength:p-l,oContent:e.slice(l,p),bStart:y,bLength:C-y,bContent:t.slice(y,C)};i.push(v)}a=p}return s(e.length),i}function Ev(r,e,t,n){n=Object.assign({excludeFalseConflicts:!0,stringSeparator:/\s+/},n);let i=typeof r=="string",a=typeof e=="string",s=typeof t=="string";i&&(r=r.split(n.stringSeparator)),a&&(e=e.split(n.stringSeparator)),s&&(t=t.split(n.stringSeparator));let c=[],l=FF(r,e,t),p=[];function m(){p.length&&c.push({ok:p}),p=[]}function g(d,f){if(d.length!==f.length)return!1;for(let y=0;y<d.length;y++)if(d[y]!==f[y])return!1;return!0}return l.forEach(d=>{d.stable?p.push(...d.bufferContent):n.excludeFalseConflicts&&g(d.aContent,d.bContent)?p.push(...d.aContent):(m(),c.push({conflict:{a:d.aContent,aIndex:d.aStart,o:d.oContent,oIndex:d.oStart,b:d.bContent,bIndex:d.bStart}}))}),m(),c}G();To();var Tv=T("sync.three-way-merge"),MF=/\n|\r\n|\r/;function bu(r){return r.split(MF)}function DF(r){return r.includes(`\r
|
|
56
|
+
`,"utf-8")}toFileMutationMetadata(e){let{localContentPath:t,contentChanged:n,...o}=e;return o}toMoveFileMutationMetadata(e){let{isFolder:t,...n}=this.toFileMutationMetadata(e);return n}toFileMutationContext(e,t){return e==="/file/create"?{action:"create",path:t.path,isFolder:t.isFolder}:e==="/file/move"?{action:"move",path:t.path,targetPath:t.targetPath,isFolder:t.isFolder}:{action:"modify",path:t.path,isFolder:t.isFolder}}toFileMutationResponse(e,t){let n=e.fileInfo?this.normalizeMetaFileInfo(e.fileInfo):void 0,o=n?.path??(t.action==="move"?t.targetPath??t.path:t.path),i={path:o,success:!0,contentMutation:this.getContentMutation(e,t.action),pathMutation:this.getPathMutation(t,o)};t.action==="move"&&(i.oldPath=t.path),e.modifyTime!==void 0&&(i.modifyTime=e.modifyTime);let a=this.getMetaInfoChanged(e,t);return a!==void 0&&(i.metaInfoChanged=a),n!==void 0&&(i.metaInfo=n),i}getContentMutation(e,t){return t==="delete"?"deleted":e.created===!0?"created":e.contentChanged===!0?"modified":"none"}getPathMutation(e,t){if(e.action!=="move"||e.path===t)return"none";let n=Co.posix.dirname(e.path)!==Co.posix.dirname(t),o=Co.posix.basename(e.path)!==Co.posix.basename(t);return n&&o?"renamedAndMoved":n?"moved":"renamed"}getMetaInfoChanged(e,t){return t.action==="create"&&t.isFolder===!0&&e.created!==!0?!0:e.metaInfoChanged}createMultipartBoundary(){return"----succapp-"+Date.now().toString(36)+"-"+Math.random().toString(36).slice(2)}toRequestBody(e){return e instanceof Ca.Readable||Buffer.isBuffer(e)?e:Buffer.from(e,"utf-8")}normalizeMetaFileInfo(e){return{...e,parentDir:Co.posix.dirname(e.path),name:Co.posix.basename(e.path)}}async collectFileDescendants(e,t){let n=await this.listFiles(e);t.push(...n);for(let o of n)o.isFolder&&await this.collectFileDescendants(o.path,t)}async requestJson(e,t){return this.requestRunner.addTask(async()=>{let n=await this.fetchWithAuth(e,t);return await Ws(n,this.createRequestContext(e,t))})}async requestText(e,t){return this.requestRunner.addTask(async()=>await(await this.fetchWithAuth(e,t)).text())}async requestBuffer(e,t){return this.requestRunner.addTask(async()=>{let n=await this.fetchWithAuth(e,t);return Buffer.from(await n.arrayBuffer())})}async requestStream(e,t){let n=await this.requestRunner.acquire();try{let o=await this.fetchWithAuth(e,t);if(await Pg(o.clone(),this.createRequestContext(e,t)),!o.body)throw new gt(e);let i=Ca.Readable.fromWeb(o.body);return this.releaseRequestSlotAfterStream(i,n),{response:o,stream:i}}catch(o){throw n.release(),o}}async fetchWithAuth(e,t,n=!1){await this.ensureAuthCredentialLoaded(),await this.refreshOAuthCredentialIfNeeded(!1);let o=hd(t?.headers),i=this.authCredential?.token;i&&(o.Authorization=`Bearer ${i}`);let a=await wn(e,{...t,headers:o});if(a.status===401){if(!n&&await this.isOAuthTokenExpiredResponse(a)&&await this.refreshOAuthCredentialIfNeeded(!0))return this.fetchWithAuth(e,t,!0);throw this.handleAuthFailure(),new Le({workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl})}return a.ok||await co(a,e),a}createRequestContext(e,t){return{url:e,endpoint:Vx(e),serverUrl:this.serverUrl,request:qx(t?.body)}}createInvalidEndpointResponseError(e,t,n){return new ge("err.net.invalidResponse",{properties:{url:`${this.serverUrl}${Jt}${e}`,endpoint:e,serverUrl:this.serverUrl,reason:t,request:n}})}async ensureAuthCredentialLoaded(){if(!this.authCredential)return Cr(this,"authCredential",()=>this.doEnsureAuthCredentialLoaded())}async doEnsureAuthCredentialLoaded(){let e=await go(this.serverUrl);if(!e||!e.token&&(e.authType!=="oauth"||!e.refreshToken)){this.authCredential=null;return}if(this.rejectedAuthCredentialSignature===mC(e)){this.authCredential=null;return}this.rejectedAuthCredentialSignature=void 0,this.authCredential=e}async refreshOAuthCredentialIfNeeded(e){let t=this.authCredential;if(!t||t.authType!=="oauth"||!t.refreshToken||!e&&!this.shouldRefreshOAuthCredential(t))return!1;try{let n=await Cr(this,`oauthRefresh:${this.serverUrl}`,()=>eC(this.serverUrl,t));return this.authCredential=n,!0}catch(n){throw $x(n)&&this.handleAuthFailure(),n}}shouldRefreshOAuthCredential(e){return e.tokenExpired||!e.token?!0:Vg(e.expiresAt,Bx)}async isOAuthTokenExpiredResponse(e){let t;try{t=await e.clone().text()}catch{return!1}if(!t.trim())return!1;let n;try{n=JSON.parse(t)}catch{return!1}return ot(n)==="err.oauth2.tokenExpired"}handleAuthFailure(){this.authCredential&&(this.rejectedAuthCredentialSignature=mC(this.authCredential)),this.authCredential=null}releaseRequestSlotAfterStream(e,t){e.once("close",()=>t.release()),e.once("error",()=>t.release())}};function Vx(r){try{let e=new URL(r),t=e.pathname.indexOf(Jt);return t<0?e.pathname:e.pathname.slice(t+Jt.length)||"/"}catch{return}}function qx(r){if(typeof r=="string")try{let e=JSON.parse(r);return q(e)?e:void 0}catch{return}}function $x(r){return r instanceof Le?!0:Ms(r)?r.status>=400&&r.status<500:r instanceof ge&&r.errorCode==="err.login.oauthTokenInvalid"}function mC(r){return[r.authType,r.token??"",r.refreshToken??""].join("\0")}var en={workspace:"SUCCAPP_WORKSPACE",server:"SUCCAPP_SERVER",json:"SUCCAPP_JSON",logLevel:"SUCCAPP_LOG_LEVEL",locale:"SUCCAPP_LOCALE"},pc={lcAll:"LC_ALL",lcMessages:"LC_MESSAGES",lang:"LANG"};var Nr=[{name:"workspace",alias:"C",takesValue:!0,valueHint:"path",description:"cli.opt.workspace",acceptWorkspaceTarget:!0},{name:"server",takesValue:!0,valueHint:"url",description:"cli.opt.server",acceptServerTarget:!0},{name:"json",takesValue:!1,description:"cli.opt.json"},{name:"quiet",alias:"q",takesValue:!1,description:"cli.opt.quiet"},{name:"verbose",alias:"v",takesValue:!1,description:"cli.opt.verbose"},{name:"lock-timeout",takesValue:!0,valueHint:"seconds",description:"cli.opt.lockTimeout",acceptDomains:["workspace"],acceptLockUsages:["workspace-write"],showInTopLevelHelp:!1},{name:"log-level",takesValue:!0,valueHint:"level",description:"cli.opt.logLevel"},{name:"locale",takesValue:!0,valueHint:"locale",description:"cli.opt.locale"},{name:"help",alias:"h",takesValue:!1,description:"cli.opt.help"},{name:"version",alias:"V",takesValue:!1,description:"cli.opt.version"}],Yd=Nr.filter(r=>r.showInTopLevelHelp!==!1);function fC(r){return{workspace:r.value("workspace"),server:r.value("server"),json:r.has("json"),quiet:r.has("quiet"),verbose:r.has("verbose"),lockTimeout:r.value("lock-timeout"),logLevel:r.value("log-level"),locale:r.value("locale"),help:r.has("help"),version:r.has("version")}}function tn(r,e){if(r.spec.flags.some(a=>a.name===e))return!0;let n=Nr.find(a=>a.name===e);if(!n)return!1;let o=n.acceptDomains;if(o&&o.length>0&&!o.includes(r.domain)||n.acceptWorkspaceTarget&&r.workspaceTarget==="none"||n.acceptServerTarget&&r.serverTarget==="none")return!1;let i=n.acceptLockUsages;return!(i&&!i.includes(r.lockUsage??"none"))}F();B();function gC(r,e="param"){return r.map(t=>Hx(t,e))}function yC(r){let e={};for(let t of r)e[t.key]=t.value;return e}function Pe(r){return r.startsWith("-")?r:r.length===1?`-${r}`:`--${r}`}function oi(r){return r.startsWith("-")&&r!=="-"}function Hx(r,e){let t=Pe(e),n=r.indexOf("=");if(n<=0)throw new R("err.cli.invalidKeyValue",{input:t,option:t,flag:e,value:r});let o=r.slice(0,n).trim();if(!o)throw new R("err.cli.invalidNonEmptyKeyValue",{input:t,option:t,flag:e,value:r});return{key:o,value:r.slice(n+1)}}B();F();Et();K();var CC=E(require("fs")),Sa=E(require("path"));F();K();var zx=8;async function SC(r){let e=Sa.resolve(r.startPath),t=new Set((r.excludedRoots??[]).map(o=>Sa.resolve(o))),n=r.maxDepth??zx;for(let o=0;o<=n;o++){if(!t.has(e)&&await Kx(e))return e;let i=Sa.dirname(e);if(i===e)return;e=i}}async function Kx(r){try{return(await CC.promises.stat(cr(r))).isDirectory()}catch(e){if(x(e))return!1;throw e}}async function dc(r,e){let t=r.command,n=t?.serverTarget??e.serverTarget??"required",o=t?.spec.positionals.some(C=>C.role==="server-url")??e.explicitServerUrl!==void 0,i=t?tn(t,"server"):!0,a=n!=="none"&&(t?t.workspaceTarget!=="none":!0),s=n!=="none",c=r.workspace;c&&a&&await c.config.ensureLoaded();let l=o?e.explicitServerUrl:void 0,p=i?r.config.server:void 0,u=a?c?.activeServerUrl:void 0,g=s?r.config.envServer:void 0,m=l??p??u??g;if(!m)throw new R("err.cli.missingInput",{inputId:"server",sourceIds:Gx({positionalServerUrl:o,serverOption:i,workspaceServer:a,environmentServer:s}),commandName:r.command?.spec.name,envName:en.server});let f=c?.config.resolveServerUrl(m);if(f!==void 0)return f;if(l!==void 0||p===void 0)return wr(m);let y=Pe("server");return wr(m,{input:y,option:y,flag:"server"})}function wr(r,e={inputId:"server"}){try{return ye(r)}catch(t){throw oo(t,"err.net.invalidUrl")?new R("err.cli.invalidUrl",{...e,value:r,url:r},{cause:t}):t}}async function Wr(r,e){let t=r.config.server;await e.config.ensureLoaded();let n=e.activeServerUrl;if(!n)throw new R("err.cli.missingInput",{inputId:"activeServer",sourceIds:["workspaceRemoteAdd"]});if(!t)return;let o=Pe("server"),i=wr(t,{input:o,option:o,flag:"server"});if(!$e(i,n))throw new R("err.cli.serverMismatch",{input:o,option:o,value:i,expected:n,context:{target:i,active:n}})}function Gx(r){let e=[];return r.positionalServerUrl&&e.push("serverPositional"),r.serverOption&&e.push("serverOption"),r.workspaceServer&&e.push("workspaceRemoteAdd"),r.environmentServer&&e.push("environmentServer"),e}async function wC(r,e){let t=r.workspace?.config.resolveServerUrl(e);return r.workspace&&t?r.workspace.requireServerClient(t):new Lr(e,{workspaceRoot:r.workspace?.root})}async function PC(r){let e=r.workspace?Xd.resolve(r.cwd,r.workspace):Xd.resolve(r.cwd);r.workspace!==void 0&&await cc(e);let t=await SC({startPath:e,excludedRoots:[Jx(r.env)],maxDepth:r.maxDepth});if(!t&&r.required!==!1)throw new R("err.cli.invalidWorkspace",{inputId:"workspace",source:e});return t}async function ii(r){try{return await _d(r)}catch(e){throw RC(r,e)}}async function uc(r){try{return await vC.promises.stat(r)}catch(e){throw RC(r,e)}}function de(r,e){return{...r.workspace?{workspace:r.workspace.root}:{},server:e}}function Jx(r=process.env){return r.HOME||r.USERPROFILE||kC.homedir()}function RC(r,e){return x(e)?new R("err.file.notFound",{path:r},{cause:e}):new R("err.cli.invalidReadableFile",{inputId:"inputFile",source:r,path:r},{cause:e})}Ee();var ce=class{toOptions(e){return{}}async execute(e,t){return await this.validateOptions(e,t),this.executeCommand(e,t)}validateOptions(e,t){}requireWorkspace(e){return z(e.workspace,"CLI command requires a workspace context"),e.workspace}async resolveServerUrl(e,t){return dc(e,{explicitServerUrl:t})}createServerApiClient(e,t){return wC(e,t)}},ue=class extends ce{async executeCommand(e,t){let n=this.requireWorkspace(e);return this.executeWorkspaceCommand(n,e,t)}};var bC=require("node:child_process"),EC=require("node:util"),Yx=(0,EC.promisify)(bC.execFile);async function ai(r,e){let t=Xx(r);await Yx(t.command,t.args,{signal:e})}function Xx(r){return process.platform==="darwin"?{command:"open",args:[r]}:process.platform==="win32"?{command:"rundll32",args:["url.dll,FileProtocolHandler",r]}:{command:"xdg-open",args:[r]}}F();B();D();F();async function Ur(){let r=process.stdin,e=[];for await(let t of r)e.push(Qx(t));return Buffer.concat(e).toString("utf8")}async function TC(r=""){let e=process.stdin,t=process.stderr,n=e.isRaw===!0;return r&&t.write(r),e.isTTY&&e.setRawMode(!0),e.resume(),new Promise((o,i)=>{let a="",s=!1,c=f=>{for(let y of Zx(f)){if(s)break;switch(y){case"\r":case`
|
|
57
|
+
`:case"":g(a,o);break;case"":m(new ir,i);break;case"\b":case"\x7F":a=a.slice(0,-1);break;default:a+=y}}},l=f=>{m(f,i)},p=()=>{g(a,o)},u=()=>{e.off("data",c),e.off("error",l),e.off("end",p),e.off("close",p),e.isTTY&&e.setRawMode(n),e.pause(),t.write(`
|
|
58
|
+
`)},g=(f,y)=>{s||(s=!0,u(),y(f))},m=(f,y)=>{s||(s=!0,u(),y(f))};e.on("data",c),e.on("error",l),e.on("end",p),e.on("close",p)})}function Qx(r){return typeof r=="string"?Buffer.from(r):Buffer.isBuffer(r)?r:Buffer.from(r)}function Zx(r){return typeof r=="string"?r:Buffer.isBuffer(r)?r.toString("utf8"):r instanceof Uint8Array?Buffer.from(r).toString("utf8"):String(r??"")}var Qd=class extends ce{readStdin;constructor(e=Ur){super(),this.readStdin=e}toOptions(e){let t=e.has("oauth"),n=e.has("pat");return{serverUrl:e.positional[0],mode:n?"pat":"oauth",oauthRequested:t,patRequested:n}}validateOptions(e,t){if(t.oauthRequested&&t.patRequested)throw new R("err.cli.conflictingInputs",{inputs:["oauth","pat"]})}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.serverUrl);if(t.mode==="oauth"){let a=await Bg(n,{openExternal:c=>ai(c,e.abortSignal),abortSignal:e.abortSignal,onProgress:c=>tF(e,c)}),s=await Hd(n,a);return MC(e,n,s),0}let o=await eF(this.readStdin),i=await Hd(n,{type:"pat",token:o});return MC(e,n,i),0}},xC={path:["auth","login"],domain:"auth",spec:{name:"auth login",flags:[{name:"oauth",takesValue:!1},{name:"pat",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth login http://localhost:8080","succapp auth login --pat http://localhost:8080",'printf "%s" "$PAT" | succapp auth login --pat http://localhost:8080']},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Qd};async function eF(r){let e=!!process.stdin.isTTY,t=(e?await TC(d("cli.cmd.auth.login.patPrompt")):await r()).trim();if(!t)throw new R("err.cli.missingInput",{inputId:"token",sources:e?void 0:["stdin"]});return t}function MC(r,e,t){let n={server:e,loggedIn:!0,authType:t.authType,stored:!0,username:t.username,userId:t.userId,token:!!t.token};t.refreshToken!==void 0&&(n.refreshToken=!0),t.expiresAt!==void 0&&(n.expiresAt=t.expiresAt);let o=t.username||t.userId;r.output.result(n,()=>o?d("cli.cmd.auth.login.loggedInAs",e,o):d("cli.cmd.auth.login.loggedIn",e))}function tF(r,e){switch(e.stage){case"openingBrowser":r.output.progress({stage:e.stage},()=>d("cli.cmd.auth.login.openingBrowser"));return;case"manualAuthorizationUrl":r.output.info(d("cli.cmd.auth.login.oauthManualUrl",e.authorizationUrl??""));return;case"waitingForCallback":r.output.progress({stage:e.stage},()=>d("cli.cmd.auth.login.waitingForCallback"));return;case"exchangingToken":r.output.progress({stage:e.stage},()=>d("cli.cmd.auth.login.exchangingToken"));return}}D();F();B();var Zd=class extends ce{toOptions(e){return{serverUrl:e.positional[0],all:e.has("all")}}validateOptions(e,t){if(t.all&&t.serverUrl)throw new R("err.cli.conflictingInputs",{inputs:["<url>","--all"]})}async executeCommand(e,t){if(t.all){let a=await Kd();return e.output.result({all:a.all,removed:a.removed},()=>d("cli.cmd.auth.logout.removedAllAuth",a.removed)),0}let n=await this.resolveServerUrl(e,t.serverUrl),o=await Kd(n),i=o.removed>0;return e.output.result({server:o.serverUrl??n,removed:i},()=>i?d("cli.cmd.auth.logout.removedAuth",n):d("cli.cmd.auth.logout.storedAuth",n)),0}},FC={path:["auth","logout"],domain:"auth",spec:{name:"auth logout",flags:[{name:"all",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth logout","succapp auth logout https://bi.example.com","succapp auth logout --all"]},workspaceTarget:"optional",serverTarget:"optional",createExecutor:()=>new Zd};D();var eu=class extends ce{toOptions(e){return{serverUrl:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.serverUrl),o=await go(n),i={server:n,...rF(o)};return e.output.result(i,()=>nF(i)),0}},IC={path:["auth","status"],domain:"auth",spec:{name:"auth status",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth status","succapp --server=https://bi.example.com auth status"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new eu};function rF(r){return{storedAuth:r!==void 0,authType:r?.authType,username:r?.username,userId:r?.userId,token:!!r?.token,refreshToken:!!r?.refreshToken,expiresAt:r?.expiresAt,lastLoginAt:r?.lastLoginAt,updatedAt:r?.updatedAt}}function nF(r){return d(r.storedAuth===!1?"cli.cmd.auth.status.noStoredOutput":"cli.cmd.auth.status.output",oF(r))}function oF(r){let e={};for(let[t,n]of Object.entries(r))e[t]=n===void 0?"":String(n);return e}var DC=[xC,FC,IC];D();re();K();F();B();var tu=E(require("fs")),OC=E(require("path")),xn="file",li="input",pi="mode",ru="dry-run",nu="output",Lt="force",ka="config",di="test",vt="timeout",ou="catalog",Nt="schema",iu="table-name-contains",In="max-rows",si="query",ci="query-file",Dn=30,De=class extends ce{async executeCommand(e,t){let n=await this.prepareDbCommand(e,t),o=await this.resolveServerUrl(e),i=await this.createServerApiClient(e,o);return this.executeDbCommand(e,o,i,n)}prepareDbCommand(e,t){return Promise.resolve(t)}readDbInputTextFile(e,t){return ii(Tt(e.cwd,t))}readDbStdinText(){return Ur()}isDbStdinInteractive(){return process.stdin.isTTY}async readDbSqlFromSource(e,t){return fF(t,{hasInteractiveStdin:()=>this.isDbStdinInteractive(),readFileText:n=>this.readDbInputTextFile(e,n),readStdin:()=>this.readDbStdinText()})}readDbImportContent(e,t){if(t.type==="file")return this.readDbInputTextFile(e,t.file);if(this.isDbStdinInteractive())throw new R("err.cli.missingInput",{inputId:"inputFile",sources:[`--${li}=<csv-file>`,"stdin"]});return this.readDbStdinText()}},Fn=class extends De{async readConfig(e,t){let n=t.type==="file"?await this.readDbInputTextFile(e,t.file):await this.readConfigFromStdin();return gF(n,t.type==="file"?t.file:"stdin")}async readConfigFromStdin(){if(this.isDbStdinInteractive())throw new R("err.cli.missingInput",{inputId:"dataSourceConfig",sources:[`--${ka}=<json-file>`,"stdin"]});return this.readDbStdinText()}};function ui(r){return[{name:ka,takesValue:!0,valueHint:"json-file|-"},...r]}function _C(r){return O({name:r.name,desc:r.desc,defaultSchema:r.defaultSchema,defaultCatalog:r.defaultCatalog,readonly:r.readonly})}function mc(r){return O({schema:r.schema,tableName:r.tableName,tableType:r.tableType,tableComment:r.tableComment})}function LC(r){return O({name:r.name,primaryKey:r.primaryKey,unique:r.unique,dataType:r.dataType,dbType:r.dbType,length:r.length,scale:r.scale,defaultValue:r.defaultValue,autoInc:r.autoInc,nullable:r.nullable,comment:r.comment})}function NC(r){return O({elapsedMs:r.elapsedMs,fields:r.fields,data:r.data,rowCount:r.rowCount,maxRows:r.maxRows,truncated:r.truncated})}function WC(r){return O({dataSource:r.dataSource,resultType:r.resultType,force:r.force,updateCount:r.updateCount,results:r.results,sqlInfos:r.sqlInfos?.map(iF),fields:r.fields,data:r.data,columns:r.columns,rowCount:r.rowCount,maxRows:r.maxRows,truncated:r.truncated,elapsedMs:r.elapsedMs,timeoutMs:r.timeoutMs})}function UC(r){return O({dataSource:r.dataSource,schema:r.schema,tableName:r.tableName,mode:r.mode,dryRun:r.dryRun,importedRows:r.importedRows,skippedRows:r.skippedRows,elapsedMs:r.elapsedMs,timeoutMs:r.timeoutMs})}function iF(r){return O({datasource:r.datasource,schema:r.schema,sql:r.sql,sqlType:r.sqlType,tableName:r.tableName,dataMutation:r.dataMutation,schemaMutation:r.schemaMutation,manipulateAllRows:r.manipulateAllRows,dangerous:r.dangerous})}function An(r){let e=r;return O({result:r.result,dataSource:r.dataSource,originalDataSource:e.originalDataSource,config:e.config?hc(e.config):void 0})}function hc(r){let e=O({...r});return delete e.password,e}function jC(r){return{columns:[d("cli.cmd.db.dataSource"),d("cli.out.header.description"),d("cli.cmd.db.defaultSchema"),d("cli.cmd.db.readonly")],rows:r.map(e=>[e.name??"",e.desc??"",e.defaultSchema??e.defaultCatalog??"",e.readonly===void 0?"":d(e.readonly?"cli.out.value.yes":"cli.out.value.no")])}}function BC(r){let e=hc(r);return{columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:Object.keys(e).sort().map(t=>[t,GC(e[t])])}}function VC(r){return{columns:[d("cli.out.header.schema"),d("cli.out.header.table"),d("cli.out.header.type"),d("cli.out.header.comment")],rows:r.map(e=>[e.schema??"",e.tableName,e.tableType??"",e.tableComment??""])}}function qC(r){let e=r.table.columns??[],t=lF(r.table);return{columns:[d("cli.out.header.field"),d("cli.out.header.type"),d("cli.out.header.null"),d("cli.out.header.key"),d("cli.out.header.default"),d("cli.out.header.extra"),d("cli.out.header.comment")],rows:e.map(n=>[n.name,aF(n),sF(n),cF(n,t),uF(n),mF(n),n.comment??""])}}function aF(r){let e=r.dbType??r.dataType??"";return!e||r.length===void 0||r.length<=0||e.includes("(")?e:r.scale!==void 0&&r.scale>0?`${e}(${r.length},${r.scale})`:`${e}(${r.length})`}function sF(r){return r.nullable===void 0?"":r.nullable?"YES":"NO"}function cF(r,e){return r.primaryKey?"PRI":r.unique?"UNI":e.get(au(r.name))??""}function lF(r){let e=new Map;for(let t of r.primaryKeys??[])e.set(au(t),"PRI");for(let t of r.indexes??[]){let n=t.primaryKey?"PRI":t.unique?"UNI":"MUL";for(let o of pF(t.parts))dF(e,o,n)}return e}function pF(r){if(!r)return[];let e=[];for(let t of r)typeof t=="string"?e.push(t):t.column&&e.push(t.column);return e}function dF(r,e,t){let n=au(e),o=r.get(n);o==="PRI"||o==="UNI"&&t==="MUL"||r.set(n,t)}function au(r){return r.toLowerCase()}function uF(r){return r.defaultValue===void 0?"":r.defaultValue??"NULL"}function mF(r){return r.autoInc?"auto_increment":""}function $C(r){return hF(r)?zC(r.fields,r.data):typeof r.updateCount=="number"?d("cli.cmd.db.sqlUpdateCount",String(r.updateCount)):d("cli.cmd.db.sqlExecutedSuccess")}function HC(r){return zC(r.fields,r.data)}function zC(r,e){return r.length?{columns:r,rows:e.map(t=>t.map(GC))}:d("cli.cmd.db.sqlExecutedSuccess")}function KC(r){let e=r.skippedRows===void 0?"":d("cli.cmd.db.skipped",String(r.skippedRows)),t=r.dryRun?d("cli.cmd.db.dryImport"):d("cli.cmd.db.imported");return d("cli.cmd.db.rowsModeDry",t,String(r.importedRows),r.tableName,e,r.mode,String(r.dryRun))}function hF(r){return Array.isArray(r.fields)&&Array.isArray(r.data)}function GC(r){return r==null?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function fc(r,e){let t=r.value(xn);if(e&&t)throw new R("err.cli.conflictingInputs",{inputs:["<sql>",`--${xn}=<sql-file>`]});return t?{type:"file",file:t}:e?{type:"argument",sql:e}:{type:"stdin"}}function JC(r){let e=r.positional[1],t=AC(r,si),n=AC(r,ci);if(t!==void 0&&n!==void 0)throw new R("err.cli.conflictingInputs",{inputs:[`--${si}=<sql>`,`--${ci}=<sql-file>`]});if(e!==void 0&&(t!==void 0||n!==void 0))throw new R("err.cli.conflictingInputs",{inputs:["<table>",`--${si}`,`--${ci}`]});if(t!==void 0)return{type:"query",sqlSource:{type:"argument",sql:t}};if(n!==void 0)return{type:"query",sqlSource:{type:"file",file:n}};if(e===void 0)throw new R("err.cli.missingInput",{inputId:"exportTarget",sources:["<table>",`--${si}=<sql>`,`--${ci}=<sql-file>`]});let o=wa(r,e);return{type:"table",schema:o.schema,tableName:o.tableName}}function YC(r){let e=r.value(li);if(!e)throw new R("err.cli.missingInput",{inputId:"inputFile",sources:[`--${li}=<csv-file>`,`--${li}=-`]});return e==="-"?{type:"stdin"}:{type:"file",file:e}}async function fF(r,e){if(r.type==="argument")return r.sql;if(r.type==="file")return e.readFileText(r.file);if(e.hasInteractiveStdin())throw new R("err.cli.missingInput",{inputId:"sql",sources:["<sql>",`--${xn}=<sql-file>`,"stdin"]});let t=await e.readStdin();if(!He(t))throw new R("err.cli.missingInput",{inputId:"sql",sources:["<sql>",`--${xn}=<sql-file>`,"stdin"]});return t}function mi(r){let e=r.value(ka);if(!e)throw new R("err.cli.missingInput",{inputId:"dataSourceConfig",sources:[`--${ka}=<json-file>`,`--${ka}=-`]});return e==="-"?{type:"stdin"}:{type:"file",file:e}}function gF(r,e){let t;try{t=JSON.parse(r)}catch(n){throw new R("err.cli.invalidJsonObject",{inputId:"dataSourceConfig",source:e},{cause:n})}if(!q(t))throw new R("err.cli.invalidJsonObject",{inputId:"dataSourceConfig",source:e});return t}async function XC(r,e,t){await tu.promises.mkdir(OC.dirname(r),{recursive:!0});try{await tu.promises.writeFile(r,e,{flag:t?"w":"wx"})}catch(n){throw!t&&CF(n)?new R("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:`--${Lt}`,path:r},{cause:n}):n}}function yF(r){let e=r.lastIndexOf(".");return e<=0||e===r.length-1?{tableName:r}:{schema:r.slice(0,e),tableName:r.slice(e+1)}}function wa(r,e){let t=r.value(Nt);return t!==void 0?{schema:t,tableName:e}:yF(e)}function On(r,e,t){if(r===void 0)return t;let n=Number(r);if(!Number.isInteger(n)||n<=0){let o=Pe(e);throw new R("err.cli.invalidPositiveInteger",{input:o,option:o,flag:e,value:r})}return n}function gc(r,e){if(r===void 0)return;let t=Number(r);if(!Number.isInteger(t)||t<0){let n=Pe(e);throw new R("err.cli.invalidNonNegativeInteger",{input:n,option:n,flag:e,value:r})}return t}function QC(r){if(r===void 0)return"append";if(r==="append"||r==="truncate"||r==="replace")return r;throw new R("err.cli.invalidChoice",{input:`--${pi}`,option:`--${pi}`,flag:pi,value:r,allowedValues:["append","truncate","replace"]})}function CF(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="EEXIST"}function AC(r,e){let t=r.value(e);return t===void 0||t.trim()===""?void 0:t}B();F();var su=class extends De{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Nt),sqlSource:fc(e,e.positional[1]),timeoutSeconds:On(e.value(vt),vt,Dn),maxRows:gc(e.value(In),In),force:e.has(Lt)}}async prepareDbCommand(e,t){return{...t,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.sqlSource)}}}async executeDbCommand(e,t,n,o){let i=await this.readDbSqlFromSource(e,o.sqlSource),a=await this.executeAnySql(n,{dataSource:o.dataSource,schema:o.schema,sql:i,timeoutMs:o.timeoutSeconds*1e3,maxRows:o.maxRows,force:o.force});return e.output.result({...de(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},timeoutSeconds:o.timeoutSeconds,...o.maxRows!==void 0?{maxRows:o.maxRows}:{},...o.force?{force:!0}:{},...WC(a)},()=>$C(a)),0}async executeAnySql(e,t){try{return await e.executeDbAny({dataSource:t.dataSource,...t.schema!==void 0?{schema:t.schema}:{},sql:t.sql,timeoutMs:t.timeoutMs,...t.maxRows!==void 0?{maxRows:t.maxRows}:{},...t.force?{force:!0}:{}})}catch(n){throw oo(n,"err.sql.forceRequired")?new R("err.cli.confirmationRequired",{reason:"dbSqlMutation",flag:`--${Lt}`,sqlInfos:n.properties.sqlInfos,context:{forceRequired:!0}},{cause:n}):n}}},ZC={path:["db","exec"],domain:"db",spec:{name:"db exec",flags:[{name:xn,takesValue:!0,valueHint:"sql-file"},{name:Nt,takesValue:!0,valueHint:"schema"},{name:vt,takesValue:!0,valueHint:"seconds"},{name:In,takesValue:!0,valueHint:"n"},{name:Lt,takesValue:!1}],positionals:[{name:"datasource",required:!0},{name:"sql"}],usageArgs:"[<options>] <datasource> [<sql>]",examples:['succapp db exec default "update orders set status = 1 where id = 42"',"succapp db exec default --file=./change.sql --max-rows=10",'succapp db exec default "create table TEMP_ORDERS (ID int)" --force']},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new su};D();K();var cu=class extends De{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Nt),target:JC(e),timeoutSeconds:On(e.value(vt),vt,Dn),output:e.value(nu),force:e.has(Lt)}}async prepareDbCommand(e,t){return t.target.type!=="query"?t:{...t,target:{...t.target,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.target.sqlSource)}}}}async executeDbCommand(e,t,n,o){let i=o.target.type==="table"?{tableName:o.target.tableName}:{query:!0},a=o.target.type==="table"?await n.exportDbTableData({dataSource:o.dataSource,...o.target.schema!==void 0?{schema:o.target.schema}:{},tableName:o.target.tableName,timeoutMs:o.timeoutSeconds*1e3}):await n.exportDbQueryData({dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},sql:await this.readDbSqlFromSource(e,o.target.sqlSource),timeoutMs:o.timeoutSeconds*1e3}),s={...de(e,t),dataSource:o.dataSource,...o.target.type==="table"&&o.target.schema!==void 0?{schema:o.target.schema}:{},...o.target.type==="query"&&o.schema!==void 0?{schema:o.schema}:{},...i,timeoutSeconds:o.timeoutSeconds,size:a.length};if(o.output){let c=Tt(e.cwd,o.output);return await XC(c,a,o.force),e.output.result({...s,output:c},()=>d("cli.cmd.db.export.exportedData",c)),0}return e.output.content(s,a),0}},eS={path:["db","export"],domain:"db",spec:{name:"db export",flags:[{name:si,takesValue:!0,valueHint:"sql"},{name:ci,takesValue:!0,valueHint:"sql-file"},{name:Nt,takesValue:!0,valueHint:"schema"},{name:vt,takesValue:!0,valueHint:"seconds"},{name:nu,takesValue:!0,valueHint:"csv-file"},{name:Lt,takesValue:!1}],positionals:[{name:"datasource",required:!0},{name:"table"}],usageArgs:"[<options>] <datasource> [<table>]",examples:["succapp db export default orders --output=orders.csv","succapp db export default --query-file=./query.sql"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new cu};var lu=class extends De{toOptions(e){let t=wa(e,e.positional[1]);return{dataSource:e.positional[0],schema:t.schema,tableName:t.tableName,inputSource:YC(e),mode:QC(e.value(pi)),dryRun:e.has(ru),timeoutSeconds:On(e.value(vt),vt,Dn)}}async executeDbCommand(e,t,n,o){let i=await this.readDbImportContent(e,o.inputSource),a=await n.importDbTableData({dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},tableName:o.tableName,content:i,format:"csv",mode:o.mode,dryRun:o.dryRun,timeoutMs:o.timeoutSeconds*1e3}),s={...a,mode:a.mode??o.mode,dryRun:a.dryRun??o.dryRun};return e.output.result({...de(e,t),...UC(s),timeoutSeconds:o.timeoutSeconds},()=>KC(s)),0}},tS={path:["db","import"],domain:"db",spec:{name:"db import",flags:[{name:li,takesValue:!0,valueHint:"csv-file|-"},{name:pi,takesValue:!0,valueHint:"append|truncate|replace"},{name:ru,takesValue:!1},{name:Nt,takesValue:!0,valueHint:"schema"},{name:vt,takesValue:!0,valueHint:"seconds"}],positionals:[{name:"datasource",required:!0},{name:"table",required:!0}],usageArgs:"[<options>] <datasource> <table>",examples:["succapp db import default orders --input=./orders.csv","succapp db import default public.orders --input=./orders.csv --mode=truncate --dry-run","cat orders.csv | succapp db import default public.orders --input=- --mode=append"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new lu};B();F();var pu=class extends De{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Nt),sqlSource:fc(e,e.positional[1]),timeoutSeconds:On(e.value(vt),vt,Dn),maxRows:gc(e.value(In),In)}}async prepareDbCommand(e,t){return{...t,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.sqlSource)}}}async executeDbCommand(e,t,n,o){let i=await this.readDbSqlFromSource(e,o.sqlSource),a=await this.executeQuerySql(n,{dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},sql:i,timeoutMs:o.timeoutSeconds*1e3,...o.maxRows!==void 0?{maxRows:o.maxRows}:{}});return e.output.result({...de(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},readOnly:!0,timeoutSeconds:o.timeoutSeconds,...o.maxRows!==void 0?{maxRows:o.maxRows}:{},...NC(a)},()=>HC(a)),0}async executeQuerySql(e,t){try{return await e.executeDbQuery(t)}catch(n){throw oo(n,"err.db.nonReadOnlySql")?new R("err.cli.confirmationRequired",{reason:"dbQueryWriteSql",flag:`--${Lt}`,context:{backendErrorCode:"err.db.nonReadOnlySql"}},{cause:n}):n}}},rS={path:["db","query"],domain:"db",spec:{name:"db query",flags:[{name:xn,takesValue:!0,valueHint:"sql-file"},{name:Nt,takesValue:!0,valueHint:"schema"},{name:vt,takesValue:!0,valueHint:"seconds"},{name:In,takesValue:!0,valueHint:"n"}],positionals:[{name:"datasource",required:!0},{name:"sql"}],usageArgs:"[<options>] <datasource> [<sql>]",examples:['succapp db query default "select * from orders"',"succapp db query default --file=./query.sql --schema=PUBLIC --timeout=10 --max-rows=100"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new pu};D();re();var du=class extends De{toOptions(e){return{dataSource:e.positional[0],catalog:e.value(ou)}}async executeDbCommand(e,t,n,o){let i=await n.listDbSchemas(o.dataSource,{...o.catalog!==void 0?{catalog:o.catalog}:{}});return e.output.result({...de(e,t),dataSource:o.dataSource,...o.catalog!==void 0?{catalog:o.catalog}:{},schemas:i.map(a=>O({...a}))},()=>({columns:[d("cli.out.header.schema"),d("cli.cmd.db.schema.list.catalog")],rows:i.map(a=>[a.name,a.catalog??""])})),0}},nS={path:["db","schema","list"],domain:"db",spec:{name:"db schema list",flags:[{name:ou,takesValue:!0,valueHint:"catalog"}],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db schema list default","succapp db schema list default --catalog=PUBLIC"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new du};D();var uu=class extends Fn{toOptions(e){return{configSource:mi(e),testBeforeSave:e.has(di)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.createDataSource({config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...de(e,t),...An(a)},()=>d("cli.cmd.db.source.create.created",a.dataSource??i.name??"")),0}},oS={path:["db","source","create"],domain:"db",spec:{name:"db source create",flags:ui([{name:di,takesValue:!1}]),positionals:[],usageArgs:"[<options>]",examples:["succapp db source create --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new uu};var mu=class extends De{async executeDbCommand(e,t,n){let o=await n.getDataSources();return e.output.result({...de(e,t),dataSources:o.map(_C)},()=>jC(o)),0}},iS={path:["db","source","list"],domain:"db",spec:{name:"db source list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp db source list","succapp --server=http://localhost:8180 db source list --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new mu};D();F();B();var hu=class extends De{toOptions(e){return{dataSource:e.positional[0],force:e.has(Lt)}}validateOptions(e,t){if(!t.force)throw new R("err.cli.confirmationRequired",{reason:"dbSourceDelete",flag:`--${Lt}`,inputId:"dataSourceConfig"})}async executeDbCommand(e,t,n,o){let i=await n.deleteDataSource({dataSource:o.dataSource});return e.output.result({...de(e,t),...An(i)},()=>d("cli.cmd.db.source.remove.deleted",i.dataSource??o.dataSource)),0}},aS={path:["db","source","remove"],domain:"db",spec:{name:"db source remove",flags:[{name:Lt,takesValue:!1}],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source remove oldDs --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new hu};var fu=class extends De{toOptions(e){return{dataSource:e.positional[0]}}async executeDbCommand(e,t,n,o){let i=await n.getDataSourceConfig(o.dataSource);return e.output.result({...de(e,t),dataSource:o.dataSource,config:hc(i)},()=>BC(i)),0}},sS={path:["db","source","show"],domain:"db",spec:{name:"db source show",flags:[],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source show default"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new fu};D();var gu=class extends Fn{toOptions(e){return{configSource:mi(e)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.testDataSource({config:i});return e.output.result({...de(e,t),...An(a)},()=>d("cli.cmd.db.source.test.testOk",a.dataSource??i.name??"")),0}},cS={path:["db","source","test"],domain:"db",spec:{name:"db source test",flags:ui([]),positionals:[],usageArgs:"[<options>]",examples:["succapp db source test --config=./datasource.json","cat datasource.json | succapp db source test --config=-"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new gu};D();var yu=class extends Fn{toOptions(e){return{dataSource:e.positional[0],configSource:mi(e),testBeforeSave:e.has(di)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.updateDataSource({dataSource:o.dataSource,config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...de(e,t),...An(a)},()=>d("cli.cmd.db.source.update.updated",a.dataSource??i.name??o.dataSource)),0}},lS={path:["db","source","update"],domain:"db",spec:{name:"db source update",flags:ui([{name:di,takesValue:!1}]),positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source update oldDs --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new yu};var Cu=class extends De{toOptions(e){let t=wa(e,e.positional[1]);return{dataSource:e.positional[0],schema:t.schema,tableName:t.tableName}}async executeDbCommand(e,t,n,o){let i=await n.describeDbTable(o.dataSource,o.tableName,{...o.schema!==void 0?{schema:o.schema}:{}});return e.output.result({...de(e,t),dataSource:o.dataSource,table:mc(i.table),columns:i.table.columns?.map(LC)??[]},()=>qC(i)),0}},pS={path:["db","table","describe"],domain:"db",spec:{name:"db table describe",flags:[{name:Nt,takesValue:!0,valueHint:"schema"}],positionals:[{name:"datasource",required:!0},{name:"table",required:!0}],usageArgs:"[<options>] <datasource> <table>",examples:["succapp db table describe default orders","succapp db table describe default public.orders"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Cu};var Su=class extends De{toOptions(e){return{dataSource:e.positional[0],schema:e.positional[1],tableNameContains:e.value(iu)}}async executeDbCommand(e,t,n,o){let i=await n.listDbTables(o.dataSource,{...o.schema!==void 0?{schema:o.schema}:{},...o.tableNameContains!==void 0?{tableNameContains:o.tableNameContains}:{}});return e.output.result({...de(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},...o.tableNameContains!==void 0?{tableNameContains:o.tableNameContains}:{},tables:i.map(mc)},()=>VC(i)),0}},dS={path:["db","table","list"],domain:"db",spec:{name:"db table list",flags:[{name:iu,takesValue:!0,valueHint:"text"}],positionals:[{name:"datasource",required:!0},{name:"schema"}],usageArgs:"[<options>] <datasource> [<schema>]",examples:["succapp db table list default","succapp db table list default PUBLIC --table-name-contains=order"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Su};var uS=[iS,sS,cS,oS,lS,aS,nS,dS,pS,rS,ZC,tS,eS];var vF=2,vu=class{constructor(e,t={}){this.model=e;this.columnGap=kF(t.columnGap)}columnGap;columnWidths;render(){return this.model.columns.length===0?"":(this.columnWidths=this.calculateColumnWidths(),[this.renderRow(this.model.columns),...this.model.rows.map(t=>this.renderRow(t))].join(`
|
|
59
|
+
`))}calculateColumnWidths(){return this.model.columns.map((e,t)=>{let n=this.model.rows.map(o=>Dr(this.getCellText(o,t)));return Math.max(Dr(e),...n)})}renderRow(e){return this.getColumnWidths().map((t,n)=>this.padCell(this.getCellText(e,n),t)).join(this.getColumnSeparator()).trimEnd()}padCell(e,t){return qo(e,t)}getCellText(e,t){return e[t]??""}getColumnSeparator(){return" ".repeat(this.columnGap)}getColumnWidths(){return this.columnWidths===void 0&&(this.columnWidths=this.calculateColumnWidths()),this.columnWidths}};function me(r,e){return new vu(r,e).render()}function kF(r){return r===void 0||!Number.isFinite(r)?vF:Math.max(0,Math.floor(r))}D();F();B();re();var wu=["product","sys","metadata","inspect","jvm","env"],mS=[...wu,"all"],wF=["product","metadata"],PF=["sys","inspect","jvm","env"],ku=class extends ce{toOptions(e){let t=RF(e.values("scope"));return{url:e.positional[0],scopes:t.scopes,all:e.has("all")||t.all,raw:e.has("raw")}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),o=await this.createServerApiClient(e,n),i=EF(t)?await o.getServerDetailInfo():await o.getServerInfo();return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,info:TF(i,t)},()=>MF(n,i,t)),0}},hS={path:["server","info"],domain:"server",spec:{name:"server info",flags:[{name:"scope",takesValue:!0,repeatable:!0,valueHint:"name"},{name:"all",takesValue:!1},{name:"raw",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server info","succapp --server=https://bi.example.com server info","succapp server info --scope=env,jvm","succapp server info --scope=all","succapp server info http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ku};function RF(r){let e=[],t=!1;for(let n of r)for(let o of bF(n)){if(o==="all"){t=!0;continue}if(wu.includes(o)){e.includes(o)||e.push(o);continue}throw new R("err.cli.invalidChoice",{input:"--scope",option:"--scope",value:o,allowedValues:mS})}return{scopes:e,all:t}}function bF(r){let e=r.split(",").map(t=>t.trim());for(let t of e)if(!(t.length>0))throw new R("err.cli.invalidChoice",{input:"--scope",option:"--scope",value:t,allowedValues:mS});return e}function fS(r){return r.all?wu:r.scopes.length>0?r.scopes:wF}function EF(r){return r.raw||r.all||r.scopes.some(e=>PF.includes(e))}function TF(r,e){if(e.raw)return O(r);let t=fS(e);return O({productType:r.productType,version:r.version,devToolApiVersion:r.devToolApiVersion,scopes:t,productInfo:t.includes("product")?Ru(r):void 0,sysInfo:t.includes("sys")?gS(r):void 0,metadataVersions:t.includes("metadata")?r.metadataVersions:void 0,sysInspectInfo:t.includes("inspect")?hi(r,"sysInspectInfo"):void 0,jvmInfo:t.includes("jvm")?hi(r,"jvmInfo"):void 0,systemEnvirInfo:t.includes("env")?hi(r,"systemEnvirInfo"):void 0})}function MF(r,e,t){if(t.raw)return JSON.stringify(e,null,2);let n=[me(xF(r,e))];for(let o of fS(t)){let i=FF(o,e);i&&n.push("",i)}return n.join(`
|
|
60
|
+
`)}function xF(r,e){return{columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:[[d("cli.out.common.server"),r],[d("cli.out.common.product"),e.productType??""],[d("cli.out.header.version"),e.version??_F(Ru(e),"productVersion")??""],[d("cli.out.common.api"),e.devToolApiVersion??""]]}}function FF(r,e){switch(r){case"product":return yc(d("cli.out.common.productInfo"),Ru(e));case"sys":return IF(gS(e));case"metadata":return DF(e.metadataVersions);case"inspect":return yc(d("cli.out.common.sysInspectInfo"),hi(e,"sysInspectInfo"));case"jvm":return yc(d("cli.out.common.jvmInfo"),hi(e,"jvmInfo"));case"env":return yc(d("cli.out.common.systemEnvirInfo"),hi(e,"systemEnvirInfo"));default:return""}}function yc(r,e){return!e||Object.keys(e).length===0?"":[r,me({columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,Pu(n)])})].join(`
|
|
61
|
+
`)}function IF(r){return!r||r.length===0?"":[d("cli.out.common.sysInfo"),me({columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:r.map(e=>[e.name,AF(e)])})].join(`
|
|
62
|
+
`)}function DF(r){return!r||Object.keys(r).length===0?"":[d("cli.out.common.metaVersions"),me({columns:[d("cli.out.header.metaType"),d("cli.out.header.latestVersion")],rows:Object.entries(r).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,t])})].join(`
|
|
63
|
+
`)}function AF(r){return r.name==="startTime"||r.name==="osTime"?OF(r.value):Pu(r.value)}function OF(r){if(typeof r!="number")return Pu(r);let e=new Date(r),t=n=>n.toString().padStart(2,"0");return[e.getFullYear(),t(e.getMonth()+1),t(e.getDate())].join("-")+" "+[t(e.getHours()),t(e.getMinutes()),t(e.getSeconds())].join(":")}function Pu(r){return r==null?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function _F(r,e){let t=r?.[e];return typeof t=="string"?t:void 0}function Ru(r){return"productInfo"in r?r.productInfo:{productVersion:r.version}}function gS(r){return"sysInfo"in r?r.sysInfo:void 0}function hi(r,e){switch(e){case"sysInspectInfo":return"sysInspectInfo"in r?r.sysInspectInfo:void 0;case"jvmInfo":return"jvmInfo"in r?r.jvmInfo:void 0;case"systemEnvirInfo":return"systemEnvirInfo"in r?r.systemEnvirInfo:void 0;default:return}}D();var bu=class extends ce{constructor(t=Us){super();this.ping=t}toOptions(t){return{url:t.positional[0]}}async executeCommand(t,n){let o=await this.resolveServerUrl(t,n.url);return await this.ping(o),t.output.result({server:o,reachable:!0},()=>d("cli.cmd.server.serverReachable",o)),0}},yS={path:["server","ping"],domain:"server",spec:{name:"server ping",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server ping","succapp --server=https://bi.example.com server ping","succapp server ping http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new bu};D();var Eu=class extends ce{toOptions(e){return{url:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url);return await(await this.createServerApiClient(e,n)).refreshCache(),e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,refreshed:!0},()=>d("cli.cmd.server.cache.refresh.refreshed",n)),0}},CS={path:["server","cache","refresh"],domain:"server",spec:{name:"server cache refresh",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server cache refresh","succapp --server=https://bi.example.com server cache refresh","succapp server cache refresh http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Eu};Cn();D();re();function _n(r){return O({type:r.type,path:r.path,remotePath:r.remotePath,oldPath:r.oldPath,oldRemotePath:r.oldRemotePath,fileId:r.fileId,isFolder:r.isFolder,contentChanged:r.contentChanged,metaChanged:r.metaChanged,modifier:r.modifier,modifierName:r.modifierName,modifyTime:r.modifyTime})}function Cc(r){return O({name:r.name,id:r.id,desc:r.desc})}function rn(r){return O({remotePath:r.remotePath,localPath:r.localPath,currentVersion:r.currentVersion,targetVersion:r.targetVersion,changed:r.changed,reason:r.reason,...SS(r.errorInfo)})}function Sc(r){return O({path:r.path,...SS(r.errorInfo)})}function vc(r){return O({path:r.path,currentVersion:r.currentVersion,targetVersion:r.targetVersion,metaType:r.metaType,kind:r.kind})}function kc(r){switch(r){case"older":return d("cli.out.value.older");case"newer":return d("cli.out.value.newer");default:return r}}function Ln(r){return me({columns:[d("cli.out.header.type"),d("cli.out.header.path"),d("cli.out.header.remote")],rows:r.map(e=>[e.type,e.path,e.remotePath])})}function Pa(r){return me({columns:[d("cli.out.header.remote"),d("cli.out.common.version"),d("cli.out.common.targetVersion")],rows:r.map(e=>[e.remotePath,e.currentVersion??"",e.targetVersion??""])})}function SS(r){if(r===void 0)return{};let e=LF(r);return e||(r instanceof Error?O({errorName:r.name||"Error",errorMessage:r.message}):typeof r=="object"&&r!==null?O({errorName:Xt(r,"name"),errorCode:Xt(r,"code")??Xt(r,"errorCode"),errorMessage:Xt(r,"message")??Xt(r,"reason")}):{errorMessage:String(r)})}function Nn(r){if(r===void 0)return"";let e=NF(r);if(e)return e;if(r instanceof Error)return r.message||r.name;if(typeof r=="object"&&r!==null){let t=Xt(r,"code")??Xt(r,"errorCode"),n=Xt(r,"message")??Xt(r,"reason");return[t,n].filter(o=>o&&o.length>0).join(": ")}return String(r)}function LF(r){let e=ot(r),t=gr(r),n=Ot(r);if(!(e===void 0&&t===void 0&&n===void 0))return O({errorName:WF(r),errorCode:e,errorType:t==null?void 0:String(t),errorMessage:vS(r),errorProperties:n})}function NF(r){let e=ot(r),t=vS(r);return[e,t].filter(n=>n&&n.length>0).join(": ")}function WF(r){if(r instanceof Error)return r.name||"Error";if(!(typeof r!="object"||r===null))return Xt(r,"name")??Xt(r,"className")}function vS(r){if(r instanceof Error)return r.message;if(!(typeof r!="object"||r===null))return Xt(r,"message")??Xt(r,"reason")}function Xt(r,e){if(!Object.hasOwn(r,e))return;let t=r[e];return typeof t=="string"?t:void 0}D();re();var kS=E(require("fs")),Ze=E(require("path"));F();K();var nn=Ze.posix.join("sysdata","extensions");function wS(r){if(r.extensionName){let e=r.extensionName.trim();return jF(e)?{extensionRoot:wc(r.workspaceRoot,e),extensionName:e}:void 0}if(r.path)return BF(r.workspaceRoot,r.path)}function wc(r,e){return Ze.join(r,nn,e)}async function Tu(r){return ne(Ze.join(r,nn))}async function UF(r){let e=Ze.join(r,nn),t;try{t=await kS.promises.readdir(e,{withFileTypes:!0})}catch(n){if(x(n))return[];throw n}return t.filter(n=>n.isDirectory()).map(n=>n.name).sort()}async function PS(r){return UF(r)}function jF(r){return r.length>0&&r!=="."&&r!==".."&&!r.includes("/")&&!r.includes("\\")}function BF(r,e){let t=Ze.isAbsolute(e)?Ze.normalize(e):Ze.resolve(r,e),n=Ze.join(r,nn),o=n+Ze.sep;if(t!==n&&!t.startsWith(o))return;let a=Ze.relative(n,t).split(Ze.sep)[0];if(!(!a||a===".."||a==="."))return{extensionRoot:Ze.join(n,a),extensionName:a}}function RS(r){return O({extensionPoint:r.extensionPoint,templateName:r.templateName,name:r.summary.name,desc:r.summary.desc,version:r.summary.version})}function bS(r,e){return{extensionName:r,extensionRoot:e.extensionRoot,packageJsonPath:e.packageJsonPath,extensionPoint:e.extensionPoint,templateName:e.templateName,template:VF(e.templateSummary)}}function ES(r){let e=r.metadataVersionSuggestions??[];return{summary:{pushed:r.pushed.length,rejected:r.rejected.length,failures:r.failures.length,metadataVersionSuggestions:e.length},pushed:r.pushed,rejected:r.rejected.map(_n),failures:r.failures.map(Sc),metadataVersionSuggestions:e.map(vc)}}function TS(r){return r.length===0?d("cli.out.workspace.ext.extTemplates"):{columns:[d("cli.out.workspace.ext.extPoint"),d("cli.out.workspace.ext.template"),d("cli.out.header.version"),d("cli.out.header.description")],rows:r.map(e=>[e.extensionPoint,e.templateName,e.summary.version??"",e.summary.desc??""])}}function MS(r){return r.length===0?d("cli.out.workspace.ext.ext",nn):{columns:[d("cli.out.header.extension")],rows:r.map(e=>[e])}}function xS(r,e){return d("cli.out.workspace.ext.createdExt",r,e.extensionRoot)}function FS(r,e){if(e.pushed.length===0&&e.rejected.length===0&&e.failures.length===0)return d("cli.out.workspace.ext.noLocalChanges",r);let t=[d("cli.out.workspace.ext.pushExtPushed",r,e.pushed.length,e.rejected.length,e.failures.length)];e.pushed.length>0&&(t.push(d("cli.out.workspace.ext.pushedFiles",e.pushed.length)),t.push(qF(e.pushed))),e.rejected.length>0&&(t.push(d("cli.out.workspace.ext.pushBlockedRemote",e.rejected.length)),t.push(Ln(e.rejected))),e.failures.length>0&&(t.push(d("cli.out.workspace.ext.failed",e.failures.length)),t.push($F(e.failures)));let n=e.metadataVersionSuggestions??[];return n.length>0&&(t.push(d("cli.out.workspace.ext.metaVersions",n.length)),t.push(HF(n))),t.join(`
|
|
64
|
+
`)}function VF(r){return O({name:r.name,desc:r.desc,version:r.version})}function qF(r){return me({columns:[d("cli.out.header.path")],rows:r.map(e=>[e])})}function $F(r){return me({columns:[d("cli.out.header.path"),d("cli.out.header.error")],rows:r.map(e=>[e.path,Nn(e.errorInfo)])})}function HF(r){return me({columns:[d("cli.out.header.path"),d("cli.out.workspace.ext.version"),d("cli.out.workspace.ext.targetVersion"),d("cli.out.workspace.ext.kind")],rows:r.map(e=>[e.path,e.currentVersion??"",e.targetVersion,kc(e.kind)])})}re();var Tc=E(require("fs")),Pr=E(require("path"));Y();D();Ir();F();B();K();var IS=E(require("path"));Et();Y();var zF=T("workspace.extension-dev.package");async function DS(r,e){let t=IS.join(r,"package.json"),n=await ke(t);if(!n.trim())return zF.warn(`extension package.json is missing or empty: ${t}`),!1;let o=Kt(n,["name"],e);return o===n?!1:(await pt(t,o),!0)}var uI=dv(),mI=/^[a-z0-9]+(?:-[a-z0-9]+){2,}$/,hI=T("workspace.extension-dev.create"),Mc=class{workspace;cachedClient;cachedOptions;constructor(e){this.workspace=e}async prepare(e=Xe.INSTANCE){if(e.start(1,{message:d("workspace.extension.progress.templates")}),!await Tu(this.workspace.root))throw new ct("err.extension.sysdataNotCloned",{extensionsDir:Pr.join(this.workspace.root,nn)});let n=await(await this.requireClient()).getExtensionTemplates(),o=Au(n);if(o.length===0)throw new ct("err.extension.templateUnavailable");return this.cachedOptions=o,e.step(1),o}groupOptionsByExtensionPoint(){let e=this.cachedOptions??[],t=new Map;for(let n of e){let o=t.get(n.extensionPoint)??[];o.push(n),t.set(n.extensionPoint,o)}return t}async validate(e){let t=e.extensionName.trim();if(!t)return{ok:!1,error:"empty"};if(!mI.test(t))return{ok:!1,error:"invalidFormat"};let o=t.split("-")[1];return o!==e.extensionPoint?{ok:!1,error:"extensionPointMismatch",actualExtensionPoint:o}:await ne(wc(this.workspace.root,t))?{ok:!1,error:"targetExists"}:{ok:!0}}async execute(e){let{extensionPoint:t,templateName:n,extensionName:o}=e,i=e.task??Xe.INSTANCE;i.start(100,{message:d("workspace.extension.progress.create.running",o),retainOnFinish:!0});let a=i.subTaskMonitor(10),s=i.subTaskMonitor(35),c=i.subTaskMonitor(40),l=i.subTaskMonitor(15);if(a.start(1),!await Tu(this.workspace.root))throw new ct("err.extension.sysdataNotCloned",{extensionsDir:Pr.join(this.workspace.root,nn)});let p=await this.requireOption(t,n),u=wc(this.workspace.root,o);if(await ne(u))throw new Error(`target extension directory already exists: ${u}`);a.step(1);let g=await this.requireClient();s.start(1);let m=await g.downloadExtensionTemplate(t,n);return s.step(1),c.start(1),await fI(m,u),await DS(u,o),c.step(1),await this.workspace.refreshSyncStatus(l),i.setMessage(d("workspace.extension.progress.create.done",o)),i.finish(),{extensionRoot:u,packageJsonPath:Pr.join(u,"package.json"),extensionPoint:t,templateName:n,templateSummary:p.summary}}async requireClient(){return this.cachedClient||(this.cachedClient=await this.workspace.requireClient()),this.cachedClient}async requireOption(e,t){let o=(this.cachedOptions??await this.prepare()).find(i=>i.extensionPoint===e&&i.templateName===t);if(!o)throw new Error(`extension template not found: ${e}/${t}`);return o}};function Au(r){let e=[],t=r.templates??{};for(let[n,o]of Object.entries(t))if(o)for(let[i,a]of Object.entries(o))e.push({extensionPoint:n,templateName:i,summary:a});return e}async function fI(r,e){let n=new uI(r).getEntries();if(n.length===0)throw new Error("extension template zip is empty");await Tc.promises.mkdir(e,{recursive:!0});try{let o=Pr.resolve(e),i=o+Pr.sep,a=[],s=new Set;for(let c of n){let l=c.entryName.replace(/\\/g,"/"),p=En(l.endsWith("/")?l.slice(0,-1):l,"extension template entry"),u=Pr.resolve(o,p);if(u!==o&&!u.startsWith(i))throw new Error(`extension template entry escapes target directory: ${l}`);if(l.endsWith("/")||c.isDirectory){s.add(u);continue}s.add(Pr.dirname(u)),a.push({destination:u,entry:c})}await Promise.all(Array.from(s).map(c=>Tc.promises.mkdir(c,{recursive:!0}))),await Promise.all(a.map(({destination:c,entry:l})=>Tc.promises.writeFile(c,l.getData())))}catch(o){try{await lr(e)}catch(i){hI.debug(`cleanup partial extension directory failed: ${e}`,i)}throw o}}var Ou=class extends ce{toOptions(e){return{extensionPoint:e.value("extension-point")}}async executeCommand(e,t){let n=await this.resolveServerUrl(e),o=await this.createServerApiClient(e,n),i=gI(Au(await o.getExtensionTemplates()),t.extensionPoint);return e.output.result(O({workspace:e.workspace?.root,server:n,extensionPoint:t.extensionPoint,templates:i.map(RS)}),()=>TS(i)),0}},uv={path:["server","extension","template","list"],domain:"server",spec:{name:"server extension template list",flags:[{name:"extension-point",takesValue:!0,valueHint:"point"}],positionals:[],usageArgs:"[<options>]",examples:["succapp server extension template list","succapp --server=https://bi.example.com server extension template list --extension-point=component"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ou};function gI(r,e){return e?r.filter(t=>t.extensionPoint===e):[...r]}B();Cn();function mv(r,e={}){return xc(r,e)!==void 0}function ba(r,e={}){let t=xc(r,e);if(!t||!r||typeof r!="object")return r;let n={...Ot(r),suggestedAction:t,retryable:!1},o=ot(r);return t==="fixMeta"&&typeof n.backendErrorCode!="string"&&typeof o=="string"&&(n.backendErrorCode=o),(typeof n.path!="string"||n.path.length===0)&&(n.path=e.targetPath??e.path),r.properties=n,gr(r)==null&&(r.errorType=yI(r)),r}function xc(r,e={}){let t=Ot(r)?.suggestedAction;if(CI(t))return t;let n=ot(r);if(n==="err.meta.fileExists"||n==="err.meta.file.notfound"||n==="err.meta.saveConcurrent")return"pull";if(n==="err.meta.filefolder.notfound")return"fixMeta";if(n==="err.meta.fileExistsIgnoreCase")return"rename";if(n==="err.meta.delete.project")return"refresh";if(n==="err.permission.denied")return e.action==="delete"&&SI(e.path)?"refresh":"contactAdmin"}function yI(r){let e=ot(r);return e==="err.permission.denied"||e==="err.meta.delete.project"?"error":"warn"}function CI(r){return r==="pull"||r==="rename"||r==="refresh"||r==="fixMeta"||r==="contactAdmin"}function SI(r){return typeof r=="string"&&/^\/[^/]+$/.test(r)}F();B();Cn();D();re();K();var Fc=E(require("fs")),ze=class extends ce{async resolveServerFileTarget(e,t){return{serverUrl:await this.resolveServerUrl(e,t.url),remotePath:aC(t.path)}}createServerFileClient(e,t){return this.createServerApiClient(e,t.serverUrl)}};function st(r,e={}){let[t,n]=r.positional,o=e.defaultPath;return t===void 0?(o===void 0&&hv(),{path:o}):n===void 0?ao(t)?(o===void 0&&hv(),{url:t,path:o}):{path:t}:{url:t,path:n}}function hv(){throw new R("err.cli.missingInput",{inputId:"serverFilePath",sources:["<path>"]})}function Un(r,e="--revision"){if(r===void 0)return;let t=_t(r);if(t===void 0)throw new R("err.cli.invalidNonNegativeInteger",{input:e,option:e,value:r});return t}function Ic(r){let e=He(r.value("file")),t=r.has("stdin");if(e&&t)throw new R("err.cli.conflictingInputs",{inputs:["--file=<local-file>","--stdin"]});if(!e&&!t)throw new R("err.cli.missingInput",{inputId:"contentSource",sources:["--file=<local-file>","--stdin"]});return e?{kind:"file",file:e}:{kind:"stdin"}}async function Dc(r,e,t){if(e.kind==="stdin")return{source:"stdin",content:await t()};let n=Tt(r.cwd,e.file);if(!(await uc(n)).isFile())throw new R("err.cli.invalidRegularFile",{inputId:"inputFile",source:n,path:n});return{source:"file",localFile:n,content:Fc.createReadStream(n)}}function fv(r){let e=He(r.value("output"));if(!e)throw new R("err.cli.missingInput",{inputId:"outputFile",sources:["--output=<file>"]});return e}async function gv(r,e){try{await Fc.promises.stat(r)}catch(t){if(x(t))return;throw t}if(!e)throw new R("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:"--force",path:r})}function Ac(r,e,t){if(r!==void 0&&e)throw new R("err.cli.conflictingInputs",{inputs:["--expected-revision","--force"],context:{command:t}});if(r===void 0&&!e)throw new R("err.cli.missingInput",{inputId:"revisionOrForce",sources:["--expected-revision=<revision>","--force"],context:{command:t}})}function Ta(r){return O({id:r.id,projectName:r.projectName,path:r.path,parentDir:r.parentDir,name:r.name,isFolder:r.isFolder,type:r.type,size:r.size,hash:r.hash,revision:r.revision,modifyTime:r.modifyTime,modifier:r.modifier,desc:r.desc,labels:r.labels,hidden:r.hidden,order:r.order})}function vI(r){return O({path:r.path,oldPath:r.oldPath,modifyTime:r.modifyTime,contentMutation:r.contentMutation,pathMutation:r.pathMutation,metaInfoChanged:r.metaInfoChanged,metaInfo:r.metaInfo?Ta(r.metaInfo):void 0,warnings:r.warnings})}function Ci(r,e,t,n){return O({workspace:r.workspace?.root,server:e,path:t.path,source:n?.source,localFile:n?.localFile,result:vI(t)})}async function Si(r,e,t){try{let n=await t();return kI(r,n),n}catch(n){let o=wI(n,r,e);if(!o)throw n;yv(r,e,o)}}function kI(r,e){e.success||yv(r,e.path,ba(e.errorInfo,{action:r,path:e.path}))}function yv(r,e,t){let n=Nn(t)||d("cli.cmd.server.file.unknownServerFile"),o={action:r,remotePath:e,reason:n,errorInfo:t};throw PI(t)?new Ht("err.base.operationFailed",o,{cause:t}):new ct("err.base.operationFailed",o,{cause:t})}function wI(r,e,t){if(!(!(r instanceof or)||!r.remoteError))return ba(yn(r.remoteError),{action:e,path:t})}function PI(r){let e=xc(r);return e==="pull"||e==="rename"}function Cv(r){return r.length===0?d("cli.cmd.server.file.files"):me({columns:[d("cli.out.header.type"),d("cli.cmd.server.file.name"),d("cli.out.header.path"),d("cli.out.header.revision"),d("cli.cmd.server.file.size")],rows:r.map(e=>[e.isFolder?d("cli.cmd.server.file.folder"):d("cli.cmd.server.file.file"),e.name,e.path,Ea(e.revision),Ea(e.size)])})}function Sv(r){return me({columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:[[d("cli.out.header.path"),r.path],[d("cli.out.header.type"),r.isFolder?d("cli.cmd.server.file.folder"):d("cli.cmd.server.file.file")],[d("cli.cmd.server.file.id"),r.id],[d("cli.out.header.revision"),Ea(r.revision)],[d("cli.cmd.server.file.size"),Ea(r.size)],[d("cli.cmd.server.file.modifyTime"),Ea(r.modifyTime)],[d("cli.out.header.description"),r.desc??""]]})}function vi(r,e){return d("cli.cmd.server.file.success",r,e.path)}function Ea(r){return r===void 0?"":String(r)}var _u=class extends ze{constructor(t=Ur){super();this.readStdin=t}toOptions(t){return{...st(t),source:Ic(t)}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await Dc(t,n.source,this.readStdin),s=await Si("Create",o.remotePath,()=>i.saveFile(o.remotePath,a.content,{expectedRevision:null}));return t.output.result(Ci(t,o.serverUrl,s,a),()=>vi("Create",s)),0}},vv={path:["server","file","create"],domain:"server",spec:{name:"server file create",flags:[{name:"file",takesValue:!0,valueHint:"local-file"},{name:"stdin",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file create /DEMO/apps/new.view --file=./new.view",'printf "{}" | succapp server file create /DEMO/apps/new.view --stdin',"succapp server file create https://bi.example.com /DEMO/apps/new.view --file=./new.view"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new _u};D();F();B();re();K();var kv=E(require("fs")),wv=require("stream/promises"),Lu=class extends ze{toOptions(e){return{...st(e),revision:Un(e.value("revision")),upgradeContent:e.has("upgrade-content"),output:fv(e),force:e.has("force")}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),o=Tt(e.cwd,t.output);await gv(o,t.force);let a=await(await this.createServerFileClient(e,n)).getFileContentStream(n.remotePath,{revision:t.revision,upgradeContent:t.upgradeContent});try{await(0,wv.pipeline)(a.stream,kv.createWriteStream(o,{flags:t.force?"w":"wx"}))}catch(s){throw!t.force&&RI(s)?new R("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:"--force",path:o},{cause:s}):s}return e.output.result(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,output:o,revision:a.revision,modifyTime:a.modifyTime}),()=>d("cli.cmd.server.file.download.downloaded",n.remotePath,o)),0}},Pv={path:["server","file","download"],domain:"server",spec:{name:"server file download",flags:[{name:"revision",takesValue:!0,valueHint:"n"},{name:"upgrade-content",takesValue:!1},{name:"output",takesValue:!0,valueHint:"local-file"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file download /DEMO/apps/a.view --output=./a.view","succapp server file download --revision=12 /DEMO/apps/a.view --output=./a.view","succapp server file download /DEMO/apps/a.view --output=./a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Lu};function RI(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="EEXIST"}B();F();D();re();function Oc(r){let e=_t(r);if(r===void 0||e!==void 0&&e>0)return e;throw new R("err.cli.invalidPositiveInteger",{input:"--limit",option:"--limit",value:r})}function _c(r){return r.length===0?d("cli.out.workspace.file.hist.empty"):me({columns:[d("cli.out.header.revision"),d("cli.out.header.action"),d("cli.out.header.modified"),d("cli.out.header.modifier"),d("cli.out.header.path"),d("cli.out.header.message")],rows:r.map(e=>[bI(e.revision),e.action??"",EI(e.modifyTime),e.modifierName??e.modifier??"",e.path,e.message??""])})}function Lc(r){return O({id:r.id,fileId:r.fileId,path:r.path,revision:r.revision,action:r.action,modifyTime:r.modifyTime,modifier:r.modifier,modifierName:r.modifierName,message:r.message,detail:r.detail})}function bI(r){return r===void 0?"":String(r)}function EI(r){return r===void 0?"":new Date(r).toISOString()}re();var Nu=class extends ze{toOptions(e){return{...st(e),limit:Oc(e.value("limit"))}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFileHistory(n.remotePath,{limit:t.limit});return e.output.result(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{histories:i.length},histories:i.map(Lc)}),()=>_c(i)),0}},Rv={path:["server","file","history"],domain:"server",spec:{name:"server file history",flags:[{name:"limit",takesValue:!0,valueHint:"n"}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file history /DEMO/views/sales.view","succapp server file history https://bi.example.com /DEMO/views/sales.view","succapp server file history --limit=20 /DEMO/views/sales.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Nu};re();var Wu=class extends ze{toOptions(e){return st(e)}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFile(n.remotePath);return e.output.result(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,file:Ta(i)}),()=>Sv(i)),0}},bv={path:["server","file","info"],domain:"server",spec:{name:"server file info",flags:[],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file info /DEMO/apps/a.view","succapp server file info https://bi.example.com /DEMO/apps/a.view","succapp server file info /DEMO/apps/a.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Wu};re();var Uu=class extends ze{toOptions(e){return st(e,{defaultPath:"/"})}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).listFiles(n.remotePath);return e.output.result(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{files:i.length},files:i.map(Ta)}),()=>Cv(i)),0}},Ev={path:["server","file","list"],domain:"server",spec:{name:"server file list",flags:[],positionals:[{name:"url",role:"server-url"},{name:"path"}],usageArgs:"[<options>] [<url>] [<path>]",examples:["succapp --server=https://bi.example.com server file list /DEMO","succapp server file list https://bi.example.com /DEMO/apps","succapp server file list --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Uu};D();re();var ju=class extends ze{constructor(t=ai){super();this.opener=t}toOptions(t){return{...st(t),edit:t.has("edit")}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=n.edit===!0,a=ni(o.serverUrl,{path:o.remotePath,...i?{":edit":"true"}:{}});return await this.opener(a,t.abortSignal),t.output.result(O({workspace:t.workspace?.root,server:o.serverUrl,path:o.remotePath,edit:i,url:a}),()=>TI(a,i)),0}},Tv={path:["server","file","open"],domain:"server",spec:{name:"server file open",flags:[{name:"edit",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file open /DEMO/views/sales.view","succapp server file open https://bi.example.com /DEMO/views/sales.view","succapp server file open --edit /DEMO/views/sales.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ju};function TI(r,e){return d(e?"cli.cmd.server.file.open.openedEdit":"cli.cmd.server.file.open.openedView",r)}var Bu=class extends ze{toOptions(e){return{...st(e),expectedRevision:Un(e.value("expected-revision"),"--expected-revision"),force:e.has("force")}}async executeCommand(e,t){Ac(t.expectedRevision,t.force,"server file remove");let n=await this.resolveServerFileTarget(e,t),o=await this.createServerFileClient(e,n),i=await Si("Delete",n.remotePath,()=>o.deleteFile(n.remotePath,t.force?void 0:{expectedRevision:t.expectedRevision}));return e.output.result(Ci(e,n.serverUrl,i),()=>vi("Delete",i)),0}},Mv={path:["server","file","remove"],domain:"server",spec:{name:"server file remove",flags:[{name:"expected-revision",takesValue:!0,valueHint:"n"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file remove /DEMO/apps/a.view --expected-revision=12","succapp server file remove https://bi.example.com /DEMO/apps/a.view --expected-revision=12","succapp server file remove /DEMO/apps/a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Bu};re();var Vu=class extends ze{toOptions(e){return{...st(e),revision:Un(e.value("revision")),upgradeContent:e.has("upgrade-content")}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFileContent(n.remotePath,{revision:t.revision,upgradeContent:t.upgradeContent});return e.output.content(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,revision:i.revision,modifyTime:i.modifyTime,size:i.buffer.length}),i.buffer),0}},xv={path:["server","file","show"],domain:"server",spec:{name:"server file show",flags:[{name:"revision",takesValue:!0,valueHint:"n"},{name:"upgrade-content",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file show /DEMO/apps/a.view","succapp server file show --revision=12 /DEMO/apps/a.view","succapp server file show /DEMO/apps/a.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Vu};var qu=class extends ze{constructor(t=Ur){super();this.readStdin=t}toOptions(t){return{...st(t),source:Ic(t),expectedRevision:Un(t.value("expected-revision"),"--expected-revision"),force:t.has("force")}}async executeCommand(t,n){Ac(n.expectedRevision,n.force,"server file update");let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await Dc(t,n.source,this.readStdin),s=await Si("Put",o.remotePath,()=>i.saveFile(o.remotePath,a.content,n.force?void 0:{expectedRevision:n.expectedRevision}));return t.output.result(Ci(t,o.serverUrl,s,a),()=>vi("Put",s)),0}},Fv={path:["server","file","update"],domain:"server",spec:{name:"server file update",flags:[{name:"file",takesValue:!0,valueHint:"local-file"},{name:"stdin",takesValue:!1},{name:"expected-revision",takesValue:!0,valueHint:"n"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file update /DEMO/apps/a.view --file=./a.view --expected-revision=12",'printf "{}" | succapp server file update /DEMO/apps/a.view --stdin --expected-revision=12',"succapp server file update /DEMO/apps/a.view --file=./a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new qu};D();var $u=class extends ce{toOptions(e){return{url:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).getProjects();return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,projects:i.map(Cc)},()=>MI(i)),0}},Iv={path:["server","project","list"],domain:"server",spec:{name:"server project list",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server project list","succapp --server=https://bi.example.com server project list","succapp server project list http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new $u};function MI(r){return{columns:[d("cli.out.header.project"),d("cli.out.common.id"),d("cli.out.header.description")],rows:r.map(e=>[e.name,e.id??"",e.desc??""])}}B();F();D();var Hu=class extends ce{toOptions(e){return{...xI(e),desc:He(e.value("desc"))}}validateOptions(e,t){!e.workspace&&!t.url&&!e.config.server&&Ov()}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).createProject({name:t.projectName,desc:t.desc});return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,project:Cc(i)},()=>FI(i)),0}},Av={path:["server","project","create"],domain:"server",spec:{name:"server project create",flags:[{name:"desc",takesValue:!0,valueHint:"text",description:"cli.cmd.server.proj.create.descOption"}],positionals:[{name:"url",role:"server-url"},{name:"project"}],usageArgs:"[<options>] [<url>] <project>",examples:["succapp server project create SALES",'succapp server project create SALES --desc="Sales demo"',"succapp server project create http://localhost:8180 SALES --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Hu};function xI(r){let[e,t]=r.positional;return e===void 0&&Dv(),t===void 0?(ao(e)&&Dv(),{projectName:e}):(ao(e)||Ov(),{url:e,projectName:t})}function Dv(){throw new R("err.cli.missingInput",{inputId:"projectName",sources:["<project>"]})}function Ov(){throw new R("err.cli.missingInput",{inputId:"server",sources:["--server=<url>","<url> <project>"]})}function FI(r){return d("cli.cmd.server.proj.create.created",r.name)}D();F();B();re();var zu="input",Ku="param",ki=class extends ce{async executeCommand(e,t){let n=await this.resolveServerUrl(e),o=await this.createServerApiClient(e,n);return this.executeScriptCommand(e,n,o,t)}};function Nc(r){return O({result:"result"in r?r.result:void 0,elapsedMs:"elapsedMs"in r?r.elapsedMs:void 0,diagnostics:"diagnostics"in r?r.diagnostics:void 0})}function Wc(){return d("cli.cmd.server.script.done")}function _v(r,e){let t=r.trim();if(!Rs(t))return r;try{return JSON.parse(t)}catch(n){throw new R("err.cli.invalidJson",{inputId:"inputFile",source:e,context:{file:e}},{cause:n})}}K();var Gu=class extends ki{constructor(t=ii){super();this.readFileText=t}toOptions(t){return{scriptPath:t.positional[0]}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(Tt(t.cwd,i.scriptPath)),s=await o.checkScript({script:a});return t.output.result({...de(t,n),path:i.scriptPath,...Nc(s)},()=>Wc()),0}},Lv={path:["server","script","check"],domain:"server",spec:{name:"server script check",flags:[],positionals:[{name:"file",required:!0}],usageArgs:"[<options>] <file>",examples:["succapp server script check ./scripts/job.js"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Gu};re();K();var Ju=class extends ki{constructor(t=ii){super();this.readFileText=t}toOptions(t){return{scriptPath:t.positional[0],inputFile:t.value(zu),params:gC(t.values(Ku))}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(Tt(t.cwd,i.scriptPath)),s=i.inputFile?_v(await this.readFileText(Tt(t.cwd,i.inputFile)),i.inputFile):void 0,c=yC(i.params),l=await o.executeScript({script:a,args:O({input:s,params:c})});return t.output.result({...de(t,n),path:i.scriptPath,params:c,...Nc(l)},()=>Wc()),0}},Nv={path:["server","script","exec"],domain:"server",spec:{name:"server script exec",flags:[{name:zu,takesValue:!0,valueHint:"file"},{name:Ku,takesValue:!0,repeatable:!0,valueHint:"key=value"}],positionals:[{name:"file",required:!0}],usageArgs:"[<options>] <file>",examples:["succapp server script exec ./scripts/job.js","succapp server script exec ./scripts/job.js --input=./input.json --param=mode=preview"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ju};F();B();D();re();K();var Bv=E(require("fs")),vo="key",wi="set",Pi="file",Ri="stdin",Uc="unset",jc="expected-revision",II="system";function Bc(r,e={}){let[t,n]=r.positional,o=e.requireTarget===!0;return t===void 0?(o&&Uv(),{}):n===void 0?ao(t)?(o&&Uv(t),{url:t}):{target:Wv(t)}:{url:t,target:Wv(n)}}function Wv(r){if(r!==II)return r}function Uv(r){throw new R("err.cli.missingInput",{inputId:"settingsTarget",sources:["<target>"],...r!==void 0?{context:{server:r}}:{}})}function Vv(r){let e=He(r.value(wi)),t=He(r.value(Pi)),n=r.has(Ri),o=[];if(e&&o.push(`--${wi}=<json>`),t&&o.push(`--${Pi}=<local-file>`),n&&o.push(`--${Ri}`),o.length>1)throw new R("err.cli.conflictingInputs",{inputs:o});if(e)return{kind:"inline",json:e};if(t)return{kind:"file",file:t};if(n)return{kind:"stdin"}}function qv(r){return zv(r,vo)}function $v(r){let e=r.value(vo);if(e!==void 0)return Kv(vo,e),e}function Hv(r){return zv(r,Uc)}function zv(r,e){let t=[];for(let n of r.values(e))Kv(e,n),t.push(n);return t}function Kv(r,e){if(!e)throw new R("err.cli.missingOptionValue",{option:`--${r}`})}function Gv(r,e=`--${jc}`){if(r===void 0)return;let t=_t(r);if(t===void 0)throw new R("err.cli.invalidNonNegativeInteger",{input:e,option:e,value:r});return t}async function Jv(r,e,t,n){if(!e&&t.length===0)throw new R("err.cli.missingInput",{inputId:"settingsPatch",sources:[`--${wi}=<json>`,`--${Pi}=<local-file>`,`--${Ri}`,`--${Uc}=<key>`]});let i={...e?await DI(r,e,n):{}};for(let a of t)i[a]=null;return i}async function DI(r,e,t){if(e.kind==="inline"){let a=`--${wi}`;return jv(e.json,a,a)}if(e.kind==="stdin"){let a=`--${Ri}`;return jv(await t(),a,a)}let n=Tt(r.cwd,e.file);if(!(await uc(n)).isFile())throw new R("err.cli.invalidRegularFile",{inputId:"inputFile",source:n,path:n});let i=await Bv.promises.readFile(n,"utf-8");return AI(i,n)}function jv(r,e,t){let n=Yv(r);if(n===void 0)throw new R("err.cli.invalidJsonObject",{input:e,source:t});return n}function AI(r,e){let t=Yv(r);if(t===void 0)throw new R("err.cli.invalidJsonObject",{input:`--${Pi}`,source:e});return t}function Yv(r){let e=r.trim();if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return q(t)?t:void 0}function Xv(r){return r??d("cli.cmd.server.settings.target.system")}function Qv(r,e){return`${d("cli.cmd.server.settings.get.header",Xv(r))}
|
|
65
|
+
${ek(e)}`}function Zv(r,e){let t=Object.keys(e),n=t.length>0?t.join(", "):d("cli.cmd.server.settings.set.noKeys");return`${d("cli.cmd.server.settings.set.success",Xv(r),n)}
|
|
66
|
+
${ek(e)}`}function ek(r){return JSON.stringify(r,null,2)}function tk(r,e,t,n){return{settings:t,...r!==void 0?{path:r}:{},...e!==void 0?{key:e}:{},...n!==void 0?{expectedRevision:n}:{}}}var rk=Ur;var Yu=class extends ce{toOptions(e){return{...Bc(e),keys:qv(e)}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),a=await(await this.createServerApiClient(e,n)).getSettings({...t.target!==void 0?{path:t.target}:{},...t.keys.length>0?{keys:[...t.keys]}:{}});return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,target:t.target,settings:a},()=>Qv(t.target,a)),0}},nk={path:["server","settings","get"],domain:"server",spec:{name:"server settings get",flags:[{name:vo,takesValue:!0,repeatable:!0,valueHint:"key"}],positionals:[{name:"url",role:"server-url"},{name:"target"}],usageArgs:"[<options>] [<url>] [<target>]",examples:["succapp server settings get","succapp server settings get DEMO --json","succapp server settings get /DEMO/app/x.app --key modelConfig"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Yu};var Xu=class extends ce{constructor(t=rk){super();this.readStdin=t}toOptions(t){return{...Bc(t,{requireTarget:!0}),source:Vv(t),unsetKeys:Hv(t),key:$v(t),expectedRevision:Gv(t.value(jc))}}async executeCommand(t,n){let o=await Jv(t,n.source,n.unsetKeys,this.readStdin),i=await this.resolveServerUrl(t,n.url),a=await this.createServerApiClient(t,i),s=tk(n.target,n.key,o,n.expectedRevision),l=await a.setSettings(s);return t.output.result({...t.workspace?{workspace:t.workspace.root}:{},server:i,target:n.target,settings:l},()=>Zv(n.target,l)),0}},ok={path:["server","settings","set"],domain:"server",spec:{name:"server settings set",flags:[{name:wi,takesValue:!0,valueHint:"json"},{name:Pi,takesValue:!0,valueHint:"local-file"},{name:Ri,takesValue:!1},{name:Uc,takesValue:!0,repeatable:!0,valueHint:"key"},{name:vo,takesValue:!0,valueHint:"key"},{name:jc,takesValue:!0,valueHint:"n"}],positionals:[{name:"url",role:"server-url"},{name:"target",required:!0}],usageArgs:"[<options>] [<url>] <target>",examples:[`succapp server settings set system --set '{"ai":{"defaultModel":"qwen-max"}}'`,"succapp server settings set DEMO --file=./patch.json --expected-revision=12","succapp server settings set /DEMO/app/x.app --unset rag"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Xu};var ik=[yS,hS,Iv,Av,Ev,bv,xv,Pv,Tv,Rv,vv,Fv,Mv,Nv,Lv,CS,uv,nk,ok];D();F();B();K();var wR=E(require("path"));var kp=E(require("fs")),Fr=E(require("path"));var Vc=class{total=0;byApi=new Map;byPath=new Map;pathKeyCount=0;droppedPathKeys=0;recentCallsDropped=0;recentCalls=[];maxPathKeys;maxRecentCalls;constructor(e={}){this.maxPathKeys=e.maxPathKeys??500,this.maxRecentCalls=e.maxRecentCalls??200}record(e){this.total++,this.byApi.set(e.name,(this.byApi.get(e.name)??0)+1),e.path!==void 0&&this.recordPath(e.name,e.path),this.recordRecentCall(e)}getSnapshot(e={}){let t={total:this.total,byApi:Object.fromEntries(this.byApi),byPath:this.createByPathSnapshot(),droppedPathKeys:this.droppedPathKeys,recentCallsDropped:this.recentCallsDropped,...e.includeRecentCalls?{recentCalls:this.recentCalls.map(n=>({...n}))}:{}};return e.reset&&this.reset(),t}reset(){this.total=0,this.byApi.clear(),this.byPath.clear(),this.pathKeyCount=0,this.droppedPathKeys=0,this.recentCallsDropped=0,this.recentCalls.length=0}recordPath(e,t){let n=this.byPath.get(e);if(n?.has(t)){n.set(t,(n.get(t)??0)+1);return}if(this.pathKeyCount>=this.maxPathKeys){this.droppedPathKeys++;return}n||(n=new Map,this.byPath.set(e,n)),n.set(t,1),this.pathKeyCount++}recordRecentCall(e){if(this.maxRecentCalls<=0){this.recentCallsDropped++;return}this.recentCalls.length>=this.maxRecentCalls&&(this.recentCalls.shift(),this.recentCallsDropped++),this.recentCalls.push({...e})}createByPathSnapshot(){let e={};for(let[t,n]of this.byPath)e[t]=Object.fromEntries(n);return e}};var Qu=class{constructor(e){this.delegate=e}diagnostics=new Vc;get serverUrl(){return this.delegate.serverUrl}get currentAuthorizationHeader(){return this.delegate.currentAuthorizationHeader}getDiagnostics(e){return this.diagnostics.getSnapshot(e)}async getServerInfo(){return this.recordApiCall("getServerInfo"),this.delegate.getServerInfo()}async getServerDetailInfo(){return this.recordApiCall("getServerDetailInfo"),this.delegate.getServerDetailInfo()}async getMetadataVersions(){return this.recordApiCall("getMetadataVersions"),this.delegate.getMetadataVersions()}async getProjects(){return this.recordApiCall("getProjects"),this.delegate.getProjects()}async createProject(e){return this.recordApiCall("createProject",e.name),this.delegate.createProject(e)}async listFiles(e){return this.recordApiCall("listFiles",e),this.delegate.listFiles(e)}async countFiles(e){return this.recordApiCall("countFiles",e),this.delegate.countFiles(e)}async getFileDescendant(e){return this.recordApiCall("getFileDescendant",e),this.delegate.getFileDescendant(e)}async getFile(e){return this.recordApiCall("getFile",e),this.delegate.getFile(e)}async getFileInfos(e){return this.recordApiCall("getFileInfos"),this.delegate.getFileInfos(e)}async getFileHistory(e,t){return this.recordApiCall("getFileHistory",e),this.delegate.getFileHistory(e,t)}isNotFoundError(e){return this.delegate.isNotFoundError(e)}async getFileContent(e,t){return this.recordApiCall("getFileContent",e),this.delegate.getFileContent(e,t)}async getFileContentStream(e,t){return this.recordApiCall("getFileContentStream",e),this.delegate.getFileContentStream(e,t)}async saveFile(e,t,n){return this.recordApiCall("saveFile",e),this.delegate.saveFile(e,t,n)}async createFile(e){return this.recordApiCall("createFile",e.path),this.delegate.createFile(e)}async modifyFile(e){return this.recordApiCall("modifyFile",e.path),this.delegate.modifyFile(e)}async moveFile(e){return this.recordApiCall("moveFile",e.path),this.delegate.moveFile(e)}async upgradeFileContent(e){return this.recordApiCall("upgradeFileContent",e.path),this.delegate.upgradeFileContent(e)}async deleteFile(e,t){return this.recordApiCall("deleteFile",e),this.delegate.deleteFile(e,t)}async getExtensionTemplates(){return this.recordApiCall("getExtensionTemplates"),this.delegate.getExtensionTemplates()}async downloadExtensionTemplate(e,t){return this.recordApiCall("downloadExtensionTemplate",`${e}/${t}`),this.delegate.downloadExtensionTemplate(e,t)}async getDataSources(){return this.recordApiCall("getDataSources"),this.delegate.getDataSources()}async getSettings(e){return this.recordApiCall("getSettings",e?.path),this.delegate.getSettings(e)}async setSettings(e){return this.recordApiCall("setSettings",e.path),this.delegate.setSettings(e)}async probeDataSource(e,t){return this.recordApiCall("probeDataSource",e),this.delegate.probeDataSource(e,t)}async getDataSourceConfig(e,t){return this.recordApiCall("getDataSourceConfig",e),this.delegate.getDataSourceConfig(e,t)}async testDataSource(e){return this.recordApiCall("testDataSource",e.originalDataSource??e.config.name),this.delegate.testDataSource(e)}async createDataSource(e){return this.recordApiCall("createDataSource",e.config.name),this.delegate.createDataSource(e)}async updateDataSource(e){return this.recordApiCall("updateDataSource",e.dataSource),this.delegate.updateDataSource(e)}async deleteDataSource(e){return this.recordApiCall("deleteDataSource",e.dataSource),this.delegate.deleteDataSource(e)}async listDbSchemas(e,t){return this.recordApiCall("listDbSchemas",e),this.delegate.listDbSchemas(e,t)}async listDbTables(e,t){return this.recordApiCall("listDbTables",e),this.delegate.listDbTables(e,t)}async describeDbTable(e,t,n){return this.recordApiCall("describeDbTable",`${e}/${t}`),this.delegate.describeDbTable(e,t,n)}async queryDbDdl(e,t,n){return this.recordApiCall("queryDbDdl",`${e}/${t}`),this.delegate.queryDbDdl(e,t,n)}async executeDbQuery(e){return this.recordApiCall("executeDbQuery",e.dataSource),this.delegate.executeDbQuery(e)}async exportDbQueryData(e){return this.recordApiCall("exportDbQueryData",e.dataSource),this.delegate.exportDbQueryData(e)}async exportDbTableData(e){return this.recordApiCall("exportDbTableData",`${e.dataSource}/${e.tableName}`),this.delegate.exportDbTableData(e)}async executeDbAny(e){return this.recordApiCall("executeDbAny",e.dataSource),this.delegate.executeDbAny(e)}async importDbTableData(e){return this.recordApiCall("importDbTableData",`${e.dataSource}/${e.tableName}`),this.delegate.importDbTableData(e)}async executeScript(e){return this.recordApiCall("executeScript","<temporary-script>"),this.delegate.executeScript(e)}async checkScript(e){return this.recordApiCall("checkScript","<temporary-script>"),this.delegate.checkScript(e)}async refreshCache(){return this.recordApiCall("refreshCache"),this.delegate.refreshCache()}buildViewFileRedirectUrl(e){return this.delegate.buildViewFileRedirectUrl(e)}async getTypeScriptSupportApiLibs(){return this.recordApiCall("getTypeScriptSupportApiLibs"),this.delegate.getTypeScriptSupportApiLibs()}async getJsonSchemaSupport(){return this.recordApiCall("getJsonSchemaSupport"),this.delegate.getJsonSchemaSupport()}async downloadJsonSchema(e){return this.recordApiCall("downloadJsonSchema"),this.delegate.downloadJsonSchema(e)}async getFrontendFrameworksManifest(){return this.recordApiCall("getFrontendFrameworksManifest"),this.delegate.getFrontendFrameworksManifest()}recordApiCall(e,t){this.diagnostics.record({name:e,path:t})}};function ak(r){return new Qu(r)}K();Ir();Sn();ut();Mr();er();var ll=class extends Wt{async execute(){this.task.throwIfAborted();let e=this.options.scope??"both",t=e==="local",n=this.options.refreshAll?await this.context.refreshSyncStatusState({scope:e,forceRefresh:this.options.forceRefresh,rootRemotePath:this.options.rootRemotePath,source:this.options.source,task:this.task}):void 0,o=this.context.getSyncChanges();if(t&&(o=o.filter(a=>a.type!=="conflict"&&mt(a))),this.options.paths?.length){let a=await this.resolveTargetRemotePaths(this.options.paths,t?"mirror-only":"server-backed");o=this.filterChangesByTargets(o,a)}let i=n?.warnings??[];return{changes:o,localChanges:o.filter(a=>mt(a)),remoteChanges:t?[]:o.filter(a=>Tr(a)),conflicts:t?[]:o.filter(a=>a.type==="conflict"),...i.length>0?{warnings:i}:{}}}};var iw=E(require("fs"));Y();D();B();F();K();ut();var sn=E(require("fs")),cn=E(require("path")),Fm=require("node:util");K();Sn();Ee();F();Ke();Y();ut();bn();Sn();F();Y();Et();var sD=T("sync.file-fetcher"),cD=3,lD=20,pD=300,pl=class{constructor(e){this.options=e;let t={};e.maxConcurrency!==void 0&&(t.maxConcurrency=e.maxConcurrency),e.signal&&(t.signal=e.signal),this.runner=new Qe(t),this.maxAttemptsPerFile=Math.max(1,e.maxAttemptsPerFile??cD),this.maxRetries=Math.max(0,e.maxRetries??lD),this.retryBaseDelayMs=Math.max(0,e.retryBaseDelayMs??pD)}runner;maxAttemptsPerFile;maxRetries;retryBaseDelayMs;retryCount=0;stoppedError;fetchToLocal(e,t){return yt(this.options.signal),this.stoppedError?Promise.reject(this.stoppedError):this.runner.addTask(()=>this.fetchToLocalWithRetry(e,t))}async fetchToLocalWithRetry(e,t){let n;for(let o=1;o<=this.maxAttemptsPerFile;o++){if(yt(this.options.signal),this.stoppedError)throw this.stoppedError;try{let i=await this.options.getContentStream(e);return yt(this.options.signal),await sr(t,i.stream),i}catch(i){if(i instanceof ir)throw i;if(n=i,!this.shouldRetryContentDownload(i))throw this.stop(i),i;if(o>=this.maxAttemptsPerFile){let s=new Error(`download file content failed: ${e}: ${io(i)}`);throw this.stop(s),s}if(!this.consumeRetryBudget()){let s=new Error(`download file content retry budget exhausted after ${this.maxRetries} retries: ${e}: ${io(i)}`);throw this.stop(s),s}let a=this.retryBaseDelayMs*o;sD.warn(`content download interrupted, retrying file attempt ${o+1}/${this.maxAttemptsPerFile}, fetch retry budget ${this.retryCount}/${this.maxRetries}: `+e,i),await new Promise(s=>setTimeout(s,a)),yt(this.options.signal)}}throw n instanceof Error?n:new Error(String(n??"content download failed"))}stop(e){this.stoppedError||(this.stoppedError=e instanceof Error?e:new Error(String(e??"content download failed")),this.runner.cancel(this.stoppedError))}consumeRetryBudget(){return this.retryCount>=this.maxRetries?!1:(this.retryCount++,!0)}shouldRetryContentDownload(e){return Xf(e)}};var Mm=E(require("fs")),dl=E(require("path"));K();Ke();Y();bn();F();er();bo();function ew(r){let e=new Map(r.serverProjects.map(a=>[a.remotePath,a])),t=dD(r.serverProjects),n=new Map(r.mirrorProjects.map(a=>[a.remotePath,a])),o=uD(r.mirrorProjects),i={scannableProjectPaths:new Set,unavailableProjects:[],renamedProjects:[]};for(let a of r.trackedProjects){let s=n.get(a),c=s?.id,l=e.get(a);if(l){c&&l.id&&c!==l.id?i.unavailableProjects.push(Zk(a,s)):i.scannableProjectPaths.add(a);continue}let p=c&&!o.has(c)?t.get(c):void 0;if(p&&p.remotePath!==a){i.renamedProjects.push({oldProject:s??{name:tw(a),remotePath:a,id:c},newProject:p});continue}i.unavailableProjects.push(Zk(a,s))}return i}function dD(r){let e=new Map,t=new Set;for(let n of r)if(n.id){if(e.has(n.id)){t.add(n.id);continue}e.set(n.id,n)}for(let n of t)e.delete(n);return e}function uD(r){let e=new Set,t=new Set;for(let n of r)n.id&&(e.has(n.id)&&t.add(n.id),e.add(n.id));return t}function Zk(r,e){return e||{name:tw(r),remotePath:r}}function tw(r){let e=r.lastIndexOf("/");return e>=0?r.slice(e+1):r}var mD=8,rw=100,hD=/^[0-9a-f]{64}$/,Ft=T("sync.detector.remote"),xm=class{detectRuns=0;serverFileInfoRequests=0;serverFileInfoHits=0;serverFileInfoMisses=0;serverFoldersListed=0;serverFoldersSkippedByScope=0;serverFoldersSkippedByWaterline=0;mirrorFoldersScanned=0;mirrorEntriesCollected=0;mirrorContentStatChecks=0;mirrorContentHashChecks=0;changesByType={};changesByKind=fD();scanScope=gD();visitorEvents={};api={total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0};describeForLog(){return`
|
|
67
|
+
`+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}createSnapshot(){return{detectRuns:this.detectRuns,serverFileInfoRequests:this.serverFileInfoRequests,serverFileInfoHits:this.serverFileInfoHits,serverFileInfoMisses:this.serverFileInfoMisses,serverFoldersListed:this.serverFoldersListed,serverFoldersSkippedByScope:this.serverFoldersSkippedByScope,serverFoldersSkippedByWaterline:this.serverFoldersSkippedByWaterline,mirrorFoldersScanned:this.mirrorFoldersScanned,mirrorEntriesCollected:this.mirrorEntriesCollected,mirrorContentStatChecks:this.mirrorContentStatChecks,mirrorContentHashChecks:this.mirrorContentHashChecks,changesByType:{...this.changesByType},changesByKind:{...this.changesByKind},scanScope:{...this.scanScope},visitorEvents:{...this.visitorEvents},api:this.api}}},jr=class{constructor(e){this.options=e;this.serverRequestRunner=new Qe({maxConcurrency:mD,signal:e.task.getAbortSignal()})}diagnostics=nw();workspaceState;workspaceStateInitialized=!1;expandedServerFolders=new Set;serverRequestRunner;loggedChangeDetailCount=0;changeDetailLimitLogged=!1;loggedChangeDetailKeys=new Set;visitorTasks=[];visitorChangeKeys=new Set;getDiagnostics(e={}){this.diagnostics.api=this.workspaceStateInitialized?this.workspaceState.client.getDiagnostics({reset:e.reset,includeRecentCalls:e.includeApiRecentCalls})??Tm():Tm();let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}async detect(){this.diagnostics.detectRuns++;let e=Date.now();Ft.debug(`detect start targets=${this.options.targets?.size??"<all>"}`);try{if(this.isSignalAborted()||!await this.initializeWorkspaceState())return[];this.resetChangeDetailLogState();let t=await this.createSnapshot(),n=Date.now(),o=await this.matchSnapshot(t);for(Ft.debug(`match snapshot done elapsed=${Date.now()-n}ms changes=${o.changes.length} renamedFolders=${o.renamedFolders.length}`);await this.expandRenamedFolderChildren(t,o.renamedFolders);)n=Date.now(),o=await this.matchSnapshot(t),Ft.debug(`rematch after folder expansion done elapsed=${Date.now()-n}ms changes=${o.changes.length} renamedFolders=${o.renamedFolders.length}`);let i=o.changes.filter(a=>this.isTargetChange(a));for(let a of i)this.incrementRecordCounter(this.diagnostics.changesByType,a.type),this.recordChangeKind(a),this.dispatchChange(a,t);return await this.waitVisitorTasks(),Ft.debug(`detect diagnostics ${this.describeDiagnosticsForLog()}`),Ft.debug(`detect done elapsed=${Date.now()-e}ms changes=${i.length}`),i}catch(t){throw this.serverRequestRunner.cancel(t),await this.serverRequestRunner.waitAll(),t}}async initializeWorkspaceState(){if(this.workspaceStateInitialized)return!0;let e=this.options.workspace,t=await e.requireServerClient(e.activeServerUrl);if(this.isSignalAborted())return!1;let n=new kt(e.getMirrorRoot()),o=await e.listWorkspaceProjects();return this.isSignalAborted()?!1:(this.workspaceState={client:t,mirror:n,trackedProjects:new Set(o.map(i=>"/"+i))},this.workspaceStateInitialized=!0,!0)}isSignalAborted(){return this.options.signal?.aborted===!0}async createSnapshot(){let e=Date.now(),t={server:new Map,mirror:new Map,skippedServerFolders:new Set,explicitMissingTargets:new Set};return this.diagnostics.scanScope.trackedProjects=this.workspaceState.trackedProjects.size,this.options.targets||(t.projectCompare=await this.computeProjectCompare()),await Promise.all([this.collectMirrorSnapshot(t),this.collectServerSnapshot(t)]),await this.collectMirrorRenameCandidates(t),Ft.debug(`create snapshot done elapsed=${Date.now()-e}ms serverEntries=${t.server.size} mirrorEntries=${t.mirror.size} skippedServerFolders=${t.skippedServerFolders.size} explicitMissingTargets=${t.explicitMissingTargets.size}`),t}async collectServerSnapshot(e){let t=Date.now();if(this.options.targets){let a=await this.filterCloneInProgressPaths(St(this.options.targets));await Promise.all(a.map(s=>this.collectServerTarget(s,e))),Ft.debug(`collect server targets done elapsed=${Date.now()-t}ms targets=${this.options.targets.size} serverEntries=${e.server.size}`);return}let n=e.projectCompare,o=n?[...n.scannableProjectPaths]:[],i=n?n.renamedProjects.map(a=>a.newProject.remotePath):[];await Promise.all([...o.map(a=>this.collectServerEntry(a,e,!0)),...i.map(a=>this.collectServerEntry(a,e,!1))]),Ft.debug(`collect server projects done elapsed=${Date.now()-t}ms scannableProjects=${o.length} renameTargets=${i.length} trackedProjects=${this.workspaceState.trackedProjects.size} serverEntries=${e.server.size} skippedServerFolders=${e.skippedServerFolders.size}`)}async computeProjectCompare(){let[e,t]=await Promise.all([this.workspaceState.client.getProjects(),this.listMirrorProjectPaths()]),n=e.map(s=>({name:s.name,remotePath:"/"+s.name,id:s.id,desc:s.desc})),o=await Promise.all([...t].map(async s=>{let c=await this.workspaceState.mirror.readMeta(s);return{name:s.slice(1),remotePath:s,id:c?.id,desc:c?.desc}})),i=new Set(await this.filterCloneInProgressPaths([...this.workspaceState.trackedProjects])),a=ew({trackedProjects:i,serverProjects:n,mirrorProjects:o});return this.recordProjectCompareScanScope(a,e.length,t),a}recordProjectCompareScanScope(e,t,n){let o=e.scannableProjectPaths.size+e.renamedProjects.length,i=[...e.scannableProjectPaths].filter(s=>n.has(s)).length+e.renamedProjects.filter(s=>n.has(s.oldProject.remotePath)).length,a=this.diagnostics.scanScope;a.serverProjects=t,a.probedProjects=o,a.missingTrackedProjects=e.unavailableProjects.length,a.skippedUntrackedProjects=Math.max(t-o,0),a.mirrorProjectsScanned=i,a.skippedUntrackedMirrorProjects=[...n].filter(s=>!this.workspaceState.trackedProjects.has(s)).length}async collectServerTarget(e,t){let[n,o]=await Promise.all([this.collectServerEntry(e,t,!0),this.workspaceState.mirror.readMeta(e)]);n||!o||(t.explicitMissingTargets.add(e),await this.collectServerEntry(Ve(e)??"/",t,!0))}async collectServerEntry(e,t,n){this.options.task.throwIfAborted();let o=await this.getRemoteFileInfo(e);return o?(await this.collectKnownServerEntry(o,t,n),!0):!1}async collectKnownServerEntry(e,t,n){let o=this.createServerEntry(e);if(o.shouldReport=n,o.isFolder||await this.enrichFileContentState(o),t.server.set(o.remotePath,o),!o.isFolder)return;if(!n){t.skippedServerFolders.add(o.remotePath),this.diagnostics.serverFoldersSkippedByScope++;return}if(await this.canSkipServerFolder(o.remotePath,e)){t.skippedServerFolders.add(o.remotePath),this.diagnostics.serverFoldersSkippedByWaterline++,this.dispatchFolderSkipped(o.remotePath,e);return}let i=await this.listRemoteFiles(o.remotePath);await this.dispatchFolderScanned(o.remotePath,e,i),await Promise.all(i.map(a=>this.collectServerChild(a,t)))}async collectServerChild(e,t){await this.collectKnownServerEntry(e,t,!0)}async canSkipServerFolder(e,t){if(this.options.forceRefresh||this.expandedServerFolders.has(e))return!1;let n=await this.workspaceState.mirror.readMeta(e);return!n||n.modifyTime!==t.modifyTime||!await this.workspaceState.mirror.exists(e)?!1:this.hasHealthyDirectMirrorChildren(e)}async hasHealthyDirectMirrorChildren(e){let t;try{t=(await Mm.promises.readdir(this.workspaceState.mirror.toLocalPath(e),{withFileTypes:!0})).filter(a=>a.name!==Q).map(a=>a.name).sort()}catch(i){if(x(i))return Ft.debug(`mirror folder baseline cannot be listed: ${e}`),!1;throw i}let n=await Er(this.workspaceState.mirror.root,dl.posix.join(e,Q));if(!n.exists||n.damaged)return!1;let o=Object.keys(n.dotMeta).sort();return t.length===o.length&&t.every((i,a)=>i===o[a])}async enrichFileContentState(e){!this.options.forceRefresh||!e.serverInfo||(e.contentMatchesMirror=await this.getContentMatchesMirrorPath(e,e.remotePath))}async getContentMatchesMirrorPath(e,t){if(!e.serverInfo)return;let n=this.getValidServerHash(e.serverInfo),o=this.getValidServerSize(e.serverInfo);if(!(n===void 0||o===void 0)){try{this.diagnostics.mirrorContentStatChecks++;let i=await Mm.promises.stat(this.workspaceState.mirror.toLocalPath(t));if(!i.isFile()||i.size!==o)return!1}catch(i){if(x(i))return Ft.debug(`mirror file content cannot be verified during remote detection: ${t}`),!1;throw i}return this.diagnostics.mirrorContentHashChecks++,await Jc(this.workspaceState.mirror.toLocalPath(t))===n}}getValidServerHash(e){if(e.hash===void 0||e.hash===null)return;if(typeof e.hash!="string")throw new Error(`invalid file content hash: ${e.path}`);let t=e.hash.trim().toLowerCase();if(!hD.test(t))throw new Error(`invalid file content hash: ${e.path}`);return t}getValidServerSize(e){if(!(e.size===void 0||e.size===null)){if(!Number.isSafeInteger(e.size)||e.size<0)throw new Error(`invalid file content size: ${e.path}`);return e.size}}async collectMirrorSnapshot(e){if(this.options.targets){let i=await this.filterCloneInProgressPaths(St(this.options.targets));await Promise.all(i.map(a=>this.collectMirrorRootAndSubtree(a,e)));return}let t=e.projectCompare,n=t?[...t.scannableProjectPaths]:[],o=t?t.renamedProjects.map(i=>i.oldProject.remotePath):[];await Promise.all([...n.map(i=>this.collectMirrorRootAndSubtree(i,e)),...o.map(i=>this.collectMirrorRootEntry(i,e))])}async collectMirrorRenameCandidates(e){if(!this.options.targets)return;let t=new Set;for(let i of e.mirror.values())i.meta.id&&t.add(i.meta.id);let n=new Set,o=new Set;for(let i of e.server.values()){let a=i.meta.id;if(!a||t.has(a))continue;n.add(a);let s=dl.posix.dirname(i.remotePath);s!=="/"&&o.add(s)}n.size!==0&&await Promise.all([...o].map(i=>this.collectMirrorDirectMetaCandidates(i,n,e)))}async collectMirrorDirectMetaCandidates(e,t,n){this.options.task.throwIfAborted(),this.diagnostics.mirrorFoldersScanned++;let o=await this.workspaceState.mirror.listDirectMetaChildren(e);await Promise.all(o.map(async i=>{let a=i.meta.id;if(!a||!t.has(a)||n.mirror.has(i.path))return;let[s,c]=await Promise.all([this.workspaceState.mirror.exists(i.path),this.workspaceState.mirror.isFolder(i.path)]);n.mirror.set(i.path,{remotePath:i.path,isFolder:s?c:i.isFolder,meta:i.meta,exists:s}),this.diagnostics.mirrorEntriesCollected++}))}async listMirrorProjectPaths(){let[e,t]=await Promise.all([this.workspaceState.mirror.listDirectChildren("/"),this.workspaceState.mirror.listDirectMetaChildren("/")]);return new Set([...e,...t].map(n=>n.path))}async filterCloneInProgressPaths(e){return(await Promise.all(e.map(async n=>await this.shouldSkipCloneInProgressProject(n)?void 0:n))).filter(n=>n!==void 0)}async shouldSkipCloneInProgressProject(e){if(this.options.visitor)return!1;let t=Ve(e);if(!t)return!1;let n=await this.workspaceState.mirror.isCloneInProgress(t);return n&&Ft.debug(`skip clone in-progress mirror project: ${t}`),n}async collectMirrorRootAndSubtree(e,t){if(e==="/"){await this.collectMirrorSubtree(e,t);return}(await this.collectMirrorRootEntry(e,t))?.isFolder&&await this.collectMirrorSubtree(e,t)}async collectMirrorRootEntry(e,t){let[n,o,i]=await Promise.all([this.workspaceState.mirror.readMeta(e),this.workspaceState.mirror.exists(e),this.workspaceState.mirror.isFolder(e)]);if(n||o){let a={remotePath:e,isFolder:o?i:!!n?.type&&n.type!=="file",meta:n??{},exists:o};return t.mirror.set(e,a),this.diagnostics.mirrorEntriesCollected++,a}}async collectMirrorSubtree(e,t){this.options.task.throwIfAborted(),this.diagnostics.mirrorFoldersScanned++;let[n,o]=await Promise.all([this.workspaceState.mirror.listDirectChildren(e),this.workspaceState.mirror.listDirectMetaChildren(e)]),i=new Map(o.map(a=>[a.path,a]));await Promise.all(n.map(async a=>{let c=i.get(a.path)?.meta;(c||!a.isFolder)&&(t.mirror.set(a.path,{remotePath:a.path,isFolder:a.isFolder,meta:c??{},exists:!0}),this.diagnostics.mirrorEntriesCollected++),a.isFolder&&await this.collectMirrorSubtree(a.path,t)}));for(let a of o)t.mirror.has(a.path)||(t.mirror.set(a.path,{remotePath:a.path,isFolder:a.isFolder,meta:a.meta,exists:!1}),this.diagnostics.mirrorEntriesCollected++)}async matchSnapshot(e){let t=new Set,n=new Set,o=[],i=[];return await this.matchByPath(e,t,n,o,i),await this.matchById(e,t,n,o,i),this.addUnmatchedChanges(e,t,n,o),{changes:o,renamedFolders:i}}async matchByPath(e,t,n,o,i){let a=this.groupMirrorEntriesById(e.mirror);for(let s of e.server.values()){let c=e.mirror.get(s.remotePath);if(!c)continue;t.add(s.remotePath),n.add(c.remotePath);let l=this.findUnmatchedMirrorEntryById(a,s.meta.id,n);if(!s.meta.id||s.meta.id!==c.meta.id){if(l){if(!c.meta.id){await this.addRemoteRenameChange(e,s,l,n,o,i);continue}n.add(l.remotePath),this.addChange(o,this.createConflictChange(s,l.remotePath),e);continue}if(s.meta.id&&!c.meta.id){this.addChange(o,this.createMirrorRecoveryChange(s,c),e);continue}this.addChange(o,this.createConflictChange(s),e);continue}if(l){await this.addRemoteRenameChange(e,s,l,n,o,i);continue}this.addComparedChange(s,c,o,e)}}async matchById(e,t,n,o,i){let a=this.indexUniqueById(e.server,t),s=this.indexUniqueById(e.mirror,n);for(let c of e.server.values()){if(t.has(c.remotePath)||!c.meta.id)continue;let l=s.get(c.meta.id);if(!(!l||n.has(l.remotePath))&&a.get(c.meta.id)===c){if(t.add(c.remotePath),c.isFolder!==l.isFolder){n.add(l.remotePath),this.addChange(o,this.createConflictChange(c,l.remotePath),e);continue}await this.addRemoteRenameChange(e,c,l,n,o,i)}}}async addRemoteRenameChange(e,t,n,o,i,a){o.add(n.remotePath);let s=await this.createRenamedChange(t,n);this.addChange(i,s,e),t.isFolder&&a.push(s)}addUnmatchedChanges(e,t,n,o){this.addUnavailableTrackedProjectChanges(e,o);for(let i of e.server.values())t.has(i.remotePath)||i.shouldReport===!1||!this.isUnmatchedChangeInTargetSubtree(i.remotePath)||this.addChange(o,this.createRemoteChange(i,"remoteAdded"),e);for(let i of e.mirror.values())n.has(i.remotePath)||this.isUnmatchedChangeInTargetSubtree(i.remotePath)&&(!this.isUnderExplicitMissingTarget(e,i.remotePath)&&this.isUnderSkippedServerFolder(e,i.remotePath)||this.addChange(o,this.createRemoteChange(i,"remoteDeleted"),e))}addUnavailableTrackedProjectChanges(e,t){for(let n of e.projectCompare?.unavailableProjects??[])this.addChange(t,this.createProjectUnavailableChange(n),e)}async expandRenamedFolderChildren(e,t){let n=!1;return await Promise.all(t.map(async o=>{!o.isFolder||this.expandedServerFolders.has(o.remotePath)||this.isProjectRootRenameChange(o)||(this.expandedServerFolders.add(o.remotePath),e.skippedServerFolders.delete(o.remotePath),await this.collectServerEntry(o.remotePath,e,!0),n=!0)})),n}isProjectRootRenameChange(e){return!!e.oldRemotePath&&Ve(e.remotePath)===e.remotePath&&Ve(e.oldRemotePath)===e.oldRemotePath}addComparedChange(e,t,n,o){if(e.isFolder!==t.isFolder){this.addChange(n,this.createConflictChange(e),o);return}let i=this.isRemoteMetaChanged(t.meta,e.meta)||this.isRemoteContentBaselineChanged(t,e,e.contentMatchesMirror),a=!e.isFolder&&(t.exists===!1||this.isRemoteFileContentChanged(t,e,e.contentMatchesMirror,i));(a||i)&&this.addChange(n,this.createRemoteChange(e,"remoteModified",{contentChanged:a,metaChanged:i}),o)}indexUniqueById(e,t){let n=new Map,o=new Set;for(let i of e.values()){let a=i.meta.id;if(!(!a||t.has(i.remotePath))){if(n.has(a)){o.add(a);continue}n.set(a,i)}}for(let i of o)n.delete(i);return n}groupMirrorEntriesById(e){let t=new Map;for(let n of e.values()){let o=n.meta.id;if(!o)continue;let i=t.get(o);i?i.push(n):t.set(o,[n])}return t}findUnmatchedMirrorEntryById(e,t,n){if(!t)return;let o=e.get(t);if(!o)return;let i;for(let a of o)if(!n.has(a.remotePath)){if(i)return;i=a}return i}isUnderSkippedServerFolder(e,t){for(let n of e.skippedServerFolders)if(t!==n&&ee(t,n))return!0;return!1}isUnmatchedChangeInTargetSubtree(e){let t=this.options.targets;if(!t||t.size===0)return!0;for(let n of t)if(ee(e,n))return!0;return!1}isUnderExplicitMissingTarget(e,t){for(let n of e.explicitMissingTargets)if(ee(t,n))return!0;return!1}isTargetChange(e){let t=this.options.targets;return!t||t.size===0?!0:[...t].some(n=>ee(e.remotePath,n)||ee(n,e.remotePath)||!!e.oldRemotePath&&(ee(e.oldRemotePath,n)||ee(n,e.oldRemotePath)))}async getRemoteFileInfo(e){this.diagnostics.serverFileInfoRequests++;try{let t=await this.serverRequestRunner.addTask(()=>this.workspaceState.client.getFile(e));return this.diagnostics.serverFileInfoHits++,t}catch(t){if(this.workspaceState.client.isNotFoundError(t)){Ft.debug(`remote file disappeared during remote change detection: ${e}`),this.diagnostics.serverFileInfoMisses++;return}throw t}}async listRemoteFiles(e){return this.diagnostics.serverFoldersListed++,this.serverRequestRunner.addTask(()=>this.workspaceState.client.listFiles(e))}createServerEntry(e){return{remotePath:e.path,isFolder:!!e.isFolder,meta:Zt(e),contentMeta:Zt(e,{writeContentInfo:!0}),serverInfo:e}}isRemoteMetaChanged(e,t){return!Po(e,t)}isRemoteContentBaselineChanged(e,t,n){return!t.contentMeta||t.isFolder||n===!1||t.contentMeta.hash===void 0||t.contentMeta.size===void 0?!1:n===!0&&((e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0))?!0:this.hasCompleteContentBaseline(e.meta)?e.meta.hash!==t.contentMeta.hash||e.meta.size!==t.contentMeta.size?n===!0:(e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0):!0}isRemoteFileContentChanged(e,t,n,o){return n===!1?!0:n===!0?!1:t.contentMeta&&this.hasCompleteContentBaseline(e.meta)&&t.contentMeta.hash!==void 0&&t.contentMeta.size!==void 0?e.meta.hash!==t.contentMeta.hash||e.meta.size!==t.contentMeta.size:t.contentMeta?.hash!==void 0&&t.contentMeta.size!==void 0?(e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0):(e.meta.revision??0)!==(t.meta.revision??0)?!0:!o&&(e.meta.modifyTime??0)!==(t.meta.modifyTime??0)}hasCompleteContentBaseline(e){return e.hash!==void 0&&e.size!==void 0}resetChangeDetailLogState(){this.loggedChangeDetailCount=0,this.changeDetailLimitLogged=!1,this.loggedChangeDetailKeys.clear(),this.visitorChangeKeys.clear(),this.visitorTasks.length=0}addChange(e,t,n){e.push(t),this.logChangeDetail(t,n)}dispatchChange(e,t){if(!this.options.visitor?.onChange||!this.isTargetChange(e))return;let n=this.getChangeDetailLogKey(e);if(this.visitorChangeKeys.has(n))return;this.visitorChangeKeys.add(n),this.incrementRecordCounter(this.diagnostics.visitorEvents,"change");let o={change:e,serverEntry:t.server.get(e.remotePath),mirrorEntry:t.mirror.get(e.oldRemotePath??e.remotePath)};this.addVisitorTask(()=>this.options.visitor?.onChange?.(o))}async dispatchFolderScanned(e,t,n){if(!this.options.visitor?.onFolderScanned)return;this.incrementRecordCounter(this.diagnostics.visitorEvents,"folderScanned");let o=await this.workspaceState.mirror.listDirectMetaChildren(e),i={remotePath:e,folderInfo:t,children:n,mirrorChildMetas:new Map(o.map(a=>[dl.posix.basename(a.path),a.meta])),serverChildPaths:new Set(n.map(a=>a.path))};this.addVisitorTask(()=>this.options.visitor?.onFolderScanned?.(i))}dispatchFolderSkipped(e,t){if(!this.options.visitor?.onFolderSkipped)return;this.incrementRecordCounter(this.diagnostics.visitorEvents,"folderSkipped");let n={remotePath:e,folderInfo:t,reason:"waterlineUnchanged"};this.addVisitorTask(()=>this.options.visitor?.onFolderSkipped?.(n))}addVisitorTask(e){this.visitorTasks.push(()=>Promise.resolve(e()))}async waitVisitorTasks(){for(let e of this.visitorTasks)await e()}logChangeDetail(e,t){if(!Ft.isDebugEnabled()||!this.isTargetChange(e))return;let n=this.getChangeDetailLogKey(e);if(!this.loggedChangeDetailKeys.has(n)){if(this.loggedChangeDetailKeys.add(n),this.loggedChangeDetailCount>=rw){this.changeDetailLimitLogged||(Ft.debug(`change detail ... displayed=${rw} further changes omitted`),this.changeDetailLimitLogged=!0);return}this.loggedChangeDetailCount++,Ft.debug(`change detail ${this.loggedChangeDetailCount} ${this.describeChange(e,t)}`)}}getChangeDetailLogKey(e){return`${e.type}|${e.remotePath}|${e.oldRemotePath??""}`}describeChange(e,t){let n=t.server.get(e.remotePath),o=t.mirror.get(e.oldRemotePath??e.remotePath);return[`type=${e.type}`,`remotePath=${e.remotePath}`,`oldRemotePath=${e.oldRemotePath??"<none>"}`,`fileId=${e.fileId??"<none>"}`,`isFolder=${e.isFolder}`,`contentChanged=${e.contentChanged}`,`metaChanged=${e.metaChanged}`,`serverRevision=${this.formatLogValue(n?.meta.revision)}`,`mirrorRevision=${this.formatLogValue(o?.meta.revision)}`,`serverModifyTime=${this.formatLogValue(n?.meta.modifyTime)}`,`mirrorModifyTime=${this.formatLogValue(o?.meta.modifyTime)}`,`serverModifier=${this.formatLogValue(n?.meta.modifier)}`,`mirrorModifier=${this.formatLogValue(o?.meta.modifier)}`].join(" ")}formatLogValue(e){return e===void 0?"<none>":String(e)}describeDiagnosticsForLog(){return this.diagnostics.api=this.workspaceState.client.getDiagnostics()??Tm(),this.diagnostics.describeForLog()}recordChangeKind(e){switch(e.type){case"remoteModified":e.contentChanged?this.diagnostics.changesByKind.contentModified++:e.metaChanged&&this.diagnostics.changesByKind.metaOnlyModified++;break;case"remoteDeleted":this.diagnostics.changesByKind.remoteDeleted++;break;case"remoteProjectUnavailable":this.diagnostics.changesByKind.remoteProjectUnavailable++;break;case"remoteAdded":this.diagnostics.changesByKind.remoteAdded++;break;case"remoteRenamed":this.diagnostics.changesByKind.remoteRenamed++;break;case"conflict":this.diagnostics.changesByKind.conflict++;break;default:break}}incrementRecordCounter(e,t){e[t]=(e[t]??0)+1}resetDiagnostics(){this.diagnostics=nw()}createRemoteChange(e,t,n){return{path:Me(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},type:t,isFolder:e.isFolder,contentChanged:n?.contentChanged??(t!=="remoteDeleted"&&!e.isFolder),metaChanged:n?.metaChanged??t!=="remoteDeleted",...t==="remoteDeleted"?{}:{modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}}createProjectUnavailableChange(e){return{path:Me(e.remotePath),remotePath:e.remotePath,...e.id!==void 0?{fileId:e.id}:{},type:"remoteProjectUnavailable",isFolder:!0,contentChanged:!1,metaChanged:!1}}async createRenamedChange(e,t){let n=e.remotePath===t.remotePath?e.contentMatchesMirror:this.options.forceRefresh?await this.getContentMatchesMirrorPath(e,t.remotePath):void 0,o=this.isRemoteMetaChanged(t.meta,e.meta)||this.isRemoteContentBaselineChanged(t,e,n),i=!e.isFolder&&this.isRemoteFileContentChanged(t,e,n,o);return{path:Me(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:Me(t.remotePath),oldRemotePath:t.remotePath,type:"remoteRenamed",isFolder:e.isFolder,contentChanged:i,metaChanged:o,modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}createMirrorRecoveryChange(e,t){return this.createRemoteChange(e,"remoteModified",{contentChanged:this.isMirrorRecoveryContentChanged(e,t),metaChanged:!0})}isMirrorRecoveryContentChanged(e,t){return e.isFolder?!1:t?t.exists===!1?!0:this.isRemoteFileContentChanged(t,e,e.contentMatchesMirror,!0):e.contentMatchesMirror!==!0}createConflictChange(e,t){return{path:Me(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:t?Me(t):void 0,oldRemotePath:t,type:"conflict",isFolder:e.isFolder,contentChanged:!e.isFolder,metaChanged:!0,modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}};function nw(){return new xm}function fD(){return{contentModified:0,metaOnlyModified:0,remoteDeleted:0,remoteProjectUnavailable:0,remoteAdded:0,remoteRenamed:0,conflict:0}}function gD(){return{trackedProjects:0,serverProjects:0,probedProjects:0,missingTrackedProjects:0,skippedUntrackedProjects:0,mirrorProjectsScanned:0,skippedUntrackedMirrorProjects:0}}function Tm(){return{total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0}}Mr();er();var yD=4,Se=T("sync.fetch"),Im=class extends Ai{projectTargets=0;resourceTargets=0;countedResources=0;remoteResourceCountRequests=0;mirrorResourceCountRequests=0;contentDownloadsScheduled=0;mirrorFilesMoved=0;mirrorResourcesRemoved=0;mirrorPhysicalChildrenRemoved=0;mirrorMetaWrites=0;downloaded=0;deleted=0;skippedFolders=0;updatedMetas=0;detector;setDetector(e){this.detector=e}createSnapshot(){return{runs:this.runs,durationMs:this.durationMs,projectTargets:this.projectTargets,resourceTargets:this.resourceTargets,countedResources:this.countedResources,remoteResourceCountRequests:this.remoteResourceCountRequests,mirrorResourceCountRequests:this.mirrorResourceCountRequests,contentDownloadsScheduled:this.contentDownloadsScheduled,mirrorFilesMoved:this.mirrorFilesMoved,mirrorResourcesRemoved:this.mirrorResourcesRemoved,mirrorPhysicalChildrenRemoved:this.mirrorPhysicalChildrenRemoved,mirrorMetaWrites:this.mirrorMetaWrites,downloaded:this.downloaded,deleted:this.deleted,skippedFolders:this.skippedFolders,updatedMetas:this.updatedMetas,...this.detector?{detector:this.detector}:{},api:this.api}}},Hn=class extends je{mirror;fileFetcher;fetchResult;diagnostics=ow();downloadTask;downloadTotal=0;constructor(e,t){super(e,t),this.mirror=this.createMirrorStore(),this.fileFetcher=new pl({maxConcurrency:yD,signal:this.task.getAbortSignal(),getContentStream:async n=>{yt(this.task.getAbortSignal());let o=await this.getApiClient();return yt(this.task.getAbortSignal()),o.getFileContentStream(n)}}),this.fetchResult={mirrorRoot:this.mirrorRoot,downloaded:[],deleted:[],skippedFolders:[],updatedMetas:[]}}execute(){return this.fetchTrackedMirror()}getDiagnostics(e={}){this.syncResultDiagnostics();let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}async fetchTrackedMirror(){let e=this.diagnostics.startRun(),t=!1;Se.info("fetch start: {0}",this.createFetchScopeLog()),this.task.start(100);let n=this.task.subTaskMonitor(5),o=this.task.subTaskMonitor(5),i=this.task.subTaskMonitor(90),a=[];if(this.hasKnownChanges(this.options.changes)){n.start(1),Se.info("fetch prepare start"),this.task.throwIfAborted(),await sn.promises.mkdir(this.mirrorRoot,{recursive:!0}),n.step(1),Se.info("fetch prepare done: knownChanges={0}",this.options.changes.length),this.downloadTask=i;try{return await this.fetchKnownChanges(o),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}finally{t||this.finishRunDiagnostics(e),this.downloadTask=void 0,this.downloadTotal=0}}n.start(1);let s=this.resolveFetchProjectPaths(),c=await this.getApiClient(),l=c.getProjects();Se.info("fetch prepare start"),this.task.throwIfAborted(),await sn.promises.mkdir(this.mirrorRoot,{recursive:!0});let p=this.createWorkspaceStore(this.mirror).listProjectPaths(),[u,g,m]=await Promise.all([l,this.readMirrorChildMetas("/"),p]),f=new Set(m),y=new Set([...u.map(C=>"/"+C.name),...f]);await this.removeMissingMirrorChildren("/",y,g),s&&(a=await this.markNewFetchProjects(s)),n.step(1),Se.info("fetch prepare done: serverProjects={0}",u.length),this.downloadTask=i;try{if(s){this.diagnostics.projectTargets=s.length,Se.info("fetch count resources start: {0}",this.createFetchScopeLog());let S=await this.countFetchResources(o,()=>this.countRemoteFiles(s));return Se.info("fetch count resources done: resources={0}",S),this.startFetchProgress(S),s.length===0&&this.completeDownloadProgress(),Se.info("fetch mirror update start: targets={0}",s.length),await this.fetchWithRemoteChangeDetector({targets:new Set(s),forceRefresh:this.options.forceRefresh===!0}),this.completeDownloadProgress(),await this.clearNewFetchProjectMarkers(a),Se.info("fetch mirror update done: targets={0}",s.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}let C=await this.resolveTargetRemotePaths(this.options.paths);if(C){let S=St(C);this.diagnostics.resourceTargets=S.length,Se.info("fetch count resources start: {0}",this.createFetchScopeLog());let k=await this.countFetchResources(o,()=>(this.diagnostics.mirrorResourceCountRequests++,this.mirror.countMetaResources(S)));return Se.info("fetch count resources done: resources={0}",k),this.startFetchProgress(k),S.length===0&&this.completeDownloadProgress(),Se.info("fetch mirror update start: targets={0}",S.length),await this.fetchWithRemoteChangeDetector({targets:new Set(S),forceRefresh:!1}),this.completeDownloadProgress(),Se.info("fetch mirror update done: targets={0}",S.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}let v=u.filter(S=>f.has("/"+S.name)),w=v.map(S=>"/"+S.name);a=await this.markNewFetchProjects(w),this.diagnostics.projectTargets=w.length,Se.info("fetch count resources start: {0}",this.createFetchScopeLog());let h=await this.countFetchResources(o,()=>this.countRemoteFiles(w));return Se.info("fetch count resources done: resources={0}",h),this.startFetchProgress(h),v.length===0&&this.completeDownloadProgress(),Se.info("fetch mirror update start: targets={0}",v.length),await this.fetchWithRemoteChangeDetector({forceRefresh:!1}),this.completeDownloadProgress(),await this.clearNewFetchProjectMarkers(a),Se.info("fetch mirror update done: targets={0}",v.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}finally{t||(await this.cleanupNewFetchProjectsAfterFailure(a),this.finishRunDiagnostics(e)),this.downloadTask=void 0,this.downloadTotal=0}}async markNewFetchProjects(e){let t=[];try{for(let n of e){let[o,i]=await Promise.all([this.mirror.isCloneInProgress(n),this.mirror.exists(n)]);!o&&i||(o&&(await this.mirror.removePath(n),await this.mirror.removeMeta(n)),t.push(n),await this.mirror.markCloneInProgress(n))}return t}catch(n){throw await this.cleanupNewFetchProjectsAfterFailure(t),n}}async clearNewFetchProjectMarkers(e){await Promise.all(e.map(t=>this.mirror.clearCloneInProgress(t)))}async cleanupNewFetchProjectsAfterFailure(e){if(e.length!==0)try{await Promise.all(e.map(async t=>{await this.mirror.removePath(t),await this.mirror.removeMeta(t)}))}catch(t){Se.warn(`fetch failed, cleanup new mirror projects failed: ${e.join(", ")}`,t)}}createFetchScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.projectNames?`projects=${this.options.projectNames.join(", ")}`:this.options.paths?`paths=${this.options.paths.join(", ")}`:"<tracked>"}logFetchDone(){this.syncResultDiagnostics(),Se.info("fetch done: downloaded={0} deleted={1} updatedMetas={2} skippedFolders={3}",this.fetchResult.downloaded.length,this.fetchResult.deleted.length,this.fetchResult.updatedMetas.length,this.fetchResult.skippedFolders.length),Se.debug(`fetch diagnostics ${this.diagnostics.describeForLog()}`)}resolveFetchProjectPaths(){if(!this.options.projectNames){z(!this.options.forceRefresh,"FetchOptions.forceRefresh can only be used with FetchOptions.projectNames");return}return z(!this.options.paths,"FetchOptions.projectNames and FetchOptions.paths cannot be used together"),St(new Set(this.options.projectNames.map(e=>Ct(e))))}startFetchProgress(e){this.downloadTotal=Math.max(e,1),this.progressTask.start(this.downloadTotal)}async countFetchResources(e,t){e.start(1);let n=await t();return this.diagnostics.countedResources+=n,e.step(1),n}completeDownloadProgress(){this.progressTask.progress(this.downloadTotal||1)}stepFetchProgress(){this.progressTask.step(1)}get progressTask(){return this.downloadTask??this.task}async countRemoteFiles(e){let t=await this.getApiClient();return this.diagnostics.remoteResourceCountRequests+=e.length,(await Promise.all(e.map(o=>t.countFiles(o)))).reduce((o,i)=>o+i,0)}async fetchWithRemoteChangeDetector(e){let t=[],n=[],o=new Map,i=e.targets&&e.targets.size>0?Di([...e.targets]):void 0,a=new jr({workspace:this.context,targets:e.targets,task:this.progressTask,forceRefresh:e.forceRefresh,visitor:{onFolderScanned:c=>this.prepareScannedFolder(c,n),onFolderSkipped:c=>this.applySkippedFolder(c),onChange:c=>{if(this.isActionableFetchChange(c.change,i))return this.applyRemoteChange(c,t,o)}}});await a.detect(),this.diagnostics.setDetector(a.getDiagnostics());let s=(await Promise.all(t)).filter(c=>c instanceof Error);if(s.length>0)throw s[0];await this.writeScannedFolderMetas(n,o)}async fetchKnownChanges(e){let t=this.getKnownFetchChanges();this.diagnostics.resourceTargets=St(new Set(this.getKnownChangeTargetRemotePaths(t))).length,Se.info("fetch count resources start: {0}",this.createFetchScopeLog());let n=await this.countFetchResources(e,async()=>t.length);if(Se.info("fetch count resources done: resources={0}",n),this.startFetchProgress(n),t.length===0){this.completeDownloadProgress();return}Se.info("fetch mirror update start: changes={0}",t.length);let o=await this.getApiClient(),i=[],a=new Map;for(let c of t)await this.applyKnownRemoteChange(c,o,i,a);let s=(await Promise.all(i)).filter(c=>c instanceof Error);if(s.length>0)throw s[0];this.completeDownloadProgress(),this.captureApiDiagnostics(o),Se.info("fetch mirror update done: changes={0}",t.length)}getKnownFetchChanges(){return ja(this.options.changes??[]).filter(e=>!Rm(e))}async applyKnownRemoteChange(e,t,n,o){if(e.type==="remoteDeleted"){await this.removeMirrorResource(e.oldRemotePath??e.remotePath),this.stepFetchProgress();return}let i=await this.getKnownRemoteFileInfo(t,e.remotePath);if(!i){await this.removeMirrorResource(e.remotePath),this.stepFetchProgress();return}if(e.type==="remoteRenamed"){await this.applyRemoteRenamedChange(e,i,n,o);return}if(e.type==="conflict"){await this.applyRemoteConflictChange(e,i,n,o);return}await this.applyRemotePresentChange(e,i,n,o)}async getKnownRemoteFileInfo(e,t){try{return await e.getFile(t)}catch(n){if(e.isNotFoundError(n)){Se.debug(`known remote change target disappeared before fetch: ${t}`);return}throw n}}isActionableFetchChange(e,t){return Rm(e)?!1:!t||t(e)}async prepareScannedFolder(e,t){this.task.throwIfAborted(),await sn.promises.mkdir(this.mirror.toLocalPath(e.remotePath),{recursive:!0}),t.push(e)}async writeScannedFolderMetas(e,t){for(let n of e)await this.writeMirrorChildMetas(n.remotePath,n.mirrorChildMetas,n.children.map(o=>t.get(o.path)??o),n.serverChildPaths)&&this.addUpdatedMeta(n.remotePath),await this.removeMissingMirrorPhysicalChildren(n.remotePath,n.serverChildPaths)}async applySkippedFolder(e){this.addSkippedFolder(e.remotePath),await this.completeSkippedFolderProgress(e.remotePath)}async applyRemoteChange(e,t,n){let o=e.change;if(o.type==="remoteDeleted"){await this.removeMirrorResource(o.oldRemotePath??o.remotePath),this.stepFetchProgress();return}if(o.type==="remoteRenamed"){await this.applyRemoteRenamedChange(o,e.serverEntry?.serverInfo,t,n);return}if(o.type==="conflict"){let i=e.serverEntry?.serverInfo;z(i,`remote conflict missing server entry: ${o.remotePath}`),await this.applyRemoteConflictChange(o,i,t,n);return}if(e.serverEntry?.serverInfo){await this.applyRemotePresentChange(o,e.serverEntry.serverInfo,t,n);return}this.stepFetchProgress()}async applyRemoteConflictChange(e,t,n,o){if(e.oldRemotePath&&!t.isFolder&&e.contentChanged===!1){if(await this.moveMirrorFile(e.oldRemotePath,e.remotePath)){await this.removeMirrorMetaIfReadable(e.oldRemotePath),this.addDeleted(e.oldRemotePath),await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}await this.removeMirrorResource(e.oldRemotePath),await this.removeMirrorResource(e.remotePath),await this.applyRemotePresentChange(e,t,n,o,!0);return}if(e.oldRemotePath&&await this.removeMirrorResource(e.oldRemotePath),t.isFolder||e.contentChanged!==!1){await this.removeMirrorResource(e.remotePath),await this.applyRemotePresentChange(e,t,n,o);return}await this.applyRemotePresentChange(e,t,n,o,!t.isFolder&&!await this.mirror.exists(e.remotePath))}async applyRemoteRenamedChange(e,t,n,o){if(!e.oldRemotePath){if(t){await this.applyRemotePresentChange(e,t,n,o);return}this.stepFetchProgress();return}if(t&&!t.isFolder&&e.contentChanged===!1&&await this.moveMirrorFile(e.oldRemotePath,e.remotePath)){await this.removeMirrorMetaIfReadable(e.oldRemotePath),this.addDeleted(e.oldRemotePath),await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}if(await this.removeMirrorResource(e.oldRemotePath),t){await this.applyRemotePresentChange(e,t,n,o);return}this.stepFetchProgress()}async applyRemotePresentChange(e,t,n,o,i=!1){if(t.isFolder){await this.applyRemoteFolder(t),this.stepFetchProgress();return}if(!i&&e.contentChanged===!1){await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}this.addPendingDownload(n,this.fetchMirrorFile(t).then(a=>(o.set(a.path,a),this.writeMirrorMetaIfChanged(a,void 0))).finally(()=>this.stepFetchProgress()))}async applyRemoteFolder(e){this.task.throwIfAborted(),await sn.promises.mkdir(this.mirror.toLocalPath(e.path),{recursive:!0}),await this.writeMirrorMetaIfChanged(e,await this.mirror.readMeta(e.path))}addPendingDownload(e,t){this.diagnostics.contentDownloadsScheduled++,e.push(t.then(()=>{},n=>n instanceof Error?n:new Error(String(n??"fetch download failed"))))}async completeSkippedFolderProgress(e){let t=Math.max(await this.mirror.countMetaResources([e])-1,0);t>0&&this.progressTask.step(t)}async fetchMirrorFile(e){let t=this.mirror.toLocalPath(e.path),n=await this.fileFetcher.fetchToLocal(e.path,t),o={...e,revision:n.revision??e.revision,modifyTime:n.modifyTime??e.modifyTime};return this.addDownloaded(e.path),o}async readMirrorChildMetas(e){let t=await Ia(this.mirror.root,cn.posix.join(e,Q),{strict:!1});return new Map(Object.entries(t))}async writeMirrorMetaIfChanged(e,t){this.isMirrorMetaSame(t,e)||(await this.mirror.writeMeta(e,this.task),this.diagnostics.mirrorMetaWrites++)}isMirrorMetaSame(e,t){return e!==void 0&&(0,Fm.isDeepStrictEqual)(e,Zt(t,{writeContentInfo:!0}))}async writeMirrorChildMetas(e,t,n,o){let i={};for(let[c,l]of t)(!o||o.has(cn.posix.join(e,c)))&&(i[c]=l);for(let c of n)i[cn.posix.basename(c.path)]=Zt(c,{writeContentInfo:!0});let a=cn.posix.join(e,Q),s=await Er(this.mirror.root,a);return s.exists&&!s.damaged&&(0,Fm.isDeepStrictEqual)(i,Object.fromEntries(t))?!1:(await Kc(this.mirror.root,a,i),!0)}async removeMissingMirrorChildren(e,t,n){let o={},i=[...n.keys()].map(a=>({name:a,path:cn.posix.join(e,a)})).filter(a=>!t.has(a.path));await Promise.all(i.map(a=>this.mirror.removePath(a.path)));for(let a of i)o[a.name]=void 0,this.addDeleted(a.path);Object.keys(o).length>0&&await this.mirror.patchMeta(e,o,this.task),await this.removeMissingMirrorPhysicalChildren(e,t)}async removeMissingMirrorPhysicalChildren(e,t){let n=this.mirror.toLocalPath(e),o;try{o=await sn.promises.readdir(n,{withFileTypes:!0})}catch(a){if(x(a)){Se.debug(`mirror folder physical children cannot be listed: ${e}`);return}throw a}let i=o.filter(a=>a.name!==Q).map(a=>cn.posix.join(e,a.name)).filter(a=>!t.has(a));await Promise.all(i.map(a=>this.mirror.removePath(a))),this.diagnostics.mirrorPhysicalChildrenRemoved+=i.length;for(let a of i)this.addDeleted(a)}async removeMirrorResource(e){await Promise.all([this.mirror.removePath(e),this.removeMirrorMetaIfReadable(e)]),this.diagnostics.mirrorResourcesRemoved++,this.addDeleted(e)}async removeMirrorMetaIfReadable(e){try{await this.mirror.removeMeta(e)}catch(t){if(t instanceof Ei){Se.debug(`skip removing mirror meta from damaged .meta during fetch: ${e}`,t);return}throw t}}async moveMirrorFile(e,t){let n=this.mirror.toLocalPath(e),o=this.mirror.toLocalPath(t);try{return this.task.throwIfAborted(),await sn.promises.mkdir(cn.dirname(o),{recursive:!0}),await sn.promises.rm(o,{force:!0,recursive:!0}),await sn.promises.rename(n,o),this.diagnostics.mirrorFilesMoved++,!0}catch(i){if(x(i))return Se.debug(`mirror file cannot be moved during remote rename: ${e} -> ${t}`),!1;throw i}}addDownloaded(e){this.addUniqueResultPath(this.fetchResult.downloaded,e)}addDeleted(e){this.addUniqueResultPath(this.fetchResult.deleted,e)}addSkippedFolder(e){this.addUniqueResultPath(this.fetchResult.skippedFolders,e)}addUpdatedMeta(e){this.addUniqueResultPath(this.fetchResult.updatedMetas,e)}addUniqueResultPath(e,t){e.includes(t)||e.push(t)}captureApiDiagnostics(e){let t=e.getDiagnostics();t&&this.diagnostics.captureApiDiagnostics(t)}finishRunDiagnostics(e){this.diagnostics.finishRun(e)}syncResultDiagnostics(){this.diagnostics.downloaded=this.fetchResult.downloaded.length,this.diagnostics.deleted=this.fetchResult.deleted.length,this.diagnostics.skippedFolders=this.fetchResult.skippedFolders.length,this.diagnostics.updatedMetas=this.fetchResult.updatedMetas.length}resetDiagnostics(){this.diagnostics=ow()}};function ow(){return new Im}var Dm=E(require("fs"));Ke();K();Y();ut();Ti();var Br=T("sync.checkout"),ul=class extends je{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){Br.info("checkout start: {0}",this.options.projectNames.join(", ")||"<none>");let e=await this.createCheckoutItems();if(e.length===0)return this.task.start(1),this.task.finish(),Br.info("checkout done: <none>"),{projectNames:[]};let t=e.reduce((o,i)=>o+i.total,0);this.task.start(Math.max(t,1));for(let o of e)this.task.throwIfAborted(),await this.checkoutProject(o.projectPath,this.task);let n=e.map(o=>o.projectPath);return Br.info("checkout cleanup status start: {0}",n.join(", ")),this.clearSyncStatusTargets(n),Br.info("checkout cleanup status done"),e.some(o=>!o.workspaceProjectExists)&&this.context.notifyLocalProjectsChanged?.(),this.task.finish(),Br.info("checkout done: {0}",e.map(o=>o.projectName).join(", ")),{projectNames:e.map(o=>o.projectName)}}async createCheckoutItems(){let e=[],t=[...new Set(this.options.projectNames.map(n=>Ct(n)))];for(let n of t){await this.assertMirrorProjectDirectory(n);let o=await dm(this.workspace.toLocalPath(n));e.push({projectName:n.slice(1),projectPath:n,total:Math.max(await this.workspace.countCheckoutResources(n),1),workspaceProjectExists:o})}return e}async assertMirrorProjectDirectory(e){let t=this.mirror.toLocalPath(e);if(!(await Dm.promises.stat(t)).isDirectory())throw new Error(`checkout source must be a mirror project directory: ${e}`)}async checkoutProject(e,t){let n=Date.now(),o=this.workspace.toLocalPath(e),i=await Mk(o);if(Br.debug(`checkout project start: projectPath=${e} projectBlank=${i}`),!i){await this.workspace.checkoutFromMirror(e,t),Br.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`);return}try{await this.workspace.prepareCheckoutDirectory(e,t),await Qc(this.workspaceRoot,e),await this.workspace.checkoutMirrorDirectory(e,t),t.throwIfAborted(),await this.workspace.copyMirrorMetaInfo(e,!0),t.step(1)}catch(a){throw await this.rollbackNewProjectCheckout(e,o,a),a}finally{await Zc(this.workspaceRoot,e)}Br.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`)}async rollbackNewProjectCheckout(e,t,n){try{await Dm.promises.rm(t,{force:!0,recursive:!0}),Br.info(`checkout failed, rolled back new workspace project: projectPath=${e}`)}catch(o){Br.warn(`checkout failed, rollback new workspace project failed: projectPath=${e} cause=${String(n)}`,o)}}};Mr();var ml=T("sync.clone"),hl=class extends je{async execute(){ml.info("clone start: {0}",this.options.projectNames?.join(", ")??"<all>"),ml.info("clone prepare start"),this.task.throwIfAborted();let e=await this.resolveCloneProjects();this.task.start(100,{message:d("workspace.sync.progress.clone.running"),retainOnFinish:!0});let t=this.task.subTaskMonitor(5),n=this.task.subTaskMonitor(68),o=this.task.subTaskMonitor(17),i=this.task.subTaskMonitor(6),a=this.task.subTaskMonitor(4);t.start(1),await iw.promises.mkdir(this.mirrorRoot,{recursive:!0}),t.step(1);let s=e.map(p=>p.name),c=s.map(p=>Ct(p));ml.info("clone prepare done: projects={0}",s.join(", ")),await new Hn(this.context,{task:n,projectNames:s,forceRefresh:!0}).execute(),e.length===0&&(n.start(1),n.step(1)),await new ul(this.context,{task:o,projectNames:s}).execute();let l=await al(this.context,i,c);return a.finish(),ml.info("clone done: {0}",s.join(", ")),this.task.setMessage(d("workspace.sync.progress.clone.done",s.length)),this.task.finish(),{projectNames:s,oldFiles:l}}async resolveCloneProjects(){if(this.options.projectNames&&this.options.projectNames.length===0)return[];let e=await this.getApiClient(),t=await e.getProjects(),n=this.options.projectNames??t.map(s=>s.name),o=[...new Set(n.map(s=>Ct(s)))],i=new Set(t.map(s=>Ct(s.name))),a=o.filter(s=>!i.has(s));if(a.length>0)throw new ct("err.sync.projectUnavailable",{actionName:"clone",paths:a.join(", "),projectNames:a.map(s=>s.slice(1)).join(", ")},{hint:"err.sync.projectUnavailable.hint"});return Promise.all(o.map(s=>e.getFile(s)))}};var ln=E(require("fs")),Ut=E(require("path"));ut();K();Ke();Y();Ee();er();var _i=E(require("fs")),mw=E(require("os")),Vr=E(require("path")),hw=require("node:util");var qa=E(require("fs")),uw=E(require("os")),_m=E(require("path"));K();Ke();vm();var Va=E(require("fs"));function sw(r,e){let t={};for(let i=0;i<e.length;i++){let a=e[i];t[a]?t[a].push(i):t[a]=[i]}let o=[{buffer1index:-1,buffer2index:-1,chain:null}];for(let i=0;i<r.length;i++){let a=r[i],s=t[a]||[],c=0,l=o[0];for(let p=0;p<s.length;p++){let u=s[p],g;for(g=c;g<o.length&&!(o[g].buffer2index<u&&(g===o.length-1||o[g+1].buffer2index>u));g++);if(g<o.length){let m={buffer1index:i,buffer2index:u,chain:o[g]};if(c===o.length?o.push(l):o[c]=l,c=g+1,l=m,c===o.length)break}}o[c]=l}return o[o.length-1]}function aw(r,e){let t=sw(r,e),n=[],o=r.length,i=e.length;for(let a=t;a!==null;a=a.chain){let s=o-a.buffer1index-1,c=i-a.buffer2index-1;o=a.buffer1index,i=a.buffer2index,(s||c)&&n.push({buffer1:[o+1,s],buffer1Content:r.slice(o+1,o+1+s),buffer2:[i+1,c],buffer2Content:e.slice(i+1,i+1+c)})}return n.reverse(),n}function cw(r,e){let t=sw(r,e),n=[],o=r.length,i=e.length;function a(s,c,l){let p=[];for(let u=0;u<l;u++)p.push(s[c+u]);return{offset:c,length:l,chunk:p}}for(let s=t;s!==null;s=s.chain){let c=o-s.buffer1index-1,l=i-s.buffer2index-1;o=s.buffer1index,i=s.buffer2index,(c||l)&&n.push({buffer1:a(r,s.buffer1index+1,c),buffer2:a(e,s.buffer2index+1,l)})}return n.reverse(),n}function CD(r,e,t){let n=[];function o(c,l){n.push({ab:l,oStart:c.buffer1[0],oLength:c.buffer1[1],abStart:c.buffer2[0],abLength:c.buffer2[1]})}aw(e,r).forEach(c=>o(c,"a")),aw(e,t).forEach(c=>o(c,"b")),n.sort((c,l)=>c.oStart-l.oStart);let i=[],a=0;function s(c){c>a&&(i.push({stable:!0,buffer:"o",bufferStart:a,bufferLength:c-a,bufferContent:e.slice(a,c)}),a=c)}for(;n.length;){let c=n.shift(),l=c.oStart,p=c.oStart+c.oLength,u=[c];for(s(l);n.length;){let g=n[0],m=g.oStart;if(m>p)break;p=Math.max(p,m+g.oLength),u.push(n.shift())}if(u.length===1){if(c.abLength>0){let g=c.ab==="a"?r:t;i.push({stable:!0,buffer:c.ab,bufferStart:c.abStart,bufferLength:c.abLength,bufferContent:g.slice(c.abStart,c.abStart+c.abLength)})}}else{let g={a:[r.length,-1,e.length,-1],b:[t.length,-1,e.length,-1]};for(;u.length;){c=u.shift();let w=c.oStart,h=w+c.oLength,S=c.abStart,k=S+c.abLength,b=g[c.ab];b[0]=Math.min(S,b[0]),b[1]=Math.max(k,b[1]),b[2]=Math.min(w,b[2]),b[3]=Math.max(h,b[3])}let m=g.a[0]+(l-g.a[2]),f=g.a[1]+(p-g.a[3]),y=g.b[0]+(l-g.b[2]),C=g.b[1]+(p-g.b[3]),v={stable:!1,aStart:m,aLength:f-m,aContent:r.slice(m,f),oStart:l,oLength:p-l,oContent:e.slice(l,p),bStart:y,bLength:C-y,bContent:t.slice(y,C)};i.push(v)}a=p}return s(e.length),i}function lw(r,e,t,n){n=Object.assign({excludeFalseConflicts:!0,stringSeparator:/\s+/},n);let i=typeof r=="string",a=typeof e=="string",s=typeof t=="string";i&&(r=r.split(n.stringSeparator)),a&&(e=e.split(n.stringSeparator)),s&&(t=t.split(n.stringSeparator));let c=[],l=CD(r,e,t),p=[];function u(){p.length&&c.push({ok:p}),p=[]}function g(m,f){if(m.length!==f.length)return!1;for(let y=0;y<m.length;y++)if(m[y]!==f[y])return!1;return!0}return l.forEach(m=>{m.stable?p.push(...m.bufferContent):n.excludeFalseConflicts&&g(m.aContent,m.bContent)?p.push(...m.aContent):(u(),c.push({conflict:{a:m.aContent,aIndex:m.aStart,o:m.oContent,oIndex:m.oStart,b:m.bContent,bIndex:m.bStart}}))}),u(),c}Y();Ho();var dw=T("sync.three-way-merge"),SD=/\n|\r\n|\r/;function Am(r){return r.split(SD)}function vD(r){return r.includes(`\r
|
|
65
68
|
`)?`\r
|
|
66
69
|
`:r.includes("\r")?"\r":`
|
|
67
|
-
`}function IF(r,e){if(gg(r))return!0;let t=e.trimStart();return t.startsWith("{")||t.startsWith("[")}function Tu(r){try{return JSON.stringify(JSON.parse(r),null,2)}catch(e){return Tv.debug("skip JSON normalization because content is not valid JSON",e),r}}function bv(r){return r===void 0||r===""||r===!1||typeof r=="object"&&r!==null&&Object.keys(r).length===0}var xc=class{serverControlledKeys;constructor(e=["id","revision","creator","createTime","modifier","modifyTime"]){this.serverControlledKeys=new Set(e)}async merge(e){let t=await this.mergeContent(e),n=this.mergeMetaInfo(e.workspaceMeta,e.baseMeta,e.remoteMeta);return{hasConflict:t.hasConflict,mergedMeta:n.merged,hasMetaConflict:n.hasConflict}}async mergeContent(e){let[t,n,o]=[];try{[t,n,o]=await Promise.all([da.promises.readFile(e.workspaceFile,"utf-8"),da.promises.readFile(e.baseFile,"utf-8"),da.promises.readFile(e.remoteFile,"utf-8")])}catch(g){return Tv.debug(`treat merge content as conflicted because inputs cannot be read: ${e.workspaceFile}`,g),{hasConflict:!0}}IF(e.workspaceFile,t)&&(t=Tu(t),n=Tu(n),o=Tu(o));let i=bu(t),a=bu(n),s=bu(o),c=Ev(i,a,s),l=DF(t),p=c.some(g=>"conflict"in g),m=c.flatMap(g=>{if("ok"in g)return g.ok;let d=g.conflict;return["<<<<<<< Local",...d.a,"=======",...d.b,">>>>>>> Remote"]}).join(l);return await da.promises.writeFile(e.workspaceFile,m,"utf-8"),{hasConflict:p}}mergeMetaInfo(e,t,n){if(!e&&!t&&!n)return{hasConflict:!1};let o=t??{},i=n??{},a=e??{},s={...o},c=!1,l=new Set([...Object.keys(o),...Object.keys(i),...Object.keys(a)]);for(let p of l){if(this.serverControlledKeys.has(p)){p in a?s[p]=a[p]:p in i&&(s[p]=i[p]);continue}let m=p in o,g=p in i,d=p in a,f=m!==g||m&&g&&this.isMetaFieldDifferent(o[p],i[p]),y=m!==d||m&&d&&this.isMetaFieldDifferent(o[p],a[p]);if(!(!f&&!y)){if(f&&!y){g?s[p]=i[p]:delete s[p];continue}if(!f&&y){d?s[p]=a[p]:delete s[p];continue}if(!g&&!d){delete s[p];continue}if(!g&&d){c=!0,s[p]=a[p];continue}if(g&&!d){delete s[p];continue}c=!0,s[p]=a[p]}}return{merged:Object.keys(s).length>0?s:void 0,hasConflict:c}}isMetaFieldDifferent(e,t){if(e===t)return!1;let n=bv(e),o=bv(t);return n&&o?!1:e!==t}};var Fc=class{input;constructor(e){this.input=e}async execute(){let e;try{e=await this.normalizeMergeFiles();let t={workspaceFile:e.workspaceFile,baseFile:e.baseFile,remoteFile:e.remoteFile,workspaceMeta:this.input.workspaceMeta,baseMeta:this.input.baseMeta,remoteMeta:this.input.remoteMeta},n=await(this.input.threeWayMerge??new xc).merge(t);return e.workspaceFile!==this.input.workspaceFile&&await ua.promises.copyFile(e.workspaceFile,this.input.workspaceFile),{merged:!n.hasConflict,hasConflict:n.hasConflict,conflictReason:n.hasConflict?"contentConflict":void 0,threeWayResult:n}}catch(t){if(t instanceof ao)return{merged:!1,hasConflict:!0,conflictReason:t.conflictReason,metadataUpgradeReason:t.reason,errorInfo:t.errorInfo};throw t}finally{e?.tempDir&&await Qt(e.tempDir)}}async normalizeMergeFiles(){if(!this.input.versionInfo?.upgradeSupported)return this.createOriginalMergeFiles();if(!this.input.client)return this.createOriginalMergeFiles();let t=await this.readMergeContentVersions();if(this.areMergeContentVersionsSame(t))return this.createOriginalMergeFiles();let n=await ua.promises.mkdtemp(xu.join(xv.tmpdir(),"succapp-single-file-merge-"));try{let o=new ri({client:this.input.client}),i=await Promise.all([this.readAndNormalizeContent(o,"workspace",this.input.workspaceFile),this.readAndNormalizeContent(o,"base",this.input.baseFile),this.readAndNormalizeContent(o,"remote",this.input.remoteFile)]),[a,s,c]=await Promise.all([this.writeTempContent(n,"workspace",i[0]),this.writeTempContent(n,"base",i[1]),this.writeTempContent(n,"remote",i[2])]);return{workspaceFile:a,baseFile:s,remoteFile:c,tempDir:n}}catch(o){throw await Qt(n),o}}createOriginalMergeFiles(){return{workspaceFile:this.input.workspaceFile,baseFile:this.input.baseFile,remoteFile:this.input.remoteFile}}async readMergeContentVersions(){let[e,t,n]=await Promise.all([this.readMergeContentVersion("workspace",this.input.workspaceFile),this.readMergeContentVersion("base",this.input.baseFile),this.readMergeContentVersion("remote",this.input.remoteFile)]);return{workspace:e,base:t,remote:n}}async readMergeContentVersion(e,t){try{return await oc(t)}catch(n){throw new ao("metadataVersionUpgradeFailed",n instanceof SyntaxError?"invalidContent":"readFailed",`metadata ${e} version normalize input cannot be read`,n)}}areMergeContentVersionsSame(e){return e.workspace===e.base&&e.workspace===e.remote}async readAndNormalizeContent(e,t,n){let o;try{o=await ua.promises.readFile(n,"utf-8")}catch(a){throw new ao("metadataVersionUpgradeFailed","readFailed",`metadata ${t} version normalize input cannot be read`,a)}let i=await e.upgradeContent({path:this.input.remotePath,content:o,versionInfo:this.input.versionInfo});if(i.reason==="newerVersion")throw new ao("metadataVersionNewerThanServer",i.reason,`metadata ${t} version is newer than server target version`,i.errorInfo);if(i.reason&&i.reason!=="upToDate")throw new ao("metadataVersionUpgradeFailed",i.reason,`metadata ${t} version normalize failed`,i.errorInfo);return i.content}async writeTempContent(e,t,n){let o=xu.join(e,t);return await ua.promises.writeFile(o,n,"utf-8"),o}},ao=class extends Error{conflictReason;reason;errorInfo;constructor(e,t,n,o){super(n),this.name="MetadataVersionNormalizeError",this.conflictReason=e,this.reason=t,this.errorInfo=o}};it();var Mc=T("sync.apply-remote"),Dc=class extends Ae{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);updated=[];deleted=[];conflicts=[];currentChangeTask;async execute(){this.updated=[],this.deleted=[],this.conflicts=[],this.currentChangeTask=void 0;let e=this.sortRemoteChanges(this.options.remoteChanges);Mc.info("apply remote changes start: changes={0}",e.length);let t=new Set;if(e.length===0)return this.task.start(1),this.task.step(1),this.finishApplyRemoteChanges({updated:this.updated,deleted:this.deleted,conflicts:this.conflicts});let n=await this.createProgressItems(e);Mc.info("apply remote changes prepared: changes={0} resources={1}",e.length,n.reduce((i,a)=>i+a.total,0)),this.task.start(Math.max(n.reduce((i,a)=>i+a.total,0),1));let o=n.map(i=>({change:i.change,total:i.total,task:this.task.subTaskMonitor(i.total)}));for(let{change:i,total:a,task:s}of o){this.task.throwIfAborted(),s.start(a),this.currentChangeTask=s;try{if(this.isCoveredByAppliedFolderCheckout(i,t)){s.progress(a);continue}let c=this.findLocalOverlaps(i);if(c.length>0&&!this.options.force){if(await this.tryApplyRemoteChangeWithLocalOverlaps(i,c))continue;this.conflicts.push(i),s.step(1);continue}i.type==="remoteDeleted"?(await this.workspace.deletePath(i.remotePath,s),this.deleted.push(i.remotePath)):i.type==="remoteRenamed"?(i.oldRemotePath&&(await this.workspace.deletePath(i.oldRemotePath,s),this.deleted.push(i.oldRemotePath)),await this.workspace.checkoutFromMirror(i.remotePath,s),this.updated.push(i.remotePath)):i.isFolder&&i.type==="remoteModified"?(await this.workspace.copyMirrorMetaInfo(i.remotePath,!0,s),this.updated.push(i.remotePath),s.step(1)):(await this.workspace.checkoutFromMirror(i.remotePath,s),this.updated.push(i.remotePath),i.isFolder&&t.add(i.remotePath))}finally{this.currentChangeTask=void 0}}return await this.cleanupEmptyOrphanParents(this.deleted,this.mirror,this.workspace),this.finishApplyRemoteChanges({updated:this.updated,deleted:this.deleted,conflicts:this.conflicts})}finishApplyRemoteChanges(e){return Mc.info("apply remote changes done: updated={0} deleted={1} conflicts={2}",e.updated.length,e.deleted.length,e.conflicts.length),e}isCoveredByAppliedFolderCheckout(e,t){for(let n of t)if(e.remotePath!==n&&Q(e.remotePath,n))return!0;return!1}async createProgressItems(e){return Promise.all(e.map(async t=>({change:t,total:await this.countChangeProgress(t)})))}async countChangeProgress(e){if(e.type==="remoteDeleted")return this.countWorkspaceProgress(e.remotePath);if(e.type==="remoteRenamed"){let[t,n]=await Promise.all([e.oldRemotePath?this.countWorkspaceProgress(e.oldRemotePath):Promise.resolve(0),this.countCheckoutProgress(e.remotePath)]);return t+n}return e.isFolder&&e.type==="remoteModified"?1:this.countCheckoutProgress(e.remotePath)}async countCheckoutProgress(e){return Math.max(await this.workspace.countCheckoutResources(e),1)}async countWorkspaceProgress(e){return Math.max(await this.workspace.countResources([e]),1)}async tryApplyRemoteChangeWithLocalOverlaps(e,t){return await this.tryApplyRemoteRenamePreservingLocalModification(e,t)||await this.tryMergeSeparatedMetaAndContentChanges(e,t)?!0:this.canApplyFolderMetaOnly(e,t)?(await this.workspace.copyMirrorMetaInfo(e.remotePath,!0,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):this.tryThreeWayMergeSameFileContentChange(e,t)}async tryMergeSeparatedMetaAndContentChanges(e,t){if(e.type!=="remoteModified"||t.length!==1)return!1;let n=t[0];return n.remotePath!==e.remotePath||n.type!=="modified"?!1:e.metaChanged&&!e.contentChanged&&n.contentChanged&&!n.metaChanged?(await this.workspace.copyMirrorMetaInfo(e.remotePath,!!e.isFolder,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):e.contentChanged&&!e.metaChanged&&n.metaChanged&&!n.contentChanged?(await this.workspace.copyMirrorContent(e.remotePath,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):!1}async tryApplyRemoteRenamePreservingLocalModification(e,t){if(e.type!=="remoteRenamed"||!e.oldRemotePath||t.length!==1)return!1;let n=t[0];return n.type!=="modified"||n.remotePath!==e.oldRemotePath||!await this.applyRemoteRenameContent(e,n)?!1:(await this.applyRemoteRenameMeta(e,n),await this.workspace.deletePath(e.oldRemotePath,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.deleted.push(e.oldRemotePath),e.isFolder||this.getCurrentChangeTask().step(1),!0)}async applyRemoteRenameContent(e,t){if(e.isFolder)return await this.workspace.checkoutFromMirror(e.remotePath,this.getCurrentChangeTask()),!0;let n=this.workspace.toLocalPath(e.remotePath);return this.task.throwIfAborted(),await ii.promises.mkdir(Tr.dirname(n),{recursive:!0}),e.contentChanged&&t.contentChanged?this.mergeRemoteRenameContent(e,n):t.contentChanged&&e.oldRemotePath?(this.options.mergeBaseDir&&await this.mergeRemoteRenameContent(e,n)||(this.task.throwIfAborted(),await ii.promises.copyFile(this.workspace.toLocalPath(e.oldRemotePath),n)),!0):(await this.workspace.copyMirrorContent(e.remotePath,this.getCurrentChangeTask()),!0)}async mergeRemoteRenameContent(e,t){if(!e.oldRemotePath)return!1;let n;try{if(!this.options.mergeBaseDir||!e.oldRemotePath)return!1;n=await ii.promises.mkdtemp(Tr.join(Fv.tmpdir(),"succapp-remote-rename-merge-"));let o=Tr.join(n,"workspace");this.task.throwIfAborted(),await ii.promises.copyFile(this.workspace.toLocalPath(e.oldRemotePath),o);let i=Tr.join(this.options.mergeBaseDir,Ne(e.oldRemotePath)),a=this.mirror.toLocalPath(e.remotePath),s=await this.mergeSingleFileContent({remotePath:e.remotePath,workspaceFile:o,baseFile:i,remoteFile:a});return s.threeWayResult&&(this.task.throwIfAborted(),await ii.promises.copyFile(o,t)),s.merged}catch(o){return Mc.debug(`merge remote rename content failed: ${e.remotePath}`,o),!1}finally{n&&await Qt(n)}}async applyRemoteRenameMeta(e,t){let n=await Ie(this.mirror.root,e.remotePath);if(!n)return;let o=n;if(t.metaChanged&&e.oldRemotePath){let[i,a]=await Promise.all([Ie(this.workspaceRoot,e.oldRemotePath),this.options.mergeBaseDir?Ie(this.options.mergeBaseDir,e.oldRemotePath):Promise.resolve(void 0)]);o=this.mergeMetaWithLocalDelta(n,i,a)}await this.workspace.patchMeta(Tr.posix.dirname(e.remotePath),{[Tr.posix.basename(e.remotePath)]:o},this.getCurrentChangeTask())}mergeMetaWithLocalDelta(e,t,n){let o={...e},i=oo(t),a=oo(n),s=new Set([...Object.keys(i),...Object.keys(a)]);for(let c of s)(0,Mv.isDeepStrictEqual)(i[c],a[c])||(c in i?o[c]=i[c]:delete o[c]);return o}canApplyFolderMetaOnly(e,t){return e.type==="remoteModified"&&!!e.isFolder&&!!e.metaChanged&&!e.contentChanged&&t.every(n=>n.remotePath!==e.remotePath&&n.oldRemotePath!==e.remotePath)}findLocalOverlaps(e){return this.options.localChanges.filter(t=>Fo(t.remotePath,t.oldRemotePath,e.remotePath,e.oldRemotePath))}sortRemoteChanges(e){return[...e].sort((t,n)=>{let o=this.getApplyOrderRank(t),i=this.getApplyOrderRank(n);return o!==i?o-i:t.type==="remoteDeleted"&&n.type==="remoteDeleted"?wr(n.remotePath)-wr(t.remotePath)||t.remotePath.localeCompare(n.remotePath):t.type==="remoteRenamed"&&n.type==="remoteRenamed"?this.getRemoteRenameDeleteDepth(n)-this.getRemoteRenameDeleteDepth(t)||this.getRemoteRenameDeletePath(t).localeCompare(this.getRemoteRenameDeletePath(n)):t.remotePath.localeCompare(n.remotePath)})}getApplyOrderRank(e){return e.type==="remoteDeleted"?0:e.type==="remoteRenamed"?1:2}getRemoteRenameDeleteDepth(e){return wr(this.getRemoteRenameDeletePath(e))}getRemoteRenameDeletePath(e){return e.oldRemotePath??e.remotePath}async tryThreeWayMergeSameFileContentChange(e,t){if(e.type!=="remoteModified"||!e.contentChanged||t.length!==1)return!1;let n=t[0];if(n.type!=="modified"||!n.contentChanged||n.remotePath!==e.remotePath||!this.options.mergeBaseDir)return!1;let o=this.workspace.toLocalPath(e.remotePath),i=Tr.join(this.options.mergeBaseDir,Ne(e.remotePath)),a=this.mirror.toLocalPath(e.remotePath),s=await this.mergeSingleFileContent({remotePath:e.remotePath,workspaceFile:o,baseFile:i,remoteFile:a});return s.threeWayResult&&(await this.workspace.copyMirrorMetaInfo(e.remotePath,!!e.isFolder,this.getCurrentChangeTask()),this.updated.push(e.remotePath)),s.merged?(this.getCurrentChangeTask().step(1),!0):!1}async mergeSingleFileContent(e){let t=this.context.getMetadataVersionInfoByPath?.(e.remotePath),n=t?.upgradeSupported?await this.getApiClient():void 0;return new Fc({...e,versionInfo:t,client:n}).execute()}getCurrentChangeTask(){return U(this.currentChangeTask,"current apply remote change task is missing."),this.currentChangeTask}};qt();$();G();Je();var Dv="merge-base",so="merge-backup";gr();var Ye=T("sync.pull"),Ic=class extends Ae{async execute(){Ye.info("pull start: {0}",this.createPullScopeLog()),this.task.start(100);let e=this.task.subTaskMonitor(8),t=this.task.subTaskMonitor(55),n=this.task.subTaskMonitor(3),o=this.task.subTaskMonitor(22),i=this.task.subTaskMonitor(8),a=this.task.subTaskMonitor(2),s=this.task.subTaskMonitor(2);e.start(4),Ye.info("pull prepare start");let c=e.subTaskMonitor(1),l=e.subTaskMonitor(1),p=e.subTaskMonitor(1),m=e.subTaskMonitor(1);c.start(1),this.assertNoRemoteProjectUnavailableChanges(this.options.changes,"pull"),this.assertNoProjectRootRenameChanges(this.options.changes,"pull");let g=this.getKnownRemoteChanges(),d=g?this.getKnownChangeTargets(g):await this.resolveTargetRemotePaths(this.options.paths);c.step(1),Ye.info("pull targets resolved: {0}",this.formatTargetsForLog(d)),!this.options.paths&&!g?(Ye.info("pull refresh status start"),await this.context.refreshSyncStatus(l),Ye.info("pull refresh status done")):l.finish();let f,y,C=[],v;if(g?(f=this.getTargetLocalChanges(d),y=g,C=this.options.force===!0?this.getTargetCachedPullChanges(d):[],p.finish()):this.options.paths?(f=this.getTargetLocalChanges(d),C=this.options.force===!0?this.getTargetCachedPullChanges(d):[],v=this.expandTargetsForRenameChanges(d,[...f,...C]),p.start(1),y=this.filterChangesByTargets(await this.detectRemoteChanges(v,p),v),p.step(1)):(f=this.getLocalSyncChanges().filter(k=>k.type!=="conflict"),y=this.getRemoteSyncChanges(),p.finish()),Ye.info("pull changes prepared: local={0} remote={1}",f.length,y.length),y.length===0&&this.options.force!==!0)return Ye.info("pull skipped: no applicable remote changes"),m.finish(),t.finish(),n.finish(),o.finish(),i.finish(),a.finish(),s.finish(),{updated:[],deleted:[],conflicts:[],oldFiles:[]};m.start(1),Ye.info("pull merge base capture start");let P=await this.captureMergeBaseDir(f,y);m.step(1),Ye.info("pull merge base capture done");let u,S=!1;try{await new Fn(this.context,{task:t,...this.createFetchOptions(y,d,g)}).execute(),Ye.info("pull reconcile local changes start");let k=await this.reconcileLocalChangesAfterFetch(f,y,d,n);Ye.info("pull reconcile local changes done: local={0}",k.length);let R=this.options.force?await this.includeForceTargetChanges(y,k,d,C):y;u=await new Dc(this.context,{remoteChanges:R,localChanges:k,force:!!this.options.force,mergeBaseDir:P,task:o}).execute(),this.applyPullOperationResult(R,u),Ye.info("pull metadata version check start: paths={0}",u.updated.length);let w=await this.detectOldFiles(i,u.updated);Ye.info("pull metadata version check done: oldFiles={0}",w.length);let H={...u,oldFiles:w};return S=!0,Ye.info("pull done: updated={0} deleted={1} conflicts={2} oldFiles={3}",H.updated.length,H.deleted.length,H.conflicts.length,w.length),H}finally{await this.cleanupPullState(a,P,u),S&&s.finish()}}createPullScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}getKnownRemoteChanges(){if(this.hasKnownChanges(this.options.changes))return la(this.options.changes)}getTargetLocalChanges(e){return this.filterChangesByTargets(this.context.getSyncChanges().filter(t=>at(t)&&t.type!=="conflict"),e)}getTargetCachedPullChanges(e){return this.filterChangesByTargets(la(this.context.getSyncChanges()),e)}async detectRemoteChanges(e,t){return new Er({targets:e,task:t,workspace:this.context}).detect()}async detectOldFiles(e,t){return t.length===0?(e.finish(),[]):Cc(this.context,e,t.map(n=>te(this.workspaceRoot,n)))}async cleanupPullState(e,t,n){if(!t){e.finish();return}let o=!n||n.conflicts.length===0;Ye.info("pull cleanup start"),e.start(o?2:1),await Qt(t),e.step(1),o&&(await Qt(It.join(this.workspaceRoot,".succapp",so)),e.step(1)),Ye.info("pull cleanup done")}formatTargetsForLog(e){return e?`targets=${e.size}`:"<all>"}getFetchPaths(e,t){if(!this.options.paths)return;if(e.length===0)return[...t||new Set(this.options.paths)];let n=new Set;for(let o of e)n.add(o.remotePath),o.oldRemotePath&&n.add(o.oldRemotePath);return[...n]}createFetchOptions(e,t,n){return n?{changes:e}:{paths:this.getFetchPaths(e,t)}}async reconcileLocalChangesAfterFetch(e,t,n,o){if(o.start(1),e.length===0||t.length===0||!e.some(s=>t.some(c=>this.isOverlappedChange(s,c)))||n)return o.step(1),e;await this.context.refreshSyncStatus(o);let i=this.filterChangesByTargets(this.getLocalSyncChanges().filter(s=>s.type!=="conflict"),n),a=e.filter(s=>t.some(c=>this.isOverlappedChange(s,c))?i.some(c=>this.isOverlappedChange(s,c)):!0);for(let s of i){let c=t.find(l=>this.isOverlappedChange(s,l));c&&(a.some(l=>this.isSameChange(l,s))||this.isFetchIntroducedRemoteMetaOnlyChange(s,c)||a.push(s))}return a}applyPullOperationResult(e,t){for(let n of e)this.context.applySyncOperationResult(n,t.conflicts.filter(o=>this.isOverlappedChange(n,o)))}isFetchIntroducedRemoteMetaOnlyChange(e,t){return e.remotePath===t.remotePath&&e.type==="modified"&&t.type==="remoteModified"&&!!e.metaChanged&&!e.contentChanged&&!!t.metaChanged&&!t.contentChanged}isOverlappedChange(e,t){return Fo(e.remotePath,e.oldRemotePath,t.remotePath,t.oldRemotePath)}isSameChange(e,t){return e.type===t.type&&e.remotePath===t.remotePath&&e.oldRemotePath===t.oldRemotePath}async includeForceTargetChanges(e,t,n,o=[]){if(!n)return e;let i=[...e],a=new Set(e.map(c=>c.remotePath)),s=this.createMirrorStore();for(let c of o)if(!a.has(c.remotePath)){if(c.type==="conflict"){await this.addForceMirrorChange(i,a,s,c);continue}i.push(c),a.add(c.remotePath)}for(let c of t){if(c.type==="renamed"&&c.oldRemotePath){if(!n.has(c.remotePath)&&!n.has(c.oldRemotePath))continue;await this.addForceMirrorChange(i,a,s,{path:c.oldPath??Ne(c.oldRemotePath),remotePath:c.oldRemotePath,isFolder:c.isFolder,contentChanged:c.contentChanged,metaChanged:c.metaChanged}),await this.addForceMirrorChange(i,a,s,c);continue}a.has(c.remotePath)||n.has(c.remotePath)&&await this.addForceMirrorChange(i,a,s,c)}return i}async addForceMirrorChange(e,t,n,o){if(t.has(o.remotePath))return;let i=await n.exists(o.remotePath);e.push({path:o.path,remotePath:o.remotePath,...o.fileId!==void 0?{fileId:o.fileId}:{},type:i?"remoteModified":"remoteDeleted",isFolder:i?await n.isFolder(o.remotePath):o.isFolder,contentChanged:i?o.contentChanged:!1,metaChanged:i?o.metaChanged:!1}),t.add(o.remotePath)}async captureMergeBaseDir(e,t){let n=e.filter(m=>m.type==="modified"&&m.contentChanged),o=e.filter(m=>m.type==="modified"&&(m.contentChanged||m.metaChanged));if(o.length===0)return;let i=t.filter(m=>m.type==="remoteModified"?!!m.contentChanged&&n.some(g=>this.isOverlappedChange(g,m)):m.type==="remoteRenamed"?o.some(g=>this.isOverlappedChange(g,m)):!1);if(i.length===0)return;let a=It.join(this.workspaceRoot,".succapp"),s=It.join(a,Dv),c=It.join(a,so);await Promise.all([Qt(s),Qt(c)]),this.task.throwIfAborted(),await Promise.all([Yr.promises.mkdir(s,{recursive:!0}),Yr.promises.mkdir(c,{recursive:!0})]);let l=this.createMirrorStore(),p=this.createWorkspaceStore(l);return await Promise.all(i.map(async m=>{let g=m.type==="remoteRenamed"&&m.oldRemotePath?m.oldRemotePath:m.remotePath,d=Ne(g),f=It.join(s,d),y=It.join(c,d);await Promise.all([(async()=>{try{this.task.throwIfAborted(),await Yr.promises.mkdir(It.dirname(f),{recursive:!0}),await Yr.promises.copyFile(l.toLocalPath(g),f),await this.copyBaseMetaFile(l.root,s,d,g)}catch(C){Ye.debug(`capture merge base failed for ${g}`,C)}})(),(async()=>{try{this.task.throwIfAborted(),await Yr.promises.mkdir(It.dirname(y),{recursive:!0}),await Yr.promises.copyFile(p.toLocalPath(g),y)}catch(C){Ye.debug(`backup workspace file failed for ${g}`,C)}})()])})),s}async copyBaseMetaFile(e,t,n,o){let i=It.dirname(n),a=It.join(e,i,Y),s=It.join(t,i,Y);try{this.task.throwIfAborted(),await Yr.promises.mkdir(It.dirname(s),{recursive:!0}),await Yr.promises.copyFile(a,s)}catch(c){Ye.debug(`capture merge base meta failed for ${o}`,c)}}};var Nc=b(require("fs")),Iu=b(require("path"));D();Ce();J();Un();$();Je();qt();var AF;function Fu(){return AF}G();ia();it();gr();var Mu=b(require("path"));Je();G();D();qt();var OF=T("sync.meta-repair"),Iv="unreadableMeta",Av="blockedMetaPath",Ac=class{constructor(e){this.workspace=e}async repair(e){let t=new Set(e.suspectMetaPaths),n=new Map,o=[],i=new Set;for(let s of t)await this.getWorkItem(s,n,o);for(let s of e.localChanges)await this.repairChange(s,t,n,o,i);let a=[];for(let s of n.values())!s.changed||s.blocked||(await ic(this.workspace.root,s.metaPath,s.dotMeta),a.push(s.metaPath));return{repairedMetaPaths:a,affectedRemotePaths:[...i].sort(),failures:o}}async repairChange(e,t,n,o,i){if(e.type==="deleted"){await this.repairDeleted(e,t,n,o,i);return}if(e.type==="modified"){await this.repairModified(e,t,n,o,i);return}e.type==="renamed"&&e.oldRemotePath&&await this.repairRenamed(e,t,n,o,i)}async repairDeleted(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a))return;let s=await this.getWorkItem(a,n,o);if(!s||s.blocked)return;let c=this.getDotMetaKey(e.remotePath);s.dotMeta[c]&&(delete s.dotMeta[c],s.changed=!0,i.add(e.remotePath))}async repairModified(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a))return;let s=await this.getWorkItem(a,n,o);if(!s||s.blocked)return;let c=this.getDotMetaKey(e.remotePath);if(s.dotMeta[c])return;let l=await this.readMirrorMeta(e.remotePath);l&&(s.dotMeta[c]=this.cloneMetaInfo(l),s.changed=!0,i.add(e.remotePath))}async repairRenamed(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.oldRemotePath),s=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a)&&!t.has(s))return;let c=await this.getWorkItem(a,n,o),l=await this.getWorkItem(s,n,o);if(!c||!l||c.blocked||l.blocked)return;let p=this.getDotMetaKey(e.oldRemotePath),m=this.getDotMetaKey(e.remotePath),g=c.dotMeta[p]??await this.readMirrorMeta(e.oldRemotePath);!l.dotMeta[m]&&g&&(l.dotMeta[m]=this.cloneMetaInfo(g),l.changed=!0),c.dotMeta[p]&&(delete c.dotMeta[p],c.changed=!0),i.add(e.remotePath),i.add(e.oldRemotePath)}async getWorkItem(e,t,n){let o=t.get(e);if(o)return o;let i;try{i=await zr(this.workspace.root,e)}catch(c){if(!this.isBlockedMetaPathError(c))throw c;let l={metaPath:e,dotMeta:{},changed:!1,blocked:!0};return n.push({path:e,errorInfo:Av}),this.logRepairFailure(e,Av),t.set(e,l),l}let a=this.normalizeDotMeta(i.dotMeta),s={metaPath:e,dotMeta:a.dotMeta,changed:!!i.damaged||a.changed,blocked:i.repairable===!1};return s.blocked&&(n.push({path:e,errorInfo:Iv}),this.logRepairFailure(e,Iv)),t.set(e,s),s}isBlockedMetaPathError(e){let t=Bn(e);return t==="ENOTDIR"||t==="EISDIR"}logRepairFailure(e,t){OF.warn(["workspace meta repair failed",`workspaceRoot=${this.workspace.root}`,`mirrorRoot=${this.workspace.getMirrorRoot()}`,`path=${e}`,`errorInfo=${String(t)}`].join(`
|
|
68
|
-
`))}normalizeDotMeta(e){let t={},n=!1;for(let o of Object.keys(e)){let i=e[o];if(typeof i=="object"&&i!==null&&!Array.isArray(i)){t[o]=i;continue}n=!0}return{dotMeta:t,changed:n}}async readMirrorMeta(e){let t=this.getDotMetaMetaPath(e);return(await zr(this.workspace.getMirrorRoot(),t)).dotMeta[this.getDotMetaKey(e)]}cloneMetaInfo(e){return{...e,option:e.option?{...e.option}:void 0,customOption:e.customOption?{...e.customOption}:void 0}}getDotMetaMetaPath(e){let t=Mu.posix.dirname(e);return t==="/"?"/"+Y:t+"/"+Y}getDotMetaKey(e){return Mu.posix.basename(e)}};Zo();na();du();var Ov="10Mb";var _F=/^\s*(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?\s*$/i,LF={b:1,kb:1024,mb:1048576,gb:1073741824};function NF(r,e=10485760){let t=_F.exec(r);if(!t)return e;let n=Number(t[1]),o=(t[2]??"b").toLowerCase(),i=LF[o]??1;return Math.floor(n*i)}var Du=class{reader;writer;autoPushValue=!1;autoPushDelayValue=2e3;autoPullValue=!1;autoPullIntervalValue=60;syncIgnoreValue=[];maxPushFileSizeValue=Ov;configure(e,t){this.reader=e,this.writer=t,this.load()}load(){let e=this.reader;e&&(this.autoPushValue=e("sync.autoPush",!1),this.autoPushDelayValue=e("sync.autoPushDelay",2e3),this.autoPullValue=e("sync.autoPull",!1),this.autoPullIntervalValue=e("sync.autoPullInterval",60),this.syncIgnoreValue=e("sync.ignore",[]),this.maxPushFileSizeValue=e("sync.maxPushFileSize",Ov))}get autoPush(){return this.autoPushValue}get autoPushDelay(){return this.autoPushDelayValue}get autoPull(){return this.autoPullValue}get autoPullInterval(){return this.autoPullIntervalValue}get conflictStrategy(){return"ask"}get syncIgnore(){return[...this.syncIgnoreValue]}get maxPushFileSizeBytes(){return NF(this.maxPushFileSizeValue,10485760)}async setAutoPush(e){this.autoPushValue=e,await this.writer?.("sync.autoPush",e),this.load()}},yt=new Du;var je=T("sync.push"),Oc=class extends ni{targets;localChanges=0;remoteChanges=0;requests=0;missingParentCreates=0;workspaceMetaRepairCandidates=0;workspaceMetaRepairRepaired=0;workspaceMetaRepairFailures=0;requestsByType={};preflightFailures=0;preflightFailuresByReason={};pushed=0;rejected=0;failures=0;remoteDetector;recordRequests(e){this.requests=e.length,this.requestsByType={};for(let t of e)this.incrementCounter(this.requestsByType,t.action)}recordPreflightFailures(e){this.preflightFailures+=e.length;for(let t of e)this.incrementCounter(this.preflightFailuresByReason,this.getFailureReason(t))}recordResult(e){this.pushed=e.pushed.length,this.rejected=e.rejected.length,this.failures=e.failures.length}createSnapshot(){return{runs:this.runs,durationMs:this.durationMs,...this.targets!==void 0?{targets:this.targets}:{},localChanges:this.localChanges,remoteChanges:this.remoteChanges,requests:this.requests,missingParentCreates:this.missingParentCreates,workspaceMetaRepairCandidates:this.workspaceMetaRepairCandidates,workspaceMetaRepairRepaired:this.workspaceMetaRepairRepaired,workspaceMetaRepairFailures:this.workspaceMetaRepairFailures,requestsByType:{...this.requestsByType},preflightFailures:this.preflightFailures,preflightFailuresByReason:{...this.preflightFailuresByReason},pushed:this.pushed,rejected:this.rejected,failures:this.failures,...this.remoteDetector?{remoteDetector:this.remoteDetector}:{},api:this.api}}getFailureReason(e){let t=e.errorInfo;if(!t||typeof t!="object")return"unknown";let n=t.reason;if(n!=null)return String(n);let o=t.errorCode;if(typeof o=="string"&&o.length>0)return o;let i=t.errorType;return typeof i=="string"&&i.length>0?i:"unknown"}incrementCounter(e,t){e[t]=(e[t]??0)+1}},_c=class extends Ae{constructor(e,t){super(e,t)}diagnostics=new Oc;apiClient;pushContext=this.context;pushOptions=this.options;workspaceRootPath=this.workspaceRoot;mirrorRootPath=this.mirrorRoot;pushResult=this.createEmptyPushResult();run=this.createEmptyRunState();async execute(){this.beginPushRun();for(let e of this.createPushStageTasks())await e.run();return this.finishPush(this.run.startedAt)}beginPushRun(){this.assertNoRemoteProjectUnavailableChanges(this.options.changes,"push"),this.assertNoProjectRootRenameChanges(this.options.changes,"push"),this.pushResult=this.createEmptyPushResult(),this.run={...this.createEmptyRunState(),startedAt:this.diagnostics.startRun()},je.info("push start: {0}",this.createPushScopeLog()),this.task.start(100)}createPushScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}getDiagnostics(e={}){if(this.apiClient){let n=this.apiClient.getDiagnostics();n&&this.diagnostics.captureApiDiagnostics(n)}let t=this.diagnostics.createSnapshot();return e.reset&&(this.diagnostics=new Oc,this.apiClient=void 0),t}finishPush(e){if(this.diagnostics.recordResult(this.pushResult),this.apiClient){let t=this.apiClient.getDiagnostics();t&&this.diagnostics.captureApiDiagnostics(t)}return this.diagnostics.finishRun(e),je.info("push done: pushed={0} rejected={1} failures={2}",this.pushResult.pushed.length,this.pushResult.rejected.length,this.pushResult.failures.length),je.debug(`push diagnostics ${this.diagnostics.describeForLog()}`),this.pushResult}createEmptyRunState(){return{startedAt:0,localChanges:[],workspaceMetaRepairPaths:[],missingParentFolderCreates:[],remoteChanges:[],requests:[]}}createPushStageTasks(){let e=this.task.subTaskMonitor(20),t=this.task.subTaskMonitor(20),n=this.task.subTaskMonitor(54),o=this.task.subTaskMonitor(3),i=this.task.subTaskMonitor(3);return e.start(5),[new Au(this,e),new Ou(this,e),new _u(this,e),new Lu(this,e),new Nu(this,e),new Wu(this,t),new Uu(this,n,o,i)]}canContinuePushPipeline(){return this.pushResult.rejected.length===0&&this.pushResult.failures.length===0}hasPushRequests(){return this.run.requests.length>0}finishTask(){this.task.finish()}isForcePush(){return!!this.options.force}expandPushTargetsForRenameChanges(e,t){return this.expandTargetsForRenameChanges(e,t)}async getApiClientForPush(){let e=await this.getApiClient();return this.apiClient=e,e}async uploadFileMutation(e,t){return await this.notifySyncPushFileRequest(t),t.action==="create"?e.createFile(this.toApiFileMutationRequest(t)):t.action==="modify"?e.modifyFile(this.toApiModifyFileRequest(t)):t.action==="move"?(U(t.targetPath,`targetPath is required when moving file: ${t.path}`),e.moveFile(this.toApiMoveFileRequest(t,t.targetPath))):e.deleteFile(t.path,{expectedRevision:t.expectedRevision===null?void 0:t.expectedRevision,expectedModifyTime:t.expectedModifyTime===null?void 0:t.expectedModifyTime})}notifySyncPushFileRequest(e){return this.options.onSyncPushFileRequest?.(e)}toApiFileMutationRequest(e){let{action:t,contentValidated:n,...o}=e;return o}toApiModifyFileRequest(e){let t=this.toApiFileMutationRequest(e);return{...t,expectedRevision:this.toWriteExpectedRevision(t.expectedRevision)}}toApiMoveFileRequest(e,t){let n=this.toApiFileMutationRequest(e);return{...n,targetPath:t,expectedRevision:this.toWriteExpectedRevision(n.expectedRevision)}}toWriteExpectedRevision(e){return e===null?void 0:e}reportPushDiagnostic(e,t,n){this.reportDiagnostic({path:e,message:t,errorInfo:n})}createEmptyPushResult(){return{pushed:[],rejected:[],failures:[]}}formatTargetsForLog(e){return e?`${e.size}`:"<all>"}reportPushFailure(e,t){this.reportDiagnostic({path:e.path,message:t,errorInfo:e.errorInfo})}},ma=class{constructor(e,t){this.command=e;this.task=t}async run(){this.shouldRun()&&await this.doRun()}shouldRun(){return!0}async isFolderPath(e,t){try{return(await Nc.promises.stat(te(e,t))).isDirectory()}catch(n){if(F(n))return je.debug(`sync folder path does not exist: ${e}:${t}`),!1;throw n}}getParentPaths(e){let t=e.replace(/^\/+|\/+$/g,"").split("/").filter(Boolean),n=[];for(let o=0;o<t.length-1;o++)n.push("/"+t.slice(0,o+1).join("/"));return n}},Au=class extends ma{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.collectLocalChanges()}async collectLocalChanges(){je.info("push prepare start");let{targets:e,localChanges:t}=await this.getLocalChangesForPush();this.command.run.targets=e,this.command.run.localChanges=t,this.command.diagnostics.targets=e?.size,this.command.diagnostics.localChanges=t.length,je.info("push local changes prepared: targets={0} local={1}",this.command.formatTargetsForLog(e),t.length)}async getLocalChangesForPush(){let e=this.command.pushOptions;if(this.command.hasKnownChanges(e.changes))return this.task.finish(),{targets:new Set(this.command.getKnownChangeTargetRemotePaths(e.changes)),localChanges:e.changes};this.task.start(2);let t=this.task.subTaskMonitor(1),n=this.task.subTaskMonitor(1);t.start(1);let o=this.normalizeDotMetaTargets(await this.command.resolveTargetRemotePaths(e.paths)),i=o?new Set(ft(o)):void 0;return t.step(1),await this.refreshTargetChangesForPush(i,n),{targets:i,localChanges:this.command.filterChangesByTargets(this.command.pushContext.getSyncChanges().filter(a=>at(a)),i)}}async refreshTargetChangesForPush(e,t){if(!e){await this.command.pushContext.refreshSyncStatus(t);return}if(e.size===0){t.finish();return}if(await this.hasDirectoryTarget(e)){await this.command.pushContext.refreshSyncStatus(t);return}t.start(1),await this.command.pushContext.consumeFileChanges([...e].map(n=>({filePath:te(this.command.workspaceRootPath,n),type:"changed"}))),t.step(1)}async hasDirectoryTarget(e){return(await Promise.all([...e].map(async n=>await this.isDirectoryTarget(this.command.workspaceRootPath,n)||await this.isDirectoryTarget(this.command.mirrorRootPath,n)))).some(Boolean)}async isDirectoryTarget(e,t){try{return(await Nc.promises.stat(te(e,t))).isDirectory()}catch(n){return F(n)?(je.debug(`push target is not a directory: ${e}:${t}`),!1):(je.debug(`push target stat failed, fallback to full status: ${e}:${t}`,n),!0)}}normalizeDotMetaTargets(e){if(!e)return;let t=new Set;for(let n of e){if(Iu.posix.basename(n)===Y){t.add(Iu.posix.dirname(n));continue}t.add(n)}return t}},Ou=class extends ma{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.repairWorkspaceMeta()}async repairWorkspaceMeta(){this.task.start(1),this.command.run.workspaceMetaRepairPaths=dv(this.command.run.localChanges),this.command.diagnostics.workspaceMetaRepairCandidates=this.command.run.workspaceMetaRepairPaths.length,je.info("push workspace metadata repair start: candidates={0}",this.command.run.workspaceMetaRepairPaths.length);let e=await new Ac(this.command.pushContext).repair({suspectMetaPaths:this.command.run.workspaceMetaRepairPaths,localChanges:this.command.run.localChanges});this.command.diagnostics.workspaceMetaRepairRepaired=e.repairedMetaPaths.length,this.command.diagnostics.workspaceMetaRepairFailures=e.failures.length,this.task.step(1),je.info("push workspace metadata repair done: failures={0}",e.failures.length),e.failures.length>0&&(this.command.finishTask(),this.command.pushResult.failures.push(...e.failures))}},ai=class extends ma{shouldRun(){return this.command.canContinuePushPipeline()}},_u=class extends ai{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.analyzeParentFolders()}async analyzeParentFolders(){if(this.task.start(1),je.info("push parent folder analysis start"),this.command.run.missingParentFolderCreates=await this.collectMissingParentFolderCreates(this.command.run.localChanges),this.command.diagnostics.missingParentCreates=this.command.run.missingParentFolderCreates.length,this.command.run.operationTargets=this.command.expandPushTargetsForRenameChanges(this.command.run.targets,this.command.run.localChanges),this.command.run.operationTargets)for(let e of this.command.run.missingParentFolderCreates)this.command.run.operationTargets.add(e);this.task.step(1),je.info("push parent folder analysis done: missingParents={0}",this.command.run.missingParentFolderCreates.length)}async collectMissingParentFolderCreates(e){let t=new Set,n=new Set;for(let o of e)o.isFolder&&(o.type==="added"||o.type==="renamed")&&n.add(o.remotePath);for(let o of e)if(!(o.type!=="added"&&o.type!=="modified"&&o.type!=="renamed"))for(let i of this.getParentPaths(o.remotePath))n.has(i)||t.has(i)||await this.isFolderPath(this.command.mirrorRootPath,i)||!await this.isFolderPath(this.command.workspaceRootPath,i)||t.add(i);return[...t].sort((o,i)=>{let a=wr(o)-wr(i);return a!==0?a:o.localeCompare(i)})}},Lu=class extends ai{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.checkRemoteChanges()}async checkRemoteChanges(){this.task.start(1),je.info("push remote change check start: {0}",this.command.formatTargetsForLog(this.command.run.operationTargets)),this.command.run.remoteChanges=await this.getRemoteChangesForPush(this.command.run.operationTargets),this.command.diagnostics.remoteChanges=this.command.run.remoteChanges.length,this.task.step(1),je.info("push remote change check done: remote={0}",this.command.run.remoteChanges.length),this.command.run.remoteChanges.length>0&&!this.command.isForcePush()&&(this.command.finishTask(),this.command.pushResult.rejected.push(...this.command.run.remoteChanges))}async getRemoteChangesForPush(e){if(this.command.hasKnownChanges(this.command.pushOptions.changes)||!e)return this.command.filterChangesByTargets(this.command.pushContext.getSyncChanges().filter(o=>fr(o)),e);if(e.size===0)return[];let t=new Er({workspace:this.command.pushContext,targets:e,task:this.task}),n=await t.detect();return this.command.diagnostics.remoteDetector=t.getDiagnostics(),this.command.filterChangesByTargets(n,e)}},Nu=class extends ai{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.buildPushRequests()}async buildPushRequests(){this.task.start(1),je.info("push request build start: local={0}",this.command.run.localChanges.length),this.command.run.requests=await this.createPushRequests(this.command.run.localChanges,this.command.run.missingParentFolderCreates),this.command.diagnostics.recordRequests(this.command.run.requests),this.task.step(1),je.info("push request build done: requests={0}",this.command.run.requests.length),this.command.run.requests.length===0&&this.command.finishTask()}async createPushRequests(e,t=[]){let n=[],o=[],i=new Set,a=new Set,s=new Set(t);for(let c of this.sortChangesForPush(this.filterDerivedFolderRenameChanges(e))){if(c.type==="renamed"&&c.oldRemotePath){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n);let l=this.getMovedFolderChildSource(c.oldRemotePath,o);if(l===c.remotePath){(c.contentChanged||c.metaChanged)&&n.push(await this.createModifyRequest(c,c.oldRemotePath,!0));continue}n.push(await this.createMoveRequest(c,l)),c.isFolder&&(o.push({oldRemotePath:c.oldRemotePath,newRemotePath:c.remotePath}),a.add(c.remotePath));continue}if(c.type==="added"){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n),n.push(await this.createCreateRequest(c.remotePath,c.isFolder)),c.isFolder&&a.add(c.remotePath);continue}if(c.type==="modified"){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n),n.push(await this.createModifyRequest(c));continue}c.type==="deleted"&&n.push(await this.createDeleteRequest(c.remotePath,c.isFolder))}return n}async appendMissingParentFolderCreates(e,t,n,o,i){for(let a of this.getParentPaths(e))if(!(o.has(a)||!t.has(a)||a==="/"||n.has(a))){if(await this.isFolderPath(this.command.mirrorRootPath,a)){n.add(a);continue}i.push(await this.createCreateRequest(a,!0)),o.add(a),n.add(a)}}filterDerivedFolderRenameChanges(e){let t=e.filter(n=>n.type==="renamed"&&n.isFolder&&!!n.oldRemotePath);return t.length===0?e:e.filter(n=>n.type!=="renamed"||!n.oldRemotePath?!0:!t.some(o=>{if(o===n)return!1;let i=o.oldRemotePath,a=o.remotePath;if(!Q(n.oldRemotePath,i)||!Q(n.remotePath,a))return!1;let s=n.oldRemotePath.slice(i.length),c=n.remotePath.slice(a.length);return s===c&&!n.contentChanged&&!n.metaChanged}))}async createCreateRequest(e,t){let n=this.command.workspaceRootPath,o={path:e,action:"create",isFolder:t,expectedRevision:null,expectedModifyTime:null,metaInfo:oo(await Ie(n,e,{strict:!0})),metaInfoChanged:!0};return t||(o.localContentPath=te(n,e),o.contentChanged=!0),o}async createModifyRequest(e,t=e.remotePath,n=!1){let o=this.command.workspaceRootPath,i=await Ie(this.command.mirrorRootPath,t);if(!i)throw new Ot("err.sync.conflict",{remotePath:e.remotePath,reason:"remoteVersionChanged"});let a=!e.isFolder&&!!e.contentChanged,s={path:e.remotePath,action:"modify",isFolder:e.isFolder,expectedRevision:this.command.isForcePush()||e.isFolder?void 0:i.revision??0,expectedModifyTime:this.command.isForcePush()||n?void 0:i.modifyTime??0,metaInfo:oo(await Ie(o,e.remotePath,{strict:!0})),metaInfoChanged:!!e.metaChanged};return a&&(s.localContentPath=te(o,e.remotePath),s.contentChanged=!0),s}async createMoveRequest(e,t){if(!e.oldRemotePath)throw new Ot("err.sync.conflict",{remotePath:e.remotePath,reason:"remoteVersionChanged"});let n=this.command.workspaceRootPath,o=await Ie(this.command.mirrorRootPath,e.oldRemotePath);if(!o)throw new Ot("err.sync.conflict",{remotePath:e.oldRemotePath,reason:"remoteVersionChanged"});let i=oo(await Ie(n,e.remotePath,{strict:!0})),a={path:t??e.oldRemotePath,targetPath:e.remotePath,action:"move",isFolder:e.isFolder,expectedRevision:this.command.isForcePush()||e.isFolder?void 0:o.revision??0,expectedModifyTime:this.command.isForcePush()||e.isFolder||t?void 0:o.modifyTime??0,metaInfo:i,metaInfoChanged:!!e.metaChanged};return!e.isFolder&&e.contentChanged&&(a.localContentPath=te(n,e.remotePath),a.contentChanged=!0),a}getMovedFolderChildSource(e,t){for(let n of[...t].reverse())if(!(e===n.oldRemotePath||!Q(e,n.oldRemotePath)))return n.newRemotePath+e.slice(n.oldRemotePath.length)}async createDeleteRequest(e,t){let n=await Ie(this.command.mirrorRootPath,e);if(!n)throw new Ot("err.sync.conflict",{remotePath:e,reason:"remoteVersionChanged"});return{path:e,action:"delete",expectedRevision:this.command.isForcePush()||t?void 0:n.revision??0,expectedModifyTime:this.command.isForcePush()||t?void 0:n.modifyTime??0}}sortChangesForPush(e){let t=n=>n.type==="deleted"?-wr(n.remotePath):n.type==="renamed"?10:n.type==="added"?20+wr(n.remotePath):30+wr(n.remotePath);return[...e].sort((n,o)=>{let i=t(n),a=t(o);return i!==a?i-a:n.remotePath.localeCompare(o.remotePath)})}},Lc=class extends ai{shouldRun(){return super.shouldRun()&&this.command.hasPushRequests()}async validatePushRequest(e){let t=yt.maxPushFileSizeBytes;if(e.localContentPath)try{let n=await Nc.promises.stat(e.localContentPath);if(t>0&&n.size>t){let o={path:e.path,errorInfo:{reason:"fileTooLarge",message:`File is larger than configured push limit: ${e.path}`,size:n.size,limit:t}};return this.command.reportPushFailure(o,"push validation failed"),o}if(await lv(e.localContentPath)){let o={path:e.path,errorInfo:{reason:"conflictMarkers",message:`File contains unresolved conflict markers: ${e.path}`}};return this.command.reportPushFailure(o,"push validation failed"),o}}catch(n){let o={path:e.path,errorInfo:{reason:"fileReadFailed",message:`Failed to validate push file content: ${e.path}`,cause:n instanceof Error?n.message:String(n)}};return this.command.reportPushFailure(o,"push validation failed"),o}}},Wu=class extends Lc{doRun(){return this.preflightPushRequests()}async preflightPushRequests(){je.info("push preflight start: requests={0}",this.command.run.requests.length);let e=await this.validatePushRequestsBeforePush(this.command.run.requests);this.command.diagnostics.recordPreflightFailures(e),je.info("push preflight done: failures={0}",e.length),e.length>0&&(this.command.finishTask(),this.command.pushResult.failures.push(...e))}async validatePushRequestsBeforePush(e){let t=[];if(this.task.start(Math.max(e.length,1)),e.length===0)return this.task.step(1),t;let n=e.map(o=>({request:o,task:this.task.subTaskMonitor(1)}));for(let{request:o,task:i}of n){this.task.throwIfAborted(),i.start(1);let a=await this.validatePushRequest(o);if(a){t.push(a),i.progress(1);continue}o.contentValidated=!0,i.step(1)}return t}},Uu=class extends Lc{constructor(t,n,o,i){super(t,n);this.resultTask=o;this.doneTask=i}doRun(){return this.uploadPushRequests()}async uploadPushRequests(){je.info("push upload start: requests={0}",this.command.run.requests.length);let t=await this.pushRequests(this.command.run.requests);this.command.pushResult={pushed:[...t.pushed],rejected:[...t.rejected],failures:[...t.failures],...t.metadataVersionSuggestions?{metadataVersionSuggestions:[...t.metadataVersionSuggestions]}:{}},je.info("push upload done: pushed={0} failures={1}",this.command.pushResult.pushed.length,this.command.pushResult.failures.length),this.doneTask.finish()}async pushRequests(t){let n=await this.command.getApiClientForPush(),o=[],i=[];this.task.start(Math.max(t.length,1)),t.length===0&&this.task.step(1);try{for(let l of t){this.task.throwIfAborted();let p=await this.preparePushRequestForUpload(l);if(p){i.push(p),this.task.step(1);continue}try{let m=await this.command.uploadFileMutation(n,l);if(!m.success){let g={path:m.path,errorInfo:m.errorInfo};this.command.reportPushFailure(g,"push item failed")}o.push(m)}catch(m){let g=this.createPushFailureFromMutationError(l,m);if(!g)throw m;i.push(g),this.command.reportPushFailure(g,"push item failed")}this.task.step(1)}}catch(l){throw await this.applyPushResponsesWithProgress(o),l}let a=await this.applyPushResponsesWithProgress(o),s=await this.createMetadataVersionSuggestions(t,o),c=s.length>0?{...a,metadataVersionSuggestions:s}:a;return i.length===0?c:{...c,failures:[...c.failures,...i]}}createPushFailureFromMutationError(t,n){if(!(n instanceof zt))return;let o=n.remoteError?this.toMutationErrorInfo(Hi(on(n.remoteError),{action:t.action,path:t.path,targetPath:t.targetPath}),n):void 0;if(!(!o||!this.isMutationBlockedErrorInfo(o,t)))return{path:this.getMutationFailurePath(t,o),errorInfo:o}}toMutationErrorInfo(t,n){let o=n.remoteError;return{errorCode:t.errorCode??o?.errorCode??n.errorCode,errorType:t.errorType??o?.errorType??n.errorType,message:t.message??o?.message??n.message,properties:bt(t)}}isMutationBlockedErrorInfo(t,n){return qC(t,{action:n.action,path:n.path,targetPath:n.targetPath})}getMutationFailurePath(t,n){let o=bt(n)?.path;return typeof o=="string"&&o.length>0?o:this.getRequestTargetPath(t)}async applyPushResponsesWithProgress(t){this.resultTask.start(Math.max(t.length,1));let n=await this.applyPushResponses(t);return this.resultTask.step(Math.max(t.length,1)),n}async applyPushResponses(t){let n=new Mt(this.command.mirrorRootPath),o=new rr(this.command.workspaceRootPath,n);await new ei({workspace:o,mirror:n,getApiClient:()=>this.command.getApiClientForPush()}).apply(t);let i=t.filter(s=>s.success).map(s=>s.path);return i.length>0&&this.command.pushContext.clearSyncStatusTargets(i),{pushed:i,rejected:[],failures:t.filter(s=>!s.success).map(s=>({path:s.path,errorInfo:s.errorInfo}))}}async preparePushRequestForUpload(t){return t.contentValidated?void 0:this.validatePushRequest(t)}async createMetadataVersionSuggestions(t,n){let o=new Set(n.filter(s=>s.success).map(s=>s.path));if(o.size===0)return[];let i=[],a=new Set;for(let s of t){if(!this.shouldCheckMetadataVersionSuggestion(s,o))continue;let c=this.getRequestTargetPath(s);if(a.has(c))continue;let l=await this.createMetadataVersionSuggestion(s,c);l&&(a.add(c),i.push(l))}return i}shouldCheckMetadataVersionSuggestion(t,n){if(!t.localContentPath||!t.contentChanged||t.isFolder||t.action==="delete")return!1;let o=this.getRequestTargetPath(t);return n.has(o)||n.has(t.path)}async createMetadataVersionSuggestion(t,n){try{let o=t.localContentPath;if(!o)return;let i=this.command.pushContext.getMetadataVersionInfoByPath?.(n),a=i?.contentVersion;if(!i?.upgradeSupported||!a)return;let s=await oc(o),c=this.getMetadataVersionSuggestionKind(s,a);return c?{path:n,currentVersion:s,targetVersion:a,metaType:i.metaType,kind:c}:void 0}catch(o){je.debug(`push metadata suggestion check failed: ${n}`,o);return}}getMetadataVersionSuggestionKind(t,n){return gc(t,n)?"newer":fc(t,n)?"older":void 0}getRequestTargetPath(t){return t.targetPath??t.path}};gu();it();D();J();$();G();gr();var Rt=T("sync.reset"),Wc=class extends Ae{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){Rt.info("reset start: {0}",this.createResetScopeLog()),this.task.start(100);let e=this.task.subTaskMonitor(8),t=this.task.subTaskMonitor(87),n=this.task.subTaskMonitor(3),o=this.task.subTaskMonitor(2);e.start(4),Rt.info("reset prepare start");let{targets:i,localChanges:a}=await this.prepareResetScope();e.step(1),Rt.info("reset targets resolved: {0}",this.formatTargetsForLog(i)),Rt.info("reset local changes checked: local={0}",a.length),a.length>0&&!this.options.force&&this.throwFirstConflict(a,"requiresOverwrite"),e.step(1);let s=this.expandTargetsForRenameChanges(i,a),c=s?this.sortRemotePathsForCheckout(ft(s)):this.sortRemotePathsForCheckout(await this.workspace.listProjectPaths());e.step(1),Rt.info("reset checkout target paths prepared: paths={0}",c.length),Rt.debug(`reset checkout target paths: ${c.join("|")}`);let l=await this.createCheckoutItems(c);e.step(1),Rt.info("reset checkout items prepared: items={0} resources={1}",l.length,l.reduce((g,d)=>g+d.total,0));for(let g of l)Rt.debug(`reset checkout item: remotePath=${g.remotePath} existsInMirror=${g.existsInMirror} total=${g.total}`);Rt.info("reset checkout start: items={0}",l.length);let p=await this.checkoutMirrorToWorkspace(l,t);Rt.info("reset checkout done: updated={0} deleted={1}",p.updated.length,p.deleted.length);let m=[...p.updated,...p.deleted];return n.start(1),Rt.info("reset cleanup status start"),await this.cleanupEmptyOrphanParents(p.deleted,this.mirror,this.workspace),m.length>0&&this.clearSyncStatusTargets(m),n.step(1),Rt.info("reset cleanup status done"),o.finish(),Rt.info("reset done: updated={0} deleted={1}",p.updated.length,p.deleted.length),p}createResetScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}async prepareResetScope(){if(this.hasKnownChanges(this.options.changes)){let t=this.options.changes.filter(at);return{targets:this.getKnownChangeTargets(t),localChanges:t}}let e=await this.resolveTargetRemotePaths(this.options.paths,"mirror-only");return{targets:e,localChanges:this.filterChangesByTargets(this.getLocalSyncChanges(),e)}}formatTargetsForLog(e){return e?`targets=${e.size}`:"<all>"}async checkoutMirrorToWorkspace(e,t){let n=[],o=[];if(e.length===0)return t.finish(),{updated:n,deleted:o};t.start(e.reduce((a,s)=>a+s.total,0));let i=e.map(a=>({...a,task:t.subTaskMonitor(a.total)}));for(let a of i){t.throwIfAborted(),a.task.start(a.total);let s=Date.now();Rt.debug(`reset item start: remotePath=${a.remotePath} existsInMirror=${a.existsInMirror} total=${a.total}`),a.existsInMirror?(await this.workspace.checkoutFromMirror(a.remotePath,a.task),t.throwIfAborted(),n.push(a.remotePath)):(await this.workspace.deletePath(a.remotePath,a.task),t.throwIfAborted(),o.push(a.remotePath)),Rt.debug(`reset item done: remotePath=${a.remotePath} elapsed=${Date.now()-s}ms`)}return t.finish(),{updated:n,deleted:o}}async createCheckoutItems(e){return Promise.all(e.map(async t=>{let n=await this.mirror.exists(t);return{remotePath:t,existsInMirror:n,total:await this.countCheckoutTotal(t,n)}}))}async countCheckoutTotal(e,t){let n=await(t?this.workspace.countCheckoutResources(e):this.workspace.countResources([e]));return Math.max(n,1)}throwFirstConflict(e,t){let n=e[0];throw new Ot("err.sync.conflict",{remotePath:n.remotePath,reason:t})}sortRemotePathsForCheckout(e){return e.sort((t,n)=>t.localeCompare(n))}};var ju=b(require("fs")),ha=b(require("path"));$();D();G();it();var UF=T("sync.restore-local"),Uc=class extends oi{constructor(e,t){super(e,t)}async execute(){let e=this.options.change,t=ha.join(this.workspaceRoot,".succapp",so,Ne(e.remotePath)),n=ha.join(this.workspaceRoot,e.path);try{this.task.throwIfAborted(),await ju.promises.mkdir(ha.dirname(n),{recursive:!0}),await ju.promises.copyFile(t,n)}catch(o){if(F(o))return UF.debug(`pull backup file does not exist: ${t}`),{restored:!1};throw o}return this.context.applySyncOperationResult(e,[{path:e.path,remotePath:e.remotePath,...e.fileId!==void 0?{fileId:e.fileId}:{},type:"modified",contentChanged:!0,metaChanged:!1}]),{restored:!0}}};var co=b(require("fs")),xr=b(require("path"));D();$();it();var fa=class extends Dt{async execute(){return{workspaceRootPath:this.workspaceRoot,entries:await this.listEntries()}}async listEntries(){let e=this.resolveFilterTargets(),t=await _v(this.workspaceRoot);return e.length===0?t:t.filter(n=>e.some(o=>Q(n.path,o)))}resolveFilterTargets(){return(this.options.paths??[]).map(e=>jF(this.workspaceRoot,e))}},jc=class extends Ae{async execute(){let e=await new fa(this.context,this.options).listEntries(),t=Nv(this.workspaceRoot);if(!this.options.paths||this.options.paths.length===0)return await co.promises.rm(t,{recursive:!0,force:!0}),{workspaceRootPath:this.workspaceRoot,cleared:e,remaining:[]};for(let n of e)this.task.throwIfAborted(),await co.promises.rm(n.backupPath,{force:!0}),await BF(xr.dirname(n.backupPath),t);return{workspaceRootPath:this.workspaceRoot,cleared:e,remaining:await _v(this.workspaceRoot)}}};async function _v(r){let e=Nv(r);return(await Lv(e,e)).sort((n,o)=>n.path.localeCompare(o.path))}async function Lv(r,e){let t=await co.promises.readdir(e,{withFileTypes:!0}).catch(o=>{if(F(o))return[];throw o}),n=[];for(let o of t){let i=xr.join(e,o.name);if(o.isDirectory()){n.push(...await Lv(r,i));continue}if(!o.isFile())continue;let a=await co.promises.stat(i),s=xr.relative(r,i).replace(/\\/g,"/");n.push({path:Pe(s),backupPath:i,size:a.size,mtime:a.mtime.toISOString()})}return n}function jF(r,e){return Pe(kr(r,e)??e)}function Nv(r){return xr.join(r,".succapp",so)}async function BF(r,e){let t=r;for(;t!==e&&t.startsWith(e+xr.sep);){if((await co.promises.readdir(t).catch(o=>{if(F(o))return[];throw o})).length>0)return;await co.promises.rmdir(t),t=xr.dirname(t)}}G();J();D();$();it();var Mn=T("sync.remove-project"),Bc=class extends Ae{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){let e=[...new Set(this.options.projectNames.map(l=>Tt(l)))];Mn.info("remove local project start: {0}",e.join(", "));let[t,n]=await Promise.all([this.workspace.listProjectPaths(),this.mirror.listProjectPaths()]),o=new Set([...t,...n]),i=e.filter(l=>!o.has(l)).map(l=>l.slice(1));if(i.length>0)throw new St("err.sync.projectNotFound",{projectNames:i.join(", ")});Mn.info("remove local project resource count start: projects={0}",e.length);let a=await this.createRemoveItems(e);Mn.info("remove local project resource count done: resources={0}",a.reduce((l,p)=>l+p.total,0)),this.task.start(Math.max(a.reduce((l,p)=>l+p.total,0),1)),a.length===0&&this.task.step(1),Mn.info("remove local project files start: projects={0}",a.length);let s=a.map(l=>({...l,task:this.task.subTaskMonitor(l.total)}));for(let l of s)this.task.throwIfAborted(),l.task.start(l.total),await this.workspace.deletePath(l.projectPath,l.task),this.task.throwIfAborted(),await this.mirror.removePath(l.projectPath,l.task),this.task.throwIfAborted(),await this.mirror.removeMeta(l.projectPath);Mn.info("remove local project files done: projects={0}",a.length);let c=e.map(l=>l.slice(1));return Mn.info("remove local project cleanup status start"),this.clearSyncStatusTargets(e),Mn.info("remove local project cleanup status done"),c.length>0&&this.context.notifyLocalProjectsChanged?.(),Mn.info("remove local project done: {0}",c.join(", ")),{projectNames:c}}async createRemoveItems(e){return Promise.all(e.map(async t=>{let[n,o]=await Promise.all([this.workspace.countResources([t]),this.mirror.countMetaResources([t])]);return{projectPath:t,total:Math.max(n+o,1)}}))}};var Wv=b(require("fs")),Bu=b(require("path"));it();var Vc=class extends Dt{async execute(){let e=this.options.source??"server",t=await this.resolveRemotePath(this.options.path,e==="mirror"?"mirror-only":"server-backed");if(e==="mirror"){let i=this.createMirrorStore();return{path:this.options.path,remotePath:t,fileName:Bu.basename(t),source:e,buffer:await Wv.promises.readFile(i.toLocalPath(t))}}let o=await(await this.getApiClient()).getFileContent(t,{revision:this.options.revision});return{path:this.options.path,remotePath:t,fileName:Bu.basename(t),source:e,buffer:o.buffer}}};var Vu=b(require("fs"));it();var qc=3,VF=/\r\n|\n|\r/,Hc=class extends Dt{async execute(){let e=this.options.source??"server",t=await Promise.all(this.options.paths.map(async n=>(this.task.throwIfAborted(),this.diffFile(n,e))));return{source:e,items:t}}async diffFile(e,t){let n=await this.resolveRemotePath(e,t==="mirror"?"mirror-only":"server-backed"),o=this.createMirrorStore(),a=this.createWorkspaceStore(o).toLocalPath(n),[s,c]=await Promise.all([this.readSourceBuffer(n,t,o),Vu.promises.readFile(a)]),l=qF({sourceBuffer:s,workspaceBuffer:c,sourceLabel:`${t}:${n}`,workspaceLabel:`workspace:${n}`});return{path:e,remotePath:n,localPath:a,source:t,sourceSize:s.length,workspaceSize:c.length,changed:l.changed,binary:l.binary,patch:l.text}}async readSourceBuffer(e,t,n){return t==="mirror"?Vu.promises.readFile(n.toLocalPath(e)):(await(await this.getApiClient()).getFileContent(e)).buffer}};function qF(r){if(r.sourceBuffer.equals(r.workspaceBuffer))return{changed:!1,binary:$c(r.sourceBuffer)||$c(r.workspaceBuffer),text:""};if($c(r.sourceBuffer)||$c(r.workspaceBuffer))return{changed:!0,binary:!0,text:[`diff --succapp ${r.sourceLabel} ${r.workspaceLabel}`,`Binary files ${r.sourceLabel} and ${r.workspaceLabel} differ`,""].join(`
|
|
69
|
-
`)};let e=
|
|
70
|
-
`)}function HF(r,e,t){let n=[];for(let o of t){let i=zF(r,e,o),a=n.at(-1);if(a&&i.oldStart<=a.oldEnd&&i.newStart<=a.newEnd){a.oldEnd=Math.max(a.oldEnd,i.oldEnd),a.newEnd=Math.max(a.newEnd,i.newEnd),a.patches.push(o);continue}n.push(i)}return n}function zF(r,e,t){let n=Math.max(0,t.buffer1.offset-qc),o=Math.max(0,t.buffer2.offset-qc);return{oldStart:n,oldEnd:Math.min(r.length,t.buffer1.offset+t.buffer1.length+qc),newStart:o,newEnd:Math.min(e.length,t.buffer2.offset+t.buffer2.length+qc),patches:[t]}}function KF(r,e){let t=[`@@ -${Uv(r.oldStart,r.oldEnd-r.oldStart)} +${Uv(r.newStart,r.newEnd-r.newStart)} @@`],n=r.oldStart;for(let o of r.patches){for(let i=n;i<o.buffer1.offset;i++)t.push(` ${e[i]}`);t.push(...o.buffer1.chunk.map(i=>`-${i}`)),t.push(...o.buffer2.chunk.map(i=>`+${i}`)),n=o.buffer1.offset+o.buffer1.length}for(let o=n;o<r.oldEnd;o++)t.push(` ${e[o]}`);return t}function Uv(r,e){return e===0?`${r}`:e===1?`${r+1}`:`${r+1},${e}`}function jv(r){let e=r.toString("utf8");if(e.length===0)return[];let t=e.split(VF);return t.at(-1)===""&&t.pop(),t}function $c(r){return r.includes(0)}it();var zc=class extends Dt{async execute(){let e=await this.resolveRemotePath(this.options.path,"server-backed"),n=await(await this.getApiClient()).getFileHistory(e,{limit:this.options.limit});return{path:this.options.path,remotePath:e,histories:n}}};it();var Kc=class extends Dt{async execute(){return(await this.getApiClient()).getProjects()}};Ar();q();G();var Bv=["missing-baseline"];Ar();q();G();$();var qu=50,Xr=T("sync.repair.missing-baseline"),Gc=class{checkId="missing-baseline";async run(e){(e.task??ht.INSTANCE).throwIfAborted(),Xr.info("missing-baseline check start: mode={0} targets={1}",e.mode,this.formatPaths(e.targetRemotePaths));let n=await this.detectMissingBaselineIssues(e);if(Xr.info("missing-baseline check result: issues={0} projects={1}",n.length,this.formatIssuePaths(n)),e.mode==="fsck"||n.length===0)return{issues:n,repaired:[],unresolved:[]};let o=await this.listServerProjectNames(e),{evaluatedIssues:i,repairableIssues:a,unresolved:s}=this.evaluateRepairability(n,o);Xr.info("missing-baseline repair plan: repairable={0} unresolved={1} repairableProjects={2} unresolvedProjects={3}",a.length,s.length,this.formatIssuePaths(a),this.formatIssuePaths(s));let c=[],l=[];if(a.length>0){await this.fetchMissingBaselines(e,a);let p=await this.detectMissingBaselineIssues(e);({repaired:c,unresolved:l}=this.evaluateRepairResult(a,p))}return Xr.info("missing-baseline repair result: repaired={0} unresolved={1} repairedProjects={2} unresolvedProjects={3}",c.length,s.length+l.length,this.formatIssuePaths(c),this.formatIssuePaths([...s,...l])),{issues:i,repaired:c,unresolved:[...s,...l]}}async detectMissingBaselineIssues(e){let t=await e.workspaceRuntime.listWorkspaceProjects(),n=new Set(await e.workspaceRuntime.listBaselineProjects(e.workspaceRuntime.activeServerUrl)),o=this.resolveTargetProjectNames(e);return Xr.info("missing-baseline project lists: workspaceProjects={0} baselineProjects={1} targetProjects={2}",this.formatProjectNames(t),this.formatProjectNames([...n]),o?this.formatProjectNames([...o]):"<all>"),t.filter(i=>!o||o.has(i)).filter(i=>!n.has(i)).map(i=>this.createMissingBaselineIssue(i))}resolveTargetProjectNames(e){if(!e.targetRemotePaths||e.targetRemotePaths.length===0)return;let t=e.targetRemotePaths.map(n=>this.getProjectName(n)).filter(n=>!!n);return new Set(t)}getProjectName(e){return We(e)?.replace(/^\//,"")}createMissingBaselineIssue(e){let t=Tt(e);return{checkId:this.checkId,strategy:"fetch-baseline",repairable:!0,remotePaths:[t],message:h("workspace.repair.baseline.missing",t),details:{projectName:e,reason:"baselineProjectMissing"}}}async listServerProjectNames(e){let n=await(await e.workspaceRuntime.requireServerClient(e.workspaceRuntime.activeServerUrl)).getProjects();return Xr.info("missing-baseline server projects loaded: count={0} projects={1}",n.length,this.formatProjectNames(n.map(o=>o.name))),new Set(n.map(o=>o.name))}canRepairIssue(e,t){let n=this.getSingleProjectName(e);return!!n&&t.has(n)}evaluateRepairability(e,t){let n=[],o=[],i=[];for(let a of e)if(this.canRepairIssue(a,t))n.push(a),o.push(a);else{let s=this.createServerMissingIssue(a);n.push(s),i.push(s)}return{evaluatedIssues:n,repairableIssues:o,unresolved:i}}createServerMissingIssue(e){let t=this.getSingleProjectName(e);return{...e,repairable:!1,message:h("workspace.repair.baseline.invisible",e.remotePaths.join(", ")),details:{...e.details,projectName:t??"",reason:"serverProjectMissing"}}}evaluateRepairResult(e,t){let n=new Set(t.map(a=>this.getSingleProjectName(a)).filter(a=>!!a)),o=[],i=[];for(let a of e){let s=this.getSingleProjectName(a);s&&!n.has(s)?o.push(a):i.push(this.createBaselineStillMissingIssue(a))}return{repaired:o,unresolved:i}}createBaselineStillMissingIssue(e){return{...e,repairable:!1,message:h("workspace.repair.baseline.mirrorMissing",e.remotePaths.join(", ")),details:{...e.details,reason:"baselineStillMissingAfterFetch"}}}async fetchMissingBaselines(e,t){let n=t.map(o=>this.getSingleProjectName(o)).filter(o=>!!o);if(n.length===0){Xr.info("missing-baseline fetch skipped: no repairable project names");return}Xr.info("missing-baseline fetch start: projects={0}",this.formatProjectNames(n)),await new Fn(e.workspaceRuntime,{projectNames:n,forceRefresh:!0,task:e.task}).execute(),Xr.info("missing-baseline fetch done: projects={0}",this.formatProjectNames(n))}getSingleProjectName(e){let t=e.remotePaths[0];return t?this.getProjectName(t):void 0}formatIssuePaths(e){return this.formatPaths(e.flatMap(t=>t.remotePaths))}formatProjectNames(e){return this.formatPaths(e.map(t=>Tt(t)))}formatPaths(e){if(!e||e.length===0)return"<none>";let t=e.slice(0,qu),n=e.length>qu?` ...(+${e.length-qu})`:"";return t.join(",")+n}};var Jc=class{tasks=new Map;constructor(){this.register(new Gc)}getTask(e){return this.tasks.get(e)}register(e){this.tasks.set(e.checkId,e)}};var ga=T("sync.repair.workspace"),si=class{constructor(e){this.options=e}registry=new Jc;async run(){let e=this.options.task??ht.INSTANCE,t=this.resolveChecks(),n=[];ga.info("workspace repair run start: mode={0} checks={1} workspace={2} server={3}",this.options.mode,t.join(","),this.options.workspaceRuntime.root,this.options.workspaceRuntime.activeServerUrl);for(let i of t){e.throwIfAborted(),ga.info("workspace repair check start: check={0}",i);let a=this.registry.getTask(i);if(a){let s=await a.run({...this.options,task:e});n.push(s),ga.info("workspace repair check done: check={0} issues={1} repaired={2} unresolved={3}",i,s.issues.length,s.repaired.length,s.unresolved.length)}else{let s=this.createUnsupportedCheckIssue(i);n.push({issues:[s],repaired:[],unresolved:this.options.mode==="repair"?[s]:[]}),ga.warn("workspace repair check skipped: check={0} reason=notImplemented",i)}}let o=this.createReport(n);return ga.info("workspace repair run done: mode={0} issues={1} repaired={2} unresolved={3}",this.options.mode,o.issues.length,o.repaired.length,o.unresolved.length),o}resolveChecks(){return this.options.checks&&this.options.checks.length>0?this.options.checks:Bv}createUnsupportedCheckIssue(e){return{checkId:e,strategy:"none",repairable:!1,remotePaths:[],message:h("workspace.repair.check.notImpl",e),details:{checkId:e}}}createReport(e){return{workspaceRootPath:this.options.workspaceRuntime.root,serverUrl:this.options.workspaceRuntime.activeServerUrl,issues:e.flatMap(t=>t.issues),repaired:e.flatMap(t=>t.repaired),unresolved:e.flatMap(t=>t.unresolved)}}};var Yc=class{constructor(e){this.options=e}execute(){return new si(this.options).run()}};var nr=(o=>(o.config="config",o.sync="sync",o.inodeCache="inode-cache",o.init="init",o))(nr||{}),ci=Object.values(nr),ya=0;function zu(r,e){return new Hu(r,e)}var $u=class{constructor(e,t){this.context=e;this.activeServerUrl=t}get root(){return this.context.root}get isConnected(){return this.context.isConnected}get eventBus(){return this.context.eventBus}get lockManager(){return this.context.lockManager}get lockWait(){return this.context.lockWait}get config(){return this.context.config}ensureConfigLoaded(){return this.context.ensureConfigLoaded()}async ensureActiveServerReady(){return this.activeServerUrl?this.activeServerUrl:this.context.ensureActiveServerReady()}startIdeRuntime(){return this.context.startIdeRuntime()}waitInitialized(){return this.context.waitInitialized()}addServer(e){return this.context.addServer(e)}verifyServerReachable(e){return this.context.verifyServerReachable(e)}removeServer(e){return this.context.removeServer(e)}changeServerUrl(e,t,n){return this.context.changeServerUrl(e,t,n)}switchActiveServer(e){return this.context.switchActiveServer(e)}listWorkspaceProjects(){return this.context.listWorkspaceProjects()}listBaselineProjects(e){return this.context.listBaselineProjects(e)}getMetaProjectLocalPath(e){return this.context.getMetaProjectLocalPath(e)}getMetaFileLocalPath(e){return this.context.getMetaFileLocalPath(e)}countWorkspaceFiles(e,t){return this.context.countWorkspaceFiles(e,t)}checkWorkspaceSettings(){return this.context.checkWorkspaceSettings()}initializeWorkspaceSettings(e){return this.context.initializeWorkspaceSettings(e)}connect(e,t){return this.context.connect(e,t)}disconnect(){this.context.disconnect()}requireClient(){return this.context.requireServerClient()}requireServerClient(e){return this.context.requireServerClient(e)}resolveRemoteFilePath(e){return this.context.resolveRemoteFilePath(e)}getMirrorRoot(e=this.activeServerUrl){return this.context.getMirrorRoot(e)}getMetadataVersionInfoByPath(e){return this.context.getMetadataVersionInfoByPath(e)}createSyncService(){return zu(this)}getMetadataVersionInfos(){return this.context.getMetadataVersionInfos()}getMetadataVersionInfo(e){return this.context.getMetadataVersionInfo(e)}getSyncChanges(){return this.context.getSyncChanges()}getSyncSummary(){return this.context.getSyncSummary()}refreshSyncStatus(e){return this.context.refreshSyncStatus(e)}refreshSyncStatusState(e){return this.context.refreshSyncStatusState(e)}clearSyncStatusTargets(e){this.context.clearSyncStatusTargets(e)}notifyLocalProjectsChanged(){this.context.notifyLocalProjectsChanged?.()}applySyncOperationResult(e,t){this.context.applySyncOperationResult(e,t)}consumeFileChanges(e,t){return this.context.consumeFileChanges(e,t)}clearSyncStatus(){this.context.clearSyncStatus()}readTargetStatusSnapshot(e){return this.context.readTargetStatusSnapshot(e)}notifySyncStatusChanged(){this.context.notifySyncStatusChanged()}notifySyncStatusRefreshing(e,t){this.context.notifySyncStatusRefreshing(e,t)}isGitIgnored(e){return this.context.isGitIgnored(e)}dispose(){}};function tt(r,e){return new $u(r,e)}var Hu=class{constructor(e,t){this.context=e;this.agentSource=t?.agentSource??po().source}agentSource;get config(){return{root:this.context.root}}async status(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return new wc(t,e).execute()}async clone(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("clone",e.task,n=>new Tc(t,{...e,task:n}).execute())}async pull(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("pull",e.task,n=>new Ic(t,{...e,task:n}).execute())}async push(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("push",e.task,n=>new _c(t,{...e,task:n}).execute())}async upgradeMetadata(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("upgradeMetadata",e.task,n=>new aa(t,{...e,task:n}).execute())}async reset(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("reset",e.task,n=>new Wc(t,{...e,task:n}).execute())}async restoreLocalChange(e){await this.context.ensureConfigLoaded();let t=tt(this.context,this.context.activeServerUrl);return this.withWriteLock("restoreLocalChange",e.task,n=>new Uc(t,{...e,task:n}).execute())}async listMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=tt(this.context,this.context.activeServerUrl);return new fa(t,e).execute()}async clearMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=tt(this.context,this.context.activeServerUrl);return this.withWriteLock("merge-backup clear",e.task,n=>new jc(t,{...e,task:n}).execute())}async removeProject(e){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("removeProject",e.task,n=>new Bc(t,{...e,task:n}).execute())}async fsckWorkspace(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return new si({...e,mode:"fsck",workspaceRuntime:t}).run()}async repairWorkspace(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("repairWorkspace",e.task,n=>new Yc({...e,mode:"repair",workspaceRuntime:t,task:n}).execute(),["config","sync"])}async listWorkspaceProjects(){return await this.context.ensureConfigLoaded(),tt(this.context,this.context.activeServerUrl).listWorkspaceProjects()}async listBaselineProjects(){await this.context.ensureConfigLoaded();let e=tt(this.context,this.context.activeServerUrl);return e.listBaselineProjects(e.activeServerUrl)}async lsRemote(){let e=tt(this.context,await this.context.ensureActiveServerReady());return new Kc(e,{}).execute()}async show(e){let t=tt(this.context,await this.context.ensureActiveServerReady());return new Vc(t,e).execute()}async history(e){let t=tt(this.context,await this.context.ensureActiveServerReady());return new zc(t,e).execute()}async diff(e){let t=tt(this.context,await this.context.ensureActiveServerReady());return new Hc(t,e).execute()}localToMetaPath(e){return kr(this.context.root,e)}isTrackedFile(e){return this.localToMetaPath(e)!==void 0}async withWriteLock(e,t,n,o=["sync"]){let i=t&&t!==ht.INSTANCE?t:new go;return this.context.lockManager.withLock({scopes:o,command:e,source:this.agentSource,wait:this.context.lockWait},async a=>(i.setAbortSignal(qh(i.getAbortSignal(),a)),n(i)))}};uu();var Gu=b(require("fs")),lo=b(require("path"));G();var Dn=class{disposables=[];_disposed=!1;get disposed(){return this._disposed}add(e){return this.disposables.push(e),e}dispose(){if(!this._disposed){this._disposed=!0;for(let e of this.disposables.splice(0))e.dispose()}}};D();J();ne();ia();var Ku=T("workspace.config"),GF=".succapp/config.json",Vv="reloadConfigAfterFileChange";function Ca(){return{version:2,servers:[],activeServerUrl:""}}function JF(r,e,t){let n=Se(e),o=Se(t);if(o===n)throw new E("err.workspace.sameServerUrl",{server:o});let i=r.find(a=>!Qe(a,n)&&Qe(a,o));if(i)throw new E("err.workspace.serverAlreadyExists",{duplicatedServer:i,server:o});return o}var Xc=class{constructor(e,t,n){this.workspaceRoot=e;this.eventBus=t;if(this.configPath=lo.join(e,".succapp","config.json"),t&&n){let o=this.disposables.add(n.createFileWatcher(e,GF));this.disposables.add(o.onFileChanged(i=>{this.isConfigFilePath(i.filePath)&&Do(this,Vv,50,async()=>{await this.reloadAfterFileChange().catch(a=>{Ku.warn(`reload workspace config after file change failed: ${this.configPath}`,a)})})}))}}disposables=new Dn;data=null;loaded=!1;configPath;get path(){return this.configPath}get(){return this.data??void 0}async load(){return Ur(this,"load",()=>this.doLoad())}async ensureLoaded(){this.loaded||await this.load()}async reloadIfChanged(){return await Ur(this,"reload",()=>this.doReloadIfChanged())===!0}async doReloadIfChanged(e=!1){let t=this.data!==null,n=fo(this.get()),o=await this.readConfigData(!e,e);if(o===void 0&&e){this.loaded=!0;return}this.data=o,this.loaded=!0;let i=t!==(this.data!==null)||!ar(n??null,this.get()??null);return i&&this.fireConfigChanged(),i}async doLoad(){this.data=await this.readConfigData(),this.loaded=!0}async readConfigData(e=!0,t=!1){try{let n=await Hf(this.configPath,{attempts:t?3:1,delayMs:50,ignoreParseError:e});return n?this.normalizeLoadedData(n):void 0}catch(n){if(F(n))return null;let o=n instanceof Error?n.message:String(n);e?Ku.warn(".succapp/config.json is corrupted, ignoring",o):Ku.debug(".succapp/config.json is not ready, will retry",o);return}}normalizeLoadedData(e){if(Array.isArray(e.servers)&&typeof e.activeServerUrl=="string"){let t=[];for(let s of e.servers){let c=Se(s);t.some(l=>Qe(l,c))||t.push(c)}let n=e.activeServerUrl?Se(e.activeServerUrl):"",o=n?t.find(s=>Qe(s,n)):void 0,i={version:e.version??2,servers:t,activeServerUrl:o??t[0]??""},a=oa(e.serverVersion);return a&&(i.serverVersion=a),i}return Ca()}async save(){if(!this.data)return;let e=lo.dirname(this.configPath);await Gu.promises.mkdir(e,{recursive:!0}),await Gu.promises.writeFile(this.configPath,JSON.stringify(this.data,null,2),"utf-8"),this.loaded=!0}async mutateAndSave(e){let t=this.data!==null,n=fo(this.get()),o=this.data?fo(this.data):this.data;e();try{await this.save()}catch(i){throw this.data=o,i}(t!==(this.data!==null)||!ar(n??null,this.get()??null))&&this.fireConfigChanged()}async initialize(e){let t=Se(e);await this.mutateAndSave(()=>{this.data={version:2,servers:[t],activeServerUrl:t}})}async ensureFile(){return await this.ensureLoaded(),this.data===null&&await this.mutateAndSave(()=>{this.data=Ca()}),this.configPath}getServers(){return this.data?.servers??[]}getActiveServerUrl(){return this.data?.activeServerUrl??""}getServerVersion(){return this.data?.serverVersion}async setServerVersion(e){await this.ensureLoaded();let t=oa(e);!t||this.data?.serverVersion===t||await this.mutateAndSave(()=>{let n=this.data??Ca();n.serverVersion=t,this.data=n})}hasServer(e){return!!this.resolveServerUrl(e)}resolveServerUrl(e){let t=Se(e);return this.getServers().find(n=>Qe(n,t))}validateServerUrlChange(e,t){return JF(this.getServers(),e,t)}async addServer(e){await this.ensureLoaded();let t=Se(e);await this.mutateAndSave(()=>{let n=this.data??Ca();n.servers=n.servers??[];let o=n.servers.find(i=>Qe(i,t));o||n.servers.push(t),n.activeServerUrl=o??t,this.data=n})}async removeServer(e){if(await this.ensureLoaded(),!this.data)return;let t=Se(e);await this.mutateAndSave(()=>{let n=this.data;n.servers=n.servers.filter(o=>!Qe(o,t)),Qe(n.activeServerUrl,t)&&(n.activeServerUrl=n.servers[0]??"")})}async changeServerUrl(e,t){await this.ensureLoaded();let n=this.data;if(!n)throw new Error(`server not configured: ${e}`);let o=this.resolveServerUrl(e);if(!o)throw new Error(`server not configured: ${e}`);let i=this.validateServerUrlChange(o,t);return await this.mutateAndSave(()=>{n.servers=n.servers.map(a=>Qe(a,o)?i:a),Qe(n.activeServerUrl,o)&&(n.activeServerUrl=i),this.data=n}),i}async setActiveServerUrl(e){await this.ensureLoaded();let t=Se(e);await this.mutateAndSave(()=>{let n=this.data??Ca();n.servers=n.servers??[];let o=n.servers.find(i=>Qe(i,t));o||n.servers.push(t),n.activeServerUrl=o??t,this.data=n})}get root(){return this.workspaceRoot}dispose(){Io(this,Vv),this.disposables.dispose()}fireConfigChanged(){this.eventBus?.fire(new $e("workspace.config.changed",{root:this.workspaceRoot},this))}async reloadAfterFileChange(){await Ur(this,"reload",()=>this.doReloadIfChanged(!0))===void 0&&await this.reloadIfChanged()}isConfigFilePath(e){return lo.resolve(e)===lo.resolve(this.configPath)}};D();G();q();Ar();Zo();na();G();var qv=T("sync.auto"),$v="autoPush",Qc=class{constructor(e,t,n){this.workspaceRoot=e;this.callbacks=n;this.disposables.push(t.on("workspace.file.changed",o=>{o.payload.root===this.workspaceRoot&&yt.autoPush&&this.scheduleAutoPush()}))}autoPullTimer;disposables=[];scheduleAutoPush(){yt.autoPush&&Do(this,$v,yt.autoPushDelay,async()=>{yt.autoPush&&await this.callbacks.onAutoPush().catch(e=>qv.error("auto push failed",e))})}cancelPendingAutoPush(){Io(this,$v)}refreshAutoSync(){yt.autoPush||this.cancelPendingAutoPush(),this.startAutoPull()}startAutoPull(){this.stopAutoPull(),yt.autoPull&&(this.autoPullTimer=setInterval(()=>{this.callbacks.onAutoPull().catch(e=>qv.error("auto pull failed",e))},yt.autoPullInterval*1e3))}stopAutoPull(){this.autoPullTimer&&(clearInterval(this.autoPullTimer),this.autoPullTimer=void 0)}dispose(){this.stopAutoPull(),this.cancelPendingAutoPush(),this.disposables.forEach(e=>e.dispose())}};To();$();Je();gr();G();var Zc=class{constructor(e,t,n=()=>{}){this.id=e;this.target=t;this.publishResult=n;this.scope=t.kind==="all"?"all":"targets"}kind="clear";source="clear";scope;toResult(){return{kind:"clear",target:this.target}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};var Sa=b(require("path"));function YF(r){let e="";for(let t=0;t<r.length;t++){let n=r[t];n==="*"&&r[t+1]==="*"?r[t+2]==="/"?(e+="(?:.*/)?",t+=2):(e+=".*",t++):n==="*"?e+="[^/]*":n==="?"?e+="[^/]":".+^$()|{}[]\\".includes(n)?e+="\\"+n:e+=n}return new RegExp("^"+e+"$")}var Hv=new Map;function zv(r){let e=Hv.get(r);return e||(e=YF(r),Hv.set(r,e)),e}function el(r,e){if(!e||e.length===0)return!1;let t=r.replace(/^\/+/,"");return e.some(n=>zv(n).test(t)||zv(n).test("/"+t))}Je();$();gr();var or=class{constructor(e,t){this.id=e;this.fileChanges=[...t.fileChanges],this.workspace=t.workspace,this.bulk=!!t.bulk,this.getChanges=t.getChanges,this.publishResult=t.publish??(()=>{})}kind="fileWatch";source="fileWatch";scope="targets";cancelled=!1;fileChanges;workspace;bulk;getChanges;publishResult;abort(){this.cancelled=!0}isCancelled(){return this.cancelled}merge(e){this.cancelled||e.length===0||this.fileChanges.push(...e)}mergeTask(e){this.merge(e.fileChanges),this.bulk=this.bulk||e.bulk}async run(){let e=this.workspace;if(this.cancelled||!e||this.fileChanges.length===0)return{kind:"noop"};if(this.bulk)return this.requestBulkLocalRefresh();let t=this.createFileChangeStatusTargets(e);if(this.cancelled||t.length===0)return{kind:"noop"};if(t.some(i=>i.isDotMeta))return this.requestLocalRefresh(t);let n=await Promise.all(t.map(i=>e.readTargetStatusSnapshot(i)));if(this.cancelled)return{kind:"noop"};if(this.shouldRefreshAllForFolderRenameRelatedTargets(t,n))return this.requestLocalRefresh(t);let o=this.createFastFileWatchChanges(e,n);return!o||this.shouldRefreshAllForFolderSubtreeBoundary(o)?this.requestLocalRefresh(t):{kind:"replaceTargets",targetRemotePaths:[...new Set(t.map(i=>i.remotePath))],changes:o,mode:"fileWatch"}}publish(e){if(!this.cancelled)return this.publishResult(e)}createFileChangeStatusTargets(e){let t=new Map;for(let n of this.fileChanges){let o=this.resolveFileChangeStatusTarget(e,n);o&&t.set(`${o.type}\0${o.remotePath}`,o)}return[...t.values()]}requestLocalRefresh(e){return{kind:"requestRefresh",scope:"local",source:"manual",rootRemotePath:this.createRefreshRootRemotePath(e)}}requestBulkLocalRefresh(){return{kind:"requestRefresh",scope:"local",source:"manual",rootRemotePath:void 0}}createRefreshRootRemotePath(e){let t=[...e.map(o=>o.remotePath),...this.getChanges().filter(at).flatMap(o=>[o.remotePath,o.oldRemotePath])].filter(o=>!!o),n=Wg(t);return n==="/"?void 0:n}resolveFileChangeStatusTarget(e,t){let n=kr(e.root,t.filePath);if(!n)return;let o=Sa.posix.basename(n)===Y,i=o?Sa.posix.dirname(n):n;return{filePath:o?Sa.dirname(t.filePath):t.filePath,remotePath:i,type:t.type,isDotMeta:o}}shouldRefreshAllForFolderRenameRelatedTargets(e,t){let n=this.getChanges().filter(i=>i.type==="renamed"&&!!i.isFolder&&!!i.oldRemotePath);if(n.length===0)return!1;let o=new Map(t.map(i=>[i.remotePath,i]));for(let i of e){let a=o.get(i.remotePath),s=a?.workspace.kind==="folder"||a?.mirror.kind==="folder";for(let c of n){let l=c.oldRemotePath;if(s&&(i.remotePath!==c.remotePath&&Q(c.remotePath,i.remotePath)||i.remotePath!==l&&Q(l,i.remotePath))||i.remotePath!==l&&Q(i.remotePath,l))return!0;if(!(i.remotePath===c.remotePath||!Q(i.remotePath,c.remotePath))&&(i.type==="deleted"||a?.workspace.fileId!==void 0||a?.mirror.fileId!==void 0))return!0}}return!1}createFastFileWatchChanges(e,t){if(t.some(s=>s.workspace.kind==="unknown"||s.mirror.kind==="unknown"))return;let n=this.createFastRenameChanges(t);if(!n)return;let o=new Set;for(let s of n)o.add(s.remotePath),s.oldRemotePath&&o.add(s.oldRemotePath);let i=[...n];for(let s of t){if(o.has(s.remotePath))continue;if(this.shouldRefreshForUnpairedIdentitySnapshot(s))return;let c=this.createFastChange(s);c&&i.push(c)}let a=new Map(t.map(s=>[s.remotePath,s]));return i.filter(s=>{if(s.type!=="added")return!0;let c=a.get(s.remotePath);return!c||c.workspace.fileId||c.mirror.fileId?!0:!e.isGitIgnored(s.remotePath)&&!el(s.remotePath.replace(/^\//,""),yt.syncIgnore)})}shouldRefreshForUnpairedIdentitySnapshot(e){return e.workspace.kind!=="missing"&&e.mirror.kind==="missing"&&!e.workspace.fileId&&!!e.workspace.identity||e.workspace.kind==="missing"&&e.mirror.kind!=="missing"&&!e.mirror.fileId&&!!e.mirror.identity}shouldRefreshAllForFolderSubtreeBoundary(e){return e.some(t=>t.isFolder&&(t.type==="added"||t.type==="deleted"))}createFastRenameChanges(e){let t=e.filter(a=>a.workspace.kind==="missing"&&a.mirror.kind!=="missing"),n=e.filter(a=>a.workspace.kind!=="missing"&&a.mirror.kind==="missing");if(t.length===0||n.length===0)return[];if(t.length!==n.length)return;let o=[],i=new Set;for(let a of t){let s=a.mirror.identity;if(!s)return;let c=n.filter(p=>!i.has(p)&&p.workspace.identity===s);if(c.length!==1||a.mirror.kind==="folder"||c[0].workspace.kind==="folder")return;let l=c[0];i.add(l),o.push({path:this.toRelativePath(l.remotePath),remotePath:l.remotePath,...this.getFileIdProperty(l.workspace.fileId??a.mirror.fileId),oldPath:this.toRelativePath(a.remotePath),oldRemotePath:a.remotePath,type:"renamed",isFolder:!1,contentChanged:l.contentChanged,metaChanged:l.metaChanged})}if(!(i.size!==n.length||o.length!==t.length))return o}createFastChange(e){let t=e.workspace.kind,n=e.mirror.kind;if(!(t==="missing"&&n==="missing")){if(t!=="missing"&&n==="missing")return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.workspace.fileId),type:"added",isFolder:t==="folder"};if(t==="missing"&&n!=="missing")return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.mirror.fileId),type:"deleted",isFolder:n==="folder"};if(!(!e.contentChanged&&!e.metaChanged))return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.workspace.fileId??e.mirror.fileId),type:"modified",isFolder:t==="folder",contentChanged:e.contentChanged,metaChanged:e.metaChanged}}}getFileIdProperty(e){return e===void 0?{}:{fileId:e}}toRelativePath(e){return e.replace(/^\//,"")}};gr();var tl=class{constructor(e,t,n=[],o=()=>{}){this.id=e;this.handledChange=t;this.remainingChanges=n;this.publishResult=o}kind="operationResult";source="operation";scope="targets";toResult(){return{kind:"replaceTargets",targetRemotePaths:ca(this.handledChange),changes:this.remainingChanges}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};var rl=class{constructor(e,t){this.id=e;this.source=t.source,this.targetRemotePaths=[...t.targetRemotePaths],this.changes=[...t.changes],this.mode=t.mode,this.publishResult=t.publish??(()=>{})}kind="replaceTargets";source;scope="targets";targetRemotePaths;changes;mode;publishResult;toResult(){return{kind:"replaceTargets",targetRemotePaths:this.targetRemotePaths,changes:this.changes,mode:this.mode}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};Ar();G();D();J();var wa=b(require("fs")),al=b(require("path"));Je();$();D();G();pn();Ar();Zo();na();qt();var va=b(require("fs")),ka=b(require("path")),Fk=require("crypto"),Mk=b(Pk()),Dk=b(Ek());Je();vt();$();D();pn();G();function ol(r){return{dev:r.dev,ino:r.ino,size:r.size,mtimeMs:r.mtimeMs,ctimeMs:r.ctimeMs}}var om="sha256",bk=".succapp/cache/inode-index.json",IM=.6,Tk=2,AM=1e4,OM=20,xk=5*1024*1024,_M=80,LM=200,NM=8,WM=4,UM=64,jM=2,BM=500,VM=1e4,Oe=T("sync.detector.workspace"),il=class{constructor(e){this.options=e;this.workspaceCachePath=ka.join(e.workspaceRoot,bk),this.mirrorCachePath=ka.join(e.remoteMirrorRoot,bk)}workspaceInodeCache=new Map;mirrorInodeCache=new Map;workspacePathToInode=new Map;mirrorPathToInode=new Map;workspaceCachePath;mirrorCachePath;workspaceInodeCacheDirty=!1;mirrorInodeCacheDirty=!1;workspaceFullScanInodeKeys=new Set;mirrorFullScanInodeKeys=new Set;workspaceFullScanRecorded=!1;mirrorFullScanRecorded=!1;projectCaches=new Map;pendingDigests=new Map;pendingSimilarity=new Map;async findInodeFileCandidates(e,t){let n=this.createOperationCache();await this.prefetchStats([...e,...t],n);let o=await this.groupFilesByInode(t,n),i=[];for(let a of e){let s=await this.getStatCached(a,n),c=s?this.getInodeKey(s):void 0;if(c)for(let l of o.get(c)??[])a.metaPath!==l.metaPath&&i.push({localEntry:a,remoteEntry:l,score:1,reason:"sameInode"})}return i}async findEqualFileCandidates(e,t){let n=this.createOperationCache();await this.prefetchStats([...e,...t],n);let o=await this.groupFilesBySize(t,n),i=[];for(let a of e){let s=await this.getStatCached(a,n);if(!s)continue;let c=o.get(s.size);if(!c)continue;let l;for(let p of c){let m=await this.compareByStat(a,p,n);if(m==="different")continue;if(m==="same"){i.push({localEntry:a,remoteEntry:p,score:1,reason:"sameContentHash"});continue}if(l??=await this.getContentDigest(a,n),!l)continue;(await this.getContentDigest(p,n))?.value===l.value&&i.push({localEntry:a,remoteEntry:p,score:1,reason:"sameContentHash"})}}return i}async findSimilarFileCandidates(e,t){let n={fileCandidateBuckets:0,fileComparableRefs:0,fileEstimatedPairs:0,fileComparedPairs:0,fileTopByLeft:0,fileTopByRight:0};if(e.length===0||t.length===0)return{candidates:[],stats:n};let o=this.createOperationCache(!0),i=this.groupSimilarityRightFiles(t),a=this.collectComparableEntries(e,i),s=this.estimateSimilarityPairs(e,i);n.fileCandidateBuckets=i.size,n.fileComparableRefs=a.size,n.fileEstimatedPairs=s;let c=Date.now();Oe.debug("collect file similarity start localCandidates=%d remoteCandidates=%d buckets=%d comparableRefs=%d estimatedPairs=%d",e.length,t.length,i.size,a.size,s),await this.prefetchStats([...a.values()],o);let l=new Map,p=new Map,m=this.createSimilarityPairCursor(e,i),g=0,d=Array.from({length:Math.min(WM,Math.max(1,a.size))},async()=>{for(;;){let y=m();if(!y)return;let[C,v]=y;g++,n.fileComparedPairs++;let P=await this.compareSimilarityPair(C,v,o);P.score>=IM&&(this.addTopSimilarityCandidate(l,this.getEntryKey(P.left),P,Tk),this.addTopSimilarityCandidate(p,this.getEntryKey(P.right),P,Tk))}});await Promise.all(d),n.fileTopByLeft=l.size,n.fileTopByRight=p.size,Oe.debug("collect file similarity compared elapsed=%dms comparedPairs=%d topByLeft=%d topByRight=%d",Date.now()-c,g,l.size,p.size);let f=new Set;for(let y of[l,p])for(let C of y.values())for(let v of C)f.add(v);return{candidates:[...f].sort((y,C)=>C.score-y.score).map(y=>({localEntry:y.left,remoteEntry:y.right,score:y.score,reason:y.score===1?"sameContentHash":"contentSimilarity"})),stats:n}}getEntryLocalPath(e){return te(e.side==="workspace"?this.options.workspaceRoot:this.options.remoteMirrorRoot,e.metaPath)}getEntryKey(e){return e.side+"\0"+e.metaPath}async areEntriesEqual(e,t){let n=this.createOperationCache(),o=await this.compareByStat(e,t,n);if(o!=="unknown")return o;let[i,a]=await Promise.all([this.getContentDigest(e,n),this.getContentDigest(t,n)]);return!i||!a?"unknown":i.value===a.value?"same":"different"}async compareByStat(e,t,n){let[o,i]=await Promise.all([this.getStatCached(e,n),this.getStatCached(t,n)]);return!o||!i?"unknown":o.size!==i.size?"different":this.isSameInode(o,i)?"same":"unknown"}isSameInode(e,t){return!!e.dev&&!!t.dev&&!!e.ino&&!!t.ino&&e.dev===t.dev&&e.ino===t.ino}async getStatCached(e,t){if(e.stat)return e.stat;let n=this.getEntryKey(e),o=t.stats.get(n);if(o)return o;let i=this.readStat(e);return t.stats.set(n,i),i}async readStat(e){try{let t=await va.promises.stat(this.getEntryLocalPath(e));return t.isFile()?ol(t):void 0}catch(t){if(!Ei(t))throw t;Oe.debug("skip unreadable file stat: %s",this.getEntryLocalPath(e),t);return}}getContentDigest(e,t){let n=this.getEntryKey(e),o=t.digests.get(n);if(o)return o;let i=this.getContentDigestWithContext(e,t);return t.digests.set(n,i),i}async getContentDigestWithContext(e,t){let n=await this.getStatCached(e,t);if(!n)return;let o=this.getEntryKey(e),i=this.pendingDigests.get(o);if(i)return i;let a=this.getContentDigestNow(e,n,t).finally(()=>this.pendingDigests.delete(o));return this.pendingDigests.set(o,a),a}async getContentDigestNow(e,t,n){let o=this.getInodeKey(t);if(o){let a=this.getInodeCache(e.side).get(o);if(this.isMatchingInodeCacheEntry(a,t))return{algorithm:om,value:a.sha256,size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs,updatedAt:Date.now()}}try{let i={algorithm:om,value:await this.computeContentHash(e,t,n),size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs,updatedAt:Date.now()};if(o){let a=this.getInodeCache(e.side).get(o);this.rememberInodeCacheEntry(e,o,{sha256:i.value,tlsh:this.getReusableCachedTlsh(a,i.value),size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs})}return i}catch(i){if(!Ei(i))throw i;Oe.debug("skip unreadable file digest: %s",this.getEntryLocalPath(e),i);return}}isMatchingInodeCacheEntry(e,t){return this.isCompleteInodeCacheEntry(e)&&this.isMatchingInodeCacheStat(e,t)}isMatchingInodeCacheStat(e,t){return e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs}isCompleteInodeCacheEntry(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.sha256=="string"&&t.sha256.length>0&&Number.isFinite(t.size)&&Number.isFinite(t.mtimeMs)&&Number.isFinite(t.ctimeMs)}getCachedTlsh(e){return typeof e.tlsh=="string"&&e.tlsh.length>0?e.tlsh:void 0}getReusableCachedTlsh(e,t){return e?.sha256===t?this.getCachedTlsh(e):void 0}async computeContentHash(e,t,n){let o=await this.getSmallFileContent(e,t,n);return o?o.contentHash:sc(this.getEntryLocalPath(e))}async compareSimilarityPair(e,t,n){if(await this.compareByStat(e,t,n)==="same")return{left:e,right:t,score:1};let[i,a]=await Promise.all([this.getContentDigest(e,n),this.getContentDigest(t,n)]);if(i&&a&&i.value===a.value)return{left:e,right:t,score:1};let[s,c]=await Promise.all([this.getTlshProfile(e,n),this.getTlshProfile(t,n)]);if(!s||!c)return{left:e,right:t,score:0};let l=s.digest.calculateDifference(c.digest,!0);return l>_M?{left:e,right:t,score:0}:{left:e,right:t,score:Math.max(0,1-l/LM)}}getTlshProfile(e,t){let n=this.getEntryKey(e),o=t.profiles.get(n);if(o)return o;let i=this.getTlshProfileWithContext(e,t);return t.profiles.set(n,i),i}async getTlshProfileWithContext(e,t){let n=await this.getSimilarityDigest(e,t);if(!n)return;let o=this.buildTlshProfile(n);if(o)return o;Oe.debug("repair invalid TLSH profile side=%s path=%s",e.side,e.metaPath);let i=await this.getStatCached(e,t);i&&await this.invalidateStat(e,i),await this.invalidateSimilarityDigest(e,t);let a=await this.getSimilarityDigest(e,t);if(a)return this.buildTlshProfile(a)}buildTlshProfile(e){try{let t=new Dk.default().withHash(e).build();return t.calculateDifference(t,!0),{digest:t}}catch(t){Oe.debug("skip invalid TLSH digest: %s",e,t);return}}async getSimilarityDigest(e,t){let n=await this.getStatCached(e,t);if(!n)return;let o=await this.getContentDigest(e,t);if(!o||o.size>xk)return;let i=We(e.metaPath)??"/",a=i+"\0"+o.value,s=this.pendingSimilarity.get(a);if(s)return s;let c=this.getSimilarityDigestNow(i,e,o,n,t).finally(()=>this.pendingSimilarity.delete(a));return this.pendingSimilarity.set(a,c),c}async getSimilarityDigestNow(e,t,n,o,i){let a=await this.withProjectCache(e,async l=>l.similarity.get(n.value));if(a)return a.updatedAt=Date.now(),a.unsupported?void 0:a.tlsh;let s=this.getInodeKey(o);if(s){let p=this.getInodeCache(t.side).get(s);if(this.isMatchingInodeCacheEntry(p,o)){let m=this.getCachedTlsh(p);if(m){if(this.buildTlshProfile(m))return await this.withProjectCache(e,async g=>{g.similarity.set(n.value,{tlsh:m,size:n.size,updatedAt:Date.now()}),this.pruneState(g)}),m;Oe.debug("drop invalid inode cached TLSH side=%s path=%s inode=%s",t.side,t.metaPath,s),this.invalidateStat(t,o)}}}let c=await this.computeTlshHash(t,o,i);if(await this.withProjectCache(e,async l=>{l.similarity.set(n.value,{tlsh:c.hash,unsupported:!c.hash,size:n.size,updatedAt:Date.now()}),this.pruneState(l)}),s){let l=this.getInodeCache(t.side).get(s);this.rememberInodeCacheEntry(t,s,{sha256:n.value,tlsh:c.hash,size:o.size,mtimeMs:o.mtimeMs,ctimeMs:o.ctimeMs})}return c.hash}async computeTlshHash(e,t,n){let o=await this.getSmallFileContent(e,t,n);if(o)return o.similarity;let i=await this.readTlshBuffer(e);return i?this.computeTlshHashFromBuffer(i):{cacheUnsupported:!1}}computeTlshHashFromBuffer(e){try{return{hash:(0,Mk.default)(e.toString("latin1")),cacheUnsupported:!1}}catch(t){let n=t instanceof Error?t.message:String(t);return Oe.debug("skip TLSH digest because hash library rejected buffer: %s",n),{cacheUnsupported:!1}}}async readTlshBuffer(e){try{return await va.promises.readFile(this.getEntryLocalPath(e))}catch(t){if(!Ei(t))throw t;Oe.debug("skip tlsh file read: %s",e.metaPath,t);return}}getSmallFileContent(e,t,n){if(!n.preferSmallFileBuffer||t.size>xk)return Promise.resolve(void 0);let o=this.getEntryKey(e),i=n.smallFiles.get(o);if(i)return i;let a=this.readSmallFileContent(e);return n.smallFiles.set(o,a),this.pruneOperationSmallFiles(n),a}pruneOperationSmallFiles(e){for(;e.smallFiles.size>UM;){let t=e.smallFiles.keys().next().value;if(t===void 0)return;e.smallFiles.delete(t)}}async readSmallFileContent(e){try{let t=await va.promises.readFile(this.getEntryLocalPath(e));return{contentHash:(0,Fk.createHash)(om).update(t).digest("hex"),similarity:this.computeTlshHashFromBuffer(t)}}catch(t){if(!Ei(t))throw t;Oe.debug("skip unreadable small file: %s",this.getEntryLocalPath(e),t);return}}createOperationCache(e=!1){return{preferSmallFileBuffer:e,stats:new Map,digests:new Map,profiles:new Map,smallFiles:new Map}}async prefetchStats(e,t){let n=new ze(NM);await Promise.all(e.map(o=>n.addTask(async()=>{await this.getStatCached(o,t)})))}async groupFilesBySize(e,t){let n=new Map;for(let o of e){let i=await this.getStatCached(o,t);if(!i)continue;let a=n.get(i.size);a||(a=[],n.set(i.size,a)),a.push(o)}return n}async groupFilesByInode(e,t){let n=new Map;for(let o of e){let i=await this.getStatCached(o,t),a=i?this.getInodeKey(i):void 0;if(!a)continue;let s=n.get(a);s||(s=[],n.set(a,s)),s.push(o)}return n}getInodeKey(e){return this.getInodeKeyString(e.dev,e.ino)}groupSimilarityRightFiles(e){let t=new Map;for(let n of e){let o=this.getSimilarityBucketKey(n),i=t.get(o);i?i.push(n):t.set(o,[n])}return t}getSimilarityBucketKey(e){return ka.posix.extname(e.metaPath).toLowerCase()}collectComparableEntries(e,t){let n=new Map,o=new Set;for(let i of e){let a=this.getSimilarityBucketKey(i),s=t.get(a);if(s?.length&&(n.set(this.getEntryKey(i),i),!o.has(a))){o.add(a);for(let c of s)n.set(this.getEntryKey(c),c)}}return n}createSimilarityPairCursor(e,t){let n=0,o=0,i,a=[];return()=>{for(;;){if(i&&o<a.length){let s=a[o++];if(i.metaPath!==s.metaPath)return[i,s];continue}if(n>=e.length)return;i=e[n++],o=0,a=t.get(this.getSimilarityBucketKey(i))??[]}}}addTopSimilarityCandidate(e,t,n,o){let i=e.get(t)??[];i.push(n),e.set(t,this.sortSimilarityCandidates(i).slice(0,o))}sortSimilarityCandidates(e){return[...e].sort((t,n)=>{let o=n.score-t.score;return o!==0?o:this.getEntryKey(t.left).localeCompare(this.getEntryKey(n.left))})}async withProjectCache(e,t){let n=this.pinProjectCache(e);try{return await t(n)}finally{n.activeCount--,this.enforceProjectCacheLimit()}}pinProjectCache(e){let t=this.projectCaches.get(e);return t||(t={lastAccessAt:Date.now(),activeCount:0,similarity:new Map},this.projectCaches.set(e,t)),t.lastAccessAt=Date.now(),t.activeCount++,this.enforceProjectCacheLimit(),t}enforceProjectCacheLimit(){for(;this.projectCaches.size>OM;)if(!this.evictOldestProjectCache())return}evictOldestProjectCache(){let e=[...this.projectCaches.entries()].filter(([,o])=>o.activeCount===0).sort((o,i)=>o[1].lastAccessAt-i[1].lastAccessAt)[0];if(!e)return!1;let[t,n]=e;return n.activeCount>0?!1:(this.projectCaches.delete(t),!0)}pruneState(e){return this.pruneMap(e.similarity,AM)}pruneMap(e,t){if(e.size<=t)return!1;let n=[...e.entries()].sort((o,i)=>i[1].updatedAt-o[1].updatedAt).slice(0,t);e.clear();for(let[o,i]of n)e.set(o,i);return!0}getInodeCache(e){return e==="workspace"?this.workspaceInodeCache:this.mirrorInodeCache}getPathToInode(e){return e==="workspace"?this.workspacePathToInode:this.mirrorPathToInode}markInodeCacheDirty(e){e==="workspace"?this.workspaceInodeCacheDirty=!0:this.mirrorInodeCacheDirty=!0}clearInodeCacheDirty(){this.workspaceInodeCacheDirty=!1,this.mirrorInodeCacheDirty=!1}rememberInodeCacheEntry(e,t,n){this.getInodeCache(e.side).set(t,n),this.getPathToInode(e.side).set(this.getEntryKey(e),t),this.markInodeCacheDirty(e.side)}async load(){await Promise.all([this.loadInodeCacheSide(this.workspaceCachePath,this.workspaceInodeCache,"workspace"),this.loadInodeCacheSide(this.mirrorCachePath,this.mirrorInodeCache,"mirror")])}recordFullScanEntries(e,t){this.workspaceFullScanInodeKeys.clear(),this.mirrorFullScanInodeKeys.clear(),this.collectFullScanInodeKeys(e,this.workspaceFullScanInodeKeys),this.collectFullScanInodeKeys(t,this.mirrorFullScanInodeKeys),this.workspaceFullScanRecorded=!0,this.mirrorFullScanRecorded=!0}collectFullScanInodeKeys(e,t){for(let n of e){if(n.isFolder||!n.stat)continue;let o=this.getInodeKey(n.stat);o&&t.add(o)}}async loadInodeCacheSide(e,t,n){try{let o=await this.readInodeCacheFile(e);if(!o)return;for(let[i,a]of Object.entries(o.files))t.set(i,a)}catch(o){Oe.debug("skip %s inode cache: %s",n,e,o)}}async readInodeCacheFile(e){let t=await _r(e);if(!(!t||t.version!==1))return t}async flush(){if(Oe.debug("workspace change detector flush inode caches called"),await Promise.all([this.pruneStaleEntries("workspace",this.workspacePathToInode,this.workspaceInodeCache,this.options.workspaceRoot),this.pruneStaleEntries("mirror",this.mirrorPathToInode,this.mirrorInodeCache,this.options.remoteMirrorRoot)]),this.pruneFullScanEntries("workspace",this.workspaceInodeCache,this.workspaceFullScanInodeKeys,this.workspaceFullScanRecorded),this.pruneFullScanEntries("mirror",this.mirrorInodeCache,this.mirrorFullScanInodeKeys,this.mirrorFullScanRecorded),!this.workspaceInodeCacheDirty&&!this.mirrorInodeCacheDirty)return;Oe.debug("flush inode caches workspaceDirty=%s workspaceEntries=%d mirrorDirty=%s mirrorEntries=%d",this.workspaceInodeCacheDirty,this.workspaceInodeCache.size,this.mirrorInodeCacheDirty,this.mirrorInodeCache.size),await this.withInodeCacheWriteLock(async()=>{let t=[];this.workspaceInodeCacheDirty&&t.push(this.writeInodeCache(this.workspaceCachePath,this.workspaceInodeCache)),this.mirrorInodeCacheDirty&&t.push(this.writeInodeCache(this.mirrorCachePath,this.mirrorInodeCache)),await Promise.all(t)})?(this.clearInodeCacheDirty(),Oe.debug("flushed inode caches workspaceEntries=%d mirrorEntries=%d",this.workspaceInodeCache.size,this.mirrorInodeCache.size)):Oe.debug("skipped inode cache flush workspaceDirty=%s workspaceEntries=%d mirrorDirty=%s mirrorEntries=%d",this.workspaceInodeCacheDirty,this.workspaceInodeCache.size,this.mirrorInodeCacheDirty,this.mirrorInodeCache.size)}async withInodeCacheWriteLock(e){let t=this.options.lockManager;if(!t||t.isHeldLocally("inode-cache"))return await e(),!0;try{return await t.withLock({scopes:["inode-cache"],command:"flush-inode-cache",wait:1},async()=>e()),!0}catch(n){return n instanceof jn||n instanceof Ir?(Oe.debug("skip inode cache flush because cache lock is unavailable",n),!1):(Oe.warn("skip inode cache flush because cache lock failed unexpectedly",n),!1)}}async pruneStaleEntries(e,t,n,o){if(t.size===0)return;let i=[];for(let[a,s]of t){let c=a.indexOf("\0"),l=a.slice(c+1),p=te(o,l);try{let m=await va.promises.stat(p);if(!m.isFile()){i.push(a);continue}let g=this.getInodeKeyString(m.dev,m.ino);(!g||g!==s)&&i.push(a)}catch(m){if(F(m)){Oe.debug("mark stale inode cache entry: %s",a),i.push(a);continue}throw m}}if(i.length!==0){for(let a of i){let s=t.get(a);s&&n.delete(s),t.delete(a)}i.length>0&&this.markInodeCacheDirty(e)}}pruneFullScanEntries(e,t,n,o){if(!o)return;let i=0;for(let[s,c]of t)this.isCompleteInodeCacheEntry(c)||(t.delete(s),i++);if(i>0&&(this.markInodeCacheDirty(e),Oe.debug("inode cache invalid cleanup side=%s removed=%d after=%d",e,i,t.size)),!this.shouldCleanupFullScanEntries(t,n))return;let a=0;for(let s of t.keys())n.has(s)||(t.delete(s),a++);a>0&&(this.markInodeCacheDirty(e),Oe.debug("inode cache cleanup side=%s actual=%d removed=%d after=%d",e,n.size,a,t.size))}shouldCleanupFullScanEntries(e,t){let n=Math.max(t.size*jM,t.size+BM,VM);return e.size>n}getInodeKeyString(e,t){if(!(!e||!t))return`${e}:${t}`}invalidateStat(e,t){let n=this.getInodeKey(t);if(!n)return;let o=this.getInodeCache(e.side),i=this.getPathToInode(e.side);o.delete(n)&&this.markInodeCacheDirty(e.side),i.delete(this.getEntryKey(e))}async invalidateSimilarityDigest(e,t){let n=await this.getContentDigest(e,t);if(!n)return;let o=We(e.metaPath)??"/";await this.withProjectCache(o,async i=>{i.similarity.delete(n.value)&&Oe.debug("drop project similarity cache project=%s path=%s sha256=%s",o,e.metaPath,n.value.slice(0,12))})}async writeInodeCache(e,t){let n={version:1,files:Object.fromEntries(t)};try{await cn(e,JSON.stringify(n))}catch(o){Oe.debug("failed to write inode cache: %s",e,o)}}estimateSimilarityPairs(e,t){let n=0;for(let o of e)for(let i of t.get(this.getSimilarityBucketKey(o))??[])o.metaPath!==i.metaPath&&n++;return n}};var qM=.6,$M=.15,HM=8,zM=8,KM=8,Ik=4096,GM=8,JM=64,YM=20,fe=T("sync.detector.workspace"),sl=class{detectRuns=0;durationMs=0;records=0;filteredRecords=0;resultChanges=0;suspectMetaPaths=0;changes=0;matchedLocal=0;matchedRemote=0;matchedLocalFiles=0;matchedRemoteFiles=0;availableLocalFiles=0;availableRemoteFiles=0;pendingSamePath=0;local={entries:0,files:0,folders:0,trackedFiles:0,trackedFolders:0};remote={entries:0,files:0,folders:0,trackedFiles:0,trackedFolders:0};stages={};similarity={fileLocalCandidates:0,fileRemoteCandidates:0,fileCandidateBuckets:0,fileComparableRefs:0,fileEstimatedPairs:0,fileComparedPairs:0,pendingSamePathPairs:0,skippedPendingSamePathLocalCandidates:0,skippedPendingSamePathRemoteCandidates:0,fileTopByLeft:0,fileTopByRight:0,stableFileCandidates:0,acceptedFileCandidates:0};startRun(){return this.detectRuns++,Date.now()}finishRun(e){this.durationMs+=Date.now()-e}createSnapshot(){return{detectRuns:this.detectRuns,durationMs:this.durationMs,records:this.records,filteredRecords:this.filteredRecords,resultChanges:this.resultChanges,suspectMetaPaths:this.suspectMetaPaths,changes:this.changes,matchedLocal:this.matchedLocal,matchedRemote:this.matchedRemote,matchedLocalFiles:this.matchedLocalFiles,matchedRemoteFiles:this.matchedRemoteFiles,availableLocalFiles:this.availableLocalFiles,availableRemoteFiles:this.availableRemoteFiles,pendingSamePath:this.pendingSamePath,local:{...this.local},remote:{...this.remote},stages:Object.fromEntries(Object.entries(this.stages).map(([e,t])=>[e,{...t}])),similarity:{...this.similarity}}}describeForLog(){return`
|
|
71
|
-
`+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}},cl=class{constructor(e){this.options=e;let t=e.workspace;this.workspaceRoot=t.root,this.remoteMirrorRoot=t.getMirrorRoot(),this.task=e.task??ht.INSTANCE,this.mirror=new Mt(this.remoteMirrorRoot),this.workspaceStore=new rr(this.workspaceRoot,this.mirror),this.fingerprint=new il({workspaceRoot:this.workspaceRoot,remoteMirrorRoot:this.remoteMirrorRoot,lockManager:t.lockManager}),this.rootRemotePath=this.normalizeRootRemotePath(e.rootRemotePath)}task;fingerprint;rootRemotePath;mirror;workspaceStore;workspaceRoot;remoteMirrorRoot;diagnostics=new sl;currentMatchPhase="idle";mirrorProjectPresence=new Map;reportedProblemKeys=new Set;reportedProblemEventCount=0;baselineProblems=[];throwIfAborted(){this.options.signal?.throwIfAborted(),this.task.throwIfAborted()}normalizeRootRemotePath(e){if(!e)return"";let t=Pe(e);return t==="/"?"":t}async detect(){let e=Date.now();this.resetProblemReports();let t=this.diagnostics.startRun();fe.debug(`detect start workspace=${this.workspaceRoot} mirror=${this.remoteMirrorRoot}`),this.throwIfAborted();let n=Date.now();await this.fingerprint.load(),fe.debug(`load inode cache done elapsed=${Date.now()-n}ms`);let o=new Set;n=Date.now();let i=await this.detectRecords(o);this.diagnostics.records=i.length,this.diagnostics.suspectMetaPaths=o.size,fe.debug(`detect records done elapsed=${Date.now()-n}ms records=${i.length} suspectMeta=${o.size}`),this.throwIfAborted(),n=Date.now(),await this.fingerprint.flush(),fe.debug(`flush inode cache done elapsed=${Date.now()-n}ms`);let a=i.filter(c=>c.kind!=="localOnly"||!this.isIgnoredUntrackedLocal(c));this.diagnostics.filteredRecords=a.length;let s=new Array(a.length);return n=Date.now(),await Mg(a.map((c,l)=>({change:c,index:l})),KM,async c=>{s[c.index]=await this.toSyncFileChange(c.change)}),this.diagnostics.resultChanges=s.length,fe.debug(`create sync changes done elapsed=${Date.now()-n}ms filteredRecords=${a.length} changes=${s.length}`),this.finishRunDiagnostics(t),fe.debug(`detect diagnostics ${this.diagnostics.describeForLog()}`),fe.debug(`detect done elapsed=${Date.now()-e}ms changes=${s.length} suspectMeta=${o.size}`),{changes:s,suspectMetaPaths:[...o].sort(),baselineProblems:[...this.baselineProblems]}}resetProblemReports(){this.reportedProblemKeys.clear(),this.reportedProblemEventCount=0,this.baselineProblems.length=0}getDiagnostics(e={}){let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}finishRunDiagnostics(e){this.diagnostics.finishRun(e)}resetDiagnostics(){this.diagnostics=new sl}async withMatchPhase(e,t){let n=this.currentMatchPhase;this.currentMatchPhase=e;try{return await t()}finally{this.currentMatchPhase=n}}withMatchPhaseSync(e,t){let n=this.currentMatchPhase;this.currentMatchPhase=e;try{return t()}finally{this.currentMatchPhase=n}}async flush(){await this.fingerprint.flush()}async detectRecords(e){let t=Date.now(),[n,o]=await Promise.all([this.scan(this.workspaceRoot,"workspace",e),this.scan(this.remoteMirrorRoot,"mirror",new Set)]);this.rootRemotePath===""&&this.fingerprint.recordFullScanEntries(n.values(),o.values()),fe.debug(`scan both sides done elapsed=${Date.now()-t}ms localEntries=${this.diagnostics.local.entries} localFiles=${this.diagnostics.local.files} localFolders=${this.diagnostics.local.folders} localTrackedFiles=${this.diagnostics.local.trackedFiles} localTrackedFolders=${this.diagnostics.local.trackedFolders} remoteEntries=${this.diagnostics.remote.entries} remoteFiles=${this.diagnostics.remote.files} remoteFolders=${this.diagnostics.remote.folders} remoteTrackedFiles=${this.diagnostics.remote.trackedFiles} remoteTrackedFolders=${this.diagnostics.remote.trackedFolders} suspectMeta=${e.size}`),this.throwIfAborted();let i=new Map,a=this.filterOutIgnoredMirrorResidues(o,this.indexIgnoredMirrorResidues(n,o)),s=this.rootRemotePath===""?this.collectBaselineMissingLocalEntries(n,a):[],l={local:this.filterOutBaselineMissingLocalEntries(n,s),remote:a,matchedLocal:new Set,matchedRemote:new Set,changes:[]},p=Date.now(),m=this.getPipelineStats();await this.withMatchPhase("matchById",()=>this.matchById(l,i)),this.logDetectPhase("matchById",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),await this.withMatchPhase("matchByPath",()=>this.matchByPath(l,i)),this.logDetectPhase("matchByPath",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByInode",()=>this.matchRenamesByInode(l,i)),this.logDetectPhase("matchRenamesByInode",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByHash",()=>this.matchRenamesByHash(l,i)),this.logDetectPhase("matchRenamesByHash",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),await this.withMatchPhase("matchRenamesBySimilarity",()=>this.matchRenamesBySimilarity(l,i)),this.logDetectPhase("matchRenamesBySimilarity",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),this.withMatchPhaseSync("flushPendingSamePathChanges",()=>this.flushPendingSamePathChanges(l,i)),this.logDetectPhase("flushPendingSamePathChanges",p,m),p=Date.now(),await this.addBaselineMissingLocalChanges(l,s);for(let g of l.local.values())if(!l.matchedLocal.has(g.metaPath)){if(g.isFolder&&!g.hasMeta||!await this.isScannedEntryStillPresent(this.workspaceRoot,g))continue;this.addChange(l,{kind:"localOnly",metaPath:g.metaPath,localPath:g.metaPath,fileId:g.meta?.id,isFolder:g.isFolder,hasMeta:g.hasMeta})}for(let g of l.remote.values())if(!l.matchedRemote.has(g.metaPath)){if(!g.hasMeta)continue;this.addChange(l,{kind:"remoteOnly",metaPath:g.metaPath,remotePath:g.metaPath,fileId:g.meta?.id,isFolder:g.isFolder,hasMeta:g.hasMeta})}return fe.debug(`collect unmatched entries done elapsed=${Date.now()-p}ms changes=${this.diagnostics.changes} matchedLocal=${this.diagnostics.matchedLocal} matchedRemote=${this.diagnostics.matchedRemote} availableLocalFiles=${this.diagnostics.availableLocalFiles} availableRemoteFiles=${this.diagnostics.availableRemoteFiles} totalLocalFiles=${this.diagnostics.local.files} totalRemoteFiles=${this.diagnostics.remote.files}`),l.changes}logDetectPhase(e,t,n){let o=this.getPipelineStats(),i={...o,elapsedMs:Date.now()-t,changeDelta:o.changes-n.changes,matchedLocalDelta:o.matchedLocal-n.matchedLocal,matchedRemoteDelta:o.matchedRemote-n.matchedRemote,matchedLocalFileDelta:o.matchedLocalFiles-n.matchedLocalFiles,matchedRemoteFileDelta:o.matchedRemoteFiles-n.matchedRemoteFiles,pendingDelta:o.pendingSamePath-n.pendingSamePath};this.diagnostics.stages[e]=i,fe.debug(`${e} done elapsed=${i.elapsedMs}ms inputLocalFiles=${n.availableLocalFiles} inputRemoteFiles=${n.availableRemoteFiles} matchedLocalFileDelta=${i.matchedLocalFileDelta} matchedRemoteFileDelta=${i.matchedRemoteFileDelta} changeDelta=${i.changeDelta} pendingDelta=${i.pendingDelta} remainingLocalFiles=${i.availableLocalFiles} remainingRemoteFiles=${i.availableRemoteFiles}`)}getPipelineStats(){return{changes:this.diagnostics.changes,matchedLocal:this.diagnostics.matchedLocal,matchedRemote:this.diagnostics.matchedRemote,matchedLocalFiles:this.diagnostics.matchedLocalFiles,matchedRemoteFiles:this.diagnostics.matchedRemoteFiles,availableLocalFiles:this.diagnostics.availableLocalFiles,availableRemoteFiles:this.diagnostics.availableRemoteFiles,pendingSamePath:this.diagnostics.pendingSamePath}}async isScannedEntryStillPresent(e,t){let n=te(e,t.metaPath);try{let o=await wa.promises.stat(n);return t.isFolder?o.isDirectory():o.isFile()}catch(o){if(F(o))return fe.debug(`skip disappeared sync scan entry: ${n}`),!1;throw o}}async scan(e,t,n){let o=Date.now();fe.debug(`scan start side=${t} root=${e} scope=${this.rootRemotePath||"/"}`);let i=new Map;if(!await this.shouldScanScopedProject(t))return fe.warn(`skip sync scan scope because baseline project is missing: side=${t} scope=${this.rootRemotePath}`),i;let a=new ze(HM),s=new ze(zM),c=0,l=!1;return await new Promise((p,m)=>{let g=()=>{c--,c===0&&p()},d=y=>{l||(l=!0,a.cancel(y),s.cancel(y),m(y))},f=(y,C=!1,v=!1)=>{this.throwIfAborted(),c++,a.addTask(async()=>{await this.walk(e,t,y,i,n,f,s,C,v)}).then(g,d)};f(this.rootRemotePath)}),await Promise.all([a.waitAll(),s.waitAll()]),fe.debug(`scan done side=${t} elapsed=${Date.now()-o}ms entries=${this.getSideStats(t).entries} files=${this.getSideStats(t).files} folders=${this.getSideStats(t).folders} trackedFiles=${this.getSideStats(t).trackedFiles} trackedFolders=${this.getSideStats(t).trackedFolders} suspectMeta=${n.size}`),new Map([...i].sort(([p],[m])=>p.localeCompare(m)))}async shouldScanScopedProject(e){if(this.rootRemotePath==="")return!0;let t=We(this.rootRemotePath);return t?this.shouldScanProject(e,t):!0}async shouldScanTopLevelProject(e,t){return this.shouldScanProject(e,t)}async shouldScanProject(e,t){return await this.isCloneInProgressProject(t)?(fe.debug(`skip clone in-progress project during workspace scan: side=${e} project=${t}`),!1):e==="workspace"?this.hasMirrorProject(t):!0}async isCloneInProgressProject(e){return(await Promise.all([this.workspaceStore.isCloneInProgress(e),this.mirror.isCloneInProgress(e)])).some(Boolean)}async hasMirrorProject(e){let t=this.mirrorProjectPresence.get(e);if(t!==void 0)return t;let n=te(this.remoteMirrorRoot,e),o=!1;try{o=(await wa.promises.stat(n)).isDirectory()}catch(i){if(!F(i))throw i}return this.mirrorProjectPresence.set(e,o),o||this.reportProblemOnce(new Ri(this.workspaceRoot,"sync.missingBaselineProject",{projectPaths:[e],count:1})),o}reportProblemOnce(e){let t=[e.code,...e.projectPaths??[]].join("|");if(!this.reportedProblemKeys.has(t)){if(this.reportedProblemEventCount>=GM){fe.warn(`skip workspace problem event because limit reached: ${e.message}`);return}this.reportedProblemKeys.add(t),this.reportedProblemEventCount++,this.baselineProblems.push(e),fe.warn(`workspace problem reported code=${e.code} root=${e.root} projects=${e.projectPaths?.join(",")??""} count=${e.count??""}`),this.options.workspace.eventBus.fireAsync(new $e("workspace.problem.reported",e,this)).catch(n=>fe.warn(`workspace problem event listener failed: ${n instanceof Error?n.message:String(n)}`))}}async walk(e,t,n,o,i,a,s,c,l){let p;try{p=await wa.promises.readdir(te(e,n||"/"),{withFileTypes:!0})}catch(f){if(F(f)){fe.debug(`skip unreadable sync scan directory: ${e}:${n||"/"}`);return}throw f}let m=await this.readDirectoryDotMeta(e,n,i),g=new Set,d=[];for(let f of p){if(this.throwIfAborted(),n===""&&f.name.startsWith(".")||f.name===Y)continue;g.add(f.name);let y=n+"/"+f.name,C=te(e,y);if(!(n===""&&!f.isDirectory())){if(n===""&&f.isDirectory()&&await this.isCloneInProgressProject(y)){fe.debug(`skip clone in-progress root project during workspace scan: side=${t} project=${y}`);continue}if(n===""&&f.isDirectory()&&m.dotMeta[f.name]&&!await this.shouldScanTopLevelProject(t,y)){fe.warn(`skip sync scan project without opposite side baseline: side=${t} project=${y}`);continue}if(n===""&&!m.dotMeta[f.name]){a(y,!0,t==="mirror");continue}if(f.isDirectory()){let v=m.dotMeta[f.name];if(!v){if(c){a(y,!0,l||t==="mirror");continue}i.add(m.metaPath)}this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!0,meta:v,hasMeta:!!v,underUnregisteredMirrorDirectory:l}),a(y,!1,l||t==="mirror"&&!v)}else f.isFile()&&d.push(s.addTask(async()=>{let v;try{v=await wa.promises.stat(C)}catch(P){if(F(P)){fe.debug(`skip unreadable sync scan file stat: ${C}`);return}throw P}c&&!m.dotMeta[f.name]||(this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!1,contentSize:v?.size,stat:v?ol(v):void 0,meta:m.dotMeta[f.name],hasMeta:!!m.dotMeta[f.name],underUnregisteredMirrorDirectory:l}),m.dotMeta[f.name]||i.add(m.metaPath))}))}}await Promise.all(d);for(let f of Object.keys(m.dotMeta))g.has(f)||i.add(m.metaPath)}addSnapshotEntry(e,t){if(e.has(t.metaPath)){e.set(t.metaPath,t);return}e.set(t.metaPath,t);let n=this.getSideStats(t.side);n.entries++,t.isFolder?(n.folders++,t.hasMeta&&n.trackedFolders++):(n.files++,t.hasMeta&&n.trackedFiles++),this.refreshAvailableFileStats()}getSideStats(e){return e==="workspace"?this.diagnostics.local:this.diagnostics.remote}async readDirectoryDotMeta(e,t,n){let o=this.getDotMetaMetaPath(t),i=await zr(e,o);return(!i.exists||!i.readable||i.damaged)&&n.add(o),{metaPath:o,parentPath:t||"/",exists:i.exists,readable:i.readable,damaged:i.damaged,dotMeta:i.dotMeta}}getDotMetaMetaPath(e){return!e||e==="/"?"/"+Y:e+"/"+Y}getAvailableFiles(e,t){return[...e.values()].filter(n=>!n.isFolder&&!t.has(n.metaPath))}isIgnoredUntrackedLocal(e){if(e.hasMeta)return!1;let t=Ne(e.metaPath);return this.options.workspace.isGitIgnored(e.metaPath)||el(t,this.options.ignore??yt.syncIgnore)}async matchById(e,t){let n=this.indexById(e.local),o=this.indexRemoteByIdForWorkspaceRename(e.remote,e.local),i=[];for(let a of n.values()){let s=a.meta?.id;if(!s)continue;let c=o.get(s);if(!(!c||e.matchedRemote.has(c.metaPath))){if(!a.isFolder&&!c.isFolder){i.push({localEntry:a,remoteEntry:c});continue}await this.addComparisonOrPending(e,a,c,t),await this.matchChildrenAfterFolderRename(e,a,c)}}await this.addComparisonsOrPending(e,i,t)}async matchByPath(e,t){let n=[];for(let o of e.local.values()){if(e.matchedLocal.has(o.metaPath))continue;let i=e.remote.get(o.metaPath);if(!(!i||e.matchedRemote.has(i.metaPath))){if(!o.isFolder&&!i.isFolder){n.push({localEntry:o,remoteEntry:i});continue}await this.addComparisonOrPending(e,o,i,t)}}await this.addComparisonsOrPending(e,n,t)}async matchRenamesByInode(e,t){let n=this.pickStableSimilarityCandidates(await this.collectFileInodeCandidates(e));for(let o of n)e.matchedLocal.has(o.localEntry.metaPath)||e.matchedRemote.has(o.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(o,t,n)||await this.addRename(e,o,t)}async matchRenamesByHash(e,t){let n=this.pickStableSimilarityCandidates(await this.collectFolderExactCandidates(e)).sort((i,a)=>i.localEntry.metaPath.length-a.localEntry.metaPath.length);for(let i of n)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(i,t,n)||(await this.addRename(e,i,t),await this.matchChildrenAfterFolderRename(e,i.localEntry,i.remoteEntry));let o=this.pickStableSimilarityCandidates(await this.collectFileEqualCandidates(e));for(let i of o)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(i,t,o)||(await this.addRename(e,i,t),await this.matchChildrenAfterFolderRename(e,i.localEntry,i.remoteEntry))}async matchRenamesBySimilarity(e,t){let n=Date.now(),o=this.pickStableSimilarityCandidates(await this.collectFolderSimilarityCandidates(e));fe.debug(`similarity folder candidates done elapsed=${Date.now()-n}ms candidates=${o.length}`);for(let c of o)e.matchedLocal.has(c.localEntry.metaPath)||e.matchedRemote.has(c.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(c,t,o)||(await this.addRename(e,c,t),await this.matchChildrenAfterFolderRename(e,c.localEntry,c.remoteEntry));n=Date.now();let i=this.pickStableSimilarityCandidates(await this.collectFileSimilarityCandidates(e,t));if(this.diagnostics.similarity.stableFileCandidates=i.length,fe.debug(`similarity file candidates done elapsed=${Date.now()-n}ms candidates=${i.length}`),i.length===0)return;n=Date.now();let a=await this.collectFileEqualCandidates(e);fe.debug(`similarity equal candidates done elapsed=${Date.now()-n}ms candidates=${a.length}`);let s=0;for(let c of i)e.matchedLocal.has(c.localEntry.metaPath)||e.matchedRemote.has(c.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(c,t,i)||this.isSafeFileSimilarityPair(a,c)&&(await this.addRename(e,c,t),s++);fe.debug(`similarity apply file candidates done accepted=${s} changes=${e.changes.length}`),this.diagnostics.similarity.acceptedFileCandidates=s}async collectFileInodeCandidates(e){let{localEntries:t,remoteEntries:n}=this.getContentCandidateFiles(e);return this.fingerprint.findInodeFileCandidates(t,n)}async collectFileEqualCandidates(e){let{localEntries:t,remoteEntries:n}=this.getContentCandidateFiles(e);return this.fingerprint.findEqualFileCandidates(t,n)}async collectFolderExactCandidates(e){let t=[];for(let n of e.local.values())if(!(!n.isFolder||e.matchedLocal.has(n.metaPath)||this.isIgnoredUntrackedLocal(n)))for(let o of e.remote.values())!o.isFolder||e.matchedRemote.has(o.metaPath)||n.metaPath!==o.metaPath&&await this.areFolderSubtreesEqual(e.local,e.remote,n,o)&&t.push({localEntry:n,remoteEntry:o,score:1,reason:"folderContentHash"});return t}async areFolderSubtreesEqual(e,t,n,o){let i=this.getFolderDescendantsByRelativePath(e,n),a=this.getFolderDescendantsByRelativePath(t,o);if(i.size!==a.size)return!1;for(let[s,c]of i){let l=a.get(s);if(!l||c.isFolder!==l.isFolder)return!1;if(c.isFolder)continue;if(await this.fingerprint.areEntriesEqual(c,l)!=="same")return!1}return!0}getFolderDescendantsByRelativePath(e,t){let n=new Map;for(let o of e.values())o.metaPath===t.metaPath||!Q(o.metaPath,t.metaPath)||n.set(o.metaPath.slice(t.metaPath.length+1),o);return n}async collectFileSimilarityCandidates(e,t){let{localEntries:n,remoteEntries:o}=this.getContentCandidateFiles(e),i=0;if(t?.size&&(i=this.estimatePendingSamePathSimilarityPairs(n,o,t),this.diagnostics.similarity.pendingSamePathPairs=i,t.size<2||i>Ik)){let c=n.length,l=o.length;n=n.filter(m=>!t.has(m.metaPath)),o=o.filter(m=>!t.has(m.metaPath)),this.diagnostics.similarity.skippedPendingSamePathLocalCandidates=c-n.length,this.diagnostics.similarity.skippedPendingSamePathRemoteCandidates=l-o.length;let p=t.size<2?"singlePendingSamePath":"pendingPairBudget";fe.debug(`skip pending same-path similarity candidates pendingSamePath=${t.size} pendingPairs=${i} maxPairs=${Ik} skippedLocal=${c-n.length} skippedRemote=${l-o.length}`);for(let m of t.values())this.logFileFlow("skip similarity",{path:m.localEntry.metaPath,remotePath:m.remoteEntry.metaPath,fileId:this.getEntryFileId(m.localEntry,m.remoteEntry),reason:p,pendingPairs:i})}if(this.diagnostics.similarity.fileLocalCandidates=n.length,this.diagnostics.similarity.fileRemoteCandidates=o.length,n.length===0||o.length===0)return[];let{candidates:a,stats:s}=await this.fingerprint.findSimilarFileCandidates(n,o);return Object.assign(this.diagnostics.similarity,s),a}estimatePendingSamePathSimilarityPairs(e,t,n){let o=new Map,i=new Set,a=c=>{let l=this.getSimilarityBucketKey(c),p=o.get(l);return p||(p={leftTotal:0,rightTotal:0,leftPending:0,rightPending:0,samePathPending:0},o.set(l,p)),p};for(let c of e){let l=a(c);l.leftTotal++,n.has(c.metaPath)&&(l.leftPending++,i.add(c.metaPath))}for(let c of t){let l=a(c);l.rightTotal++,n.has(c.metaPath)&&(l.rightPending++,i.has(c.metaPath)&&l.samePathPending++)}let s=0;for(let c of o.values())s+=c.leftPending*c.rightTotal-c.samePathPending+(c.leftTotal-c.leftPending)*c.rightPending;return s}getSimilarityBucketKey(e){return al.posix.extname(e.metaPath).toLowerCase()}async collectFolderSimilarityCandidates(e){let t=[];for(let n of e.local.values())if(!(!n.isFolder||e.matchedLocal.has(n.metaPath)||this.isIgnoredUntrackedLocal(n)))for(let o of e.remote.values()){if(!o.isFolder||e.matchedRemote.has(o.metaPath)||n.metaPath===o.metaPath)continue;let i=await this.getFolderSimilarity(e.local,e.remote,n,o);i>=qM&&t.push({localEntry:n,remoteEntry:o,score:i,reason:"folderSimilarity"})}return t}async getFolderSimilarity(e,t,n,o){let i=this.getFolderFileDescendants(e,n),a=this.getFolderFileDescendants(t,o),s=Math.max(i.length,a.length);if(s===0)return 1;let c=new Map(a.map(d=>[d.metaPath.slice(o.metaPath.length+1),d])),l=new Set,p=0,m=await this.fingerprint.findEqualFileCandidates(i,a),g=new Map;for(let d of m){let f=g.get(d.localEntry.metaPath);f||(f=[],g.set(d.localEntry.metaPath,f)),f.push(d.remoteEntry.metaPath)}for(let d of i){let f=d.metaPath.slice(n.metaPath.length+1),y=c.get(f);if(y){l.add(y.metaPath),p++;continue}for(let C of g.get(d.metaPath)??[])if(!l.has(C)){l.add(C),p++;break}}return p/s}getFolderFileDescendants(e,t){return[...e.values()].filter(n=>!n.isFolder&&n.metaPath!==t.metaPath&&Q(n.metaPath,t.metaPath))}pickStableSimilarityCandidates(e){let t=[];for(let n of e)this.isUniqueBestCandidate(n,e,!0)&&this.isUniqueBestCandidate(n,e,!1)&&t.push(n);return t}isUniqueBestCandidate(e,t,n){let o=t.filter(a=>n?a.localEntry.metaPath===e.localEntry.metaPath:a.remoteEntry.metaPath===e.remoteEntry.metaPath).sort((a,s)=>s.score-a.score);if(o[0]!==e)return!1;let i=o[1];return i?e.score-i.score>=$M:!0}isSafeFileSimilarityPair(e,t){let n=[...e];return n.some(o=>o.localEntry.metaPath===t.localEntry.metaPath&&o.remoteEntry.metaPath===t.remoteEntry.metaPath)||n.push(t),this.pickStableSimilarityCandidates(n).some(o=>o.localEntry.metaPath===t.localEntry.metaPath&&o.remoteEntry.metaPath===t.remoteEntry.metaPath)}isUnsafePendingSamePathRenameSteal(e,t,n){if(!t.has(e.localEntry.metaPath)&&!t.has(e.remoteEntry.metaPath))return!1;let o=!this.hasPendingSamePathSwapCandidate(e,t,n);return o&&this.logFileFlow("reject rename stealing pending same-path",{localPath:e.localEntry.metaPath,remotePath:e.remoteEntry.metaPath,fileId:this.getEntryFileId(e.localEntry,e.remoteEntry),reason:e.reason,score:e.score}),o}hasPendingSamePathSwapCandidate(e,t,n){let o=e.localEntry.metaPath,i=e.remoteEntry.metaPath;return!t.has(o)||!t.has(i)?!1:n.some(a=>a!==e&&a.localEntry.metaPath===i&&a.remoteEntry.metaPath===o&&(a.reason===e.reason||a.score>=1||e.score>=1))}getContentCandidateFiles(e){return this.getContentCandidateFilesFromAvailable(this.getAvailableFiles(e.local,e.matchedLocal).filter(t=>!this.isIgnoredUntrackedLocal(t)),this.getAvailableFiles(e.remote,e.matchedRemote))}getContentCandidateFilesFromAvailable(e,t){return{localEntries:e,remoteEntries:t}}async addRename(e,t,n){let{localEntry:o,remoteEntry:i,score:a,reason:s}=t;if(!this.isAvailableRenamePair(o,i,e.matchedLocal,e.matchedRemote))return;let c=await this.computeContentChanged(o,i);this.markMatched(e,o,i),this.consumePendingSamePathForRename(n,o,i,s,a),this.addChange(e,{kind:"renamed",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),oldMetaPath:i.metaPath,isFolder:o.isFolder,contentChanged:c,metaChanged:!no(o.meta??{},i.meta??{}),confidence:a,reason:s}),this.logFileFlow("accept rename",{localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),reason:s,score:a,contentChanged:c})}isAvailableRenamePair(e,t,n,o){return!n.has(e.metaPath)&&!o.has(t.metaPath)&&e.isFolder===t.isFolder&&e.metaPath!==t.metaPath&&!this.isIgnoredUntrackedLocal(e)}async addComparison(e,t,n){this.applyComparisonOutcome(e,await this.createComparisonOutcome(t,n))}async addComparisonOrPending(e,t,n,o){this.applyComparisonOutcome(e,await this.createComparisonOutcome(t,n),o)}async addComparisonsOrPending(e,t,n){let o=await Promise.all(t.map(i=>this.createComparisonOutcome(i.localEntry,i.remoteEntry)));for(let i of o)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.applyComparisonOutcome(e,i,n)}async createComparisonOutcome(e,t){return{localEntry:e,remoteEntry:t,contentChanged:await this.computeContentChanged(e,t),metaChanged:!no(e.meta??{},t.meta??{})}}applyComparisonOutcome(e,t,n){let{localEntry:o,remoteEntry:i,contentChanged:a,metaChanged:s}=t;if(this.markMatched(e,o,i),o.isFolder!==i.isFolder){this.addChange(e,{kind:"metaIssue",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),isFolder:o.isFolder,reason:"resourceTypeChanged"});return}if(o.metaPath!==i.metaPath){this.addChange(e,{kind:"renamed",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),oldMetaPath:i.metaPath,isFolder:o.isFolder,contentChanged:a,metaChanged:s,confidence:1,reason:"sameId"}),this.logFileFlow("accept rename",{localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),reason:"sameId",score:1,contentChanged:a});return}if(!(!a&&!s)){if(n){this.unmarkMatched(e,o,i),this.addPendingSamePath(n,{localEntry:o,remoteEntry:i,contentChanged:a,metaChanged:s});return}this.addChange(e,{kind:a?"contentDifferent":"metaDifferent",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),isFolder:o.isFolder,contentChanged:a,metaChanged:s})}}flushPendingSamePathChanges(e,t){for(let[n,o]of[...t]){if(e.matchedLocal.has(o.localEntry.metaPath)||e.matchedRemote.has(o.remoteEntry.metaPath)){let i=this.removePendingSamePath(t,n);i&&this.logFileFlow("consume pending same-path",{path:i.localEntry.metaPath,remotePath:i.remoteEntry.metaPath,fileId:this.getEntryFileId(i.localEntry,i.remoteEntry),reason:"alreadyMatchedBeforeFlush"});continue}this.markMatched(e,o.localEntry,o.remoteEntry),this.addChange(e,{kind:o.contentChanged?"contentDifferent":"metaDifferent",metaPath:o.localEntry.metaPath,localPath:o.localEntry.metaPath,remotePath:o.remoteEntry.metaPath,fileId:this.getEntryFileId(o.localEntry,o.remoteEntry),isFolder:o.localEntry.isFolder,contentChanged:o.contentChanged,metaChanged:o.metaChanged}),this.removePendingSamePath(t,n),this.logFileFlow("flush pending same-path",{path:o.localEntry.metaPath,remotePath:o.remoteEntry.metaPath,fileId:this.getEntryFileId(o.localEntry,o.remoteEntry),contentChanged:o.contentChanged,metaChanged:o.metaChanged})}}addChange(e,t){e.changes.push(t),this.diagnostics.changes++}logFileFlow(e,t){let n=Object.entries(t).filter(([,o])=>o!==void 0).map(([o,i])=>`${o}=${String(i)}`).join(" ");fe.debug(`flow ${e} phase=${this.currentMatchPhase} ${n}`)}addPendingSamePath(e,t){e.has(t.localEntry.metaPath)||this.diagnostics.pendingSamePath++,e.set(t.localEntry.metaPath,t),this.logFileFlow("pending same-path",{path:t.localEntry.metaPath,remotePath:t.remoteEntry.metaPath,fileId:this.getEntryFileId(t.localEntry,t.remoteEntry),contentChanged:t.contentChanged,metaChanged:t.metaChanged})}removePendingSamePath(e,t){let n=e.get(t);if(n)return e.delete(t),this.diagnostics.pendingSamePath--,n}consumePendingSamePathForRename(e,t,n,o,i){if(e?.size)for(let a of new Set([t.metaPath,n.metaPath])){let s=this.removePendingSamePath(e,a);s&&this.logFileFlow("consume pending same-path",{path:s.localEntry.metaPath,remotePath:s.remoteEntry.metaPath,fileId:this.getEntryFileId(s.localEntry,s.remoteEntry),reason:o,score:i,matchedLocalPath:t.metaPath,matchedRemotePath:n.metaPath})}}async computeContentChanged(e,t){return e.isFolder||t.isFolder?!1:await this.fingerprint.areEntriesEqual(e,t)!=="same"}markMatched(e,t,n){e.matchedLocal.has(t.metaPath)||(e.matchedLocal.add(t.metaPath),this.diagnostics.matchedLocal++,t.isFolder||this.diagnostics.matchedLocalFiles++),e.matchedRemote.has(n.metaPath)||(e.matchedRemote.add(n.metaPath),this.diagnostics.matchedRemote++,n.isFolder||this.diagnostics.matchedRemoteFiles++),this.refreshAvailableFileStats()}unmarkMatched(e,t,n){e.matchedLocal.delete(t.metaPath)&&(this.diagnostics.matchedLocal--,t.isFolder||this.diagnostics.matchedLocalFiles--),e.matchedRemote.delete(n.metaPath)&&(this.diagnostics.matchedRemote--,n.isFolder||this.diagnostics.matchedRemoteFiles--),this.refreshAvailableFileStats()}refreshAvailableFileStats(){this.diagnostics.availableLocalFiles=this.diagnostics.local.files-this.diagnostics.matchedLocalFiles,this.diagnostics.availableRemoteFiles=this.diagnostics.remote.files-this.diagnostics.matchedRemoteFiles}async matchChildrenAfterFolderRename(e,t,n){!t.isFolder||!n.isFolder||t.metaPath===n.metaPath||(await this.matchChildrenByRelativePath(e,t,n),await this.matchChildrenByContent(e,t,n))}async matchChildrenByRelativePath(e,t,n){for(let o of e.local.values()){if(e.matchedLocal.has(o.metaPath)||!Q(o.metaPath,t.metaPath))continue;let i=o.metaPath.slice(t.metaPath.length+1),a=e.remote.get(n.metaPath+"/"+i);!a||e.matchedRemote.has(a.metaPath)||await this.addComparison(e,o,a)}}async matchChildrenByContent(e,t,n){let{localEntries:o,remoteEntries:i}=this.getContentCandidateFilesFromAvailable(this.getAvailableFolderFiles(e.local,t,e.matchedLocal).filter(s=>!this.isIgnoredUntrackedLocal(s)),this.getAvailableFolderFiles(e.remote,n,e.matchedRemote)),a=this.pickStableSimilarityCandidates(await this.fingerprint.findEqualFileCandidates(o,i));for(let s of a)!Q(s.localEntry.metaPath,t.metaPath)||!Q(s.remoteEntry.metaPath,n.metaPath)||await this.addRename(e,s)}getAvailableFolderFiles(e,t,n){return this.getFolderFileDescendants(e,t).filter(o=>!n.has(o.metaPath))}indexById(e){let t=new Map,n=new Set;for(let o of e.values()){let i=o.meta?.id;if(i){if(t.has(i)){n.add(i);continue}t.set(i,o)}}for(let o of n)t.delete(o);return t}indexRemoteByIdForWorkspaceRename(e,t){let n=new Map;for(let[o,i]of this.groupRemoteEntriesByMetaId(e)){if(i.length===1){n.set(o,i[0]);continue}let a=i.filter(s=>!t.has(s.metaPath));a.length===1&&n.set(o,a[0])}return n}indexIgnoredMirrorResidues(e,t){let n=this.groupRemoteEntriesByMetaId(t),o=this.collectParentsWithTrackedChild(t),i=new Set;for(let a of t.values()){if(!e.has(a.metaPath))continue;if(!a.hasMeta){o.has(al.posix.dirname(a.metaPath))&&i.add(a.metaPath);continue}let s=a.meta?.id;if(!s)continue;let c=n.get(s);!c||c.length<2||(a.underUnregisteredMirrorDirectory||this.hasUnmatchedSibling(c,a.metaPath,e))&&i.add(a.metaPath)}return i}filterOutIgnoredMirrorResidues(e,t){if(t.size===0)return e;let n=new Map;for(let[o,i]of e)t.has(o)||n.set(o,i);return n}filterOutBaselineMissingLocalEntries(e,t){if(t.length===0)return e;let n=new Set(t.map(i=>i.metaPath)),o=new Map;for(let[i,a]of e)n.has(i)||o.set(i,a);return o}async addBaselineMissingLocalChanges(e,t){for(let n of t)n.isFolder&&!n.hasMeta||await this.isScannedEntryStillPresent(this.workspaceRoot,n)&&this.addChange(e,{kind:"localOnly",metaPath:n.metaPath,localPath:n.metaPath,fileId:n.meta?.id,isFolder:n.isFolder,hasMeta:n.hasMeta})}collectBaselineMissingLocalEntries(e,t){let n=new Set,o=new Set;for(let s of t.values()){let c=s.meta?.id;c&&n.add(c);let l=We(s.metaPath);l&&o.add(l)}let i=new Map;for(let s of e.values()){if(!s.hasMeta||t.has(s.metaPath))continue;let c=s.meta?.id;if(!c||n.has(c))continue;let l=We(s.metaPath);if(!l)continue;let p=i.get(l);p?p.push(s):i.set(l,[s])}let a=[];for(let[s,c]of i)if(!(o.has(s)&&c.length<JM)){for(let l of c)l.baselineMissing=!0,a.push(l);this.reportProblemOnce(new Ri(this.workspaceRoot,"sync.incompleteBaselineFiles",{projectPaths:[s],remotePaths:c.slice(0,YM).map(l=>l.metaPath),count:c.length}))}return a}groupRemoteEntriesByMetaId(e){let t=new Map;for(let n of e.values()){let o=n.meta?.id;if(!o)continue;let i=t.get(o);i?i.push(n):t.set(o,[n])}return t}collectParentsWithTrackedChild(e){let t=new Set;for(let n of e.values())n.hasMeta&&t.add(al.posix.dirname(n.metaPath));return t}hasUnmatchedSibling(e,t,n){for(let o of e)if(o.metaPath!==t&&!n.has(o.metaPath))return!0;return!1}getEntryFileId(e,t){return t.meta?.id??e.meta?.id}async toSyncFileChange(e){return{path:Ne(e.localPath??e.remotePath??e.metaPath),remotePath:e.localPath??e.remotePath??e.metaPath,...e.fileId!==void 0?{fileId:e.fileId}:{},oldPath:e.oldMetaPath?Ne(e.oldMetaPath):void 0,oldRemotePath:e.oldMetaPath,type:this.toScmChangeType(e.kind),isFolder:e.isFolder,contentChanged:e.contentChanged,metaChanged:e.metaChanged}}toScmChangeType(e){return e==="localOnly"?"added":e==="remoteOnly"?"deleted":e==="contentDifferent"||e==="metaDifferent"?"modified":e==="renamed"?"renamed":"conflict"}};var XM=T("workspace.sync-status.refresh"),Fr=class{constructor(e,t={}){this.id=e;this.scope=t.scope??"both",this.source=t.source??"manual",this.task=t.task??ht.INSTANCE,this.forceRefresh=t.forceRefresh===!0,this.rootRemotePath=t.rootRemotePath,this.refreshLocal=this.scope==="local"||this.scope==="both",this.refreshRemote=this.scope==="remote"||this.scope==="both",this.workspace=t.workspace,this.accepted=t.onAccepted??(()=>{}),this.publishResult=t.publish??(()=>{})}kind="refresh";scope;source;task;forceRefresh;rootRemotePath;refreshLocal;refreshRemote;accepted;workspace;publishResult;localController=new AbortController;remoteController=new AbortController;refreshResult={warnings:[]};localCancelled=!1;remoteCancelled=!1;onAccepted(){this.accepted()}abort(){this.cancelLocal(),this.cancelRemote()}cancelConflictingSubTasks(e){this.cancelSubTasks({local:e.refreshLocal,remote:e.refreshRemote})}cancelSubTasks(e){e.local&&this.refreshLocal&&this.cancelLocal(),e.remote&&this.refreshRemote&&this.cancelRemote()}isLocalCancelled(){return this.localCancelled}isRemoteCancelled(){return this.remoteCancelled}canRunSubTask(e){return e==="local"?this.refreshLocal&&!this.localCancelled:this.refreshRemote&&!this.remoteCancelled}hasRunnableSubTask(){return this.canRunSubTask("local")||this.canRunSubTask("remote")}getRefreshResult(){return this.refreshResult}canRunBackgroundRefresh(){let e=this.workspace;return!!e&&e.isConnected&&!!e.activeServerUrl}async run(){if(!this.workspace||!this.hasRunnableSubTask())return{kind:"noop"};this.task.start(Number(this.canRunSubTask("local"))+Number(this.canRunSubTask("remote")));let e=this.canRunSubTask("local")?this.task.subTaskMonitor(1):void 0,t=this.canRunSubTask("remote")?this.task.subTaskMonitor(1):void 0;try{let n=e?this.runLocalRefresh(e):Promise.resolve(void 0),o=t?this.runRemoteRefresh(t):Promise.resolve(void 0),[i,a]=await Promise.all([n,o]);return this.canPublish(i,a)?{kind:"replaceRefreshScope",localChanges:this.localCancelled?void 0:i,...this.localCancelled||!this.rootRemotePath?{}:{localRootRemotePath:this.rootRemotePath},remoteChanges:this.remoteCancelled?void 0:a,...a!==void 0&&this.refreshResult.warnings.length>0?{warnings:this.refreshResult.warnings}:{}}:{kind:"noop"}}catch(n){if(n instanceof Error&&n.name==="AbortError")return{kind:"noop"};throw n}}createPublishableResult(e){if(e.kind!=="replaceRefreshScope")return e;let t=this.localCancelled?void 0:e.localChanges,n=this.remoteCancelled?void 0:e.remoteChanges;return t===void 0&&n===void 0?{kind:"noop"}:{kind:"replaceRefreshScope",localChanges:t,...t===void 0||!e.localRootRemotePath?{}:{localRootRemotePath:e.localRootRemotePath},remoteChanges:n,...n!==void 0&&e.warnings?.length?{warnings:e.warnings}:{}}}publish(e){let t=this.createPublishableResult(e);return this.refreshResult=this.createRefreshResult(t),this.publishResult(t)}async runLocalRefresh(e){e.start(1);let t=this.workspace,n=await new cl({workspace:t,task:e,signal:this.localController.signal,rootRemotePath:this.rootRemotePath}).detect();return e.step(1),n.changes}async runRemoteRefresh(e){e.start(1);let t=await this.detectRemoteChanges(e);return e.step(1),t}async detectRemoteChanges(e){let t=this.workspace;if(!t)return[];try{return this.remoteController.signal.aborted?[]:await new Er({workspace:t,task:e,forceRefresh:this.forceRefresh,signal:this.remoteController.signal}).detect()}catch(n){return jh(n)?(this.refreshResult={warnings:[{errorCode:"err.login.notlogin",properties:{serverUrl:t.activeServerUrl}}]},[]):(XM.warn(`remote sync status detection failed: ${t.root}`,n),[])}}createRefreshResult(e){return e.kind!=="replaceRefreshScope"?{warnings:[]}:{warnings:e.warnings??[]}}canPublish(e,t){return this.refreshLocal&&!this.localCancelled&&!e||this.refreshRemote&&!this.remoteCancelled&&!t?!1:!this.localCancelled&&!!e||!this.remoteCancelled&&!!t}cancelLocal(){this.localCancelled=!0,this.localController.abort()}cancelRemote(){this.remoteCancelled=!0,this.remoteController.abort()}};var ll=class{taskQueue=[];scheduling=!1;dispose(){this.cancelAllStateTasks(),this.scheduleTaskQueue()}hasRemoteRefreshTask(){return this.getRefreshTasks().some(e=>e.refreshRemote)}enqueue(e){let t=this.mergePendingFileWatchTask(e);return t?{accepted:!0,promise:t.promise}:this.prepareTask(e)?(e instanceof Fr&&e.refreshLocal&&this.cancelLocalStateTasks(),e.onAccepted?.(),{accepted:!0,promise:this.enqueueTask(e)}):{accepted:!1,promise:Promise.resolve()}}submitImmediate(e,t={}){t.cancel==="local"?this.cancelLocalStateTasks():this.cancelAllStateTasks();let n=e.publish(e.toResult());this.enqueueFollowUpTask(n),this.scheduleTaskQueue()}prepareTask(e){return e instanceof Fr?this.prepareRefreshTask(e):!0}prepareRefreshTask(e){if(e.source==="background")return this.taskQueue.length===0&&e.canRunBackgroundRefresh();for(let t of this.getRefreshTasks())t.cancelConflictingSubTasks(e);return!0}enqueueTask(e){let t=this.createScheduledTask(e);return this.taskQueue.push(t),this.scheduleTaskQueue(),t.promise}createScheduledTask(e){let t,n,o=new Promise((i,a)=>{t=i,n=a});return{task:e,state:"pending",promise:o,resolve:t,reject:n}}scheduleTaskQueue(){if(!this.scheduling){this.scheduling=!0;try{for(let e of[...this.taskQueue])if(e.state==="pending"){if(this.shouldDiscardScheduledTask(e.task)){this.finishScheduledTask(e);continue}this.canStartScheduledTask(e)&&this.startScheduledTask(e)}}finally{this.scheduling=!1}}}shouldDiscardScheduledTask(e){return e instanceof or?e.isCancelled():e instanceof Fr?!e.hasRunnableSubTask():!1}canStartScheduledTask(e){return e.task instanceof or?!this.hasEarlierPendingFileWatchTask(e)&&!this.hasRunningFileWatchTask()&&!this.hasRunningLocalRefreshTask():!0}startScheduledTask(e){e.state="running",this.runScheduledTask(e)}async runScheduledTask(e){let t;try{let n=await e.task.run();t=await e.task.publish(n)}catch(n){this.finishScheduledTask(e,n);return}this.removeScheduledTask(e);try{t?await this.enqueue(t).promise:this.scheduleTaskQueue(),e.resolve()}catch(n){e.reject(n)}}finishScheduledTask(e,t){this.removeScheduledTask(e),t?e.reject(t):e.resolve(),this.scheduleTaskQueue()}removeScheduledTask(e){let t=this.taskQueue.indexOf(e);t>=0&&this.taskQueue.splice(t,1)}enqueueFollowUpTask(e){e&&this.enqueue(e).promise}cancelAllStateTasks(){this.cancelFileWatchTasks(),this.cancelRefreshTasks({local:!0,remote:!0})}cancelLocalStateTasks(){this.cancelFileWatchTasks(),this.cancelRefreshTasks({local:!0})}cancelRefreshTasks(e){for(let t of this.getRefreshTasks())t.cancelSubTasks(e)}cancelFileWatchTasks(){for(let e of this.taskQueue)e.task instanceof or&&e.task.abort()}mergePendingFileWatchTask(e){if(!(e instanceof or))return;let t=this.findMergeableFileWatchTask();if(t)return t.task.mergeTask(e),t}findMergeableFileWatchTask(){for(let e=this.taskQueue.length-1;e>=0;e--){let t=this.taskQueue[e];if(t.state==="pending"&&t.task instanceof or&&!t.task.isCancelled())return t}}getRefreshTasks(){return this.taskQueue.map(e=>e.task).filter(e=>e instanceof Fr)}hasRunningFileWatchTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof or)}hasEarlierPendingFileWatchTask(e){for(let t of this.taskQueue){if(t===e)return!1;if(t.state==="pending"&&t.task instanceof or)return!0}return!1}hasRunningLocalRefreshTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof Fr&&e.task.canRunSubTask("local"))}};var im=T("workspace.sync-status"),pl=class{constructor(e){this.workspace=e;this.coordinator=new ll}changes=new Map;fullRefreshCount=0;taskId=0;coordinator;backgroundRemoteDiscoveryTimer;dispose(){this.stopBackgroundRemoteDiscovery(),this.coordinator.dispose()}startBackgroundRemoteDiscovery(e){this.stopBackgroundRemoteDiscovery(),!(e.intervalMs<=0)&&this.scheduleBackgroundRemoteDiscovery(e.intervalMs,e.runImmediately?0:e.intervalMs)}stopBackgroundRemoteDiscovery(){this.backgroundRemoteDiscoveryTimer&&(clearTimeout(this.backgroundRemoteDiscoveryTimer),this.backgroundRemoteDiscoveryTimer=void 0)}async refreshAll(e={}){let t=this.createRefreshTask(e),n=this.coordinator.enqueue(t);return n.accepted&&this.workspace?.notifySyncStatusRefreshing?.(n.promise,!!e.task),await n.promise,t.getRefreshResult()}scheduleBackgroundRemoteDiscovery(e,t=e){this.backgroundRemoteDiscoveryTimer=setTimeout(()=>{this.backgroundRemoteDiscoveryTimer=void 0,this.runBackgroundRemoteDiscovery(e)},t)}async runBackgroundRemoteDiscovery(e){if(this.scheduleBackgroundRemoteDiscovery(e),await this.hasSyncLock()){im.debug("background remote discovery skipped because sync lock is held");return}if(this.coordinator.hasRemoteRefreshTask()){im.debug("background remote discovery skipped because remote refresh is already queued");return}this.refreshAll({scope:"remote",source:"background"}).catch(t=>{im.warn("background remote discovery failed",t)})}async hasSyncLock(){let e=this.workspace?.lockManager;return e?await e.isHeldLock("sync"):!1}createRefreshTask(e={}){return new Fr(this.nextTaskId(),{...e,workspace:this.workspace,onAccepted:()=>{this.fullRefreshCount++},publish:t=>this.publishTaskResult(t)})}replaceAllByRefreshScope(e,t,n){let o=e?[...e]:[],i=t??[];if(!e||!t)for(let s of this.changes.values()){let c=at(s),l=fr(s);!e&&c&&!l||e&&n&&c&&!l&&!vc(s,[n])?o.push(s):!t&&l&&!c&&i.push(s)}let a=mv(o,i);this.replaceAllWithoutVersionChange([...o,...i,...a])}async consumeFileChanges(e,t={}){await this.coordinator.enqueue(this.createFileWatchTask(e,t)).promise}createFileWatchTask(e,t){return new or(this.nextTaskId(),{fileChanges:e,bulk:t.bulk,workspace:this.workspace,getChanges:()=>this.getChanges(),publish:n=>this.publishTaskResult(n)})}applyOperationResult(e,t=[]){this.coordinator.submitImmediate(new tl(this.nextTaskId(),e,t,n=>this.publishTaskResult(n)))}applyFileWatchResult(e,t){this.coordinator.submitImmediate(this.createReplaceTargetsTask("fileWatch",t,e,"fileWatch"),{cancel:"local"})}clearTargets(e){this.coordinator.submitImmediate(this.createClearTask({kind:"paths",remotePaths:e}))}clear(){this.coordinator.submitImmediate(this.createClearTask({kind:"all"}))}createReplaceTargetsTask(e,t,n,o="normal"){return new rl(this.nextTaskId(),{source:e,targetRemotePaths:t,changes:n,mode:o,publish:i=>this.publishTaskResult(i)})}createClearTask(e){return new Zc(this.nextTaskId(),e,t=>this.publishTaskResult(t))}publishTaskResult(e){if(e.kind!=="noop"){if(e.kind==="requestRefresh")return this.createRefreshTask({scope:e.scope,source:e.source,task:e.task,rootRemotePath:e.rootRemotePath});if(e.kind==="replaceRefreshScope"){this.replaceAllByRefreshScope(e.localChanges,e.remoteChanges,e.localRootRemotePath);return}if(e.kind==="replaceTargets"){this.replaceTargetsByMode(e.targetRemotePaths,e.changes,e.mode??"normal");return}this.publishClearResult(e.target)}}publishClearResult(e){if(e.kind==="all"){this.clearWithoutVersionChange();return}this.clearTargetsWithoutVersionChange(e.remotePaths)}nextTaskId(){return this.taskId++,this.taskId}getChanges(){return[...this.changes.values()]}getSummary(){let e=0,t=0;for(let n of this.changes.values())at(n)?e++:fr(n)&&t++;return{pushCount:e,pullCount:t}}getLocalChanges(){return this.getChanges().filter(e=>at(e))}getRemoteChanges(){return this.getChanges().filter(e=>fr(e))}getFullRefreshCount(){return this.fullRefreshCount}replaceTargets(e,t){if(e.length!==0){for(let[n,o]of this.changes)vc(o,e)&&this.changes.delete(n);this.addChanges(t)}}replaceFileWatchTargets(e,t){if(e.length===0)return;let n=t.filter(yc).flatMap(i=>[i.remotePath,i.oldRemotePath]).filter(i=>!!i),o=new Set;for(let[i,a]of this.changes)if(uv(a,e)||vc(a,n)){if(a.type==="renamed"&&t.some(s=>s.type==="added"&&s.remotePath===a.remotePath)){o.add(a.remotePath);continue}this.changes.delete(i)}this.addChanges(t.filter(i=>i.type!=="added"||!o.has(i.remotePath)))}addChanges(e){for(let t of e)t.type!=="clean"&&this.addMergedChange(t)}addMergedChange(e){let t=this.createMoveChangeByExistingState(e);if(!t){this.changes.set(kc(e),e);return}this.changes.set(kc(t),t)}createMoveChangeByExistingState(e){let t=this.findMoveCounterpart(e);if(t)return this.changes.delete(kc(t)),this.createMoveChange(e,t)}findMoveCounterpart(e){let t;for(let n of this.changes.values())if(this.canMergeMoveChanges(e,n)){if(t)return;t=n}return t}canMergeMoveChanges(e,t){return!!e.fileId&&e.fileId===t.fileId&&(this.isLocalAdded(e)&&this.isLocalDeleted(t)||this.isLocalDeleted(e)&&this.isLocalAdded(t)||this.isRemoteAdded(e)&&this.isRemoteDeleted(t)||this.isRemoteDeleted(e)&&this.isRemoteAdded(t))}createMoveChange(e,t){let n=this.isAddedChange(e)?e:t,o=this.isDeletedChange(e)?e:t,i=this.isRemoteAdded(n)||this.isRemoteDeleted(o);return{path:n.path,remotePath:n.remotePath,fileId:n.fileId??o.fileId,oldPath:o.path,oldRemotePath:o.remotePath,type:i?"remoteRenamed":"renamed",isFolder:n.isFolder??o.isFolder,contentChanged:n.contentChanged??o.contentChanged,metaChanged:n.metaChanged??o.metaChanged}}isAddedChange(e){return this.isLocalAdded(e)||this.isRemoteAdded(e)}isDeletedChange(e){return this.isLocalDeleted(e)||this.isRemoteDeleted(e)}isLocalAdded(e){return e.type==="added"}isLocalDeleted(e){return e.type==="deleted"}isRemoteAdded(e){return e.type==="remoteAdded"}isRemoteDeleted(e){return e.type==="remoteDeleted"}replaceAllWithoutVersionChange(e){this.changes.clear(),this.addChanges(e),this.notifyChanged()}replaceTargetsByMode(e,t,n="normal"){n==="fileWatch"?this.replaceFileWatchTargets(e,t):this.replaceTargets(e,t),this.notifyChanged()}clearTargetsWithoutVersionChange(e){this.replaceTargets(e,[]),this.notifyChanged()}clearWithoutVersionChange(){this.changes.clear(),this.notifyChanged()}notifyChanged(){this.workspace?.notifySyncStatusChanged()}};var ul=b(require("path"));G();var QM=T("workspace.file-watch"),ZM="**/*",eD=1e3,Ak=5e3,tD=200,rD=50,nD=[".succapp"],Ok="refreshAfterFileChange",dl=class{constructor(e,t,n,o={},i){this.workspace=e;this.eventBus=t;this.fileWatcherProvider=n;this.options=o;this.lockManager=i;let a=this.disposables.add(this.fileWatcherProvider.createFileWatcher(e.root,ZM));this.disposables.add(a.onFileChanged(s=>this.onFileChanged(s))),this.lockManager&&this.disposables.add(this.eventBus.on("workspace.lock.changed",s=>{s.payload.root!==this.workspace.root||s.payload.scope!=="sync"||s.payload.held||this.onSyncLockReleased()}))}disposables=new Dn;pendingChanges=new Map;lockReleaseTime=0;deferred=!1;deferredRecheckTimer;cancelPendingRefresh(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.pendingChanges.clear(),this.deferred=!1}async flushPendingRefresh(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),await this.refreshPendingChanges()}onFileChanged(e){let{filePath:t,type:n}=e;this.isWorkspaceSystemFile(t)||Date.now()-this.lockReleaseTime<(this.options.lockReleaseCooldown??rD)||(this.pendingChanges.set(`${n}\0${t}`,e),this.scheduleRefresh())}scheduleRefresh(){Do(this,Ok,this.options.refreshDelay??eD,()=>this.refreshPendingChanges(),{maxWaitMs:this.options.maxRefreshDelay??Ak})}takePendingChanges(){let e=[...this.pendingChanges.values()];return this.pendingChanges.clear(),e}async refreshPendingChanges(e=!1){if(this.pendingChanges.size===0){this.deferred=!1;return}if(await this.isSyncLockHeld()){this.deferred=!0,this.scheduleDeferredRecheck();return}let t=this.deferred;this.deferred=!1,this.clearDeferredRecheckTimer();let n=this.takePendingChanges();await this.refresh(n,e||t)}async refresh(e,t){if(e.length!==0){this.fireWorkspaceFileChanged(e[0]);try{await this.workspace.consumeFileChanges(e,{bulk:t||e.length>=this.getBulkThreshold()})}catch(n){QM.debug(`refresh sync status after file change failed: ${this.workspace.root}`,n)}}}fireWorkspaceFileChanged(e){this.eventBus.fire(new $e("workspace.file.changed",{root:this.workspace.root,filePath:e.filePath,type:e.type},this))}getBulkThreshold(){return Math.max(1,this.options.bulkThreshold??tD)}async isSyncLockHeld(){return this.lockManager?await this.lockManager.isHeldLock("sync"):!1}onSyncLockReleased(){this.lockReleaseTime=Date.now(),this.deferred&&(this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.refreshPendingChanges(!0))}scheduleDeferredRecheck(){this.deferredRecheckTimer||(this.deferredRecheckTimer=setTimeout(()=>{this.deferredRecheckTimer=void 0,this.refreshPendingChanges()},this.options.maxRefreshDelay??Ak),this.deferredRecheckTimer.unref?.())}clearDeferredRecheckTimer(){this.deferredRecheckTimer&&(clearTimeout(this.deferredRecheckTimer),this.deferredRecheckTimer=void 0)}clearRefreshTimer(){Io(this,Ok)}isWorkspaceSystemFile(e){let t=ul.relative(this.workspace.root,e);return nD.some(n=>t===n||t.startsWith(`${n}${ul.sep}`))}dispose(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.pendingChanges.clear(),this.disposables.dispose()}};var Dr=b(require("path"));G();vt();Ce();var Pa=class r{constructor(e,t){this.filePath=e;this.content=t}content;changed=!1;static async read(e){return new r(e,await Le(e))}hasChanges(){return this.changed}getContent(){return this.content}upsertMarkedBlock(e){let t=oD(this.content,e);return this.updateContent(t)}removeMarkedBlock(e){let t=Lk(e),n=Nk(t);if(!n.test(this.content))return!1;let o=this.content.replace(n,"").replace(/\s*$/,"");return this.updateContent(o?`${o}
|
|
72
|
-
`:"")}async save(){return this.changed?(await
|
|
70
|
+
`}function kD(r,e){if(kg(r))return!0;let t=e.trimStart();return t.startsWith("{")||t.startsWith("[")}function Om(r){try{return JSON.stringify(JSON.parse(r),null,2)}catch(e){return dw.debug("skip JSON normalization because content is not valid JSON",e),r}}function pw(r){return r===void 0||r===""||r===!1||typeof r=="object"&&r!==null&&Object.keys(r).length===0}var fl=class{serverControlledKeys;constructor(e=["id","revision","creator","createTime","modifier","modifyTime"]){this.serverControlledKeys=new Set(e)}async merge(e){let t=await this.mergeContent(e),n=this.mergeMetaInfo(e.workspaceMeta,e.baseMeta,e.remoteMeta);return{hasConflict:t.hasConflict,mergedMeta:n.merged,hasMetaConflict:n.hasConflict}}async mergeContent(e){let[t,n,o]=[];try{[t,n,o]=await Promise.all([Va.promises.readFile(e.workspaceFile,"utf-8"),Va.promises.readFile(e.baseFile,"utf-8"),Va.promises.readFile(e.remoteFile,"utf-8")])}catch(g){return dw.debug(`treat merge content as conflicted because inputs cannot be read: ${e.workspaceFile}`,g),{hasConflict:!0}}kD(e.workspaceFile,t)&&(t=Om(t),n=Om(n),o=Om(o));let i=Am(t),a=Am(n),s=Am(o),c=lw(i,a,s),l=vD(t),p=c.some(g=>"conflict"in g),u=c.flatMap(g=>{if("ok"in g)return g.ok;let m=g.conflict;return["<<<<<<< Local",...m.a,"=======",...m.b,">>>>>>> Remote"]}).join(l);return await Va.promises.writeFile(e.workspaceFile,u,"utf-8"),{hasConflict:p}}mergeMetaInfo(e,t,n){if(!e&&!t&&!n)return{hasConflict:!1};let o=t??{},i=n??{},a=e??{},s={...o},c=!1,l=new Set([...Object.keys(o),...Object.keys(i),...Object.keys(a)]);for(let p of l){if(this.serverControlledKeys.has(p)){p in a?s[p]=a[p]:p in i&&(s[p]=i[p]);continue}let u=p in o,g=p in i,m=p in a,f=u!==g||u&&g&&this.isMetaFieldDifferent(o[p],i[p]),y=u!==m||u&&m&&this.isMetaFieldDifferent(o[p],a[p]);if(!(!f&&!y)){if(f&&!y){g?s[p]=i[p]:delete s[p];continue}if(!f&&y){m?s[p]=a[p]:delete s[p];continue}if(!g&&!m){delete s[p];continue}if(!g&&m){c=!0,s[p]=a[p];continue}if(g&&!m){delete s[p];continue}c=!0,s[p]=a[p]}}return{merged:Object.keys(s).length>0?s:void 0,hasConflict:c}}isMetaFieldDifferent(e,t){if(e===t)return!1;let n=pw(e),o=pw(t);return n&&o?!1:e!==t}};var gl=class{input;constructor(e){this.input=e}async execute(){let e;try{e=await this.normalizeMergeFiles();let t={workspaceFile:e.workspaceFile,baseFile:e.baseFile,remoteFile:e.remoteFile,workspaceMeta:this.input.workspaceMeta,baseMeta:this.input.baseMeta,remoteMeta:this.input.remoteMeta},n=await(this.input.threeWayMerge??new fl).merge(t);return e.workspaceFile!==this.input.workspaceFile&&await qa.promises.copyFile(e.workspaceFile,this.input.workspaceFile),{merged:!n.hasConflict,hasConflict:n.hasConflict,conflictReason:n.hasConflict?"contentConflict":void 0,threeWayResult:n}}catch(t){if(t instanceof To)return{merged:!1,hasConflict:!0,conflictReason:t.conflictReason,metadataUpgradeReason:t.reason,errorInfo:t.errorInfo};throw t}finally{e?.tempDir&&await lr(e.tempDir)}}async normalizeMergeFiles(){if(!this.input.versionInfo?.upgradeSupported)return this.createOriginalMergeFiles();if(!this.input.client)return this.createOriginalMergeFiles();let t=await this.readMergeContentVersions();if(this.areMergeContentVersionsSame(t))return this.createOriginalMergeFiles();let n=await qa.promises.mkdtemp(_m.join(uw.tmpdir(),"succapp-single-file-merge-"));try{let o=new Fi({client:this.input.client}),i=await Promise.all([this.readAndNormalizeContent(o,"workspace",this.input.workspaceFile),this.readAndNormalizeContent(o,"base",this.input.baseFile),this.readAndNormalizeContent(o,"remote",this.input.remoteFile)]),[a,s,c]=await Promise.all([this.writeTempContent(n,"workspace",i[0]),this.writeTempContent(n,"base",i[1]),this.writeTempContent(n,"remote",i[2])]);return{workspaceFile:a,baseFile:s,remoteFile:c,tempDir:n}}catch(o){throw await lr(n),o}}createOriginalMergeFiles(){return{workspaceFile:this.input.workspaceFile,baseFile:this.input.baseFile,remoteFile:this.input.remoteFile}}async readMergeContentVersions(){let[e,t,n]=await Promise.all([this.readMergeContentVersion("workspace",this.input.workspaceFile),this.readMergeContentVersion("base",this.input.baseFile),this.readMergeContentVersion("remote",this.input.remoteFile)]);return{workspace:e,base:t,remote:n}}async readMergeContentVersion(e,t){try{return await zc(t)}catch(n){throw new To("metadataVersionUpgradeFailed",n instanceof SyntaxError?"invalidContent":"readFailed",`metadata ${e} version normalize input cannot be read`,n)}}areMergeContentVersionsSame(e){return e.workspace===e.base&&e.workspace===e.remote}async readAndNormalizeContent(e,t,n){let o;try{o=await qa.promises.readFile(n,"utf-8")}catch(a){throw new To("metadataVersionUpgradeFailed","readFailed",`metadata ${t} version normalize input cannot be read`,a)}let i=await e.upgradeContent({path:this.input.remotePath,content:o,versionInfo:this.input.versionInfo});if(i.reason==="newerVersion")throw new To("metadataVersionNewerThanServer",i.reason,`metadata ${t} version is newer than server target version`,i.errorInfo);if(i.reason&&i.reason!=="upToDate")throw new To("metadataVersionUpgradeFailed",i.reason,`metadata ${t} version normalize failed`,i.errorInfo);return i.content}async writeTempContent(e,t,n){let o=_m.join(e,t);return await qa.promises.writeFile(o,n,"utf-8"),o}},To=class extends Error{conflictReason;reason;errorInfo;constructor(e,t,n,o){super(n),this.name="MetadataVersionNormalizeError",this.conflictReason=e,this.reason=t,this.errorInfo=o}};ut();var Mo=T("sync.apply-remote"),yl=class extends je{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);updated=[];deleted=[];conflicts=[];currentChangeTask;async execute(){this.updated=[],this.deleted=[],this.conflicts=[],this.currentChangeTask=void 0;let e=this.sortRemoteChanges(this.options.remoteChanges);Mo.info("apply remote changes start: changes={0}",e.length);let t=new Set;if(e.length===0)return this.task.start(1),this.task.step(1),this.finishApplyRemoteChanges({updated:this.updated,deleted:this.deleted,conflicts:this.conflicts});let n=await this.createProgressItems(e);Mo.info("apply remote changes prepared: changes={0} resources={1}",e.length,n.reduce((i,a)=>i+a.total,0)),this.task.start(Math.max(n.reduce((i,a)=>i+a.total,0),1));let o=n.map(i=>({change:i.change,total:i.total,task:this.task.subTaskMonitor(i.total)}));for(let{change:i,total:a,task:s}of o){this.task.throwIfAborted(),s.start(a),this.currentChangeTask=s;try{if(this.isCoveredByAppliedFolderCheckout(i,t)){s.progress(a);continue}let c=this.findLocalOverlaps(i);if(c.length>0&&!this.options.force){if(await this.tryApplyRemoteChangeWithLocalOverlaps(i,c))continue;this.conflicts.push(i),s.step(1);continue}i.type==="remoteDeleted"?(await this.workspace.deletePath(i.remotePath,s),this.deleted.push(i.remotePath)):i.type==="remoteRenamed"?(i.oldRemotePath&&(await this.workspace.deletePath(i.oldRemotePath,s),this.deleted.push(i.oldRemotePath)),await this.workspace.checkoutFromMirror(i.remotePath,s),this.updated.push(i.remotePath)):i.isFolder&&i.type==="remoteModified"?(await this.workspace.copyMirrorMetaInfo(i.remotePath,!0,s),this.updated.push(i.remotePath),s.step(1)):(await this.workspace.checkoutFromMirror(i.remotePath,s),this.updated.push(i.remotePath),i.isFolder&&t.add(i.remotePath))}finally{this.currentChangeTask=void 0}}return await this.cleanupEmptyOrphanParents(this.deleted,this.mirror,this.workspace),this.finishApplyRemoteChanges({updated:this.updated,deleted:this.deleted,conflicts:this.conflicts})}finishApplyRemoteChanges(e){Mo.info("apply remote changes done: updated={0} deleted={1} conflicts={2}",e.updated.length,e.deleted.length,e.conflicts.length);for(let t of e.updated)Mo.info("apply remote change item: status=updated path={0}",t);for(let t of e.deleted)Mo.info("apply remote change item: status=deleted path={0}",t);for(let t of e.conflicts)Mo.info("apply remote change item: status=conflict path={0}",t.remotePath);return e}isCoveredByAppliedFolderCheckout(e,t){for(let n of t)if(e.remotePath!==n&&ee(e.remotePath,n))return!0;return!1}async createProgressItems(e){return Promise.all(e.map(async t=>({change:t,total:await this.countChangeProgress(t)})))}async countChangeProgress(e){if(e.type==="remoteDeleted")return this.countWorkspaceProgress(e.remotePath);if(e.type==="remoteRenamed"){let[t,n]=await Promise.all([e.oldRemotePath?this.countWorkspaceProgress(e.oldRemotePath):Promise.resolve(0),this.countCheckoutProgress(e.remotePath)]);return t+n}return e.isFolder&&e.type==="remoteModified"?1:this.countCheckoutProgress(e.remotePath)}async countCheckoutProgress(e){return Math.max(await this.workspace.countCheckoutResources(e),1)}async countWorkspaceProgress(e){return Math.max(await this.workspace.countResources([e]),1)}async tryApplyRemoteChangeWithLocalOverlaps(e,t){return await this.tryApplyRemoteRenamePreservingLocalModification(e,t)||await this.tryMergeSeparatedMetaAndContentChanges(e,t)?!0:this.canApplyFolderMetaOnly(e,t)?(await this.workspace.copyMirrorMetaInfo(e.remotePath,!0,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):this.tryThreeWayMergeSameFileContentChange(e,t)}async tryMergeSeparatedMetaAndContentChanges(e,t){if(e.type!=="remoteModified"||t.length!==1)return!1;let n=t[0];return n.remotePath!==e.remotePath||n.type!=="modified"?!1:e.metaChanged&&!e.contentChanged&&n.contentChanged&&!n.metaChanged?(await this.workspace.copyMirrorMetaInfo(e.remotePath,!!e.isFolder,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):e.contentChanged&&!e.metaChanged&&n.metaChanged&&!n.contentChanged?(await this.workspace.copyMirrorContent(e.remotePath,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):!1}async tryApplyRemoteRenamePreservingLocalModification(e,t){if(e.type!=="remoteRenamed"||!e.oldRemotePath||t.length!==1)return!1;let n=t[0];return n.type!=="modified"||n.remotePath!==e.oldRemotePath||!await this.applyRemoteRenameContent(e,n)?!1:(await this.applyRemoteRenameMeta(e,n),await this.workspace.deletePath(e.oldRemotePath,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.deleted.push(e.oldRemotePath),e.isFolder||this.getCurrentChangeTask().step(1),!0)}async applyRemoteRenameContent(e,t){if(e.isFolder)return await this.workspace.checkoutFromMirror(e.remotePath,this.getCurrentChangeTask()),!0;let n=this.workspace.toLocalPath(e.remotePath);return this.task.throwIfAborted(),await _i.promises.mkdir(Vr.dirname(n),{recursive:!0}),e.contentChanged&&t.contentChanged?this.mergeRemoteRenameContent(e,n):t.contentChanged&&e.oldRemotePath?(this.options.mergeBaseDir&&await this.mergeRemoteRenameContent(e,n)||(this.task.throwIfAborted(),await _i.promises.copyFile(this.workspace.toLocalPath(e.oldRemotePath),n)),!0):(await this.workspace.copyMirrorContent(e.remotePath,this.getCurrentChangeTask()),!0)}async mergeRemoteRenameContent(e,t){if(!e.oldRemotePath)return!1;let n;try{if(!this.options.mergeBaseDir||!e.oldRemotePath)return!1;n=await _i.promises.mkdtemp(Vr.join(mw.tmpdir(),"succapp-remote-rename-merge-"));let o=Vr.join(n,"workspace");this.task.throwIfAborted(),await _i.promises.copyFile(this.workspace.toLocalPath(e.oldRemotePath),o);let i=Vr.join(this.options.mergeBaseDir,Me(e.oldRemotePath)),a=this.mirror.toLocalPath(e.remotePath),s=await this.mergeSingleFileContent({remotePath:e.remotePath,workspaceFile:o,baseFile:i,remoteFile:a});return s.threeWayResult&&(this.task.throwIfAborted(),await _i.promises.copyFile(o,t)),s.merged}catch(o){return Mo.debug(`merge remote rename content failed: ${e.remotePath}`,o),!1}finally{n&&await lr(n)}}async applyRemoteRenameMeta(e,t){let n=await Ue(this.mirror.root,e.remotePath);if(!n)return;let o=n;if(t.metaChanged&&e.oldRemotePath){let[i,a]=await Promise.all([Ue(this.workspaceRoot,e.oldRemotePath),this.options.mergeBaseDir?Ue(this.options.mergeBaseDir,e.oldRemotePath):Promise.resolve(void 0)]);o=this.mergeMetaWithLocalDelta(n,i,a)}await this.workspace.patchMeta(Vr.posix.dirname(e.remotePath),{[Vr.posix.basename(e.remotePath)]:o},this.getCurrentChangeTask())}mergeMetaWithLocalDelta(e,t,n){let o={...e},i=Ro(t),a=Ro(n),s=new Set([...Object.keys(i),...Object.keys(a)]);for(let c of s)(0,hw.isDeepStrictEqual)(i[c],a[c])||(c in i?o[c]=i[c]:delete o[c]);return o}canApplyFolderMetaOnly(e,t){return e.type==="remoteModified"&&!!e.isFolder&&!!e.metaChanged&&!e.contentChanged&&t.every(n=>n.remotePath!==e.remotePath&&n.oldRemotePath!==e.remotePath)}findLocalOverlaps(e){return this.options.localChanges.filter(t=>Mn(t.remotePath,t.oldRemotePath,e.remotePath,e.oldRemotePath))}sortRemoteChanges(e){return[...e].sort((t,n)=>{let o=this.getApplyOrderRank(t),i=this.getApplyOrderRank(n);return o!==i?o-i:t.type==="remoteDeleted"&&n.type==="remoteDeleted"?_r(n.remotePath)-_r(t.remotePath)||t.remotePath.localeCompare(n.remotePath):t.type==="remoteRenamed"&&n.type==="remoteRenamed"?this.getRemoteRenameDeleteDepth(n)-this.getRemoteRenameDeleteDepth(t)||this.getRemoteRenameDeletePath(t).localeCompare(this.getRemoteRenameDeletePath(n)):t.remotePath.localeCompare(n.remotePath)})}getApplyOrderRank(e){return e.type==="remoteDeleted"?0:e.type==="remoteRenamed"?1:2}getRemoteRenameDeleteDepth(e){return _r(this.getRemoteRenameDeletePath(e))}getRemoteRenameDeletePath(e){return e.oldRemotePath??e.remotePath}async tryThreeWayMergeSameFileContentChange(e,t){if(e.type!=="remoteModified"||!e.contentChanged||t.length!==1)return!1;let n=t[0];if(n.type!=="modified"||!n.contentChanged||n.remotePath!==e.remotePath||!this.options.mergeBaseDir)return!1;let o=this.workspace.toLocalPath(e.remotePath),i=Vr.join(this.options.mergeBaseDir,Me(e.remotePath)),a=this.mirror.toLocalPath(e.remotePath),s=await this.mergeSingleFileContent({remotePath:e.remotePath,workspaceFile:o,baseFile:i,remoteFile:a});return s.threeWayResult&&(await this.workspace.copyMirrorMetaInfo(e.remotePath,!!e.isFolder,this.getCurrentChangeTask()),this.updated.push(e.remotePath)),s.merged?(this.getCurrentChangeTask().step(1),!0):!1}async mergeSingleFileContent(e){let t=(await this.context.getMetadataVersionCatalog()).getInfoByPath(e.remotePath),n=t?.upgradeSupported?await this.getApiClient():void 0;return new gl({...e,versionInfo:t,client:n}).execute()}getCurrentChangeTask(){return z(this.currentChangeTask,"current apply remote change task is missing."),this.currentChangeTask}};er();K();Y();D();Ke();var fw="merge-base",xo="merge-backup";Mr();var tt=T("sync.pull"),Cl=class extends je{async execute(){tt.info("pull start: {0}",this.createPullScopeLog()),this.task.start(100,{message:d("workspace.sync.progress.pull.running"),retainOnFinish:!0});let e=this.task.subTaskMonitor(8),t=this.task.subTaskMonitor(55),n=this.task.subTaskMonitor(3),o=this.task.subTaskMonitor(22),i=this.task.subTaskMonitor(8),a=this.task.subTaskMonitor(2),s=this.task.subTaskMonitor(2);e.start(4),tt.info("pull prepare start");let c=e.subTaskMonitor(1),l=e.subTaskMonitor(1),p=e.subTaskMonitor(1),u=e.subTaskMonitor(1);c.start(1),this.assertNoRemoteProjectUnavailableChanges(this.options.changes,"pull"),this.assertNoProjectRootRenameChanges(this.options.changes,"pull");let g=this.getKnownRemoteChanges(),m=g?this.getKnownChangeTargets(g):await this.resolveTargetRemotePaths(this.options.paths);c.step(1),tt.info("pull targets resolved: {0}",this.formatTargetsForLog(m)),!this.options.paths&&!g?(tt.info("pull refresh status start"),await this.context.refreshSyncStatus(l),tt.info("pull refresh status done")):l.finish();let f,y,C=[],v;if(g?(f=this.getTargetLocalChanges(m),y=g,C=this.options.force===!0?this.getTargetCachedPullChanges(m):[],p.finish()):this.options.paths?(f=this.getTargetLocalChanges(m),C=this.options.force===!0?this.getTargetCachedPullChanges(m):[],v=this.expandTargetsForRenameChanges(m,[...f,...C]),p.start(1),y=this.filterChangesByTargets(await this.detectRemoteChanges(v,p),v),p.step(1)):(f=this.getLocalSyncChanges().filter(b=>b.type!=="conflict"),y=this.getRemoteSyncChanges(),p.finish()),tt.info("pull changes prepared: local={0} remote={1}",f.length,y.length),y.length===0&&this.options.force!==!0)return tt.info("pull skipped: no applicable remote changes"),u.finish(),t.finish(),n.finish(),o.finish(),i.finish(),a.finish(),s.finish(),this.task.setMessage(d("workspace.sync.progress.pull.done",0,0,0)),this.task.finish(),{updated:[],deleted:[],conflicts:[],oldFiles:[]};u.start(1),tt.info("pull merge base capture start");let w=await this.captureMergeBaseDir(f,y);u.step(1),tt.info("pull merge base capture done");let h,S=!1,k;try{await new Hn(this.context,{task:t,...this.createFetchOptions(y,m,g)}).execute(),tt.info("pull reconcile local changes start");let b=await this.reconcileLocalChangesAfterFetch(f,y,m,n);tt.info("pull reconcile local changes done: local={0}",b.length);let P=this.options.force?await this.includeForceTargetChanges(y,b,m,C):y;h=await new yl(this.context,{remoteChanges:P,localChanges:b,force:!!this.options.force,mergeBaseDir:w,task:o}).execute(),this.applyPullOperationResult(P,h),tt.info("pull metadata version check start: paths={0}",h.updated.length);let J=await this.detectOldFiles(i,h.updated);tt.info("pull metadata version check done: oldFiles={0}",J.length);let M={...h,oldFiles:J};return S=!0,k=d("workspace.sync.progress.pull.done",M.updated.length,M.deleted.length,M.conflicts.length),tt.info("pull done: updated={0} deleted={1} conflicts={2} oldFiles={3}",M.updated.length,M.deleted.length,M.conflicts.length,J.length),M}finally{await this.cleanupPullState(a,w,h),S&&(s.finish(),this.task.setMessage(k),this.task.finish())}}createPullScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}getKnownRemoteChanges(){if(this.hasKnownChanges(this.options.changes))return ja(this.options.changes)}getTargetLocalChanges(e){return this.filterChangesByTargets(this.context.getSyncChanges().filter(t=>mt(t)&&t.type!=="conflict"),e)}getTargetCachedPullChanges(e){return this.filterChangesByTargets(ja(this.context.getSyncChanges()),e)}async detectRemoteChanges(e,t){return new jr({targets:e,task:t,workspace:this.context}).detect()}async detectOldFiles(e,t){return t.length===0?(e.finish(),[]):al(this.context,e,t.map(n=>ae(this.workspaceRoot,n)))}async cleanupPullState(e,t,n){if(!t){e.finish();return}let o=!n||n.conflicts.length===0;tt.info("pull cleanup start"),e.start(o?2:1),await lr(t),e.step(1),o&&(await lr(Ut.join(this.workspaceRoot,".succapp",xo)),e.step(1)),tt.info("pull cleanup done")}formatTargetsForLog(e){return e?`targets=${e.size}`:"<all>"}getFetchPaths(e,t){if(!this.options.paths)return;if(e.length===0)return[...t||new Set(this.options.paths)];let n=new Set;for(let o of e)n.add(o.remotePath),o.oldRemotePath&&n.add(o.oldRemotePath);return[...n]}createFetchOptions(e,t,n){return n?{changes:e}:{paths:this.getFetchPaths(e,t)}}async reconcileLocalChangesAfterFetch(e,t,n,o){if(o.start(1),e.length===0||t.length===0||!e.some(s=>t.some(c=>this.isOverlappedChange(s,c)))||n)return o.step(1),e;await this.context.refreshSyncStatus(o);let i=this.filterChangesByTargets(this.getLocalSyncChanges().filter(s=>s.type!=="conflict"),n),a=e.filter(s=>t.some(c=>this.isOverlappedChange(s,c))?i.some(c=>this.isOverlappedChange(s,c)):!0);for(let s of i){let c=t.find(l=>this.isOverlappedChange(s,l));c&&(a.some(l=>this.isSameChange(l,s))||this.isFetchIntroducedRemoteMetaOnlyChange(s,c)||a.push(s))}return a}applyPullOperationResult(e,t){for(let n of e)this.context.applySyncOperationResult(n,t.conflicts.filter(o=>this.isOverlappedChange(n,o)))}isFetchIntroducedRemoteMetaOnlyChange(e,t){return e.remotePath===t.remotePath&&e.type==="modified"&&t.type==="remoteModified"&&!!e.metaChanged&&!e.contentChanged&&!!t.metaChanged&&!t.contentChanged}isOverlappedChange(e,t){return Mn(e.remotePath,e.oldRemotePath,t.remotePath,t.oldRemotePath)}isSameChange(e,t){return e.type===t.type&&e.remotePath===t.remotePath&&e.oldRemotePath===t.oldRemotePath}async includeForceTargetChanges(e,t,n,o=[]){if(!n)return e;let i=[...e],a=new Set(e.map(c=>c.remotePath)),s=this.createMirrorStore();for(let c of o)if(!a.has(c.remotePath)){if(c.type==="conflict"){await this.addForceMirrorChange(i,a,s,c);continue}i.push(c),a.add(c.remotePath)}for(let c of t){if(c.type==="renamed"&&c.oldRemotePath){if(!n.has(c.remotePath)&&!n.has(c.oldRemotePath))continue;await this.addForceMirrorChange(i,a,s,{path:c.oldPath??Me(c.oldRemotePath),remotePath:c.oldRemotePath,isFolder:c.isFolder,contentChanged:c.contentChanged,metaChanged:c.metaChanged}),await this.addForceMirrorChange(i,a,s,c);continue}a.has(c.remotePath)||n.has(c.remotePath)&&await this.addForceMirrorChange(i,a,s,c)}return i}async addForceMirrorChange(e,t,n,o){if(t.has(o.remotePath))return;let i=await n.exists(o.remotePath);e.push({path:o.path,remotePath:o.remotePath,...o.fileId!==void 0?{fileId:o.fileId}:{},type:i?"remoteModified":"remoteDeleted",isFolder:i?await n.isFolder(o.remotePath):o.isFolder,contentChanged:i?o.contentChanged:!1,metaChanged:i?o.metaChanged:!1}),t.add(o.remotePath)}async captureMergeBaseDir(e,t){let n=e.filter(u=>u.type==="modified"&&u.contentChanged),o=e.filter(u=>u.type==="modified"&&(u.contentChanged||u.metaChanged));if(o.length===0)return;let i=t.filter(u=>u.type==="remoteModified"?!!u.contentChanged&&n.some(g=>this.isOverlappedChange(g,u)):u.type==="remoteRenamed"?o.some(g=>this.isOverlappedChange(g,u)):!1);if(i.length===0)return;let a=Ut.join(this.workspaceRoot,".succapp"),s=Ut.join(a,fw),c=Ut.join(a,xo);await Promise.all([lr(s),lr(c)]),this.task.throwIfAborted(),await Promise.all([ln.promises.mkdir(s,{recursive:!0}),ln.promises.mkdir(c,{recursive:!0})]);let l=this.createMirrorStore(),p=this.createWorkspaceStore(l);return await Promise.all(i.map(async u=>{let g=u.type==="remoteRenamed"&&u.oldRemotePath?u.oldRemotePath:u.remotePath,m=Me(g),f=Ut.join(s,m),y=Ut.join(c,m);await Promise.all([(async()=>{try{this.task.throwIfAborted(),await ln.promises.mkdir(Ut.dirname(f),{recursive:!0}),await ln.promises.copyFile(l.toLocalPath(g),f),await this.copyBaseMetaFile(l.root,s,m,g)}catch(C){tt.debug(`capture merge base failed for ${g}`,C)}})(),(async()=>{try{this.task.throwIfAborted(),await ln.promises.mkdir(Ut.dirname(y),{recursive:!0}),await ln.promises.copyFile(p.toLocalPath(g),y)}catch(C){tt.debug(`backup workspace file failed for ${g}`,C)}})()])})),s}async copyBaseMetaFile(e,t,n,o){let i=Ut.dirname(n),a=Ut.join(e,i,Q),s=Ut.join(t,i,Q);try{this.task.throwIfAborted(),await ln.promises.mkdir(Ut.dirname(s),{recursive:!0}),await ln.promises.copyFile(a,s)}catch(c){tt.debug(`capture merge base meta failed for ${o}`,c)}}};var Pl=E(require("fs")),Um=E(require("path"));F();Ee();B();Cn();K();Ke();er();var wD;function Lm(){return wD}Y();D();Na();ut();Mr();var Nm=E(require("path"));Ke();Y();F();er();var PD=T("sync.meta-repair"),gw="unreadableMeta",yw="blockedMetaPath",Sl=class{constructor(e){this.workspace=e}async repair(e){let t=new Set(e.suspectMetaPaths),n=new Map,o=[],i=new Set;for(let s of t)await this.getWorkItem(s,n,o);for(let s of e.localChanges)await this.repairChange(s,t,n,o,i);let a=[];for(let s of n.values())!s.changed||s.blocked||(await Kc(this.workspace.root,s.metaPath,s.dotMeta),a.push(s.metaPath));return{repairedMetaPaths:a,affectedRemotePaths:[...i].sort(),failures:o}}async repairChange(e,t,n,o,i){if(e.type==="deleted"){await this.repairDeleted(e,t,n,o,i);return}if(e.type==="modified"){await this.repairModified(e,t,n,o,i);return}e.type==="renamed"&&e.oldRemotePath&&await this.repairRenamed(e,t,n,o,i)}async repairDeleted(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a))return;let s=await this.getWorkItem(a,n,o);if(!s||s.blocked)return;let c=this.getDotMetaKey(e.remotePath);s.dotMeta[c]&&(delete s.dotMeta[c],s.changed=!0,i.add(e.remotePath))}async repairModified(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a))return;let s=await this.getWorkItem(a,n,o);if(!s||s.blocked)return;let c=this.getDotMetaKey(e.remotePath);if(s.dotMeta[c])return;let l=await this.readMirrorMeta(e.remotePath);l&&(s.dotMeta[c]=this.cloneMetaInfo(l),s.changed=!0,i.add(e.remotePath))}async repairRenamed(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.oldRemotePath),s=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a)&&!t.has(s))return;let c=await this.getWorkItem(a,n,o),l=await this.getWorkItem(s,n,o);if(!c||!l||c.blocked||l.blocked)return;let p=this.getDotMetaKey(e.oldRemotePath),u=this.getDotMetaKey(e.remotePath),g=c.dotMeta[p]??await this.readMirrorMeta(e.oldRemotePath);!l.dotMeta[u]&&g&&(l.dotMeta[u]=this.cloneMetaInfo(g),l.changed=!0),c.dotMeta[p]&&(delete c.dotMeta[p],c.changed=!0),i.add(e.remotePath),i.add(e.oldRemotePath)}async getWorkItem(e,t,n){let o=t.get(e);if(o)return o;let i;try{i=await Er(this.workspace.root,e)}catch(c){if(!this.isBlockedMetaPathError(c))throw c;let l={metaPath:e,dotMeta:{},changed:!1,blocked:!0};return n.push({path:e,errorInfo:yw}),this.logRepairFailure(e,yw),t.set(e,l),l}let a=this.normalizeDotMeta(i.dotMeta),s={metaPath:e,dotMeta:a.dotMeta,changed:!!i.damaged||a.changed,blocked:i.repairable===!1};return s.blocked&&(n.push({path:e,errorInfo:gw}),this.logRepairFailure(e,gw)),t.set(e,s),s}isBlockedMetaPathError(e){let t=no(e);return t==="ENOTDIR"||t==="EISDIR"}logRepairFailure(e,t){PD.warn(["workspace meta repair failed",`workspaceRoot=${this.workspace.root}`,`mirrorRoot=${this.workspace.getMirrorRoot()}`,`path=${e}`,`errorInfo=${String(t)}`].join(`
|
|
71
|
+
`))}normalizeDotMeta(e){let t={},n=!1;for(let o of Object.keys(e)){let i=e[o];if(typeof i=="object"&&i!==null&&!Array.isArray(i)){t[o]=i;continue}n=!0}return{dotMeta:t,changed:n}}async readMirrorMeta(e){let t=this.getDotMetaMetaPath(e);return(await Er(this.workspace.getMirrorRoot(),t)).dotMeta[this.getDotMetaKey(e)]}cloneMetaInfo(e){return{...e,option:e.option?{...e.option}:void 0,customOption:e.customOption?{...e.customOption}:void 0}}getDotMetaMetaPath(e){let t=Nm.posix.dirname(e);return t==="/"?"/"+Q:t+"/"+Q}getDotMetaKey(e){return Nm.posix.basename(e)}};bo();_a();ym();var Cw="10Mb";var RD=/^\s*(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?\s*$/i,bD={b:1,kb:1024,mb:1048576,gb:1073741824};function ED(r,e=10485760){let t=RD.exec(r);if(!t)return e;let n=Number(t[1]),o=(t[2]??"b").toLowerCase(),i=bD[o]??1;return Math.floor(n*i)}var Wm=class{reader;writer;autoPushValue=!1;autoPushDelayValue=2e3;autoPullValue=!1;autoPullIntervalValue=60;syncIgnoreValue=[];maxPushFileSizeValue=Cw;configure(e,t){this.reader=e,this.writer=t,this.load()}load(){let e=this.reader;e&&(this.autoPushValue=e("sync.autoPush",!1),this.autoPushDelayValue=e("sync.autoPushDelay",2e3),this.autoPullValue=e("sync.autoPull",!1),this.autoPullIntervalValue=e("sync.autoPullInterval",60),this.syncIgnoreValue=e("sync.ignore",[]),this.maxPushFileSizeValue=e("sync.maxPushFileSize",Cw))}get autoPush(){return this.autoPushValue}get autoPushDelay(){return this.autoPushDelayValue}get autoPull(){return this.autoPullValue}get autoPullInterval(){return this.autoPullIntervalValue}get conflictStrategy(){return"ask"}get syncIgnore(){return[...this.syncIgnoreValue]}get maxPushFileSizeBytes(){return ED(this.maxPushFileSizeValue,10485760)}async setAutoPush(e){this.autoPushValue=e,await this.writer?.("sync.autoPush",e),this.load()}},wt=new Wm;var Re=T("sync.push"),vl=class extends Ai{targets;localChanges=0;remoteChanges=0;requests=0;missingParentCreates=0;workspaceMetaRepairCandidates=0;workspaceMetaRepairRepaired=0;workspaceMetaRepairFailures=0;requestsByType={};preflightFailures=0;preflightFailuresByReason={};pushed=0;rejected=0;failures=0;remoteDetector;recordRequests(e){this.requests=e.length,this.requestsByType={};for(let t of e)this.incrementCounter(this.requestsByType,t.action)}recordPreflightFailures(e){this.preflightFailures+=e.length;for(let t of e)this.incrementCounter(this.preflightFailuresByReason,this.getFailureReason(t))}recordResult(e){this.pushed=e.pushed.length,this.rejected=e.rejected.length,this.failures=e.failures.length}createSnapshot(){return{runs:this.runs,durationMs:this.durationMs,...this.targets!==void 0?{targets:this.targets}:{},localChanges:this.localChanges,remoteChanges:this.remoteChanges,requests:this.requests,missingParentCreates:this.missingParentCreates,workspaceMetaRepairCandidates:this.workspaceMetaRepairCandidates,workspaceMetaRepairRepaired:this.workspaceMetaRepairRepaired,workspaceMetaRepairFailures:this.workspaceMetaRepairFailures,requestsByType:{...this.requestsByType},preflightFailures:this.preflightFailures,preflightFailuresByReason:{...this.preflightFailuresByReason},pushed:this.pushed,rejected:this.rejected,failures:this.failures,...this.remoteDetector?{remoteDetector:this.remoteDetector}:{},api:this.api}}getFailureReason(e){let t=e.errorInfo;if(!t||typeof t!="object")return"unknown";let n=t.reason;if(n!=null)return String(n);let o=t.errorCode;if(typeof o=="string"&&o.length>0)return o;let i=t.errorType;return typeof i=="string"&&i.length>0?i:"unknown"}incrementCounter(e,t){e[t]=(e[t]??0)+1}},kl=class extends je{constructor(e,t){super(e,t)}diagnostics=new vl;apiClient;pushContext=this.context;pushOptions=this.options;workspaceRootPath=this.workspaceRoot;mirrorRootPath=this.mirrorRoot;pushResult=this.createEmptyPushResult();run=this.createEmptyRunState();async execute(){this.beginPushRun();for(let e of this.createPushStageTasks())await e.run();return this.finishPush(this.run.startedAt)}beginPushRun(){this.assertNoRemoteProjectUnavailableChanges(this.options.changes,"push"),this.assertNoProjectRootRenameChanges(this.options.changes,"push"),this.pushResult=this.createEmptyPushResult(),this.run={...this.createEmptyRunState(),startedAt:this.diagnostics.startRun()},Re.info("push start: {0}",this.createPushScopeLog()),this.task.start(100,{message:d("workspace.sync.progress.push.running"),retainOnFinish:!0})}createPushScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}getDiagnostics(e={}){if(this.apiClient){let n=this.apiClient.getDiagnostics();n&&this.diagnostics.captureApiDiagnostics(n)}let t=this.diagnostics.createSnapshot();return e.reset&&(this.diagnostics=new vl,this.apiClient=void 0),t}finishPush(e){if(this.diagnostics.recordResult(this.pushResult),this.apiClient){let t=this.apiClient.getDiagnostics();t&&this.diagnostics.captureApiDiagnostics(t)}return this.diagnostics.finishRun(e),Re.info("push done: pushed={0} rejected={1} failures={2}",this.pushResult.pushed.length,this.pushResult.rejected.length,this.pushResult.failures.length),Re.debug(`push diagnostics ${this.diagnostics.describeForLog()}`),this.task.setMessage(d("workspace.sync.progress.push.done",this.pushResult.pushed.length,this.pushResult.rejected.length,this.pushResult.failures.length)),this.task.finish(),this.pushResult}createEmptyRunState(){return{startedAt:0,localChanges:[],workspaceMetaRepairPaths:[],missingParentFolderCreates:[],remoteChanges:[],requests:[]}}createPushStageTasks(){let e=this.task.subTaskMonitor(20),t=this.task.subTaskMonitor(20),n=this.task.subTaskMonitor(54),o=this.task.subTaskMonitor(3),i=this.task.subTaskMonitor(3);return e.start(5),[new jm(this,e),new Bm(this,e),new Vm(this,e),new qm(this,e),new $m(this,e),new Hm(this,t),new zm(this,n,o,i)]}canContinuePushPipeline(){return this.pushResult.rejected.length===0&&this.pushResult.failures.length===0}hasPushRequests(){return this.run.requests.length>0}finishTask(){this.task.setMessage(d("workspace.sync.progress.push.stopped")),this.task.finish()}isForcePush(){return!!this.options.force}expandPushTargetsForRenameChanges(e,t){return this.expandTargetsForRenameChanges(e,t)}async getApiClientForPush(){let e=await this.getApiClient();return this.apiClient=e,e}async uploadFileMutation(e,t){return await this.notifySyncPushFileRequest(t),t.action==="create"?e.createFile(this.toApiFileMutationRequest(t)):t.action==="modify"?e.modifyFile(this.toApiModifyFileRequest(t)):t.action==="move"?(z(t.targetPath,`targetPath is required when moving file: ${t.path}`),e.moveFile(this.toApiMoveFileRequest(t,t.targetPath))):e.deleteFile(t.path,{expectedRevision:t.expectedRevision===null?void 0:t.expectedRevision,expectedModifyTime:t.expectedModifyTime===null?void 0:t.expectedModifyTime})}notifySyncPushFileRequest(e){return this.options.onSyncPushFileRequest?.(e)}toApiFileMutationRequest(e){let{action:t,contentValidated:n,...o}=e;return o}toApiModifyFileRequest(e){let t=this.toApiFileMutationRequest(e);return{...t,expectedRevision:this.toWriteExpectedRevision(t.expectedRevision)}}toApiMoveFileRequest(e,t){let n=this.toApiFileMutationRequest(e);return{...n,targetPath:t,expectedRevision:this.toWriteExpectedRevision(n.expectedRevision)}}toWriteExpectedRevision(e){return e===null?void 0:e}reportPushDiagnostic(e,t,n){this.reportDiagnostic({path:e,message:t,errorInfo:n})}createEmptyPushResult(){return{pushed:[],rejected:[],failures:[]}}formatTargetsForLog(e){return e?`${e.size}`:"<all>"}reportPushFailure(e,t){this.reportDiagnostic({path:e.path,message:t,errorInfo:e.errorInfo})}},$a=class{constructor(e,t){this.command=e;this.task=t}async run(){this.shouldRun()&&await this.doRun()}shouldRun(){return!0}async isFolderPath(e,t){try{return(await Pl.promises.stat(ae(e,t))).isDirectory()}catch(n){if(x(n))return Re.debug(`sync folder path does not exist: ${e}:${t}`),!1;throw n}}getParentPaths(e){let t=e.replace(/^\/+|\/+$/g,"").split("/").filter(Boolean),n=[];for(let o=0;o<t.length-1;o++)n.push("/"+t.slice(0,o+1).join("/"));return n}},jm=class extends $a{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.collectLocalChanges()}async collectLocalChanges(){Re.info("push prepare start");let{targets:e,localChanges:t}=await this.getLocalChangesForPush();this.command.run.targets=e,this.command.run.localChanges=t,this.command.diagnostics.targets=e?.size,this.command.diagnostics.localChanges=t.length,Re.info("push local changes prepared: targets={0} local={1}",this.command.formatTargetsForLog(e),t.length)}async getLocalChangesForPush(){let e=this.command.pushOptions;if(this.command.hasKnownChanges(e.changes))return this.task.finish(),{targets:new Set(this.command.getKnownChangeTargetRemotePaths(e.changes)),localChanges:e.changes};this.task.start(2);let t=this.task.subTaskMonitor(1),n=this.task.subTaskMonitor(1);t.start(1);let o=this.normalizeDotMetaTargets(await this.command.resolveTargetRemotePaths(e.paths)),i=o?new Set(St(o)):void 0;return t.step(1),await this.refreshTargetChangesForPush(i,n),{targets:i,localChanges:this.command.filterChangesByTargets(this.command.pushContext.getSyncChanges().filter(a=>mt(a)),i)}}async refreshTargetChangesForPush(e,t){if(!e){await this.command.pushContext.refreshSyncStatus(t);return}if(e.size===0){t.finish();return}if(await this.hasDirectoryTarget(e)){await this.command.pushContext.refreshSyncStatus(t);return}t.start(1),await this.command.pushContext.consumeFileChanges([...e].map(n=>({filePath:ae(this.command.workspaceRootPath,n),type:"changed"}))),t.step(1)}async hasDirectoryTarget(e){return(await Promise.all([...e].map(async n=>await this.isDirectoryTarget(this.command.workspaceRootPath,n)||await this.isDirectoryTarget(this.command.mirrorRootPath,n)))).some(Boolean)}async isDirectoryTarget(e,t){try{return(await Pl.promises.stat(ae(e,t))).isDirectory()}catch(n){return x(n)?(Re.debug(`push target is not a directory: ${e}:${t}`),!1):(Re.debug(`push target stat failed, fallback to full status: ${e}:${t}`,n),!0)}}normalizeDotMetaTargets(e){if(!e)return;let t=new Set;for(let n of e){if(Um.posix.basename(n)===Q){t.add(Um.posix.dirname(n));continue}t.add(n)}return t}},Bm=class extends $a{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.repairWorkspaceMeta()}async repairWorkspaceMeta(){this.task.start(1),this.command.run.workspaceMetaRepairPaths=Jk(this.command.run.localChanges),this.command.diagnostics.workspaceMetaRepairCandidates=this.command.run.workspaceMetaRepairPaths.length,Re.info("push workspace metadata repair start: candidates={0}",this.command.run.workspaceMetaRepairPaths.length);let e=await new Sl(this.command.pushContext).repair({suspectMetaPaths:this.command.run.workspaceMetaRepairPaths,localChanges:this.command.run.localChanges});this.command.diagnostics.workspaceMetaRepairRepaired=e.repairedMetaPaths.length,this.command.diagnostics.workspaceMetaRepairFailures=e.failures.length,this.task.step(1),Re.info("push workspace metadata repair done: failures={0}",e.failures.length),e.failures.length>0&&(this.command.finishTask(),this.command.pushResult.failures.push(...e.failures))}},Li=class extends $a{shouldRun(){return this.command.canContinuePushPipeline()}},Vm=class extends Li{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.analyzeParentFolders()}async analyzeParentFolders(){if(this.task.start(1),Re.info("push parent folder analysis start"),this.command.run.missingParentFolderCreates=await this.collectMissingParentFolderCreates(this.command.run.localChanges),this.command.diagnostics.missingParentCreates=this.command.run.missingParentFolderCreates.length,this.command.run.operationTargets=this.command.expandPushTargetsForRenameChanges(this.command.run.targets,this.command.run.localChanges),this.command.run.operationTargets)for(let e of this.command.run.missingParentFolderCreates)this.command.run.operationTargets.add(e);this.task.step(1),Re.info("push parent folder analysis done: missingParents={0}",this.command.run.missingParentFolderCreates.length)}async collectMissingParentFolderCreates(e){let t=new Set,n=new Set;for(let o of e)o.isFolder&&(o.type==="added"||o.type==="renamed")&&n.add(o.remotePath);for(let o of e)if(!(o.type!=="added"&&o.type!=="modified"&&o.type!=="renamed"))for(let i of this.getParentPaths(o.remotePath))n.has(i)||t.has(i)||await this.isFolderPath(this.command.mirrorRootPath,i)||!await this.isFolderPath(this.command.workspaceRootPath,i)||t.add(i);return[...t].sort((o,i)=>{let a=_r(o)-_r(i);return a!==0?a:o.localeCompare(i)})}},qm=class extends Li{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.checkRemoteChanges()}async checkRemoteChanges(){if(this.task.start(1),Re.info("push remote change check start: {0}",this.command.formatTargetsForLog(this.command.run.operationTargets)),this.command.run.remoteChanges=await this.getRemoteChangesForPush(this.command.run.operationTargets),this.command.diagnostics.remoteChanges=this.command.run.remoteChanges.length,this.task.step(1),Re.info("push remote change check done: remote={0}",this.command.run.remoteChanges.length),this.command.run.remoteChanges.length>0&&!this.command.isForcePush()){this.command.finishTask(),this.command.pushResult.rejected.push(...this.command.run.remoteChanges);for(let e of this.command.run.remoteChanges)Re.info("push item done: status=rejected path={0}",e.remotePath)}}async getRemoteChangesForPush(e){if(this.command.hasKnownChanges(this.command.pushOptions.changes)||!e)return this.command.filterChangesByTargets(this.command.pushContext.getSyncChanges().filter(o=>Tr(o)),e);if(e.size===0)return[];let t=new jr({workspace:this.command.pushContext,targets:e,task:this.task}),n=await t.detect();return this.command.diagnostics.remoteDetector=t.getDiagnostics(),this.command.filterChangesByTargets(n,e)}},$m=class extends Li{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.buildPushRequests()}async buildPushRequests(){this.task.start(1),Re.info("push request build start: local={0}",this.command.run.localChanges.length),this.command.run.requests=await this.createPushRequests(this.command.run.localChanges,this.command.run.missingParentFolderCreates),this.command.diagnostics.recordRequests(this.command.run.requests),this.task.step(1),Re.info("push request build done: requests={0}",this.command.run.requests.length),this.command.run.requests.length===0&&this.command.finishTask()}async createPushRequests(e,t=[]){let n=[],o=[],i=new Set,a=new Set,s=new Set(t);for(let c of this.sortChangesForPush(this.filterDerivedFolderRenameChanges(e))){if(c.type==="renamed"&&c.oldRemotePath){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n);let l=this.getMovedFolderChildSource(c.oldRemotePath,o);if(l===c.remotePath){(c.contentChanged||c.metaChanged)&&n.push(await this.createModifyRequest(c,c.oldRemotePath,!0));continue}n.push(await this.createMoveRequest(c,l)),c.isFolder&&(o.push({oldRemotePath:c.oldRemotePath,newRemotePath:c.remotePath}),a.add(c.remotePath));continue}if(c.type==="added"){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n),n.push(await this.createCreateRequest(c.remotePath,c.isFolder)),c.isFolder&&a.add(c.remotePath);continue}if(c.type==="modified"){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n),n.push(await this.createModifyRequest(c));continue}c.type==="deleted"&&n.push(await this.createDeleteRequest(c.remotePath,c.isFolder))}return n}async appendMissingParentFolderCreates(e,t,n,o,i){for(let a of this.getParentPaths(e))if(!(o.has(a)||!t.has(a)||a==="/"||n.has(a))){if(await this.isFolderPath(this.command.mirrorRootPath,a)){n.add(a);continue}i.push(await this.createCreateRequest(a,!0)),o.add(a),n.add(a)}}filterDerivedFolderRenameChanges(e){let t=e.filter(n=>n.type==="renamed"&&n.isFolder&&!!n.oldRemotePath);return t.length===0?e:e.filter(n=>n.type!=="renamed"||!n.oldRemotePath?!0:!t.some(o=>{if(o===n)return!1;let i=o.oldRemotePath,a=o.remotePath;if(!ee(n.oldRemotePath,i)||!ee(n.remotePath,a))return!1;let s=n.oldRemotePath.slice(i.length),c=n.remotePath.slice(a.length);return s===c&&!n.contentChanged&&!n.metaChanged}))}async createCreateRequest(e,t){let n=this.command.workspaceRootPath,o={path:e,action:"create",isFolder:t,expectedRevision:null,expectedModifyTime:null,metaInfo:Ro(await Ue(n,e,{strict:!0})),metaInfoChanged:!0};return t||(o.localContentPath=ae(n,e),o.contentChanged=!0),o}async createModifyRequest(e,t=e.remotePath,n=!1){let o=this.command.workspaceRootPath,i=await Ue(this.command.mirrorRootPath,t);if(!i)throw new Ht("err.sync.conflict",{remotePath:e.remotePath,reason:"remoteVersionChanged"});let a=!e.isFolder&&!!e.contentChanged,s={path:e.remotePath,action:"modify",isFolder:e.isFolder,expectedRevision:this.command.isForcePush()||e.isFolder?void 0:i.revision??0,expectedModifyTime:this.command.isForcePush()||n?void 0:i.modifyTime??0,metaInfo:Ro(await Ue(o,e.remotePath,{strict:!0})),metaInfoChanged:!!e.metaChanged};return a&&(s.localContentPath=ae(o,e.remotePath),s.contentChanged=!0),s}async createMoveRequest(e,t){if(!e.oldRemotePath)throw new Ht("err.sync.conflict",{remotePath:e.remotePath,reason:"remoteVersionChanged"});let n=this.command.workspaceRootPath,o=await Ue(this.command.mirrorRootPath,e.oldRemotePath);if(!o)throw new Ht("err.sync.conflict",{remotePath:e.oldRemotePath,reason:"remoteVersionChanged"});let i=Ro(await Ue(n,e.remotePath,{strict:!0})),a={path:t??e.oldRemotePath,targetPath:e.remotePath,action:"move",isFolder:e.isFolder,expectedRevision:this.command.isForcePush()||e.isFolder?void 0:o.revision??0,expectedModifyTime:this.command.isForcePush()||e.isFolder||t?void 0:o.modifyTime??0,metaInfo:i,metaInfoChanged:!!e.metaChanged};return!e.isFolder&&e.contentChanged&&(a.localContentPath=ae(n,e.remotePath),a.contentChanged=!0),a}getMovedFolderChildSource(e,t){for(let n of[...t].reverse())if(!(e===n.oldRemotePath||!ee(e,n.oldRemotePath)))return n.newRemotePath+e.slice(n.oldRemotePath.length)}async createDeleteRequest(e,t){let n=await Ue(this.command.mirrorRootPath,e);if(!n)throw new Ht("err.sync.conflict",{remotePath:e,reason:"remoteVersionChanged"});return{path:e,action:"delete",expectedRevision:this.command.isForcePush()||t?void 0:n.revision??0,expectedModifyTime:this.command.isForcePush()||t?void 0:n.modifyTime??0}}sortChangesForPush(e){let t=n=>n.type==="deleted"?-_r(n.remotePath):n.type==="renamed"?10:n.type==="added"?20+_r(n.remotePath):30+_r(n.remotePath);return[...e].sort((n,o)=>{let i=t(n),a=t(o);return i!==a?i-a:n.remotePath.localeCompare(o.remotePath)})}},wl=class extends Li{shouldRun(){return super.shouldRun()&&this.command.hasPushRequests()}async validatePushRequest(e){let t=wt.maxPushFileSizeBytes;if(e.localContentPath)try{let n=await Pl.promises.stat(e.localContentPath);if(t>0&&n.size>t){let o={path:e.path,errorInfo:{reason:"fileTooLarge",message:`File is larger than configured push limit: ${e.path}`,size:n.size,limit:t}};return this.command.reportPushFailure(o,"push validation failed"),o}if(await Kk(e.localContentPath)){let o={path:e.path,errorInfo:{reason:"conflictMarkers",message:`File contains unresolved conflict markers: ${e.path}`}};return this.command.reportPushFailure(o,"push validation failed"),o}}catch(n){let o={path:e.path,errorInfo:{reason:"fileReadFailed",message:`Failed to validate push file content: ${e.path}`,cause:n instanceof Error?n.message:String(n)}};return this.command.reportPushFailure(o,"push validation failed"),o}}},Hm=class extends wl{doRun(){return this.preflightPushRequests()}async preflightPushRequests(){Re.info("push preflight start: requests={0}",this.command.run.requests.length);let e=await this.validatePushRequestsBeforePush(this.command.run.requests);this.command.diagnostics.recordPreflightFailures(e),Re.info("push preflight done: failures={0}",e.length),e.length>0&&(this.command.finishTask(),this.command.pushResult.failures.push(...e))}async validatePushRequestsBeforePush(e){let t=[];if(this.task.start(Math.max(e.length,1)),e.length===0)return this.task.step(1),t;let n=e.map(o=>({request:o,task:this.task.subTaskMonitor(1)}));for(let{request:o,task:i}of n){this.task.throwIfAborted(),i.start(1);let a=await this.validatePushRequest(o);if(a){t.push(a),i.progress(1);continue}o.contentValidated=!0,i.step(1)}return t}},zm=class extends wl{constructor(t,n,o,i){super(t,n);this.resultTask=o;this.doneTask=i}doRun(){return this.uploadPushRequests()}async uploadPushRequests(){Re.info("push upload start: requests={0}",this.command.run.requests.length);let t=await this.pushRequests(this.command.run.requests);this.command.pushResult={pushed:[...t.pushed],rejected:[...t.rejected],failures:[...t.failures],...t.metadataVersionSuggestions?{metadataVersionSuggestions:[...t.metadataVersionSuggestions]}:{}},Re.info("push upload done: pushed={0} failures={1}",this.command.pushResult.pushed.length,this.command.pushResult.failures.length),this.doneTask.finish()}async pushRequests(t){let n=await this.command.getApiClientForPush(),o=[],i=[];this.task.start(Math.max(t.length,1)),t.length===0&&this.task.step(1);try{for(let l of t){this.task.throwIfAborted();let p=await this.preparePushRequestForUpload(l);if(p){i.push(p),Re.info("push item done: status=failed path={0}",p.path),this.task.step(1);continue}try{let u=await this.command.uploadFileMutation(n,l);if(!u.success){let g={path:u.path,errorInfo:u.errorInfo};this.command.reportPushFailure(g,"push item failed")}o.push(u),Re.info("push item done: status={0} path={1}",u.success?"pushed":"failed",u.path)}catch(u){let g=this.createPushFailureFromMutationError(l,u);if(!g)throw u;i.push(g),this.command.reportPushFailure(g,"push item failed"),Re.info("push item done: status=failed path={0}",g.path)}this.task.step(1)}}catch(l){throw await this.applyPushResponsesWithProgress(o),l}let a=await this.applyPushResponsesWithProgress(o),s=await this.createMetadataVersionSuggestions(t,o),c=s.length>0?{...a,metadataVersionSuggestions:s}:a;return i.length===0?c:{...c,failures:[...c.failures,...i]}}createPushFailureFromMutationError(t,n){if(!(n instanceof or))return;let o=n.remoteError?this.toMutationErrorInfo(ba(yn(n.remoteError),{action:t.action,path:t.path,targetPath:t.targetPath}),n):void 0;if(!(!o||!this.isMutationBlockedErrorInfo(o,t)))return{path:this.getMutationFailurePath(t,o),errorInfo:o}}toMutationErrorInfo(t,n){let o=n.remoteError;return{errorCode:t.errorCode??o?.errorCode??n.errorCode,errorType:t.errorType??o?.errorType??n.errorType,message:t.message??o?.message??n.message,properties:Ot(t)}}isMutationBlockedErrorInfo(t,n){return mv(t,{action:n.action,path:n.path,targetPath:n.targetPath})}getMutationFailurePath(t,n){let o=Ot(n)?.path;return typeof o=="string"&&o.length>0?o:this.getRequestTargetPath(t)}async applyPushResponsesWithProgress(t){this.resultTask.start(Math.max(t.length,1));let n=await this.applyPushResponses(t);return this.resultTask.step(Math.max(t.length,1)),n}async applyPushResponses(t){let n=new kt(this.command.mirrorRootPath),o=new ur(this.command.workspaceRootPath,n);await new Mi({workspace:o,mirror:n,getApiClient:()=>this.command.getApiClientForPush()}).apply(t);let i=t.filter(s=>s.success).map(s=>s.path);return i.length>0&&this.command.pushContext.clearSyncStatusTargets(i),{pushed:i,rejected:[],failures:t.filter(s=>!s.success).map(s=>({path:s.path,errorInfo:s.errorInfo}))}}async preparePushRequestForUpload(t){return t.contentValidated?void 0:this.validatePushRequest(t)}async createMetadataVersionSuggestions(t,n){let o=new Set(n.filter(s=>s.success).map(s=>s.path));if(o.size===0)return[];let i=[],a=new Set;for(let s of t){if(!this.shouldCheckMetadataVersionSuggestion(s,o))continue;let c=this.getRequestTargetPath(s);if(a.has(c))continue;let l=await this.createMetadataVersionSuggestion(s,c);l&&(a.add(c),i.push(l))}return i}shouldCheckMetadataVersionSuggestion(t,n){if(!t.localContentPath||!t.contentChanged||t.isFolder||t.action==="delete")return!1;let o=this.getRequestTargetPath(t);return n.has(o)||n.has(t.path)}async createMetadataVersionSuggestion(t,n){try{let o=t.localContentPath;if(!o)return;let i=(await this.command.pushContext.getMetadataVersionCatalog()).getInfoByPath(n),a=i?.contentVersion;if(!i?.upgradeSupported||!a)return;let s=await zc(o),c=this.getMetadataVersionSuggestionKind(s,a);return c?{path:n,currentVersion:s,targetVersion:a,metaType:i.metaType,kind:c}:void 0}catch(o){Re.debug(`push metadata suggestion check failed: ${n}`,o);return}}getMetadataVersionSuggestionKind(t,n){return ol(t,n)?"newer":nl(t,n)?"older":void 0}getRequestTargetPath(t){return t.targetPath??t.path}};wm();ut();F();B();K();Y();D();Mr();var It=T("sync.reset"),Rl=class extends je{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){It.info("reset start: {0}",this.createResetScopeLog()),this.task.start(100,{message:d("workspace.sync.progress.reset.running"),retainOnFinish:!0});let e=this.task.subTaskMonitor(8),t=this.task.subTaskMonitor(87),n=this.task.subTaskMonitor(3),o=this.task.subTaskMonitor(2);e.start(4),It.info("reset prepare start");let{targets:i,localChanges:a}=await this.prepareResetScope();e.step(1),It.info("reset targets resolved: {0}",this.formatTargetsForLog(i)),It.info("reset local changes checked: local={0}",a.length),a.length>0&&!this.options.force&&this.throwFirstConflict(a,"requiresOverwrite"),e.step(1);let s=this.expandTargetsForRenameChanges(i,a),c=s?this.sortRemotePathsForCheckout(St(s)):this.sortRemotePathsForCheckout(await this.workspace.listProjectPaths());e.step(1),It.info("reset checkout target paths prepared: paths={0}",c.length),It.debug(`reset checkout target paths: ${c.join("|")}`);let l=await this.createCheckoutItems(c);e.step(1),It.info("reset checkout items prepared: items={0} resources={1}",l.length,l.reduce((g,m)=>g+m.total,0));for(let g of l)It.debug(`reset checkout item: remotePath=${g.remotePath} existsInMirror=${g.existsInMirror} total=${g.total}`);It.info("reset checkout start: items={0}",l.length);let p=await this.checkoutMirrorToWorkspace(l,t);It.info("reset checkout done: updated={0} deleted={1}",p.updated.length,p.deleted.length);let u=[...p.updated,...p.deleted];return n.start(1),It.info("reset cleanup status start"),await this.cleanupEmptyOrphanParents(p.deleted,this.mirror,this.workspace),u.length>0&&this.clearSyncStatusTargets(u),n.step(1),It.info("reset cleanup status done"),o.finish(),It.info("reset done: updated={0} deleted={1}",p.updated.length,p.deleted.length),this.task.setMessage(d("workspace.sync.progress.reset.done",p.updated.length,p.deleted.length)),this.task.finish(),p}createResetScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}async prepareResetScope(){if(this.hasKnownChanges(this.options.changes)){let t=this.options.changes.filter(mt);return{targets:this.getKnownChangeTargets(t),localChanges:t}}let e=await this.resolveTargetRemotePaths(this.options.paths,"mirror-only");return{targets:e,localChanges:this.filterChangesByTargets(this.getLocalSyncChanges(),e)}}formatTargetsForLog(e){return e?`targets=${e.size}`:"<all>"}async checkoutMirrorToWorkspace(e,t){let n=[],o=[];if(e.length===0)return t.finish(),{updated:n,deleted:o};t.start(e.reduce((a,s)=>a+s.total,0));let i=e.map(a=>({...a,task:t.subTaskMonitor(a.total)}));for(let a of i){t.throwIfAborted(),a.task.start(a.total);let s=Date.now();It.debug(`reset item start: remotePath=${a.remotePath} existsInMirror=${a.existsInMirror} total=${a.total}`),a.existsInMirror?(await this.workspace.checkoutFromMirror(a.remotePath,a.task),t.throwIfAborted(),n.push(a.remotePath)):(await this.workspace.deletePath(a.remotePath,a.task),t.throwIfAborted(),o.push(a.remotePath)),It.debug(`reset item done: remotePath=${a.remotePath} elapsed=${Date.now()-s}ms`)}return t.finish(),{updated:n,deleted:o}}async createCheckoutItems(e){return Promise.all(e.map(async t=>{let n=await this.mirror.exists(t);return{remotePath:t,existsInMirror:n,total:await this.countCheckoutTotal(t,n)}}))}async countCheckoutTotal(e,t){let n=await(t?this.workspace.countCheckoutResources(e):this.workspace.countResources([e]));return Math.max(n,1)}throwFirstConflict(e,t){let n=e[0];throw new Ht("err.sync.conflict",{remotePath:n.remotePath,reason:t})}sortRemotePathsForCheckout(e){return e.sort((t,n)=>t.localeCompare(n))}};var Km=E(require("fs")),Ha=E(require("path"));K();F();Y();D();ut();var MD=T("sync.restore-local"),bl=class extends Oi{constructor(e,t){super(e,t)}async execute(){this.task.start(1,{message:d("workspace.sync.progress.restore.running")});let e=this.options.change,t=Ha.join(this.workspaceRoot,".succapp",xo,Me(e.remotePath)),n=Ha.join(this.workspaceRoot,e.path);try{this.task.throwIfAborted(),await Km.promises.mkdir(Ha.dirname(n),{recursive:!0}),await Km.promises.copyFile(t,n)}catch(o){if(x(o))return MD.debug(`pull backup file does not exist: ${t}`),this.task.step(1),{restored:!1};throw o}return this.context.applySyncOperationResult(e,[{path:e.path,remotePath:e.remotePath,...e.fileId!==void 0?{fileId:e.fileId}:{},type:"modified",contentChanged:!0,metaChanged:!1}]),this.task.step(1),{restored:!0}}};var Fo=E(require("fs")),qr=E(require("path"));F();D();K();ut();var za=class extends Wt{async execute(){this.task.start(1,{message:d("workspace.sync.progress.backupList.running")});let e=await this.listEntries();return this.task.step(1),{workspaceRootPath:this.workspaceRoot,entries:e}}async listEntries(){let e=this.resolveFilterTargets(),t=await Sw(this.workspaceRoot);return e.length===0?t:t.filter(n=>e.some(o=>ee(n.path,o)))}resolveFilterTargets(){return(this.options.paths??[]).map(e=>xD(this.workspaceRoot,e))}},El=class extends je{async execute(){this.task.start(1,{message:d("workspace.sync.progress.backupClear.running")});let e=await new za(this.context,this.options).listEntries(),t=kw(this.workspaceRoot);if(!this.options.paths||this.options.paths.length===0)return await Fo.promises.rm(t,{recursive:!0,force:!0}),this.task.step(1),{workspaceRootPath:this.workspaceRoot,cleared:e,remaining:[]};for(let n of e)this.task.throwIfAborted(),await Fo.promises.rm(n.backupPath,{force:!0}),await FD(qr.dirname(n.backupPath),t);return this.task.step(1),{workspaceRootPath:this.workspaceRoot,cleared:e,remaining:await Sw(this.workspaceRoot)}}};async function Sw(r){let e=kw(r);return(await vw(e,e)).sort((n,o)=>n.path.localeCompare(o.path))}async function vw(r,e){let t=await Fo.promises.readdir(e,{withFileTypes:!0}).catch(o=>{if(x(o))return[];throw o}),n=[];for(let o of t){let i=qr.join(e,o.name);if(o.isDirectory()){n.push(...await vw(r,i));continue}if(!o.isFile())continue;let a=await Fo.promises.stat(i),s=qr.relative(r,i).replace(/\\/g,"/");n.push({path:le(s),backupPath:i,size:a.size,mtime:a.mtime.toISOString()})}return n}function xD(r,e){return le(Or(r,e)??e)}function kw(r){return qr.join(r,".succapp",xo)}async function FD(r,e){let t=r;for(;t!==e&&t.startsWith(e+qr.sep);){if((await Fo.promises.readdir(t).catch(o=>{if(x(o))return[];throw o})).length>0)return;await Fo.promises.rmdir(t),t=qr.dirname(t)}}Y();D();B();F();K();ut();var zn=T("sync.remove-project"),Tl=class extends je{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){let e=[...new Set(this.options.projectNames.map(l=>Ct(l)))];zn.info("remove local project start: {0}",e.join(", "));let[t,n]=await Promise.all([this.workspace.listProjectPaths(),this.mirror.listProjectPaths()]),o=new Set([...t,...n]),i=e.filter(l=>!o.has(l)).map(l=>l.slice(1));if(i.length>0)throw new ct("err.sync.projectNotFound",{projectNames:i.join(", ")});zn.info("remove local project resource count start: projects={0}",e.length);let a=await this.createRemoveItems(e);zn.info("remove local project resource count done: resources={0}",a.reduce((l,p)=>l+p.total,0)),this.task.start(Math.max(a.reduce((l,p)=>l+p.total,0),1),{message:d("workspace.sync.progress.removeProject.running"),retainOnFinish:!0}),a.length===0&&this.task.step(1),zn.info("remove local project files start: projects={0}",a.length);let s=a.map(l=>({...l,task:this.task.subTaskMonitor(l.total)}));for(let l of s)this.task.throwIfAborted(),l.task.start(l.total),await this.workspace.deletePath(l.projectPath,l.task),this.task.throwIfAborted(),await this.mirror.removePath(l.projectPath,l.task),this.task.throwIfAborted(),await this.mirror.removeMeta(l.projectPath);zn.info("remove local project files done: projects={0}",a.length);let c=e.map(l=>l.slice(1));return zn.info("remove local project cleanup status start"),this.clearSyncStatusTargets(e),zn.info("remove local project cleanup status done"),c.length>0&&this.context.notifyLocalProjectsChanged?.(),zn.info("remove local project done: {0}",c.join(", ")),this.task.setMessage(d("workspace.sync.progress.removeProject.done",c.length)),this.task.finish(),{projectNames:c}}async createRemoveItems(e){return Promise.all(e.map(async t=>{let[n,o]=await Promise.all([this.workspace.countResources([t]),this.mirror.countMetaResources([t])]);return{projectPath:t,total:Math.max(n+o,1)}}))}};var ww=E(require("fs")),Pw=E(require("path"));ut();D();var Ml=class extends Wt{async execute(){this.task.start(1,{message:d("workspace.sync.progress.show.running")});let e=this.options.source??"server",t=await this.resolveRemotePath(this.options.path,e==="mirror"?"mirror-only":"server-backed"),n;if(e==="mirror"){let o=this.createMirrorStore();n=await ww.promises.readFile(o.toLocalPath(t))}else n=(await(await this.getApiClient()).getFileContent(t,{revision:this.options.revision})).buffer;return this.task.step(1),{path:this.options.path,remotePath:t,fileName:Pw.basename(t),source:e,buffer:n}}};var Gm=E(require("fs"));ut();D();var xl=3,ID=/\r\n|\n|\r/,Il=class extends Wt{async execute(){let e=this.options.source??"server";this.task.start(Math.max(this.options.paths.length,1),{message:d("workspace.sync.progress.diff.running")});let t=await Promise.all(this.options.paths.map(async n=>{try{return this.task.throwIfAborted(),await this.diffFile(n,e)}finally{this.task.step()}}));return this.options.paths.length===0&&this.task.step(1),{source:e,items:t}}async diffFile(e,t){let n=await this.resolveRemotePath(e,t==="mirror"?"mirror-only":"server-backed"),o=this.createMirrorStore(),a=this.createWorkspaceStore(o).toLocalPath(n),[s,c]=await Promise.all([this.readSourceBuffer(n,t,o),Gm.promises.readFile(a)]),l=DD({sourceBuffer:s,workspaceBuffer:c,sourceLabel:`${t}:${n}`,workspaceLabel:`workspace:${n}`});return{path:e,remotePath:n,localPath:a,source:t,sourceSize:s.length,workspaceSize:c.length,changed:l.changed,binary:l.binary,patch:l.text}}async readSourceBuffer(e,t,n){return t==="mirror"?Gm.promises.readFile(n.toLocalPath(e)):(await(await this.getApiClient()).getFileContent(e)).buffer}};function DD(r){if(r.sourceBuffer.equals(r.workspaceBuffer))return{changed:!1,binary:Fl(r.sourceBuffer)||Fl(r.workspaceBuffer),text:""};if(Fl(r.sourceBuffer)||Fl(r.workspaceBuffer))return{changed:!0,binary:!0,text:[`diff --succapp ${r.sourceLabel} ${r.workspaceLabel}`,`Binary files ${r.sourceLabel} and ${r.workspaceLabel} differ`,""].join(`
|
|
72
|
+
`)};let e=bw(r.sourceBuffer),t=bw(r.workspaceBuffer),n=cw(e,t);return{changed:n.length>0,binary:!1,text:n.length===0?"":AD(r,e,t,n)}}function AD(r,e,t,n){let o=[`diff --succapp ${r.sourceLabel} ${r.workspaceLabel}`,`--- ${r.sourceLabel}`,`+++ ${r.workspaceLabel}`];for(let i of OD(e,t,n))o.push(...LD(i,e));return o.push(""),o.join(`
|
|
73
|
+
`)}function OD(r,e,t){let n=[];for(let o of t){let i=_D(r,e,o),a=n.at(-1);if(a&&i.oldStart<=a.oldEnd&&i.newStart<=a.newEnd){a.oldEnd=Math.max(a.oldEnd,i.oldEnd),a.newEnd=Math.max(a.newEnd,i.newEnd),a.patches.push(o);continue}n.push(i)}return n}function _D(r,e,t){let n=Math.max(0,t.buffer1.offset-xl),o=Math.max(0,t.buffer2.offset-xl);return{oldStart:n,oldEnd:Math.min(r.length,t.buffer1.offset+t.buffer1.length+xl),newStart:o,newEnd:Math.min(e.length,t.buffer2.offset+t.buffer2.length+xl),patches:[t]}}function LD(r,e){let t=[`@@ -${Rw(r.oldStart,r.oldEnd-r.oldStart)} +${Rw(r.newStart,r.newEnd-r.newStart)} @@`],n=r.oldStart;for(let o of r.patches){for(let i=n;i<o.buffer1.offset;i++)t.push(` ${e[i]}`);t.push(...o.buffer1.chunk.map(i=>`-${i}`)),t.push(...o.buffer2.chunk.map(i=>`+${i}`)),n=o.buffer1.offset+o.buffer1.length}for(let o=n;o<r.oldEnd;o++)t.push(` ${e[o]}`);return t}function Rw(r,e){return e===0?`${r}`:e===1?`${r+1}`:`${r+1},${e}`}function bw(r){let e=r.toString("utf8");if(e.length===0)return[];let t=e.split(ID);return t.at(-1)===""&&t.pop(),t}function Fl(r){return r.includes(0)}ut();D();var Dl=class extends Wt{async execute(){this.task.start(1,{message:d("workspace.sync.progress.history.running")});let e=await this.resolveRemotePath(this.options.path,"server-backed"),n=await(await this.getApiClient()).getFileHistory(e,{limit:this.options.limit});return this.task.step(1),{path:this.options.path,remotePath:e,histories:n}}};ut();var Al=class extends Wt{async execute(){return(await this.getApiClient()).getProjects()}};var rt=(o=>(o.config="config",o.sync="sync",o.inodeCache="inode-cache",o.init="init",o))(rt||{}),Ni=Object.values(rt),Ka=0;var Ew=["workspace-settings","workspace-gitignore","workspace-agent-files"],Tw=["typescript-support","json-schema-support"],Mw=["succapp-docs-skill"],Ol=[...Ew,...Tw],ND=["workspace-config",...Ol,...Mw],xw=["workspace-config",...Ol,"sync-baseline"],_l={base:["workspace-config",...Ew],dev:Tw,"agent-docs":Mw,all:ND};function Xm(r,e){return new Ym(r,e)}var Jm=class{constructor(e,t){this.context=e;this.activeServerUrl=t}get root(){return this.context.root}get isConnected(){return this.context.isConnected}get eventBus(){return this.context.eventBus}get lockManager(){return this.context.lockManager}get lockWait(){return this.context.lockWait}get config(){return this.context.config}ensureConfigLoaded(){return this.context.ensureConfigLoaded()}async ensureActiveServerReady(){return this.activeServerUrl?this.activeServerUrl:this.context.ensureActiveServerReady()}startIdeRuntime(){return this.context.startIdeRuntime()}waitInitialized(){return this.context.waitInitialized()}addServer(e){return this.context.addServer(e)}verifyServerReachable(e){return this.context.verifyServerReachable(e)}removeServer(e){return this.context.removeServer(e)}changeServerUrl(e,t,n){return this.context.changeServerUrl(e,t,n)}switchActiveServer(e){return this.context.switchActiveServer(e)}listWorkspaceProjects(){return this.context.listWorkspaceProjects()}listBaselineProjects(e){return this.context.listBaselineProjects(e)}getMetaProjectLocalPath(e){return this.context.getMetaProjectLocalPath(e)}getMetaFileLocalPath(e){return this.context.getMetaFileLocalPath(e)}countWorkspaceFiles(e,t){return this.context.countWorkspaceFiles(e,t)}runMaintenance(e){return this.context.runMaintenance(e)}connect(e,t){return this.context.connect(e,t)}disconnect(){this.context.disconnect()}requireClient(){return this.context.requireServerClient()}requireServerClient(e){return this.context.requireServerClient(e)}resolveRemoteFilePath(e){return this.context.resolveRemoteFilePath(e)}getMirrorRoot(e=this.activeServerUrl){return this.context.getMirrorRoot(e)}createSyncService(){return Xm(this)}getMetadataVersionCatalog(){return this.context.getMetadataVersionCatalog()}getSyncChanges(){return this.context.getSyncChanges()}getSyncSummary(){return this.context.getSyncSummary()}refreshSyncStatus(e){return this.context.refreshSyncStatus(e)}refreshSyncStatusState(e){return this.context.refreshSyncStatusState(e)}clearSyncStatusTargets(e){this.context.clearSyncStatusTargets(e)}notifyLocalProjectsChanged(){this.context.notifyLocalProjectsChanged?.()}applySyncOperationResult(e,t){this.context.applySyncOperationResult(e,t)}consumeFileChanges(e,t){return this.context.consumeFileChanges(e,t)}clearSyncStatus(){this.context.clearSyncStatus()}readTargetStatusSnapshot(e){return this.context.readTargetStatusSnapshot(e)}notifySyncStatusChanged(){this.context.notifySyncStatusChanged()}notifySyncStatusRefreshing(e,t){this.context.notifySyncStatusRefreshing(e,t)}isGitIgnored(e){return this.context.isGitIgnored(e)}dispose(){}};function Pt(r,e){return new Jm(r,e)}var Ym=class{constructor(e,t){this.context=e;this.agentSource=t?.agentSource??Wo().source}agentSource;get config(){return{root:this.context.root}}async status(e={}){let t=Pt(this.context,await this.context.ensureActiveServerReady());return new ll(t,e).execute()}async clone(e={}){let t=Pt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("clone",e.task,n=>new hl(t,{...e,task:n}).execute())}async pull(e={}){let t=Pt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("pull",e.task,n=>new Cl(t,{...e,task:n}).execute())}async push(e={}){let t=Pt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("push",e.task,n=>new kl(t,{...e,task:n}).execute())}async upgradeMetadata(e={}){let t=Pt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("upgradeMetadata",e.task,n=>new Wa(t,{...e,task:n}).execute())}async reset(e={}){let t=Pt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("reset",e.task,n=>new Rl(t,{...e,task:n}).execute())}async restoreLocalChange(e){await this.context.ensureConfigLoaded();let t=Pt(this.context,this.context.activeServerUrl);return this.withWriteLock("restoreLocalChange",e.task,n=>new bl(t,{...e,task:n}).execute())}async listMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=Pt(this.context,this.context.activeServerUrl);return new za(t,e).execute()}async clearMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=Pt(this.context,this.context.activeServerUrl);return this.withWriteLock("merge-backup clear",e.task,n=>new El(t,{...e,task:n}).execute())}async removeProject(e){let t=Pt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("removeProject",e.task,n=>new Tl(t,{...e,task:n}).execute())}async repairWorkspace(e={}){return this.context.runMaintenance({taskIds:e.checks??xw,explicitTaskIds:e.checks,dryRun:e.dryRun===!0,task:e.task})}async listWorkspaceProjects(){return await this.context.ensureConfigLoaded(),Pt(this.context,this.context.activeServerUrl).listWorkspaceProjects()}async listBaselineProjects(){await this.context.ensureConfigLoaded();let e=Pt(this.context,this.context.activeServerUrl);return e.listBaselineProjects(e.activeServerUrl)}async lsRemote(){let e=Pt(this.context,await this.context.ensureActiveServerReady());return new Al(e,{}).execute()}async show(e){let t=Pt(this.context,await this.context.ensureActiveServerReady());return new Ml(t,e).execute()}async history(e){let t=Pt(this.context,await this.context.ensureActiveServerReady());return new Dl(t,e).execute()}async diff(e){let t=Pt(this.context,await this.context.ensureActiveServerReady());return new Il(t,e).execute()}localToMetaPath(e){return Or(this.context.root,e)}isTrackedFile(e){return this.localToMetaPath(e)!==void 0}async withWriteLock(e,t,n,o=["sync"]){let i=t&&t!==Xe.INSTANCE?t:new vn;return this.context.lockManager.withLock({scopes:o,command:e,source:this.agentSource,wait:this.context.lockWait},async a=>(i.setAbortSignal(Is(i.getAbortSignal(),a)),n(i)))}};Cm();var Zm=E(require("fs")),Io=E(require("path"));Y();var Kn=class{disposables=[];_disposed=!1;get disposed(){return this._disposed}add(e){return this.disposables.push(e),e}dispose(){if(!this._disposed){this._disposed=!0;for(let e of this.disposables.splice(0))e.dispose()}}};F();B();re();Na();var Qm=T("workspace.config"),WD=".succapp/config.json",Fw="reloadConfigAfterFileChange";function Ga(){return{version:2,servers:[],activeServerUrl:""}}function UD(r,e,t){let n=ye(e),o=ye(t);if(o===n)throw new R("err.workspace.sameServerUrl",{server:o});let i=r.find(a=>!$e(a,n)&&$e(a,o));if(i)throw new R("err.workspace.serverAlreadyExists",{duplicatedServer:i,server:o});return o}var Ll=class{constructor(e,t,n){this.workspaceRoot=e;this.eventBus=t;if(this.configPath=Io.join(e,".succapp","config.json"),t&&n){let o=this.disposables.add(n.createFileWatcher(e,WD));this.disposables.add(o.onFileChanged(i=>{this.isConfigFilePath(i.filePath)&&Ko(this,Fw,50,async()=>{await this.reloadAfterFileChange().catch(a=>{Qm.warn(`reload workspace config after file change failed: ${this.configPath}`,a)})})}))}}disposables=new Kn;data=null;loaded=!1;configPath;get path(){return this.configPath}get(){return this.data??void 0}async load(){return Cr(this,"load",()=>this.doLoad())}async ensureLoaded(){this.loaded||await this.load()}async reloadIfChanged(){return await Cr(this,"reload",()=>this.doReloadIfChanged())===!0}async doReloadIfChanged(e=!1){let t=this.data!==null,n=Vo(this.get()),o=await this.readConfigData(!e,e);if(o===void 0&&e){this.loaded=!0;return}this.data=o,this.loaded=!0;let i=t!==(this.data!==null)||!rr(n??null,this.get()??null);return i&&this.fireConfigChanged(),i}async doLoad(){this.data=await this.readConfigData(),this.loaded=!0}async readConfigData(e=!0,t=!1){try{let n=await Ny(this.configPath,{attempts:t?3:1,delayMs:50,ignoreParseError:e});return n?this.normalizeLoadedData(n):void 0}catch(n){if(x(n))return null;let o=n instanceof Error?n.message:String(n);e?Qm.warn(".succapp/config.json is corrupted, ignoring",o):Qm.debug(".succapp/config.json is not ready, will retry",o);return}}normalizeLoadedData(e){if(Array.isArray(e.servers)&&typeof e.activeServerUrl=="string"){let t=[];for(let s of e.servers){let c=ye(s);t.some(l=>$e(l,c))||t.push(c)}let n=e.activeServerUrl?ye(e.activeServerUrl):"",o=n?t.find(s=>$e(s,n)):void 0,i={version:e.version??2,servers:t,activeServerUrl:o??t[0]??""},a=La(e.serverVersion);return a&&(i.serverVersion=a),i}return Ga()}async save(){if(!this.data)return;let e=Io.dirname(this.configPath);await Zm.promises.mkdir(e,{recursive:!0}),await Zm.promises.writeFile(this.configPath,JSON.stringify(this.data,null,2),"utf-8"),this.loaded=!0}async mutateAndSave(e){let t=this.data!==null,n=Vo(this.get()),o=this.data?Vo(this.data):this.data;e();try{await this.save()}catch(i){throw this.data=o,i}(t!==(this.data!==null)||!rr(n??null,this.get()??null))&&this.fireConfigChanged()}async initialize(e){let t=ye(e);await this.mutateAndSave(()=>{this.data={version:2,servers:[t],activeServerUrl:t}})}async ensureFile(){return await this.ensureLoaded(),this.data===null&&await this.mutateAndSave(()=>{this.data=Ga()}),this.configPath}getServers(){return this.data?.servers??[]}getActiveServerUrl(){return this.data?.activeServerUrl??""}getServerVersion(){return this.data?.serverVersion}async setServerVersion(e){await this.ensureLoaded();let t=La(e);!t||this.data?.serverVersion===t||await this.mutateAndSave(()=>{let n=this.data??Ga();n.serverVersion=t,this.data=n})}hasServer(e){return!!this.resolveServerUrl(e)}resolveServerUrl(e){let t=ye(e);return this.getServers().find(n=>$e(n,t))}validateServerUrlChange(e,t){return UD(this.getServers(),e,t)}async addServer(e){await this.ensureLoaded();let t=ye(e);await this.mutateAndSave(()=>{let n=this.data??Ga();n.servers=n.servers??[];let o=n.servers.find(i=>$e(i,t));o||n.servers.push(t),n.activeServerUrl=o??t,this.data=n})}async removeServer(e){if(await this.ensureLoaded(),!this.data)return;let t=ye(e);await this.mutateAndSave(()=>{let n=this.data;n.servers=n.servers.filter(o=>!$e(o,t)),$e(n.activeServerUrl,t)&&(n.activeServerUrl=n.servers[0]??"")})}async changeServerUrl(e,t){await this.ensureLoaded();let n=this.data;if(!n)throw new Error(`server not configured: ${e}`);let o=this.resolveServerUrl(e);if(!o)throw new Error(`server not configured: ${e}`);let i=this.validateServerUrlChange(o,t);return await this.mutateAndSave(()=>{n.servers=n.servers.map(a=>$e(a,o)?i:a),$e(n.activeServerUrl,o)&&(n.activeServerUrl=i),this.data=n}),i}async setActiveServerUrl(e){await this.ensureLoaded();let t=ye(e);await this.mutateAndSave(()=>{let n=this.data??Ga();n.servers=n.servers??[];let o=n.servers.find(i=>$e(i,t));o||n.servers.push(t),n.activeServerUrl=o??t,this.data=n})}get root(){return this.workspaceRoot}dispose(){Go(this,Fw),this.disposables.dispose()}fireConfigChanged(){this.eventBus?.fire(new Ye("workspace.config.changed",{root:this.workspaceRoot},this))}async reloadAfterFileChange(){await Cr(this,"reload",()=>this.doReloadIfChanged(!0))===void 0&&await this.reloadIfChanged()}isConfigFilePath(e){return Io.resolve(e)===Io.resolve(this.configPath)}};F();Y();D();bo();_a();Y();var Iw=T("sync.auto"),Dw="autoPush",Nl=class{constructor(e,t,n){this.workspaceRoot=e;this.callbacks=n;this.disposables.push(t.on("workspace.file.changed",o=>{o.payload.root===this.workspaceRoot&&wt.autoPush&&this.scheduleAutoPush()}))}autoPullTimer;disposables=[];scheduleAutoPush(){wt.autoPush&&Ko(this,Dw,wt.autoPushDelay,async()=>{wt.autoPush&&await this.callbacks.onAutoPush().catch(e=>Iw.error("auto push failed",e))})}cancelPendingAutoPush(){Go(this,Dw)}refreshAutoSync(){wt.autoPush||this.cancelPendingAutoPush(),this.startAutoPull()}startAutoPull(){this.stopAutoPull(),wt.autoPull&&(this.autoPullTimer=setInterval(()=>{this.callbacks.onAutoPull().catch(e=>Iw.error("auto pull failed",e))},wt.autoPullInterval*1e3))}stopAutoPull(){this.autoPullTimer&&(clearInterval(this.autoPullTimer),this.autoPullTimer=void 0)}dispose(){this.stopAutoPull(),this.cancelPendingAutoPush(),this.disposables.forEach(e=>e.dispose())}};K();Ke();Mr();Y();var Wl=class{constructor(e,t,n=()=>{}){this.id=e;this.target=t;this.publishResult=n;this.scope=t.kind==="all"?"all":"targets"}kind="clear";source="clear";scope;toResult(){return{kind:"clear",target:this.target}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};var Ja=E(require("path"));Ke();K();Mr();var mr=class{constructor(e,t){this.id=e;this.fileChanges=[...t.fileChanges],this.workspace=t.workspace,this.bulk=!!t.bulk,this.getChanges=t.getChanges,this.publishResult=t.publish??(()=>{})}kind="fileWatch";source="fileWatch";scope="targets";cancelled=!1;fileChanges;workspace;bulk;getChanges;publishResult;abort(){this.cancelled=!0}isCancelled(){return this.cancelled}merge(e){this.cancelled||e.length===0||this.fileChanges.push(...e)}mergeTask(e){this.merge(e.fileChanges),this.bulk=this.bulk||e.bulk}async run(){let e=this.workspace;if(this.cancelled||!e||this.fileChanges.length===0)return{kind:"noop"};if(this.bulk)return this.requestBulkLocalRefresh();let t=this.createFileChangeStatusTargets(e);if(this.cancelled||t.length===0)return{kind:"noop"};if(t.some(i=>i.isDotMeta))return this.requestLocalRefresh(t);let n=await Promise.all(t.map(i=>e.readTargetStatusSnapshot(i)));if(this.cancelled)return{kind:"noop"};if(this.shouldRefreshAllForFolderRenameRelatedTargets(t,n))return this.requestLocalRefresh(t);let o=this.createFastFileWatchChanges(e,n);return!o||this.shouldRefreshAllForFolderSubtreeBoundary(o)?this.requestLocalRefresh(t):{kind:"replaceTargets",targetRemotePaths:[...new Set(t.map(i=>i.remotePath))],changes:o,mode:"fileWatch"}}publish(e){if(!this.cancelled)return this.publishResult(e)}createFileChangeStatusTargets(e){let t=new Map;for(let n of this.fileChanges){let o=this.resolveFileChangeStatusTarget(e,n);o&&t.set(`${o.type}\0${o.remotePath}`,o)}return[...t.values()]}requestLocalRefresh(e){return{kind:"requestRefresh",scope:"local",source:"manual",rootRemotePath:this.createRefreshRootRemotePath(e)}}requestBulkLocalRefresh(){return{kind:"requestRefresh",scope:"local",source:"manual",rootRemotePath:void 0}}createRefreshRootRemotePath(e){let t=[...e.map(o=>o.remotePath),...this.getChanges().filter(mt).flatMap(o=>[o.remotePath,o.oldRemotePath])].filter(o=>!!o),n=cC(t);return n==="/"?void 0:n}resolveFileChangeStatusTarget(e,t){let n=Or(e.root,t.filePath);if(!n)return;let o=Ja.posix.basename(n)===Q,i=o?Ja.posix.dirname(n):n;return{filePath:o?Ja.dirname(t.filePath):t.filePath,remotePath:i,type:t.type,isDotMeta:o}}shouldRefreshAllForFolderRenameRelatedTargets(e,t){let n=this.getChanges().filter(i=>i.type==="renamed"&&!!i.isFolder&&!!i.oldRemotePath);if(n.length===0)return!1;let o=new Map(t.map(i=>[i.remotePath,i]));for(let i of e){let a=o.get(i.remotePath),s=a?.workspace.kind==="folder"||a?.mirror.kind==="folder";for(let c of n){let l=c.oldRemotePath;if(s&&(i.remotePath!==c.remotePath&&ee(c.remotePath,i.remotePath)||i.remotePath!==l&&ee(l,i.remotePath))||i.remotePath!==l&&ee(i.remotePath,l))return!0;if(!(i.remotePath===c.remotePath||!ee(i.remotePath,c.remotePath))&&(i.type==="deleted"||a?.workspace.fileId!==void 0||a?.mirror.fileId!==void 0))return!0}}return!1}createFastFileWatchChanges(e,t){if(t.some(s=>s.workspace.kind==="unknown"||s.mirror.kind==="unknown"))return;let n=this.createFastRenameChanges(t);if(!n)return;let o=new Set;for(let s of n)o.add(s.remotePath),s.oldRemotePath&&o.add(s.oldRemotePath);let i=[...n];for(let s of t){if(o.has(s.remotePath))continue;if(this.shouldRefreshForUnpairedIdentitySnapshot(s))return;let c=this.createFastChange(s);c&&i.push(c)}let a=new Map(t.map(s=>[s.remotePath,s]));return i.filter(s=>{if(s.type!=="added")return!0;let c=a.get(s.remotePath);return!c||c.workspace.fileId||c.mirror.fileId?!0:!e.isGitIgnored(s.remotePath)&&!lc(s.remotePath.replace(/^\//,""),wt.syncIgnore)})}shouldRefreshForUnpairedIdentitySnapshot(e){return e.workspace.kind!=="missing"&&e.mirror.kind==="missing"&&!e.workspace.fileId&&!!e.workspace.identity||e.workspace.kind==="missing"&&e.mirror.kind!=="missing"&&!e.mirror.fileId&&!!e.mirror.identity}shouldRefreshAllForFolderSubtreeBoundary(e){return e.some(t=>t.isFolder&&(t.type==="added"||t.type==="deleted"))}createFastRenameChanges(e){let t=e.filter(a=>a.workspace.kind==="missing"&&a.mirror.kind!=="missing"),n=e.filter(a=>a.workspace.kind!=="missing"&&a.mirror.kind==="missing");if(t.length===0||n.length===0)return[];if(t.length!==n.length)return;let o=[],i=new Set;for(let a of t){let s=a.mirror.identity;if(!s)return;let c=n.filter(p=>!i.has(p)&&p.workspace.identity===s);if(c.length!==1||a.mirror.kind==="folder"||c[0].workspace.kind==="folder")return;let l=c[0];i.add(l),o.push({path:this.toRelativePath(l.remotePath),remotePath:l.remotePath,...this.getFileIdProperty(l.workspace.fileId??a.mirror.fileId),oldPath:this.toRelativePath(a.remotePath),oldRemotePath:a.remotePath,type:"renamed",isFolder:!1,contentChanged:l.contentChanged,metaChanged:l.metaChanged})}if(!(i.size!==n.length||o.length!==t.length))return o}createFastChange(e){let t=e.workspace.kind,n=e.mirror.kind;if(!(t==="missing"&&n==="missing")){if(t!=="missing"&&n==="missing")return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.workspace.fileId),type:"added",isFolder:t==="folder"};if(t==="missing"&&n!=="missing")return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.mirror.fileId),type:"deleted",isFolder:n==="folder"};if(!(!e.contentChanged&&!e.metaChanged))return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.workspace.fileId??e.mirror.fileId),type:"modified",isFolder:t==="folder",contentChanged:e.contentChanged,metaChanged:e.metaChanged}}}getFileIdProperty(e){return e===void 0?{}:{fileId:e}}toRelativePath(e){return e.replace(/^\//,"")}};Mr();var Ul=class{constructor(e,t,n=[],o=()=>{}){this.id=e;this.handledChange=t;this.remainingChanges=n;this.publishResult=o}kind="operationResult";source="operation";scope="targets";toResult(){return{kind:"replaceTargets",targetRemotePaths:Ua(this.handledChange),changes:this.remainingChanges}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};var jl=class{constructor(e,t){this.id=e;this.source=t.source,this.targetRemotePaths=[...t.targetRemotePaths],this.changes=[...t.changes],this.mode=t.mode,this.publishResult=t.publish??(()=>{})}kind="replaceTargets";source;scope="targets";targetRemotePaths;changes;mode;publishResult;toResult(){return{kind:"replaceTargets",targetRemotePaths:this.targetRemotePaths,changes:this.changes,mode:this.mode}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};Ir();Y();D();F();B();var Qa=E(require("fs")),$l=E(require("path"));Ke();K();F();Y();bn();Ir();bo();_a();er();var Ya=E(require("fs")),Xa=E(require("path")),fP=require("crypto"),gP=E(lP()),yP=E(dP());Ke();Et();K();F();bn();Y();function Vl(r){return{dev:r.dev,ino:r.ino,size:r.size,mtimeMs:r.mtimeMs,ctimeMs:r.ctimeMs}}var lh="sha256",uP=".succapp/cache/inode-index.json",kA=.6,mP=2,wA=1e4,PA=20,hP=5*1024*1024,RA=80,bA=200,EA=8,TA=4,MA=64,xA=2,FA=500,IA=1e4,Be=T("sync.detector.workspace"),ql=class{constructor(e){this.options=e;this.workspaceCachePath=Xa.join(e.workspaceRoot,uP),this.mirrorCachePath=Xa.join(e.remoteMirrorRoot,uP)}workspaceInodeCache=new Map;mirrorInodeCache=new Map;workspacePathToInode=new Map;mirrorPathToInode=new Map;workspaceCachePath;mirrorCachePath;workspaceInodeCacheDirty=!1;mirrorInodeCacheDirty=!1;workspaceFullScanInodeKeys=new Set;mirrorFullScanInodeKeys=new Set;workspaceFullScanRecorded=!1;mirrorFullScanRecorded=!1;projectCaches=new Map;pendingDigests=new Map;pendingSimilarity=new Map;async findInodeFileCandidates(e,t){let n=this.createOperationCache();await this.prefetchStats([...e,...t],n);let o=await this.groupFilesByInode(t,n),i=[];for(let a of e){let s=await this.getStatCached(a,n),c=s?this.getInodeKey(s):void 0;if(c)for(let l of o.get(c)??[])a.metaPath!==l.metaPath&&i.push({localEntry:a,remoteEntry:l,score:1,reason:"sameInode"})}return i}async findEqualFileCandidates(e,t){let n=this.createOperationCache();await this.prefetchStats([...e,...t],n);let o=await this.groupFilesBySize(t,n),i=[];for(let a of e){let s=await this.getStatCached(a,n);if(!s)continue;let c=o.get(s.size);if(!c)continue;let l;for(let p of c){let u=await this.compareByStat(a,p,n);if(u==="different")continue;if(u==="same"){i.push({localEntry:a,remoteEntry:p,score:1,reason:"sameContentHash"});continue}if(l??=await this.getContentDigest(a,n),!l)continue;(await this.getContentDigest(p,n))?.value===l.value&&i.push({localEntry:a,remoteEntry:p,score:1,reason:"sameContentHash"})}}return i}async findSimilarFileCandidates(e,t){let n={fileCandidateBuckets:0,fileComparableRefs:0,fileEstimatedPairs:0,fileComparedPairs:0,fileTopByLeft:0,fileTopByRight:0};if(e.length===0||t.length===0)return{candidates:[],stats:n};let o=this.createOperationCache(!0),i=this.groupSimilarityRightFiles(t),a=this.collectComparableEntries(e,i),s=this.estimateSimilarityPairs(e,i);n.fileCandidateBuckets=i.size,n.fileComparableRefs=a.size,n.fileEstimatedPairs=s;let c=Date.now();Be.debug("collect file similarity start localCandidates=%d remoteCandidates=%d buckets=%d comparableRefs=%d estimatedPairs=%d",e.length,t.length,i.size,a.size,s),await this.prefetchStats([...a.values()],o);let l=new Map,p=new Map,u=this.createSimilarityPairCursor(e,i),g=0,m=Array.from({length:Math.min(TA,Math.max(1,a.size))},async()=>{for(;;){let y=u();if(!y)return;let[C,v]=y;g++,n.fileComparedPairs++;let w=await this.compareSimilarityPair(C,v,o);w.score>=kA&&(this.addTopSimilarityCandidate(l,this.getEntryKey(w.left),w,mP),this.addTopSimilarityCandidate(p,this.getEntryKey(w.right),w,mP))}});await Promise.all(m),n.fileTopByLeft=l.size,n.fileTopByRight=p.size,Be.debug("collect file similarity compared elapsed=%dms comparedPairs=%d topByLeft=%d topByRight=%d",Date.now()-c,g,l.size,p.size);let f=new Set;for(let y of[l,p])for(let C of y.values())for(let v of C)f.add(v);return{candidates:[...f].sort((y,C)=>C.score-y.score).map(y=>({localEntry:y.left,remoteEntry:y.right,score:y.score,reason:y.score===1?"sameContentHash":"contentSimilarity"})),stats:n}}getEntryLocalPath(e){return ae(e.side==="workspace"?this.options.workspaceRoot:this.options.remoteMirrorRoot,e.metaPath)}getEntryKey(e){return e.side+"\0"+e.metaPath}async areEntriesEqual(e,t){let n=this.createOperationCache(),o=await this.compareByStat(e,t,n);if(o!=="unknown")return o;let[i,a]=await Promise.all([this.getContentDigest(e,n),this.getContentDigest(t,n)]);return!i||!a?"unknown":i.value===a.value?"same":"different"}async compareByStat(e,t,n){let[o,i]=await Promise.all([this.getStatCached(e,n),this.getStatCached(t,n)]);return!o||!i?"unknown":o.size!==i.size?"different":this.isSameInode(o,i)?"same":"unknown"}isSameInode(e,t){return!!e.dev&&!!t.dev&&!!e.ino&&!!t.ino&&e.dev===t.dev&&e.ino===t.ino}async getStatCached(e,t){if(e.stat)return e.stat;let n=this.getEntryKey(e),o=t.stats.get(n);if(o)return o;let i=this.readStat(e);return t.stats.set(n,i),i}async readStat(e){try{let t=await Ya.promises.stat(this.getEntryLocalPath(e));return t.isFile()?Vl(t):void 0}catch(t){if(!oa(t))throw t;Be.debug("skip unreadable file stat: %s",this.getEntryLocalPath(e),t);return}}getContentDigest(e,t){let n=this.getEntryKey(e),o=t.digests.get(n);if(o)return o;let i=this.getContentDigestWithContext(e,t);return t.digests.set(n,i),i}async getContentDigestWithContext(e,t){let n=await this.getStatCached(e,t);if(!n)return;let o=this.getEntryKey(e),i=this.pendingDigests.get(o);if(i)return i;let a=this.getContentDigestNow(e,n,t).finally(()=>this.pendingDigests.delete(o));return this.pendingDigests.set(o,a),a}async getContentDigestNow(e,t,n){let o=this.getInodeKey(t);if(o){let a=this.getInodeCache(e.side).get(o);if(this.isMatchingInodeCacheEntry(a,t))return{algorithm:lh,value:a.sha256,size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs,updatedAt:Date.now()}}try{let i={algorithm:lh,value:await this.computeContentHash(e,t,n),size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs,updatedAt:Date.now()};if(o){let a=this.getInodeCache(e.side).get(o);this.rememberInodeCacheEntry(e,o,{sha256:i.value,tlsh:this.getReusableCachedTlsh(a,i.value),size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs})}return i}catch(i){if(!oa(i))throw i;Be.debug("skip unreadable file digest: %s",this.getEntryLocalPath(e),i);return}}isMatchingInodeCacheEntry(e,t){return this.isCompleteInodeCacheEntry(e)&&this.isMatchingInodeCacheStat(e,t)}isMatchingInodeCacheStat(e,t){return e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs}isCompleteInodeCacheEntry(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.sha256=="string"&&t.sha256.length>0&&Number.isFinite(t.size)&&Number.isFinite(t.mtimeMs)&&Number.isFinite(t.ctimeMs)}getCachedTlsh(e){return typeof e.tlsh=="string"&&e.tlsh.length>0?e.tlsh:void 0}getReusableCachedTlsh(e,t){return e?.sha256===t?this.getCachedTlsh(e):void 0}async computeContentHash(e,t,n){let o=await this.getSmallFileContent(e,t,n);return o?o.contentHash:Jc(this.getEntryLocalPath(e))}async compareSimilarityPair(e,t,n){if(await this.compareByStat(e,t,n)==="same")return{left:e,right:t,score:1};let[i,a]=await Promise.all([this.getContentDigest(e,n),this.getContentDigest(t,n)]);if(i&&a&&i.value===a.value)return{left:e,right:t,score:1};let[s,c]=await Promise.all([this.getTlshProfile(e,n),this.getTlshProfile(t,n)]);if(!s||!c)return{left:e,right:t,score:0};let l=s.digest.calculateDifference(c.digest,!0);return l>RA?{left:e,right:t,score:0}:{left:e,right:t,score:Math.max(0,1-l/bA)}}getTlshProfile(e,t){let n=this.getEntryKey(e),o=t.profiles.get(n);if(o)return o;let i=this.getTlshProfileWithContext(e,t);return t.profiles.set(n,i),i}async getTlshProfileWithContext(e,t){let n=await this.getSimilarityDigest(e,t);if(!n)return;let o=this.buildTlshProfile(n);if(o)return o;Be.debug("repair invalid TLSH profile side=%s path=%s",e.side,e.metaPath);let i=await this.getStatCached(e,t);i&&await this.invalidateStat(e,i),await this.invalidateSimilarityDigest(e,t);let a=await this.getSimilarityDigest(e,t);if(a)return this.buildTlshProfile(a)}buildTlshProfile(e){try{let t=new yP.default().withHash(e).build();return t.calculateDifference(t,!0),{digest:t}}catch(t){Be.debug("skip invalid TLSH digest: %s",e,t);return}}async getSimilarityDigest(e,t){let n=await this.getStatCached(e,t);if(!n)return;let o=await this.getContentDigest(e,t);if(!o||o.size>hP)return;let i=Ve(e.metaPath)??"/",a=i+"\0"+o.value,s=this.pendingSimilarity.get(a);if(s)return s;let c=this.getSimilarityDigestNow(i,e,o,n,t).finally(()=>this.pendingSimilarity.delete(a));return this.pendingSimilarity.set(a,c),c}async getSimilarityDigestNow(e,t,n,o,i){let a=await this.withProjectCache(e,async l=>l.similarity.get(n.value));if(a)return a.updatedAt=Date.now(),a.unsupported?void 0:a.tlsh;let s=this.getInodeKey(o);if(s){let p=this.getInodeCache(t.side).get(s);if(this.isMatchingInodeCacheEntry(p,o)){let u=this.getCachedTlsh(p);if(u){if(this.buildTlshProfile(u))return await this.withProjectCache(e,async g=>{g.similarity.set(n.value,{tlsh:u,size:n.size,updatedAt:Date.now()}),this.pruneState(g)}),u;Be.debug("drop invalid inode cached TLSH side=%s path=%s inode=%s",t.side,t.metaPath,s),this.invalidateStat(t,o)}}}let c=await this.computeTlshHash(t,o,i);if(await this.withProjectCache(e,async l=>{l.similarity.set(n.value,{tlsh:c.hash,unsupported:!c.hash,size:n.size,updatedAt:Date.now()}),this.pruneState(l)}),s){let l=this.getInodeCache(t.side).get(s);this.rememberInodeCacheEntry(t,s,{sha256:n.value,tlsh:c.hash,size:o.size,mtimeMs:o.mtimeMs,ctimeMs:o.ctimeMs})}return c.hash}async computeTlshHash(e,t,n){let o=await this.getSmallFileContent(e,t,n);if(o)return o.similarity;let i=await this.readTlshBuffer(e);return i?this.computeTlshHashFromBuffer(i):{cacheUnsupported:!1}}computeTlshHashFromBuffer(e){try{return{hash:(0,gP.default)(e.toString("latin1")),cacheUnsupported:!1}}catch(t){let n=t instanceof Error?t.message:String(t);return Be.debug("skip TLSH digest because hash library rejected buffer: %s",n),{cacheUnsupported:!1}}}async readTlshBuffer(e){try{return await Ya.promises.readFile(this.getEntryLocalPath(e))}catch(t){if(!oa(t))throw t;Be.debug("skip tlsh file read: %s",e.metaPath,t);return}}getSmallFileContent(e,t,n){if(!n.preferSmallFileBuffer||t.size>hP)return Promise.resolve(void 0);let o=this.getEntryKey(e),i=n.smallFiles.get(o);if(i)return i;let a=this.readSmallFileContent(e);return n.smallFiles.set(o,a),this.pruneOperationSmallFiles(n),a}pruneOperationSmallFiles(e){for(;e.smallFiles.size>MA;){let t=e.smallFiles.keys().next().value;if(t===void 0)return;e.smallFiles.delete(t)}}async readSmallFileContent(e){try{let t=await Ya.promises.readFile(this.getEntryLocalPath(e));return{contentHash:(0,fP.createHash)(lh).update(t).digest("hex"),similarity:this.computeTlshHashFromBuffer(t)}}catch(t){if(!oa(t))throw t;Be.debug("skip unreadable small file: %s",this.getEntryLocalPath(e),t);return}}createOperationCache(e=!1){return{preferSmallFileBuffer:e,stats:new Map,digests:new Map,profiles:new Map,smallFiles:new Map}}async prefetchStats(e,t){let n=new Qe(EA);await Promise.all(e.map(o=>n.addTask(async()=>{await this.getStatCached(o,t)})))}async groupFilesBySize(e,t){let n=new Map;for(let o of e){let i=await this.getStatCached(o,t);if(!i)continue;let a=n.get(i.size);a||(a=[],n.set(i.size,a)),a.push(o)}return n}async groupFilesByInode(e,t){let n=new Map;for(let o of e){let i=await this.getStatCached(o,t),a=i?this.getInodeKey(i):void 0;if(!a)continue;let s=n.get(a);s||(s=[],n.set(a,s)),s.push(o)}return n}getInodeKey(e){return this.getInodeKeyString(e.dev,e.ino)}groupSimilarityRightFiles(e){let t=new Map;for(let n of e){let o=this.getSimilarityBucketKey(n),i=t.get(o);i?i.push(n):t.set(o,[n])}return t}getSimilarityBucketKey(e){return Xa.posix.extname(e.metaPath).toLowerCase()}collectComparableEntries(e,t){let n=new Map,o=new Set;for(let i of e){let a=this.getSimilarityBucketKey(i),s=t.get(a);if(s?.length&&(n.set(this.getEntryKey(i),i),!o.has(a))){o.add(a);for(let c of s)n.set(this.getEntryKey(c),c)}}return n}createSimilarityPairCursor(e,t){let n=0,o=0,i,a=[];return()=>{for(;;){if(i&&o<a.length){let s=a[o++];if(i.metaPath!==s.metaPath)return[i,s];continue}if(n>=e.length)return;i=e[n++],o=0,a=t.get(this.getSimilarityBucketKey(i))??[]}}}addTopSimilarityCandidate(e,t,n,o){let i=e.get(t)??[];i.push(n),e.set(t,this.sortSimilarityCandidates(i).slice(0,o))}sortSimilarityCandidates(e){return[...e].sort((t,n)=>{let o=n.score-t.score;return o!==0?o:this.getEntryKey(t.left).localeCompare(this.getEntryKey(n.left))})}async withProjectCache(e,t){let n=this.pinProjectCache(e);try{return await t(n)}finally{n.activeCount--,this.enforceProjectCacheLimit()}}pinProjectCache(e){let t=this.projectCaches.get(e);return t||(t={lastAccessAt:Date.now(),activeCount:0,similarity:new Map},this.projectCaches.set(e,t)),t.lastAccessAt=Date.now(),t.activeCount++,this.enforceProjectCacheLimit(),t}enforceProjectCacheLimit(){for(;this.projectCaches.size>PA;)if(!this.evictOldestProjectCache())return}evictOldestProjectCache(){let e=[...this.projectCaches.entries()].filter(([,o])=>o.activeCount===0).sort((o,i)=>o[1].lastAccessAt-i[1].lastAccessAt)[0];if(!e)return!1;let[t,n]=e;return n.activeCount>0?!1:(this.projectCaches.delete(t),!0)}pruneState(e){return this.pruneMap(e.similarity,wA)}pruneMap(e,t){if(e.size<=t)return!1;let n=[...e.entries()].sort((o,i)=>i[1].updatedAt-o[1].updatedAt).slice(0,t);e.clear();for(let[o,i]of n)e.set(o,i);return!0}getInodeCache(e){return e==="workspace"?this.workspaceInodeCache:this.mirrorInodeCache}getPathToInode(e){return e==="workspace"?this.workspacePathToInode:this.mirrorPathToInode}markInodeCacheDirty(e){e==="workspace"?this.workspaceInodeCacheDirty=!0:this.mirrorInodeCacheDirty=!0}clearInodeCacheDirty(){this.workspaceInodeCacheDirty=!1,this.mirrorInodeCacheDirty=!1}rememberInodeCacheEntry(e,t,n){this.getInodeCache(e.side).set(t,n),this.getPathToInode(e.side).set(this.getEntryKey(e),t),this.markInodeCacheDirty(e.side)}async load(){await Promise.all([this.loadInodeCacheSide(this.workspaceCachePath,this.workspaceInodeCache,"workspace"),this.loadInodeCacheSide(this.mirrorCachePath,this.mirrorInodeCache,"mirror")])}recordFullScanEntries(e,t){this.workspaceFullScanInodeKeys.clear(),this.mirrorFullScanInodeKeys.clear(),this.collectFullScanInodeKeys(e,this.workspaceFullScanInodeKeys),this.collectFullScanInodeKeys(t,this.mirrorFullScanInodeKeys),this.workspaceFullScanRecorded=!0,this.mirrorFullScanRecorded=!0}collectFullScanInodeKeys(e,t){for(let n of e){if(n.isFolder||!n.stat)continue;let o=this.getInodeKey(n.stat);o&&t.add(o)}}async loadInodeCacheSide(e,t,n){try{let o=await this.readInodeCacheFile(e);if(!o)return;for(let[i,a]of Object.entries(o.files))t.set(i,a)}catch(o){Be.debug("skip %s inode cache: %s",n,e,o)}}async readInodeCacheFile(e){let t=await fo(e);if(!(!t||t.version!==1))return t}async flush(){if(Be.debug("workspace change detector flush inode caches called"),await Promise.all([this.pruneStaleEntries("workspace",this.workspacePathToInode,this.workspaceInodeCache,this.options.workspaceRoot),this.pruneStaleEntries("mirror",this.mirrorPathToInode,this.mirrorInodeCache,this.options.remoteMirrorRoot)]),this.pruneFullScanEntries("workspace",this.workspaceInodeCache,this.workspaceFullScanInodeKeys,this.workspaceFullScanRecorded),this.pruneFullScanEntries("mirror",this.mirrorInodeCache,this.mirrorFullScanInodeKeys,this.mirrorFullScanRecorded),!this.workspaceInodeCacheDirty&&!this.mirrorInodeCacheDirty)return;Be.debug("flush inode caches workspaceDirty=%s workspaceEntries=%d mirrorDirty=%s mirrorEntries=%d",this.workspaceInodeCacheDirty,this.workspaceInodeCache.size,this.mirrorInodeCacheDirty,this.mirrorInodeCache.size),await this.withInodeCacheWriteLock(async()=>{let t=[];this.workspaceInodeCacheDirty&&t.push(this.writeInodeCache(this.workspaceCachePath,this.workspaceInodeCache)),this.mirrorInodeCacheDirty&&t.push(this.writeInodeCache(this.mirrorCachePath,this.mirrorInodeCache)),await Promise.all(t)})?(this.clearInodeCacheDirty(),Be.debug("flushed inode caches workspaceEntries=%d mirrorEntries=%d",this.workspaceInodeCache.size,this.mirrorInodeCache.size)):Be.debug("skipped inode cache flush workspaceDirty=%s workspaceEntries=%d mirrorDirty=%s mirrorEntries=%d",this.workspaceInodeCacheDirty,this.workspaceInodeCache.size,this.mirrorInodeCacheDirty,this.mirrorInodeCache.size)}async withInodeCacheWriteLock(e){let t=this.options.lockManager;if(!t||t.isHeldLocally("inode-cache"))return await e(),!0;try{return await t.withLock({scopes:["inode-cache"],command:"flush-inode-cache",wait:1},async()=>e()),!0}catch(n){return n instanceof ro||n instanceof Gr?(Be.debug("skip inode cache flush because cache lock is unavailable",n),!1):(Be.warn("skip inode cache flush because cache lock failed unexpectedly",n),!1)}}async pruneStaleEntries(e,t,n,o){if(t.size===0)return;let i=[];for(let[a,s]of t){let c=a.indexOf("\0"),l=a.slice(c+1),p=ae(o,l);try{let u=await Ya.promises.stat(p);if(!u.isFile()){i.push(a);continue}let g=this.getInodeKeyString(u.dev,u.ino);(!g||g!==s)&&i.push(a)}catch(u){if(x(u)){Be.debug("mark stale inode cache entry: %s",a),i.push(a);continue}throw u}}if(i.length!==0){for(let a of i){let s=t.get(a);s&&n.delete(s),t.delete(a)}i.length>0&&this.markInodeCacheDirty(e)}}pruneFullScanEntries(e,t,n,o){if(!o)return;let i=0;for(let[s,c]of t)this.isCompleteInodeCacheEntry(c)||(t.delete(s),i++);if(i>0&&(this.markInodeCacheDirty(e),Be.debug("inode cache invalid cleanup side=%s removed=%d after=%d",e,i,t.size)),!this.shouldCleanupFullScanEntries(t,n))return;let a=0;for(let s of t.keys())n.has(s)||(t.delete(s),a++);a>0&&(this.markInodeCacheDirty(e),Be.debug("inode cache cleanup side=%s actual=%d removed=%d after=%d",e,n.size,a,t.size))}shouldCleanupFullScanEntries(e,t){let n=Math.max(t.size*xA,t.size+FA,IA);return e.size>n}getInodeKeyString(e,t){if(!(!e||!t))return`${e}:${t}`}invalidateStat(e,t){let n=this.getInodeKey(t);if(!n)return;let o=this.getInodeCache(e.side),i=this.getPathToInode(e.side);o.delete(n)&&this.markInodeCacheDirty(e.side),i.delete(this.getEntryKey(e))}async invalidateSimilarityDigest(e,t){let n=await this.getContentDigest(e,t);if(!n)return;let o=Ve(e.metaPath)??"/";await this.withProjectCache(o,async i=>{i.similarity.delete(n.value)&&Be.debug("drop project similarity cache project=%s path=%s sha256=%s",o,e.metaPath,n.value.slice(0,12))})}async writeInodeCache(e,t){let n={version:1,files:Object.fromEntries(t)};try{await sr(e,JSON.stringify(n))}catch(o){Be.debug("failed to write inode cache: %s",e,o)}}estimateSimilarityPairs(e,t){let n=0;for(let o of e)for(let i of t.get(this.getSimilarityBucketKey(o))??[])o.metaPath!==i.metaPath&&n++;return n}};var DA=.6,AA=.15,OA=8,_A=8,LA=8,CP=4096,NA=8,WA=64,UA=20,ve=T("sync.detector.workspace"),Hl=class{detectRuns=0;durationMs=0;records=0;filteredRecords=0;resultChanges=0;suspectMetaPaths=0;changes=0;matchedLocal=0;matchedRemote=0;matchedLocalFiles=0;matchedRemoteFiles=0;availableLocalFiles=0;availableRemoteFiles=0;pendingSamePath=0;local={entries:0,files:0,folders:0,trackedFiles:0,trackedFolders:0};remote={entries:0,files:0,folders:0,trackedFiles:0,trackedFolders:0};stages={};similarity={fileLocalCandidates:0,fileRemoteCandidates:0,fileCandidateBuckets:0,fileComparableRefs:0,fileEstimatedPairs:0,fileComparedPairs:0,pendingSamePathPairs:0,skippedPendingSamePathLocalCandidates:0,skippedPendingSamePathRemoteCandidates:0,fileTopByLeft:0,fileTopByRight:0,stableFileCandidates:0,acceptedFileCandidates:0};startRun(){return this.detectRuns++,Date.now()}finishRun(e){this.durationMs+=Date.now()-e}createSnapshot(){return{detectRuns:this.detectRuns,durationMs:this.durationMs,records:this.records,filteredRecords:this.filteredRecords,resultChanges:this.resultChanges,suspectMetaPaths:this.suspectMetaPaths,changes:this.changes,matchedLocal:this.matchedLocal,matchedRemote:this.matchedRemote,matchedLocalFiles:this.matchedLocalFiles,matchedRemoteFiles:this.matchedRemoteFiles,availableLocalFiles:this.availableLocalFiles,availableRemoteFiles:this.availableRemoteFiles,pendingSamePath:this.pendingSamePath,local:{...this.local},remote:{...this.remote},stages:Object.fromEntries(Object.entries(this.stages).map(([e,t])=>[e,{...t}])),similarity:{...this.similarity}}}describeForLog(){return`
|
|
74
|
+
`+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}},zl=class{constructor(e){this.options=e;let t=e.workspace;this.workspaceRoot=t.root,this.remoteMirrorRoot=t.getMirrorRoot(),this.task=e.task??Xe.INSTANCE,this.mirror=new kt(this.remoteMirrorRoot),this.workspaceStore=new ur(this.workspaceRoot,this.mirror),this.fingerprint=new ql({workspaceRoot:this.workspaceRoot,remoteMirrorRoot:this.remoteMirrorRoot,lockManager:t.lockManager}),this.rootRemotePath=this.normalizeRootRemotePath(e.rootRemotePath)}task;fingerprint;rootRemotePath;mirror;workspaceStore;workspaceRoot;remoteMirrorRoot;diagnostics=new Hl;currentMatchPhase="idle";mirrorProjectPresence=new Map;reportedProblemKeys=new Set;reportedProblemEventCount=0;baselineProblems=[];throwIfAborted(){this.options.signal?.throwIfAborted(),this.task.throwIfAborted()}normalizeRootRemotePath(e){if(!e)return"";let t=le(e);return t==="/"?"":t}async detect(){let e=Date.now();this.resetProblemReports();let t=this.diagnostics.startRun();ve.debug(`detect start workspace=${this.workspaceRoot} mirror=${this.remoteMirrorRoot}`),this.throwIfAborted();let n=Date.now();await this.fingerprint.load(),ve.debug(`load inode cache done elapsed=${Date.now()-n}ms`);let o=new Set;n=Date.now();let i=await this.detectRecords(o);this.diagnostics.records=i.length,this.diagnostics.suspectMetaPaths=o.size,ve.debug(`detect records done elapsed=${Date.now()-n}ms records=${i.length} suspectMeta=${o.size}`),this.throwIfAborted(),n=Date.now(),await this.fingerprint.flush(),ve.debug(`flush inode cache done elapsed=${Date.now()-n}ms`);let a=i.filter(c=>c.kind!=="localOnly"||!this.isIgnoredUntrackedLocal(c));this.diagnostics.filteredRecords=a.length;let s=new Array(a.length);return n=Date.now(),await rC(a.map((c,l)=>({change:c,index:l})),LA,async c=>{s[c.index]=await this.toSyncFileChange(c.change)}),this.diagnostics.resultChanges=s.length,ve.debug(`create sync changes done elapsed=${Date.now()-n}ms filteredRecords=${a.length} changes=${s.length}`),this.finishRunDiagnostics(t),ve.debug(`detect diagnostics ${this.diagnostics.describeForLog()}`),ve.debug(`detect done elapsed=${Date.now()-e}ms changes=${s.length} suspectMeta=${o.size}`),{changes:s,suspectMetaPaths:[...o].sort(),baselineProblems:[...this.baselineProblems]}}resetProblemReports(){this.reportedProblemKeys.clear(),this.reportedProblemEventCount=0,this.baselineProblems.length=0}getDiagnostics(e={}){let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}finishRunDiagnostics(e){this.diagnostics.finishRun(e)}resetDiagnostics(){this.diagnostics=new Hl}async withMatchPhase(e,t){let n=this.currentMatchPhase;this.currentMatchPhase=e;try{return await t()}finally{this.currentMatchPhase=n}}withMatchPhaseSync(e,t){let n=this.currentMatchPhase;this.currentMatchPhase=e;try{return t()}finally{this.currentMatchPhase=n}}async flush(){await this.fingerprint.flush()}async detectRecords(e){let t=Date.now(),[n,o]=await Promise.all([this.scan(this.workspaceRoot,"workspace",e),this.scan(this.remoteMirrorRoot,"mirror",new Set)]);this.rootRemotePath===""&&this.fingerprint.recordFullScanEntries(n.values(),o.values()),ve.debug(`scan both sides done elapsed=${Date.now()-t}ms localEntries=${this.diagnostics.local.entries} localFiles=${this.diagnostics.local.files} localFolders=${this.diagnostics.local.folders} localTrackedFiles=${this.diagnostics.local.trackedFiles} localTrackedFolders=${this.diagnostics.local.trackedFolders} remoteEntries=${this.diagnostics.remote.entries} remoteFiles=${this.diagnostics.remote.files} remoteFolders=${this.diagnostics.remote.folders} remoteTrackedFiles=${this.diagnostics.remote.trackedFiles} remoteTrackedFolders=${this.diagnostics.remote.trackedFolders} suspectMeta=${e.size}`),this.throwIfAborted();let i=new Map,a=this.filterOutIgnoredMirrorResidues(o,this.indexIgnoredMirrorResidues(n,o)),s=this.rootRemotePath===""?this.collectBaselineMissingLocalEntries(n,a):[],l={local:this.filterOutBaselineMissingLocalEntries(n,s),remote:a,matchedLocal:new Set,matchedRemote:new Set,changes:[]},p=Date.now(),u=this.getPipelineStats();await this.withMatchPhase("matchById",()=>this.matchById(l,i)),this.logDetectPhase("matchById",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),await this.withMatchPhase("matchByPath",()=>this.matchByPath(l,i)),this.logDetectPhase("matchByPath",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByInode",()=>this.matchRenamesByInode(l,i)),this.logDetectPhase("matchRenamesByInode",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByHash",()=>this.matchRenamesByHash(l,i)),this.logDetectPhase("matchRenamesByHash",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),await this.withMatchPhase("matchRenamesBySimilarity",()=>this.matchRenamesBySimilarity(l,i)),this.logDetectPhase("matchRenamesBySimilarity",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),this.withMatchPhaseSync("flushPendingSamePathChanges",()=>this.flushPendingSamePathChanges(l,i)),this.logDetectPhase("flushPendingSamePathChanges",p,u),p=Date.now(),await this.addBaselineMissingLocalChanges(l,s);for(let g of l.local.values())if(!l.matchedLocal.has(g.metaPath)){if(g.isFolder&&!g.hasMeta||!await this.isScannedEntryStillPresent(this.workspaceRoot,g))continue;this.addChange(l,{kind:"localOnly",metaPath:g.metaPath,localPath:g.metaPath,fileId:g.meta?.id,isFolder:g.isFolder,hasMeta:g.hasMeta})}for(let g of l.remote.values())if(!l.matchedRemote.has(g.metaPath)){if(!g.hasMeta)continue;this.addChange(l,{kind:"remoteOnly",metaPath:g.metaPath,remotePath:g.metaPath,fileId:g.meta?.id,isFolder:g.isFolder,hasMeta:g.hasMeta})}return ve.debug(`collect unmatched entries done elapsed=${Date.now()-p}ms changes=${this.diagnostics.changes} matchedLocal=${this.diagnostics.matchedLocal} matchedRemote=${this.diagnostics.matchedRemote} availableLocalFiles=${this.diagnostics.availableLocalFiles} availableRemoteFiles=${this.diagnostics.availableRemoteFiles} totalLocalFiles=${this.diagnostics.local.files} totalRemoteFiles=${this.diagnostics.remote.files}`),l.changes}logDetectPhase(e,t,n){let o=this.getPipelineStats(),i={...o,elapsedMs:Date.now()-t,changeDelta:o.changes-n.changes,matchedLocalDelta:o.matchedLocal-n.matchedLocal,matchedRemoteDelta:o.matchedRemote-n.matchedRemote,matchedLocalFileDelta:o.matchedLocalFiles-n.matchedLocalFiles,matchedRemoteFileDelta:o.matchedRemoteFiles-n.matchedRemoteFiles,pendingDelta:o.pendingSamePath-n.pendingSamePath};this.diagnostics.stages[e]=i,ve.debug(`${e} done elapsed=${i.elapsedMs}ms inputLocalFiles=${n.availableLocalFiles} inputRemoteFiles=${n.availableRemoteFiles} matchedLocalFileDelta=${i.matchedLocalFileDelta} matchedRemoteFileDelta=${i.matchedRemoteFileDelta} changeDelta=${i.changeDelta} pendingDelta=${i.pendingDelta} remainingLocalFiles=${i.availableLocalFiles} remainingRemoteFiles=${i.availableRemoteFiles}`)}getPipelineStats(){return{changes:this.diagnostics.changes,matchedLocal:this.diagnostics.matchedLocal,matchedRemote:this.diagnostics.matchedRemote,matchedLocalFiles:this.diagnostics.matchedLocalFiles,matchedRemoteFiles:this.diagnostics.matchedRemoteFiles,availableLocalFiles:this.diagnostics.availableLocalFiles,availableRemoteFiles:this.diagnostics.availableRemoteFiles,pendingSamePath:this.diagnostics.pendingSamePath}}async isScannedEntryStillPresent(e,t){let n=ae(e,t.metaPath);try{let o=await Qa.promises.stat(n);return t.isFolder?o.isDirectory():o.isFile()}catch(o){if(x(o))return ve.debug(`skip disappeared sync scan entry: ${n}`),!1;throw o}}async scan(e,t,n){let o=Date.now();ve.debug(`scan start side=${t} root=${e} scope=${this.rootRemotePath||"/"}`);let i=new Map;if(!await this.shouldScanScopedProject(t))return ve.warn(`skip sync scan scope because baseline project is missing: side=${t} scope=${this.rootRemotePath}`),i;let a=new Qe(OA),s=new Qe(_A),c=0,l=!1;return await new Promise((p,u)=>{let g=()=>{c--,c===0&&p()},m=y=>{l||(l=!0,a.cancel(y),s.cancel(y),u(y))},f=(y,C=!1,v=!1)=>{this.throwIfAborted(),c++,a.addTask(async()=>{await this.walk(e,t,y,i,n,f,s,C,v)}).then(g,m)};f(this.rootRemotePath)}),await Promise.all([a.waitAll(),s.waitAll()]),ve.debug(`scan done side=${t} elapsed=${Date.now()-o}ms entries=${this.getSideStats(t).entries} files=${this.getSideStats(t).files} folders=${this.getSideStats(t).folders} trackedFiles=${this.getSideStats(t).trackedFiles} trackedFolders=${this.getSideStats(t).trackedFolders} suspectMeta=${n.size}`),new Map([...i].sort(([p],[u])=>p.localeCompare(u)))}async shouldScanScopedProject(e){if(this.rootRemotePath==="")return!0;let t=Ve(this.rootRemotePath);return t?this.shouldScanProject(e,t):!0}async shouldScanTopLevelProject(e,t){return this.shouldScanProject(e,t)}async shouldScanProject(e,t){return await this.isCloneInProgressProject(t)?(ve.debug(`skip clone in-progress project during workspace scan: side=${e} project=${t}`),!1):e==="workspace"?this.hasMirrorProject(t):!0}async isCloneInProgressProject(e){return(await Promise.all([this.workspaceStore.isCloneInProgress(e),this.mirror.isCloneInProgress(e)])).some(Boolean)}async hasMirrorProject(e){let t=this.mirrorProjectPresence.get(e);if(t!==void 0)return t;let n=ae(this.remoteMirrorRoot,e),o=!1;try{o=(await Qa.promises.stat(n)).isDirectory()}catch(i){if(!x(i))throw i}return this.mirrorProjectPresence.set(e,o),o||this.reportProblemOnce(new na(this.workspaceRoot,"sync.missingBaselineProject",{projectPaths:[e],count:1})),o}reportProblemOnce(e){let t=[e.code,...e.projectPaths??[]].join("|");if(!this.reportedProblemKeys.has(t)){if(this.reportedProblemEventCount>=NA){ve.warn(`skip workspace problem event because limit reached: ${e.message}`);return}this.reportedProblemKeys.add(t),this.reportedProblemEventCount++,this.baselineProblems.push(e),ve.warn(`workspace problem reported code=${e.code} root=${e.root} projects=${e.projectPaths?.join(",")??""} count=${e.count??""}`),this.options.workspace.eventBus.fireAsync(new Ye("workspace.problem.reported",e,this)).catch(n=>ve.warn(`workspace problem event listener failed: ${n instanceof Error?n.message:String(n)}`))}}async walk(e,t,n,o,i,a,s,c,l){let p;try{p=await Qa.promises.readdir(ae(e,n||"/"),{withFileTypes:!0})}catch(f){if(x(f)){ve.debug(`skip unreadable sync scan directory: ${e}:${n||"/"}`);return}throw f}let u=await this.readDirectoryDotMeta(e,n,i),g=new Set,m=[];for(let f of p){if(this.throwIfAborted(),n===""&&f.name.startsWith(".")||f.name===Q)continue;g.add(f.name);let y=n+"/"+f.name,C=ae(e,y);if(!(n===""&&!f.isDirectory())){if(n===""&&f.isDirectory()&&await this.isCloneInProgressProject(y)){ve.debug(`skip clone in-progress root project during workspace scan: side=${t} project=${y}`);continue}if(n===""&&f.isDirectory()&&u.dotMeta[f.name]&&!await this.shouldScanTopLevelProject(t,y)){ve.warn(`skip sync scan project without opposite side baseline: side=${t} project=${y}`);continue}if(n===""&&!u.dotMeta[f.name]){a(y,!0,t==="mirror");continue}if(f.isDirectory()){let v=u.dotMeta[f.name];if(!v){if(c){a(y,!0,l||t==="mirror");continue}i.add(u.metaPath)}this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!0,meta:v,hasMeta:!!v,underUnregisteredMirrorDirectory:l}),a(y,!1,l||t==="mirror"&&!v)}else f.isFile()&&m.push(s.addTask(async()=>{let v;try{v=await Qa.promises.stat(C)}catch(w){if(x(w)){ve.debug(`skip unreadable sync scan file stat: ${C}`);return}throw w}c&&!u.dotMeta[f.name]||(this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!1,contentSize:v?.size,stat:v?Vl(v):void 0,meta:u.dotMeta[f.name],hasMeta:!!u.dotMeta[f.name],underUnregisteredMirrorDirectory:l}),u.dotMeta[f.name]||i.add(u.metaPath))}))}}await Promise.all(m);for(let f of Object.keys(u.dotMeta))g.has(f)||i.add(u.metaPath)}addSnapshotEntry(e,t){if(e.has(t.metaPath)){e.set(t.metaPath,t);return}e.set(t.metaPath,t);let n=this.getSideStats(t.side);n.entries++,t.isFolder?(n.folders++,t.hasMeta&&n.trackedFolders++):(n.files++,t.hasMeta&&n.trackedFiles++),this.refreshAvailableFileStats()}getSideStats(e){return e==="workspace"?this.diagnostics.local:this.diagnostics.remote}async readDirectoryDotMeta(e,t,n){let o=this.getDotMetaMetaPath(t),i=await Er(e,o);return(!i.exists||!i.readable||i.damaged)&&n.add(o),{metaPath:o,parentPath:t||"/",exists:i.exists,readable:i.readable,damaged:i.damaged,dotMeta:i.dotMeta}}getDotMetaMetaPath(e){return!e||e==="/"?"/"+Q:e+"/"+Q}getAvailableFiles(e,t){return[...e.values()].filter(n=>!n.isFolder&&!t.has(n.metaPath))}isIgnoredUntrackedLocal(e){if(e.hasMeta)return!1;let t=Me(e.metaPath);return this.options.workspace.isGitIgnored(e.metaPath)||lc(t,this.options.ignore??wt.syncIgnore)}async matchById(e,t){let n=this.indexById(e.local),o=this.indexRemoteByIdForWorkspaceRename(e.remote,e.local),i=[];for(let a of n.values()){let s=a.meta?.id;if(!s)continue;let c=o.get(s);if(!(!c||e.matchedRemote.has(c.metaPath))){if(!a.isFolder&&!c.isFolder){i.push({localEntry:a,remoteEntry:c});continue}await this.addComparisonOrPending(e,a,c,t),await this.matchChildrenAfterFolderRename(e,a,c)}}await this.addComparisonsOrPending(e,i,t)}async matchByPath(e,t){let n=[];for(let o of e.local.values()){if(e.matchedLocal.has(o.metaPath))continue;let i=e.remote.get(o.metaPath);if(!(!i||e.matchedRemote.has(i.metaPath))){if(!o.isFolder&&!i.isFolder){n.push({localEntry:o,remoteEntry:i});continue}await this.addComparisonOrPending(e,o,i,t)}}await this.addComparisonsOrPending(e,n,t)}async matchRenamesByInode(e,t){let n=this.pickStableSimilarityCandidates(await this.collectFileInodeCandidates(e));for(let o of n)e.matchedLocal.has(o.localEntry.metaPath)||e.matchedRemote.has(o.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(o,t,n)||await this.addRename(e,o,t)}async matchRenamesByHash(e,t){let n=this.pickStableSimilarityCandidates(await this.collectFolderExactCandidates(e)).sort((i,a)=>i.localEntry.metaPath.length-a.localEntry.metaPath.length);for(let i of n)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(i,t,n)||(await this.addRename(e,i,t),await this.matchChildrenAfterFolderRename(e,i.localEntry,i.remoteEntry));let o=this.pickStableSimilarityCandidates(await this.collectFileEqualCandidates(e));for(let i of o)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(i,t,o)||(await this.addRename(e,i,t),await this.matchChildrenAfterFolderRename(e,i.localEntry,i.remoteEntry))}async matchRenamesBySimilarity(e,t){let n=Date.now(),o=this.pickStableSimilarityCandidates(await this.collectFolderSimilarityCandidates(e));ve.debug(`similarity folder candidates done elapsed=${Date.now()-n}ms candidates=${o.length}`);for(let c of o)e.matchedLocal.has(c.localEntry.metaPath)||e.matchedRemote.has(c.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(c,t,o)||(await this.addRename(e,c,t),await this.matchChildrenAfterFolderRename(e,c.localEntry,c.remoteEntry));n=Date.now();let i=this.pickStableSimilarityCandidates(await this.collectFileSimilarityCandidates(e,t));if(this.diagnostics.similarity.stableFileCandidates=i.length,ve.debug(`similarity file candidates done elapsed=${Date.now()-n}ms candidates=${i.length}`),i.length===0)return;n=Date.now();let a=await this.collectFileEqualCandidates(e);ve.debug(`similarity equal candidates done elapsed=${Date.now()-n}ms candidates=${a.length}`);let s=0;for(let c of i)e.matchedLocal.has(c.localEntry.metaPath)||e.matchedRemote.has(c.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(c,t,i)||this.isSafeFileSimilarityPair(a,c)&&(await this.addRename(e,c,t),s++);ve.debug(`similarity apply file candidates done accepted=${s} changes=${e.changes.length}`),this.diagnostics.similarity.acceptedFileCandidates=s}async collectFileInodeCandidates(e){let{localEntries:t,remoteEntries:n}=this.getContentCandidateFiles(e);return this.fingerprint.findInodeFileCandidates(t,n)}async collectFileEqualCandidates(e){let{localEntries:t,remoteEntries:n}=this.getContentCandidateFiles(e);return this.fingerprint.findEqualFileCandidates(t,n)}async collectFolderExactCandidates(e){let t=[];for(let n of e.local.values())if(!(!n.isFolder||e.matchedLocal.has(n.metaPath)||this.isIgnoredUntrackedLocal(n)))for(let o of e.remote.values())!o.isFolder||e.matchedRemote.has(o.metaPath)||n.metaPath!==o.metaPath&&await this.areFolderSubtreesEqual(e.local,e.remote,n,o)&&t.push({localEntry:n,remoteEntry:o,score:1,reason:"folderContentHash"});return t}async areFolderSubtreesEqual(e,t,n,o){let i=this.getFolderDescendantsByRelativePath(e,n),a=this.getFolderDescendantsByRelativePath(t,o);if(i.size!==a.size)return!1;for(let[s,c]of i){let l=a.get(s);if(!l||c.isFolder!==l.isFolder)return!1;if(c.isFolder)continue;if(await this.fingerprint.areEntriesEqual(c,l)!=="same")return!1}return!0}getFolderDescendantsByRelativePath(e,t){let n=new Map;for(let o of e.values())o.metaPath===t.metaPath||!ee(o.metaPath,t.metaPath)||n.set(o.metaPath.slice(t.metaPath.length+1),o);return n}async collectFileSimilarityCandidates(e,t){let{localEntries:n,remoteEntries:o}=this.getContentCandidateFiles(e),i=0;if(t?.size&&(i=this.estimatePendingSamePathSimilarityPairs(n,o,t),this.diagnostics.similarity.pendingSamePathPairs=i,t.size<2||i>CP)){let c=n.length,l=o.length;n=n.filter(u=>!t.has(u.metaPath)),o=o.filter(u=>!t.has(u.metaPath)),this.diagnostics.similarity.skippedPendingSamePathLocalCandidates=c-n.length,this.diagnostics.similarity.skippedPendingSamePathRemoteCandidates=l-o.length;let p=t.size<2?"singlePendingSamePath":"pendingPairBudget";ve.debug(`skip pending same-path similarity candidates pendingSamePath=${t.size} pendingPairs=${i} maxPairs=${CP} skippedLocal=${c-n.length} skippedRemote=${l-o.length}`);for(let u of t.values())this.logFileFlow("skip similarity",{path:u.localEntry.metaPath,remotePath:u.remoteEntry.metaPath,fileId:this.getEntryFileId(u.localEntry,u.remoteEntry),reason:p,pendingPairs:i})}if(this.diagnostics.similarity.fileLocalCandidates=n.length,this.diagnostics.similarity.fileRemoteCandidates=o.length,n.length===0||o.length===0)return[];let{candidates:a,stats:s}=await this.fingerprint.findSimilarFileCandidates(n,o);return Object.assign(this.diagnostics.similarity,s),a}estimatePendingSamePathSimilarityPairs(e,t,n){let o=new Map,i=new Set,a=c=>{let l=this.getSimilarityBucketKey(c),p=o.get(l);return p||(p={leftTotal:0,rightTotal:0,leftPending:0,rightPending:0,samePathPending:0},o.set(l,p)),p};for(let c of e){let l=a(c);l.leftTotal++,n.has(c.metaPath)&&(l.leftPending++,i.add(c.metaPath))}for(let c of t){let l=a(c);l.rightTotal++,n.has(c.metaPath)&&(l.rightPending++,i.has(c.metaPath)&&l.samePathPending++)}let s=0;for(let c of o.values())s+=c.leftPending*c.rightTotal-c.samePathPending+(c.leftTotal-c.leftPending)*c.rightPending;return s}getSimilarityBucketKey(e){return $l.posix.extname(e.metaPath).toLowerCase()}async collectFolderSimilarityCandidates(e){let t=[];for(let n of e.local.values())if(!(!n.isFolder||e.matchedLocal.has(n.metaPath)||this.isIgnoredUntrackedLocal(n)))for(let o of e.remote.values()){if(!o.isFolder||e.matchedRemote.has(o.metaPath)||n.metaPath===o.metaPath)continue;let i=await this.getFolderSimilarity(e.local,e.remote,n,o);i>=DA&&t.push({localEntry:n,remoteEntry:o,score:i,reason:"folderSimilarity"})}return t}async getFolderSimilarity(e,t,n,o){let i=this.getFolderFileDescendants(e,n),a=this.getFolderFileDescendants(t,o),s=Math.max(i.length,a.length);if(s===0)return 1;let c=new Map(a.map(m=>[m.metaPath.slice(o.metaPath.length+1),m])),l=new Set,p=0,u=await this.fingerprint.findEqualFileCandidates(i,a),g=new Map;for(let m of u){let f=g.get(m.localEntry.metaPath);f||(f=[],g.set(m.localEntry.metaPath,f)),f.push(m.remoteEntry.metaPath)}for(let m of i){let f=m.metaPath.slice(n.metaPath.length+1),y=c.get(f);if(y){l.add(y.metaPath),p++;continue}for(let C of g.get(m.metaPath)??[])if(!l.has(C)){l.add(C),p++;break}}return p/s}getFolderFileDescendants(e,t){return[...e.values()].filter(n=>!n.isFolder&&n.metaPath!==t.metaPath&&ee(n.metaPath,t.metaPath))}pickStableSimilarityCandidates(e){let t=[];for(let n of e)this.isUniqueBestCandidate(n,e,!0)&&this.isUniqueBestCandidate(n,e,!1)&&t.push(n);return t}isUniqueBestCandidate(e,t,n){let o=t.filter(a=>n?a.localEntry.metaPath===e.localEntry.metaPath:a.remoteEntry.metaPath===e.remoteEntry.metaPath).sort((a,s)=>s.score-a.score);if(o[0]!==e)return!1;let i=o[1];return i?e.score-i.score>=AA:!0}isSafeFileSimilarityPair(e,t){let n=[...e];return n.some(o=>o.localEntry.metaPath===t.localEntry.metaPath&&o.remoteEntry.metaPath===t.remoteEntry.metaPath)||n.push(t),this.pickStableSimilarityCandidates(n).some(o=>o.localEntry.metaPath===t.localEntry.metaPath&&o.remoteEntry.metaPath===t.remoteEntry.metaPath)}isUnsafePendingSamePathRenameSteal(e,t,n){if(!t.has(e.localEntry.metaPath)&&!t.has(e.remoteEntry.metaPath))return!1;let o=!this.hasPendingSamePathSwapCandidate(e,t,n);return o&&this.logFileFlow("reject rename stealing pending same-path",{localPath:e.localEntry.metaPath,remotePath:e.remoteEntry.metaPath,fileId:this.getEntryFileId(e.localEntry,e.remoteEntry),reason:e.reason,score:e.score}),o}hasPendingSamePathSwapCandidate(e,t,n){let o=e.localEntry.metaPath,i=e.remoteEntry.metaPath;return!t.has(o)||!t.has(i)?!1:n.some(a=>a!==e&&a.localEntry.metaPath===i&&a.remoteEntry.metaPath===o&&(a.reason===e.reason||a.score>=1||e.score>=1))}getContentCandidateFiles(e){return this.getContentCandidateFilesFromAvailable(this.getAvailableFiles(e.local,e.matchedLocal).filter(t=>!this.isIgnoredUntrackedLocal(t)),this.getAvailableFiles(e.remote,e.matchedRemote))}getContentCandidateFilesFromAvailable(e,t){return{localEntries:e,remoteEntries:t}}async addRename(e,t,n){let{localEntry:o,remoteEntry:i,score:a,reason:s}=t;if(!this.isAvailableRenamePair(o,i,e.matchedLocal,e.matchedRemote))return;let c=await this.computeContentChanged(o,i);this.markMatched(e,o,i),this.consumePendingSamePathForRename(n,o,i,s,a),this.addChange(e,{kind:"renamed",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),oldMetaPath:i.metaPath,isFolder:o.isFolder,contentChanged:c,metaChanged:!Po(o.meta??{},i.meta??{}),confidence:a,reason:s}),this.logFileFlow("accept rename",{localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),reason:s,score:a,contentChanged:c})}isAvailableRenamePair(e,t,n,o){return!n.has(e.metaPath)&&!o.has(t.metaPath)&&e.isFolder===t.isFolder&&e.metaPath!==t.metaPath&&!this.isIgnoredUntrackedLocal(e)}async addComparison(e,t,n){this.applyComparisonOutcome(e,await this.createComparisonOutcome(t,n))}async addComparisonOrPending(e,t,n,o){this.applyComparisonOutcome(e,await this.createComparisonOutcome(t,n),o)}async addComparisonsOrPending(e,t,n){let o=await Promise.all(t.map(i=>this.createComparisonOutcome(i.localEntry,i.remoteEntry)));for(let i of o)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.applyComparisonOutcome(e,i,n)}async createComparisonOutcome(e,t){return{localEntry:e,remoteEntry:t,contentChanged:await this.computeContentChanged(e,t),metaChanged:!Po(e.meta??{},t.meta??{})}}applyComparisonOutcome(e,t,n){let{localEntry:o,remoteEntry:i,contentChanged:a,metaChanged:s}=t;if(this.markMatched(e,o,i),o.isFolder!==i.isFolder){this.addChange(e,{kind:"metaIssue",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),isFolder:o.isFolder,reason:"resourceTypeChanged"});return}if(o.metaPath!==i.metaPath){this.addChange(e,{kind:"renamed",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),oldMetaPath:i.metaPath,isFolder:o.isFolder,contentChanged:a,metaChanged:s,confidence:1,reason:"sameId"}),this.logFileFlow("accept rename",{localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),reason:"sameId",score:1,contentChanged:a});return}if(!(!a&&!s)){if(n){this.unmarkMatched(e,o,i),this.addPendingSamePath(n,{localEntry:o,remoteEntry:i,contentChanged:a,metaChanged:s});return}this.addChange(e,{kind:a?"contentDifferent":"metaDifferent",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),isFolder:o.isFolder,contentChanged:a,metaChanged:s})}}flushPendingSamePathChanges(e,t){for(let[n,o]of[...t]){if(e.matchedLocal.has(o.localEntry.metaPath)||e.matchedRemote.has(o.remoteEntry.metaPath)){let i=this.removePendingSamePath(t,n);i&&this.logFileFlow("consume pending same-path",{path:i.localEntry.metaPath,remotePath:i.remoteEntry.metaPath,fileId:this.getEntryFileId(i.localEntry,i.remoteEntry),reason:"alreadyMatchedBeforeFlush"});continue}this.markMatched(e,o.localEntry,o.remoteEntry),this.addChange(e,{kind:o.contentChanged?"contentDifferent":"metaDifferent",metaPath:o.localEntry.metaPath,localPath:o.localEntry.metaPath,remotePath:o.remoteEntry.metaPath,fileId:this.getEntryFileId(o.localEntry,o.remoteEntry),isFolder:o.localEntry.isFolder,contentChanged:o.contentChanged,metaChanged:o.metaChanged}),this.removePendingSamePath(t,n),this.logFileFlow("flush pending same-path",{path:o.localEntry.metaPath,remotePath:o.remoteEntry.metaPath,fileId:this.getEntryFileId(o.localEntry,o.remoteEntry),contentChanged:o.contentChanged,metaChanged:o.metaChanged})}}addChange(e,t){e.changes.push(t),this.diagnostics.changes++}logFileFlow(e,t){let n=Object.entries(t).filter(([,o])=>o!==void 0).map(([o,i])=>`${o}=${String(i)}`).join(" ");ve.debug(`flow ${e} phase=${this.currentMatchPhase} ${n}`)}addPendingSamePath(e,t){e.has(t.localEntry.metaPath)||this.diagnostics.pendingSamePath++,e.set(t.localEntry.metaPath,t),this.logFileFlow("pending same-path",{path:t.localEntry.metaPath,remotePath:t.remoteEntry.metaPath,fileId:this.getEntryFileId(t.localEntry,t.remoteEntry),contentChanged:t.contentChanged,metaChanged:t.metaChanged})}removePendingSamePath(e,t){let n=e.get(t);if(n)return e.delete(t),this.diagnostics.pendingSamePath--,n}consumePendingSamePathForRename(e,t,n,o,i){if(e?.size)for(let a of new Set([t.metaPath,n.metaPath])){let s=this.removePendingSamePath(e,a);s&&this.logFileFlow("consume pending same-path",{path:s.localEntry.metaPath,remotePath:s.remoteEntry.metaPath,fileId:this.getEntryFileId(s.localEntry,s.remoteEntry),reason:o,score:i,matchedLocalPath:t.metaPath,matchedRemotePath:n.metaPath})}}async computeContentChanged(e,t){return e.isFolder||t.isFolder?!1:await this.fingerprint.areEntriesEqual(e,t)!=="same"}markMatched(e,t,n){e.matchedLocal.has(t.metaPath)||(e.matchedLocal.add(t.metaPath),this.diagnostics.matchedLocal++,t.isFolder||this.diagnostics.matchedLocalFiles++),e.matchedRemote.has(n.metaPath)||(e.matchedRemote.add(n.metaPath),this.diagnostics.matchedRemote++,n.isFolder||this.diagnostics.matchedRemoteFiles++),this.refreshAvailableFileStats()}unmarkMatched(e,t,n){e.matchedLocal.delete(t.metaPath)&&(this.diagnostics.matchedLocal--,t.isFolder||this.diagnostics.matchedLocalFiles--),e.matchedRemote.delete(n.metaPath)&&(this.diagnostics.matchedRemote--,n.isFolder||this.diagnostics.matchedRemoteFiles--),this.refreshAvailableFileStats()}refreshAvailableFileStats(){this.diagnostics.availableLocalFiles=this.diagnostics.local.files-this.diagnostics.matchedLocalFiles,this.diagnostics.availableRemoteFiles=this.diagnostics.remote.files-this.diagnostics.matchedRemoteFiles}async matchChildrenAfterFolderRename(e,t,n){!t.isFolder||!n.isFolder||t.metaPath===n.metaPath||(await this.matchChildrenByRelativePath(e,t,n),await this.matchChildrenByContent(e,t,n))}async matchChildrenByRelativePath(e,t,n){for(let o of e.local.values()){if(e.matchedLocal.has(o.metaPath)||!ee(o.metaPath,t.metaPath))continue;let i=o.metaPath.slice(t.metaPath.length+1),a=e.remote.get(n.metaPath+"/"+i);!a||e.matchedRemote.has(a.metaPath)||await this.addComparison(e,o,a)}}async matchChildrenByContent(e,t,n){let{localEntries:o,remoteEntries:i}=this.getContentCandidateFilesFromAvailable(this.getAvailableFolderFiles(e.local,t,e.matchedLocal).filter(s=>!this.isIgnoredUntrackedLocal(s)),this.getAvailableFolderFiles(e.remote,n,e.matchedRemote)),a=this.pickStableSimilarityCandidates(await this.fingerprint.findEqualFileCandidates(o,i));for(let s of a)!ee(s.localEntry.metaPath,t.metaPath)||!ee(s.remoteEntry.metaPath,n.metaPath)||await this.addRename(e,s)}getAvailableFolderFiles(e,t,n){return this.getFolderFileDescendants(e,t).filter(o=>!n.has(o.metaPath))}indexById(e){let t=new Map,n=new Set;for(let o of e.values()){let i=o.meta?.id;if(i){if(t.has(i)){n.add(i);continue}t.set(i,o)}}for(let o of n)t.delete(o);return t}indexRemoteByIdForWorkspaceRename(e,t){let n=new Map;for(let[o,i]of this.groupRemoteEntriesByMetaId(e)){if(i.length===1){n.set(o,i[0]);continue}let a=i.filter(s=>!t.has(s.metaPath));a.length===1&&n.set(o,a[0])}return n}indexIgnoredMirrorResidues(e,t){let n=this.groupRemoteEntriesByMetaId(t),o=this.collectParentsWithTrackedChild(t),i=new Set;for(let a of t.values()){if(!e.has(a.metaPath))continue;if(!a.hasMeta){o.has($l.posix.dirname(a.metaPath))&&i.add(a.metaPath);continue}let s=a.meta?.id;if(!s)continue;let c=n.get(s);!c||c.length<2||(a.underUnregisteredMirrorDirectory||this.hasUnmatchedSibling(c,a.metaPath,e))&&i.add(a.metaPath)}return i}filterOutIgnoredMirrorResidues(e,t){if(t.size===0)return e;let n=new Map;for(let[o,i]of e)t.has(o)||n.set(o,i);return n}filterOutBaselineMissingLocalEntries(e,t){if(t.length===0)return e;let n=new Set(t.map(i=>i.metaPath)),o=new Map;for(let[i,a]of e)n.has(i)||o.set(i,a);return o}async addBaselineMissingLocalChanges(e,t){for(let n of t)n.isFolder&&!n.hasMeta||await this.isScannedEntryStillPresent(this.workspaceRoot,n)&&this.addChange(e,{kind:"localOnly",metaPath:n.metaPath,localPath:n.metaPath,fileId:n.meta?.id,isFolder:n.isFolder,hasMeta:n.hasMeta})}collectBaselineMissingLocalEntries(e,t){let n=new Set,o=new Set;for(let s of t.values()){let c=s.meta?.id;c&&n.add(c);let l=Ve(s.metaPath);l&&o.add(l)}let i=new Map;for(let s of e.values()){if(!s.hasMeta||t.has(s.metaPath))continue;let c=s.meta?.id;if(!c||n.has(c))continue;let l=Ve(s.metaPath);if(!l)continue;let p=i.get(l);p?p.push(s):i.set(l,[s])}let a=[];for(let[s,c]of i)if(!(o.has(s)&&c.length<WA)){for(let l of c)l.baselineMissing=!0,a.push(l);this.reportProblemOnce(new na(this.workspaceRoot,"sync.incompleteBaselineFiles",{projectPaths:[s],remotePaths:c.slice(0,UA).map(l=>l.metaPath),count:c.length}))}return a}groupRemoteEntriesByMetaId(e){let t=new Map;for(let n of e.values()){let o=n.meta?.id;if(!o)continue;let i=t.get(o);i?i.push(n):t.set(o,[n])}return t}collectParentsWithTrackedChild(e){let t=new Set;for(let n of e.values())n.hasMeta&&t.add($l.posix.dirname(n.metaPath));return t}hasUnmatchedSibling(e,t,n){for(let o of e)if(o.metaPath!==t&&!n.has(o.metaPath))return!0;return!1}getEntryFileId(e,t){return t.meta?.id??e.meta?.id}async toSyncFileChange(e){return{path:Me(e.localPath??e.remotePath??e.metaPath),remotePath:e.localPath??e.remotePath??e.metaPath,...e.fileId!==void 0?{fileId:e.fileId}:{},oldPath:e.oldMetaPath?Me(e.oldMetaPath):void 0,oldRemotePath:e.oldMetaPath,type:this.toScmChangeType(e.kind),isFolder:e.isFolder,contentChanged:e.contentChanged,metaChanged:e.metaChanged}}toScmChangeType(e){return e==="localOnly"?"added":e==="remoteOnly"?"deleted":e==="contentDifferent"||e==="metaDifferent"?"modified":e==="renamed"?"renamed":"conflict"}};var jA=T("workspace.sync-status.refresh"),$r=class{constructor(e,t={}){this.id=e;this.scope=t.scope??"both",this.source=t.source??"manual",this.task=t.task??Xe.INSTANCE,this.forceRefresh=t.forceRefresh===!0,this.rootRemotePath=t.rootRemotePath,this.refreshLocal=this.scope==="local"||this.scope==="both",this.refreshRemote=this.scope==="remote"||this.scope==="both",this.workspace=t.workspace,this.accepted=t.onAccepted??(()=>{}),this.publishResult=t.publish??(()=>{})}kind="refresh";scope;source;task;forceRefresh;rootRemotePath;refreshLocal;refreshRemote;accepted;workspace;publishResult;localController=new AbortController;remoteController=new AbortController;refreshResult={warnings:[]};localCancelled=!1;remoteCancelled=!1;onAccepted(){this.accepted()}abort(){this.cancelLocal(),this.cancelRemote()}cancelConflictingSubTasks(e){this.cancelSubTasks({local:e.refreshLocal,remote:e.refreshRemote})}cancelSubTasks(e){e.local&&this.refreshLocal&&this.cancelLocal(),e.remote&&this.refreshRemote&&this.cancelRemote()}isLocalCancelled(){return this.localCancelled}isRemoteCancelled(){return this.remoteCancelled}canRunSubTask(e){return e==="local"?this.refreshLocal&&!this.localCancelled:this.refreshRemote&&!this.remoteCancelled}hasRunnableSubTask(){return this.canRunSubTask("local")||this.canRunSubTask("remote")}getRefreshResult(){return this.refreshResult}canRunBackgroundRefresh(){let e=this.workspace;return!!e&&e.isConnected&&!!e.activeServerUrl}async run(){if(!this.workspace||!this.hasRunnableSubTask())return{kind:"noop"};this.task.start(Number(this.canRunSubTask("local"))+Number(this.canRunSubTask("remote")),{message:d("workspace.sync.progress.refresh.running")});let e=this.canRunSubTask("local")?this.task.subTaskMonitor(1):void 0,t=this.canRunSubTask("remote")?this.task.subTaskMonitor(1):void 0;try{let n=e?this.runLocalRefresh(e):Promise.resolve(void 0),o=t?this.runRemoteRefresh(t):Promise.resolve(void 0),[i,a]=await Promise.all([n,o]);return this.canPublish(i,a)?{kind:"replaceRefreshScope",localChanges:this.localCancelled?void 0:i,...this.localCancelled||!this.rootRemotePath?{}:{localRootRemotePath:this.rootRemotePath},remoteChanges:this.remoteCancelled?void 0:a,...a!==void 0&&this.refreshResult.warnings.length>0?{warnings:this.refreshResult.warnings}:{}}:{kind:"noop"}}catch(n){if(n instanceof Error&&n.name==="AbortError")return{kind:"noop"};throw n}}createPublishableResult(e){if(e.kind!=="replaceRefreshScope")return e;let t=this.localCancelled?void 0:e.localChanges,n=this.remoteCancelled?void 0:e.remoteChanges;return t===void 0&&n===void 0?{kind:"noop"}:{kind:"replaceRefreshScope",localChanges:t,...t===void 0||!e.localRootRemotePath?{}:{localRootRemotePath:e.localRootRemotePath},remoteChanges:n,...n!==void 0&&e.warnings?.length?{warnings:e.warnings}:{}}}publish(e){let t=this.createPublishableResult(e);return this.refreshResult=this.createRefreshResult(t),this.publishResult(t)}async runLocalRefresh(e){e.start(1);let t=this.workspace,n=await new zl({workspace:t,task:e,signal:this.localController.signal,rootRemotePath:this.rootRemotePath}).detect();return e.step(1),n.changes}async runRemoteRefresh(e){e.start(1);let t=await this.detectRemoteChanges(e);return e.step(1),t}async detectRemoteChanges(e){let t=this.workspace;if(!t)return[];try{return this.remoteController.signal.aborted?[]:await new jr({workspace:t,task:e,forceRefresh:this.forceRefresh,signal:this.remoteController.signal}).detect()}catch(n){return tg(n)?(this.refreshResult={warnings:[{errorCode:"err.login.notlogin",properties:{serverUrl:t.activeServerUrl}}]},[]):(jA.warn(`remote sync status detection failed: ${t.root}`,n),[])}}createRefreshResult(e){return e.kind!=="replaceRefreshScope"?{warnings:[]}:{warnings:e.warnings??[]}}canPublish(e,t){return this.refreshLocal&&!this.localCancelled&&!e||this.refreshRemote&&!this.remoteCancelled&&!t?!1:!this.localCancelled&&!!e||!this.remoteCancelled&&!!t}cancelLocal(){this.localCancelled=!0,this.localController.abort()}cancelRemote(){this.remoteCancelled=!0,this.remoteController.abort()}};var Kl=class{taskQueue=[];scheduling=!1;dispose(){this.cancelAllStateTasks(),this.scheduleTaskQueue()}hasRemoteRefreshTask(){return this.getRefreshTasks().some(e=>e.refreshRemote)}enqueue(e){let t=this.mergePendingFileWatchTask(e);return t?{accepted:!0,promise:t.promise}:this.prepareTask(e)?(e instanceof $r&&e.refreshLocal&&this.cancelLocalStateTasks(),e.onAccepted?.(),{accepted:!0,promise:this.enqueueTask(e)}):{accepted:!1,promise:Promise.resolve()}}submitImmediate(e,t={}){t.cancel==="local"?this.cancelLocalStateTasks():this.cancelAllStateTasks();let n=e.publish(e.toResult());this.enqueueFollowUpTask(n),this.scheduleTaskQueue()}prepareTask(e){return e instanceof $r?this.prepareRefreshTask(e):!0}prepareRefreshTask(e){if(e.source==="background")return this.taskQueue.length===0&&e.canRunBackgroundRefresh();for(let t of this.getRefreshTasks())t.cancelConflictingSubTasks(e);return!0}enqueueTask(e){let t=this.createScheduledTask(e);return this.taskQueue.push(t),this.scheduleTaskQueue(),t.promise}createScheduledTask(e){let t,n,o=new Promise((i,a)=>{t=i,n=a});return{task:e,state:"pending",promise:o,resolve:t,reject:n}}scheduleTaskQueue(){if(!this.scheduling){this.scheduling=!0;try{for(let e of[...this.taskQueue])if(e.state==="pending"){if(this.shouldDiscardScheduledTask(e.task)){this.finishScheduledTask(e);continue}this.canStartScheduledTask(e)&&this.startScheduledTask(e)}}finally{this.scheduling=!1}}}shouldDiscardScheduledTask(e){return e instanceof mr?e.isCancelled():e instanceof $r?!e.hasRunnableSubTask():!1}canStartScheduledTask(e){return e.task instanceof mr?!this.hasEarlierPendingFileWatchTask(e)&&!this.hasRunningFileWatchTask()&&!this.hasRunningLocalRefreshTask():!0}startScheduledTask(e){e.state="running",this.runScheduledTask(e)}async runScheduledTask(e){let t;try{let n=await e.task.run();t=await e.task.publish(n)}catch(n){this.finishScheduledTask(e,n);return}this.removeScheduledTask(e);try{t?await this.enqueue(t).promise:this.scheduleTaskQueue(),e.resolve()}catch(n){e.reject(n)}}finishScheduledTask(e,t){this.removeScheduledTask(e),t?e.reject(t):e.resolve(),this.scheduleTaskQueue()}removeScheduledTask(e){let t=this.taskQueue.indexOf(e);t>=0&&this.taskQueue.splice(t,1)}enqueueFollowUpTask(e){e&&this.enqueue(e).promise}cancelAllStateTasks(){this.cancelFileWatchTasks(),this.cancelRefreshTasks({local:!0,remote:!0})}cancelLocalStateTasks(){this.cancelFileWatchTasks(),this.cancelRefreshTasks({local:!0})}cancelRefreshTasks(e){for(let t of this.getRefreshTasks())t.cancelSubTasks(e)}cancelFileWatchTasks(){for(let e of this.taskQueue)e.task instanceof mr&&e.task.abort()}mergePendingFileWatchTask(e){if(!(e instanceof mr))return;let t=this.findMergeableFileWatchTask();if(t)return t.task.mergeTask(e),t}findMergeableFileWatchTask(){for(let e=this.taskQueue.length-1;e>=0;e--){let t=this.taskQueue[e];if(t.state==="pending"&&t.task instanceof mr&&!t.task.isCancelled())return t}}getRefreshTasks(){return this.taskQueue.map(e=>e.task).filter(e=>e instanceof $r)}hasRunningFileWatchTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof mr)}hasEarlierPendingFileWatchTask(e){for(let t of this.taskQueue){if(t===e)return!1;if(t.state==="pending"&&t.task instanceof mr)return!0}return!1}hasRunningLocalRefreshTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof $r&&e.task.canRunSubTask("local"))}};var ph=T("workspace.sync-status"),Gl=class{constructor(e){this.workspace=e;this.coordinator=new Kl}changes=new Map;fullRefreshCount=0;taskId=0;coordinator;backgroundRemoteDiscoveryTimer;dispose(){this.stopBackgroundRemoteDiscovery(),this.coordinator.dispose()}startBackgroundRemoteDiscovery(e){this.stopBackgroundRemoteDiscovery(),!(e.intervalMs<=0)&&this.scheduleBackgroundRemoteDiscovery(e.intervalMs,e.runImmediately?0:e.intervalMs)}stopBackgroundRemoteDiscovery(){this.backgroundRemoteDiscoveryTimer&&(clearTimeout(this.backgroundRemoteDiscoveryTimer),this.backgroundRemoteDiscoveryTimer=void 0)}async refreshAll(e={}){let t=this.createRefreshTask(e),n=this.coordinator.enqueue(t);return n.accepted&&this.workspace?.notifySyncStatusRefreshing?.(n.promise,!!e.task),await n.promise,t.getRefreshResult()}scheduleBackgroundRemoteDiscovery(e,t=e){this.backgroundRemoteDiscoveryTimer=setTimeout(()=>{this.backgroundRemoteDiscoveryTimer=void 0,this.runBackgroundRemoteDiscovery(e)},t)}async runBackgroundRemoteDiscovery(e){if(this.scheduleBackgroundRemoteDiscovery(e),await this.hasSyncLock()){ph.debug("background remote discovery skipped because sync lock is held");return}if(this.coordinator.hasRemoteRefreshTask()){ph.debug("background remote discovery skipped because remote refresh is already queued");return}this.refreshAll({scope:"remote",source:"background"}).catch(t=>{ph.warn("background remote discovery failed",t)})}async hasSyncLock(){let e=this.workspace?.lockManager;return e?await e.isHeldLock("sync"):!1}createRefreshTask(e={}){return new $r(this.nextTaskId(),{...e,workspace:this.workspace,onAccepted:()=>{this.fullRefreshCount++},publish:t=>this.publishTaskResult(t)})}replaceAllByRefreshScope(e,t,n){let o=e?[...e]:[],i=t??[];if(!e||!t)for(let s of this.changes.values()){let c=mt(s),l=Tr(s);!e&&c&&!l||e&&n&&c&&!l&&!bm(s,[n])?o.push(s):!t&&l&&!c&&i.push(s)}let a=Xk(o,i);this.replaceAllWithoutVersionChange([...o,...i,...a])}async consumeFileChanges(e,t={}){await this.coordinator.enqueue(this.createFileWatchTask(e,t)).promise}createFileWatchTask(e,t){return new mr(this.nextTaskId(),{fileChanges:e,bulk:t.bulk,workspace:this.workspace,getChanges:()=>this.getChanges(),publish:n=>this.publishTaskResult(n)})}applyOperationResult(e,t=[]){this.coordinator.submitImmediate(new Ul(this.nextTaskId(),e,t,n=>this.publishTaskResult(n)))}applyFileWatchResult(e,t){this.coordinator.submitImmediate(this.createReplaceTargetsTask("fileWatch",t,e,"fileWatch"),{cancel:"local"})}clearTargets(e){this.coordinator.submitImmediate(this.createClearTask({kind:"paths",remotePaths:e}))}clear(){this.coordinator.submitImmediate(this.createClearTask({kind:"all"}))}createReplaceTargetsTask(e,t,n,o="normal"){return new jl(this.nextTaskId(),{source:e,targetRemotePaths:t,changes:n,mode:o,publish:i=>this.publishTaskResult(i)})}createClearTask(e){return new Wl(this.nextTaskId(),e,t=>this.publishTaskResult(t))}publishTaskResult(e){if(e.kind!=="noop"){if(e.kind==="requestRefresh")return this.createRefreshTask({scope:e.scope,source:e.source,task:e.task,rootRemotePath:e.rootRemotePath});if(e.kind==="replaceRefreshScope"){this.replaceAllByRefreshScope(e.localChanges,e.remoteChanges,e.localRootRemotePath);return}if(e.kind==="replaceTargets"){this.replaceTargetsByMode(e.targetRemotePaths,e.changes,e.mode??"normal");return}this.publishClearResult(e.target)}}publishClearResult(e){if(e.kind==="all"){this.clearWithoutVersionChange();return}this.clearTargetsWithoutVersionChange(e.remotePaths)}nextTaskId(){return this.taskId++,this.taskId}getChanges(){return[...this.changes.values()]}getSummary(){let e=0,t=0;for(let n of this.changes.values())mt(n)?e++:Tr(n)&&t++;return{pushCount:e,pullCount:t}}getLocalChanges(){return this.getChanges().filter(e=>mt(e))}getRemoteChanges(){return this.getChanges().filter(e=>Tr(e))}getFullRefreshCount(){return this.fullRefreshCount}replaceTargets(e,t){if(e.length===0)return;let n=Di(e);for(let[o,i]of this.changes)n(i)&&this.changes.delete(o);this.addChanges(t)}replaceFileWatchTargets(e,t){if(e.length===0)return;let n=t.filter(il).flatMap(i=>[i.remotePath,i.oldRemotePath]).filter(i=>!!i),o=new Set;for(let[i,a]of this.changes)if(Yk(a,e)||bm(a,n)){if(a.type==="renamed"&&t.some(s=>s.type==="added"&&s.remotePath===a.remotePath)){o.add(a.remotePath);continue}this.changes.delete(i)}this.addChanges(t.filter(i=>i.type!=="added"||!o.has(i.remotePath)))}addChanges(e){for(let t of e)t.type!=="clean"&&this.addMergedChange(t)}addMergedChange(e){let t=this.createMoveChangeByExistingState(e);if(!t){this.changes.set(cl(e),e);return}this.changes.set(cl(t),t)}createMoveChangeByExistingState(e){let t=this.findMoveCounterpart(e);if(t)return this.changes.delete(cl(t)),this.createMoveChange(e,t)}findMoveCounterpart(e){let t;for(let n of this.changes.values())if(this.canMergeMoveChanges(e,n)){if(t)return;t=n}return t}canMergeMoveChanges(e,t){return!!e.fileId&&e.fileId===t.fileId&&(this.isLocalAdded(e)&&this.isLocalDeleted(t)||this.isLocalDeleted(e)&&this.isLocalAdded(t)||this.isRemoteAdded(e)&&this.isRemoteDeleted(t)||this.isRemoteDeleted(e)&&this.isRemoteAdded(t))}createMoveChange(e,t){let n=this.isAddedChange(e)?e:t,o=this.isDeletedChange(e)?e:t,i=this.isRemoteAdded(n)||this.isRemoteDeleted(o);return{path:n.path,remotePath:n.remotePath,fileId:n.fileId??o.fileId,oldPath:o.path,oldRemotePath:o.remotePath,type:i?"remoteRenamed":"renamed",isFolder:n.isFolder??o.isFolder,contentChanged:n.contentChanged??o.contentChanged,metaChanged:n.metaChanged??o.metaChanged}}isAddedChange(e){return this.isLocalAdded(e)||this.isRemoteAdded(e)}isDeletedChange(e){return this.isLocalDeleted(e)||this.isRemoteDeleted(e)}isLocalAdded(e){return e.type==="added"}isLocalDeleted(e){return e.type==="deleted"}isRemoteAdded(e){return e.type==="remoteAdded"}isRemoteDeleted(e){return e.type==="remoteDeleted"}replaceAllWithoutVersionChange(e){this.changes.clear(),this.addChanges(e),this.notifyChanged()}replaceTargetsByMode(e,t,n="normal"){n==="fileWatch"?this.replaceFileWatchTargets(e,t):this.replaceTargets(e,t),this.notifyChanged()}clearTargetsWithoutVersionChange(e){this.replaceTargets(e,[]),this.notifyChanged()}clearWithoutVersionChange(){this.changes.clear(),this.notifyChanged()}notifyChanged(){this.workspace?.notifySyncStatusChanged()}};var Yl=E(require("path"));Y();var BA=T("workspace.file-watch"),VA="**/*",qA=1e3,SP=5e3,$A=200,HA=50,zA=[".succapp"],vP="refreshAfterFileChange",Jl=class{constructor(e,t,n,o={},i){this.workspace=e;this.eventBus=t;this.fileWatcherProvider=n;this.options=o;this.lockManager=i;let a=this.disposables.add(this.fileWatcherProvider.createFileWatcher(e.root,VA));this.disposables.add(a.onFileChanged(s=>this.onFileChanged(s))),this.lockManager&&this.disposables.add(this.eventBus.on("workspace.lock.changed",s=>{s.payload.root!==this.workspace.root||s.payload.scope!=="sync"||s.payload.held||this.onSyncLockReleased()}))}disposables=new Kn;pendingChanges=new Map;lockReleaseTime=0;deferred=!1;deferredRecheckTimer;cancelPendingRefresh(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.pendingChanges.clear(),this.deferred=!1}async flushPendingRefresh(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),await this.refreshPendingChanges()}onFileChanged(e){let{filePath:t,type:n}=e;this.isWorkspaceSystemFile(t)||Date.now()-this.lockReleaseTime<(this.options.lockReleaseCooldown??HA)||(this.pendingChanges.set(`${n}\0${t}`,e),this.scheduleRefresh())}scheduleRefresh(){Ko(this,vP,this.options.refreshDelay??qA,()=>this.refreshPendingChanges(),{maxWaitMs:this.options.maxRefreshDelay??SP})}takePendingChanges(){let e=[...this.pendingChanges.values()];return this.pendingChanges.clear(),e}async refreshPendingChanges(e=!1){if(this.pendingChanges.size===0){this.deferred=!1;return}if(await this.isSyncLockHeld()){this.deferred=!0,this.scheduleDeferredRecheck();return}let t=this.deferred;this.deferred=!1,this.clearDeferredRecheckTimer();let n=this.takePendingChanges();await this.refresh(n,e||t)}async refresh(e,t){if(e.length!==0){this.fireWorkspaceFileChanged(e[0]);try{await this.workspace.consumeFileChanges(e,{bulk:t||e.length>=this.getBulkThreshold()})}catch(n){BA.debug(`refresh sync status after file change failed: ${this.workspace.root}`,n)}}}fireWorkspaceFileChanged(e){this.eventBus.fire(new Ye("workspace.file.changed",{root:this.workspace.root,filePath:e.filePath,type:e.type},this))}getBulkThreshold(){return Math.max(1,this.options.bulkThreshold??$A)}async isSyncLockHeld(){return this.lockManager?await this.lockManager.isHeldLock("sync"):!1}onSyncLockReleased(){this.lockReleaseTime=Date.now(),this.deferred&&(this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.refreshPendingChanges(!0))}scheduleDeferredRecheck(){this.deferredRecheckTimer||(this.deferredRecheckTimer=setTimeout(()=>{this.deferredRecheckTimer=void 0,this.refreshPendingChanges()},this.options.maxRefreshDelay??SP),this.deferredRecheckTimer.unref?.())}clearDeferredRecheckTimer(){this.deferredRecheckTimer&&(clearTimeout(this.deferredRecheckTimer),this.deferredRecheckTimer=void 0)}clearRefreshTimer(){Go(this,vP)}isWorkspaceSystemFile(e){let t=Yl.relative(this.workspace.root,e);return zA.some(n=>t===n||t.startsWith(`${n}${Yl.sep}`))}dispose(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.pendingChanges.clear(),this.disposables.dispose()}};Y();var xr=E(require("fs")),Oo=E(require("path"));Et();Y();re();K();B();F();function Rt(){return{status:"planned",dryRun:!0,applied:!1}}function ht(){return{status:"applied",dryRun:!1,applied:!0}}function Hr(r=!1){return{status:"blocked",dryRun:r,applied:!1}}function Gn(r,e){return{status:"skipped",dryRun:r,applied:!1,properties:{skipCause:e}}}function Za(r=!1){return{status:"failed",dryRun:r,applied:!1}}var rs=E(require("path"));Et();Ee();var es=class r{constructor(e,t){this.filePath=e;this.content=t}content;changed=!1;static async read(e){return new r(e,await ke(e))}hasChanges(){return this.changed}getContent(){return this.content}upsertMarkedBlock(e){let t=KA(this.content,e);return this.updateContent(t)}removeMarkedBlock(e){let t=wP(e),n=PP(t);if(!n.test(this.content))return!1;let o=this.content.replace(n,"").replace(/\s*$/,"");return this.updateContent(o?`${o}
|
|
75
|
+
`:"")}async save(){return this.changed?(await pt(this.filePath,this.content),this.changed=!1,!0):!1}updateContent(e){return e===this.content?!1:(this.content=e,this.changed=!0,!0)}};function KA(r,e){let t=wP(e),n=PP(t);if(n.test(r))return r.replace(n,t.content);let o=r.replace(/\s*$/,"");return`${o}${o?`
|
|
73
76
|
|
|
74
77
|
`:""}${t.content}
|
|
75
|
-
`}function
|
|
76
|
-
`),n=t[0],o=t[t.length-1];return
|
|
77
|
-
`),{...
|
|
78
|
-
`)}async function
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
`;return
|
|
82
|
-
`;return c===await Le(s)?!1:(await He(s,c),!0)}};function bD(r){return Xn(r)?.split("/").join(Xe.sep)}async function TD(){let r=await An(Ma),e=Array.isArray(r.references)?r.references.map(t=>xD(t)?t.path:void 0).filter(t=>typeof t=="string"):[];return U(e.length>0,`Workspace template does not declare TypeScript references: ${await ml(Ma)}`),e}function xD(r){return typeof r=="object"&&r!==null&&"path"in r&&typeof r.path=="string"}function yl(r){return Wr(r,PD)}function Vk(r){return Xe.join(yl(r),qk)}function FD(r){return typeof r=="object"&&r!==null&&(!("servers"in r)||typeof r.servers=="object"&&r.servers!==null&&!Array.isArray(r.servers))}function MD(r){return{version:r.version,productType:r.productType,devToolApiVersion:r.devToolApiVersion}}function DD(r){return{version:r.version,productType:r.productType,devToolApiVersion:r.devToolApiVersion}}var zk=b(require("path"));vt();ne();$();var Hk=zk.posix.join(".vscode","settings.recommended.jsonc"),pi=class{workspace;constructor(e){this.workspace=e}async initialize(e){if(e.applyWorkspaceConfiguration!==!0)return!1;let t=dr(this.workspace.root),n=await Le(t),o=Lt(n,{...Jt,filePath:t,ignoreParseError:!0});if(!o)return!1;let i=await An(Hk),a=Lr(n);return a=ID(a,o,i),a===Lr(n)?!1:(await He(t,a),!0)}async hasUpdates(){let e=await _r(dr(this.workspace.root),Jt);return e?AD(e,await An(Hk)):!1}};function ID(r,e,t){let n=r;for(let[o,i]of Object.entries(t)){if(V(i)){n=OD(n,e,o,i);continue}if(Array.isArray(i)){n=_D(n,e,o,i);continue}e[o]===void 0&&(n=Nt(n,[o],i))}return n}function AD(r,e){return Object.entries(e).some(([t,n])=>{if(V(n))return Kk(Gk(r,t),n).length>0;if(Array.isArray(n)){let o=Array.isArray(r[t])?r[t]:[];return n.some(i=>!Jk(o,i))}return r[t]===void 0})}function Kk(r,e){return Object.entries(e).filter(([t])=>r[t]===void 0)}function OD(r,e,t,n){let o=Gk(e,t),i=Kk(o,n);if(i.length===0)return r;let a=r;if(e[t]!==void 0&&!V(e[t]))return Nt(a,[t],{...o,...Object.fromEntries(i)});for(let[s,c]of i)a=Nt(a,[t,s],c);return a}function Gk(r,e){return V(r[e])?r[e]:{}}function _D(r,e,t,n){let o=Array.isArray(e[t])?e[t]:[],i=n.filter(a=>!Jk(o,a));return i.length===0?r:Nt(r,[t],[...o,...i])}function Jk(r,e){return r.some(t=>ar(t,e))}var Cl=T("workspace.settings"),di=".gitignore",LD=di,ND=Dr.posix.join(Xt,di),WD="typescriptSupport",UD="jsonSchemaSupport",jD="frontendFrameworksSupport",Yk="json-schemas",BD="json-schema-support.json",Xk=Dr.posix.join(".agents","skills","succbi-frontend-development"),VD="succ-frontend-frameworks.json";function Qk(r){return r.workspaceSettingsUpdated||r.gitIgnoreUpdated||r.typeScriptSupportUpdated||r.jsonSchemaSupportUpdated||r.frontendDevelopmentSkillUpdated||r.agentFilesUpdated}async function Zk(r){let e=new pi(r),[t,n,o,i,a]=await Promise.all([e.hasUpdates(),pm(r,{apply:!1}),new Ea(r).previewMissingPaths(),vl(r.root),lm(r)]);return{workspaceRootPath:r.root,serverSupportAvailable:a!==void 0,actions:[{id:"workspace-settings",status:t?"pending":"up-to-date",paths:[dr(r.root)]},{id:"gitignore",status:n?"pending":"up-to-date",paths:[Dr.join(r.root,di),Dr.join(pr(r.root),di)]},{id:"agent-files",status:o.length>0?"pending":"up-to-date",paths:o},qD(r,i,a),$D(r,a),HD(r,a)]}}async function ew(r){return Sl(r,{applyWorkspaceConfiguration:!0,overwriteExistingTypeScriptSupport:!0,forceTypeScriptSupportRefresh:!0,forceJsonSchemaSupportRefresh:!0})}async function tw(r){let e=new pi(r),[t,n,o]=await Promise.all([vl(r.root),nw(r,e),lm(r)]),i=o!==void 0;return{initialized:!n&&(!i||t.length>0),existingTypeScriptSupportPaths:t,missingWorkspaceConfiguration:n,serverSupportAvailable:i}}async function Sl(r,e={}){let t=[],n=!1,o=!1,i=new pi(r);e.applyWorkspaceConfiguration===!0?(n=await pm(r,{apply:!0}),o=await i.initialize({applyWorkspaceConfiguration:e.applyWorkspaceConfiguration})):await nw(r,i)&&t.push({kind:"applyWorkspaceConfiguration",filePath:dr(r.root)});let a=await new Ea(r).initialize({applyWorkspaceConfiguration:e.applyWorkspaceConfiguration}),s=await lm(r),c=s?await new Ta(r).initialize({...s,applyWorkspaceConfiguration:e.applyWorkspaceConfiguration}):!1,l=s?await new Da(r).initialize({...e,...s},m=>t.push(m)):!1,p=s?await new xa(r).initialize({...s,applyWorkspaceConfiguration:e.applyWorkspaceConfiguration,forceRefresh:e.forceJsonSchemaSupportRefresh}):!1;return{workspaceSettingsUpdated:o,gitIgnoreUpdated:n,typeScriptSupportUpdated:l,jsonSchemaSupportUpdated:p,frontendDevelopmentSkillUpdated:c,agentFilesUpdated:a,confirmationRequests:t}}async function vl(r){return $k(r)}async function rw(r,e,t){try{await new Da(r).refreshOnServerVersionChange(e,t)}catch(n){Cl.warn(`refresh TypeScript support after server version change failed: ${r.root}`,n)}try{await new xa(r).refreshOnServerVersionChange(e,t)}catch(n){Cl.warn(`refresh JSON Schema support after server version change failed: ${r.root}`,n)}try{await new Ta(r).refreshOnServerVersionChange(e,t)}catch(n){Cl.warn(`refresh frontend development skill support after server version change failed: ${r.root}`,n)}}async function lm(r){try{let e=await r.requireClient();return{client:e,serverInfo:await e.getServerInfo()}}catch(e){Cl.debug(`skip server workspace support without server client: ${r.root}`,e);return}}async function nw(r,e){return await pm(r,{apply:!1})||await e.hasUpdates()}async function pm(r,e){let t=Dr.join(r.root,di),n=await Pa.read(t);n.upsertMarkedBlock(await Qr(LD));let o=Dr.join(pr(r.root),di),i=await Pa.read(o);if(i.upsertMarkedBlock(await Qr(ND)),e.apply){let a=await n.save(),s=await i.save();return a||s}return n.hasChanges()||i.hasChanges()}function qD(r,e,t){return t?zD(t.serverInfo,WD)?{id:"typescript-support",status:"pending",paths:e.length>0?e:[Wr(r.root,"succ-types")]}:{id:"typescript-support",status:"skipped",paths:e,reason:"server-capability-missing"}:{id:"typescript-support",status:"skipped",paths:e,reason:"server-support-unavailable"}}function $D(r,e){let t=[Wr(r.root,Yk),Wr(r.root,Yk,BD),dr(r.root)];return e?dm(e.serverInfo,UD)?{id:"json-schema-support",status:"pending",paths:t}:{id:"json-schema-support",status:"skipped",paths:t,reason:"server-capability-missing"}:{id:"json-schema-support",status:"skipped",paths:t,reason:"server-support-unavailable"}}function HD(r,e){let t=[Dr.join(r.root,...Xk.split("/")),Dr.join(r.root,...Xk.split("/"),VD)];return e?dm(e.serverInfo,jD)?{id:"frontend-development-skill",status:"pending",paths:t}:{id:"frontend-development-skill",status:"skipped",paths:t,reason:"server-capability-missing"}:{id:"frontend-development-skill",status:"skipped",paths:t,reason:"server-support-unavailable"}}function dm(r,e){return r.capabilities?.includes(e)===!0}function zD(r,e){return!r.capabilities||dm(r,e)}q();ia();var KD=/^\d+\.\d+\.\d+$/;async function iw(r,e){let t=ow(e.version);if(!t)return{downgrades:[]};let n=ow(r),o=hc(t,n);if(o===-1&&n){let i=[{kind:"server",currentVersion:t,baselineVersion:n}];return{downgrades:i,warningMessage:GD(i)}}return!n||o===void 0||o>0?{downgrades:[],newBaselineVersion:t}:{downgrades:[]}}function ow(r){let e=oa(r);if(e)return KD.test(e)?e:void 0}function GD(r){if(r.length===0)return;let e=r.map(t=>h("workspace.compat.serverVersion",t.currentVersion,t.baselineVersion));return[h("workspace.compat.connectedServerAppears"),...e].join(`
|
|
83
|
-
`)}var Cm=b(require("fs")),Sm=b(require("path")),fw=b(hw());$();G();D();var fI=T("workspace.gitignore"),gI=".gitignore",yI=new Set([".git",".succapp","node_modules"]),Rl=class{constructor(e){this.workspaceRoot=e}matchers=[];async refresh(){let e=[];await this.collectIgnoreMatchers(this.workspaceRoot,"",e),this.matchers=e}matches(e){let t=Ne(e),n=!1;for(let[o,i]of this.matchers.entries()){if(this.isMatcherBaseIgnored(i,o))continue;let a=this.getScopedIgnoreDecision(i,t);a!==void 0&&(n=a)}return n}async collectIgnoreMatchers(e,t,n){let o;try{o=await Cm.promises.readdir(e,{withFileTypes:!0})}catch(a){if(F(a)){fI.debug(`skip unreadable gitignore directory: ${e}`);return}throw a}await this.addDirectoryGitIgnore(e,t,n);let i=o.filter(a=>a.isDirectory()&&!yI.has(a.name)).sort((a,s)=>a.name.localeCompare(s.name));for(let a of i){let s=t?`${t}/${a.name}`:a.name;await this.collectIgnoreMatchers(Sm.join(e,a.name),s,n)}}async addDirectoryGitIgnore(e,t,n){let o=Sm.join(e,gI),i;try{i=await Cm.promises.readFile(o,"utf-8")}catch(a){if(F(a))return;throw a}n.push({baseRelativePath:t,matcher:(0,fw.default)({allowRelativePaths:!0}).add(i)})}getScopedIgnoreDecision(e,t){let n=this.toScopedRelativePath(e.baseRelativePath,t);if(n===void 0||n==="")return;let o=this.testIgnore(e,n);if(o.ignored)return!0;if(o.unignored)return!1}testIgnore(e,t){let n=e.matcher.test(t);return n.ignored||n.unignored||t.endsWith("/")?n:e.matcher.test(`${t}/`)}isMatcherBaseIgnored(e,t){if(!e.baseRelativePath)return!1;let n=!1;for(let o=0;o<t;o++){let i=this.getScopedIgnoreDecision(this.matchers[o],e.baseRelativePath);i!==void 0&&(n=i)}return n}toScopedRelativePath(e,t){if(!e)return t;if(t===e)return"";let n=e+"/";if(t.startsWith(n))return t.slice(n.length)}};var Be=b(require("fs")),kw=b(require("os")),El=b(require("path")),ww=b(Tp());G();Ce();D();function Pw(r){return new vm(r)}var CI=10*6e4,SI=".lock.json",vI=".lock",gw=1,st=T("workspace.lock"),vm=class{root;identity;staleMs;locksDir;hostname;eventBus;listeners=new Set;activeLocks=new Set;eventListenerSubscription;lockWatcher;lockWatcherRequested=!1;lockWatchRefreshTimer;observedScopeHeld=new Map;nextLockId=1;disposed=!1;constructor(e){this.root=e.root,this.identity=e.identity??po(),this.staleMs=e.staleMs??CI,this.locksDir=El.join(this.root,".succapp","locks"),this.hostname=kw.hostname(),this.eventBus=e.eventBus,this.eventBus&&(this.eventListenerSubscription=this.eventBus.on("event.listener.changed",t=>{t.payload.id==="workspace.lock.changed"&&(t.payload.hasListeners?this.startLockWatcher():this.stopLockWatcher())}))}async withLock(e,t){U(!this.disposed,"WorkspaceLockManager has been disposed"),U(e.scopes&&e.scopes.length>0,"LockRequest.scopes must not be empty"),await Be.promises.mkdir(this.locksDir,{recursive:!0});let n=[...new Set(e.scopes)].sort(),o=new AbortController,i=this.nextLockId++,a={id:i,ownerId:`${process.pid}-${Date.now()}-${i}`,request:e,acquired:[],abortController:o,heartbeatTimer:void 0,heartbeatInFlight:void 0,releasing:!1};try{await this.acquireAllScopes(a,n)}catch(c){throw await this.releaseAllScopes(a),c}this.activeLocks.add(a);let s=this.buildHolders(a,n);try{for(let[c,l]of s)await this.writeHolderAtomic(this.holderPathFor(c),l)}catch(c){throw this.activeLocks.delete(a),await this.deleteAllHolders(a),await this.releaseAllScopes(a),c}this.startHeartbeat(a);for(let c of a.acquired)this.emitHolderChanged({scope:c.scope,holder:s.get(c.scope),reason:"acquired"});try{let c=await t(o.signal);if(Sw(a))throw new Ir(e.command);return c}catch(c){throw Sw(a)&&!(c instanceof Ir)?new Ir(e.command,{cause:c}):c}finally{a.releasing=!0,this.stopHeartbeat(a),await this.waitForHeartbeat(a),await this.deleteAllHolders(a),await this.releaseAllScopes(a),this.activeLocks.delete(a);for(let c of a.acquired)c.compromised||this.emitHolderChanged({scope:c.scope,holder:void 0,reason:"released"})}}async peekHolder(e){let t=this.holderPathFor(e),n;try{n=await Be.promises.readFile(t,"utf-8")}catch(i){if(F(i))return;st.debug(`peekHolder failed for ${e}`,i);return}let o=this.parseHolderJson(n,e);if(o)try{let i=await Be.promises.stat(t);return{...o,lastHeartbeat:new Date(i.mtimeMs).toISOString()}}catch(i){return F(i)||st.debug(`peekHolder stat failed for ${e}`,i),o}}async peekHolders(e=ci){let t=await Promise.all(e.map(async n=>{let o=await this.peekHolder(n);return[n,o]}));return new Map(t)}async isHeldLock(e){return this.isHeldLocally(e)?!0:!!await this.peekHolder(e)}isHeldLocally(e){for(let t of this.activeLocks)if(t.acquired.some(n=>n.scope===e&&!n.compromised))return!0;return!1}onHolderChanged(e){return this.listeners.add(e),{dispose:()=>{this.listeners.delete(e)}}}dispose(){if(!this.disposed){this.disposed=!0,this.eventListenerSubscription?.dispose(),this.eventListenerSubscription=void 0,this.stopLockWatcher();for(let e of[...this.activeLocks])e.releasing=!0,this.stopHeartbeat(e),e.abortController.abort("lock-manager-disposed"),(async()=>{await this.waitForHeartbeat(e),await this.deleteAllHolders(e),await this.releaseAllScopes(e)})().catch(t=>{st.debug("cleanup lock resources on dispose failed",t)});this.activeLocks.clear(),this.listeners.clear()}}async acquireAllScopes(e,t){for(let n of t){let o=await this.acquireSingleScope(e,n,t);e.acquired.push(o)}}async acquireSingleScope(e,t,n){let o=Date.now()+kI(e.request.wait),i;for(;;){let a=await this.findBlockingExistingLock(t);if(a.blocked){if(i=a.holder,!yw(o))throw new jn(e.request.command,n,t,vw(i));await Cw(o);continue}try{let s=await ww.lock(this.lockfilePathFor(t),{lockfilePath:this.lockfilePathFor(t),realpath:!1,stale:this.staleMs,retries:0,onCompromised:c=>this.onScopeCompromised(e,t,c)});return{scope:t,lockfilePath:this.lockfilePathFor(t),holderPath:this.holderPathFor(t),release:s,compromised:!1}}catch(s){if(!Ja(s))throw s;if(i=await this.peekHolder(t),yw(o)){await Cw(o);continue}throw new jn(e.request.command,n,t,vw(i))}}}async findBlockingExistingLock(e){try{await Be.promises.stat(this.lockfilePathFor(e))}catch(n){if(F(n))return{blocked:!1};throw n}let t=await this.peekHolder(e);return await this.tryClearStaleLock(e,t)?{blocked:!1}:{blocked:!0,holder:t}}async tryClearStaleLock(e,t){return t?t.hostname!==this.hostname||this.isProcessAlive(t.pid)||!await this.isLockDirStale(e)?!1:(st.info(`auto-clear stale lock scope=${e} pid=${t.pid} command=${t.command}`),this.removeLockFiles(e,t)):this.tryClearOrphanedLockDir(e)}async tryClearOrphanedLockDir(e){if(!await this.isLockDirStale(e))return!1;let t=this.lockfilePathFor(e),n=`${t}.stale-${process.pid}-${Date.now()}`;try{await Be.promises.rename(t,n)}catch(o){if(F(o))return!1;throw o}return st.info(`auto-clear orphan lock dir scope=${e}`),await Be.promises.rm(n,{recursive:!0,force:!0}).catch(o=>{st.debug(`delete orphan lock tombstone ${e} failed`,o)}),!0}async releaseAllScopes(e){for(let t of[...e.acquired].reverse())if(!t.compromised)try{await t.release()}catch(n){st.warn(`release scope ${t.scope} failed`,n)}}buildHolders(e,t){let n=new Date().toISOString(),o=e.request.source??this.identity.source,i=new Map;for(let a of t)i.set(a,{version:gw,ownerId:e.ownerId,pid:process.pid,hostname:this.hostname,source:o,command:e.request.command,scope:a,alsoHolds:t.filter(s=>s!==a),startTime:n,lastHeartbeat:n,agentVersion:this.identity.agentVersion});return i}async deleteAllHolders(e){for(let t of e.acquired)try{let n=await this.peekHolder(t.scope);if(!n||n.ownerId!==e.ownerId)continue;await Be.promises.unlink(t.holderPath)}catch(n){if(F(n))continue;st.debug(`delete holder json ${t.scope} failed`,n)}}startHeartbeat(e){let t=Math.max(1e3,Math.floor(this.staleMs/2)),n=setInterval(()=>{this.scheduleHeartbeat(e)},t);n.unref?.(),e.heartbeatTimer=n}stopHeartbeat(e){e.heartbeatTimer&&(clearInterval(e.heartbeatTimer),e.heartbeatTimer=void 0)}scheduleHeartbeat(e){if(e.releasing||e.heartbeatInFlight)return;let t=this.refreshHeartbeat(e).finally(()=>{e.heartbeatInFlight===t&&(e.heartbeatInFlight=void 0)});e.heartbeatInFlight=t}async waitForHeartbeat(e){e.heartbeatInFlight&&await e.heartbeatInFlight}async refreshHeartbeat(e){let t=new Date;for(let n of e.acquired)if(!(e.releasing||n.compromised))try{await Be.promises.utimes(n.holderPath,t,t)}catch(o){if(F(o))continue;st.debug(`heartbeat refresh failed for ${n.scope}`,o)}}onScopeCompromised(e,t,n){st.warn(`lock scope ${t} compromised during ${e.request.command}`,n);let o=e.acquired.find(a=>a.scope===t),i=o?.compromised??!1;o&&(o.compromised=!0),e.abortController.signal.aborted||e.abortController.abort(new Ir(e.request.command)),i||this.emitHolderChanged({scope:t,holder:void 0,reason:"compromised"})}async writeHolderAtomic(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;await Be.promises.writeFile(n,JSON.stringify(t,null,2),"utf-8");try{await Be.promises.rename(n,e)}catch(o){throw await Be.promises.unlink(n).catch(()=>{}),o}}parseHolderJson(e,t){try{let n=JSON.parse(e);return typeof n.pid!="number"||typeof n.hostname!="string"||typeof n.command!="string"||typeof n.source!="string"||!PI(n.source)||typeof n.ownerId!="string"||n.ownerId.length===0||typeof n.startTime!="string"?void 0:{version:gw,ownerId:n.ownerId,pid:n.pid,hostname:n.hostname,source:n.source,command:n.command,scope:n.scope??t,alsoHolds:Array.isArray(n.alsoHolds)?[...n.alsoHolds]:[],startTime:n.startTime,lastHeartbeat:typeof n.lastHeartbeat=="string"&&n.lastHeartbeat.length>0?n.lastHeartbeat:n.startTime,agentVersion:typeof n.agentVersion=="string"?n.agentVersion:""}}catch(n){st.debug(`parse holder json for ${t} failed`,n);return}}async isLockDirStale(e){try{return(await Be.promises.stat(this.lockfilePathFor(e))).mtimeMs<Date.now()-this.staleMs}catch(t){if(F(t))return!1;throw t}}async removeLockFiles(e,t){let n=this.lockfilePathFor(e),o=this.holderPathFor(e);if(!await this.isLockDirStale(e))return!1;let i=`${n}.stale-${process.pid}-${Date.now()}`;try{await Be.promises.rename(n,i)}catch(s){if(F(s))return!1;throw s}let a=!1;try{let s=await this.peekHolder(e);return RI(s,t)?(await Be.promises.unlink(o).catch(c=>{if(!F(c))throw c}),!0):(a=await this.restoreTombstoneLock(e,i),!1)}finally{a||await Be.promises.rm(i,{recursive:!0,force:!0}).catch(s=>{st.debug(`delete stale lock tombstone ${e} failed`,s)})}}async restoreTombstoneLock(e,t){let n=this.lockfilePathFor(e);try{return await Be.promises.rename(t,n),!0}catch(o){return F(o)||st.debug(`restore stale lock tombstone ${e} failed`,o),!1}}isProcessAlive(e){if(e<=0||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}emitHolderChanged(e){for(let t of[...this.listeners])try{t(e)}catch(n){st.warn(`holder changed listener threw for ${e.scope}`,n)}this.fireWorkspaceLockChanged(e.scope,e.reason==="acquired",e.holder)}startLockWatcher(){this.lockWatcherRequested=!0,!(this.disposed||this.lockWatcher)&&Be.promises.mkdir(this.locksDir,{recursive:!0}).then(()=>{this.disposed||!this.lockWatcherRequested||this.lockWatcher||(this.lockWatcher=Be.watch(this.locksDir,()=>{this.scheduleLockStateRefresh()}),this.lockWatcher.on("error",e=>{st.debug(`workspace lock watcher failed: ${this.root}`,e),this.closeLockWatcher(),this.scheduleLockWatcherRestart()}),this.scheduleLockStateRefresh(0))}).catch(e=>{st.debug(`start workspace lock watcher failed: ${this.root}`,e)})}stopLockWatcher(){this.lockWatcherRequested=!1,this.closeLockWatcher(),this.observedScopeHeld.clear()}closeLockWatcher(){this.lockWatchRefreshTimer&&(clearTimeout(this.lockWatchRefreshTimer),this.lockWatchRefreshTimer=void 0),this.lockWatcher&&(this.lockWatcher.close(),this.lockWatcher=void 0)}scheduleLockWatcherRestart(){if(!this.lockWatcherRequested||this.disposed)return;setTimeout(()=>this.startLockWatcher(),1e3).unref?.(),this.observedScopeHeld.clear()}scheduleLockStateRefresh(e=25){this.lockWatchRefreshTimer&&clearTimeout(this.lockWatchRefreshTimer),this.lockWatchRefreshTimer=setTimeout(()=>{this.lockWatchRefreshTimer=void 0,this.refreshObservedLockStates()},e),this.lockWatchRefreshTimer.unref?.()}async refreshObservedLockStates(){if(!(this.disposed||!this.lockWatcher))for(let e of ci)await this.refreshObservedLockState(e)}async refreshObservedLockState(e){if(this.isHeldLocally(e))return;let t=await this.peekHolder(e);if((t?!0:await this.lockFileExists(e))&&!t){this.scheduleLockStateRefresh(50);return}let o=!!t,i=this.observedScopeHeld.get(e);if(i===void 0&&!o){this.observedScopeHeld.set(e,!1);return}i!==o&&this.fireWorkspaceLockChanged(e,o,t)}async lockFileExists(e){try{return await Be.promises.stat(this.lockfilePathFor(e)),!0}catch(t){return F(t)||st.debug(`stat lock file failed for ${e}`,t),!1}}fireWorkspaceLockChanged(e,t,n){this.observedScopeHeld.set(e,t),this.eventBus?.fire(new $e("workspace.lock.changed",{root:this.root,scope:e,held:t,holder:n},this))}lockfilePathFor(e){return El.join(this.locksDir,`${e}${vI}`)}holderPathFor(e){return El.join(this.locksDir,`${e}${SI}`)}};function kI(r){return!r||r<=0?0:r*1e3}function yw(r){return Date.now()<r}async function Cw(r){let e=Math.max(0,Math.min(500,r-Date.now()));e>0&&await new Promise(t=>setTimeout(t,e))}var wI=new Set(Object.values(yi));function PI(r){return wI.has(r)}function Sw(r){return r.acquired.some(e=>e.compromised)}function RI(r,e){return r?.ownerId===e.ownerId}function vw(r){if(r)return{pid:r.pid,hostname:r.hostname,source:r.source,command:r.command,scope:r.scope,alsoHolds:r.alsoHolds,startTime:r.startTime,lastHeartbeat:r.lastHeartbeat,agentVersion:r.agentVersion}}var bl=b(require("fs")),Rw=b(require("path"));D();q();G();$();var km=T("workspace.connection"),hi=class{constructor(e){this.workspace=e}async change(e,t,n){return await this.workspace.ensureConfigLoaded(),this.workspace.lockManager.withLock({scopes:["config","sync"],command:"change-server-url",wait:this.workspace.lockWait},()=>this.doChange(e,t,n))}async connect(e,t){await this.workspace.ensureConfigLoaded();let n=this.workspace.config.resolveServerUrl(e);if(!n)throw new Error(`server not configured: ${e}`);if(t){let c=await this.withAuthContext(n,()=>ys(n,t)),l=await this.withAuthContext(n,()=>this.createVerifiedCredentialConnection(n,c));return await this.storeVerifiedConnectionCredential(n,c,l.client),await this.setActiveServerUrlForConnection(n),{serverUrl:n,connection:l}}if(!(await Cs(n))?.bearerToken)throw new ut({workspaceRoot:this.workspace.root,serverUrl:n});let i=this.createServerClient(n),a=await i.verify();km.info(`session restored: ${n}`);let s={serverUrl:n,connection:{client:i,serverInfo:a}};return await this.setActiveServerUrlForConnection(n),s}async doChange(e,t,n){let o=this.workspace.config.resolveServerUrl(e);if(!o)throw new Error(h("workspace.server.serverNotConfigured",e));let i=this.workspace.config.validateServerUrlChange(o,t),a=n?await this.withAuthContext(i,()=>ys(i,n)):void 0,s=a?await this.withAuthContext(i,()=>this.createVerifiedCredentialConnection(i,a)):void 0,c=vr(o),l=vr(i),p=this.workspace.getMirrorRoot(o),m=this.workspace.getMirrorRoot(i),g=!1,d=!1,f="";try{if(c!==l&&await Z(p)){if(await Z(m))throw new Error(h("workspace.server.serverMirrorExists",m));await bl.promises.mkdir(Rw.dirname(m),{recursive:!0}),await bl.promises.rename(p,m),g=!0}return f=await this.workspace.config.changeServerUrl(o,i),d=!0,a&&s&&await this.storeVerifiedConnectionCredential(f,a,s.client),{oldServerUrl:o,serverUrl:f,connection:s}}catch(y){throw await this.rollbackServerUrlChange({configChanged:d,changedServerUrl:f,oldConfiguredServerUrl:o,mirrorMoved:g,oldMirrorRoot:p,newMirrorRoot:m}),y}}async rollbackServerUrlChange(e){if(e.configChanged)try{await this.workspace.config.changeServerUrl(e.changedServerUrl,e.oldConfiguredServerUrl)}catch(t){km.warn(`rollback server config failed: ${e.changedServerUrl} -> ${e.oldConfiguredServerUrl}`,t)}if(e.mirrorMoved)try{await bl.promises.rename(e.newMirrorRoot,e.oldMirrorRoot)}catch(t){km.warn(`rollback server mirror failed: ${e.newMirrorRoot} -> ${e.oldMirrorRoot}`,t)}}async setActiveServerUrlForConnection(e){await this.workspace.lockManager.withLock({scopes:["config","sync"],command:"switch-active-server",wait:this.workspace.lockWait},async()=>{await this.workspace.config.setActiveServerUrl(e)})}async withAuthContext(e,t){try{return await t()}catch(n){throw n instanceof ut&&n.withContext({workspaceRoot:this.workspace.root,serverUrl:e}),n}}async createVerifiedCredentialConnection(e,t){let n=this.createServerClient(e,{initialCredential:this.toInitialCredential(e,t)}),o=await n.verify();return{client:n,serverInfo:o}}async storeVerifiedConnectionCredential(e,t,n){await Vp(e,t)}createServerClient(e,t={}){return new un(e,{workspaceRoot:this.workspace.root,authPolicy:"auto",...t})}toInitialCredential(e,t){return{serverUrl:e,username:t.username,userId:t.userId,authType:t.authType,methods:t.methods,bearerToken:{type:"token",authType:t.authType,token:t.token.value,expiresAt:t.token.expiresAt,scope:t.token.scope,updatedAt:t.verifiedAt},lastLoginAt:t.verifiedAt,updatedAt:t.verifiedAt}}};var ct=T("workspace"),EI=6e4,wm=class{constructor(e,t,n,o=ya){this.root=e;this.eventBus=t;this.lockWait=o;this.client=n,this.config=new Xc(e,t,Fu()),this.gitIgnore=new Rl(e),this.lockManager=Pw({root:e,eventBus:t}),this.disposables.add(this.lockManager),n&&this.setClient(n),this.syncStatusTracker=new pl(this),this.disposables.add(this.eventBus.on("workspace.config.changed",i=>{i.payload.root===this.root&&this.onConfigChanged()})),this.startAutoSyncScheduler()}disposables=new Dn;config;clients=new Map;pendingClientTasks=new Map;client;syncStatusTracker;gitIgnore;lockManager;fileChangeRefresh;metadataVersions={};initialized=!1;connectionInitializing=!1;autoSyncScheduler=null;startAutoSyncScheduler(){if(po().source!=="ide")return;let e={onAutoPush:async()=>{let n=this.syncStatusTracker.getLocalChanges();if(n.length===0||await this.shouldYieldAutoSync())return;await this.createSyncService({agentSource:"auto-sync"}).push({changes:n})},onAutoPull:async()=>{if(await this.shouldYieldAutoSync())return;await this.createSyncService({agentSource:"auto-sync"}).pull()}},t=new Qc(this.root,this.eventBus,e);this.autoSyncScheduler=t,this.disposables.add(this.eventBus.on("settings.changed",n=>{n.payload.changedKeys.some(o=>o==="sync.autoPush"||o==="sync.autoPull"||o==="sync.autoPullInterval")&&this.autoSyncScheduler?.refreshAutoSync()})),this.disposables.add(t),t.startAutoPull()}get activeServerUrl(){return this.client?.connected?this.client.serverUrl:this.config.getActiveServerUrl()}get isConnected(){return!!this.client?.connected}async ensureConfigLoaded(){await this.config.ensureLoaded()}async ensureActiveServerReady(){await this.ensureConfigLoaded();let e=this.activeServerUrl;if(!e)throw new dt(e);return e}async requireClient(){return this.requireServerClient()}async requireServerClient(e){await this.ensureConfigLoaded();let t=e??this.config.getActiveServerUrl();if(!t)throw new dt(t);let n=this.resolveConfiguredServerUrl(t),o=this.getConnectedClient(n);return o||(o=await this.createDetachedClient(n)),e===void 0&&(this.client=o,this.updateConnectionStatus()),this.createDiagnosticClient(o)}async resolveRemoteFilePath(e){let t=await this.resolveRemoteFilePathServerUrl(e.serverUrl),n=e.serverUrl?await this.requireServerClient(t):await this.requireServerClient(),o=await this.resolveWorkspaceRemoteFilePath(e.path,t,n);return{path:e.path,remotePath:o,serverUrl:t}}async resolveRemoteFilePathServerUrl(e){return e?(await this.ensureConfigLoaded(),this.resolveConfiguredServerUrl(e)):this.ensureActiveServerReady()}async resolveWorkspaceRemoteFilePath(e,t,n){let o=new Mt(this.getMirrorRoot(t));return new ti({workspaceRoot:this.root,mirror:o,workspace:new rr(this.root,o),getServerProjects:()=>n.getProjects()}).resolve(e,"server-backed")}getConnectedClient(e){let t=this.clients.get(vr(e));if(t?.connected)return t}setClient(e){return this.clients.set(vr(e.serverUrl),e),e}discardServerClientCache(...e){let t=new Set(e.map(n=>vr(n)));for(let n of t)this.clients.delete(n),this.pendingClientTasks.delete(n);this.client&&t.has(vr(this.client.serverUrl))&&(this.client=void 0)}applyServerConnection(e,t={}){this.client=this.setClient(e.client),this.updateMetadataVersions(e.serverInfo),this.updateConnectionStatus(),this.refreshSyncStatusAfterConnection(t),t.refreshWorkspaceSupport!==!1&&this.refreshWorkspaceSupportIfNeeded(e.serverInfo)}createDiagnosticClient(e){return ES(e)}async createDetachedClient(e){if(await this.ensureConfigLoaded(),!this.config.hasServer(e))throw new dt(e);let t=vr(e),n=this.pendingClientTasks.get(t);if(n)return n;let o=this.doCreateDetachedClient(e).finally(()=>{this.pendingClientTasks.delete(t)});return this.pendingClientTasks.set(t,o),o}async doCreateDetachedClient(e){let t=new un(e,{workspaceRoot:this.root,authPolicy:"auto"}),n=await t.verify();if(this.updateMetadataVersions(n),!this.config.hasServer(e))throw new dt(e);return this.setClient(t)}resolveConfiguredServerUrl(e){let t=this.config.resolveServerUrl(e);if(!t)throw new dt(e);return t}async listWorkspaceProjects(){await this.ensureConfigLoaded();let e=new rr(this.root,this.createWorkspaceListingMirror());return this.toProjectNames(await e.listProjectPaths())}async listBaselineProjects(e){await this.ensureConfigLoaded();let t=e??this.activeServerUrl;if(!t)return[];let n=new Mt(this.getMirrorRoot(t));return this.toProjectNames(await n.listProjectPaths())}getMetaProjectLocalPath(e){let t=e.trim();if(!t||t.includes("/")||t.includes("\\"))throw new Error(`invalid metadata project name: ${e}`);return this.getMetaFileLocalPath("/"+t)}getMetaFileLocalPath(e){return Lg(this.root,e)}async countWorkspaceFiles(e,t){return await this.ensureConfigLoaded(),new rr(this.root,this.createWorkspaceListingMirror()).countFiles(e,t)}async startIdeRuntime(){this.initialized||await Ur(this,"startIdeRuntime",async()=>{await this.doStartIdeRuntime(),this.initialized=!0})}async waitInitialized(){this.initialized||await Kp(this,"startIdeRuntime")?.catch(()=>{})}async doStartIdeRuntime(){let e=!1;this.connectionInitializing=!0;try{await this.config.load(),this.syncStatusTracker.startBackgroundRemoteDiscovery({intervalMs:EI}),this.fireConnectionStateChanged(!0),await this.refreshGitIgnore(),this.initializeFileWatcher(),await this.tryAutoConnect({refreshSyncStatus:!1}),e=!0}finally{this.connectionInitializing=!1,this.fireConnectionStateChanged()}e&&this.refreshSyncStatus().catch(t=>{ct.warn(`refresh sync status after IDE runtime start failed: ${this.root}`,t)})}applySyncOperationResult(e,t=[]){this.syncStatusTracker.applyOperationResult(e,t)}applyFileWatchSyncStatus(e,t){this.syncStatusTracker.applyFileWatchResult(e,t)}clearSyncStatus(){this.syncStatusTracker.clear()}async refreshSyncStatus(e){await this.refreshSyncStatusState({task:e})}async refreshSyncStatusState(e={}){await this.ensureConfigLoaded();let t=["refreshSyncStatus",e.scope??"both",e.forceRefresh===!0?"force":"normal"].join(":"),n=e.task,o=!!Kp(this,t),i=Ur(this,t,()=>(ct.info("refresh sync status start: {0}",this.root),this.onSyncStatusRefreshing(),this.syncStatusTracker.refreshAll(e)));o&&n&&n.start(1);let a=await i;return n&&o&&n.step(1),o||ct.info("refresh sync status done: {0}",this.root),a}getSyncChanges(){return this.syncStatusTracker.getChanges()}getSyncSummary(){return this.syncStatusTracker.getSummary()}refreshGitIgnore(){return this.gitIgnore.refresh()}isGitIgnored(e){return this.gitIgnore.matches(e)}getSyncStatusTracker(){return this.syncStatusTracker}async consumeFileChanges(e,t={}){if(e.some(o=>{if(yr.basename(o.filePath)!==".gitignore")return!1;let i=yr.relative(this.root,yr.resolve(o.filePath));return!!i&&!i.startsWith("..")&&!yr.isAbsolute(i)})){await this.refreshGitIgnore(),await this.refreshSyncStatus();return}return this.syncStatusTracker.consumeFileChanges(e,t)}clearSyncStatusTargets(e){this.syncStatusTracker.clearTargets(e)}notifySyncStatusChanged(){this.fireSyncStatusChanged()}initializeFileWatcher(){if(this.fileChangeRefresh)return;let e=Fu();e&&(this.fileChangeRefresh=new dl(this,this.eventBus,e,{},this.lockManager))}cancelPendingSyncStatusRefresh(){this.fileChangeRefresh?.cancelPendingRefresh()}async flushPendingFileChangeRefresh(){await this.fileChangeRefresh?.flushPendingRefresh()}onSyncStatusRefreshing(){this.cancelPendingSyncStatusRefresh()}async addServer(e){return this.lockManager.withLock({scopes:["config","sync"],command:"add-server",wait:this.lockWait},async()=>(await this.config.addServer(e),this.config.getActiveServerUrl()))}async verifyServerReachable(e){let t=Se(e);return await gs(t),t}async removeServer(e){return await this.ensureConfigLoaded(),this.lockManager.withLock({scopes:["config","sync"],command:"remove-server",wait:this.lockWait},async()=>{let t=this.config.getActiveServerUrl(),n=this.config.resolveServerUrl(e)??e;await this.config.removeServer(e),this.discardServerClientCache(n);let o=t!==this.config.getActiveServerUrl();return o&&(this.updateMetadataVersions(),this.updateConnectionStatus()),o})}async changeServerUrl(e,t,n){let o=await new hi(this).change(e,t,n);return this.discardServerClientCache(o.oldServerUrl,o.serverUrl),o.connection&&(this.applyServerConnection(o.connection),ct.info(`login succeeded: ${o.serverUrl}`)),o.serverUrl}async switchActiveServer(e){await this.ensureConfigLoaded();let t=this.config.resolveServerUrl(e);if(!t)throw new Error(h("workspace.server.serverNotConfigured",e));return await this.lockManager.withLock({scopes:["config","sync"],command:"switch-active-server",wait:this.lockWait},async()=>{await this.config.setActiveServerUrl(t)}),this.config.getActiveServerUrl()}async readTargetStatusSnapshot(e){await this.ensureConfigLoaded();try{let[t,n,o,i]=await Promise.all([this.readTargetSideSnapshot(this.root,e.remotePath,{returnStat:!0}),this.readTargetSideSnapshot(this.getMirrorRoot(),e.remotePath,{returnStat:!0}),Ie(this.root,e.remotePath),Ie(this.getMirrorRoot(),e.remotePath)]),a=await this.isTargetContentChanged(e.remotePath,t,n);return a===void 0?this.unknownTargetStatusSnapshot(e.remotePath):{remotePath:e.remotePath,workspace:{...t,fileId:o?.id,identity:t.identity??o?.id},mirror:{...n,fileId:i?.id,identity:n.identity??i?.id},contentChanged:a,metaChanged:!this.isMetaInfoEqual(o,i)}}catch(t){return ct.debug(`read target status snapshot failed: ${e.remotePath}`,t),this.unknownTargetStatusSnapshot(e.remotePath)}}async readTargetSideSnapshot(e,t,n={}){try{let o=await Tl.promises.stat(te(e,t)),i=o.isFile()?"file":o.isDirectory()?"folder":"unknown",a=n.returnStat&&o.isFile()?{size:o.size,mtimeMs:o.mtimeMs}:void 0;return{kind:i,contentStat:a}}catch(o){if(F(o))return ct.debug(`target side path does not exist: ${e}:${t}`),{kind:"missing"};throw o}}async isTargetContentChanged(e,t,n){if(t.kind!=="file"||n.kind!=="file")return!1;let o=t.contentStat,i=n.contentStat;if(o&&i)return this.compareFileContentStats(o,i);try{let[a,s]=await Promise.all([Tl.promises.stat(te(this.root,e)),Tl.promises.stat(te(this.getMirrorRoot(),e))]);return this.compareFileContentStats(a,s)}catch(a){ct.debug(`cannot compare target stat cache for ${e}`,a);return}}compareFileContentStats(e,t){if(e.size!==t.size)return!0;if(e.mtimeMs===t.mtimeMs)return!1}isMetaInfoEqual(e,t){return!e&&!t?!0:!e||!t?!1:no(e,t)}unknownTargetStatusSnapshot(e){return{remotePath:e,workspace:{kind:"unknown"},mirror:{kind:"unknown"}}}async tryAutoConnect(e={}){await this.ensureConfigLoaded();let t=this.config.getActiveServerUrl();if(!t)return;let n=this.getConnectedClient(t);if(n){this.client=n,this.updateConnectionStatus();return}try{let o=await new hi(this).connect(t);this.applyServerConnection(o.connection,e)}catch(o){if(!(o instanceof ut))throw o;ct.debug(`stored credential invalid for ${t}`,o),this.updateConnectionStatus()}}async connect(e,t){let n=await new hi(this).connect(e,t);return t&&this.discardServerClientCache(n.connection.client.serverUrl),this.applyServerConnection(n.connection),t&&ct.info(`login succeeded: ${n.connection.client.serverUrl}`),!0}disconnect(){this.client&&this.discardServerClientCache(this.client.serverUrl),this.updateMetadataVersions(),this.updateConnectionStatus(),ct.info("disconnected")}updateConnectionStatus(){this.connectionInitializing||this.fireConnectionStateChanged()}onConfigChanged(){let e=this.client;e&&e.serverUrl!==this.config.getActiveServerUrl()&&(this.cancelPendingSyncStatusRefresh(),this.clearSyncStatus(),this.discardServerClientCache(e.serverUrl),this.updateMetadataVersions(),this.updateConnectionStatus())}refreshSyncStatusAfterConnection(e={}){e.refreshSyncStatus!==!1&&this.refreshSyncStatus().catch(t=>{ct.warn(`refresh sync status after connection failed: ${this.root}`,t)})}async refreshWorkspaceSupportIfNeeded(e){let t=this.client;if(t)try{let n=this.createDiagnosticClient(t),o=e??await n.getServerInfo();this.updateMetadataVersions(o),await this.warnIfServerLooksOlder(o),await rw(this,n,o)}catch(n){ct.warn(`refresh workspace support after server version change failed: ${this.root}`,n)}finally{this.updateConnectionStatus()}}async warnIfServerLooksOlder(e){try{let t=this.config.getServerVersion(),n=await iw(t,e);if(n.newBaselineVersion&&await this.lockManager.withLock({scopes:["config"],command:"set-server-version",wait:this.lockWait},async()=>{await this.config.setServerVersion(n.newBaselineVersion)}),!n.warningMessage)return;this.eventBus.fire(new $e("user.notification.requested",{level:"warning",message:n.warningMessage},this))}catch(t){ct.warn(`check server compatibility baseline failed: ${this.root}`,t)}}fireConnectionStateChanged(e=!1){this.eventBus.fire(new $e("workspace.connection.changed",{root:this.root,connected:this.isConnected,serverUrl:this.activeServerUrl,initializing:e},this))}notifySyncStatusRefreshing(e,t){this.eventBus.fire(new $e("workspace.sync.status.refreshing",{root:this.root,refreshTask:e,progressVisible:t},this))}fireSyncStatusChanged(){this.eventBus.fire(new $e("workspace.sync.status.changed",{root:this.root},this))}createSyncService(e){return zu(this,e)}async checkWorkspaceSettings(){return tw(this)}async initializeWorkspaceSettings(e=ht.INSTANCE){if(ct.info("initialize workspace settings start"),e.start(1),(await vl(this.root)).length>0){await Sl(this,{applyWorkspaceConfiguration:!0}),e.step(1),ct.info("initialize workspace settings done");return}await Sl(this,{applyWorkspaceConfiguration:!0,overwriteExistingTypeScriptSupport:!0,forceTypeScriptSupportRefresh:!0,forceJsonSchemaSupportRefresh:!0}),e.step(1),ct.info("initialize workspace settings done")}notifyLocalProjectsChanged(){this.eventBus.fire(new $e("workspace.local.projects.changed",{root:this.root,serverUrl:this.activeServerUrl},this))}getMetadataVersionInfos(){return this.metadataVersions}getMetadataVersionInfo(e){return this.metadataVersions[e]??this.metadataVersions[e.toLowerCase()]}getMetadataVersionInfoByPath(e){return this.getMetadataVersionInfo(hs(e))}updateMetadataVersions(e){let t=e?.metadataVersions??{},n={};for(let[o,i]of Object.entries(t)){let a=(i.metaType||o).toLowerCase();n[a]={...i,metaType:a,fileMatch:i.fileMatch??[]}}this.metadataVersions=n}dispose(){this.disposables.dispose(),this.config.dispose(),this.syncStatusTracker.dispose(),this.fileChangeRefresh?.dispose(),this.fileChangeRefresh=void 0}async shouldYieldAutoSync(){let e=await this.lockManager.peekHolders(["config","sync"]),t=this.lockManager.staleMs;for(let n of e.values()){if(!n)continue;if(Date.now()-new Date(n.lastHeartbeat).getTime()<t&&(n.source==="ide"||n.source==="cli"))return ct.info(`auto-sync yield to ${n.command}`),!0}return!1}getMirrorRoot(e=this.activeServerUrl){return yr.join(this.root,".succapp","remote",vr(e))}createWorkspaceListingMirror(){let e=this.activeServerUrl?this.getMirrorRoot(this.activeServerUrl):yr.join(this.root,".succapp","remote","__workspace__");return new Mt(e)}toProjectNames(e){return e.map(t=>t.replace(/^\//,"")).sort((t,n)=>t.localeCompare(n))}};function xl(r){return new wm(r.root,r.eventBus,r.client,r.lockWait)}var Pm=class extends de{toOptions(e){return{setup:e.has("setup")}}async executeCommand(e,t){let n=Ew.resolve(e.cwd,e.config.workspace??".");await ks(n);let o=Fe("server"),i=e.config.server?Vr(e.config.server,{input:o,option:o,flag:"server"}):void 0,a=e.workspace===void 0,s=e.workspace??xl({root:n,eventBus:e.eventBus,lockWait:e.config.lockTimeout});try{let c=await this.initializeWorkspace(s,e,t,i);return e.output.result({...c},()=>xI(c)),0}finally{a&&s.dispose()}}async initializeWorkspace(e,t,n,o){let i=await this.initializeConfig(e,t,o);return n.setup&&await e.initializeWorkspaceSettings(t.task),{...i,setup:n.setup}}async initializeConfig(e,t,n){let o;return await e.lockManager.withLock({scopes:["config"],command:"init",wait:t.config.lockTimeout},async()=>{await e.config.ensureLoaded();let i=e.config.get();if(i===void 0&&await Z(e.config.path))throw new E("err.cli.invalidWorkspaceConfigJson",{inputId:"workspaceConfig",source:e.config.path,context:{workspace:e.root,configPath:e.config.path}});if(n){o=await bI(e,n);return}let a=i===void 0;a&&await e.config.ensureFile(),o={workspace:e.root,configPath:e.config.path,initialized:a,activeServer:e.config.get()?.activeServerUrl||void 0}}),U(o,"init command did not produce a result"),o}},bw={path:["workspace","init"],domain:"workspace",spec:{name:"workspace init",flags:[{name:"server",takesValue:!0,valueHint:"url"},{name:"setup",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace init","succapp -C /path/to/workspace workspace init --server=http://localhost:8180/bi","succapp workspace init --server=https://bi.example.com --setup --json"]},workspaceTarget:"optional",allowUninitializedWorkspaceTarget:!0,serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Pm};async function bI(r,e){let t=r.config.get(),n=t?.activeServerUrl||void 0;if(!t||TI(t))return await r.config.initialize(e),{workspace:r.root,configPath:r.config.path,initialized:!0,activeServer:e};if(!n||!Qe(e,n)){let o=Fe("server");throw new E("err.cli.serverMismatch",{input:o,option:o,value:e,expected:n||h("cli.out.value.none"),context:{workspace:r.root,target:e,active:n}})}return{workspace:r.root,configPath:r.config.path,initialized:!1,activeServer:n}}function TI(r){return(r.servers?.length??0)===0&&!r.activeServerUrl}function xI(r){let e=r.initialized?h("cli.cmd.workspace.init.initWorkspace",r.workspace):h("cli.cmd.workspace.init.workspaceInit",r.workspace),t=r.activeServer?`
|
|
84
|
-
${h("cli.cmd.workspace.init.active",r.activeServer)}`:"",n=r.setup?`
|
|
85
|
-
${
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
`)}q();J();var xm=class extends ge{toOptions(e){return{paths:e.positional,localOnly:e.has("local-only"),forceRefresh:e.has("force-refresh")}}async executeSyncCommand(e,t,n,o){let i=await t.status({refreshAll:!0,scope:o.localOnly?"local":"both",forceRefresh:o.forceRefresh,paths:[...o.paths],task:n.task}),a=Ny(i);for(let s of i.warnings??[])n.output.warning(s.errorCode==="err.login.notlogin"?h("cli.cmd.workspace.status.remoteAuthRequired"):s.errorCode);return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:a,changes:i.changes.map(vn),...i.warnings?.length?{warnings:i.warnings.map(s=>({errorCode:s.errorCode,...s.properties?{properties:s.properties}:{}}))}:{}},()=>By(a,i.changes)),0}},Ow={path:["workspace","status"],domain:"workspace",spec:{name:"workspace status",flags:[{name:"local-only",takesValue:!1},{name:"force-refresh",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace status","succapp workspace status --local-only","succapp workspace status --force-refresh","succapp workspace status --json","succapp workspace status demo/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new xm};q();var _w="1";function Lw(r,e={}){let t=e.targetVersion??_w;return{workspaceRootPath:r.root,currentVersion:_w,targetVersion:t,dryRun:e.dryRun===!0,hasActions:!1,actions:[],reason:"no-workspace-migrations"}}var Fm=class extends ce{toOptions(e){return{targetVersion:e.value("target-version"),dryRun:e.has("dry-run")}}async executeWorkspaceCommand(e,t,n){let o=Lw(e,n);return t.output.result(VI(o),()=>qI(o)),0}},Nw={path:["workspace","upgrade"],domain:"workspace",spec:{name:"workspace upgrade",flags:[{name:"target-version",takesValue:!0,valueHint:"version"},{name:"dry-run",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace upgrade --dry-run","succapp workspace upgrade --target-version=1"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Fm};function VI(r){return{workspace:r.workspaceRootPath,currentVersion:r.currentVersion,targetVersion:r.targetVersion,dryRun:r.dryRun,hasActions:r.hasActions,actions:r.actions,reason:r.reason}}function qI(r){return r.hasActions?h("cli.cmd.workspace.upgrade.actions",r.actions.length,r.currentVersion,r.targetVersion):h("cli.cmd.workspace.upgrade.noActions",r.currentVersion,r.targetVersion)}q();ne();function Ww(r){return{workspace:r.workspaceRootPath,summary:{entries:r.entries.length},entries:r.entries.map(Mm)}}function Uw(r){return{workspace:r.workspaceRootPath,summary:{cleared:r.cleared.length,remaining:r.remaining.length},cleared:r.cleared.map(Mm),remaining:r.remaining.map(Mm)}}function jw(r){return{columns:[h("cli.out.header.path"),h("cli.cmd.workspace.backup.size"),h("cli.out.header.modified"),h("cli.cmd.workspace.backup.backupPath")],rows:r.map(e=>[e.path,e.size===void 0?"":String(e.size),e.mtime??"",e.backupPath])}}function Bw(r){return h("cli.cmd.workspace.backup.cleared",r.cleared.length,r.remaining.length)}function Mm(r){return A({path:r.path,backupPath:r.backupPath,size:r.size,mtime:r.mtime})}var Dm=class extends ce{toOptions(e){return{paths:e.positional}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().clearMergeBackups({paths:n.paths.length>0?[...n.paths]:void 0,task:t.task});return t.output.result(Uw(o),()=>Bw(o)),0}},Vw={path:["workspace","backup","clear"],domain:"workspace",spec:{name:"workspace backup clear",flags:[],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace backup clear","succapp workspace backup clear /DEMO_BLANK/app"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Dm};var Im=class extends ce{toOptions(e){return{paths:e.positional}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().listMergeBackups({paths:n.paths.length>0?[...n.paths]:void 0,task:t.task});return t.output.result(Ww(o),()=>jw(o.entries)),0}},qw={path:["workspace","backup","list"],domain:"workspace",spec:{name:"workspace backup list",flags:[],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace backup list","succapp workspace backup list /DEMO_BLANK/app"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Im};D();J();function $w(r,e,t){return r.error==="empty"?new E("err.cli.missingInput",{inputId:"extensionName",sources:["<extension-name>"],context:{scope:e}}):new E("err.cli.invalidExtensionName",{inputId:"extensionName",value:t,expectedScope:e,actualScope:r.actualExtensionPoint,reason:r.error,context:{name:t,scope:e,reason:r.error,actualScope:r.actualExtensionPoint}})}function Hw(r){return r.rejected.length>0?6:r.failures.length>0?1:0}D();J();var Am=class extends ce{toOptions(e){return{extensionPoint:e.positional[0],templateName:e.positional[1],extensionName:e.positional[2]}}async executeWorkspaceCommand(e,t,n){await Rr(t,e);let o=new js(e);if(!(await o.prepare()).some(c=>c.extensionPoint===n.extensionPoint&&c.templateName===n.templateName))throw new E("err.cli.unknownExtensionTemplate",{inputId:"extensionTemplate",value:`${n.extensionPoint}/${n.templateName}`,extensionPoint:n.extensionPoint,templateName:n.templateName,context:{scope:n.extensionPoint,name:n.templateName}});let a=await o.validate({extensionPoint:n.extensionPoint,extensionName:n.extensionName});if(!a.ok)throw $w(a,n.extensionPoint,n.extensionName);let s=await e.lockManager.withLock({scopes:["sync"],command:"extension-create",wait:t.config.lockTimeout},async()=>o.execute({extensionPoint:n.extensionPoint,templateName:n.templateName,extensionName:n.extensionName}));return t.output.result({workspace:e.root,server:e.activeServerUrl,...tC(n.extensionName,s)},()=>iC(n.extensionName,s)),0}},zw={path:["workspace","extension","create"],domain:"workspace",spec:{name:"workspace extension create",flags:[],positionals:[{name:"extension-point",required:!0},{name:"template",required:!0},{name:"name",required:!0}],usageArgs:"[<options>] <extension-point> <template> <name>",examples:["succapp workspace extension create component blank succ-component-card"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Am};var Om=class extends ce{async executeWorkspaceCommand(e,t){let n=await Zy(e.root);return t.output.result({workspace:e.root,extensions:n},()=>oC(n)),0}},Kw={path:["workspace","extension","list"],domain:"workspace",spec:{name:"workspace extension list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace extension list","succapp workspace extension list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Om};D();J();D();J();$();var Fl=class{workspace;cachedService;constructor(e){this.workspace=e}async resolveTarget(e){let t=Qy({workspaceRoot:this.workspace.root,path:e.path,extensionName:e.extensionName});if(!t)throw new E("err.extension.rootUnresolved",{reason:$I(e)});if(!await Z(t.extensionRoot))throw new E("err.extension.rootNotFound",{extensionName:t.extensionName,extensionRoot:t.extensionRoot});return t}async status(){return this.requireService().status()}async execute(e){return this.requireService().push({paths:[e.target.extensionRoot],message:e.message,force:e.force})}requireService(){return this.cachedService||(this.cachedService=this.workspace.createSyncService()),this.cachedService}};function $I(r){return r.extensionName!==void 0?"invalidName":r.path!==void 0?"invalidPath":"missingInput"}var _m=class extends ce{toOptions(e){return{extensionName:e.positional[0],path:e.value("path"),force:e.has("force")}}validateOptions(e,t){if(t.extensionName&&t.path)throw new E("err.cli.conflictingInputs",{inputs:["<extension>","--path=<path>"]});if(!t.extensionName&&!t.path)throw new E("err.cli.missingInput",{inputId:"extensionNameOrPath",sources:["<extension>","--path=<path>"]})}async executeWorkspaceCommand(e,t,n){await Rr(t,e);let o=new Fl(e),i=await o.resolveTarget({extensionName:n.extensionName,path:n.path}),a=await o.execute({target:i,force:n.force});return t.output.result({workspace:e.root,server:e.activeServerUrl,extensionName:i.extensionName,extensionRoot:i.extensionRoot,force:n.force,...rC(a)},()=>aC(i.extensionName,a)),Hw(a)}},Gw={path:["workspace","extension","push"],domain:"workspace",spec:{name:"workspace extension push",flags:[{name:"path",takesValue:!0,valueHint:"path"},{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"name"}],usageArgs:"[<options>] [<name>]",examples:["succapp workspace extension push succ-component-card","succapp workspace extension push --path=sysdata/extensions/succ-component-card/package.json","succapp workspace extension push --force succ-component-card"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new _m};D();J();var Lm=class extends ge{toOptions(e){return{paths:e.positional,source:HI(e.value("source"))}}async executeSyncCommand(e,t,n,o){let i=await t.diff({paths:[...o.paths],source:o.source,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,source:i.source,summary:{files:i.items.length,changed:i.items.filter(a=>a.changed).length,binary:i.items.filter(a=>a.binary).length},patches:i.items.map(KI)},()=>zI(i)),0}},Jw={path:["workspace","file","diff"],domain:"workspace",spec:{name:"workspace file diff",flags:[{name:"source",takesValue:!0,valueHint:"server"}],positionals:[{name:"path",required:!0,repeatable:!0}],usageArgs:"[<options>] [--] <path>...",examples:["succapp workspace file diff demo/views/sales.view","succapp workspace file diff --source=server /demo/views/sales.view","succapp workspace file diff demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Lm};function HI(r){if(!r||r==="server")return"server";throw new E("err.cli.invalidChoice",{input:"--source",option:"--source",value:r,allowedValues:["server"]})}function zI(r){return r.items.map(e=>e.patch).filter(Boolean).join(`
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
`)}
|
|
93
|
-
`)}function kA(r){return`succapp workspace file upgrade${r.length>0?` ${r.join(" ")}`:""}`}async function wA(r,e){if(e.force)return;let[t,n]=await Promise.all([r.listWorkspaceProjects(),r.listBaselineProjects()]),o=new Set([...t,...n].map(dP)),a=(e.projectNames.length>0?[...new Set(e.projectNames.map(dP))]:[...o]).filter(s=>o.has(s));if(a.length!==0)throw new E("err.cli.confirmationRequired",{reason:"cloneOverwrite",flag:"--force",projectNames:a.join(", ")})}function dP(r){return Tt(r).slice(1)}var zm=class extends ge{async executeSyncCommand(e,t,n,o){let[i,a]=await Promise.all([t.listWorkspaceProjects(),t.listBaselineProjects()]),s=jy(i,a);return n.output.result({workspace:e.root,server:e.activeServerUrl,projects:s},()=>Vy(s)),0}},mP={path:["workspace","project","list"],domain:"workspace",spec:{name:"workspace project list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace project list","succapp workspace project list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new zm};J();D();q();var Km=class extends ge{toOptions(e){return{projectNames:e.positional,force:e.has("force")}}validateOptions(e,t){if(!t.force)throw new E("err.cli.confirmationRequired",{reason:"projRemove",flag:"--force",projectNames:t.projectNames.join(", ")})}async executeSyncCommand(e,t,n,o){let i=await t.removeProject({projectNames:[...o.projectNames],task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,projectNames:i.projectNames},()=>h("cli.cmd.workspace.proj.remove.removed",i.projectNames.join(", ")||h("cli.out.value.none"))),0}},hP={path:["workspace","project","remove"],domain:"workspace",spec:{name:"workspace project remove",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"project",required:!0,repeatable:!0}],usageArgs:"[<options>] <project>...",examples:["succapp workspace project remove DEMO_BLANK --force","succapp workspace project remove DEMO_BLANK OTHER --force --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Km};D();J();var ir=class extends ce{async executeWorkspaceCommand(e,t,n){return await e.config.ensureLoaded(),this.executeServerCommand(e,t,n)}async requireConfiguredServerUrl(e,t,n){let o=await Rs(t,{explicitServerUrl:n}),i=e.config.resolveServerUrl(o);if(!i)throw new E("err.cli.unconfiguredServer",{inputId:"server",value:o,context:{target:o}});return i}};q();var Gm=class extends ir{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=Vr(n.url),i=e.config.hasServer(o),a=await e.addServer(o);return t.output.result({workspace:e.root,server:a,activeServer:a,added:!i},()=>h("cli.cmd.workspace.remote.add.active",a)),0}},fP={path:["workspace","remote","add"],domain:"workspace",spec:{name:"workspace remote add",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote add http://localhost:8180","succapp workspace remote add https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Gm};var Jm=class extends ir{async executeServerCommand(e,t,n){let o=e.activeServerUrl,i=e.config.getServers().map(a=>({url:a,active:a===o}));return t.output.result({workspace:e.root,activeServer:o||void 0,servers:i.map(Wy)},()=>$y(i)),0}},gP={path:["workspace","remote","list"],domain:"workspace",spec:{name:"workspace remote list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace remote list","succapp workspace remote list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Jm};q();var Ym=class extends ir{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.url),i=await e.removeServer(o);return t.output.result({workspace:e.root,server:o,removedActive:i,activeServer:e.activeServerUrl||void 0},()=>e.activeServerUrl?h("cli.cmd.workspace.remote.remove.active",o,e.activeServerUrl):h("cli.cmd.workspace.remote.remove.removed",o)),0}},yP={path:["workspace","remote","remove"],domain:"workspace",spec:{name:"workspace remote remove",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote remove http://localhost:8180","succapp workspace remote remove https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Ym};q();var Xm=class extends ir{toOptions(e){return{oldUrl:e.positional[0],newUrl:e.positional[1]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.oldUrl),i=Vr(n.newUrl),a=await e.changeServerUrl(o,i);return t.output.result({workspace:e.root,oldServer:o,server:a,activeServer:e.activeServerUrl||void 0},()=>h("cli.cmd.workspace.remote.setUrl.changed",o,a)),0}},CP={path:["workspace","remote","set-url"],domain:"workspace",spec:{name:"workspace remote set-url",flags:[],positionals:[{name:"old-url",required:!0,role:"server-url"},{name:"new-url",required:!0,role:"server-url"}],usageArgs:"[<options>] <old-url> <new-url>",examples:["succapp workspace remote set-url http://localhost:8080 http://localhost:8180","succapp workspace remote set-url https://old.example.com https://new.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Xm};q();var Qm=class extends ir{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.url),i=await e.switchActiveServer(o);return t.output.result({workspace:e.root,server:o,activeServer:i},()=>h("cli.cmd.workspace.remote.use.active",i)),0}},SP={path:["workspace","remote","use"],domain:"workspace",spec:{name:"workspace remote use",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote use http://localhost:8180","succapp workspace remote use https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Qm};var vP=[bw,Dw,Ow,xw,Fw,Jw,Zw,Yw,Xw,Qw,eP,uP,mP,hP,RS,Mw,fP,gP,SP,CP,yP,zw,Kw,Gw,rP,tP,pP,qw,Vw,Nw];var kP=[...vP,...gS,...ry,...Ly];var Il=[{path:["server","file"]},{path:["server","cache"]},{path:["server","project"]},{path:["server","script"]},{path:["server","extension"]},{path:["server","extension","template"]},{path:["db","source"]},{path:["db","schema"]},{path:["db","table"]},{path:["workspace","project"]},{path:["workspace","file"]},{path:["workspace","remote"]},{path:["workspace","lock"]},{path:["workspace","backup"]},{path:["workspace","extension"]}];Ce();Ce();var PA="cli.out.help.commands",RA={extension:"ext",project:"proj"};function wP(r){return r.spec.summary??EA(r.path)}function PP(r){return r.spec.description??bA(r.path)}function Al(r){return r.help?.section??PA}function RP(r){return r.title??Ol(r.path)}function EP(r){return r.summary??Aa(r.path)}function bP(r){return r.description??_l(r.path)}function TP(r,e){return r.description?r.description:(U(e,`flag --${r.name} description requires command context`),TA(e.path,r.name))}function EA(r){return Aa(r)}function bA(r){return _l(r)}function Ol(r){return`cli.cmd.${Ll(r)}.title`}function Aa(r){return`cli.cmd.${Ll(r)}.summary`}function _l(r){return`cli.cmd.${Ll(r)}.desc`}function TA(r,e){return`cli.cmd.${Ll(r)}.${xP(e)}`}function Ll(r){return r.map(xA).join(".")}function xA(r){return RA[r]??xP(r)}function xP(r){return r.replace(/-([a-z0-9])/g,(e,t)=>t.toUpperCase())}function FP(r){let e=new Map;for(let t of r){let n=t.path.join(" ");U(!e.has(n),`Duplicate CLI command path: ${n}`),e.set(n,t),FA(t,n),MA(t,n),DA(t,n)}}function FA(r,e){U(r.path.length>0,"CLI command path must not be empty."),r.domain!=="common"&&U(r.path[0]===r.domain,`CLI command domain/path mismatch: ${e}`)}function MA(r,e){U(Al(r).trim(),`CLI command help section must not be empty: ${e}`),U(r.spec.name.trim(),`CLI command spec name must not be empty: ${e}`)}function DA(r,e){U(typeof r.createExecutor=="function",`CLI command createExecutor must be a function: ${e}`)}var MP=["workspace","server","auth","db"];function DP(){return MP.map(r=>{let e=[r];return{title:Ol(e),commands:[{name:r,summary:Aa(e)}]}})}function Nl(r,e=[]){let t=MP.map(o=>{let i=[o],a=r.filter(s=>s.domain===o);return{path:i,title:Ol(i),summary:Aa(i),description:_l(i),sections:IA(a)}}),n=e.flatMap(o=>{let i=r.filter(a=>OA(a,o.path));return i.length===0?[]:[{path:o.path,title:RP(o),summary:EP(o),description:bP(o),sections:AA(o.path,i)}]});return[...t,...n]}function IA(r){return IP(r,e=>e.help?.entry??e.path.slice(1).join(" "))}function AA(r,e){return IP(e,t=>t.help?.entry??t.path.slice(r.length).join(" "))}function IP(r,e){let t=new Map;for(let n of r){let o=Al(n),i=t.get(o)??[];i.push({name:e(n),summary:wP(n)}),t.set(o,i)}return Array.from(t,([n,o])=>({title:n,commands:_A(o)}))}function OA(r,e){return r.path.length>e.length&&e.every((t,n)=>r.path[n]===t)}function _A(r){let e=[],t=new Set;for(let n of r)t.has(n.name)||(t.add(n.name),e.push(n));return e}var Zm=class{commands;namespaces;topLevelHelpGroups;commandsByPath=new Map;namespacesByPath=new Map;constructor(e){FP(e),this.commands=[...e],this.namespaces=Nl(this.commands,Il),this.topLevelHelpGroups=DP();for(let t of this.commands)this.commandsByPath.set(t.path.join(" "),t);for(let t of this.namespaces)this.namespacesByPath.set(t.path.join(" "),t)}findCommand(e){return this.commandsByPath.get(e.join(" "))}findNamespace(e){return this.namespacesByPath.get(e.join(" "))}},eh=new Zm(kP),AP=eh.commands,OP=eh.topLevelHelpGroups,eY=eh.namespaces;q();function NP(r){return rh.renderCommandHelp(r)}function WP(r){return rh.renderTopLevelHelp(r)}function UP(r){return rh.renderNamespaceHelp(r)}var LA=4,_P=3,NA="[<options>]",LP="value",WA=100,th=class{renderCommandHelp(e){let t=e.spec,n=this.mergeGlobalFlags(e),o=t.usageArgs??NA,i=[h("cli.out.help.usageLine",{command:t.name,usageArgs:o})];return this.appendCommandDescription(i,e),this.appendFlags(i,n,e),this.appendExamples(i,t.examples),this.renderLines(i)}renderTopLevelHelp(e){let t=this.renderTopLevelUsage();return this.appendFlags(t,Gp),this.appendCommandGroups(t,e),t.push("",h("cli.out.help.commandHelpSee")),this.renderLines(t)}renderNamespaceHelp(e){let t=e.path.join(" "),n=[`${h("cli.out.help.usageHeader")} succapp ${t} <command> [<args>]`,"",h(e.description)];for(let o of e.sections){if(o.commands.length===0)continue;n.push("",h(o.title));let i=Math.max(...o.commands.map(a=>Sr(a.name)));for(let a of o.commands)n.push(Oa(`${Eo(a.name,i)} ${h(a.summary)}`,_P))}return n.push("",h("cli.out.help.commandHelpRead",t)),this.renderLines(n)}renderTopLevelUsage(){let e=`${h("cli.out.help.usageHeader")} succapp `,t=" ".repeat(Sr(e)),n=[...Gp.map(a=>{let s=a.takesValue?` <${a.valueHint??LP}>`:"";return`[--${a.name}${s}]`}),"<command>","[<args>]"],o=[],i=e;for(let a of n){let c=`${i}${i===e?"":" "}${a}`;if(i!==e&&Sr(c)>WA){o.push(i),i=`${t}${a}`;continue}i=c}return o.push(i),o}appendCommandDescription(e,t){e.push("",Oa(h(PP(t))))}appendFlags(e,t,n){t.length!==0&&(e.push("",h("cli.out.help.options")),e.push(...this.renderFlags(t,n)))}appendExamples(e,t){if(!(!t||t.length===0)){e.push("",h("cli.out.help.examples"));for(let n of t)e.push(Oa(n))}}appendCommandGroups(e,t){for(let n of t)this.appendCommandGroup(e,n)}appendCommandGroup(e,t){if(t.commands.length===0)return;e.push("",h(t.title));let n=Math.max(...t.commands.map(o=>Sr(o.name)));for(let o of t.commands)e.push(Oa(`${Eo(o.name,n)} ${h(o.summary)}`,_P))}renderFlags(e,t){let n=e.map(i=>({left:this.renderFlagLeft(i),description:h(TP(i,t))})),o=Math.max(...n.map(i=>Sr(i.left)));return n.map(i=>Oa(`${Eo(i.left,o)} ${i.description}`))}renderFlagLeft(e){let t=e.takesValue?` <${e.valueHint??LP}>`:"",n=`--${e.name}${t}`;return e.alias?`-${e.alias}, ${n}`:` ${n}`}mergeGlobalFlags(e){let t=new Set(e.spec.flags.map(n=>n.name));return[...e.spec.flags,...Pr.filter(n=>!t.has(n.name)&&Br(e,n.name))]}renderLines(e){return`${e.join(`
|
|
78
|
+
`}function wP(r){let e=r.trimEnd(),t=e.split(`
|
|
79
|
+
`),n=t[0],o=t[t.length-1];return z(t.length>=2&&n.startsWith("# BEGIN ")&&o.startsWith("# END "),"Git ignore template must be a marked block."),{begin:n,end:o,content:e}}function PP(r){return new RegExp(`${kP(r.begin)}[\\s\\S]*?${kP(r.end)}`)}function kP(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}Y();K();var dh=E(require("fs")),jt=E(require("path"));Ee();K();var GA="resources",JA="workspace-templates",YA="succapp-workspace";async function Do(r){let e=await Xl(r),t=at((await dh.promises.readFile(e,"utf8")).replace(/\r\n/g,`
|
|
80
|
+
`),{...vr,filePath:e});return z(t,`Workspace template is not a JSON object: ${e}`),t}async function pn(r){return(await dh.promises.readFile(await Xl(r),"utf8")).replace(/\r\n/g,`
|
|
81
|
+
`)}async function Xl(r){let e=await ZA(),t=XA(r),n=jt.join(e,...t.split("/"));if(await ne(n))return n;let o=QA(e,t);return o&&await ne(o)?o:n}function ts(r,e){return Array.isArray(r[e])?r[e].filter(t=>typeof t=="string"):[]}function XA(r){let e=Zr(r);return z(e,`Unsafe workspace template path: ${r}`),e}function QA(r,e){if(jt.posix.basename(e)!==".gitignore")return;let t=jt.posix.dirname(e),n=t==="."?"gitignore.template":jt.posix.join(t,"gitignore.template");return jt.join(r,...n.split("/"))}async function ZA(){let r=[GA,JA,YA],e=[jt.resolve(__dirname,"..",...r),jt.resolve(__dirname,"..","..",...r),jt.resolve(__dirname,"..","..","..",...r),jt.resolve(__dirname,"..","..","..","..",...r),jt.resolve(__dirname,"..","..","..","..","..",...r),jt.resolve(process.cwd(),...r)];for(let t of e)if(await ne(t))return t;return e[e.length-1]}var eO=T("workspace.maintenance.support"),Ao=".gitignore",tO=Ao,rO=rs.posix.join(Gt,Ao);async function Ql(r){try{let e=await r.requireClient();return{client:e,serverInfo:await e.getServerInfo()}}catch(e){eO.debug(`skip server workspace support without server client: ${r.root}`,e);return}}function uh(r,e){return r.capabilities?.includes(e)===!0}function RP(r,e){return!r.capabilities||uh(r,e)}function Zl(r){return{refreshServerSupport:nO(r,"refreshServerSupport")===!0}}async function bP(r,e){let t=rs.join(r.root,Ao),n=await es.read(t);n.upsertMarkedBlock(await pn(tO));let o=rs.join(cr(r.root),Ao),i=await es.read(o);if(i.upsertMarkedBlock(await pn(rO)),e.apply){let a=await n.save(),s=await i.save();return a||s}return n.hasChanges()||i.hasChanges()}function Dt(r){return{code:r.code,taskId:r.taskId,repairable:r.repairable,level:r.level,localPaths:r.localPaths,remotePaths:[],properties:r.properties,execution:r.execution}}function nO(r,e){let t=r?.[e];return typeof t=="boolean"?t:void 0}var mh="json-schema-support",EP="err.workspace.issue.E405",oO="jsonSchemaSupport",ns="json-schemas",iO="json-schemas.tmp-",hh="json-schema-support.json",TP="json-schema-support-state.json",ep=T("workspace.maintenance.json-schema-support"),Wi=class{capabilities={taskId:mh,writeScopes:["init"],serverRequirement:"optional"};async refreshOnServerVersionChange(e,t,n){if(!this.supportsJsonSchemaSupport(n))return;let i=(await this.readState(e.root)).servers?.[t.serverUrl];if(!i&&!await this.hasSuccAppWorkspaceSetting(e.root)||i?.version===n.version)return;let a=await t.getJsonSchemaSupport(),s=await this.materializeFiles(e.root,a,t);await this.updateWorkspaceSettings(e.root,s,!0),await this.updateState(e.root,t.serverUrl,n,!0)}async execute(e){return this.maintainJsonSchemaSupport(e,!e.dryRun)}async maintainJsonSchemaSupport(e,t){let n=this.getMaintenancePaths(e.workspace.root),o=await Ql(e.workspace);if(!o)return[this.createSkippedIssue(n,e.dryRun,"server-support-unavailable")];if(!this.supportsJsonSchemaSupport(o.serverInfo))return[this.createSkippedIssue(n,e.dryRun,"server-capability-missing")];let i=this.createMaintenanceRun(e,n,t,o);if(i.applyWorkspaceConfiguration!==!0&&i.forceRefresh!==!0&&!await this.hasSuccAppWorkspaceSetting(i.root))return[];let a;try{a=await this.createMaintenancePlan(i)}catch(s){return ep.warn(`plan JSON Schema support failed: ${i.root}`,s),[this.createIssue(i.localPaths,Za(),["schema-files-outdated"])]}if(!i.apply)return a.causes.length>0?[this.createIssue(i.localPaths,Rt(),a.causes)]:[];if(a.causes.length===0)return[];try{let s=a.manifest??await i.client.getJsonSchemaSupport();if(!s)throw new Error(`JSON Schema support manifest is invalid: ${this.getManifestPath(i.root)}`);let c=a.shouldDownloadSchemas?await this.materializeFiles(i.root,s,i.client,a.schemaContents):s.schemas,l=await this.updateWorkspaceSettings(i.root,c,!0),p=await this.updateState(i.root,i.client.serverUrl,i.serverInfo,!0);return a.shouldDownloadSchemas||l||p?[this.createIssue(i.localPaths,ht(),a.causes)]:[]}catch(s){return ep.warn(`apply JSON Schema support failed: ${i.root}`,s),[this.createIssue(i.localPaths,Za(),a.causes)]}}async createMaintenancePlan(e){let t=await e.client.getJsonSchemaSupport(),n=this.normalizeSchemas(t),o={schemas:n},i=await this.downloadSchemaContents(n,e.client),a=e.forceRefresh===!0||await this.hasSchemaFileChanges(e.root,n,i),s=[];return a&&s.push("schema-files-outdated"),await this.updateWorkspaceSettings(e.root,n,!1)&&s.push("settings-outdated"),await this.updateState(e.root,e.client.serverUrl,e.serverInfo,!1)&&s.push("state-outdated"),{causes:s,shouldDownloadSchemas:a,manifest:o,schemaContents:i}}createMaintenanceRun(e,t,n,o){return{root:e.workspace.root,localPaths:t,apply:n,...this.createExecutionOptions(e,o)}}createExecutionOptions(e,t){let n=Zl(e.taskOptions);return{...t,applyWorkspaceConfiguration:!0,forceRefresh:n.refreshServerSupport}}supportsJsonSchemaSupport(e){return uh(e,oO)}getMaintenancePaths(e){return[this.getSupportRoot(e),this.getManifestPath(e),Qr(e)]}createIssue(e,t,n=[]){return Dt({code:EP,taskId:mh,repairable:!0,level:"info",localPaths:e,properties:{item:"json-schema-support",causes:n},execution:t})}createSkippedIssue(e,t,n){return Dt({code:EP,taskId:mh,repairable:!1,level:"warning",localPaths:e,properties:{item:"json-schema-support"},execution:Gn(t,n)})}async materializeFiles(e,t,n,o){let i=this.getSupportRoot(e),a=ya(e,`${iO}${Date.now()}`);await xr.promises.rm(a,{recursive:!0,force:!0});try{await xr.promises.mkdir(a,{recursive:!0});let s=this.normalizeSchemas(t);await pt(Oo.join(a,hh),JSON.stringify({schemas:s},null," ")+`
|
|
82
|
+
`);let c=new Map(s.map(l=>[l.path,l]));return await Promise.all(Array.from(c.values()).map(async l=>{let p=o?.get(l.path),u=p!==void 0?p:await n.downloadJsonSchema(l.source),g=Tn(a,l.path,"JSON Schema path");await xr.promises.mkdir(Oo.dirname(g),{recursive:!0}),await xr.promises.writeFile(g,u,"utf8")})),await xr.promises.rm(i,{recursive:!0,force:!0}),await xr.promises.rename(a,i),s}catch(s){throw await xr.promises.rm(a,{recursive:!0,force:!0}).catch(c=>{ep.debug(`cleanup temporary JSON Schema support directory failed: ${a}`,c)}),s}}normalizeSchemas(e){return e.schemas.map(t=>({...t,path:En(t.path,"JSON Schema path"),source:En(t.source,"JSON Schema source")}))}async downloadSchemaContents(e,t){let n=new Map,o=Array.from(new Map(e.map(i=>[i.path,i])).values());return await Promise.all(o.map(async i=>{n.set(i.path,await t.downloadJsonSchema(i.source))})),n}async hasSchemaFileChanges(e,t,n){let o=this.getSupportRoot(e);if(!await ne(o))return!0;let i=JSON.stringify({schemas:t},null," ")+`
|
|
83
|
+
`;if(await this.readSupportTextIfFile(this.getManifestPath(e))!==i)return!0;let a=new Set([hh,...t.map(s=>s.path)]);for(let s of await this.listSupportFiles(o))if(s!==TP&&!a.has(s))return!0;for(let s of t){let c=Tn(o,s.path,"JSON Schema path");if(await this.readSupportTextIfFile(c)!==n.get(s.path))return!0}return!1}async readSupportTextIfFile(e){try{return(await xr.promises.stat(e)).isFile()?await xr.promises.readFile(e,"utf8"):void 0}catch(t){if(x(t))return;throw t}}async listSupportFiles(e){let t=[];return await this.collectSupportFiles(e,"",t),t}async collectSupportFiles(e,t,n){let o=t?Oo.join(e,...t.split("/")):e,i=await xr.promises.readdir(o,{withFileTypes:!0});for(let a of i){let s=t?`${t}/${a.name}`:a.name;if(a.isDirectory()){await this.collectSupportFiles(e,s,n);continue}a.isFile()&&n.push(s)}}async updateWorkspaceSettings(e,t,n){let o=Qr(e),i=await ke(o),a=at(i,{...vr,filePath:o,ignoreParseError:!0});if(!a)return!1;let s=Yr(i);return s=this.upsertMissingJsonSchemas(s,a,t),s===Yr(i)?!1:(n&&await pt(o,s),!0)}async hasSuccAppWorkspaceSetting(e){let t=await fo(Qr(e),vr);return t?(Array.isArray(t["json.schemas"])?t["json.schemas"]:[]).filter(o=>this.isJsonSchemaSetting(o)).some(o=>{let i=o.url.replace(/\\/g,"/");return i.startsWith(`./${Gt}/${ns}/`)||i.startsWith(`${Gt}/${ns}/`)}):!1}upsertMissingJsonSchemas(e,t,n){let o=Array.isArray(t["json.schemas"])?t["json.schemas"]:[],i=n.filter(p=>p.fileMatch.length>0).map(p=>({fileMatch:p.fileMatch,url:`./${Gt}/${ns}/${p.path}`})),a=new Map(i.map(p=>[this.normalizeSettingUrl(p.url),p])),s=new Set,c=[],l=!1;for(let p of o){if(!this.isJsonSchemaSetting(p)){c.push(p);continue}let u=this.normalizeSettingUrl(p.url);if(!this.isSuccAppJsonSchemaUrl(u)){c.push(p);continue}if(s.has(u)){l=!0;continue}let g=a.get(u);if(!g){l=!0;continue}s.add(u),c.push(g),rr(p,g)||(l=!0)}for(let p of i){let u=this.normalizeSettingUrl(p.url);s.has(u)||(c.push(p),l=!0)}return l?Kt(e,["json.schemas"],c):e}isJsonSchemaSetting(e){return q(e)&&typeof e.url=="string"}isSuccAppJsonSchemaUrl(e){return e.startsWith(`${Gt}/${ns}/`)}normalizeSettingUrl(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}async readState(e){let t=this.getStatePath(e),n=await ke(t);if(!n)return{};try{let o=JSON.parse(n);return this.isState(o)?o:{}}catch(o){return ep.debug(`skip JSON Schema support state because it cannot be parsed: ${t}`,o),{}}}isState(e){return typeof e=="object"&&e!==null&&(!("servers"in e)||typeof e.servers=="object"&&e.servers!==null&&!Array.isArray(e.servers))}async updateState(e,t,n,o){let i=await this.readState(e),a=i.servers?.[t],s=this.createServerState(n);if(a?.updatedAt&&rr(this.createComparableServerState(a),s))return!1;let c={...i.servers};c[t]={...s,updatedAt:new Date().toISOString()};let l=this.getStatePath(e),p=JSON.stringify({...i,servers:c},null," ")+`
|
|
84
|
+
`;return p===await ke(l)?!1:(o&&await pt(l,p),!0)}createServerState(e){return{version:e.version,productType:e.productType,devToolApiVersion:e.devToolApiVersion}}createComparableServerState(e){return{version:e.version,productType:e.productType,devToolApiVersion:e.devToolApiVersion}}getSupportRoot(e){return ya(e,ns)}getManifestPath(e){return Oo.join(this.getSupportRoot(e),hh)}getStatePath(e){return Oo.join(this.getSupportRoot(e),TP)}};var zr=E(require("fs")),nt=E(require("path"));Ee();F();Et();Y();re();Et();var os=class r{constructor(e,t){this.filePath=e;this.content=t}content;changed=!1;static async read(e){return new r(e,await ke(e))}hasChanges(){return this.changed}getContent(){return this.content}upsertProjectReferences(e){let t=at(this.content,{...vr,filePath:this.filePath,ignoreParseError:!0});if(!t)return{updated:!1,mergeRequired:!0};let n=aO(t,e);return n===t?{updated:!1,mergeRequired:!1}:{updated:this.updateContent(Kt(this.content,["references"],n.references)),mergeRequired:!1}}upsertGeneratedContent(e,t={}){return!this.content.trim()||t.overwrite===!0?{updated:this.updateContent(e),overwriteRequired:!1}:this.content===e?{updated:!1,overwriteRequired:!1}:{updated:!1,overwriteRequired:!0}}replaceContent(e){return this.updateContent(e)}async save(){return this.changed?(await pt(this.filePath,Yr(this.content)),this.changed=!1,!0):!1}updateContent(e){return e===this.content?!1:(this.content=e,this.changed=!0,!0)}};function aO(r,e){let t=Array.isArray(r.references)?[...r.references]:[],n=!Array.isArray(r.references);for(let o of e)t.some(i=>sO(i,o))||(t.push({path:o}),n=!0);return n?{...r,references:t}:r}function sO(r,e){return cO(r)&&r.path===e}function cO(r){return typeof r=="object"&&r!==null&&"path"in r&&typeof r.path=="string"}K();B();var fh="typescript-support",MP="err.workspace.issue.E404",lO="typescriptSupport",pO="succ-types",dO="succ-types.tmp-",FP="typescript-support.json",as="tsconfig.json",gh="tsconfig.action.json",yh="tsconfig.browser.json",uO=nt.posix.join(".vscode","settings.typescript-support.jsonc"),Ui=T("workspace.maintenance.typescript-support"),ji=class{capabilities={taskId:fh,writeScopes:["init"],serverRequirement:"optional"};async refreshOnServerVersionChange(e,t,n){if(!this.supportsTypeScriptSupport(n))return;let i=(await this.readTypeScriptSupportState(e.root)).servers?.[t.serverUrl];!i||i.version===n.version||(await this.materializeTypeScriptSupportFiles(e.root,await t.getTypeScriptSupportApiLibs()),await this.updateTypeScriptTsConfigs(e.root,{},!0),await this.updateTypeScriptSupportState(e.root,t.serverUrl,n,!0))}async execute(e,t){return e.dryRun?this.maintainTypeScriptSupport(e,!1):t!==void 0&&!t.some(n=>n.repairable)?t:this.maintainTypeScriptSupport(e,!0)}async maintainTypeScriptSupport(e,t){let n=await this.getMaintenancePaths(e.workspace.root),o=await Ql(e.workspace);if(!o)return[this.createSkippedIssue(n,!t,"server-support-unavailable")];if(!this.supportsTypeScriptSupport(o.serverInfo))return[this.createSkippedIssue(n,!t,"server-capability-missing")];let i=this.createExecutionOptions(e,o),a=await this.createMaintenancePlan(e.workspace.root,i);if(!t)return a.causes.length>0?[this.createIssue(n,Rt(),a.causes)]:[];if(a.causes.length===0)return[];try{let s=await this.updateTypeScriptSyncIgnore(e.workspace.root,!0);a.shouldDownloadTypes&&await this.materializeTypeScriptSupportFiles(e.workspace.root,await i.client.getTypeScriptSupportApiLibs());let c=await this.updateTypeScriptTsConfigs(e.workspace.root,i,!0),l=await this.updateTypeScriptSupportState(e.workspace.root,i.client.serverUrl,i.serverInfo,!0);return s||a.shouldDownloadTypes||c||l?[this.createIssue(n,ht(),a.causes)]:[]}catch(s){return Ui.warn(`apply TypeScript support failed: ${e.workspace.root}`,s),[this.createIssue(n,Za(),a.causes)]}}async createMaintenancePlan(e,t){let n=[];await this.updateTypeScriptSyncIgnore(e,!1)&&n.push("sync-ignore-outdated");let o=await this.hasAnyFile(is(e)),i=t.forceRefresh===!0||!o;return i&&n.push("type-files-outdated"),await this.updateTypeScriptTsConfigs(e,t,!1)&&n.push("tsconfig-outdated"),await this.updateTypeScriptSupportState(e,t.client.serverUrl,t.serverInfo,!1)&&n.push("state-outdated"),{causes:n,shouldDownloadTypes:i}}createExecutionOptions(e,t){let n=Zl(e.taskOptions);return{...t,forceRefresh:n.refreshServerSupport,overwriteGeneratedTsConfig:!0}}supportsTypeScriptSupport(e){return RP(e,lO)}async getMaintenancePaths(e){let t=await mO(e);return t.length>0?t:[is(e)]}createIssue(e,t,n=[]){return Dt({code:MP,taskId:fh,repairable:!0,level:"info",localPaths:e,properties:{item:"typescript-support",causes:n},execution:t})}createSkippedIssue(e,t,n){return Dt({code:MP,taskId:fh,repairable:!1,level:"warning",localPaths:e,properties:{item:"typescript-support"},execution:Gn(t,n)})}async hasAnyFile(e){let t=await zr.promises.readdir(e,{withFileTypes:!0}).catch(n=>{if(x(n))return Ui.debug(`skip missing TypeScript support directory: ${e}`),[];throw n});for(let n of t)if(n.isFile()&&n.name!==FP||n.isDirectory()&&await this.hasAnyFile(nt.join(e,n.name)))return!0;return!1}async materializeTypeScriptSupportFiles(e,t){let n=is(e),o=nt.join(cr(e),`${dO}${Date.now()}`);await zr.promises.rm(o,{recursive:!0,force:!0});try{await zr.promises.mkdir(o,{recursive:!0});for(let[i,a]of Object.entries(t)){let s=hO(i);if(!s||typeof a!="string")continue;let c=nt.join(o,s);await zr.promises.mkdir(nt.dirname(c),{recursive:!0}),await zr.promises.writeFile(c,a,"utf8")}await zr.promises.rm(n,{recursive:!0,force:!0}),await zr.promises.rename(o,n)}catch(i){throw await zr.promises.rm(o,{recursive:!0,force:!0}).catch(a=>{Ui.debug(`cleanup temporary TypeScript support directory failed: ${o}`,a)}),i}}async updateTypeScriptTsConfigs(e,t,n){let o=cr(e);n&&await zr.promises.mkdir(o,{recursive:!0});let i=await this.updateRootTsConfig(e,n),a=await this.updateGeneratedOrMissingTsConfig(nt.join(o,gh),await pn(nt.posix.join(Gt,gh)),t,n),s=await this.updateGeneratedOrMissingTsConfig(nt.join(o,yh),await pn(nt.posix.join(Gt,yh)),t,n);return i||a||s}async updateRootTsConfig(e,t){let n=nt.join(e,as),o=await pn(as),i=await os.read(n);if(!i.getContent().trim())return i.replaceContent(o),t?i.save():!0;let a=i.upsertProjectReferences(await fO());return a.mergeRequired?(Ui.debug(`skip root tsconfig references merge because it cannot be parsed: ${n}`),!1):a.updated?t?i.save():!0:!1}async updateGeneratedOrMissingTsConfig(e,t,n,o){let i=await os.read(e),a=i.upsertGeneratedContent(t,{overwrite:n.overwriteGeneratedTsConfig===!0});return a.overwriteRequired?(o&&Ui.debug(`skip generated tsconfig overwrite without refresh permission: ${e}`),!1):a.updated?o?i.save():!0:!1}async updateTypeScriptSyncIgnore(e,t){let n=Qr(e),o=await ke(n),i=at(o,{...vr,filePath:n,ignoreParseError:!0});if(!i)return!1;let a=await Do(uO),s=ts(a,"succapp.sync.ignore"),c=Array.isArray(i["succapp.sync.ignore"])?i["succapp.sync.ignore"].filter(p=>typeof p=="string"):[],l=s.filter(p=>!c.includes(p));return l.length===0?!1:(t&&(await pt(n,Kt(o,["succapp.sync.ignore"],[...c,...l])),wt.load()),!0)}async readTypeScriptSupportState(e){let t=xP(e),n=await ke(t);if(!n)return{};try{let o=JSON.parse(n);return yO(o)?o:{}}catch(o){return Ui.debug(`skip TypeScript support state because it cannot be parsed: ${t}`,o),{}}}async updateTypeScriptSupportState(e,t,n,o){let i=await this.readTypeScriptSupportState(e),a=i.servers?.[t],s=CO(n);if(a?.updatedAt&&rr(SO(a),s))return!1;let c={...i.servers};c[t]={...s,updatedAt:new Date().toISOString()};let l=xP(e),p=JSON.stringify({...i,servers:c},null," ")+`
|
|
85
|
+
`;return p===await ke(l)?!1:(o&&await pt(l,p),!0)}};async function mO(r){let e=[nt.join(r,as),nt.join(cr(r),gh),nt.join(cr(r),yh),is(r)],t=[];for(let n of e)await ne(n)&&t.push(n);return t}function hO(r){return Zr(r)?.split("/").join(nt.sep)}async function fO(){let r=await Do(as),e=Array.isArray(r.references)?r.references.map(t=>gO(t)?t.path:void 0).filter(t=>typeof t=="string"):[];return z(e.length>0,`Workspace template does not declare TypeScript references: ${await Xl(as)}`),e}function gO(r){return typeof r=="object"&&r!==null&&"path"in r&&typeof r.path=="string"}function is(r){return ya(r,pO)}function xP(r){return nt.join(is(r),FP)}function yO(r){return typeof r=="object"&&r!==null&&(!("servers"in r)||typeof r.servers=="object"&&r.servers!==null&&!Array.isArray(r.servers))}function CO(r){return{version:r.version,productType:r.productType,devToolApiVersion:r.devToolApiVersion}}function SO(r){return{version:r.version,productType:r.productType,devToolApiVersion:r.devToolApiVersion}}var IP=T("workspace.maintenance.support-refresh");async function DP(r,e,t){await r.lockManager.withLock({scopes:["init"],command:"workspace-support-refresh"},async()=>vO(r,e,t))}async function vO(r,e,t){try{await new ji().refreshOnServerVersionChange(r,e,t)}catch(n){IP.warn(`refresh TypeScript support after server version change failed: ${r.root}`,n)}try{await new Wi().refreshOnServerVersionChange(r,e,t)}catch(n){IP.warn(`refresh JSON Schema support after server version change failed: ${r.root}`,n)}}Ir();Sn();Ir();Y();D();B();var OP=E(require("node:path"));Ke();B();Y();K();bo();var AP="sync-baseline",Ch=50,dn=T("workspace.maintenance.sync-baseline"),tp=class{capabilities={taskId:AP,writeScopes:["sync"],serverRequirement:"required"};async execute(e,t){let n=t!==void 0?[...t]:await this.detectBaselineIssues(e);if(dn.info("sync-baseline maintenance scan result: issues={0} paths={1}",n.length,this.formatIssuePaths(n)),e.dryRun||n.length===0)return n.map(l=>this.withExecution(l,this.createDryRunExecution(l)));let o=await this.listServerProjectNames(e),{repairableIssues:i,unresolved:a}=this.evaluateRepairability(n,o);dn.info("sync-baseline maintenance repair plan: repairable={0} unresolved={1} repairablePaths={2} unresolvedPaths={3}",i.length,a.length,this.formatIssuePaths(i),this.formatIssuePaths(a));let s=[],c=[];if(i.length>0){await this.fetchBaselineProjects(e,i);let l=await this.detectBaselineIssues(e);({repaired:s,unresolved:c}=this.evaluateRepairResult(i,l))}return dn.info("sync-baseline maintenance result: repaired={0} unresolved={1} repairedPaths={2} unresolvedPaths={3}",s.length,a.length+c.length,this.formatIssuePaths(s),this.formatIssuePaths([...a,...c])),[...s.map(l=>this.withExecution(l,ht())),...a.map(l=>this.withExecution(l,Hr())),...c.map(l=>this.withExecution(l,Hr()))]}async detectBaselineIssues(e){e.task.throwIfAborted(),dn.info("sync-baseline maintenance start: dryRun={0} targets={1}",e.dryRun,this.formatPaths(e.targetRemotePaths));let t=await e.workspace.listWorkspaceProjects(),n=new Set(await e.workspace.listBaselineProjects(e.activeServerUrl)),o=this.resolveTargetProjectNames(e),i=this.resolveTargetRemotePaths(e);dn.info("sync-baseline project lists: workspaceProjects={0} baselineProjects={1} targetProjects={2}",this.formatProjectNames(t),this.formatProjectNames([...n]),o?this.formatProjectNames([...o]):"<all>");let a=new kt(e.workspace.getMirrorRoot(e.activeServerUrl)),s=[],c=t.filter(l=>!o||o.has(l));for(let l of c){if(!n.has(l)){s.push(this.createMissingBaselineProjectIssue(l));continue}let p=await this.detectIncompleteBaselineIssues(a,l);s.push(...this.filterIssuesByTargets(p,i))}return s}async detectIncompleteBaselineIssues(e,t){let n=Ct(t),o=[];return await this.detectDirectoryBaselineIssues(e,t,n,o),o}async detectDirectoryBaselineIssues(e,t,n,o){let i=OP.posix.join(n,Q),a=await Er(e.root,i);if(!a.exists){o.push(this.createMissingBaselineMetaIssue(t,n,i));return}if(a.exists&&!a.readable){o.push(this.createUnreadableBaselineMetaIssue(t,n,i));return}let s=Object.keys(a.dotMeta),c=s.find(l=>!this.isValidDotMetaKey(l));if(c){o.push(this.createInvalidBaselineMetaIssue(t,n,i,c));return}for(let l of s){let p=this.joinRemotePath(n,l),u=a.dotMeta[l];if(!await e.exists(p)){o.push(this.createMissingBaselineResourceIssue(t,p));continue}let m=await e.isFolder(p),f=this.getExplicitFolderType(u);if(f!==void 0&&f!==m){o.push(this.createBaselineResourceTypeIssue(t,p,f,m));continue}m&&await this.detectDirectoryBaselineIssues(e,t,p,o)}}resolveTargetProjectNames(e){if(!e.targetRemotePaths||e.targetRemotePaths.length===0)return;let t=e.targetRemotePaths.map(n=>this.getProjectName(le(n))).filter(n=>!!n);return t.length>0?new Set(t):void 0}resolveTargetRemotePaths(e){if(!(!e.targetRemotePaths||e.targetRemotePaths.length===0))return e.targetRemotePaths.map(t=>le(t))}filterIssuesByTargets(e,t){return!t||t.length===0?e:e.filter(n=>n.remotePaths.some(o=>t.some(i=>Mn(o,void 0,i,void 0))))}getProjectName(e){return Ve(e)?.replace(/^\//,"")}createMissingBaselineProjectIssue(e){let t=Ct(e);return this.createIssue("err.workspace.issue.E305",!0,[t],{projectName:e,issueCause:"baselineProjectMissing"})}createMissingBaselineResourceIssue(e,t){return this.createIssue("err.workspace.issue.E302",!0,[t],{projectName:e,issueCause:"baselineResourceMissing"})}createBaselineResourceTypeIssue(e,t,n,o){return this.createIssue("err.workspace.issue.E301",!0,[t],{projectName:e,issueCause:"baselineResourceTypeMismatch",expectedType:n?"folder":"file",actualType:o?"folder":"file"})}createMissingBaselineMetaIssue(e,t,n){return this.createIssue("err.workspace.issue.E303",!0,[t],{projectName:e,issueCause:"baselineMetaMissing",dotMetaPath:n})}createUnreadableBaselineMetaIssue(e,t,n){return this.createIssue("err.workspace.issue.E304",!0,[t],{projectName:e,issueCause:"baselineMetaUnreadable",dotMetaPath:n})}createInvalidBaselineMetaIssue(e,t,n,o){return this.createIssue("err.workspace.issue.E304",!0,[t],{projectName:e,issueCause:"baselineMetaInvalidKey",dotMetaPath:n,invalidKey:o})}createIssue(e,t,n,o){return{code:e,taskId:AP,repairable:t,level:t?"warning":"error",localPaths:[],remotePaths:n,properties:o}}async listServerProjectNames(e){let n=await(await e.workspace.requireServerClient(e.activeServerUrl)).getProjects();return dn.info("sync-baseline server projects loaded: count={0} projects={1}",n.length,this.formatProjectNames(n.map(o=>o.name))),new Set(n.map(o=>o.name))}canRepairIssue(e,t){let n=this.getSingleProjectName(e);return!!n&&t.has(n)}evaluateRepairability(e,t){let n=[],o=[];for(let i of e)this.canRepairIssue(i,t)?n.push(i):o.push(this.createServerMissingIssue(i));return{repairableIssues:n,unresolved:o}}createServerMissingIssue(e){let t=this.getSingleProjectName(e);return{...e,code:"err.workspace.issue.E307",repairable:!1,level:"error",properties:{...e.properties,projectName:t??"",issueCause:"serverProjectMissing"}}}evaluateRepairResult(e,t){let n=new Set(t.map(s=>this.getIssueKey(s))),o=new Set(e.map(s=>this.getIssueKey(s))),i=[],a=[];for(let s of e)n.has(this.getIssueKey(s))?a.push(this.createBaselineStillMissingIssue(s)):i.push(s);for(let s of t)o.has(this.getIssueKey(s))||a.push(s);return{repaired:i,unresolved:a}}createBaselineStillMissingIssue(e){return{...e,code:"err.workspace.issue.E306",repairable:!1,level:"error",properties:{...e.properties,originalIssueCause:this.getIssueCause(e),issueCause:"baselineStillMissingAfterFetch"}}}async fetchBaselineProjects(e,t){let n=[...new Set(t.map(o=>this.getSingleProjectName(o)).filter(o=>!!o))];if(n.length===0){dn.info("sync-baseline fetch skipped: no repairable project names");return}dn.info("sync-baseline fetch start: projects={0}",this.formatProjectNames(n)),await new Hn(e.workspace,{projectNames:n,forceRefresh:!0,task:e.task}).execute(),dn.info("sync-baseline fetch done: projects={0}",this.formatProjectNames(n))}createDryRunExecution(e){return e.repairable?Rt():Hr(!0)}withExecution(e,t){return{...e,execution:t}}getIssueKey(e){return[e.code,this.getIssueCause(e),...e.remotePaths].join("|")}getIssueCause(e){let t=e.properties?.issueCause;return typeof t=="string"?t:""}getSingleProjectName(e){let t=e.properties?.projectName;if(typeof t=="string"&&t)return t;let n=e.remotePaths[0];return n?this.getProjectName(n):void 0}getExplicitFolderType(e){if(e.type==="file"||e.hash!==void 0||e.size!==void 0&&e.size>0)return!1;if(e.type)return!0}joinRemotePath(e,t){return e==="/"?"/"+t:e+"/"+t}isValidDotMetaKey(e){return Zr(e)===e&&!e.includes("/")&&e!==Q}formatIssuePaths(e){return this.formatPaths(e.flatMap(t=>t.remotePaths))}formatProjectNames(e){return this.formatPaths(e.map(t=>Ct(t)))}formatPaths(e){if(!e||e.length===0)return"<none>";let t=e.slice(0,Ch),n=e.length>Ch?` ...(+${e.length-Ch})`:"";return t.join(",")+n}};B();Y();K();var rp=".agents/skills/succapp-docs",np="indexes/md-index.json",op="indexes/assets-index.json",ip="indexes/metadata-demo-index.json",ss="resources/demo/DEMO",kO="dev/ai-building/tasks.md",Sh=".sync-state.json",wO="SUCCAPP_DOCS_BASE_URL",PO="https://docs.succapp.com/v5";function _P(r=process.env){let e=RO(r[wO]||PO);return new URL("md-index.json",`${e}/`).toString()}function LP(r,e){return{schemaVersion:1,skill:"succapp-docs",docSet:r.docSet,product:r.product??"SuccApp",generatedAt:r.generatedAt,updatedAt:e,entrypoints:{skill:"SKILL.md",aiBuilding:"dev/ai-building/skill.md",workspace:"dev/ai-building/workspace.md",markdownIndex:np,assetsIndex:op,metadataDemoIndex:ip,metadataDemo:ss,taskRoutes:kO}}}function RO(r){return new URL(r.trim()).toString().replace(/\/+$/,"")}var Vi=E(require("fs")),Kr=E(require("path"));Et();D();var NP=require("crypto");function _o(r){return(0,NP.createHash)("sha256").update(r).digest("hex")}Ir();Y();re();F();K();var Bi=T("workspace.maintenance.agent-docs-skill"),WP=5e3,bO=/\.gif$/i,VP=["README.md"],UP=/!?\[[^\]]*]\(([^)\n]+)\)|^[ \t]{0,3}\[[^\]]+]:[ \t]*(\S+)|\b(?:href|src)=["']([^"']+)["']/gm,ap=class{constructor(e=MO,t=xO){this.fetchText=e;this.fetchFile=t}async sync(e,t){let n=t.indexUrl??_P(),o=t.task??Xe.INSTANCE;o.start(100,{message:d("workspace.maintenance.agentDocs.progress.indexes")});let i=o.subTaskMonitor(8),a=o.subTaskMonitor(36),s=o.subTaskMonitor(50),c=o.subTaskMonitor(6);i.start(3,{message:d("workspace.maintenance.agentDocs.progress.indexes")});let l=NO(await this.fetchText(n));i.step();let p=await this.fetchAssetsIndex(n);i.step();let u=p?.index,g=p?.text,m=g===void 0?void 0:_o(g),f=await this.fetchMetadataDemoIndex(n);i.step();let y=f?.index,C=f?.text,v=C===void 0?void 0:_o(C),w=XO(e),h=Kr.join(w,Sh),S=await FO(h),k=ls(l),b=_o(k),P=await ke(At(w,np)),J=await ke(At(w,op)),M=await ke(At(w,ip)),H=g===void 0||J===g,L=C===void 0||M===C,Z=_O(u,y);if(y||LO(Z,S),!t.force&&AO(l,S)&&OO(Z,S)&&P===k&&H&&L)return a.finish(),s.finish(),c.finish(),o.finish(),DO(l,S);let U={added:0,changed:0,removed:0,skipped:0,unavailable:0,resourcesAdded:0,resourcesChanged:0,resourcesRemoved:0,resourcesSkipped:0,resourcesUnavailable:0},V={},G={},te=new Set(l.files.map(be=>be.path));a.start(Math.max(l.files.length,1),{message:d("workspace.maintenance.agentDocs.progress.markdown")});for(let be of l.files)try{let se=At(w,be.path),Je=await IO(se),Gi=Je===be.sha256,Vt;if(Gi)U.skipped++,Vt=await ke(se);else{let Qn=await this.downloadMarkdown(n,be);if(Qn===void 0){U.unavailable++;continue}Vt=Qn,t.apply&&await sr(se,Vt),Je===void 0?U.added++:U.changed++}if(V[be.path]={sha256:be.sha256,bytes:be.bytes},!u){let Qn=$O(be.path,Vt);for(let qp of Qn)bO.test(qp)||Z.set(qp,{path:qp})}}finally{a.step()}l.files.length===0&&a.step(),s.start(Math.max(Z.size,1),{message:d("workspace.maintenance.agentDocs.progress.assets")});for(let be of Z.values()){let se=await this.syncResource(w,n,be,t.apply);U.resourcesAdded+=se.added,U.resourcesChanged+=se.changed,U.resourcesSkipped+=se.skipped,U.resourcesUnavailable+=se.unavailable,se.file&&(G[be.path]=se.file),s.step()}Z.size===0&&s.step();for(let be of Object.keys(S.files))te.has(be)||(U.removed++,t.apply&&await Vi.promises.rm(At(w,be),{force:!0}));for(let be of Object.keys(S.resources??{}))Z.has(be)||(U.resourcesRemoved++,t.apply&&await Vi.promises.rm(At(w,be),{force:!0}));let oe=U.added+U.changed+U.removed>0,I=U.resourcesAdded+U.resourcesChanged+U.resourcesRemoved>0,j=S.syncedAt||new Date().toISOString();c.start(1,{message:d("workspace.maintenance.agentDocs.progress.metadata")});let ie=await jP(this.fetchText,n,l,k,b,g,m,C,v,j,V,G),hn=await TO(w,ie,te),fr=oe||I||hn?new Date().toISOString():j;return fr!==j&&(ie=await jP(this.fetchText,n,l,k,b,g,m,C,v,fr,V,G),hn=!0),t.apply&&await this.writeGeneratedFiles(w,ie,te),c.step(),o.finish(),{docSet:l.docSet,generatedAt:l.generatedAt,updatedAt:fr,total:l.files.length,added:U.added,changed:U.changed,removed:U.removed,skipped:U.skipped,unavailable:U.unavailable,resourcesAdded:U.resourcesAdded,resourcesChanged:U.resourcesChanged,resourcesRemoved:U.resourcesRemoved,resourcesSkipped:U.resourcesSkipped,resourcesUnavailable:U.resourcesUnavailable,metadataChanged:hn}}async fetchAssetsIndex(e){let t=cs(e,"assets-index.json");try{let n=await this.fetchText(t),o=WO(n);return{index:o,text:ls(o)}}catch(n){Bi.warn(`skip SuccApp docs assets index: ${t}`,n);return}}async fetchMetadataDemoIndex(e){let t=cs(e,"metadata-examples/DEMO/index.json");try{let n=await this.fetchText(t),o=jO(n);return{index:o,text:ls(o)}}catch(n){Bi.warn(`skip SuccApp metadata demo index: ${t}`,n);return}}async downloadMarkdown(e,t){let n=cs(e,t.path);try{let o=await this.fetchText(n);return qO(t,o),o}catch(o){Bi.warn(`skip SuccApp docs markdown file: ${n}`,o);return}}async syncResource(e,t,n,o){let i=n.path,a=At(e,i),s=await JO(a),c=YO(n);if(c&&s&&vh(s,c))return{added:0,changed:0,skipped:1,unavailable:0,file:s};let l=cs(t,n.urlPath??i),p;try{p=await this.fetchFile(l)}catch(g){return Bi.warn(`skip SuccApp docs linked resource: ${l}`,g),{added:0,changed:0,skipped:0,unavailable:1}}let u=qP(p);return c&&!vh(u,c)?(Bi.warn(`skip SuccApp docs linked resource with mismatched checksum: ${l}`),{added:0,changed:0,skipped:0,unavailable:1}):!c&&s&&vh(s,u)?{added:0,changed:0,skipped:1,unavailable:0,file:s}:(o&&await sr(a,p),{added:s?0:1,changed:s?1:0,skipped:0,unavailable:0,file:u})}async writeGeneratedFiles(e,t,n){for(let[o,i]of Object.entries(t))await sr(At(e,o),i);for(let o of VP)n.has(o)||await Vi.promises.rm(At(e,o),{force:!0})}};async function jP(r,e,t,n,o,i,a,s,c,l,p,u){let g=LP(t,l),m={"SKILL.md":await EO(r,e),"manifest.json":ls(g),[np]:n,[Sh]:ls({schemaVersion:1,source:e,syncedAt:l,indexSha256:o,assetsIndexSha256:a,metadataDemoIndexSha256:c,files:p,resources:u})};return i!==void 0&&(m[op]=i),s!==void 0&&(m[ip]=s),m}function EO(r,e){return r(cs(e,"SKILL.md"))}async function TO(r,e,t){for(let[n,o]of Object.entries(e))if(await ke(At(r,n))!==o)return!0;for(let n of VP)if(!t.has(n)&&(await ke(At(r,n))).trim())return!0;return!1}async function MO(r){let e=await $P(r,{headers:{Accept:"text/markdown, application/json, text/plain;q=0.9","Accept-Encoding":"gzip"}});if(!e.ok)throw new Error(`download failed: ${r} (${e.status})`);return e.text()}async function xO(r){let e=await $P(r,{headers:{Accept:"*/*","Accept-Encoding":"gzip"}});if(!e.ok)throw new Error(`download failed: ${r} (${e.status})`);return Buffer.from(await e.arrayBuffer())}async function FO(r){let e=await ke(r);if(!e.trim())return{schemaVersion:1,source:"",syncedAt:"",files:{}};try{let t=at(e);return{schemaVersion:1,source:typeof t.source=="string"?t.source:"",syncedAt:typeof t.syncedAt=="string"?t.syncedAt:"",indexSha256:typeof t.indexSha256=="string"?t.indexSha256:void 0,assetsIndexSha256:typeof t.assetsIndexSha256=="string"?t.assetsIndexSha256:void 0,metadataDemoIndexSha256:typeof t.metadataDemoIndexSha256=="string"?t.metadataDemoIndexSha256:void 0,files:q(t.files)?BP(t.files):{},resources:q(t.resources)?BP(t.resources):{}}}catch(t){return Bi.warn(`ignore invalid SuccApp docs sync state: ${r}`,t),{schemaVersion:1,source:"",syncedAt:"",files:{},resources:{}}}}async function IO(r){try{return _o(await Vi.promises.readFile(r))}catch(e){if(x(e))return;throw e}}function BP(r){let e={};for(let[t,n]of Object.entries(r)){if(!q(n))continue;let o=n.sha256,i=n.bytes;typeof o=="string"&&typeof i=="number"&&(e[t]={sha256:o,bytes:i})}return e}function DO(r,e){return{docSet:r.docSet,generatedAt:r.generatedAt,updatedAt:e.syncedAt,total:r.files.length,added:0,changed:0,removed:0,skipped:r.files.length,unavailable:0,resourcesAdded:0,resourcesChanged:0,resourcesRemoved:0,resourcesSkipped:Object.keys(e.resources??{}).length,resourcesUnavailable:0,metadataChanged:!1}}function AO(r,e){return r.files.every(t=>e.files[t.path]?.sha256===t.sha256)}function OO(r,e){for(let t of r.values())if(e.resources?.[t.path]?.sha256!==t.sha256)return!1;return!0}function _O(r,e){let t=new Map;if(r)for(let n of r.files)t.set(n.path,n);if(e)for(let n of e.files){let o=KO(n.path);t.set(o,{path:o,urlPath:GO(n.path),bytes:n.size,sha256:n.sha256})}return t}function LO(r,e){for(let[t,n]of Object.entries(e.resources??{}))t.startsWith(`${ss}/`)&&r.set(t,{path:t,urlPath:t.replace(ss,"metadata-examples/DEMO"),bytes:n.bytes,sha256:n.sha256})}function NO(r){let e=at(r);if(!e||e.schemaVersion!==2||typeof e.docSet!="string"||typeof e.generatedAt!="string"||typeof e.base!="string"||!Array.isArray(e.files))throw new Error("invalid markdown index shape");let t=e.files.map(VO);return{schemaVersion:2,docSet:e.docSet,product:typeof e.product=="string"?e.product:void 0,generatedAt:e.generatedAt,base:e.base,files:t}}function WO(r){let e=at(r);if(!e||e.schemaVersion!==1||typeof e.docSet!="string"||typeof e.base!="string"||!Array.isArray(e.files))throw new Error("invalid assets index shape");return{schemaVersion:1,docSet:e.docSet,product:typeof e.product=="string"?e.product:void 0,base:e.base,files:e.files.map(UO)}}function UO(r){if(!q(r)||typeof r.path!="string"||typeof r.bytes!="number"||typeof r.sha256!="string")throw new Error("invalid assets index file entry");return At("/",r.path),{path:r.path,bytes:r.bytes,sha256:r.sha256}}function jO(r){let e=at(r);if(!e||e.schemaVersion!==1||e.source!=="metadata-example"||typeof e.example!="string"||typeof e.root!="string"||typeof e.generatedAt!="string"||!Array.isArray(e.files))throw new Error("invalid metadata example index shape");return{schemaVersion:1,source:"metadata-example",example:e.example,root:e.root,generatedAt:e.generatedAt,files:e.files.map(BO)}}function BO(r){if(!q(r)||typeof r.path!="string"||typeof r.size!="number"||typeof r.sha256!="string")throw new Error("invalid metadata example index file entry");return At("/",r.path),{path:r.path,size:r.size,sha256:r.sha256}}function VO(r){if(!q(r)||typeof r.path!="string"||typeof r.htmlUrl!="string"||typeof r.title!="string"||typeof r.bytes!="number"||typeof r.sha256!="string")throw new Error("invalid markdown index file entry");return At("/",r.path),{path:r.path,htmlUrl:r.htmlUrl,title:r.title,bytes:r.bytes,sha256:r.sha256}}function qO(r,e){let t=Buffer.from(e,"utf8");if(t.byteLength!==r.bytes)throw new Error(`downloaded markdown bytes mismatch: ${r.path}`);if(_o(t)!==r.sha256)throw new Error(`downloaded markdown sha256 mismatch: ${r.path}`)}function $O(r,e){let t=Kr.posix.dirname(r),n=new Set;UP.lastIndex=0;let o;for(;(o=UP.exec(e))!==null;){let i=zO(t,HO(o[1]||o[2]||o[3]||""));i&&n.add(i)}return[...n].sort()}function HO(r){let e=r.trim();if(e.startsWith("<")){let t=e.indexOf(">");return t>0?e.slice(1,t):e}return e.split(/\s+/)[0]||""}function zO(r,e){if(!e||e.startsWith("#")||e.startsWith("//")||/^[a-z][a-z0-9+.-]*:/i.test(e))return;let t=e.split("#")[0].split("?")[0];if(!t||t.endsWith("/"))return;let n=t.startsWith("/")?Kr.posix.normalize(t.replace(/^\/+/,"")):Kr.posix.normalize(Kr.posix.join(r==="."?"":r,t));if(!n||n==="."||n.startsWith("../")||n==="..")return;let o=Kr.posix.extname(n).toLowerCase();if(!(!o||o===".md"))return At("/",n),n}function KO(r){return Kr.posix.join(ss,r)}function GO(r){return Kr.posix.join("metadata-examples/DEMO",r)}function cs(r,e){let t=new URL(r);return t.pathname=t.pathname.replace(/[^/]*$/,""),new URL(e.replace(/^\/+/,""),t).toString()}async function JO(r){try{return qP(await Vi.promises.readFile(r))}catch(e){if(x(e))return;throw e}}function qP(r){return{sha256:_o(r),bytes:r.byteLength}}function YO(r){if(!(typeof r.bytes!="number"||typeof r.sha256!="string"))return{bytes:r.bytes,sha256:r.sha256}}function vh(r,e){return r.sha256===e.sha256&&r.bytes===e.bytes}function ls(r){return JSON.stringify(r,null," ")+`
|
|
86
|
+
`}async function $P(r,e){let t=new AbortController,n=setTimeout(()=>{t.abort(new Error(`download timeout after ${WP}ms: ${r}`))},WP);try{return await fetch(r,{...e,signal:t.signal})}finally{clearTimeout(n)}}function XO(r){return Tn(r,rp,"SuccApp docs skill path")}function At(r,e){return Tn(r,e,"SuccApp docs skill file path")}var kh="succapp-docs-skill",HP="err.workspace.issue.E407",QO="agentDocsIndexUrl",ZO="agentDocsForce",e_=T("workspace.maintenance.agent-docs-skill.task"),cp=class{constructor(e=new ap){this.syncer=e}capabilities={taskId:kh,writeScopes:["init"],serverRequirement:"none"};async execute(e){let t=[Tn(e.workspace.root,rp,"SuccApp docs skill path")];try{let n=await this.syncer.sync(e.workspace.root,{indexUrl:this.readIndexUrl(e),apply:!e.dryRun,force:this.readForce(e),task:e.task});return n.added+n.changed+n.removed+n.resourcesAdded+n.resourcesChanged+n.resourcesRemoved+(n.metadataChanged?1:0)>0?[this.createIssue(t,e.dryRun?Rt():ht(),n)]:[this.createSkippedIssue(t,e.dryRun,"up-to-date",n)]}catch(n){return e_.warn(`sync SuccApp docs skill failed: ${e.workspace.root}`,n),[this.createSkippedIssue(t,e.dryRun,"agent-docs-unavailable")]}}readIndexUrl(e){let t=e.taskOptions?.[QO];return typeof t=="string"&&t.trim()?t.trim():void 0}readForce(e){return e.taskOptions?.[ZO]===!0}createIssue(e,t,n){return Dt({code:HP,taskId:kh,repairable:!0,level:"info",localPaths:e,properties:{item:"succapp-docs-skill",...sp(n)},execution:{...t,properties:sp(n)}})}createSkippedIssue(e,t,n,o){return Dt({code:HP,taskId:kh,repairable:!1,level:n==="up-to-date"?"info":"warning",localPaths:e,properties:{item:"succapp-docs-skill",...o?sp(o):{}},execution:{...Gn(t,n),properties:{skipCause:n,...o?sp(o):{}}}})}};function sp(r){return{docSet:r.docSet,generatedAt:r.generatedAt,updatedAt:r.updatedAt,total:r.total,added:r.added,changed:r.changed,removed:r.removed,skipped:r.skipped,unavailable:r.unavailable,resourcesAdded:r.resourcesAdded,resourcesChanged:r.resourcesChanged,resourcesRemoved:r.resourcesRemoved,resourcesSkipped:r.resourcesSkipped,resourcesUnavailable:r.resourcesUnavailable}}K();B();var ps="workspace-config",wh="err.workspace.issue.E201",t_="err.workspace.issue.E202",zP="err.workspace.issue.E203",r_="err.workspace.issue.E204",lp=class{capabilities={taskId:ps,writeScopes:["config"],serverRequirement:"none"};async execute(e,t){let n=t??await this.detectIssues(e);if(e.dryRun)return n.map(i=>this.withExecution(i,this.planIssue(i)));let o=[];for(let i of n)o.push(this.withExecution(i,await this.applyIssue(e,i)));return o}async detectIssues(e){await e.workspace.config.ensureLoaded();let t=e.workspace.config.get(),n=await ne(e.workspace.config.path);if(!t&&n)return[this.createInvalidJsonIssue(e.workspace.config.path)];if(!t)return[this.createMissingConfigIssue(e.workspace.config.path,e.server)];if(!e.server)return[];if(this.isEmptyServerConfig(t))return[this.createServerRequiredIssue(e.workspace.config.path,e.server)];let o=t.activeServerUrl||void 0;return!o||!$e(e.server,o)?[this.createServerMismatchIssue(e.workspace.config.path,e.server,o)]:[]}planIssue(e){return e.repairable?Rt():Hr(!0)}async applyIssue(e,t){return t.repairable?e.server&&(t.code===wh||t.code===zP)?(await e.workspace.config.initialize(e.server),ht()):t.code===wh?(await e.workspace.config.ensureFile(),ht()):Hr():Hr()}createMissingConfigIssue(e,t){return{code:wh,taskId:ps,repairable:!0,level:"warning",localPaths:[e],remotePaths:[],properties:this.removeUndefinedProperties({configPath:e,server:t})}}createInvalidJsonIssue(e){return{code:t_,taskId:ps,repairable:!1,level:"error",localPaths:[e],remotePaths:[],properties:{configPath:e}}}createServerRequiredIssue(e,t){return{code:zP,taskId:ps,repairable:!0,level:"warning",localPaths:[e],remotePaths:[],properties:{configPath:e,server:t}}}createServerMismatchIssue(e,t,n){return{code:r_,taskId:ps,repairable:!1,level:"error",localPaths:[e],remotePaths:[],properties:this.removeUndefinedProperties({configPath:e,server:t,activeServer:n})}}withExecution(e,t){return{...e,execution:t}}isEmptyServerConfig(e){return(e.servers?.length??0)===0&&!e.activeServerUrl}removeUndefinedProperties(e){let t={};for(let[n,o]of Object.entries(e))o!==void 0&&(t[n]=o);return t}};var GP=E(require("fs")),JP=E(require("path"));Ee();Et();K();B();var KP="workspace-agent-files",n_="err.workspace.issue.E403",o_="agent-workspace-template.jsonc",pp=class{capabilities={taskId:KP,writeScopes:["init"],serverRequirement:"none"};async execute(e){let t=await this.maintainTemplateTargets(e.workspace.root,!e.dryRun);return(e.dryRun?t.missingPaths.length>0:t.updated)?[this.createIssue(t.missingPaths,e.dryRun?Rt():ht())]:[]}async maintainTemplateTargets(e,t){let n=await this.readTemplateTargets(e),o=[],i=!1;for(let a of n.files)await ne(a.targetPath)||(o.push(a.targetPath),t&&(await pt(a.targetPath,await pn(a.relativePath)),i=!0));for(let a of n.directories)await ne(a.targetPath)||(o.push(a.targetPath),t&&(await GP.promises.mkdir(a.targetPath,{recursive:!0}),i=!0));return{missingPaths:o,updated:i}}async readManifest(){let e=await Do(o_);return{files:ts(e,"files"),directories:ts(e,"directories")}}async readTemplateTargets(e){let t=await this.readManifest();return{files:t.files.map(n=>this.toTemplateTarget(e,n)),directories:t.directories.map(n=>this.toTemplateTarget(e,n))}}toTemplateTarget(e,t){let n=i_(t);return{relativePath:n,targetPath:JP.join(e,...n.split("/"))}}createIssue(e,t){return Dt({code:n_,taskId:KP,repairable:!0,level:"info",localPaths:e,properties:{item:"agent-files"},execution:t})}};function i_(r){let e=Zr(r);return z(e,`Unsafe workspace template path: ${r}`),e}var Ph=E(require("path"));B();K();var YP="workspace-gitignore",a_="err.workspace.issue.E402",dp=class{capabilities={taskId:YP,writeScopes:["init"],serverRequirement:"none"};async execute(e){return await bP(e.workspace,{apply:!e.dryRun})?[this.createIssue(e,e.dryRun?Rt():ht())]:[]}createIssue(e,t){return Dt({code:a_,taskId:YP,repairable:!0,level:"info",localPaths:s_(e.workspace.root),properties:{item:"gitignore"},execution:t})}};function s_(r){return[Ph.join(r,Ao),Ph.join(cr(r),Ao)]}var QP=E(require("path"));Et();re();K();B();var XP="workspace-settings",c_="err.workspace.issue.E401",l_=QP.posix.join(".vscode","settings.recommended.jsonc"),up=class{capabilities={taskId:XP,writeScopes:["init"],serverRequirement:"none"};async execute(e){return await this.updateRecommendedSettings(e.workspace.root,!e.dryRun)?[this.createIssue(e,e.dryRun?Rt():ht())]:[]}async updateRecommendedSettings(e,t){let n=Qr(e),o=await ke(n),i=at(o,{...vr,filePath:n,ignoreParseError:!0});if(!i)return!1;let a=await Do(l_),s=Yr(o);return s=p_(s,i,a),s===Yr(o)?!1:(t&&await pt(n,s),!0)}createIssue(e,t){return Dt({code:c_,taskId:XP,repairable:!0,level:"info",localPaths:[Qr(e.workspace.root)],properties:{item:"workspace-settings"},execution:t})}};function p_(r,e,t){let n=r;for(let[o,i]of Object.entries(t)){if(q(i)){n=u_(n,e,o,i);continue}if(Array.isArray(i)){n=h_(n,e,o,i);continue}e[o]===void 0&&(n=Kt(n,[o],i))}return n}function d_(r,e){return Object.entries(e).filter(([t])=>r[t]===void 0)}function u_(r,e,t,n){let o=m_(e,t),i=d_(o,n);if(i.length===0)return r;let a=r;if(e[t]!==void 0&&!q(e[t]))return Kt(a,[t],{...o,...Object.fromEntries(i)});for(let[s,c]of i)a=Kt(a,[t,s],c);return a}function m_(r,e){return q(r[e])?r[e]:{}}function h_(r,e,t,n){let o=Array.isArray(e[t])?e[t]:[],i=n.filter(a=>!f_(o,a));return i.length===0?r:Kt(r,[t],[...o,...i])}function f_(r,e){return r.some(t=>rr(t,e))}var qi=class{tasks=new Map;constructor(){this.register(new lp),this.register(new up),this.register(new dp),this.register(new pp),this.register(new ji),this.register(new Wi),this.register(new cp),this.register(new tp)}getTask(e){return this.tasks.get(e)}register(e){this.tasks.set(e.capabilities.taskId,e)}};var $i=T("workspace.maintenance"),mp=class{constructor(e,t,n){this.workspace=e;this.request=t;this.activeServerUrl=n}registry=new qi;async run(){let e=[],t=this.request.taskIds,n=new Set(this.request.explicitTaskIds??[]);$i.info("workspace maintenance run start: dryRun={0} tasks={1} workspace={2} server={3}",this.request.dryRun===!0,t.join(","),this.workspace.root,this.activeServerUrl??"");let o=this.request.task??Xe.INSTANCE;for(let a=0;a<t.length;a++){let s=t[a],c=d("workspace.maintenance.progress.checking",this.getTaskName(s),a+1,t.length);o.start(100,{message:c,retainOnFinish:!0});let l=new Rh(o.subTaskMonitor(1),c),p=this.registry.getTask(s),u;if(!p)u=[this.createUnsupportedTaskIssue(s)],$i.warn("workspace maintenance task skipped: task={0} reason=notImplemented",s);else if(p.capabilities.serverRequirement==="required"&&!this.activeServerUrl)u=[this.createMissingServerIssue(p,n.has(s))],$i.info("workspace maintenance task skipped: task={0} reason=noActiveServer",s);else{$i.info("workspace maintenance task start: task={0}",s);let g=this.request.issues?this.request.issues.filter(m=>m.taskId===s):void 0;u=await p.execute({workspace:this.workspace,dryRun:this.request.dryRun===!0,explicit:n.has(s),server:this.request.server,activeServerUrl:this.activeServerUrl,targetRemotePaths:this.request.targetRemotePaths,taskOptions:this.request.taskOptions,task:l},g),$i.info("workspace maintenance task done: task={0} issues={1}",s,u.length)}e.push(...u),l.finish(),o.setMessage(this.renderProgressFinishMessage(s,u)),o.finish()}let i=this.createReport(e);return $i.info("workspace maintenance run done: dryRun={0} issues={1} planned={2} applied={3} blocked={4} failed={5}",i.dryRun,i.summary.issues,i.summary.planned,i.summary.applied,i.summary.blocked,i.summary.failed),i}createUnsupportedTaskIssue(e){return{code:"err.workspace.issue.E206",taskId:e,repairable:!1,level:"info",localPaths:[],remotePaths:[],properties:{},execution:{status:"skipped",dryRun:this.request.dryRun===!0}}}createMissingServerIssue(e,t){let n=e.capabilities.taskId,o=this.request.dryRun===!0,i="no-active-server";return{code:"err.workspace.issue.E205",taskId:n,repairable:!1,level:t?"warning":"info",localPaths:[],remotePaths:[],properties:{skipCause:i},execution:t?Hr(o):Gn(o,i)}}renderProgressFinishMessage(e,t){let n=this.getTaskName(e);return t.length===0?d("workspace.maintenance.progress.upToDate",n):t.some(o=>o.execution?.status==="failed")?d("workspace.maintenance.progress.failed",n):t.some(o=>o.execution?.status==="blocked")?d("workspace.maintenance.progress.blocked",n):t.some(o=>o.execution?.status==="applied")?d("workspace.maintenance.progress.updated",n):t.every(o=>o.execution?.status==="skipped")?d("workspace.maintenance.progress.skipped",n,this.getSkipCause(t)):d("workspace.maintenance.progress.checked",n)}getSkipCause(e){for(let t of e){let n=t.execution?.properties?.skipCause??t.properties?.skipCause;if(typeof n=="string")return n}return d("workspace.maintenance.progress.skipReason")}getTaskName(e){return d(`workspace.maint.task.${e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}`)}createReport(e){let t=0,n=0,o=0,i=0,a=0,s=0;for(let c of e){c.repairable&&t++;let l=c.execution;if(l)switch(l.status){case"planned":n++;break;case"applied":o++;break;case"skipped":i++;break;case"blocked":a++;break;case"failed":s++;break}}return{workspaceRootPath:this.workspace.root,dryRun:this.request.dryRun===!0,serverUrl:this.activeServerUrl,requestedTaskIds:this.request.taskIds,summary:{issues:e.length,repairable:t,planned:n,applied:o,skipped:i,blocked:a,failed:s},issues:e}}},Rh=class r extends Ds{constructor(t,n){super(t);this.prefix=n}start(t,n){this.delegate.start(t,{...n,message:this.withPrefix(n?.message)})}setMessage(t){this.delegate.setMessage(this.withPrefix(t))}subTaskMonitor(t){return new r(this.delegate.subTaskMonitor(t),this.prefix)}withPrefix(t){return t?`${this.prefix}: ${t}`:this.prefix}};var hp=class{constructor(e){this.workspace=e}registry=new qi;async run(e){await this.workspace.ensureConfigLoaded();let t=this.workspace.activeServerUrl||void 0;if(e.dryRun===!0)return this.createRunner(e,t).run();let n=this.resolveWriteScopes(e);if(n.length===0)return this.createRunner(e,t).run();let o=e.task&&e.task!==Xe.INSTANCE?e.task:new vn;return this.workspace.lockManager.withLock({scopes:n,command:"workspace-maintenance",wait:this.workspace.lockWait},async i=>(o.setAbortSignal(Is(o.getAbortSignal(),i)),this.createRunner({...e,task:o},t).run()))}createRunner(e,t){return new mp(this.workspace,e,t)}resolveWriteScopes(e){let t=new Set;for(let n of e.taskIds){let o=this.registry.getTask(n);if(o)for(let i of o.capabilities.writeScopes)t.add(i)}return Array.from(t)}};D();Na();var g_=/^\d+\.\d+\.\d+$/;async function eR(r,e){let t=ZP(e.version);if(!t)return{downgrades:[]};let n=ZP(r),o=rl(t,n);if(o===-1&&n){let i=[{kind:"server",currentVersion:t,baselineVersion:n}];return{downgrades:i,warningMessage:y_(i)}}return!n||o===void 0||o>0?{downgrades:[],newBaselineVersion:t}:{downgrades:[]}}function ZP(r){let e=La(r);if(e)return g_.test(e)?e:void 0}function y_(r){if(r.length===0)return;let e=r.map(t=>d("workspace.compat.serverVersion",t.currentVersion,t.baselineVersion));return[d("workspace.compat.connectedServerAppears"),...e].join(`
|
|
87
|
+
`)}var Ih=E(require("fs")),Dh=E(require("path")),pR=E(lR());K();Y();F();var W_=T("workspace.gitignore"),U_=".gitignore",j_=new Set([".git",".succapp","node_modules"]),Cp=class{constructor(e){this.workspaceRoot=e}matchers=[];async refresh(){let e=[];await this.collectIgnoreMatchers(this.workspaceRoot,"",e),this.matchers=e}matches(e){let t=Me(e),n=!1;for(let[o,i]of this.matchers.entries()){if(this.isMatcherBaseIgnored(i,o))continue;let a=this.getScopedIgnoreDecision(i,t);a!==void 0&&(n=a)}return n}async collectIgnoreMatchers(e,t,n){let o;try{o=await Ih.promises.readdir(e,{withFileTypes:!0})}catch(a){if(x(a)){W_.debug(`skip unreadable gitignore directory: ${e}`);return}throw a}await this.addDirectoryGitIgnore(e,t,n);let i=o.filter(a=>a.isDirectory()&&!j_.has(a.name)).sort((a,s)=>a.name.localeCompare(s.name));for(let a of i){let s=t?`${t}/${a.name}`:a.name;await this.collectIgnoreMatchers(Dh.join(e,a.name),s,n)}}async addDirectoryGitIgnore(e,t,n){let o=Dh.join(e,U_),i;try{i=await Ih.promises.readFile(o,"utf-8")}catch(a){if(x(a))return;throw a}n.push({baseRelativePath:t,matcher:(0,pR.default)({allowRelativePaths:!0}).add(i)})}getScopedIgnoreDecision(e,t){let n=this.toScopedRelativePath(e.baseRelativePath,t);if(n===void 0||n==="")return;let o=this.testIgnore(e,n);if(o.ignored)return!0;if(o.unignored)return!1}testIgnore(e,t){let n=e.matcher.test(t);return n.ignored||n.unignored||t.endsWith("/")?n:e.matcher.test(`${t}/`)}isMatcherBaseIgnored(e,t){if(!e.baseRelativePath)return!1;let n=!1;for(let o=0;o<t;o++){let i=this.getScopedIgnoreDecision(this.matchers[o],e.baseRelativePath);i!==void 0&&(n=i)}return n}toScopedRelativePath(e,t){if(!e)return t;if(t===e)return"";let n=e+"/";if(t.startsWith(n))return t.slice(n.length)}};var qe=E(require("fs")),gR=E(require("os")),Sp=E(require("path")),yR=E(Ad());Y();Ee();F();function CR(r){return new Ah(r)}var B_=10*6e4,V_=".lock.json",q_=".lock",dR=1,ft=T("workspace.lock"),Ah=class{root;identity;staleMs;locksDir;hostname;eventBus;listeners=new Set;activeLocks=new Set;eventListenerSubscription;lockWatcher;lockWatcherRequested=!1;lockWatchRefreshTimer;observedScopeHeld=new Map;nextLockId=1;disposed=!1;constructor(e){this.root=e.root,this.identity=e.identity??Wo(),this.staleMs=e.staleMs??B_,this.locksDir=Sp.join(this.root,".succapp","locks"),this.hostname=gR.hostname(),this.eventBus=e.eventBus,this.eventBus&&(this.eventListenerSubscription=this.eventBus.on("event.listener.changed",t=>{t.payload.id==="workspace.lock.changed"&&(t.payload.hasListeners?this.startLockWatcher():this.stopLockWatcher())}))}async withLock(e,t){z(!this.disposed,"WorkspaceLockManager has been disposed"),z(e.scopes&&e.scopes.length>0,"LockRequest.scopes must not be empty"),await qe.promises.mkdir(this.locksDir,{recursive:!0});let n=[...new Set(e.scopes)].sort(),o=new AbortController,i=this.nextLockId++,a={id:i,ownerId:`${process.pid}-${Date.now()}-${i}`,request:e,acquired:[],abortController:o,heartbeatTimer:void 0,heartbeatInFlight:void 0,releasing:!1};try{await this.acquireAllScopes(a,n)}catch(c){throw await this.releaseAllScopes(a),c}this.activeLocks.add(a);let s=this.buildHolders(a,n);try{for(let[c,l]of s)await this.writeHolderAtomic(this.holderPathFor(c),l)}catch(c){throw this.activeLocks.delete(a),await this.deleteAllHolders(a),await this.releaseAllScopes(a),c}this.startHeartbeat(a);for(let c of a.acquired)this.emitHolderChanged({scope:c.scope,holder:s.get(c.scope),reason:"acquired"});try{let c=await t(o.signal);if(hR(a))throw new Gr(e.command);return c}catch(c){throw hR(a)&&!(c instanceof Gr)?new Gr(e.command,{cause:c}):c}finally{a.releasing=!0,this.stopHeartbeat(a),await this.waitForHeartbeat(a),await this.deleteAllHolders(a),await this.releaseAllScopes(a),this.activeLocks.delete(a);for(let c of a.acquired)c.compromised||this.emitHolderChanged({scope:c.scope,holder:void 0,reason:"released"})}}async peekHolder(e){let t=this.holderPathFor(e),n;try{n=await qe.promises.readFile(t,"utf-8")}catch(i){if(x(i))return;ft.debug(`peekHolder failed for ${e}`,i);return}let o=this.parseHolderJson(n,e);if(o)try{let i=await qe.promises.stat(t);return{...o,lastHeartbeat:new Date(i.mtimeMs).toISOString()}}catch(i){return x(i)||ft.debug(`peekHolder stat failed for ${e}`,i),o}}async peekHolders(e=Ni){let t=await Promise.all(e.map(async n=>{let o=await this.peekHolder(n);return[n,o]}));return new Map(t)}async isHeldLock(e){return this.isHeldLocally(e)?!0:!!await this.peekHolder(e)}isHeldLocally(e){for(let t of this.activeLocks)if(t.acquired.some(n=>n.scope===e&&!n.compromised))return!0;return!1}onHolderChanged(e){return this.listeners.add(e),{dispose:()=>{this.listeners.delete(e)}}}dispose(){if(!this.disposed){this.disposed=!0,this.eventListenerSubscription?.dispose(),this.eventListenerSubscription=void 0,this.stopLockWatcher();for(let e of[...this.activeLocks])e.releasing=!0,this.stopHeartbeat(e),e.abortController.abort("lock-manager-disposed"),(async()=>{await this.waitForHeartbeat(e),await this.deleteAllHolders(e),await this.releaseAllScopes(e)})().catch(t=>{ft.debug("cleanup lock resources on dispose failed",t)});this.activeLocks.clear(),this.listeners.clear()}}async acquireAllScopes(e,t){for(let n of t){let o=await this.acquireSingleScope(e,n,t);e.acquired.push(o)}}async acquireSingleScope(e,t,n){let o=Date.now()+$_(e.request.wait),i;for(;;){let a=await this.findBlockingExistingLock(t);if(a.blocked){if(i=a.holder,!uR(o))throw new ro(e.request.command,n,t,fR(i));await mR(o);continue}try{let s=await yR.lock(this.lockfilePathFor(t),{lockfilePath:this.lockfilePathFor(t),realpath:!1,stale:this.staleMs,retries:0,onCompromised:c=>this.onScopeCompromised(e,t,c)});return{scope:t,lockfilePath:this.lockfilePathFor(t),holderPath:this.holderPathFor(t),release:s,compromised:!1}}catch(s){if(!Ts(s))throw s;if(i=await this.peekHolder(t),uR(o)){await mR(o);continue}throw new ro(e.request.command,n,t,fR(i))}}}async findBlockingExistingLock(e){try{await qe.promises.stat(this.lockfilePathFor(e))}catch(n){if(x(n))return{blocked:!1};throw n}let t=await this.peekHolder(e);return await this.tryClearStaleLock(e,t)?{blocked:!1}:{blocked:!0,holder:t}}async tryClearStaleLock(e,t){return t?t.hostname!==this.hostname||this.isProcessAlive(t.pid)||!await this.isLockDirStale(e)?!1:(ft.info(`auto-clear stale lock scope=${e} pid=${t.pid} command=${t.command}`),this.removeLockFiles(e,t)):this.tryClearOrphanedLockDir(e)}async tryClearOrphanedLockDir(e){if(!await this.isLockDirStale(e))return!1;let t=this.lockfilePathFor(e),n=`${t}.stale-${process.pid}-${Date.now()}`;try{await qe.promises.rename(t,n)}catch(o){if(x(o))return!1;throw o}return ft.info(`auto-clear orphan lock dir scope=${e}`),await qe.promises.rm(n,{recursive:!0,force:!0}).catch(o=>{ft.debug(`delete orphan lock tombstone ${e} failed`,o)}),!0}async releaseAllScopes(e){for(let t of[...e.acquired].reverse())if(!t.compromised)try{await t.release()}catch(n){ft.warn(`release scope ${t.scope} failed`,n)}}buildHolders(e,t){let n=new Date().toISOString(),o=e.request.source??this.identity.source,i=new Map;for(let a of t)i.set(a,{version:dR,ownerId:e.ownerId,pid:process.pid,hostname:this.hostname,source:o,command:e.request.command,scope:a,alsoHolds:t.filter(s=>s!==a),startTime:n,lastHeartbeat:n,agentVersion:this.identity.agentVersion});return i}async deleteAllHolders(e){for(let t of e.acquired)try{let n=await this.peekHolder(t.scope);if(!n||n.ownerId!==e.ownerId)continue;await qe.promises.unlink(t.holderPath)}catch(n){if(x(n))continue;ft.debug(`delete holder json ${t.scope} failed`,n)}}startHeartbeat(e){let t=Math.max(1e3,Math.floor(this.staleMs/2)),n=setInterval(()=>{this.scheduleHeartbeat(e)},t);n.unref?.(),e.heartbeatTimer=n}stopHeartbeat(e){e.heartbeatTimer&&(clearInterval(e.heartbeatTimer),e.heartbeatTimer=void 0)}scheduleHeartbeat(e){if(e.releasing||e.heartbeatInFlight)return;let t=this.refreshHeartbeat(e).finally(()=>{e.heartbeatInFlight===t&&(e.heartbeatInFlight=void 0)});e.heartbeatInFlight=t}async waitForHeartbeat(e){e.heartbeatInFlight&&await e.heartbeatInFlight}async refreshHeartbeat(e){let t=new Date;for(let n of e.acquired)if(!(e.releasing||n.compromised))try{await qe.promises.utimes(n.holderPath,t,t)}catch(o){if(x(o))continue;ft.debug(`heartbeat refresh failed for ${n.scope}`,o)}}onScopeCompromised(e,t,n){ft.warn(`lock scope ${t} compromised during ${e.request.command}`,n);let o=e.acquired.find(a=>a.scope===t),i=o?.compromised??!1;o&&(o.compromised=!0),e.abortController.signal.aborted||e.abortController.abort(new Gr(e.request.command)),i||this.emitHolderChanged({scope:t,holder:void 0,reason:"compromised"})}async writeHolderAtomic(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;await qe.promises.writeFile(n,JSON.stringify(t,null,2),"utf-8");try{await qe.promises.rename(n,e)}catch(o){throw await qe.promises.unlink(n).catch(()=>{}),o}}parseHolderJson(e,t){try{let n=JSON.parse(e);return typeof n.pid!="number"||typeof n.hostname!="string"||typeof n.command!="string"||typeof n.source!="string"||!z_(n.source)||typeof n.ownerId!="string"||n.ownerId.length===0||typeof n.startTime!="string"?void 0:{version:dR,ownerId:n.ownerId,pid:n.pid,hostname:n.hostname,source:n.source,command:n.command,scope:n.scope??t,alsoHolds:Array.isArray(n.alsoHolds)?[...n.alsoHolds]:[],startTime:n.startTime,lastHeartbeat:typeof n.lastHeartbeat=="string"&&n.lastHeartbeat.length>0?n.lastHeartbeat:n.startTime,agentVersion:typeof n.agentVersion=="string"?n.agentVersion:""}}catch(n){ft.debug(`parse holder json for ${t} failed`,n);return}}async isLockDirStale(e){try{return(await qe.promises.stat(this.lockfilePathFor(e))).mtimeMs<Date.now()-this.staleMs}catch(t){if(x(t))return!1;throw t}}async removeLockFiles(e,t){let n=this.lockfilePathFor(e),o=this.holderPathFor(e);if(!await this.isLockDirStale(e))return!1;let i=`${n}.stale-${process.pid}-${Date.now()}`;try{await qe.promises.rename(n,i)}catch(s){if(x(s))return!1;throw s}let a=!1;try{let s=await this.peekHolder(e);return K_(s,t)?(await qe.promises.unlink(o).catch(c=>{if(!x(c))throw c}),!0):(a=await this.restoreTombstoneLock(e,i),!1)}finally{a||await qe.promises.rm(i,{recursive:!0,force:!0}).catch(s=>{ft.debug(`delete stale lock tombstone ${e} failed`,s)})}}async restoreTombstoneLock(e,t){let n=this.lockfilePathFor(e);try{return await qe.promises.rename(t,n),!0}catch(o){return x(o)||ft.debug(`restore stale lock tombstone ${e} failed`,o),!1}}isProcessAlive(e){if(e<=0||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}emitHolderChanged(e){for(let t of[...this.listeners])try{t(e)}catch(n){ft.warn(`holder changed listener threw for ${e.scope}`,n)}this.fireWorkspaceLockChanged(e.scope,e.reason==="acquired",e.holder)}startLockWatcher(){this.lockWatcherRequested=!0,!(this.disposed||this.lockWatcher)&&qe.promises.mkdir(this.locksDir,{recursive:!0}).then(()=>{this.disposed||!this.lockWatcherRequested||this.lockWatcher||(this.lockWatcher=qe.watch(this.locksDir,()=>{this.scheduleLockStateRefresh()}),this.lockWatcher.on("error",e=>{ft.debug(`workspace lock watcher failed: ${this.root}`,e),this.closeLockWatcher(),this.scheduleLockWatcherRestart()}),this.scheduleLockStateRefresh(0))}).catch(e=>{ft.debug(`start workspace lock watcher failed: ${this.root}`,e)})}stopLockWatcher(){this.lockWatcherRequested=!1,this.closeLockWatcher(),this.observedScopeHeld.clear()}closeLockWatcher(){this.lockWatchRefreshTimer&&(clearTimeout(this.lockWatchRefreshTimer),this.lockWatchRefreshTimer=void 0),this.lockWatcher&&(this.lockWatcher.close(),this.lockWatcher=void 0)}scheduleLockWatcherRestart(){if(!this.lockWatcherRequested||this.disposed)return;setTimeout(()=>this.startLockWatcher(),1e3).unref?.(),this.observedScopeHeld.clear()}scheduleLockStateRefresh(e=25){this.lockWatchRefreshTimer&&clearTimeout(this.lockWatchRefreshTimer),this.lockWatchRefreshTimer=setTimeout(()=>{this.lockWatchRefreshTimer=void 0,this.refreshObservedLockStates()},e),this.lockWatchRefreshTimer.unref?.()}async refreshObservedLockStates(){if(!(this.disposed||!this.lockWatcher))for(let e of Ni)await this.refreshObservedLockState(e)}async refreshObservedLockState(e){if(this.isHeldLocally(e))return;let t=await this.peekHolder(e);if((t?!0:await this.lockFileExists(e))&&!t){this.scheduleLockStateRefresh(50);return}let o=!!t,i=this.observedScopeHeld.get(e);if(i===void 0&&!o){this.observedScopeHeld.set(e,!1);return}i!==o&&this.fireWorkspaceLockChanged(e,o,t)}async lockFileExists(e){try{return await qe.promises.stat(this.lockfilePathFor(e)),!0}catch(t){return x(t)||ft.debug(`stat lock file failed for ${e}`,t),!1}}fireWorkspaceLockChanged(e,t,n){this.observedScopeHeld.set(e,t),this.eventBus?.fire(new Ye("workspace.lock.changed",{root:this.root,scope:e,held:t,holder:n},this))}lockfilePathFor(e){return Sp.join(this.locksDir,`${e}${q_}`)}holderPathFor(e){return Sp.join(this.locksDir,`${e}${V_}`)}};function $_(r){return!r||r<=0?0:r*1e3}function uR(r){return Date.now()<r}async function mR(r){let e=Math.max(0,Math.min(500,r-Date.now()));e>0&&await new Promise(t=>setTimeout(t,e))}var H_=new Set(Object.values(Yi));function z_(r){return H_.has(r)}function hR(r){return r.acquired.some(e=>e.compromised)}function K_(r,e){return r?.ownerId===e.ownerId}function fR(r){if(r)return{pid:r.pid,hostname:r.hostname,source:r.source,command:r.command,scope:r.scope,alsoHolds:r.alsoHolds,startTime:r.startTime,lastHeartbeat:r.lastHeartbeat,agentVersion:r.agentVersion}}var vp=E(require("fs")),SR=E(require("path"));F();D();Y();K();var Oh=T("workspace.connection"),Ki=class{constructor(e){this.workspace=e}async change(e,t,n){return await this.workspace.ensureConfigLoaded(),this.workspace.lockManager.withLock({scopes:["config","sync"],command:"change-server-url",wait:this.workspace.lockWait},()=>this.doChange(e,t,n))}async connect(e,t){await this.workspace.ensureConfigLoaded();let n=this.workspace.config.resolveServerUrl(e);if(!n)throw new Error(`server not configured: ${e}`);if(t){let c=await this.withAuthContext(n,()=>ic(n,t)),l=await this.withAuthContext(n,()=>this.createVerifiedCredentialConnection(n,c));return await this.storeVerifiedConnectionCredential(n,c,l.client),await this.setActiveServerUrlForConnection(n),{serverUrl:n,connection:l}}if(!await go(n))throw new Le({workspaceRoot:this.workspace.root,serverUrl:n});let i=this.createServerClient(n);await i.verify();let a=await i.getServerInfo();Oh.info(`session restored: ${n}`);let s={serverUrl:n,connection:{client:i,serverInfo:a}};return await this.setActiveServerUrlForConnection(n),s}async doChange(e,t,n){let o=this.workspace.config.resolveServerUrl(e);if(!o)throw new Error(d("workspace.server.serverNotConfigured",e));let i=this.workspace.config.validateServerUrlChange(o,t),a=n?await this.withAuthContext(i,()=>ic(i,n)):void 0,s=a?await this.withAuthContext(i,()=>this.createVerifiedCredentialConnection(i,a)):void 0,c=kr(o),l=kr(i),p=this.workspace.getMirrorRoot(o),u=this.workspace.getMirrorRoot(i),g=!1,m=!1,f="";try{if(c!==l&&await ne(p)){if(await ne(u))throw new Error(d("workspace.server.serverMirrorExists",u));await vp.promises.mkdir(SR.dirname(u),{recursive:!0}),await vp.promises.rename(p,u),g=!0}return f=await this.workspace.config.changeServerUrl(o,i),m=!0,a&&s&&await this.storeVerifiedConnectionCredential(f,a,s.client),{oldServerUrl:o,serverUrl:f,connection:s}}catch(y){throw await this.rollbackServerUrlChange({configChanged:m,changedServerUrl:f,oldConfiguredServerUrl:o,mirrorMoved:g,oldMirrorRoot:p,newMirrorRoot:u}),y}}async rollbackServerUrlChange(e){if(e.configChanged)try{await this.workspace.config.changeServerUrl(e.changedServerUrl,e.oldConfiguredServerUrl)}catch(t){Oh.warn(`rollback server config failed: ${e.changedServerUrl} -> ${e.oldConfiguredServerUrl}`,t)}if(e.mirrorMoved)try{await vp.promises.rename(e.newMirrorRoot,e.oldMirrorRoot)}catch(t){Oh.warn(`rollback server mirror failed: ${e.newMirrorRoot} -> ${e.oldMirrorRoot}`,t)}}async setActiveServerUrlForConnection(e){await this.workspace.lockManager.withLock({scopes:["config","sync"],command:"switch-active-server",wait:this.workspace.lockWait},async()=>{await this.workspace.config.setActiveServerUrl(e)})}async withAuthContext(e,t){try{return await t()}catch(n){throw n instanceof Le&&n.withContext({workspaceRoot:this.workspace.root,serverUrl:e}),n}}async createVerifiedCredentialConnection(e,t){let n=this.createServerClient(e,{initialCredential:t});await n.verify();let o=await n.getServerInfo();return{client:n,serverInfo:o}}async storeVerifiedConnectionCredential(e,t,n){await zd(e,t)}createServerClient(e,t={}){return new Lr(e,{workspaceRoot:this.workspace.root,...t})}};var Bt=T("workspace"),G_=6e4,_h=class{constructor(e,t,n,o=Ka){this.root=e;this.eventBus=t;this.lockWait=o;this.connectedServerUrl=n?.connected?n.serverUrl:void 0,this.config=new Ll(e,t,Lm()),this.gitIgnore=new Cp(e),this.lockManager=CR({root:e,eventBus:t}),this.disposables.add(this.lockManager),this.syncStatusTracker=new Gl(this),this.disposables.add(this.eventBus.on("workspace.config.changed",i=>{i.payload.root===this.root&&this.onConfigChanged()})),this.startAutoSyncScheduler()}disposables=new Kn;config;connectedServerUrl;syncStatusTracker;gitIgnore;lockManager;fileChangeRefresh;metadataVersionCatalog=yo.empty();metadataVersionCatalogLoaded=!1;initialized=!1;connectionInitializing=!1;autoSyncScheduler=null;startAutoSyncScheduler(){if(Wo().source!=="ide")return;let e={onAutoPush:async()=>{let n=this.syncStatusTracker.getLocalChanges();if(n.length===0||await this.shouldYieldAutoSync())return;await this.createSyncService({agentSource:"auto-sync"}).push({changes:n})},onAutoPull:async()=>{if(await this.shouldYieldAutoSync())return;await this.createSyncService({agentSource:"auto-sync"}).pull()}},t=new Nl(this.root,this.eventBus,e);this.autoSyncScheduler=t,this.disposables.add(this.eventBus.on("settings.changed",n=>{n.payload.changedKeys.some(o=>o==="sync.autoPush"||o==="sync.autoPull"||o==="sync.autoPullInterval")&&this.autoSyncScheduler?.refreshAutoSync()})),this.disposables.add(t),t.startAutoPull()}get activeServerUrl(){return this.connectedServerUrl??this.config.getActiveServerUrl()}get isConnected(){return this.connectedServerUrl!==void 0}async ensureConfigLoaded(){await this.config.ensureLoaded()}async ensureActiveServerReady(){await this.ensureConfigLoaded();let e=this.activeServerUrl;if(!e)throw new gt(e);return e}async requireClient(){return this.requireServerClient()}async requireServerClient(e){await this.ensureConfigLoaded();let t=e??this.config.getActiveServerUrl();if(!t)throw new gt(t);let n=this.resolveConfiguredServerUrl(t),o=await this.createDetachedClient(n);return e===void 0&&(this.connectedServerUrl=o.serverUrl,this.updateConnectionStatus()),this.createDiagnosticClient(o)}async ensureMetadataVersionCatalogLoaded(){this.metadataVersionCatalogLoaded||await Cr(this,"metadataVersionCatalog",async()=>{this.metadataVersionCatalogLoaded||(this.metadataVersionCatalog=await(await this.requireServerClient()).getMetadataVersions(),this.metadataVersionCatalogLoaded=!0)})}async resolveRemoteFilePath(e){let t=await this.resolveRemoteFilePathServerUrl(e.serverUrl),n=e.serverUrl?await this.requireServerClient(t):await this.requireServerClient(),o=await this.resolveWorkspaceRemoteFilePath(e.path,t,n);return{path:e.path,remotePath:o,serverUrl:t}}async resolveRemoteFilePathServerUrl(e){return e?(await this.ensureConfigLoaded(),this.resolveConfiguredServerUrl(e)):this.ensureActiveServerReady()}async resolveWorkspaceRemoteFilePath(e,t,n){let o=new kt(this.getMirrorRoot(t));return new xi({workspaceRoot:this.root,mirror:o,workspace:new ur(this.root,o),getServerProjects:()=>n.getProjects()}).resolve(e,"server-backed")}disconnectServers(...e){let t=new Set(e.map(n=>kr(n)));this.connectedServerUrl&&t.has(kr(this.connectedServerUrl))&&(this.connectedServerUrl=void 0)}applyServerConnection(e,t={}){this.connectedServerUrl=e.client.serverUrl,this.updateMetadataVersions(e.serverInfo),this.updateConnectionStatus(),this.refreshSyncStatusAfterConnection(t),t.refreshWorkspaceSupport!==!1&&this.refreshWorkspaceSupportIfNeeded(e.serverInfo)}createDiagnosticClient(e){return ak(e)}async createDetachedClient(e){if(await this.ensureConfigLoaded(),!this.config.hasServer(e))throw new gt(e);let t=new Lr(e,{workspaceRoot:this.root});if(await t.verify(),!this.config.hasServer(e))throw new gt(e);return t}resolveConfiguredServerUrl(e){let t=this.config.resolveServerUrl(e);if(!t)throw new gt(e);return t}async listWorkspaceProjects(){await this.ensureConfigLoaded();let e=new ur(this.root,this.createWorkspaceListingMirror());return this.toProjectNames(await e.listProjectPaths())}async listBaselineProjects(e){await this.ensureConfigLoaded();let t=e??this.activeServerUrl;if(!t)return[];let n=new kt(this.getMirrorRoot(t));return this.toProjectNames(await n.listProjectPaths())}getMetaProjectLocalPath(e){let t=e.trim();if(!t||t.includes("/")||t.includes("\\"))throw new Error(`invalid metadata project name: ${e}`);return this.getMetaFileLocalPath("/"+t)}getMetaFileLocalPath(e){return sC(this.root,e)}async countWorkspaceFiles(e,t){return await this.ensureConfigLoaded(),new ur(this.root,this.createWorkspaceListingMirror()).countFiles(e,t)}async startIdeRuntime(){this.initialized||await Cr(this,"startIdeRuntime",async()=>{await this.doStartIdeRuntime(),this.initialized=!0})}async waitInitialized(){this.initialized||await yd(this,"startIdeRuntime")?.catch(()=>{})}async doStartIdeRuntime(){let e=!1;this.connectionInitializing=!0;try{await this.config.load(),this.syncStatusTracker.startBackgroundRemoteDiscovery({intervalMs:G_}),this.fireConnectionStateChanged(!0),await this.refreshGitIgnore(),this.initializeFileWatcher(),await this.tryAutoConnect({refreshSyncStatus:!1}),e=!0}finally{this.connectionInitializing=!1,this.fireConnectionStateChanged()}e&&this.refreshSyncStatus().catch(t=>{Bt.warn(`refresh sync status after IDE runtime start failed: ${this.root}`,t)})}applySyncOperationResult(e,t=[]){this.syncStatusTracker.applyOperationResult(e,t)}applyFileWatchSyncStatus(e,t){this.syncStatusTracker.applyFileWatchResult(e,t)}clearSyncStatus(){this.syncStatusTracker.clear()}async refreshSyncStatus(e){await this.refreshSyncStatusState({task:e})}async refreshSyncStatusState(e={}){await this.ensureConfigLoaded();let t=["refreshSyncStatus",e.scope??"both",e.forceRefresh===!0?"force":"normal"].join(":"),n=e.task,o=!!yd(this,t),i=Cr(this,t,()=>(Bt.info("refresh sync status start: {0}",this.root),this.onSyncStatusRefreshing(),this.syncStatusTracker.refreshAll(e)));o&&n&&n.start(1,{message:d("workspace.sync.progress.refresh.running")});let a=await i;return n&&o&&n.step(1),o||Bt.info("refresh sync status done: {0}",this.root),a}getSyncChanges(){return this.syncStatusTracker.getChanges()}getSyncSummary(){return this.syncStatusTracker.getSummary()}refreshGitIgnore(){return this.gitIgnore.refresh()}isGitIgnored(e){return this.gitIgnore.matches(e)}getSyncStatusTracker(){return this.syncStatusTracker}async consumeFileChanges(e,t={}){if(e.some(o=>{if(Fr.basename(o.filePath)!==".gitignore")return!1;let i=Fr.relative(this.root,Fr.resolve(o.filePath));return!!i&&!i.startsWith("..")&&!Fr.isAbsolute(i)})){await this.refreshGitIgnore(),await this.refreshSyncStatus();return}return this.syncStatusTracker.consumeFileChanges(e,t)}clearSyncStatusTargets(e){this.syncStatusTracker.clearTargets(e)}notifySyncStatusChanged(){this.fireSyncStatusChanged()}initializeFileWatcher(){if(this.fileChangeRefresh)return;let e=Lm();e&&(this.fileChangeRefresh=new Jl(this,this.eventBus,e,{},this.lockManager))}cancelPendingSyncStatusRefresh(){this.fileChangeRefresh?.cancelPendingRefresh()}async flushPendingFileChangeRefresh(){await this.fileChangeRefresh?.flushPendingRefresh()}onSyncStatusRefreshing(){this.cancelPendingSyncStatusRefresh()}async addServer(e){return this.lockManager.withLock({scopes:["config","sync"],command:"add-server",wait:this.lockWait},async()=>(await this.config.addServer(e),this.config.getActiveServerUrl()))}async verifyServerReachable(e){let t=ye(e);return await Us(t),t}async removeServer(e){return await this.ensureConfigLoaded(),this.lockManager.withLock({scopes:["config","sync"],command:"remove-server",wait:this.lockWait},async()=>{let t=this.config.getActiveServerUrl(),n=this.config.resolveServerUrl(e)??e;await this.config.removeServer(e),this.disconnectServers(n);let o=t!==this.config.getActiveServerUrl();return o&&(this.updateMetadataVersions(),this.updateConnectionStatus()),o})}async changeServerUrl(e,t,n){let o=await new Ki(this).change(e,t,n);return this.disconnectServers(o.oldServerUrl,o.serverUrl),o.connection&&(this.applyServerConnection(o.connection),Bt.info(`login succeeded: ${o.serverUrl}`)),o.serverUrl}async switchActiveServer(e){await this.ensureConfigLoaded();let t=this.config.resolveServerUrl(e);if(!t)throw new Error(d("workspace.server.serverNotConfigured",e));return await this.lockManager.withLock({scopes:["config","sync"],command:"switch-active-server",wait:this.lockWait},async()=>{await this.config.setActiveServerUrl(t)}),this.config.getActiveServerUrl()}async readTargetStatusSnapshot(e){await this.ensureConfigLoaded();try{let[t,n,o,i]=await Promise.all([this.readTargetSideSnapshot(this.root,e.remotePath,{returnStat:!0}),this.readTargetSideSnapshot(this.getMirrorRoot(),e.remotePath,{returnStat:!0}),Ue(this.root,e.remotePath),Ue(this.getMirrorRoot(),e.remotePath)]),a=await this.isTargetContentChanged(e.remotePath,t,n);return a===void 0?this.unknownTargetStatusSnapshot(e.remotePath):{remotePath:e.remotePath,workspace:{...t,fileId:o?.id,identity:t.identity??o?.id},mirror:{...n,fileId:i?.id,identity:n.identity??i?.id},contentChanged:a,metaChanged:!this.isMetaInfoEqual(o,i)}}catch(t){return Bt.debug(`read target status snapshot failed: ${e.remotePath}`,t),this.unknownTargetStatusSnapshot(e.remotePath)}}async readTargetSideSnapshot(e,t,n={}){try{let o=await kp.promises.stat(ae(e,t)),i=o.isFile()?"file":o.isDirectory()?"folder":"unknown",a=n.returnStat&&o.isFile()?{size:o.size,mtimeMs:o.mtimeMs}:void 0;return{kind:i,contentStat:a}}catch(o){if(x(o))return Bt.debug(`target side path does not exist: ${e}:${t}`),{kind:"missing"};throw o}}async isTargetContentChanged(e,t,n){if(t.kind!=="file"||n.kind!=="file")return!1;let o=t.contentStat,i=n.contentStat;if(o&&i)return this.compareFileContentStats(o,i);try{let[a,s]=await Promise.all([kp.promises.stat(ae(this.root,e)),kp.promises.stat(ae(this.getMirrorRoot(),e))]);return this.compareFileContentStats(a,s)}catch(a){Bt.debug(`cannot compare target stat cache for ${e}`,a);return}}compareFileContentStats(e,t){if(e.size!==t.size)return!0;if(e.mtimeMs===t.mtimeMs)return!1}isMetaInfoEqual(e,t){return!e&&!t?!0:!e||!t?!1:Po(e,t)}unknownTargetStatusSnapshot(e){return{remotePath:e,workspace:{kind:"unknown"},mirror:{kind:"unknown"}}}async tryAutoConnect(e={}){await this.ensureConfigLoaded();let t=this.config.getActiveServerUrl();if(t){if(this.connectedServerUrl&&kr(this.connectedServerUrl)===kr(t)){this.updateConnectionStatus();return}try{let n=await new Ki(this).connect(t);this.applyServerConnection(n.connection,e)}catch(n){if(!(n instanceof Le))throw n;Bt.debug(`stored credential invalid for ${t}`,n),this.updateConnectionStatus()}}}async connect(e,t){let n=await new Ki(this).connect(e,t);return this.applyServerConnection(n.connection),t&&Bt.info(`login succeeded: ${n.connection.client.serverUrl}`),!0}disconnect(){this.connectedServerUrl=void 0,this.updateMetadataVersions(),this.updateConnectionStatus(),Bt.info("disconnected")}updateConnectionStatus(){this.connectionInitializing||this.fireConnectionStateChanged()}onConfigChanged(){let e=this.connectedServerUrl;e&&kr(e)!==kr(this.config.getActiveServerUrl())&&(this.cancelPendingSyncStatusRefresh(),this.clearSyncStatus(),this.disconnectServers(e),this.updateMetadataVersions(),this.updateConnectionStatus())}refreshSyncStatusAfterConnection(e={}){e.refreshSyncStatus!==!1&&this.refreshSyncStatus().catch(t=>{Bt.warn(`refresh sync status after connection failed: ${this.root}`,t)})}async refreshWorkspaceSupportIfNeeded(e){let t=this.connectedServerUrl;if(t)try{let n=await this.createDetachedClient(t),o=this.createDiagnosticClient(n),i=e??await o.getServerInfo();this.updateMetadataVersions(i),await this.warnIfServerLooksOlder(i),await DP(this,o,i)}catch(n){Bt.warn(`refresh workspace support after server version change failed: ${this.root}`,n)}finally{this.updateConnectionStatus()}}async warnIfServerLooksOlder(e){try{let t=this.config.getServerVersion(),n=await eR(t,e);if(n.newBaselineVersion&&await this.lockManager.withLock({scopes:["config"],command:"set-server-version",wait:this.lockWait},async()=>{await this.config.setServerVersion(n.newBaselineVersion)}),!n.warningMessage)return;this.eventBus.fire(new Ye("user.notification.requested",{level:"warning",message:n.warningMessage},this))}catch(t){Bt.warn(`check server compatibility baseline failed: ${this.root}`,t)}}fireConnectionStateChanged(e=!1){this.eventBus.fire(new Ye("workspace.connection.changed",{root:this.root,connected:this.isConnected,serverUrl:this.activeServerUrl,initializing:e},this))}notifySyncStatusRefreshing(e,t){this.eventBus.fire(new Ye("workspace.sync.status.refreshing",{root:this.root,refreshTask:e,progressVisible:t},this))}fireSyncStatusChanged(){this.eventBus.fire(new Ye("workspace.sync.status.changed",{root:this.root},this))}createSyncService(e){return Xm(this,e)}runMaintenance(e){return new hp(this).run(e)}notifyLocalProjectsChanged(){this.eventBus.fire(new Ye("workspace.local.projects.changed",{root:this.root,serverUrl:this.activeServerUrl},this))}async getMetadataVersionCatalog(){return await this.ensureMetadataVersionCatalogLoaded(),this.metadataVersionCatalog}updateMetadataVersions(e){this.metadataVersionCatalog=yo.fromServerVersions(e?.metadataVersions),this.metadataVersionCatalogLoaded=e!==void 0}dispose(){this.disposables.dispose(),this.config.dispose(),this.syncStatusTracker.dispose(),this.fileChangeRefresh?.dispose(),this.fileChangeRefresh=void 0}async shouldYieldAutoSync(){let e=await this.lockManager.peekHolders(["config","sync"]),t=this.lockManager.staleMs;for(let n of e.values()){if(!n)continue;if(Date.now()-new Date(n.lastHeartbeat).getTime()<t&&(n.source==="ide"||n.source==="cli"))return Bt.info(`auto-sync yield to ${n.command}`),!0}return!1}getMirrorRoot(e=this.activeServerUrl){return Fr.join(this.root,".succapp","remote",kr(e))}createWorkspaceListingMirror(){let e=this.activeServerUrl?this.getMirrorRoot(this.activeServerUrl):Fr.join(this.root,".succapp","remote","__workspace__");return new kt(e)}toProjectNames(e){return e.map(t=>t.replace(/^\//,"")).sort((t,n)=>t.localeCompare(n))}},J_=_h;function wp(r){return new J_(r.root,r.eventBus,r.client,r.lockWait)}var Lh=class extends ce{toOptions(e){return{scopes:Z_(e.values("scope")),force:e.has("force")}}async executeCommand(e,t){let n=wR.resolve(e.cwd,e.config.workspace??".");await cc(n);let o=Pe("server"),i=e.config.server?wr(e.config.server,{input:o,option:o,flag:"server"}):void 0,a=e.workspace===void 0,s=e.workspace??wp({root:n,eventBus:e.eventBus,lockWait:e.config.lockTimeout});try{let c=await this.initializeWorkspace(s,e,i,t);return e.output.result({...c},()=>Y_(c)),0}finally{a&&s.dispose()}}async initializeWorkspace(e,t,n,o){n&&(await this.validateExplicitServerAgainstExistingConfig(e,n),await this.verifyExplicitServer(t,e,n));let i=o.scopes,a=tL(i),s=await e.runMaintenance({taskIds:a,explicitTaskIds:a,dryRun:!1,server:n,taskOptions:{refreshServerSupport:!0,agentDocsForce:o.force},task:t.task});this.throwBlockedConfigIssue(s,e,n),await e.config.ensureLoaded();let c=s.issues.find(l=>l.taskId==="workspace-config");return{workspace:e.root,configPath:e.config.path,initialized:c?.execution?.status==="applied",activeServer:e.config.get()?.activeServerUrl||void 0,supportFiles:X_(s),scopes:i}}throwBlockedConfigIssue(e,t,n){let o=e.issues.find(i=>i.taskId==="workspace-config"&&(i.execution?.status==="blocked"||i.execution?.status==="failed"));if(o)throw oL(o,t,n)}async validateExplicitServerAgainstExistingConfig(e,t){await e.config.ensureLoaded();let n=e.config.get()?.activeServerUrl||void 0;if(!n||$e(t,n))return;let o=Pe("server");throw new R("err.cli.serverMismatch",{input:o,option:o,value:t,expected:n,context:{workspace:e.root,target:t,active:n}})}async verifyExplicitServer(e,t,n){let o=new Lr(n,{workspaceRoot:t.root});await o.verify(),await o.getServerInfo()}},PR={path:["workspace","init"],domain:"workspace",spec:{name:"workspace init",flags:[{name:"server",takesValue:!0,valueHint:"url"},{name:"scope",takesValue:!0,repeatable:!0,valueHint:"scope"},{name:"force",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace init","succapp -C /path/to/workspace workspace init --server=http://localhost:8180/bi","succapp workspace init --scope base,dev","succapp workspace init --scope agent-docs","succapp workspace init --scope agent-docs --force","succapp workspace init --server=https://bi.example.com --json"]},workspaceTarget:"optional",allowUninitializedWorkspaceTarget:!0,serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Lh};function Y_(r){let e=r.initialized?d("cli.cmd.workspace.init.initWorkspace",r.workspace):d("cli.cmd.workspace.init.workspaceInit",r.workspace),t=r.activeServer?`
|
|
88
|
+
${d("cli.cmd.workspace.init.active",r.activeServer)}`:"",n=`
|
|
89
|
+
${d("cli.cmd.workspace.init.supportFiles",r.supportFiles.updatedCount,r.supportFiles.skipped.length)}`,o=r.supportFiles.agentDocs?`
|
|
90
|
+
${nL(r.supportFiles.agentDocs)}`:"",i=r.activeServer?"":`
|
|
91
|
+
${d("cli.cmd.workspace.init.noActiveServer")}
|
|
92
|
+
${d("cli.cmd.workspace.init.nextConfigureServer")}`;return`${e}${t}${n}${o}${i}`}function X_(r){let e=r.issues.filter(o=>o.taskId!=="workspace-config"&&o.taskId!=="succapp-docs-skill"),t=e.filter(o=>o.execution?.status==="applied").length,n=e.filter(o=>o.execution?.status==="skipped").map(o=>({item:o.taskId,reason:Q_(o),localPaths:o.localPaths}));return{updated:t>0,updatedCount:t,skipped:n,agentDocs:rL(r)}}function Q_(r){let e=r.execution?.properties?.skipCause??r.properties?.skipCause;return typeof e=="string"?e:"skipped"}function Z_(r){if(r.length===0)return["all"];let e=[];for(let t of r)for(let n of t.split(",")){let o=n.trim();if(!eL(o))throw new R("err.cli.invalidChoice",{input:"--scope",option:"--scope",value:o||t,allowedValues:Object.keys(_l)});e.includes(o)||e.push(o)}return e.includes("all")?["all"]:e}function eL(r){return Object.prototype.hasOwnProperty.call(_l,r)}function tL(r){let e=[];for(let t of r)for(let n of _l[t])e.includes(n)||e.push(n);return e}function rL(r){let e=r.issues.find(o=>o.taskId==="succapp-docs-skill");if(!e)return;let t=e.execution?.properties??e.properties??{};return{status:(typeof t.skipCause=="string"?t.skipCause:void 0)==="agent-docs-unavailable"?"unavailable":e.execution?.status==="applied"?"updated":"up-to-date",docSet:kR(t,"docSet"),generatedAt:kR(t,"generatedAt"),total:Lo(t,"total"),added:Lo(t,"added"),changed:Lo(t,"changed"),removed:Lo(t,"removed"),skipped:Lo(t,"skipped"),unavailable:Lo(t,"unavailable"),resourcesUnavailable:Lo(t,"resourcesUnavailable")}}function nL(r){if(r.status==="unavailable")return d("cli.cmd.workspace.init.agentDocsUnavailable");let e=d("cli.cmd.workspace.init.agentDocsSummary",r.total??0,r.added??0,r.changed??0,r.removed??0,r.skipped??0);return(r.resourcesUnavailable??0)>0?`${vR(e,r)}
|
|
93
|
+
${d("cli.cmd.workspace.init.agentDocsResourceSkipped",r.resourcesUnavailable??0)}`:vR(e,r)}function vR(r,e){return(e.unavailable??0)>0?`${r}
|
|
94
|
+
${d("cli.cmd.workspace.init.agentDocsFileSkipped",e.unavailable??0)}`:r}function kR(r,e){let t=r[e];return typeof t=="string"?t:void 0}function Lo(r,e){let t=r[e];return typeof t=="number"?t:void 0}function oL(r,e,t){if(r.code==="err.workspace.issue.E202")return new R("err.cli.invalidWorkspaceConfigJson",{inputId:"workspaceConfig",source:e.config.path,context:{workspace:e.root,configPath:e.config.path}});let n=Pe("server"),o=typeof r.properties?.activeServer=="string"?r.properties.activeServer:void 0;return new R("err.cli.serverMismatch",{input:n,option:n,value:t??"",expected:o||d("cli.out.value.none"),context:{workspace:e.root,target:t??"",active:o}})}var xe=class extends ue{async executeWorkspaceCommand(e,t,n){return await this.prepareSyncCommand(e,t,n),this.executeSyncCommand(e,e.createSyncService(),t,n)}async prepareSyncCommand(e,t,n){!t.command||t.command.serverTarget!=="none"?await Wr(t,e):await e.config.ensureLoaded()}};D();var Nh=class extends xe{toOptions(e){return{paths:e.positional,force:e.has("force")}}async executeSyncCommand(e,t,n,o){let i=await t.pull({paths:o.paths.length>0?[...o.paths]:void 0,force:o.force,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{updated:i.updated.length,deleted:i.deleted.length,conflicts:i.conflicts.length,oldFiles:i.oldFiles.length},updated:i.updated,deleted:i.deleted,conflicts:i.conflicts.map(_n),oldFiles:i.oldFiles.map(rn)},()=>iL(i)),i.conflicts.length>0?6:0}},bR={path:["workspace","pull"],domain:"workspace",spec:{name:"workspace pull",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace pull","succapp workspace pull demo/views/sales.view","succapp workspace pull --force /DEMO/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Nh};function iL(r){if(r.updated.length===0&&r.deleted.length===0&&r.conflicts.length===0)return RR([d("cli.cmd.workspace.pull.upDate")],r.oldFiles);let e=[d("cli.cmd.workspace.pull.pullResultUpdated",r.updated.length,r.deleted.length,r.conflicts.length)];return(r.updated.length>0||r.deleted.length>0)&&e.push(aL(r)),r.conflicts.length>0&&(e.push(d("cli.cmd.workspace.pull.conflicts",r.conflicts.length)),e.push(Ln(r.conflicts))),RR(e,r.oldFiles)}function aL(r){return me({columns:[d("cli.out.header.type"),d("cli.out.header.remote")],rows:[...r.updated.map(e=>[d("cli.out.value.updated"),e]),...r.deleted.map(e=>[d("cli.out.value.deleted"),e])]})}function RR(r,e){return e.length>0&&(r.push(d("cli.cmd.workspace.pull.oldMeta",e.length)),r.push(Pa(e))),r.join(`
|
|
95
|
+
`)}D();var Wh=class extends xe{toOptions(e){return{paths:e.positional,force:e.has("force")}}async executeSyncCommand(e,t,n,o){let i=await t.push({paths:o.paths.length>0?[...o.paths]:void 0,force:o.force,task:n.task}),a=lL(i.metadataVersionSuggestions??[]);return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{pushed:i.pushed.length,rejected:i.rejected.length,failures:i.failures.length,metadataVersionSuggestions:i.metadataVersionSuggestions?.length??0,olderMetadataVersionSuggestions:a.older,newerMetadataVersionSuggestions:a.newer},pushed:i.pushed,rejected:i.rejected.map(_n),failures:i.failures.map(Sc),metadataVersionSuggestions:(i.metadataVersionSuggestions??[]).map(vc)},()=>cL(i,a)),sL(i)}},ER={path:["workspace","push"],domain:"workspace",spec:{name:"workspace push",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace push","succapp workspace push demo/views/sales.view","succapp workspace push --force demo/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Wh};function sL(r){return r.rejected.length>0?6:r.failures.length>0?1:0}function cL(r,e){if(r.pushed.length===0&&r.rejected.length===0&&r.failures.length===0)return d("cli.cmd.workspace.push.noLocalChanges");let t=[d("cli.cmd.workspace.push.pushResultPushed",r.pushed.length,r.rejected.length,r.failures.length)];r.pushed.length>0&&(t.push(d("cli.cmd.workspace.push.pushedFiles",r.pushed.length)),t.push(pL(r.pushed))),r.rejected.length>0&&(t.push(d("cli.cmd.workspace.push.pushBlockedRemote",r.rejected.length)),t.push(Ln(r.rejected))),r.failures.length>0&&(t.push(d("cli.cmd.workspace.push.failed",r.failures.length)),t.push(dL(r.failures)));let n=r.metadataVersionSuggestions??[];return n.length>0&&(t.push(d("cli.cmd.workspace.push.metaVersions",e.older,e.newer)),t.push(uL(n))),t.join(`
|
|
96
|
+
`)}function lL(r){let e=0,t=0;for(let n of r)n.kind==="newer"?t++:e++;return{older:e,newer:t}}function pL(r){return me({columns:[d("cli.out.header.path")],rows:r.map(e=>[e])})}function dL(r){return me({columns:[d("cli.out.header.path"),d("cli.out.header.error")],rows:r.map(e=>[e.path,Nn(e.errorInfo)])})}function uL(r){return me({columns:[d("cli.out.header.path"),d("cli.cmd.workspace.push.version"),d("cli.cmd.workspace.push.targetVersion"),d("cli.cmd.workspace.push.kind")],rows:r.map(e=>[e.path,e.currentVersion??"",e.targetVersion,kc(e.kind)])})}B();F();D();var Uh=class extends xe{toOptions(e){return{paths:e.positional,force:e.has("force")}}validateOptions(e,t){if(t.paths.length===0&&!t.force)throw new R("err.cli.confirmationRequired",{reason:"discardAll",flag:"--force"})}async executeSyncCommand(e,t,n,o){let i=await t.reset({paths:o.paths.length>0?[...o.paths]:void 0,force:!0,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{updated:i.updated.length,deleted:i.deleted.length},updated:i.updated,deleted:i.deleted},()=>mL(i)),0}},MR={path:["workspace","discard"],domain:"workspace",spec:{name:"workspace discard",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace discard demo/views/sales.view","succapp workspace discard --force","succapp workspace discard --force --json"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Uh};function mL(r){if(r.updated.length===0&&r.deleted.length===0)return d("cli.cmd.workspace.discard.noLocalChanges");let e=[d("cli.cmd.workspace.discard.result",r.updated.length,r.deleted.length)];return r.updated.length>0&&(e.push(d("cli.cmd.workspace.discard.restoredFiles",r.updated.length)),e.push(TR(r.updated))),r.deleted.length>0&&(e.push(d("cli.cmd.workspace.discard.deletedFiles",r.deleted.length)),e.push(TR(r.deleted))),e.join(`
|
|
97
|
+
`)}function TR(r){return me({columns:[d("cli.out.header.path")],rows:r.map(e=>[e])})}D();F();B();re();var xR=["sync-baseline","workspace-config","workspace-settings","workspace-gitignore","workspace-agent-files","typescript-support","json-schema-support"],hL=["workspace-support"],fL=[...xR,...hL];function FR(r){return r.flatMap(e=>{if(e==="workspace-support")return[...Ol];if(xR.includes(e))return[e];throw new R("err.cli.invalidChoice",{input:"--only",option:"--only",value:e,allowedValues:fL})})}function IR(r){return O({checks:r.checks.length>0?r.checks:void 0,dryRun:r.dryRun?!0:void 0})}function No(r){let e=new Map;for(let t of r){let n=LR(t.code),o=e.get(n);o?e.set(n,{code:n,count:o.count+1,message:o.message,repairable:o.repairable||t.repairable,repairableCount:o.repairableCount+(t.repairable?1:0),unrepairableCount:o.unrepairableCount+(t.repairable?0:1),remotePaths:[...o.remotePaths,...t.remotePaths],localPaths:[...o.localPaths,...t.localPaths]}):e.set(n,{code:n,count:1,message:gL(t),repairable:t.repairable,repairableCount:t.repairable?1:0,unrepairableCount:t.repairable?0:1,remotePaths:[...t.remotePaths],localPaths:[...t.localPaths]})}return Array.from(e.values())}function DR(r){let e=Jn(r),t=e.filter(o=>o.repairable).length,n=No(e).map(o=>({code:o.code,count:o.count,repairable:o.repairableCount,unrepairable:o.unrepairableCount,message:o.message}));return{workspace:r.workspaceRootPath,server:r.serverUrl??"",dryRun:!0,summary:{issues:e.length,repairable:t,unrepairable:e.length-t,skipped:Pp(r).length,byCode:n},issues:No(e).map(o=>({code:o.code,repairable:o.repairable,repairableCount:o.repairableCount,unrepairableCount:o.unrepairableCount,remotePaths:o.remotePaths,localPaths:o.localPaths})),skipped:Pp(r).map(WR)}}function AR(r){let e=Jn(r),t=NR(r),n=Rp(r),o=No(e),i=No(t),a=No(n);return{workspace:r.workspaceRootPath,server:r.serverUrl??"",dryRun:!1,summary:{issues:e.length,repaired:t.length,unresolved:n.length,skipped:Pp(r).length,byCode:o.map(s=>({code:s.code,count:s.count,repairable:s.repairableCount,unrepairable:s.unrepairableCount,message:s.message}))},issues:o.map(s=>({code:s.code,repairable:s.repairable,repairableCount:s.repairableCount,unrepairableCount:s.unrepairableCount,remotePaths:s.remotePaths,localPaths:s.localPaths})),repaired:i.map(s=>({code:s.code,repairable:s.repairable,repairableCount:s.repairableCount,unrepairableCount:s.unrepairableCount,remotePaths:s.remotePaths,localPaths:s.localPaths})),unresolved:a.map(s=>({code:s.code,repairable:s.repairable,repairableCount:s.repairableCount,unrepairableCount:s.unrepairableCount,remotePaths:s.remotePaths,localPaths:s.localPaths})),skipped:Pp(r).map(WR)}}function OR(r){let e=Jn(r);if(e.length===0)return d("cli.cmd.workspace.repair.dryRunClean");let t=e.filter(o=>o.repairable).length,n=[d("cli.cmd.workspace.repair.dryRunIssue",e.length,t,e.length-t)];return n.push(...jh(e)),n.push(...Bh(e)),n.join(`
|
|
98
|
+
`)}function _R(r){let e=Jn(r),t=NR(r),n=Rp(r);if(e.length===0)return d("cli.cmd.workspace.repair.clean");let o=[d("cli.cmd.workspace.repair.repaired",t.length,n.length)];return t.length>0&&(o.push(""),o.push(d("cli.cmd.workspace.repair.repairedIssues")),o.push(...jh(t)),o.push(...Bh(t))),n.length>0&&(o.push(""),o.push(d("cli.cmd.workspace.repair.unresolved")),o.push(...jh(n)),o.push(...Bh(n))),o.join(`
|
|
99
|
+
`)}function jh(r){let e=No(r);if(e.length===0)return[];let t=[""];t.push("Summary by code:");for(let n of e){let o=n.count.toString().padStart(3);t.push(` ${n.code} ${o} ${n.message}`)}return t}function Bh(r){if(r.length===0)return[];let e=No(r),t=[];t.push(""),t.push("Issues:");for(let n of e){t.push(` ${n.code}`);for(let o of n.remotePaths)t.push(` ${o}`);for(let o of n.localPaths)t.push(` ${o}`)}return t}function gL(r){return d(r.code)}function LR(r){if(!r)return"-";let e=r.lastIndexOf(".");return e>=0?r.slice(e+1):r}function Jn(r){return r.issues.filter(e=>e.execution?.status!=="skipped")}function Pp(r){return r.issues.filter(e=>e.execution?.status==="skipped")}function NR(r){return Jn(r).filter(e=>e.execution?.status==="applied")}function Rp(r){return Jn(r).filter(e=>e.execution?.status==="blocked"||e.execution?.status==="failed")}function WR(r){let e=r.execution?.properties?.skipCause??r.properties?.skipCause;return O({check:r.taskId,code:LR(r.code),reason:typeof e=="string"?e:void 0,remotePaths:r.remotePaths,localPaths:r.localPaths})}var Vh=class extends ue{toOptions(e){return{checks:FR(e.values("only")),dryRun:e.has("dry-run")}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().repairWorkspace({...IR(n),task:t.task});return n.dryRun?(t.output.result(DR(o),()=>OR(o)),Jn(o).length>0?1:0):(t.output.result(AR(o),()=>_R(o)),Rp(o).length>0?1:0)}},UR={path:["workspace","repair"],domain:"workspace",spec:{name:"workspace repair",flags:[{name:"only",takesValue:!0,repeatable:!0,valueHint:"item"},{name:"dry-run",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace repair --dry-run","succapp workspace repair --only=sync-baseline","succapp workspace repair --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Vh};D();B();var qh=class extends xe{toOptions(e){return{paths:e.positional,localOnly:e.has("local-only"),forceRefresh:e.has("force-refresh")}}async executeSyncCommand(e,t,n,o){let i=await t.status({refreshAll:!0,scope:o.localOnly?"local":"both",forceRefresh:o.forceRefresh,paths:[...o.paths],task:n.task}),a=yL(i);for(let s of i.warnings??[])n.output.warning(s.errorCode==="err.login.notlogin"?d("cli.cmd.workspace.status.remoteAuthRequired"):s.errorCode);return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:a,changes:i.changes.map(_n),...i.warnings?.length?{warnings:i.warnings.map(s=>({errorCode:s.errorCode,...s.properties?{properties:s.properties}:{}}))}:{}},()=>CL(a,i.changes)),0}},jR={path:["workspace","status"],domain:"workspace",spec:{name:"workspace status",flags:[{name:"local-only",takesValue:!1},{name:"force-refresh",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace status","succapp workspace status --local-only","succapp workspace status --force-refresh","succapp workspace status --json","succapp workspace status demo/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new qh};function yL(r){return{changes:r.changes.length,local:r.localChanges.length,remote:r.remoteChanges.length,conflicts:r.conflicts.length}}function CL(r,e){let t=SL(r);return e.length===0?`${t}
|
|
100
|
+
${d("cli.out.common.changes")}`:`${t}
|
|
101
|
+
${Ln(e)}`}function SL(r){return d("cli.out.common.changesLocalRemote",r.changes,r.local,r.remote,r.conflicts)}D();var BR="1";function VR(r,e={}){let t=e.targetVersion??BR;return{workspaceRootPath:r.root,currentVersion:BR,targetVersion:t,dryRun:e.dryRun===!0,hasActions:!1,actions:[],reason:"no-workspace-migrations"}}var $h=class extends ue{toOptions(e){return{targetVersion:e.value("target-version"),dryRun:e.has("dry-run")}}async executeWorkspaceCommand(e,t,n){let o=VR(e,n);return t.output.result(vL(o),()=>kL(o)),0}},qR={path:["workspace","upgrade"],domain:"workspace",spec:{name:"workspace upgrade",flags:[{name:"target-version",takesValue:!0,valueHint:"version"},{name:"dry-run",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace upgrade --dry-run","succapp workspace upgrade --target-version=1"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new $h};function vL(r){return{workspace:r.workspaceRootPath,currentVersion:r.currentVersion,targetVersion:r.targetVersion,dryRun:r.dryRun,hasActions:r.hasActions,actions:r.actions,reason:r.reason}}function kL(r){return r.hasActions?d("cli.cmd.workspace.upgrade.actions",r.actions.length,r.currentVersion,r.targetVersion):d("cli.cmd.workspace.upgrade.noActions",r.currentVersion,r.targetVersion)}D();re();function $R(r){return{workspace:r.workspaceRootPath,summary:{entries:r.entries.length},entries:r.entries.map(Hh)}}function HR(r){return{workspace:r.workspaceRootPath,summary:{cleared:r.cleared.length,remaining:r.remaining.length},cleared:r.cleared.map(Hh),remaining:r.remaining.map(Hh)}}function zR(r){return{columns:[d("cli.out.header.path"),d("cli.cmd.workspace.backup.size"),d("cli.out.header.modified"),d("cli.cmd.workspace.backup.backupPath")],rows:r.map(e=>[e.path,e.size===void 0?"":String(e.size),e.mtime??"",e.backupPath])}}function KR(r){return d("cli.cmd.workspace.backup.cleared",r.cleared.length,r.remaining.length)}function Hh(r){return O({path:r.path,backupPath:r.backupPath,size:r.size,mtime:r.mtime})}var zh=class extends ue{toOptions(e){return{paths:e.positional}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().clearMergeBackups({paths:n.paths.length>0?[...n.paths]:void 0,task:t.task});return t.output.result(HR(o),()=>KR(o)),0}},GR={path:["workspace","backup","clear"],domain:"workspace",spec:{name:"workspace backup clear",flags:[],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace backup clear","succapp workspace backup clear /DEMO_BLANK/app"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new zh};var Kh=class extends ue{toOptions(e){return{paths:e.positional}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().listMergeBackups({paths:n.paths.length>0?[...n.paths]:void 0,task:t.task});return t.output.result($R(o),()=>zR(o.entries)),0}},JR={path:["workspace","backup","list"],domain:"workspace",spec:{name:"workspace backup list",flags:[],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace backup list","succapp workspace backup list /DEMO_BLANK/app"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Kh};F();B();function YR(r,e,t){return r.error==="empty"?new R("err.cli.missingInput",{inputId:"extensionName",sources:["<extension-name>"],context:{scope:e}}):new R("err.cli.invalidExtensionName",{inputId:"extensionName",value:t,expectedScope:e,actualScope:r.actualExtensionPoint,reason:r.error,context:{name:t,scope:e,reason:r.error,actualScope:r.actualExtensionPoint}})}function XR(r){return r.rejected.length>0?6:r.failures.length>0?1:0}F();B();var Gh=class extends ue{toOptions(e){return{extensionPoint:e.positional[0],templateName:e.positional[1],extensionName:e.positional[2]}}async executeWorkspaceCommand(e,t,n){await Wr(t,e);let o=new Mc(e);if(!(await o.prepare(t.task)).some(c=>c.extensionPoint===n.extensionPoint&&c.templateName===n.templateName))throw new R("err.cli.unknownExtensionTemplate",{inputId:"extensionTemplate",value:`${n.extensionPoint}/${n.templateName}`,extensionPoint:n.extensionPoint,templateName:n.templateName,context:{scope:n.extensionPoint,name:n.templateName}});let a=await o.validate({extensionPoint:n.extensionPoint,extensionName:n.extensionName});if(!a.ok)throw YR(a,n.extensionPoint,n.extensionName);let s=await e.lockManager.withLock({scopes:["sync"],command:"extension-create",wait:t.config.lockTimeout},async()=>o.execute({extensionPoint:n.extensionPoint,templateName:n.templateName,extensionName:n.extensionName,task:t.task}));return t.output.result({workspace:e.root,server:e.activeServerUrl,...bS(n.extensionName,s)},()=>xS(n.extensionName,s)),0}},QR={path:["workspace","extension","create"],domain:"workspace",spec:{name:"workspace extension create",flags:[],positionals:[{name:"extension-point",required:!0},{name:"template",required:!0},{name:"name",required:!0}],usageArgs:"[<options>] <extension-point> <template> <name>",examples:["succapp workspace extension create component blank succ-component-card"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Gh};var Jh=class extends ue{async executeWorkspaceCommand(e,t){let n=await PS(e.root);return t.output.result({workspace:e.root,extensions:n},()=>MS(n)),0}},ZR={path:["workspace","extension","list"],domain:"workspace",spec:{name:"workspace extension list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace extension list","succapp workspace extension list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Jh};F();B();F();B();K();var bp=class{workspace;cachedService;constructor(e){this.workspace=e}async resolveTarget(e){let t=wS({workspaceRoot:this.workspace.root,path:e.path,extensionName:e.extensionName});if(!t)throw new R("err.extension.rootUnresolved",{reason:wL(e)});if(!await ne(t.extensionRoot))throw new R("err.extension.rootNotFound",{extensionName:t.extensionName,extensionRoot:t.extensionRoot});return t}async status(){return this.requireService().status()}async execute(e){return this.requireService().push({paths:[e.target.extensionRoot],message:e.message,force:e.force,...e.task?{task:e.task}:{}})}requireService(){return this.cachedService||(this.cachedService=this.workspace.createSyncService()),this.cachedService}};function wL(r){return r.extensionName!==void 0?"invalidName":r.path!==void 0?"invalidPath":"missingInput"}var Yh=class extends ue{toOptions(e){return{extensionName:e.positional[0],path:e.value("path"),force:e.has("force")}}validateOptions(e,t){if(t.extensionName&&t.path)throw new R("err.cli.conflictingInputs",{inputs:["<extension>","--path=<path>"]});if(!t.extensionName&&!t.path)throw new R("err.cli.missingInput",{inputId:"extensionNameOrPath",sources:["<extension>","--path=<path>"]})}async executeWorkspaceCommand(e,t,n){await Wr(t,e);let o=new bp(e),i=await o.resolveTarget({extensionName:n.extensionName,path:n.path}),a=await o.execute({target:i,force:n.force,task:t.task});return t.output.result({workspace:e.root,server:e.activeServerUrl,extensionName:i.extensionName,extensionRoot:i.extensionRoot,force:n.force,...ES(a)},()=>FS(i.extensionName,a)),XR(a)}},eb={path:["workspace","extension","push"],domain:"workspace",spec:{name:"workspace extension push",flags:[{name:"path",takesValue:!0,valueHint:"path"},{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"name"}],usageArgs:"[<options>] [<name>]",examples:["succapp workspace extension push succ-component-card","succapp workspace extension push --path=sysdata/extensions/succ-component-card/package.json","succapp workspace extension push --force succ-component-card"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Yh};F();B();var Xh=class extends xe{toOptions(e){return{paths:e.positional,source:PL(e.value("source"))}}async executeSyncCommand(e,t,n,o){let i=await t.diff({paths:[...o.paths],source:o.source,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,source:i.source,summary:{files:i.items.length,changed:i.items.filter(a=>a.changed).length,binary:i.items.filter(a=>a.binary).length},patches:i.items.map(bL)},()=>RL(i)),0}},tb={path:["workspace","file","diff"],domain:"workspace",spec:{name:"workspace file diff",flags:[{name:"source",takesValue:!0,valueHint:"server"}],positionals:[{name:"path",required:!0,repeatable:!0}],usageArgs:"[<options>] [--] <path>...",examples:["succapp workspace file diff demo/views/sales.view","succapp workspace file diff --source=server /demo/views/sales.view","succapp workspace file diff demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Xh};function PL(r){if(!r||r==="server")return"server";throw new R("err.cli.invalidChoice",{input:"--source",option:"--source",value:r,allowedValues:["server"]})}function RL(r){return r.items.map(e=>e.patch).filter(Boolean).join(`
|
|
102
|
+
`)}function bL(r){return{path:r.path,remotePath:r.remotePath,localPath:r.localPath,source:r.source,sourceSize:r.sourceSize,workspaceSize:r.workspaceSize,changed:r.changed,binary:r.binary,patch:r.patch}}var Qh=class extends xe{toOptions(e){return{path:e.positional[0],limit:Oc(e.value("limit"))}}async executeSyncCommand(e,t,n,o){let i=await t.history({path:o.path,limit:o.limit,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,path:i.path,remotePath:i.remotePath,summary:{histories:i.histories.length},histories:i.histories.map(Lc)},()=>_c(i.histories)),0}},rb={path:["workspace","file","history"],domain:"workspace",spec:{name:"workspace file history",flags:[{name:"limit",takesValue:!0,valueHint:"n"}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file history demo/views/sales.view","succapp workspace file history --limit=20 /DEMO/views/sales.view","succapp workspace file history demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Qh};async function Ep(r,e){let t=await r.resolveRemoteFilePath({path:e.path});return{path:t.path,localPath:r.getMetaFileLocalPath(t.remotePath),remotePath:t.remotePath,serverUrl:t.serverUrl,viewUrl:ni(t.serverUrl,{path:t.remotePath}),editUrl:ni(t.serverUrl,{path:t.remotePath,":edit":"true"})}}D();var Zh=class extends ue{constructor(t=ai){super();this.opener=t}toOptions(t){return{path:t.positional[0],edit:t.has("edit")}}async executeWorkspaceCommand(t,n,o){await Wr(n,t);let i=await Ep(t,{path:o.path}),a=o.edit===!0,s=a?i.editUrl:i.viewUrl;return await this.opener(s,n.abortSignal),n.output.result({workspace:t.root,server:i.serverUrl,path:i.path,remotePath:i.remotePath,edit:a,url:s},()=>EL(s,a)),0}},nb={path:["workspace","file","open"],domain:"workspace",spec:{name:"workspace file open",flags:[{name:"edit",takesValue:!1}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file open demo/views/sales.view","succapp workspace file open --edit /DEMO/views/sales.view","succapp workspace file open demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Zh};function EL(r,e){return d(e?"cli.cmd.workspace.file.open.openedEdit":"cli.cmd.workspace.file.open.openedView",r)}D();F();B();var ef=class extends ue{toOptions(e){return{path:e.positional[0],url:TL(e.value("url"))}}async executeWorkspaceCommand(e,t,n){await Wr(t,e);let o=await Ep(e,{path:n.path});return t.output.result(ML(e,o),()=>xL(o,n.url)),0}},ob={path:["workspace","file","resolve"],domain:"workspace",spec:{name:"workspace file resolve",flags:[{name:"url",takesValue:!0,valueHint:"view|edit"}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file resolve demo/views/sales.view","succapp workspace file resolve --url=view demo/views/sales.view","succapp workspace file resolve --url=edit /DEMO/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new ef};function TL(r){if(r!==void 0){if(r==="view"||r==="edit")return r;throw new R("err.cli.invalidChoice",{input:"--url",option:"--url",value:r,allowedValues:["view","edit"]})}}function ML(r,e){return{workspace:r.root,server:e.serverUrl,path:e.path,remotePath:e.remotePath,localPath:e.localPath,viewUrl:e.viewUrl,editUrl:e.editUrl}}function xL(r,e){return e==="view"?r.viewUrl:e==="edit"?r.editUrl:[d("cli.cmd.workspace.file.resolve.path",r.path),d("cli.cmd.workspace.file.resolve.localPath",r.localPath),d("cli.cmd.workspace.file.resolve.remote",r.remotePath),d("cli.cmd.workspace.file.resolve.viewUrl",r.viewUrl),d("cli.cmd.workspace.file.resolve.editUrl",r.editUrl)].join(`
|
|
103
|
+
`)}F();B();var tf=class extends xe{toOptions(e){let t=FL(e.value("source")),n=IL(e.value("revision"));return{path:e.positional[0],source:t,revision:n}}validateOptions(e,t){if(t.revision!==void 0&&t.source==="mirror")throw new R("err.cli.conflictingInputs",{inputs:["--revision","--source=mirror"]})}async executeSyncCommand(e,t,n,o){let i=await t.show({path:o.path,source:o.source,revision:o.revision,task:n.task});return n.output.content({workspace:e.root,server:e.activeServerUrl,path:i.path,remotePath:i.remotePath,fileName:i.fileName,source:i.source,size:i.buffer.length},i.buffer),0}},ib={path:["workspace","file","show"],domain:"workspace",spec:{name:"workspace file show",flags:[{name:"source",takesValue:!0,valueHint:"mirror|server"},{name:"revision",takesValue:!0,valueHint:"n"}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file show /demo/views/sales.view","succapp workspace file show --source=mirror demo/views/sales.view","succapp workspace file show --revision=42 /demo/views/sales.view","succapp workspace file show /demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new tf};function FL(r){if(!r)return"server";if(r==="mirror"||r==="server")return r;throw new R("err.cli.invalidChoice",{input:"--source",option:"--source",value:r,allowedValues:["mirror","server"]})}function IL(r){if(r===void 0)return;let e=_t(r);if(e===void 0)throw new R("err.cli.invalidNonNegativeInteger",{input:"--revision",option:"--revision",value:r});return e}D();var rf=class extends xe{toOptions(e){return{paths:e.positional,dryRun:e.has("dry-run")}}async executeSyncCommand(e,t,n,o){let i=await t.upgradeMetadata({paths:o.paths.length>0?[...o.paths]:void 0,dryRun:o.dryRun,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,dryRun:o.dryRun,summary:{checked:i.checked,candidates:i.candidates.length,changed:i.changed.length,skipped:i.skipped.length,failures:i.failures.length},candidates:i.candidates.map(rn),changed:i.changed.map(rn),skipped:i.skipped.map(rn),failures:i.failures.map(rn)},()=>DL(i,o.dryRun,n.config.verbose)),i.failures.length>0?1:0}},ab={path:["workspace","file","upgrade"],domain:"workspace",spec:{name:"workspace file upgrade",flags:[{name:"dry-run",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace file upgrade --dry-run","succapp workspace file upgrade demo/views/sales.view","succapp workspace file upgrade /DEMO/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new rf};function DL(r,e,t){let n=[d(e?"cli.cmd.workspace.file.upgrade.dryRunRes":"cli.cmd.workspace.file.upgrade.result",r.checked,e?r.candidates.length:r.changed.length,r.skipped.length,r.failures.length)];return e&&r.candidates.length>0&&(n.push(d("cli.cmd.workspace.file.upgrade.cands",r.candidates.length)),n.push(Pa(r.candidates))),!e&&r.changed.length>0&&(n.push(d("cli.cmd.workspace.file.upgrade.upgraded",r.changed.length)),n.push(Pa(r.changed))),r.failures.length>0&&(n.push(d("cli.cmd.workspace.file.upgrade.failed",r.failures.length)),n.push(AL(r.failures))),t&&r.skipped.length>0&&(n.push(d("cli.cmd.workspace.file.upgrade.skipped",r.skipped.length)),n.push(OL(r.skipped))),n.join(`
|
|
104
|
+
`)}function AL(r){return me({columns:[d("cli.out.header.remote"),d("cli.cmd.workspace.file.upgrade.reason"),d("cli.out.header.error")],rows:r.map(e=>[e.remotePath,e.reason??"",Nn(e.errorInfo)])})}function OL(r){return me({columns:[d("cli.out.header.remote"),d("cli.out.common.version"),d("cli.out.common.targetVersion"),d("cli.cmd.workspace.file.upgrade.reason")],rows:r.map(e=>[e.remotePath,e.currentVersion??"",e.targetVersion??"",e.reason??""])})}D();var nf=class extends ue{async executeWorkspaceCommand(e,t,n){let o=await e.lockManager.peekHolders(),i=Array.from(o,([a,s])=>({scope:a,holder:s})).filter(a=>a.holder).map(a=>({scope:a.scope}));return t.output.result({workspace:e.root,scopes:i},()=>({columns:[d("cli.cmd.workspace.lock.list.scope")],rows:i.map(a=>[a.scope])})),0}},sb={path:["workspace","lock","list"],domain:"workspace",spec:{name:"workspace lock list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace lock list","succapp workspace lock list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new nf};F();B();function Tp(r){if(Ni.includes(r))return r;throw new R("err.cli.invalidChoice",{inputId:"lockScope",value:r,allowedValues:Ni})}D();var of=class extends ue{toOptions(e){return{scopes:e.positional.map(Tp)}}async executeWorkspaceCommand(e,t,n){let o=await e.lockManager.peekHolders(n.scopes.length===0?void 0:n.scopes),i=Array.from(o,([s,c])=>({scope:s,holder:c})),a={workspace:e.root,staleMs:e.lockManager.staleMs,scopes:i.map(s=>this.toJsonScopeStatus(s))};return t.output.result(a,()=>({columns:[d("cli.cmd.workspace.lock.status.scope"),d("cli.out.header.status"),d("cli.out.header.source"),d("cli.cmd.workspace.lock.status.pid"),d("cli.out.header.command"),d("cli.out.header.started"),d("cli.cmd.workspace.lock.status.heartbeat")],rows:i.map(s=>this.toTableRow(s))})),0}toJsonScopeStatus(e){return e.holder?{scope:e.scope,status:"busy",holder:this.toJsonHolder(e.holder)}:{scope:e.scope,status:"free"}}toJsonHolder(e){return{pid:e.pid,hostname:e.hostname,source:e.source,command:e.command,startTime:e.startTime,lastHeartbeat:e.lastHeartbeat,agentVersion:e.agentVersion,alsoHolds:e.alsoHolds}}toTableRow(e){return[e.scope,d(e.holder?"cli.out.value.busy":"cli.out.value.free"),e.holder?.source??"",e.holder?String(e.holder.pid):"",e.holder?.command??"",e.holder?.startTime??"",e.holder?.lastHeartbeat??""]}},cb={path:["workspace","lock","status"],domain:"workspace",spec:{name:"workspace lock status",flags:[],positionals:[{name:"scope",repeatable:!0}],usageArgs:"[<options>] [<scope>...]",examples:["succapp workspace lock status","succapp workspace lock status sync","succapp -C /path/to/workspace workspace lock status --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new of};function lb(r){return He(r[en.locale])??He(r[pc.lcAll])??He(r[pc.lcMessages])??He(r[pc.lang])}Y();Ee();F();B();var _L=T("cli.config"),Yn=86400,LL,pb=[];function db(r){let e=NL(r);return LL=e.config,pb=e.diagnostics,e.config}function ub(){for(let r of pb)_L.warn(r.message,r.envName,r.value)}function NL(r){let e=r.env??process.env,t=WL(r),n=t.input,o=[];return{config:{workspace:jL(t,"workspace",e[en.workspace]),server:BL(t,"server"),envServer:t.hasExplicitValue("server")?void 0:He(e[en.server]),outputMode:VL(n,e,o),quiet:n.quiet,verbose:n.verbose,lockTimeout:qL(t),logLevel:$L(t,e,o),locale:t.hasExplicitValue("locale")?He(n.locale):lb(e)},diagnostics:o}}function WL(r){if(r.args){let e=r.args.globalOptions,t=r.args;return{input:e,hasExplicitValue:n=>UL(t,n),strictExplicitValues:!1}}if(r.input){let e=r.input;return{input:e,hasExplicitValue:t=>e[t]!==void 0,strictExplicitValues:!0}}Uo("Either args or input must be provided to initializeCliConfig().")}function UL(r,e){switch(e){case"workspace":return r.parsed.has("workspace");case"server":return r.parsed.has("server");case"lockTimeout":return r.parsed.has("lock-timeout");case"logLevel":return r.parsed.has("log-level");case"locale":return r.parsed.has("locale")}}function jL(r,e,t){return He(r.hasExplicitValue(e)?r.input[e]:t)}function BL(r,e){return r.hasExplicitValue(e)?He(r.input[e]):void 0}function VL(r,e,t){return r.json||mb(hg,en.json,e,t)?"json":"human"}function qL(r){let e=r.input;if(r.hasExplicitValue("lockTimeout")){let t=e.lockTimeout,n=_t(t,Yn);if(n===void 0){if(!r.strictExplicitValues)return Ka;let o=Pe("lock-timeout");throw new R("err.cli.invalidNonNegativeIntegerRange",{input:o,option:o,value:t??"",max:Yn})}return n}return Ka}function $L(r,e,t){let n=r.input;if(r.hasExplicitValue("logLevel")){let o=n.logLevel,i=Bo(o);if(i===void 0){if(!r.strictExplicitValues)return"info";let a=Pe("log-level");throw new R("err.cli.invalidChoice",{input:a,option:a,value:o??"",allowedValues:Zi})}return i}return n.verbose?"debug":mb(Bo,en.logLevel,e,t)??"info"}function mb(r,e,t,n){let o=t[e],i=r(o);return o!==void 0&&o.trim()!==""&&i===void 0&&n.push({code:"invalid-env-value",severity:"warning",message:"Ignoring invalid CLI environment value",envName:e,value:o}),i}Sn();D();F();B();var fb=100,HL=["config","sync"],af=class extends ue{toOptions(e){return{scopes:e.positional.map(Tp),timeoutSeconds:zL(e.value("timeout"))}}async executeWorkspaceCommand(e,t,n){let o=n.scopes.length>0?n.scopes:HL,i=Date.now(),a=n.timeoutSeconds===void 0?void 0:n.timeoutSeconds*1e3;for(;;){yt(t.abortSignal);let s=await KL(e,o),c=s.filter(p=>p.status==="busy"),l=Date.now()-i;if(c.length===0)return t.output.result(hb(e.root,s,"free",l),()=>d("cli.cmd.workspace.lock.wait.locksFree",o.join(", "))),0;if(a!==void 0&&l>=a)return t.output.result(hb(e.root,s,"timeout",l),()=>d("cli.cmd.workspace.lock.wait.locksBusy",n.timeoutSeconds??0,c.map(p=>p.scope).join(", "))),124;await JL(Math.min(fb,GL(a,l)))}}},gb={path:["workspace","lock","wait"],domain:"workspace",spec:{name:"workspace lock wait",flags:[{name:"timeout",takesValue:!0,valueHint:"seconds"}],positionals:[{name:"scope",repeatable:!0}],usageArgs:"[<options>] [<scope>...]",examples:["succapp workspace lock wait","succapp workspace lock wait sync --timeout=30","succapp workspace lock wait config sync --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new af};function zL(r){if(r===void 0)return;let e=_t(r,Yn);if(e===void 0)throw new R("err.cli.invalidNonNegativeIntegerRange",{input:"--timeout",option:"--timeout",value:r,max:Yn});return e}async function KL(r,e){let t=await r.lockManager.peekHolders(e);return e.map(n=>({scope:n,status:t.get(n)?"busy":"free"}))}function hb(r,e,t,n){return{workspace:r,status:t,waitedMs:n,scopes:e,busyScopes:e.filter(o=>o.status==="busy").map(o=>o.scope)}}function GL(r,e){return r===void 0?fb:Math.max(0,r-e)}function JL(r){return new Promise(e=>setTimeout(e,r))}D();B();F();K();var sf=class extends xe{configuredActiveServer;toOptions(e){return{projectNames:e.positional,force:e.has("force")}}async prepareSyncCommand(e,t,n){if(this.configuredActiveServer=void 0,await e.config.ensureLoaded(),e.activeServerUrl||!t.config.server){await super.prepareSyncCommand(e,t,n);return}let o=Pe("server"),i=wr(t.config.server,{input:o,option:o,flag:"server"});this.configuredActiveServer=await e.addServer(i)}async executeSyncCommand(e,t,n,o){await XL(t,o);let i=await t.clone({projectNames:o.projectNames.length>0?[...o.projectNames]:void 0,task:n.task}),a=this.configuredActiveServer,s=a?{activeServerConfigured:!0,configuredActiveServer:a}:{};return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{projects:i.projectNames.length,oldFiles:i.oldFiles.length},...s,projects:i.projectNames,oldFiles:i.oldFiles.map(rn)},()=>this.renderCloneResultText(i)),0}renderCloneResultText(e){let t=e.projectNames.length>0?e.projectNames.join(", "):d("cli.out.value.none"),n=[];return this.configuredActiveServer&&n.push(d("cli.cmd.workspace.proj.clone.configuredActive",this.configuredActiveServer)),n.push(d("cli.cmd.workspace.proj.clone.cloned",t)),e.oldFiles.length>0&&n.push(d("cli.cmd.workspace.proj.clone.oldMetaNotice",{count:e.oldFiles.length,command:YL(e.projectNames)})),n.join(`
|
|
105
|
+
`)}},Cb={path:["workspace","project","clone"],domain:"workspace",spec:{name:"workspace project clone",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"project",repeatable:!0}],usageArgs:"[<options>] [--] [<project>...]",examples:["succapp workspace project clone","succapp workspace project clone DEMO","succapp workspace project clone DEMO --force","succapp workspace project clone DEMO OTHER --json"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new sf};function YL(r){return`succapp workspace file upgrade${r.length>0?` ${r.join(" ")}`:""}`}async function XL(r,e){if(e.force)return;let[t,n]=await Promise.all([r.listWorkspaceProjects(),r.listBaselineProjects()]),o=new Set([...t,...n].map(yb)),a=(e.projectNames.length>0?[...new Set(e.projectNames.map(yb))]:[...o]).filter(s=>o.has(s));if(a.length!==0)throw new R("err.cli.confirmationRequired",{reason:"cloneOverwrite",flag:"--force",projectNames:a.join(", ")})}function yb(r){return Ct(r).slice(1)}D();var cf=class extends xe{async executeSyncCommand(e,t,n,o){let[i,a]=await Promise.all([t.listWorkspaceProjects(),t.listBaselineProjects()]),s=QL(i,a);return n.output.result({workspace:e.root,server:e.activeServerUrl,projects:s},()=>ZL(s)),0}},Sb={path:["workspace","project","list"],domain:"workspace",spec:{name:"workspace project list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace project list","succapp workspace project list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new cf};function QL(r,e){let t=new Set(r),n=new Set(e);return Array.from(new Set([...r,...e])).sort((o,i)=>o.localeCompare(i)).map(o=>({name:o,workspace:t.has(o),baseline:n.has(o)}))}function ZL(r){return{columns:[d("cli.out.header.project"),d("cli.out.common.workspace"),d("cli.out.common.baseline")],rows:r.map(e=>[e.name,d(e.workspace?"cli.out.value.yes":"cli.out.value.no"),d(e.baseline?"cli.out.value.yes":"cli.out.value.no")])}}B();F();D();var lf=class extends xe{toOptions(e){return{projectNames:e.positional,force:e.has("force")}}validateOptions(e,t){if(!t.force)throw new R("err.cli.confirmationRequired",{reason:"projRemove",flag:"--force",projectNames:t.projectNames.join(", ")})}async executeSyncCommand(e,t,n,o){let i=await t.removeProject({projectNames:[...o.projectNames],task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,projectNames:i.projectNames},()=>d("cli.cmd.workspace.proj.remove.removed",i.projectNames.join(", ")||d("cli.out.value.none"))),0}},vb={path:["workspace","project","remove"],domain:"workspace",spec:{name:"workspace project remove",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"project",required:!0,repeatable:!0}],usageArgs:"[<options>] <project>...",examples:["succapp workspace project remove DEMO_BLANK --force","succapp workspace project remove DEMO_BLANK OTHER --force --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new lf};F();B();var hr=class extends ue{async executeWorkspaceCommand(e,t,n){return await e.config.ensureLoaded(),this.executeServerCommand(e,t,n)}async requireConfiguredServerUrl(e,t,n){let o=await dc(t,{explicitServerUrl:n}),i=e.config.resolveServerUrl(o);if(!i)throw new R("err.cli.unconfiguredServer",{inputId:"server",value:o,context:{target:o}});return i}};D();var pf=class extends hr{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=wr(n.url),i=e.config.hasServer(o),a=await e.addServer(o);return t.output.result({workspace:e.root,server:a,activeServer:a,added:!i},()=>d("cli.cmd.workspace.remote.add.active",a)),0}},kb={path:["workspace","remote","add"],domain:"workspace",spec:{name:"workspace remote add",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote add http://localhost:8180","succapp workspace remote add https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new pf};D();var df=class extends hr{async executeServerCommand(e,t,n){let o=e.activeServerUrl,i=e.config.getServers().map(a=>({url:a,active:a===o}));return t.output.result({workspace:e.root,activeServer:o||void 0,servers:i.map(e0)},()=>t0(i)),0}},wb={path:["workspace","remote","list"],domain:"workspace",spec:{name:"workspace remote list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace remote list","succapp workspace remote list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new df};function e0(r){return{url:r.url,active:r.active}}function t0(r){return r.length===0?d("cli.out.common.noServers"):{columns:[d("cli.out.common.server"),d("cli.out.common.active")],rows:r.map(e=>[e.url,d(e.active?"cli.out.value.yes":"cli.out.value.no")])}}D();var uf=class extends hr{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.url),i=await e.removeServer(o);return t.output.result({workspace:e.root,server:o,removedActive:i,activeServer:e.activeServerUrl||void 0},()=>e.activeServerUrl?d("cli.cmd.workspace.remote.remove.active",o,e.activeServerUrl):d("cli.cmd.workspace.remote.remove.removed",o)),0}},Pb={path:["workspace","remote","remove"],domain:"workspace",spec:{name:"workspace remote remove",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote remove http://localhost:8180","succapp workspace remote remove https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new uf};D();var mf=class extends hr{toOptions(e){return{oldUrl:e.positional[0],newUrl:e.positional[1]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.oldUrl),i=wr(n.newUrl),a=await e.changeServerUrl(o,i);return t.output.result({workspace:e.root,oldServer:o,server:a,activeServer:e.activeServerUrl||void 0},()=>d("cli.cmd.workspace.remote.setUrl.changed",o,a)),0}},Rb={path:["workspace","remote","set-url"],domain:"workspace",spec:{name:"workspace remote set-url",flags:[],positionals:[{name:"old-url",required:!0,role:"server-url"},{name:"new-url",required:!0,role:"server-url"}],usageArgs:"[<options>] <old-url> <new-url>",examples:["succapp workspace remote set-url http://localhost:8080 http://localhost:8180","succapp workspace remote set-url https://old.example.com https://new.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new mf};D();var hf=class extends hr{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.url),i=await e.switchActiveServer(o);return t.output.result({workspace:e.root,server:o,activeServer:i},()=>d("cli.cmd.workspace.remote.use.active",i)),0}},bb={path:["workspace","remote","use"],domain:"workspace",spec:{name:"workspace remote use",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote use http://localhost:8180","succapp workspace remote use https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new hf};var Eb=[PR,jR,bR,ER,MR,tb,ib,rb,nb,ob,ab,Cb,Sb,vb,UR,kb,wb,bb,Rb,Pb,QR,ZR,eb,cb,sb,gb,JR,GR,qR];var Tb=[...Eb,...ik,...DC,...uS];var Mp=[{path:["server","file"]},{path:["server","cache"]},{path:["server","project"]},{path:["server","script"]},{path:["server","settings"]},{path:["server","extension"]},{path:["server","extension","template"]},{path:["db","source"]},{path:["db","schema"]},{path:["db","table"]},{path:["workspace","project"]},{path:["workspace","file"]},{path:["workspace","remote"]},{path:["workspace","lock"]},{path:["workspace","backup"]},{path:["workspace","extension"]}];Ee();Ee();var r0="cli.out.help.commands",n0={extension:"ext",project:"proj"};function Mb(r){return r.spec.summary??o0(r.path)}function xb(r){return r.spec.description??i0(r.path)}function xp(r){return r.help?.section??r0}function Fb(r){return r.title??Fp(r.path)}function Ib(r){return r.summary??us(r.path)}function Db(r){return r.description??Ip(r.path)}function Ab(r,e){return r.description?r.description:(z(e,`flag --${r.name} description requires command context`),a0(e.path,r.name))}function o0(r){return us(r)}function i0(r){return Ip(r)}function Fp(r){return`cli.cmd.${Dp(r)}.title`}function us(r){return`cli.cmd.${Dp(r)}.summary`}function Ip(r){return`cli.cmd.${Dp(r)}.desc`}function a0(r,e){return`cli.cmd.${Dp(r)}.${Ob(e)}`}function Dp(r){return r.map(s0).join(".")}function s0(r){return n0[r]??Ob(r)}function Ob(r){return r.replace(/-([a-z0-9])/g,(e,t)=>t.toUpperCase())}function _b(r){let e=new Map;for(let t of r){let n=t.path.join(" ");z(!e.has(n),`Duplicate CLI command path: ${n}`),e.set(n,t),c0(t,n),l0(t,n),p0(t,n)}}function c0(r,e){z(r.path.length>0,"CLI command path must not be empty."),r.domain!=="common"&&z(r.path[0]===r.domain,`CLI command domain/path mismatch: ${e}`)}function l0(r,e){z(xp(r).trim(),`CLI command help section must not be empty: ${e}`),z(r.spec.name.trim(),`CLI command spec name must not be empty: ${e}`)}function p0(r,e){z(typeof r.createExecutor=="function",`CLI command createExecutor must be a function: ${e}`)}var Lb=["workspace","server","auth","db"];function Nb(){return Lb.map(r=>{let e=[r];return{title:Fp(e),commands:[{name:r,summary:us(e)}]}})}function Ap(r,e=[]){let t=Lb.map(o=>{let i=[o],a=r.filter(s=>s.domain===o);return{path:i,title:Fp(i),summary:us(i),description:Ip(i),sections:d0(a)}}),n=e.flatMap(o=>{let i=r.filter(a=>m0(a,o.path));return i.length===0?[]:[{path:o.path,title:Fb(o),summary:Ib(o),description:Db(o),sections:u0(o.path,i)}]});return[...t,...n]}function d0(r){return Wb(r,e=>e.help?.entry??e.path.slice(1).join(" "))}function u0(r,e){return Wb(e,t=>t.help?.entry??t.path.slice(r.length).join(" "))}function Wb(r,e){let t=new Map;for(let n of r){let o=xp(n),i=t.get(o)??[];i.push({name:e(n),summary:Mb(n)}),t.set(o,i)}return Array.from(t,([n,o])=>({title:n,commands:h0(o)}))}function m0(r,e){return r.path.length>e.length&&e.every((t,n)=>r.path[n]===t)}function h0(r){let e=[],t=new Set;for(let n of r)t.has(n.name)||(t.add(n.name),e.push(n));return e}var ff=class{commands;namespaces;topLevelHelpGroups;commandsByPath=new Map;namespacesByPath=new Map;constructor(e){_b(e),this.commands=[...e],this.namespaces=Ap(this.commands,Mp),this.topLevelHelpGroups=Nb();for(let t of this.commands)this.commandsByPath.set(t.path.join(" "),t);for(let t of this.namespaces)this.namespacesByPath.set(t.path.join(" "),t)}findCommand(e){return this.commandsByPath.get(e.join(" "))}findNamespace(e){return this.namespacesByPath.get(e.join(" "))}},gf=new ff(Tb),Ub=gf.commands,jb=gf.topLevelHelpGroups,gee=gf.namespaces;D();function qb(r){return Cf.renderCommandHelp(r)}function $b(r){return Cf.renderTopLevelHelp(r)}function Hb(r){return Cf.renderNamespaceHelp(r)}var f0=4,Bb=3,g0="[<options>]",Vb="value",y0=100,yf=class{renderCommandHelp(e){let t=e.spec,n=this.mergeGlobalFlags(e),o=t.usageArgs??g0,i=[d("cli.out.help.usageLine",{command:t.name,usageArgs:o})];return this.appendCommandDescription(i,e),this.appendFlags(i,n,e),this.appendExamples(i,t.examples),this.renderLines(i)}renderTopLevelHelp(e){let t=this.renderTopLevelUsage();return this.appendFlags(t,Yd),this.appendCommandGroups(t,e),t.push("",d("cli.out.help.commandHelpSee")),this.renderLines(t)}renderNamespaceHelp(e){let t=e.path.join(" "),n=[`${d("cli.out.help.usageHeader")} succapp ${t} <command> [<args>]`,"",d(e.description)];for(let o of e.sections){if(o.commands.length===0)continue;n.push("",d(o.title));let i=Math.max(...o.commands.map(a=>Dr(a.name)));for(let a of o.commands)n.push(ms(`${qo(a.name,i)} ${d(a.summary)}`,Bb))}return n.push("",d("cli.out.help.commandHelpRead",t)),this.renderLines(n)}renderTopLevelUsage(){let e=`${d("cli.out.help.usageHeader")} succapp `,t=" ".repeat(Dr(e)),n=[...Yd.map(a=>{let s=a.takesValue?` <${a.valueHint??Vb}>`:"";return`[--${a.name}${s}]`}),"<command>","[<args>]"],o=[],i=e;for(let a of n){let c=`${i}${i===e?"":" "}${a}`;if(i!==e&&Dr(c)>y0){o.push(i),i=`${t}${a}`;continue}i=c}return o.push(i),o}appendCommandDescription(e,t){e.push("",ms(d(xb(t))))}appendFlags(e,t,n){t.length!==0&&(e.push("",d("cli.out.help.options")),e.push(...this.renderFlags(t,n)))}appendExamples(e,t){if(!(!t||t.length===0)){e.push("",d("cli.out.help.examples"));for(let n of t)e.push(ms(n))}}appendCommandGroups(e,t){for(let n of t)this.appendCommandGroup(e,n)}appendCommandGroup(e,t){if(t.commands.length===0)return;e.push("",d(t.title));let n=Math.max(...t.commands.map(o=>Dr(o.name)));for(let o of t.commands)e.push(ms(`${qo(o.name,n)} ${d(o.summary)}`,Bb))}renderFlags(e,t){let n=e.map(i=>({left:this.renderFlagLeft(i),description:d(Ab(i,t))})),o=Math.max(...n.map(i=>Dr(i.left)));return n.map(i=>ms(`${qo(i.left,o)} ${i.description}`))}renderFlagLeft(e){let t=e.takesValue?` <${e.valueHint??Vb}>`:"",n=`--${e.name}${t}`;return e.alias?`-${e.alias}, ${n}`:` ${n}`}mergeGlobalFlags(e){let t=new Set(e.spec.flags.map(n=>n.name));return[...e.spec.flags,...Nr.filter(n=>!t.has(n.name)&&tn(e,n.name))]}renderLines(e){return`${e.join(`
|
|
94
106
|
`)}
|
|
95
|
-
`}},
|
|
107
|
+
`}},Cf=new yf;function ms(r,e=f0){return`${" ".repeat(e)}${r}`}function zb(r,e){let t=$b(e);r.result({help:t},()=>t)}function Kb(r,e){let t=qb(e);r.result({help:t},()=>t)}function Gb(r,e){let t=Hb(e);r.result({help:t},()=>t)}function Jb(r){r.result({version:ys},()=>`succapp ${ys}`)}F();B();function Xb(r){return new Sf(r).parse()}var Sf=class{constructor(e){this.args=e}parse(){let e=this.args.parsed,t=this.args.globalOptions;return this.checkCliInvocationUsage(t),{rawArgv:this.args.rawArgv,kind:this.args.kind,command:this.args.command,namespace:this.args.namespace,token:this.args.token,unknownCommand:this.args.unknownCommand,commandArgv:this.args.commandArgv,parsed:e,globalOptions:t}}validateGlobalOptions(e){let t=[],n=this.args.command;if(!n)return e.logLevel!==void 0&&Bo(e.logLevel)===void 0&&t.push(new R("err.cli.invalidChoice",Yb(e.logLevel))),this.args.kind==="unknown"||this.validateGlobalOptionsWithoutCommand(e,t),t;if(e.lockTimeout!==void 0&&tn(n,"lock-timeout")&&_t(e.lockTimeout,Yn)===void 0){let o=Pe("lock-timeout");t.push(new R("err.cli.invalidNonNegativeIntegerRange",{input:o,option:o,value:e.lockTimeout,max:Yn}))}return e.logLevel!==void 0&&Bo(e.logLevel)===void 0&&t.push(new R("err.cli.invalidChoice",Yb(e.logLevel))),e.workspace!==void 0&&!tn(n,"workspace")&&t.push(new R("err.cli.unknownOption",{option:Pe("workspace")})),e.server!==void 0&&!tn(n,"server")&&t.push(new R("err.cli.unknownOption",{option:Pe("server")})),e.lockTimeout!==void 0&&!tn(n,"lock-timeout")&&t.push(new R("err.cli.unknownOption",{option:Pe("lock-timeout")})),t}validateGlobalOptionsWithoutCommand(e,t){e.workspace!==void 0&&this.args.kind!=="top-help"&&t.push(new R("err.cli.unknownOption",{option:Pe("workspace")})),e.server!==void 0&&t.push(new R("err.cli.unknownOption",{option:Pe("server")})),e.lockTimeout!==void 0&&t.push(new R("err.cli.unknownOption",{option:Pe("lock-timeout")}))}checkCliInvocationUsage(e){if(this.args.helpOrVersionRequested)return;if(this.args.kind==="unknown")throw C0(this.args);let t=[...this.args.issues,...this.validateGlobalOptions(e)];if(t.length>0)throw S0(t)}};function C0(r){let e=r.unknownCommand,t=e?.path.join(" ")||r.token||"";return new R("err.cli.unknownCommand",{commandName:t,path:e?.path,helpCommand:e?.hint,suggestedCommands:e?.suggestedCommands})}function S0(r){return r.length===1?r[0]:new R("err.cli.invalidInvocation",{count:r.length,issues:r.map(e=>({errorCode:e.errorCode,properties:e.properties}))})}function Yb(r){let e=Pe("log-level");return{input:e,option:e,value:r,allowedValues:Zi}}var _p=class{async run(e,t){let n=Xb(e),o=await this.createWorkspaceForCommand(n,t);try{return await this.executeInvocation(n,t,o)}finally{o?.dispose()}}async executeInvocation(e,t,n){switch(e.kind){case"top-help":return zb(t.output,jb),0;case"command-help":return Kb(t.output,Qb(e)),0;case"namespace-help":return Gb(t.output,v0(e)),0;case"version":return Jb(t.output),0;case"unknown":Uo("Unknown command invocation should be rejected before runner.");case"run":{let o=Qb(e),i=o.createExecutor(),a={cwd:t.cwd,config:t.config,output:new kf(t.output,o,n),task:t.task,eventBus:t.eventBus,workspace:n,command:o,abortSignal:t.abortSignal};return i.execute(a,i.toOptions(e.parsed))}}}async createWorkspaceForCommand(e,t){if(e.kind!=="run"||!e.command)return;let n=e.command.workspaceTarget;if(n==="none")return;let o=e.command.allowUninitializedWorkspaceTarget===!0,i=await PC({cwd:t.cwd,workspace:t.config.workspace,env:t.env,required:n!=="optional"||!!t.config.workspace&&!o});if(i)return wp({root:i,eventBus:t.eventBus,lockWait:t.config.lockTimeout})}},kf=class{constructor(e,t,n){this.delegate=e;this.command=t;this.workspace=n}result(e,t){this.delegate.result(this.withCommandInfo(e),t)}content(e,t,n){this.delegate.content(this.withCommandInfo(e),t,n)}progress(e,t){this.delegate.progress(e,t)}detail(e,t){this.delegate.detail(this.withCommandInfo(e),t)}info(e){this.delegate.info(e)}warning(e){this.delegate.warning(e)}error(e){this.delegate.error(e)}withCommandInfo(e){let t={...e};Object.hasOwn(t,"domain")||(t.domain=this.command.domain),Object.hasOwn(t,"command")||(t.command=this.command.spec.name);let n=Op(t.workspaceRoot)??Op(t.workspace)??this.workspace?.root;n!==void 0&&!Object.hasOwn(t,"workspaceRoot")&&(t.workspaceRoot=n);let o=Op(t.serverUrl)??Op(t.server);return o!==void 0&&!Object.hasOwn(t,"serverUrl")&&(t.serverUrl=o),t}};function Qb(r){return z(r.command,`Missing command for CLI invocation kind: ${r.kind}`),r.command}function v0(r){return z(r.namespace,`Missing namespace for CLI invocation kind: ${r.kind}`),r.namespace}function Op(r){return typeof r=="string"?r:void 0}D();function Zb(r){k0(r),ub()}function k0(r){let e=r.localizer.unresolvedLocale;!e||!r.args.parsed.has("locale")||r.formatter.warning(d("cli.host.localeFallback",e))}D();function eE(r){return{yellow:e=>hs(e,33,r),green:e=>hs(e,32,r),red:e=>hs(e,31,r),dim:e=>hs(e,2,r),bold:e=>hs(e,1,r)}}function hs(r,e,t){return t?`\x1B[${e}m${r}\x1B[0m`:r}var wf="\r\x1B[2K",Lp=class{constructor(e,t,n){this.env=e;this.logFile=t;this.errorDisplayContext=n;this.colors=eE(e.color)}colors;progressActive=!1;lastProgressText="";result(e,t){this.finishProgressLine();let n=t?w0(t()):JSON.stringify(e,null,2);n&&this.env.writeOut(fs(n))}content(e,t,n){this.finishProgressLine(),this.env.writeOut(n?n():t)}progress(e,t){if(!this.env.isTty||!(this.env.isErrTty??this.env.isTty)||!t)return;let n=t();if(e.retained===!0){this.writeRetainedProgressLine(n);return}n?this.writeProgressLine(n):this.clearProgressLine()}detail(e,t){this.finishProgressLine();let n=t?.();n&&this.env.writeOut(fs(n))}info(e){this.finishProgressLine(),this.env.writeErr(fs(d("cli.out.human.info",e)))}warning(e){this.finishProgressLine(),this.env.writeErr(fs(this.colors.yellow(d("cli.out.human.warning",e))))}error(e){this.finishProgressLine();let t=_s(e,this.errorDisplayContext),n=[this.colors.red(d("cli.out.human.error",t.message))];t.details&&t.details.length>0&&n.push(...t.details.map(o=>this.colors.dim(` - ${o}`))),t.hint&&n.push(this.colors.dim(d("cli.out.human.hint",t.hint))),t.internal&&this.logFile&&n.push(this.colors.dim(d("cli.out.human.seeLogs",this.logFile))),this.env.writeErr(`${n.join(`
|
|
96
108
|
`)}
|
|
97
|
-
`)}writeProgressLine(e){e!==this.lastProgressText&&(this.env.writeErr(`${
|
|
98
|
-
`),this.progressActive=!1,this.lastProgressText="")}clearProgressLine(){this.progressActive&&(this.env.writeErr(
|
|
109
|
+
`)}writeProgressLine(e){e!==this.lastProgressText&&(this.env.writeErr(`${wf}${this.colors.dim(e)}`),this.progressActive=!0,this.lastProgressText=e)}writeRetainedProgressLine(e){if(e){this.env.writeErr(`${wf}${fs(this.colors.dim(e))}`),this.progressActive=!1,this.lastProgressText="";return}this.finishProgressLine()}finishProgressLine(){this.progressActive&&(this.env.writeErr(`
|
|
110
|
+
`),this.progressActive=!1,this.lastProgressText="")}clearProgressLine(){this.progressActive&&(this.env.writeErr(wf),this.progressActive=!1,this.lastProgressText="")}};function w0(r){return typeof r=="string"?r:me(r)}function fs(r){return r.endsWith(`
|
|
99
111
|
`)?r:`${r}
|
|
100
|
-
`}
|
|
101
|
-
`)}writeErrJson(e,t){
|
|
102
|
-
`)}};function YP(r){U(!Object.hasOwn(r,"kind"),"Output data cannot contain reserved field: kind")}function Vl(r){return $l(r,new WeakSet)}function $l(r,e){if(r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="bigint")return r.toString();if(typeof r=="symbol")return String(r);if(typeof r=="function")return`[Function ${r.name||"anonymous"}]`;if(r instanceof Error)return $A(r,e);if(Array.isArray(r))return e.has(r)?"[Circular]":(e.add(r),r.map(t=>$l(t,e)));if(typeof r=="object"){if(e.has(r))return"[Circular]";e.add(r);let t={};for(let[n,o]of Object.entries(r))t[n]=$l(o,e);return t}return String(r)}function $A(r,e){if(e.has(r))return"[Circular]";e.add(r);let t={name:r.name,message:r.message};r.stack&&(t.stack=r.stack);let n="cause"in r?r.cause:void 0;return n!==void 0&&(t.cause=$l(n,e)),t}var Hl=class{constructor(e){this.delegate=e}result(e,t){this.delegate.result(e,t)}content(e,t,n){this.delegate.content(e,t,n)}progress(e,t){}detail(e,t){}info(e){}warning(e){this.delegate.warning(e)}error(e){this.delegate.error(e)}};Ce();var zl=class{constructor(e,t){this.argv=e;this.commands=[...t].sort((n,o)=>o.path.length-n.path.length),this.namespaces=[...Nl(t,Il)].sort((n,o)=>o.path.length-n.path.length);for(let n of Pr)this.globalFlagsByName.set(n.name,n),n.alias&&this.globalFlagsByAlias.set(n.alias,n)}commands;namespaces;globalFlagsByName=new Map;globalFlagsByAlias=new Map;resolve(){let e=this.locateCommandPath(this.argv);if(e.helpToken)return this.resolveHelpCommand(e.helpToken);if(e.command)return{kind:"run",command:e.command,commandArgv:en(this.argv,e.commandIndexes)};if(e.namespace&&this.shouldShowNamespaceHelp(e))return{kind:"namespace-help",namespace:e.namespace,commandArgv:en(this.argv,e.namespaceIndexes)};if(e.namespace){let t=this.createNamespaceUnknownCommand(e);return{kind:"unknown",token:t.path[0],unknownCommand:t,commandArgv:en(this.argv,e.tokens.map(n=>n.index))}}if(e.firstToken){let t=XP(e.firstToken.value);return{kind:"unknown",token:e.firstToken.value,unknownCommand:t,commandArgv:en(this.argv,[e.firstToken.index])}}return{kind:"top-help",commandArgv:this.argv}}resolveHelpCommand(e){let t=en(this.argv,[e.index]),n=this.locateCommandPath(t);if(!n.firstToken)return{kind:"top-help",commandArgv:t,fromHelpToken:!0};if(n.command)return{kind:"command-help",command:n.command,commandArgv:en(t,n.commandIndexes),fromHelpToken:!0};if(n.namespace&&this.shouldShowNamespaceHelp(n))return{kind:"namespace-help",namespace:n.namespace,commandArgv:en(t,n.namespaceIndexes),fromHelpToken:!0};if(n.namespace){let i=this.createNamespaceUnknownCommand(n);return{kind:"unknown",token:i.path[0],unknownCommand:i,commandArgv:en(t,n.tokens.map(a=>a.index))}}let o=XP(n.firstToken.value);return{kind:"unknown",token:n.firstToken.value,unknownCommand:o,commandArgv:en(t,[n.firstToken.index])}}shouldShowNamespaceHelp(e){return!e.stoppedAtDoubleDash&&e.tokens.length===e.namespaceIndexes.length}createNamespaceUnknownCommand(e){let t=HA(e),n=e.tokens.length>0?e.tokens.map(i=>i.value):t.path,o=t.path.join(" ");return{path:n,hint:`succapp ${o} --help`}}locateCommandPath(e){let t=this.collectPathTokens(e),n=t.tokens,o=n[0];if(!o)return{commandIndexes:[],namespaceIndexes:[],tokens:n,stoppedAtDoubleDash:t.stoppedAtDoubleDash};if(o.value==="help")return{firstToken:o,helpToken:o,commandIndexes:[],namespaceIndexes:[],tokens:n,stoppedAtDoubleDash:t.stoppedAtDoubleDash};let i=this.findCommandByPath(n),a=this.findNamespaceByPath(n);return{command:i,commandIndexes:i?n.slice(0,i.path.length).map(s=>s.index):[],namespace:a,namespaceIndexes:a?n.slice(0,a.path.length).map(s=>s.index):[],tokens:n,firstToken:o,stoppedAtDoubleDash:t.stoppedAtDoubleDash}}findCommandByPath(e){return this.commands.find(t=>t.path.every((n,o)=>e[o]?.value===n))}findNamespaceByPath(e){return this.namespaces.find(t=>t.path.every((n,o)=>e[o]?.value===n))}collectPathTokens(e){let t=[],n=!1;for(let o=0;o<e.length;o++){let i=e[o];if(i==="--"){n=!0;break}if(!Oo(i)){t.push({value:i,index:o});continue}let a=this.consumeKnownGlobalToken(e,o);a!==void 0&&(o=a)}return{tokens:t,stoppedAtDoubleDash:n}}consumeKnownGlobalToken(e,t){let n=e[t];return n.startsWith("--")?this.consumeKnownLongGlobalToken(e,n,t):this.consumeKnownShortGlobalToken(e,n,t)}consumeKnownLongGlobalToken(e,t,n){let o=t.indexOf("="),i=o>=0?t.slice(2,o):t.slice(2),a=this.globalFlagsByName.get(i);if(a)return a.takesValue&&o<0&&QP(e[n+1])?n+1:n}consumeKnownShortGlobalToken(e,t,n){let o=t.slice(1);for(let i=0;i<o.length;i++){let a=this.globalFlagsByAlias.get(o[i]);if(!a)return;if(a.takesValue)return i<o.length-1?n:QP(e[n+1])?n+1:n}return n}};function en(r,e){if(e.length===0)return r;let t=new Set(e);return r.filter((n,o)=>!t.has(o))}function HA(r){return U(r.namespace,"Missing namespace for located command path."),r.namespace}function XP(r){return{path:[r],hint:"succapp --help"}}function QP(r){return r!==void 0&&r!=="--"&&!Oo(r)}q();Ce();D();J();function ZP(r,e=AP){return new ah(r,e).read()}var zA={name:"succapp",flags:Pr,positionals:[],summary:"cli.cmd.root.summary"},KA={name:"succapp",flags:Pr,positionals:[{name:"arg",repeatable:!0}],summary:"cli.cmd.root.summary"},ah=class{constructor(e,t){this.argv=e;this.commands=t}commands;read(){let e=new zl(this.argv,this.commands).resolve(),t=YA(GA(e),e.commandArgv),n=jg(t.parsed),o=this.resolveDispatch(e,n);return{rawArgv:this.argv,kind:o.kind,command:e.command,namespace:e.namespace,token:e.token,unknownCommand:e.unknownCommand,commandArgv:e.commandArgv,parsed:t.parsed,globalOptions:n,issues:t.issues,helpOrVersionRequested:o.helpOrVersionRequested}}resolveDispatch(e,t){return e.fromHelpToken?{kind:e.kind,helpOrVersionRequested:!0}:e.kind==="namespace-help"?t.version&&!t.help?{kind:"version",helpOrVersionRequested:!0}:{kind:e.kind,helpOrVersionRequested:t.help}:t.help&&e.command?{kind:"command-help",helpOrVersionRequested:!0}:t.help&&!e.token?{kind:"top-help",helpOrVersionRequested:!0}:t.version&&(e.command||!e.token)?{kind:"version",helpOrVersionRequested:!0}:{kind:e.kind,helpOrVersionRequested:!1}}};function GA(r){return(r.kind==="run"||r.kind==="command-help")&&r.command?JA(r.command.spec):r.kind==="unknown"?KA:zA}function JA(r){let e=new Set(r.flags.map(t=>t.name));return{...r,flags:[...r.flags,...Pr.filter(t=>!e.has(t.name))]}}function YA(r,e){return new sh(r).parse(e)}var sh=class{constructor(e){this.spec=e;for(let t of e.flags)this.addFlag(t)}longFlags=new Map;aliasFlags=new Map;issues=[];parse(e){let t=new ch;for(let n=0;n<e.length;n++){let o=e[n];if(o==="--"){t.pushPositionals(e.slice(n+1));break}if(o.startsWith("--")&&o.length>2){n=this.parseLongFlag(o,e,n,t);continue}if(o.startsWith("-")&&o.length>1){n=this.parseShortFlags(o,e,n,t);continue}t.pushPositional(o)}return this.validatePositionals(t),{parsed:t,issues:this.issues.slice()}}addFlag(e){U(!this.longFlags.has(e.name),`duplicate flag name: ${e.name}`),this.longFlags.set(e.name,e),e.alias&&(U(e.alias.length===1,`flag alias must be a single character: ${e.name}`),U(!this.aliasFlags.has(e.alias),`duplicate flag alias: ${e.alias}`),this.aliasFlags.set(e.alias,e))}parseLongFlag(e,t,n,o){let i=e.indexOf("="),a=i>=0?e.slice(2,i):e.slice(2),s=this.longFlags.get(a);if(!s)return this.pushIssue("err.cli.unknownOption",{option:`--${a}`}),n;if(s.takesValue){if(o.markFlag(s),i>=0)return o.addFlagValue(s,e.slice(i+1)),n;let c=t[n+1];return c===void 0||c==="--"||Oo(c)?(this.pushIssue("err.cli.missingOptionValue",{option:`--${s.name}`}),n):(o.addFlagValue(s,c),n+1)}return i>=0?(this.pushIssue("err.cli.unexpectedOptionValue",{option:`--${s.name}`}),n):(o.addBooleanFlag(s),n)}parseShortFlags(e,t,n,o){let i=e.slice(1);for(let a=0;a<i.length;a++){let s=i[a],c=this.aliasFlags.get(s);if(!c){this.pushIssue("err.cli.unknownOption",{option:`-${s}`});continue}if(!c.takesValue){o.addBooleanFlag(c);continue}o.markFlag(c);let l=i.slice(a+1);if(l){let m=l.startsWith("=")?l.slice(1):l;return o.addFlagValue(c,m),n}let p=t[n+1];return p===void 0||p==="--"||Oo(p)?(this.pushIssue("err.cli.missingOptionValue",{option:`-${s}`}),n):(o.addFlagValue(c,p),n+1)}return n}validatePositionals(e){let t=e.positional.length,n=this.spec.positionals.filter(a=>a.required===!0).length,i=this.spec.positionals.some(a=>a.repeatable===!0)?void 0:this.spec.positionals.length;if(t<n){let a=this.spec.positionals.find((s,c)=>s.required===!0&&c>=t);if(a){let s=this.spec.usageArgs?` ${this.spec.usageArgs}`:"";this.issues.push(new E("err.cli.missingArgument",{argument:nn("<{name}>{repeatable}",{name:a.name,repeatable:a.repeatable===!0?"...":""}),usage:nn("succapp {name}{usageArgs}",{name:this.spec.name,usageArgs:s})}))}else this.pushIssue("err.cli.missingArgument",{command:this.spec.name,min:n})}i!==void 0&&t>i&&this.pushIssue("err.cli.tooManyArguments",{command:this.spec.name,max:i})}pushIssue(e,t){this.issues.push(new E(e,t))}},ch=class{positionalValues=[];flags=new Map;get positional(){return this.positionalValues.slice()}has(e){return this.flags.has(e)}value(e){let t=this.flags.get(e);return t&&t.length>0?t[t.length-1]:void 0}values(e){return this.flags.get(e)?.slice()??[]}pushPositional(e){this.positionalValues.push(e)}pushPositionals(e){this.positionalValues.push(...e)}addBooleanFlag(e){this.ensureFlagPresent(e)}markFlag(e){this.ensureFlagPresent(e)}ensureFlagPresent(e){this.flags.has(e.name)||this.flags.set(e.name,[])}addFlagValue(e,t){if(!e.repeatable){this.flags.set(e.name,[t]);return}let n=this.flags.get(e.name)??[];n.push(t),this.flags.set(e.name,n)}};async function rR(r,e={}){let t=e.env??process.env,n=e.cwd??process.cwd(),o=e.signal??new AbortController().signal;ZA();let i=eO(t,e.stdio),a=ZP(r),s=iP({args:a,env:t}),c,l,p;try{l=await XA(s,t,n),c=eR(s,i,l.logFile,a);let m=await QA(s.locale);return KP({args:a,localizer:m,formatter:c}),p=new gi,await new Ul().run(a,{cwd:n,config:s,output:c,task:new Qa(c,o),eventBus:p,abortSignal:o,env:t})}catch(m){return l?.error(m instanceof Error?m:String(m)),(c??eR(s,i,l?.logFile,a)).error(m),Kh(m)}finally{p?.dispose(),await l?.close()}}async function XA(r,e,t){let n=await xh({level:r.logLevel,cwd:t,env:e});return gh(n),n}async function QA(r){let e=await Ya.create({locale:r,bundleDir:rO()});return Ch(e),e}function ZA(){mh(Jl("cli"))}function eO(r,e){if(e){let o=e.isTty??!1,i=e.isErrTty??o;return{writeOut:a=>e.writeOut(a),writeErr:a=>e.writeErr(a),isTty:o,isErrTty:i,color:o&&i&&!r.NO_COLOR}}let t=!!process.stdout.isTTY,n=!!process.stderr.isTTY;return{writeOut:o=>{process.stdout.write(o)},writeErr:o=>{process.stderr.write(o)},isTty:t,isErrTty:n,color:t&&n&&!r.NO_COLOR}}function eR(r,e,t,n){let o=r.outputMode==="json"?new ql(e):new Bl(e,t,tO(n));return r.quiet?new Hl(o):o}function tO(r){if(r.command)return{commandArgv:r.commandArgv,commandSpec:r.command.spec}}function rO(){return Ql(__dirname)??tR.join(__dirname,"l10n")}async function nO(){let r=new AbortController,e=oO(r);try{process.exitCode=await rR(process.argv.slice(2),{cwd:process.cwd(),env:process.env,signal:r.signal})}finally{e()}}function oO(r){let e=()=>{r.abort()};return process.once("SIGINT",e),process.once("SIGTERM",e),()=>{process.off("SIGINT",e),process.off("SIGTERM",e)}}require.main===module&&nO();0&&(module.exports={runCli});
|
|
112
|
+
`}Ee();re();var Wp=class{constructor(e){this.env=e}result(e,t){this.writeJson("result",e)}content(e,t,n){this.writeJson("result",{...e,encoding:"base64",content:t.toString("base64")})}progress(e,t){}detail(e,t){this.writeErrJson("log",O({level:"info",message:t?.(),...e}))}info(e){this.writeErrJson("log",{level:"info",message:e})}warning(e){this.writeErrJson("log",{level:"warn",message:e})}error(e){let t=_s(e);this.writeJson("error",O({code:t.code,name:t.name,message:t.message,hint:t.hint,details:Np(t.details),errorType:t.errorType,errorDialogStyle:t.errorDialogStyle,hintMessage:t.hintMessage,locationPath:Np(t.locationPath),internal:t.internal,category:t.category,style:t.style,properties:Np(t.properties),stack:t.stack,cause:Np(t.cause)}))}writeJson(e,t){tE(t),this.env.writeOut(`${JSON.stringify({kind:e,...t})}
|
|
113
|
+
`)}writeErrJson(e,t){tE(t),this.env.writeErr(`${JSON.stringify({kind:e,...t})}
|
|
114
|
+
`)}};function tE(r){z(!Object.hasOwn(r,"kind"),"Output data cannot contain reserved field: kind")}function Np(r){return Up(r,new WeakSet)}function Up(r,e){if(r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="bigint")return r.toString();if(typeof r=="symbol")return String(r);if(typeof r=="function")return`[Function ${r.name||"anonymous"}]`;if(r instanceof Error)return P0(r,e);if(Array.isArray(r))return e.has(r)?"[Circular]":(e.add(r),r.map(t=>Up(t,e)));if(typeof r=="object"){if(e.has(r))return"[Circular]";e.add(r);let t={};for(let[n,o]of Object.entries(r))t[n]=Up(o,e);return t}return String(r)}function P0(r,e){if(e.has(r))return"[Circular]";e.add(r);let t={name:r.name,message:r.message};r.stack&&(t.stack=r.stack);let n="cause"in r?r.cause:void 0;return n!==void 0&&(t.cause=Up(n,e)),t}var jp=class{constructor(e){this.delegate=e}result(e,t){this.delegate.result(e,t)}content(e,t,n){this.delegate.content(e,t,n)}progress(e,t){}detail(e,t){}info(e){}warning(e){this.delegate.warning(e)}error(e){this.delegate.error(e)}};var rE={cat:["show"],delete:["remove"],desc:["describe"],ls:["list"],read:["show"],rm:["remove"],run:["exec"],view:["open","show"]},Bp=class{constructor(e){this.commands=e}resolve(e){let t=N0(e.argv),n=this.commands.filter(i=>!e.namespacePath||_0(i.path,e.namespacePath)).map(i=>({command:i,score:b0(i,e.inputPath,t)})).filter(i=>i.score>=18).sort(R0)[0];if(!n)return;let o=E0(n.command,e.inputPath,t);return o.length>0?o:void 0}};function R0(r,e){return r.score!==e.score?e.score-r.score:r.command.path.length-e.command.path.length}function b0(r,e,t){let n=r.path,o=D0(n,e),i=A0(n,e),a=W0(n,e),s=O0(r.spec,t),c=e.some(l=>nE(l,n[n.length-1]));return 10+o*8+i*3+s*4+(c?8:0)-a*3}function E0(r,e,t){let n=T0(r,e),o=F0(r.spec,t),a=[I0(r.path,n,o),...r.spec.examples??[]];return iE(a).slice(0,2)}function T0(r,e){let t=r.path[r.path.length-1],n=e.findIndex(c=>Xn(c,t));if(r.spec.positionals.length===0)return[];let o=x0(r.spec),i=n>=0?n+1:M0(r.path,e),s=e.slice(i).filter(c=>!r.path.some(l=>Xn(l,c)));return o===void 0?s:s.slice(0,o)}function M0(r,e){let t=0;for(;t<r.length&&t<e.length&&Xn(r[t],e[t]);)t++;return t<e.length?t+1:e.length}function x0(r){if(!r.positionals.some(t=>t.repeatable))return r.positionals.length}function F0(r,e){let t=new Set(r.flags.map(i=>i.name)),n=new Set(r.flags.flatMap(i=>i.alias?[i.alias]:[])),o=e.filter(i=>i.name==="help"||i.name&&t.has(i.name)?!0:!!i.alias&&n.has(i.alias));return iE(o.map(i=>i.display))}function I0(r,e,t){return["succapp",...r,...e,...t].join(" ")}function D0(r,e){return r.filter(t=>e.some(n=>Xn(t,n))).length}function A0(r,e){let t=0;for(let n of r)e.some(o=>!Xn(n,o)&&nE(n,o))&&t++;return t}function O0(r,e){let t=new Set(r.flags.map(o=>o.name)),n=new Set(r.flags.flatMap(o=>o.alias?[o.alias]:[]));return e.filter(o=>o.name&&t.has(o.name)?!0:!!o.alias&&n.has(o.alias)).length}function _0(r,e){return e.every((t,n)=>Xn(r[n],t))}function Xn(r,e){return r!==void 0&&e!==void 0&&r.toLowerCase()===e.toLowerCase()}function nE(r,e){if(Xn(r,e))return!0;if(r===void 0||e===void 0)return!1;let t=r.toLowerCase(),n=e.toLowerCase();return L0(t,n)||t.length>=2&&n.length>=2&&(t.startsWith(n)||n.startsWith(t))?!0:U0(t,n)<=2}function L0(r,e){return(rE[r]??[]).includes(e)?!0:(rE[e]??[]).includes(r)}function N0(r){let e=[];for(let t of r){if(t==="--")break;if(t.startsWith("--")&&t.length>2){let n=t.indexOf("="),o=n>=0?t.slice(2,n):t.slice(2);e.push({name:o,display:n>=0?t.slice(0,n):t});continue}if(t.startsWith("-")&&t.length>1)for(let n of t.slice(1))e.push({alias:n,display:`-${n}`})}return e}function W0(r,e){return oE(r,e,(t,n)=>Xn(t,n)?0:1)}function U0(r,e){return oE([...r.toLowerCase()],[...e.toLowerCase()],(t,n)=>t===n?0:1)}function oE(r,e,t){let n=Array.from({length:e.length+1},(i,a)=>a),o=Array.from({length:e.length+1},()=>0);for(let i=1;i<=r.length;i++){o[0]=i;for(let a=1;a<=e.length;a++)o[a]=Math.min(n[a]+1,o[a-1]+1,n[a-1]+t(r[i-1],e[a-1]));for(let a=0;a<o.length;a++)n[a]=o[a]}return n[e.length]}function iE(r){let e=[],t=new Set;for(let n of r)t.has(n)||(t.add(n),e.push(n));return e}Ee();var Vp=class{constructor(e,t){this.argv=e;this.commands=[...t].sort((n,o)=>o.path.length-n.path.length),this.namespaces=[...Ap(t,Mp)].sort((n,o)=>o.path.length-n.path.length);for(let n of Nr)this.globalFlagsByName.set(n.name,n),n.alias&&this.globalFlagsByAlias.set(n.alias,n)}commands;namespaces;globalFlagsByName=new Map;globalFlagsByAlias=new Map;resolve(){let e=this.locateCommandPath(this.argv);if(e.helpToken)return this.resolveHelpCommand(e.helpToken);if(e.command)return{kind:"run",command:e.command,commandArgv:mn(this.argv,e.commandIndexes)};if(e.namespace&&this.shouldShowNamespaceHelp(e))return{kind:"namespace-help",namespace:e.namespace,commandArgv:mn(this.argv,e.namespaceIndexes)};if(e.namespace){let t=this.createNamespaceUnknownCommand(e);return{kind:"unknown",token:t.path[0],unknownCommand:t,commandArgv:mn(this.argv,e.tokens.map(n=>n.index))}}if(e.firstToken){let t=this.createTopLevelUnknownCommand(e);return{kind:"unknown",token:e.firstToken.value,unknownCommand:t,commandArgv:mn(this.argv,[e.firstToken.index])}}return{kind:"top-help",commandArgv:this.argv}}resolveHelpCommand(e){let t=mn(this.argv,[e.index]),n=this.locateCommandPath(t);if(!n.firstToken)return{kind:"top-help",commandArgv:t,fromHelpToken:!0};if(n.command)return{kind:"command-help",command:n.command,commandArgv:mn(t,n.commandIndexes),fromHelpToken:!0};if(n.namespace&&this.shouldShowNamespaceHelp(n))return{kind:"namespace-help",namespace:n.namespace,commandArgv:mn(t,n.namespaceIndexes),fromHelpToken:!0};if(n.namespace){let i=this.createNamespaceUnknownCommand(n);return{kind:"unknown",token:i.path[0],unknownCommand:i,commandArgv:mn(t,n.tokens.map(a=>a.index))}}let o=this.createTopLevelUnknownCommand(n);return{kind:"unknown",token:n.firstToken.value,unknownCommand:o,commandArgv:mn(t,[n.firstToken.index])}}shouldShowNamespaceHelp(e){return!e.stoppedAtDoubleDash&&e.tokens.length===e.namespaceIndexes.length}createNamespaceUnknownCommand(e){let t=j0(e),n=e.tokens.length>0?e.tokens.map(a=>a.value):t.path,o=t.path.join(" "),i=this.createUnknownCommandSuggestions(e,t);return{path:n,hint:`succapp ${o} --help`,...i?{suggestedCommands:i}:{}}}createTopLevelUnknownCommand(e){let t=e.firstToken?.value??"",n=this.createUnknownCommandSuggestions(e);return{path:[t],hint:"succapp --help",...n?{suggestedCommands:n}:{}}}createUnknownCommandSuggestions(e,t){return new Bp(this.commands).resolve({argv:this.argv,inputPath:e.tokens.map(n=>n.value),namespacePath:t?.path})}locateCommandPath(e){let t=this.collectPathTokens(e),n=t.tokens,o=n[0];if(!o)return{commandIndexes:[],namespaceIndexes:[],tokens:n,stoppedAtDoubleDash:t.stoppedAtDoubleDash};if(o.value==="help")return{firstToken:o,helpToken:o,commandIndexes:[],namespaceIndexes:[],tokens:n,stoppedAtDoubleDash:t.stoppedAtDoubleDash};let i=this.findCommandByPath(n),a=this.findNamespaceByPath(n);return{command:i,commandIndexes:i?n.slice(0,i.path.length).map(s=>s.index):[],namespace:a,namespaceIndexes:a?n.slice(0,a.path.length).map(s=>s.index):[],tokens:n,firstToken:o,stoppedAtDoubleDash:t.stoppedAtDoubleDash}}findCommandByPath(e){return this.commands.find(t=>t.path.every((n,o)=>e[o]?.value===n))}findNamespaceByPath(e){return this.namespaces.find(t=>t.path.every((n,o)=>e[o]?.value===n))}collectPathTokens(e){let t=[],n=!1;for(let o=0;o<e.length;o++){let i=e[o];if(i==="--"){n=!0;break}if(!oi(i)){t.push({value:i,index:o});continue}let a=this.consumeKnownGlobalToken(e,o);a!==void 0&&(o=a)}return{tokens:t,stoppedAtDoubleDash:n}}consumeKnownGlobalToken(e,t){let n=e[t];return n.startsWith("--")?this.consumeKnownLongGlobalToken(e,n,t):this.consumeKnownShortGlobalToken(e,n,t)}consumeKnownLongGlobalToken(e,t,n){let o=t.indexOf("="),i=o>=0?t.slice(2,o):t.slice(2),a=this.globalFlagsByName.get(i);if(a)return a.takesValue&&o<0&&aE(e[n+1])?n+1:n}consumeKnownShortGlobalToken(e,t,n){let o=t.slice(1);for(let i=0;i<o.length;i++){let a=this.globalFlagsByAlias.get(o[i]);if(!a)return;if(a.takesValue)return i<o.length-1?n:aE(e[n+1])?n+1:n}return n}};function mn(r,e){if(e.length===0)return r;let t=new Set(e);return r.filter((n,o)=>!t.has(o))}function j0(r){return z(r.namespace,"Missing namespace for located command path."),r.namespace}function aE(r){return r!==void 0&&r!=="--"&&!oi(r)}D();Ee();F();B();function sE(r,e=Ub){return new Pf(r,e).read()}var B0={name:"succapp",flags:Nr,positionals:[],summary:"cli.cmd.root.summary"},V0={name:"succapp",flags:Nr,positionals:[{name:"arg",repeatable:!0}],summary:"cli.cmd.root.summary"},Pf=class{constructor(e,t){this.argv=e;this.commands=t}commands;read(){let e=new Vp(this.argv,this.commands).resolve(),t=H0(q0(e),e.commandArgv),n=fC(t.parsed),o=this.resolveDispatch(e,n);return{rawArgv:this.argv,kind:o.kind,command:e.command,namespace:e.namespace,token:e.token,unknownCommand:e.unknownCommand,commandArgv:e.commandArgv,parsed:t.parsed,globalOptions:n,issues:t.issues,helpOrVersionRequested:o.helpOrVersionRequested}}resolveDispatch(e,t){return e.fromHelpToken?{kind:e.kind,helpOrVersionRequested:!0}:e.kind==="namespace-help"?t.version&&!t.help?{kind:"version",helpOrVersionRequested:!0}:{kind:e.kind,helpOrVersionRequested:t.help}:t.help&&e.command?{kind:"command-help",helpOrVersionRequested:!0}:t.help&&!e.token?{kind:"top-help",helpOrVersionRequested:!0}:t.version&&(e.command||!e.token)?{kind:"version",helpOrVersionRequested:!0}:{kind:e.kind,helpOrVersionRequested:!1}}};function q0(r){return(r.kind==="run"||r.kind==="command-help")&&r.command?$0(r.command.spec):r.kind==="unknown"?V0:B0}function $0(r){let e=new Set(r.flags.map(t=>t.name));return{...r,flags:[...r.flags,...Nr.filter(t=>!e.has(t.name))]}}function H0(r,e){return new Rf(r).parse(e)}var Rf=class{constructor(e){this.spec=e;for(let t of e.flags)this.addFlag(t)}longFlags=new Map;aliasFlags=new Map;issues=[];parse(e){let t=new bf;for(let n=0;n<e.length;n++){let o=e[n];if(o==="--"){t.pushPositionals(e.slice(n+1));break}if(o.startsWith("--")&&o.length>2){n=this.parseLongFlag(o,e,n,t);continue}if(o.startsWith("-")&&o.length>1){n=this.parseShortFlags(o,e,n,t);continue}t.pushPositional(o)}return this.validatePositionals(t),{parsed:t,issues:this.issues.slice()}}addFlag(e){z(!this.longFlags.has(e.name),`duplicate flag name: ${e.name}`),this.longFlags.set(e.name,e),e.alias&&(z(e.alias.length===1,`flag alias must be a single character: ${e.name}`),z(!this.aliasFlags.has(e.alias),`duplicate flag alias: ${e.alias}`),this.aliasFlags.set(e.alias,e))}parseLongFlag(e,t,n,o){let i=e.indexOf("="),a=i>=0?e.slice(2,i):e.slice(2),s=this.longFlags.get(a);if(!s)return this.pushIssue("err.cli.unknownOption",{option:`--${a}`}),n;if(s.takesValue){if(o.markFlag(s),i>=0)return o.addFlagValue(s,e.slice(i+1)),n;let c=t[n+1];return c===void 0||c==="--"||oi(c)?(this.pushIssue("err.cli.missingOptionValue",{option:`--${s.name}`}),n):(o.addFlagValue(s,c),n+1)}return i>=0?(this.pushIssue("err.cli.unexpectedOptionValue",{option:`--${s.name}`}),n):(o.addBooleanFlag(s),n)}parseShortFlags(e,t,n,o){let i=e.slice(1);for(let a=0;a<i.length;a++){let s=i[a],c=this.aliasFlags.get(s);if(!c){this.pushIssue("err.cli.unknownOption",{option:`-${s}`});continue}if(!c.takesValue){o.addBooleanFlag(c);continue}o.markFlag(c);let l=i.slice(a+1);if(l){let u=l.startsWith("=")?l.slice(1):l;return o.addFlagValue(c,u),n}let p=t[n+1];return p===void 0||p==="--"||oi(p)?(this.pushIssue("err.cli.missingOptionValue",{option:`-${s}`}),n):(o.addFlagValue(c,p),n+1)}return n}validatePositionals(e){let t=e.positional.length,n=this.spec.positionals.filter(a=>a.required===!0).length,i=this.spec.positionals.some(a=>a.repeatable===!0)?void 0:this.spec.positionals.length;if(t<n){let a=this.spec.positionals.find((s,c)=>s.required===!0&&c>=t);if(a){let s=this.spec.usageArgs?` ${this.spec.usageArgs}`:"";this.issues.push(new R("err.cli.missingArgument",{argument:gn("<{name}>{repeatable}",{name:a.name,repeatable:a.repeatable===!0?"...":""}),usage:gn("succapp {name}{usageArgs}",{name:this.spec.name,usageArgs:s})}))}else this.pushIssue("err.cli.missingArgument",{command:this.spec.name,min:n})}i!==void 0&&t>i&&this.pushIssue("err.cli.tooManyArguments",{command:this.spec.name,max:i})}pushIssue(e,t){this.issues.push(new R(e,t))}},bf=class{positionalValues=[];flags=new Map;get positional(){return this.positionalValues.slice()}has(e){return this.flags.has(e)}value(e){let t=this.flags.get(e);return t&&t.length>0?t[t.length-1]:void 0}values(e){return this.flags.get(e)?.slice()??[]}pushPositional(e){this.positionalValues.push(e)}pushPositionals(e){this.positionalValues.push(...e)}addBooleanFlag(e){this.ensureFlagPresent(e)}markFlag(e){this.ensureFlagPresent(e)}ensureFlagPresent(e){this.flags.has(e.name)||this.flags.set(e.name,[])}addFlagValue(e,t){if(!e.repeatable){this.flags.set(e.name,[t]);return}let n=this.flags.get(e.name)??[];n.push(t),this.flags.set(e.name,n)}};async function pE(r,e={}){let t=e.env??process.env,n=e.cwd??process.cwd(),o=e.signal??new AbortController().signal;G0();let i=J0(t,e.stdio),a=sE(r),s=db({args:a,env:t}),c,l,p;try{l=await z0(s,t,n),c=cE(s,i,l.logFile,a);let u=await K0(s.locale);return Zb({args:a,localizer:u,formatter:c}),p=new Ji,await new _p().run(a,{cwd:n,config:s,output:c,task:new As(c,o),eventBus:p,abortSignal:o,env:t})}catch(u){return l?.error(u instanceof Error?u:String(u)),(c??cE(s,i,l?.logFile,a)).error(u),lg(u)}finally{p?.dispose(),await l?.close()}}async function z0(r,e,t){let n=await $f({level:r.logLevel,cwd:t,env:e});return Df(n),n}async function K0(r){let e=await xs.create({locale:r,bundleDir:X0()});return Of(e),e}function G0(){xf(Hp("cli"))}function J0(r,e){if(e){let o=e.isTty??!1,i=e.isErrTty??o;return{writeOut:a=>e.writeOut(a),writeErr:a=>e.writeErr(a),isTty:o,isErrTty:i,color:o&&i&&!r.NO_COLOR}}let t=!!process.stdout.isTTY,n=!!process.stderr.isTTY;return{writeOut:o=>{process.stdout.write(o)},writeErr:o=>{process.stderr.write(o)},isTty:t,isErrTty:n,color:t&&n&&!r.NO_COLOR}}function cE(r,e,t,n){let o=r.outputMode==="json"?new Wp(e):new Lp(e,t,Y0(n));return r.quiet?new jp(o):o}function Y0(r){if(r.command)return{commandArgv:r.commandArgv,commandSpec:r.command.spec}}function X0(){return Gp(__dirname)??lE.join(__dirname,"l10n")}async function Q0(){let r=new AbortController,e=Z0(r);try{process.exitCode=await pE(process.argv.slice(2),{cwd:process.cwd(),env:process.env,signal:r.signal})}finally{e()}}function Z0(r){let e=()=>{r.abort()};return process.once("SIGINT",e),process.once("SIGTERM",e),()=>{process.off("SIGINT",e),process.off("SIGTERM",e)}}require.main===module&&Q0();0&&(module.exports={runCli});
|