orcaq 1.1.2 → 1.1.4
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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{CDJKw_ak.js → -sZwfgN3.js} +1 -1
- package/.output/public/_nuxt/1iqadsOZ.js +1 -0
- package/.output/public/_nuxt/2WkPV7Mp.js +22 -0
- package/.output/public/_nuxt/{Bq7OeLM1.js → 2XEGje4L.js} +1 -1
- package/.output/public/_nuxt/{atdCACH-.js → 5cKDQgbQ.js} +1 -1
- package/.output/public/_nuxt/{C3ZBsVV_.js → B8rT4ISg.js} +2 -2
- package/.output/public/_nuxt/{C7BQpy74.js → B9Yq_mZo.js} +1 -1
- package/.output/public/_nuxt/{Ca0KO9Xq.js → BCFLQ_rL.js} +1 -1
- package/.output/public/_nuxt/{BWebIWit.js → BIHJR--x.js} +1 -1
- package/.output/public/_nuxt/{DSaBCmOg.js → BN9sUptU.js} +1 -1
- package/.output/public/_nuxt/{BjqbQLK3.js → BNkZeak0.js} +1 -1
- package/.output/public/_nuxt/{DWqOZJe7.js → BNqd1Zca.js} +1 -1
- package/.output/public/_nuxt/BOZgY48g.js +1 -0
- package/.output/public/_nuxt/{Ci5B19-c.js → BQFJwqXj.js} +1 -1
- package/.output/public/_nuxt/{DAr5YiBT.js → BSBcOKKj.js} +1 -1
- package/.output/public/_nuxt/{dNPwafbq.js → BVl8VKr5.js} +1 -1
- package/.output/public/_nuxt/{B9uki8o2.js → BWphy0Pi.js} +1 -1
- package/.output/public/_nuxt/{DHAL8jJG.js → BXp87mMj.js} +4 -4
- package/.output/public/_nuxt/{8tyEaimf.js → BYY9MB0h.js} +1 -1
- package/.output/public/_nuxt/{BPACuoI0.js → BYav_5oM.js} +1 -1
- package/.output/public/_nuxt/{Bq47tjcm.js → B_J4rjuT.js} +1 -1
- package/.output/public/_nuxt/B_U4hCvn.js +7 -0
- package/.output/public/_nuxt/{B5WGo5x7.js → BdCzQG_z.js} +1 -1
- package/.output/public/_nuxt/{DsmBazLf.js → BdX6JvdH.js} +1 -1
- package/.output/public/_nuxt/{S1qa1a4x.js → BdaSWOzD.js} +1 -1
- package/.output/public/_nuxt/{BcsKoAPU.js → BfSmOVMj.js} +119 -119
- package/.output/public/_nuxt/{xp7rFxcm.js → BiMJOLHR.js} +1 -1
- package/.output/public/_nuxt/{BJCrbji-.js → BlRPNODF.js} +1 -1
- package/.output/public/_nuxt/BmREJclf.js +1 -0
- package/.output/public/_nuxt/{BoMjapT5.js → Bp1mKnR0.js} +1 -1
- package/.output/public/_nuxt/{Cnfx1zWl.js → BqZGP9WI.js} +1 -1
- package/.output/public/_nuxt/{BTYBVtfa.js → BqjMHuu8.js} +1 -1
- package/.output/public/_nuxt/{DuCDilAk.js → Brupmvos.js} +1 -1
- package/.output/public/_nuxt/{B6MkNyZd.js → BsA8eQHh.js} +1 -1
- package/.output/public/_nuxt/Bwe8I9vL.js +1 -0
- package/.output/public/_nuxt/{CrNLwdoE.js → BxdkXfb_.js} +1 -1
- package/.output/public/_nuxt/{BoIj4dtd.js → C20WaARR.js} +1 -1
- package/.output/public/_nuxt/{D4pAW_0T.js → C2kyA9ZS.js} +1 -1
- package/.output/public/_nuxt/C4HRDaS8.js +1 -0
- package/.output/public/_nuxt/{FDw04QOj.js → C5zTeLKh.js} +1 -1
- package/.output/public/_nuxt/{wRAs0MDn.js → C6r_nDJz.js} +1 -1
- package/.output/public/_nuxt/{ioXB9E2w.js → C6yADG7D.js} +1 -1
- package/.output/public/_nuxt/{vhkvHdfO.js → CBfQCVFf.js} +1 -1
- package/.output/public/_nuxt/{BzvSm28k.js → CDPrFhDR.js} +1 -1
- package/.output/public/_nuxt/{D-9vaM6z.js → CFOJLBf2.js} +1 -1
- package/.output/public/_nuxt/{63YtjFEq.js → CJhlBUX_.js} +1 -1
- package/.output/public/_nuxt/{iNy-Nl0_.js → CLXbv9E5.js} +1 -1
- package/.output/public/_nuxt/{DpEV6S2O.js → CMT3TfI0.js} +1 -1
- package/.output/public/_nuxt/{COHOh4Oe.js → CRX1CszZ.js} +1 -1
- package/.output/public/_nuxt/{Bmgr9uz4.js → CYaqLaPZ.js} +1 -1
- package/.output/public/_nuxt/{BEyCol50.js → Cih6uwf6.js} +1 -1
- package/.output/public/_nuxt/{BrNfge84.js → CmzTcheK.js} +1 -1
- package/.output/public/_nuxt/{DDebxXP-.js → CrNrSEll.js} +1 -1
- package/.output/public/_nuxt/{DJH-4SVI.js → CwgI7YXL.js} +1 -1
- package/.output/public/_nuxt/{DEZMnZ2r.js → CxSk31iP.js} +1 -1
- package/.output/public/_nuxt/CyEWn2V2.js +1 -0
- package/.output/public/_nuxt/{xOD4Ev56.js → D-pZQQ02.js} +1 -1
- package/.output/public/_nuxt/{BWZ7atse.js → D0mrO5vS.js} +1 -1
- package/.output/public/_nuxt/{DcCF9IZB.js → D3ujZRkc.js} +1 -1
- package/.output/public/_nuxt/{C2XHqDOf.js → D4PtOV7Y.js} +1 -1
- package/.output/public/_nuxt/{BJVPtt2X.js → D65Keo_g.js} +1 -1
- package/.output/public/_nuxt/{BtyzMl9p.js → D6c_aTbv.js} +1 -1
- package/.output/public/_nuxt/{DNoTlUiY.js → D9SUnmGh.js} +1 -1
- package/.output/public/_nuxt/{BpUSbMUb.js → DDIVwUV6.js} +1 -1
- package/.output/public/_nuxt/{C_7gtl40.js → DDS9xPxH.js} +1 -1
- package/.output/public/_nuxt/{ByiJDSw8.js → DEsdpKnm.js} +1 -1
- package/.output/public/_nuxt/{CMkzSwnO.js → DHnV-0Qj.js} +1 -1
- package/.output/public/_nuxt/{COq7mAG7.js → DIoeBtoF.js} +3 -3
- package/.output/public/_nuxt/{ByibjLZn.js → DKJfWiWm.js} +1 -1
- package/.output/public/_nuxt/{DPIEiNwW.js → DKhuBYhy.js} +1 -1
- package/.output/public/_nuxt/DLTvS7Vr.js +2 -0
- package/.output/public/_nuxt/{dWu56FdP.js → DNgNuAci.js} +1 -1
- package/.output/public/_nuxt/{B8TrrBEb.js → DNpk_jbU.js} +1 -1
- package/.output/public/_nuxt/{C6dIAdHr.js → DQCTvlJf.js} +1 -1
- package/.output/public/_nuxt/DQf3b-ld.js +1 -0
- package/.output/public/_nuxt/{B46blMXm.js → DT4w6IwV.js} +1 -1
- package/.output/public/_nuxt/{CS9hqyP3.js → DUqYnCG7.js} +1 -1
- package/.output/public/_nuxt/{DkD29_YA.js → DYqNroD1.js} +1 -1
- package/.output/public/_nuxt/{Bmx1kTaZ.js → DZ9fd-xA.js} +1 -1
- package/.output/public/_nuxt/{qzrMNYut.js → DaiufW99.js} +1 -1
- package/.output/public/_nuxt/{Sf02B6Pt.js → DdRczQp2.js} +2 -2
- package/.output/public/_nuxt/{L2I3LmpB.js → DdW7QNKl.js} +1 -1
- package/.output/public/_nuxt/{B2IKcIj2.js → Ddtv9Dxp.js} +1 -1
- package/.output/public/_nuxt/Dfzgj0Oq.js +1 -0
- package/.output/public/_nuxt/DgRHzRny.js +1 -0
- package/.output/public/_nuxt/{CAnr3OhD.js → DijSUoYv.js} +1 -1
- package/.output/public/_nuxt/Dm-rJ5VH.js +1 -0
- package/.output/public/_nuxt/{sk7V7xQl.js → DmpCN34M.js} +1 -1
- package/.output/public/_nuxt/{CHEpbbGc.js → DoB1FFC2.js} +1 -1
- package/.output/public/_nuxt/Dp2UQPgO.js +1 -0
- package/.output/public/_nuxt/{CycELG5y.js → DryPPXlb.js} +1 -1
- package/.output/public/_nuxt/{BogEzQi9.js → DyCQWd5B.js} +3 -3
- package/.output/public/_nuxt/{AymhMj9v.js → Ef-1UUMy.js} +1 -1
- package/.output/public/_nuxt/{MW5K_zef.js → HP3PGEjt.js} +1 -1
- package/.output/public/_nuxt/{B73IHAoF.js → KK3goksi.js} +1 -1
- package/.output/public/_nuxt/{kvtnkChG.js → MC96ynYQ.js} +1 -1
- package/.output/public/_nuxt/{BpvGVfME.js → N6_KTIJr.js} +1 -1
- package/.output/public/_nuxt/{Dq1JM9WZ.js → TKeZJpIw.js} +1 -1
- package/.output/public/_nuxt/{DVnDb6ua.js → UHOKyE8O.js} +1 -1
- package/.output/public/_nuxt/{Y1gXUmjt.js → Z42SRPvO.js} +1 -1
- package/.output/public/_nuxt/{DpT8FO1Q.js → _Od8x2z5.js} +1 -1
- package/.output/public/_nuxt/{DMmjWR_K.js → bpGjU0QQ.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/9b89410f-7683-420e-9dea-d15741f0e6ce.json +1 -0
- package/.output/public/_nuxt/{CsRSZpa6.js → doR1dsEF.js} +1 -1
- package/.output/public/_nuxt/{DGvAu532.js → e04t7nee.js} +1 -1
- package/.output/public/_nuxt/entry.DEE2Ngsu.css +1 -0
- package/.output/public/_nuxt/{Oe2GG0Lt.js → g4lEPr__.js} +1 -1
- package/.output/public/_nuxt/{Cq-MDPLE.js → l12ZvGEh.js} +1 -1
- package/.output/public/_nuxt/{CSQ0xnqv.js → u7qmw6wa.js} +1 -1
- package/.output/public/_nuxt/{MeLWmO7R.js → xoY3RXI7.js} +1 -1
- package/.output/public/_nuxt/{Bf6Q3Zl5.js → ziSTJBFH.js} +1 -1
- package/.output/server/chunks/build/client.manifest.mjs +651 -650
- package/.output/server/chunks/build/client.manifest.mjs.map +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +650 -650
- package/.output/server/package.json +1 -1
- package/package.json +1 -1
- package/.output/public/_nuxt/BL__uYa3.js +0 -1
- package/.output/public/_nuxt/BRFPdiIh.js +0 -1
- package/.output/public/_nuxt/BS-LtKx4.js +0 -1
- package/.output/public/_nuxt/BTheloyh.js +0 -1
- package/.output/public/_nuxt/Bj7ctTfH.js +0 -1
- package/.output/public/_nuxt/BpLDGvqy.js +0 -1
- package/.output/public/_nuxt/BqU89KuH.js +0 -2
- package/.output/public/_nuxt/CerLmMsC.js +0 -22
- package/.output/public/_nuxt/CtWq1MER.js +0 -7
- package/.output/public/_nuxt/Cww9dXBK.js +0 -1
- package/.output/public/_nuxt/DfNTLojg.js +0 -1
- package/.output/public/_nuxt/JOg_XIAv.js +0 -1
- package/.output/public/_nuxt/M6bBaUHa.js +0 -1
- package/.output/public/_nuxt/_qKPTuua.js +0 -1
- package/.output/public/_nuxt/builds/meta/7c171291-8bbd-4c4c-8904-0afae065b82e.json +0 -1
- package/.output/public/_nuxt/entry.DxCQuGXb.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{g as gt}from"./
|
|
1
|
+
import{g as gt}from"./BQFJwqXj.js";import{a as mt,g as lt,h as xt,d as kt}from"./B_J4rjuT.js";import{_ as n,g as _t,s as vt,a as bt,b as wt,t as Tt,q as St,c as R,d as G,e as $t,A as Mt}from"./BXp87mMj.js";import{d as et}from"./DQCTvlJf.js";import"./BfSmOVMj.js";var U=function(){var t=n(function(h,i,a,l){for(a=a||{},l=h.length;l--;a[h[l]]=i);return a},"o"),e=[6,8,10,11,12,14,16,17,18],s=[1,9],c=[1,10],r=[1,11],f=[1,12],u=[1,13],y=[1,14],g={trace:n(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:n(function(i,a,l,d,p,o,b){var k=o.length-1;switch(p){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:d.setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),d.setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),d.setAccDescription(this.$);break;case 12:d.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 13:d.addTask(o[k-1],o[k]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:s,12:c,14:r,16:f,17:u,18:y},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:s,12:c,14:r,16:f,17:u,18:y},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:n(function(i,a){if(a.recoverable)this.trace(i);else{var l=new Error(i);throw l.hash=a,l}},"parseError"),parse:n(function(i){var a=this,l=[0],d=[],p=[null],o=[],b=this.table,k="",C=0,K=0,dt=2,Q=1,yt=o.slice.call(arguments,1),_=Object.create(this.lexer),I={yy:{}};for(var O in this.yy)Object.prototype.hasOwnProperty.call(this.yy,O)&&(I.yy[O]=this.yy[O]);_.setInput(i,I.yy),I.yy.lexer=_,I.yy.parser=this,typeof _.yylloc>"u"&&(_.yylloc={});var Y=_.yylloc;o.push(Y);var ft=_.options&&_.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pt(w){l.length=l.length-2*w,p.length=p.length-w,o.length=o.length-w}n(pt,"popStack");function D(){var w;return w=d.pop()||_.lex()||Q,typeof w!="number"&&(w instanceof Array&&(d=w,w=d.pop()),w=a.symbols_[w]||w),w}n(D,"lex");for(var v,A,T,q,F={},N,M,tt,z;;){if(A=l[l.length-1],this.defaultActions[A]?T=this.defaultActions[A]:((v===null||typeof v>"u")&&(v=D()),T=b[A]&&b[A][v]),typeof T>"u"||!T.length||!T[0]){var X="";z=[];for(N in b[A])this.terminals_[N]&&N>dt&&z.push("'"+this.terminals_[N]+"'");_.showPosition?X="Parse error on line "+(C+1)+`:
|
|
2
2
|
`+_.showPosition()+`
|
|
3
3
|
Expecting `+z.join(", ")+", got '"+(this.terminals_[v]||v)+"'":X="Parse error on line "+(C+1)+": Unexpected "+(v==Q?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(X,{text:_.match,token:this.terminals_[v]||v,line:_.yylineno,loc:Y,expected:z})}if(T[0]instanceof Array&&T.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+v);switch(T[0]){case 1:l.push(v),p.push(_.yytext),o.push(_.yylloc),l.push(T[1]),v=null,K=_.yyleng,k=_.yytext,C=_.yylineno,Y=_.yylloc;break;case 2:if(M=this.productions_[T[1]][1],F.$=p[p.length-M],F._$={first_line:o[o.length-(M||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(M||1)].first_column,last_column:o[o.length-1].last_column},ft&&(F._$.range=[o[o.length-(M||1)].range[0],o[o.length-1].range[1]]),q=this.performAction.apply(F,[k,K,C,I.yy,T[1],p,o].concat(yt)),typeof q<"u")return q;M&&(l=l.slice(0,-1*M*2),p=p.slice(0,-1*M),o=o.slice(0,-1*M)),l.push(this.productions_[T[1]][0]),p.push(F.$),o.push(F._$),tt=b[l[l.length-2]][l[l.length-1]],l.push(tt);break;case 3:return!0}}return!0},"parse")},m=function(){var h={EOF:1,parseError:n(function(a,l){if(this.yy.parser)this.yy.parser.parseError(a,l);else throw new Error(a)},"parseError"),setInput:n(function(i,a){return this.yy=a||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:n(function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var a=i.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},"input"),unput:n(function(i){var a=i.length,l=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),l.length-1&&(this.yylineno-=l.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:l?(l.length===d.length?this.yylloc.first_column:0)+d[d.length-l.length].length-l[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},"unput"),more:n(function(){return this._more=!0,this},"more"),reject:n(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:n(function(i){this.unput(this.match.slice(i))},"less"),pastInput:n(function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:n(function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:n(function(){var i=this.pastInput(),a=new Array(i.length+1).join("-");return i+this.upcomingInput()+`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as u,K as s,
|
|
1
|
+
import{r as u,K as s,G as h}from"./BfSmOVMj.js";function B(){const i=u(!1),d=u(0),c=u(null);return{isDownloading:i,downloadedBytes:d,error:c,downloadStream:async f=>{const{url:w,method:y="POST",body:m,filename:a,contentType:v}=f;i.value=!0,d.value=0,c.value=null;const l=s.loading(`Exporting ${a}...`,{description:"Starting download..."});try{const e=await fetch(w,{method:y,headers:{"Content-Type":"application/json"},body:m?JSON.stringify(m):void 0});if(!e.ok){let n="Export failed";try{n=(await e.json()).message||n}catch{}throw new Error(n)}if(!e.body)throw new Error("Response body is not available for streaming");const o=e.body.getReader(),b=[];let t=0;for(;;){const{done:n,value:p}=await o.read();if(n)break;b.push(p),t+=p.length,d.value=t;const R=h(t);s.loading(`Exporting ${a}...`,{id:l,description:`Downloaded ${R}`,position:"bottom-right"})}const E=new Blob(b,{type:v||e.headers.get("Content-Type")||"application/octet-stream"}),g=URL.createObjectURL(E),r=document.createElement("a");r.href=g,r.download=a,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(g);const x=h(t);return s.success(`Exported ${a}`,{id:l,description:`${x} downloaded`,position:"bottom-right"}),{success:!0,size:t}}catch(e){const o=e;return c.value=o,s.error("Export failed",{id:l,description:o.message,position:"bottom-right"}),{success:!1,error:o}}finally{i.value=!1}}}}export{B as u};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{d as
|
|
1
|
+
import{d as M,bM as pe,k as $,w as l,p as re,g as t,o as s,D as ce,c as N,bl as te,n as O,f as e,z as p,j as fe,A as K,t as b,r as C,e as u,m as n,l as V,F as I,s as A,aY as ve,a_ as ge,a0 as ue,bj as _e,a$ as be,bQ as he,au as ie,a1 as ye,X as xe,Y as $e,Z as Ce,bm as Y,_ as ke,h as Ne,bR as Te,x as we,B as Pe,bn as Ee,$ as Se,W as De,a8 as je,a3 as Re,av as de,P as Be,i as ze,E as Z,aZ as Ie,aq as Le}from"./BfSmOVMj.js";import{C as Oe,a as Ue,b as Ve}from"./BSBcOKKj.js";import{_ as Ae}from"./C20WaARR.js";import{u as Me,_ as qe}from"./BCFLQ_rL.js";import{u as Fe}from"./Cih6uwf6.js";import"./CS5akSNT.js";import"./C2kyA9ZS.js";const Ge=M({__name:"Collapsible",props:{defaultOpen:{type:Boolean},open:{type:Boolean},disabled:{type:Boolean},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{}},emits:["update:open"],setup(w,{emit:h}){const a=pe(w,h);return(k,g)=>(s(),$(t(Oe),re({"data-slot":"collapsible"},t(a)),{default:l(({open:T})=>[ce(k.$slots,"default",{open:T})]),_:3},16))}}),He=M({__name:"CollapsibleContent",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(w){const h=w;return(f,d)=>(s(),$(t(Ue),re({"data-slot":"collapsible-content"},h),{default:l(()=>[ce(f.$slots,"default")]),_:3},16))}}),Qe=M({__name:"CollapsibleTrigger",props:{asChild:{type:Boolean},as:{}},setup(w){const h=w;return(f,d)=>(s(),$(t(Ve),re({"data-slot":"collapsible-trigger"},h),{default:l(()=>[ce(f.$slots,"default")]),_:3},16))}}),me=M({__name:"PermissionBadge",props:{label:{},value:{type:[Boolean,String]},type:{default:"boolean"}},setup(w){const h=w,f=N(()=>h.type==="boolean"),d=N(()=>h.value===!0);return(a,k)=>{const g=K,T=te;return t(f)?(s(),$(T,{key:0,variant:"outline",class:O(["text-xs items-center flex gap-1 ",!t(d)&&"opacity-50"])},{default:l(()=>[e(g,{name:t(d)?"lucide:check":"lucide:x",class:O(t(fe)("size-3",t(d)&&"text-green-500"))},null,8,["name","class"]),p(" "+b(a.label),1)]),_:1},8,["class"])):(s(),$(T,{key:1,variant:"secondary",class:"text-xs"},{default:l(()=>[p(b(a.label)+": "+b(a.value),1)]),_:1}))}}}),Xe={class:"rounded-md border"},Ye={key:1,class:"ml-auto flex gap-1"},Ze={key:0,class:"border-t bg-muted/20 p-3"},Ke={class:"px-3 py-2 border-b border-border/50"},We={class:"flex flex-wrap gap-2"},Je={class:"flex border-b border-border/50"},es=["onClick"],ss={class:"max-h-[350px] overflow-y-auto"},ts={key:0,class:"flex flex-col items-center justify-center py-6 text-muted-foreground"},ns={class:"text-xs"},as={key:1,class:"divide-y divide-border/50"},os={class:"flex-1 min-w-0"},ls={class:"text-xs font-medium truncate"},is={class:"text-muted-foreground"},rs={class:"flex items-center gap-0.5"},cs={key:1,class:"flex items-center gap-2 p-3 text-xs text-muted-foreground bg-muted/30 rounded"},us=M({__name:"DatabasePermissionCard",props:{database:{},isExpanded:{type:Boolean},isCurrentDatabase:{type:Boolean},permissions:{}},emits:["toggle","updatePermission"],setup(w,{emit:h}){const f=w,d=h,a=C("tables"),k=[{id:"schemas",label:"Schemas",icon:"hugeicons:folder-02"},{id:"tables",label:"Tables",icon:"hugeicons:grid-table"},{id:"views",label:"Views",icon:"hugeicons:property-view"},{id:"functions",label:"Functions",icon:"gravity-ui:function"}],g=N(()=>{if(!f.permissions)return[];switch(a.value){case"schemas":return f.permissions.schemaPermissions;case"tables":return f.permissions.tablePermissions;case"views":return f.permissions.viewPermissions;case"functions":return f.permissions.functionPermissions;default:return[]}}),T=N(()=>{var c,m,_,P;return{tables:((c=f.permissions)==null?void 0:c.tablePermissions.length)??0,schemas:((m=f.permissions)==null?void 0:m.schemaPermissions.length)??0,views:((_=f.permissions)==null?void 0:_.viewPermissions.length)??0,functions:((P=f.permissions)==null?void 0:P.functionPermissions.length)??0}}),y=c=>{switch(c){case"table":return"hugeicons:grid-table";case"schema":return"hugeicons:folder-02";case"view":return"hugeicons:property-view";case"function":return"gravity-ui:function";default:return"hugeicons:knight-shield"}},D=N(()=>[{id:"connect",label:"CONNECT",value:f.database.canConnect,type:"boolean"},{id:"create",label:"CREATE",value:f.database.canCreate,type:"boolean"},{id:"temp",label:"TEMP",value:f.database.canTemp,type:"boolean"}]);return(c,m)=>{const _=K,P=te,R=ue,j=ge,B=be,X=ve,q=he;return s(),u("div",Xe,[n("div",{class:O(["flex items-center gap-1 px-3 py-2 cursor-pointer hover:bg-accent/50",!c.database.canConnect&&"opacity-50 cursor-not-allowed"]),onClick:m[0]||(m[0]=v=>c.database.canConnect&&d("toggle"))},[e(_,{name:c.isExpanded?"hugeicons:arrow-down-01":"hugeicons:arrow-right-01",class:O(["size-4 transition-transform",!c.database.canConnect&&"invisible"])},null,8,["name","class"]),e(_,{name:c.database.canConnect?"hugeicons:database":"hugeicons:database-locked",class:O(["size-4",c.database.canConnect?"text-yellow-400":"text-muted-foreground"])},null,8,["name","class"]),n("span",{class:O(["text-sm font-medium",!c.database.canConnect&&"text-muted-foreground"])},b(c.database.databaseName),3),c.database.canConnect?(s(),u("div",Ye,[c.database.canConnect?(s(),$(P,{key:0,variant:"outline",class:"text-xs"},{default:l(()=>m[1]||(m[1]=[p("CONNECT")])),_:1})):V("",!0),c.database.canCreate?(s(),$(P,{key:1,variant:"outline",class:"text-xs"},{default:l(()=>m[2]||(m[2]=[p("CREATE")])),_:1})):V("",!0),c.database.canTemp?(s(),$(P,{key:2,variant:"outline",class:"text-xs"},{default:l(()=>m[3]||(m[3]=[p("TEMP")])),_:1})):V("",!0)])):(s(),$(_,{key:0,name:"hugeicons:circle-lock-01",class:"size-3 text-muted-foreground ml-auto"}))],2),c.isExpanded&&c.database.canConnect?(s(),u("div",Ze,[n("div",Ke,[m[4]||(m[4]=n("p",{class:"text-xs text-muted-foreground mb-2"}," Database-level privileges: ",-1)),n("div",We,[(s(!0),u(I,null,A(t(D),v=>(s(),$(me,{key:v.id,label:v.label,value:v.value,type:v.type},null,8,["label","value","type"]))),128))])]),c.isCurrentDatabase?(s(),u(I,{key:0},[n("div",Je,[(s(),u(I,null,A(k,v=>n("button",{key:v.id,class:O(["flex items-center gap-1 px-3 py-1.5 text-xs transition-colors cursor-pointer",t(a)===v.id?"border-b-2 border-primary text-foreground":"text-muted-foreground border-b-2 border-transparent hover:text-foreground"]),onClick:L=>a.value=v.id},[e(_,{name:v.icon,class:"size-3"},null,8,["name"]),p(" "+b(v.label)+" ",1),e(P,{variant:"secondary",class:"ml-1 text-xs px-1 py-0"},{default:l(()=>[p(b(t(T)[v.id]),1)]),_:2},1024)],10,es)),64))]),n("div",ss,[t(g).length?(s(),u("div",as,[(s(!0),u(I,null,A(t(g),(v,L)=>(s(),u("div",{key:`${v.schemaName}-${v.objectName}-${L}`,class:"group flex items-center gap-2 px-3 py-2 hover:bg-accent/30"},[e(_,{name:y(v.objectType),class:"size-4 text-muted-foreground shrink-0"},null,8,["name"]),n("div",os,[n("p",ls,[n("span",is,b(v.schemaName)+".",1),p(b(v.objectName),1)])]),n("div",rs,[(s(!0),u(I,null,A(v.privileges,H=>(s(),$(P,{variant:"outline",class:"text-xs normal-case"},{default:l(()=>[p(b(H),1)]),_:2},1024))),256))]),e(q,null,{default:l(()=>[e(X,null,{default:l(()=>[e(j,{"as-child":""},{default:l(()=>[e(R,{variant:"ghost",size:"iconSm",onClick:_e(H=>d("updatePermission",v),["stop"])},{default:l(()=>[e(_,{name:"hugeicons:pencil-edit-02",class:"size-3"})]),_:2},1032,["onClick"])]),_:2},1024),e(B,null,{default:l(()=>m[5]||(m[5]=[p("Update Permission")])),_:1})]),_:2},1024)]),_:2},1024)]))),128))])):(s(),u("div",ts,[e(_,{name:"hugeicons:knight-shield",class:"size-8 mb-1 opacity-50"}),n("p",ns,"No "+b(t(a))+" permissions",1)]))])],64)):(s(),u("div",cs,[e(_,{name:"hugeicons:information-circle",class:"size-4"}),m[6]||(m[6]=n("span",null,"Connect to this database to view tables, schemas, and functions permissions.",-1))]))])):V("",!0)])}}}),ds={class:"grid gap-4 py-2"},ms={class:"grid gap-2"},ps={class:"grid gap-2"},fs={class:"grid gap-2"},vs={class:"grid gap-2"},gs={class:"grid grid-cols-2 md:grid-cols-3 gap-2"},_s={class:"text-xs"},bs={class:"grid gap-2"},hs=M({__name:"GrantRevokeDialog",props:{open:{type:Boolean},mode:{},roleName:{},permission:{},loading:{type:Boolean}},emits:["update:open","confirm"],setup(w,{emit:h}){const f=["SELECT","INSERT","UPDATE","DELETE","TRUNCATE","REFERENCES","TRIGGER"],d=["USAGE","CREATE"],a=["EXECUTE"],k=["USAGE","SELECT","UPDATE"],g=w,T=h,y=C("table"),D=C("public"),c=C(""),m=C([]),_=C([]);Me();const P=N(()=>{switch(y.value){case"table":return f;case"schema":return d;case"function":return a;case"sequence":return k;default:return[]}});ie(()=>g.open,x=>{x&&(g.permission?(y.value=g.permission.objectType,D.value=g.permission.schemaName,c.value=g.permission.objectName,_.value=[...g.permission.privileges],m.value=[...g.permission.privileges]):(y.value="table",D.value="public",c.value="",_.value=[],m.value=[]))});const R=N(()=>m.value),j=N(()=>f.filter(x=>!m.value.includes(x))),B=N(()=>R.value.length>0||j.value.length>0),X=N(()=>{const x=D.value||"<schema>",i=c.value||"<object>",F=g.roleName||"<role>",G=`${y.value.toUpperCase()} "${x}"."${i}"`,U=[];return R.value.length&&U.push(`GRANT ${R.value.join(", ")} ON ${G} TO "${F}";`),j.value.length&&U.push(`REVOKE ${j.value.join(", ")} ON ${G} FROM "${F}";`),U.length?U.join(`
|
|
2
2
|
|
|
3
|
-
`):"-- No permission changes"}),M=x=>{const i=m.value.indexOf(x);i>-1?m.value.splice(i,1):m.value.push(x)},v=()=>{B.value&&T("confirm",{objectType:y.value,schemaName:D.value,objectName:c.value,grant:j.value,revoke:R.value})},L=()=>T("update:open",!1),H=N(()=>g.mode==="grant"?`Grant Permission to ${g.roleName}`:`Update Permission for ${g.roleName}`);return(x,i)=>{const q=$e,F=Ce,U=xe,ne=Te,o=Ne,r=Pe,z=we,W=ke,J=Ee,ae=Ae,oe=Me,ee=ue,se=Q,E=Se,X=De,le=ye;return s(),$(le,{open:x.open,"onUpdate:open":i[3]||(i[3]=S=>T("update:open",S))},{default:l(()=>[e(X,{class:"max-w-[45vw]! w-[45vw]!"},{default:l(()=>[e(U,null,{default:l(()=>[e(q,null,{default:l(()=>[p(b(H.value),1)]),_:1}),e(F,null,{default:l(()=>i[4]||(i[4]=[p(" Tick to grant, untick to revoke privileges. ")])),_:1})]),_:1}),n("div",ds,[n("div",ms,[e(t(Z),null,{default:l(()=>i[5]||(i[5]=[p("Object Type")])),_:1}),e(W,{modelValue:y.value,"onUpdate:modelValue":i[0]||(i[0]=S=>y.value=S),disabled:x.mode==="update"},{default:l(()=>[e(o,null,{default:l(()=>[e(ne)]),_:1}),e(z,null,{default:l(()=>[e(r,{value:"table"},{default:l(()=>i[6]||(i[6]=[p("Table")])),_:1}),e(r,{value:"schema"},{default:l(()=>i[7]||(i[7]=[p("Schema")])),_:1}),e(r,{value:"function"},{default:l(()=>i[8]||(i[8]=[p("Function")])),_:1}),e(r,{value:"sequence"},{default:l(()=>i[9]||(i[9]=[p("Sequence")])),_:1})]),_:1})]),_:1},8,["modelValue","disabled"])]),n("div",ps,[e(t(Z),null,{default:l(()=>i[10]||(i[10]=[p("Schema")])),_:1}),e(J,{modelValue:D.value,"onUpdate:modelValue":i[1]||(i[1]=S=>D.value=S),disabled:x.mode==="update"},null,8,["modelValue","disabled"])]),n("div",fs,[e(t(Z),null,{default:l(()=>i[11]||(i[11]=[p("Object Name")])),_:1}),e(J,{modelValue:c.value,"onUpdate:modelValue":i[2]||(i[2]=S=>c.value=S),disabled:x.mode==="update"},null,8,["modelValue","disabled"])]),n("div",vs,[e(t(Z),null,{default:l(()=>i[12]||(i[12]=[p("Privileges")])),_:1}),n("div",gs,[(s(!0),u(I,null,A(P.value,S=>(s(),u("div",{key:S,class:"flex items-center gap-2 cursor-pointer"},[e(ae,{"model-value":m.value.includes(S),"onUpdate:modelValue":Hs=>M(S)},null,8,["model-value","onUpdate:modelValue"]),n("span",_s,b(S),1)]))),128))])]),n("div",bs,[e(t(Z),null,{default:l(()=>i[13]||(i[13]=[p("SQL Preview")])),_:1}),e(oe,{code:Y.value,"show-copy-button":"","max-height":"24rem"},null,8,["code"])])]),e(E,null,{default:l(()=>[e(ee,{variant:"outline",onClick:L},{default:l(()=>i[14]||(i[14]=[p(" Cancel ")])),_:1}),e(ee,{disabled:!B.value||x.loading,onClick:v},{default:l(()=>[x.loading?(s(),$(se,{key:0,name:"hugeicons:loading-03",class:"size-4 mr-2 animate-spin"})):V("",!0),p(" "+b(x.mode==="grant"?"Grant":"Update"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])}}}),ys={class:"px-4 py-3 shrink-0"},xs={class:"flex items-center gap-2 mb-2"},$s={key:0,class:"flex flex-wrap gap-2"},Cs={key:1,class:"mt-2 text-xs text-muted-foreground"},ks={class:"text-foreground"},Ns=G({__name:"RoleAttributesCard",props:{roleInfo:{}},setup(w){const h=w,f=N(()=>{if(!h.roleInfo)return[];const a=h.roleInfo;return[{id:"superuser",label:"Superuser",value:a.isSuperuser,type:"boolean"},{id:"login",label:"Can Login",value:a.canLogin,type:"boolean"},{id:"createdb",label:"Create DB",value:a.canCreateDb,type:"boolean"},{id:"createrole",label:"Create Role",value:a.canCreateRole,type:"boolean"},{id:"replication",label:"Replication",value:a.isReplication,type:"boolean"},{id:"connlimit",label:"Connections",value:a.connectionLimit===-1?"Unlimited":`${a.connectionLimit}`,type:"text"}]}),d=N(()=>{var a,k;return(k=(a=h.roleInfo)==null?void 0:a.memberOf)!=null&&k.length?h.roleInfo.memberOf:[]});return(a,k)=>{const g=Q,T=te;return s(),u("div",ys,[n("div",xs,[e(g,{name:"hugeicons:shield-01",class:"size-4"}),k[0]||(k[0]=n("p",{class:"text-sm font-medium"},"Role Attributes",-1))]),a.roleInfo?(s(),u("div",$s,[(s(!0),u(I,null,A(t(f),y=>(s(),$(me,{key:y.id,label:y.label,value:y.value,type:y.type},null,8,["label","value","type"]))),128)),a.roleInfo.validUntil?(s(),$(T,{key:0,variant:"secondary",class:"text-xs"},{default:l(()=>[e(g,{name:"lucide:calendar",class:"size-3 mr-1"}),p(" Expires: "+b(new Date(a.roleInfo.validUntil).toLocaleDateString()),1)]),_:1})):V("",!0)])):V("",!0),t(d).length?(s(),u("div",Cs,[k[1]||(k[1]=p(" Member of: ")),n("span",ks,b(t(d).join(", ")),1)])):V("",!0)])}}}),Ts={class:"flex flex-col h-full p-1 relative"},ws={class:"flex flex-col h-full border rounded-md overflow-hidden"},Ps={class:"flex items-center gap-3 px-4 py-1 bg-sidebar"},Es={class:"font-normal text-sm"},Ss={class:"ml-auto flex items-center gap-2"},Ds={key:0,class:"flex-1 flex items-center justify-center"},Rs={key:1,class:"flex-1 flex flex-col items-center justify-center p-4"},js={class:"text-sm text-destructive"},Bs={class:"px-4 pt-0 pb-3"},zs={class:"flex items-center gap-2 mb-2"},Is={class:"flex items-center gap-2"},Ls={variant:"secondary",class:"text-xs cursor-pointer text-muted-foreground flex items-center gap-1"},Os={class:"text-xs ml-1"},Us={key:0,class:"flex items-center gap-2 text-muted-foreground"},Vs={key:1,class:"text-sm text-muted-foreground"},As={key:2,class:"space-y-1"},Gs={class:"flex flex-col flex-1 min-h-0 p-4 pt-0"},Ms={class:"flex items-center gap-2 mb-3 shrink-0"},qs={key:0,class:"flex items-center gap-2 text-muted-foreground"},Fs={key:2,class:"space-y-1 flex-1 overflow-y-auto"},et=G({__name:"[roleName]",setup(w){const h=Re(),f=je(),d=N(()=>h.params.roleName),a=N(()=>f.selectedConnection),k=N(()=>{if(!a.value)return"";if(a.value.database)return a.value.database;const o=a.value.connectionString;if(!o)return"";try{return new URL(o).pathname.slice(1)||""}catch{const r=o.match(/\/([^/?]+)(\?|$)/);return(r==null?void 0:r[1])||""}}),g=o=>k.value.toLowerCase()===o.toLowerCase(),T=C(null),y=C([]),D=async()=>{if(!(!a.value||!d.value))try{const r=await $fetch("/api/database-roles/get-role",{method:"POST",body:{...K(a.value),roleName:d.value}});r&&(T.value={isSuperuser:r.isSuperuser,canLogin:r.canLogin,canCreateDb:r.canCreateDb,canCreateRole:r.canCreateRole,isReplication:r.isReplication,connectionLimit:r.connectionLimit,validUntil:r.validUntil,memberOf:r.memberOf})}catch(o){console.error("Error fetching role info:",o)}},c=C(!1),m=async()=>{if(!(!a.value||!d.value)){c.value=!0;try{const o=await $fetch("/api/database-roles/get-role-inheritance",{method:"POST",body:{...K(a.value),roleName:d.value}});y.value=o}catch(o){console.error("Error fetching role inheritance:",o),y.value=[]}finally{c.value=!1}}},_=C(!1),P=C(!1),j=C(null),R=C(null),B=async()=>{if(!(!a.value||!d.value)){_.value=!0,R.value=null;try{const o=await $fetch("/api/database-roles/get-permissions",{method:"POST",body:{...K(a.value),roleName:d.value}});j.value=o}catch(o){R.value=o instanceof Error?o.message:"Failed to fetch permissions",console.error("Error fetching permissions:",o)}finally{_.value=!1}}};de(()=>{B(),D(),m()}),ie(d,()=>{B(),D(),m()});const{isLoading:Y,databasePermissions:M,fetchDatabasePermissions:v}=qe(a),L=C(new Set),H=o=>{L.value.has(o)?L.value.delete(o):L.value.add(o)},x=o=>L.value.has(o);de(()=>v(d.value)),ie(d,o=>v(o));const i=C(!1),q=C("grant"),F=C(),U=o=>{q.value="update",F.value=o,i.value=!0},ne=async o=>{if(!(!a.value||!d.value)){P.value=!0;try{const r=[];o.grant.length>0&&r.push($fetch("/api/database-roles/grant-permission",{method:"POST",body:{...K(a.value),roleName:d.value,objectType:o.objectType,schemaName:o.schemaName,objectName:o.objectName,privileges:o.grant}})),o.revoke.length>0&&r.push($fetch("/api/database-roles/revoke-permission",{method:"POST",body:{...K(a.value),roleName:d.value,objectType:o.objectType,schemaName:o.schemaName,objectName:o.objectName,privileges:o.revoke}})),await Promise.all(r),i.value=!1,await B()}catch(r){console.error("Error updating permissions:",r)}finally{P.value=!1}}};return(o,r)=>{const z=Q,W=ue,J=Xe,ae=He,oe=Fe,ee=te,se=Le;return s(),u("div",Ts,[n("div",ws,[n("div",Ps,[n("div",null,[n("p",Es,b(t(d)),1)]),n("div",Ss,[e(W,{variant:"outline",size:"iconSm",disabled:t(_),onClick:B},{default:l(()=>[e(z,{name:t(_)?"hugeicons:loading-03":"lucide:refresh-cw",class:O(["size-4",t(_)&&"animate-spin"])},null,8,["name","class"])]),_:1},8,["disabled"])])]),t(_)?(s(),u("div",Ds,[e(t(Be),{visible:t(_)},null,8,["visible"])])):t(R)?(s(),u("div",Rs,[e(z,{name:"hugeicons:information-circle",class:"size-12 text-destructive"}),n("p",js,b(t(R)),1),e(W,{variant:"outline",size:"sm",class:"mt-4 font-normal",onClick:B},{default:l(()=>r[1]||(r[1]=[p(" Retry ")])),_:1})])):t(j)?(s(),u(I,{key:2},[e(Ns,{"role-info":t(T)},null,8,["role-info"]),n("div",Bs,[e(oe,{"default-open":!0},{default:l(({open:E})=>[n("div",zs,[n("div",Is,[e(z,{name:"lucide:git-branch",class:"size-4 text-muted-foreground"}),r[2]||(r[2]=n("p",{class:"text-sm font-medium"},"Inherited from",-1))]),e(J,{"as-child":""},{default:l(()=>[n("div",Ls,[n("span",Os,b(E?"Collapse":"Expand"),1),e(z,{name:"lucide:chevron-down",class:O(["size-4 transition-transform",E&&"rotate-180"])},null,8,["class"])])]),_:2},1024)]),e(ae,null,{default:l(()=>[t(c)?(s(),u("div",Us,[e(z,{name:"hugeicons:loading-03",class:"size-4 animate-spin"}),r[3]||(r[3]=n("span",{class:"text-sm"},"Loading inheritance...",-1))])):t(y).length===0?(s(),u("div",Vs," No inherited roles ")):(s(),u("div",As,[(s(!0),u(I,null,A(t(y),(X,le)=>(s(),u("div",{key:`${X.roleName}-${le}`,class:"flex items-center text-sm gap-1 hover:bg-accent rounded-sm",style:Ie({paddingLeft:`${X.depth*16}px`})},[e(z,{name:"lucide:corner-down-right",class:"size-3 text-muted-foreground"}),n("span",null,b(X.roleName),1)],4))),128))]))]),_:1})]),_:1})]),n("div",Gs,[n("div",Ms,[e(z,{name:"hugeicons:database",class:"size-5 text-yellow-400"}),r[4]||(r[4]=n("p",{class:"text-sm font-medium"},"Database Access",-1)),e(ee,{variant:"secondary",class:"text-xs"},{default:l(()=>[p(b(t(M).filter(E=>E.canConnect).length),1)]),_:1})]),t(Y)?(s(),u("div",qs,[e(z,{name:"hugeicons:loading-03",class:"size-4 animate-spin"}),r[5]||(r[5]=n("span",{class:"text-sm"},"Loading databases...",-1))])):t(M).length===0?(s(),$(se,{key:1,title:"No permissions found",desc:"No database permissions were found for this role."})):(s(),u("div",Fs,[(s(!0),u(I,null,A(t(M),E=>(s(),$(us,{key:E.databaseName,database:E,"is-expanded":x(E.databaseName),"is-current-database":g(E.databaseName),permissions:t(j),onToggle:X=>H(E.databaseName),onUpdatePermission:U},null,8,["database","is-expanded","is-current-database","permissions","onToggle"]))),128))]))])],64)):(s(),$(se,{key:3,icon:"hugeicons:shield-01",title:"No data available",desc:"No permissions data is available for the current selection."}))]),e(hs,{open:t(i),"onUpdate:open":r[0]||(r[0]=E=>ze(i)?i.value=E:null),mode:t(q),roleName:t(d),permission:t(F),loading:t(P),onConfirm:ne},null,8,["open","mode","roleName","permission","loading"])])}}});export{et as default};
|
|
3
|
+
`):"-- No permission changes"}),q=x=>{const i=m.value.indexOf(x);i>-1?m.value.splice(i,1):m.value.push(x)},v=()=>{B.value&&T("confirm",{objectType:y.value,schemaName:D.value,objectName:c.value,grant:R.value,revoke:j.value})},L=()=>T("update:open",!1),H=N(()=>g.mode==="grant"?`Grant Permission to ${g.roleName}`:`Update Permission for ${g.roleName}`);return(x,i)=>{const F=$e,G=Ce,U=xe,ne=Te,o=Ne,r=Pe,z=we,W=ke,J=Ee,ae=Ae,oe=qe,ee=ue,se=K,E=Se,Q=De,le=ye;return s(),$(le,{open:x.open,"onUpdate:open":i[3]||(i[3]=S=>T("update:open",S))},{default:l(()=>[e(Q,{class:"max-w-[45vw]! w-[45vw]!"},{default:l(()=>[e(U,null,{default:l(()=>[e(F,null,{default:l(()=>[p(b(H.value),1)]),_:1}),e(G,null,{default:l(()=>i[4]||(i[4]=[p(" Tick to grant, untick to revoke privileges. ")])),_:1})]),_:1}),n("div",ds,[n("div",ms,[e(t(Y),null,{default:l(()=>i[5]||(i[5]=[p("Object Type")])),_:1}),e(W,{modelValue:y.value,"onUpdate:modelValue":i[0]||(i[0]=S=>y.value=S),disabled:x.mode==="update"},{default:l(()=>[e(o,null,{default:l(()=>[e(ne)]),_:1}),e(z,null,{default:l(()=>[e(r,{value:"table"},{default:l(()=>i[6]||(i[6]=[p("Table")])),_:1}),e(r,{value:"schema"},{default:l(()=>i[7]||(i[7]=[p("Schema")])),_:1}),e(r,{value:"function"},{default:l(()=>i[8]||(i[8]=[p("Function")])),_:1}),e(r,{value:"sequence"},{default:l(()=>i[9]||(i[9]=[p("Sequence")])),_:1})]),_:1})]),_:1},8,["modelValue","disabled"])]),n("div",ps,[e(t(Y),null,{default:l(()=>i[10]||(i[10]=[p("Schema")])),_:1}),e(J,{modelValue:D.value,"onUpdate:modelValue":i[1]||(i[1]=S=>D.value=S),disabled:x.mode==="update"},null,8,["modelValue","disabled"])]),n("div",fs,[e(t(Y),null,{default:l(()=>i[11]||(i[11]=[p("Object Name")])),_:1}),e(J,{modelValue:c.value,"onUpdate:modelValue":i[2]||(i[2]=S=>c.value=S),disabled:x.mode==="update"},null,8,["modelValue","disabled"])]),n("div",vs,[e(t(Y),null,{default:l(()=>i[12]||(i[12]=[p("Privileges")])),_:1}),n("div",gs,[(s(!0),u(I,null,A(P.value,S=>(s(),u("div",{key:S,class:"flex items-center gap-2 cursor-pointer"},[e(ae,{"model-value":m.value.includes(S),"onUpdate:modelValue":Hs=>q(S)},null,8,["model-value","onUpdate:modelValue"]),n("span",_s,b(S),1)]))),128))])]),n("div",bs,[e(t(Y),null,{default:l(()=>i[13]||(i[13]=[p("SQL Preview")])),_:1}),e(oe,{code:X.value,"show-copy-button":"","max-height":"24rem"},null,8,["code"])])]),e(E,null,{default:l(()=>[e(ee,{variant:"outline",onClick:L},{default:l(()=>i[14]||(i[14]=[p(" Cancel ")])),_:1}),e(ee,{disabled:!B.value||x.loading,onClick:v},{default:l(()=>[x.loading?(s(),$(se,{key:0,name:"hugeicons:loading-03",class:"size-4 mr-2 animate-spin"})):V("",!0),p(" "+b(x.mode==="grant"?"Grant":"Update"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])}}}),ys={class:"px-4 py-3 shrink-0"},xs={class:"flex items-center gap-2 mb-2"},$s={key:0,class:"flex flex-wrap gap-2"},Cs={key:1,class:"mt-2 text-xs text-muted-foreground"},ks={class:"text-foreground"},Ns=M({__name:"RoleAttributesCard",props:{roleInfo:{}},setup(w){const h=w,f=N(()=>{if(!h.roleInfo)return[];const a=h.roleInfo;return[{id:"superuser",label:"Superuser",value:a.isSuperuser,type:"boolean"},{id:"login",label:"Can Login",value:a.canLogin,type:"boolean"},{id:"createdb",label:"Create DB",value:a.canCreateDb,type:"boolean"},{id:"createrole",label:"Create Role",value:a.canCreateRole,type:"boolean"},{id:"replication",label:"Replication",value:a.isReplication,type:"boolean"},{id:"connlimit",label:"Connections",value:a.connectionLimit===-1?"Unlimited":`${a.connectionLimit}`,type:"text"}]}),d=N(()=>{var a,k;return(k=(a=h.roleInfo)==null?void 0:a.memberOf)!=null&&k.length?h.roleInfo.memberOf:[]});return(a,k)=>{const g=K,T=te;return s(),u("div",ys,[n("div",xs,[e(g,{name:"hugeicons:shield-01",class:"size-4"}),k[0]||(k[0]=n("p",{class:"text-sm font-medium"},"Role Attributes",-1))]),a.roleInfo?(s(),u("div",$s,[(s(!0),u(I,null,A(t(f),y=>(s(),$(me,{key:y.id,label:y.label,value:y.value,type:y.type},null,8,["label","value","type"]))),128)),a.roleInfo.validUntil?(s(),$(T,{key:0,variant:"secondary",class:"text-xs"},{default:l(()=>[e(g,{name:"lucide:calendar",class:"size-3 mr-1"}),p(" Expires: "+b(new Date(a.roleInfo.validUntil).toLocaleDateString()),1)]),_:1})):V("",!0)])):V("",!0),t(d).length?(s(),u("div",Cs,[k[1]||(k[1]=p(" Member of: ")),n("span",ks,b(t(d).join(", ")),1)])):V("",!0)])}}}),Ts={class:"flex flex-col h-full p-1 relative"},ws={class:"flex flex-col h-full border rounded-md overflow-hidden"},Ps={class:"flex items-center gap-3 px-4 py-1 bg-sidebar"},Es={class:"font-normal text-sm"},Ss={class:"ml-auto flex items-center gap-2"},Ds={key:0,class:"flex-1 flex items-center justify-center"},js={key:1,class:"flex-1 flex flex-col items-center justify-center p-4"},Rs={class:"text-sm text-destructive"},Bs={class:"px-4 pt-0 pb-3"},zs={class:"flex items-center gap-2 mb-2"},Is={class:"flex items-center gap-2"},Ls={variant:"secondary",class:"text-xs cursor-pointer text-muted-foreground flex items-center gap-1"},Os={class:"text-xs ml-1"},Us={key:0,class:"flex items-center gap-2 text-muted-foreground"},Vs={key:1,class:"text-sm text-muted-foreground"},As={key:2,class:"space-y-1"},Ms={class:"flex flex-col flex-1 min-h-0 p-4 pt-0"},qs={class:"flex items-center gap-2 mb-3 shrink-0"},Fs={key:0,class:"flex items-center gap-2 text-muted-foreground"},Gs={key:2,class:"space-y-1 flex-1 overflow-y-auto"},et=M({__name:"[roleName]",setup(w){const h=je(),f=Re(),d=N(()=>h.params.roleName),a=N(()=>f.selectedConnection),k=N(()=>{if(!a.value)return"";if(a.value.database)return a.value.database;const o=a.value.connectionString;if(!o)return"";try{return new URL(o).pathname.slice(1)||""}catch{const r=o.match(/\/([^/?]+)(\?|$)/);return(r==null?void 0:r[1])||""}}),g=o=>k.value.toLowerCase()===o.toLowerCase(),T=C(null),y=C([]),D=async()=>{if(!(!a.value||!d.value))try{const r=await $fetch("/api/database-roles/get-role",{method:"POST",body:{...Z(a.value),roleName:d.value}});r&&(T.value={isSuperuser:r.isSuperuser,canLogin:r.canLogin,canCreateDb:r.canCreateDb,canCreateRole:r.canCreateRole,isReplication:r.isReplication,connectionLimit:r.connectionLimit,validUntil:r.validUntil,memberOf:r.memberOf})}catch(o){console.error("Error fetching role info:",o)}},c=C(!1),m=async()=>{if(!(!a.value||!d.value)){c.value=!0;try{const o=await $fetch("/api/database-roles/get-role-inheritance",{method:"POST",body:{...Z(a.value),roleName:d.value}});y.value=o}catch(o){console.error("Error fetching role inheritance:",o),y.value=[]}finally{c.value=!1}}},_=C(!1),P=C(!1),R=C(null),j=C(null),B=async()=>{if(!(!a.value||!d.value)){_.value=!0,j.value=null;try{const o=await $fetch("/api/database-roles/get-permissions",{method:"POST",body:{...Z(a.value),roleName:d.value}});R.value=o}catch(o){j.value=o instanceof Error?o.message:"Failed to fetch permissions",console.error("Error fetching permissions:",o)}finally{_.value=!1}}};de(()=>{B(),D(),m()}),ie(d,()=>{B(),D(),m()});const{isLoading:X,databasePermissions:q,fetchDatabasePermissions:v}=Fe(a),L=C(new Set),H=o=>{L.value.has(o)?L.value.delete(o):L.value.add(o)},x=o=>L.value.has(o);de(()=>v(d.value)),ie(d,o=>v(o));const i=C(!1),F=C("grant"),G=C(),U=o=>{F.value="update",G.value=o,i.value=!0},ne=async o=>{if(!(!a.value||!d.value)){P.value=!0;try{const r=[];o.grant.length>0&&r.push($fetch("/api/database-roles/grant-permission",{method:"POST",body:{...Z(a.value),roleName:d.value,objectType:o.objectType,schemaName:o.schemaName,objectName:o.objectName,privileges:o.grant}})),o.revoke.length>0&&r.push($fetch("/api/database-roles/revoke-permission",{method:"POST",body:{...Z(a.value),roleName:d.value,objectType:o.objectType,schemaName:o.schemaName,objectName:o.objectName,privileges:o.revoke}})),await Promise.all(r),i.value=!1,await B()}catch(r){console.error("Error updating permissions:",r)}finally{P.value=!1}}};return(o,r)=>{const z=K,W=ue,J=Qe,ae=He,oe=Ge,ee=te,se=Le;return s(),u("div",Ts,[n("div",ws,[n("div",Ps,[n("div",null,[n("p",Es,b(t(d)),1)]),n("div",Ss,[e(W,{variant:"outline",size:"iconSm",disabled:t(_),onClick:B},{default:l(()=>[e(z,{name:t(_)?"hugeicons:loading-03":"lucide:refresh-cw",class:O(["size-4",t(_)&&"animate-spin"])},null,8,["name","class"])]),_:1},8,["disabled"])])]),t(_)?(s(),u("div",Ds,[e(t(Be),{visible:t(_)},null,8,["visible"])])):t(j)?(s(),u("div",js,[e(z,{name:"hugeicons:information-circle",class:"size-12 text-destructive"}),n("p",Rs,b(t(j)),1),e(W,{variant:"outline",size:"sm",class:"mt-4 font-normal",onClick:B},{default:l(()=>r[1]||(r[1]=[p(" Retry ")])),_:1})])):t(R)?(s(),u(I,{key:2},[e(Ns,{"role-info":t(T)},null,8,["role-info"]),n("div",Bs,[e(oe,{"default-open":!0},{default:l(({open:E})=>[n("div",zs,[n("div",Is,[e(z,{name:"lucide:git-branch",class:"size-4 text-muted-foreground"}),r[2]||(r[2]=n("p",{class:"text-sm font-medium"},"Inherited from",-1))]),e(J,{"as-child":""},{default:l(()=>[n("div",Ls,[n("span",Os,b(E?"Collapse":"Expand"),1),e(z,{name:"lucide:chevron-down",class:O(["size-4 transition-transform",E&&"rotate-180"])},null,8,["class"])])]),_:2},1024)]),e(ae,null,{default:l(()=>[t(c)?(s(),u("div",Us,[e(z,{name:"hugeicons:loading-03",class:"size-4 animate-spin"}),r[3]||(r[3]=n("span",{class:"text-sm"},"Loading inheritance...",-1))])):t(y).length===0?(s(),u("div",Vs," No inherited roles ")):(s(),u("div",As,[(s(!0),u(I,null,A(t(y),(Q,le)=>(s(),u("div",{key:`${Q.roleName}-${le}`,class:"flex items-center text-sm gap-1 hover:bg-accent rounded-sm",style:Ie({paddingLeft:`${Q.depth*16}px`})},[e(z,{name:"lucide:corner-down-right",class:"size-3 text-muted-foreground"}),n("span",null,b(Q.roleName),1)],4))),128))]))]),_:1})]),_:1})]),n("div",Ms,[n("div",qs,[e(z,{name:"hugeicons:database",class:"size-5 text-yellow-400"}),r[4]||(r[4]=n("p",{class:"text-sm font-medium"},"Database Access",-1)),e(ee,{variant:"secondary",class:"text-xs"},{default:l(()=>[p(b(t(q).filter(E=>E.canConnect).length),1)]),_:1})]),t(X)?(s(),u("div",Fs,[e(z,{name:"hugeicons:loading-03",class:"size-4 animate-spin"}),r[5]||(r[5]=n("span",{class:"text-sm"},"Loading databases...",-1))])):t(q).length===0?(s(),$(se,{key:1,title:"No permissions found",desc:"No database permissions were found for this role."})):(s(),u("div",Gs,[(s(!0),u(I,null,A(t(q),E=>(s(),$(us,{key:E.databaseName,database:E,"is-expanded":x(E.databaseName),"is-current-database":g(E.databaseName),permissions:t(R),onToggle:Q=>H(E.databaseName),onUpdatePermission:U},null,8,["database","is-expanded","is-current-database","permissions","onToggle"]))),128))]))])],64)):(s(),$(se,{key:3,icon:"hugeicons:shield-01",title:"No data available",desc:"No permissions data is available for the current selection."}))]),e(hs,{open:t(i),"onUpdate:open":r[0]||(r[0]=E=>ze(i)?i.value=E:null),mode:t(F),roleName:t(d),permission:t(G),loading:t(P),onConfirm:ne},null,8,["open","mode","roleName","permission","loading"])])}}});export{et as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{g as le}from"./
|
|
1
|
+
import{g as le}from"./MC96ynYQ.js";import{s as he}from"./e04t7nee.js";import{_ as l,l as C,p as de,r as ge,I as j,c as X,i as F,ay as ue,ad as pe,ae as fe,af as ye}from"./BXp87mMj.js";import"./BfSmOVMj.js";const E=[];for(let t=0;t<256;++t)E.push((t+256).toString(16).slice(1));function me(t,e=0){return(E[t[e+0]]+E[t[e+1]]+E[t[e+2]]+E[t[e+3]]+"-"+E[t[e+4]]+E[t[e+5]]+"-"+E[t[e+6]]+E[t[e+7]]+"-"+E[t[e+8]]+E[t[e+9]]+"-"+E[t[e+10]]+E[t[e+11]]+E[t[e+12]]+E[t[e+13]]+E[t[e+14]]+E[t[e+15]]).toLowerCase()}let Y;const Ee=new Uint8Array(16);function _e(){if(!Y){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");Y=crypto.getRandomValues.bind(crypto)}return Y(Ee)}const be=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ne={randomUUID:be};function Se(t,e,n){var u;if(ne.randomUUID&&!t)return ne.randomUUID();t=t||{};const c=t.random??((u=t.rng)==null?void 0:u.call(t))??_e();if(c.length<16)throw new Error("Random bytes length must be >= 16");return c[6]=c[6]&15|64,c[8]=c[8]&63|128,me(c)}var q=function(){var t=l(function(v,s,i,a){for(i=i||{},a=v.length;a--;i[v[a]]=s);return i},"o"),e=[1,4],n=[1,13],c=[1,12],u=[1,15],h=[1,16],p=[1,20],y=[1,19],_=[6,7,8],b=[1,26],m=[1,24],w=[1,25],N=[6,7,11],J=[1,6,13,15,16,19,22],K=[1,33],Q=[1,34],A=[1,6,7,11,13,15,16,19,22],G={trace:l(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:l(function(s,i,a,o,g,r,U){var d=r.length-1;switch(g){case 6:case 7:return o;case 8:o.getLogger().trace("Stop NL ");break;case 9:o.getLogger().trace("Stop EOF ");break;case 11:o.getLogger().trace("Stop NL2 ");break;case 12:o.getLogger().trace("Stop EOF2 ");break;case 15:o.getLogger().info("Node: ",r[d].id),o.addNode(r[d-1].length,r[d].id,r[d].descr,r[d].type);break;case 16:o.getLogger().trace("Icon: ",r[d]),o.decorateNode({icon:r[d]});break;case 17:case 21:o.decorateNode({class:r[d]});break;case 18:o.getLogger().trace("SPACELIST");break;case 19:o.getLogger().trace("Node: ",r[d].id),o.addNode(0,r[d].id,r[d].descr,r[d].type);break;case 20:o.decorateNode({icon:r[d]});break;case 25:o.getLogger().trace("node found ..",r[d-2]),this.$={id:r[d-1],descr:r[d-1],type:o.getType(r[d-2],r[d])};break;case 26:this.$={id:r[d],descr:r[d],type:o.nodeType.DEFAULT};break;case 27:o.getLogger().trace("node found ..",r[d-3]),this.$={id:r[d-3],descr:r[d-1],type:o.getType(r[d-2],r[d])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:n,7:[1,10],9:9,12:11,13:c,14:14,15:u,16:h,17:17,18:18,19:p,22:y},t(_,[2,3]),{1:[2,2]},t(_,[2,4]),t(_,[2,5]),{1:[2,6],6:n,12:21,13:c,14:14,15:u,16:h,17:17,18:18,19:p,22:y},{6:n,9:22,12:11,13:c,14:14,15:u,16:h,17:17,18:18,19:p,22:y},{6:b,7:m,10:23,11:w},t(N,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:p,22:y}),t(N,[2,18]),t(N,[2,19]),t(N,[2,20]),t(N,[2,21]),t(N,[2,23]),t(N,[2,24]),t(N,[2,26],{19:[1,30]}),{20:[1,31]},{6:b,7:m,10:32,11:w},{1:[2,7],6:n,12:21,13:c,14:14,15:u,16:h,17:17,18:18,19:p,22:y},t(J,[2,14],{7:K,11:Q}),t(A,[2,8]),t(A,[2,9]),t(A,[2,10]),t(N,[2,15]),t(N,[2,16]),t(N,[2,17]),{20:[1,35]},{21:[1,36]},t(J,[2,13],{7:K,11:Q}),t(A,[2,11]),t(A,[2,12]),{21:[1,37]},t(N,[2,25]),t(N,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:l(function(s,i){if(i.recoverable)this.trace(s);else{var a=new Error(s);throw a.hash=i,a}},"parseError"),parse:l(function(s){var i=this,a=[0],o=[],g=[null],r=[],U=this.table,d="",M=0,Z=0,re=2,ee=1,ae=r.slice.call(arguments,1),f=Object.create(this.lexer),T={yy:{}};for(var H in this.yy)Object.prototype.hasOwnProperty.call(this.yy,H)&&(T.yy[H]=this.yy[H]);f.setInput(s,T.yy),T.yy.lexer=f,T.yy.parser=this,typeof f.yylloc>"u"&&(f.yylloc={});var $=f.yylloc;r.push($);var oe=f.options&&f.options.ranges;typeof T.yy.parseError=="function"?this.parseError=T.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ce(D){a.length=a.length-2*D,g.length=g.length-D,r.length=r.length-D}l(ce,"popStack");function te(){var D;return D=o.pop()||f.lex()||ee,typeof D!="number"&&(D instanceof Array&&(o=D,D=o.pop()),D=i.symbols_[D]||D),D}l(te,"lex");for(var S,O,k,z,I={},V,L,ie,B;;){if(O=a[a.length-1],this.defaultActions[O]?k=this.defaultActions[O]:((S===null||typeof S>"u")&&(S=te()),k=U[O]&&U[O][S]),typeof k>"u"||!k.length||!k[0]){var W="";B=[];for(V in U[O])this.terminals_[V]&&V>re&&B.push("'"+this.terminals_[V]+"'");f.showPosition?W="Parse error on line "+(M+1)+`:
|
|
2
2
|
`+f.showPosition()+`
|
|
3
3
|
Expecting `+B.join(", ")+", got '"+(this.terminals_[S]||S)+"'":W="Parse error on line "+(M+1)+": Unexpected "+(S==ee?"end of input":"'"+(this.terminals_[S]||S)+"'"),this.parseError(W,{text:f.match,token:this.terminals_[S]||S,line:f.yylineno,loc:$,expected:B})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+S);switch(k[0]){case 1:a.push(S),g.push(f.yytext),r.push(f.yylloc),a.push(k[1]),S=null,Z=f.yyleng,d=f.yytext,M=f.yylineno,$=f.yylloc;break;case 2:if(L=this.productions_[k[1]][1],I.$=g[g.length-L],I._$={first_line:r[r.length-(L||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(L||1)].first_column,last_column:r[r.length-1].last_column},oe&&(I._$.range=[r[r.length-(L||1)].range[0],r[r.length-1].range[1]]),z=this.performAction.apply(I,[d,Z,M,T.yy,k[1],g,r].concat(ae)),typeof z<"u")return z;L&&(a=a.slice(0,-1*L*2),g=g.slice(0,-1*L),r=r.slice(0,-1*L)),a.push(this.productions_[k[1]][0]),g.push(I.$),r.push(I._$),ie=U[a[a.length-2]][a[a.length-1]],a.push(ie);break;case 3:return!0}}return!0},"parse")},se=function(){var v={EOF:1,parseError:l(function(i,a){if(this.yy.parser)this.yy.parser.parseError(i,a);else throw new Error(i)},"parseError"),setInput:l(function(s,i){return this.yy=i||this.yy||{},this._input=s,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:l(function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var i=s.match(/(?:\r\n?|\n).*/g);return i?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},"input"),unput:l(function(s){var i=s.length,a=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var o=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var g=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===o.length?this.yylloc.first_column:0)+o[o.length-a.length].length-a[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[g[0],g[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},"unput"),more:l(function(){return this._more=!0,this},"more"),reject:l(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:l(function(s){this.unput(this.match.slice(s))},"less"),pastInput:l(function(){var s=this.matched.substr(0,this.matched.length-this.match.length);return(s.length>20?"...":"")+s.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:l(function(){var s=this.match;return s.length<20&&(s+=this._input.substr(0,20-s.length)),(s.substr(0,20)+(s.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:l(function(){var s=this.pastInput(),i=new Array(s.length+1).join("-");return s+this.upcomingInput()+`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as ie,aP as be,r as _,c as g,au as M,aQ as fe,e as c,f as d,m as s,w as m,F as N,s as O,g as a,l as L,i as D,z as b,J as ue,L as ge,bm as G,k as I,aq as xe,a0 as he,bn as ye,bo as _e,o as i,A as we,t as x,bp as ke,P as Ie,n as Se,bq as Re,br as Te,ap as me,a8 as Ce,a2 as Ve,a3 as Pe,am as Ke}from"./BcsKoAPU.js";import{_ as ze}from"./C_7gtl40.js";import{_ as Ee,u as Le}from"./xp7rFxcm.js";import{_ as Ne,a as Oe}from"./dNPwafbq.js";import{i as Ue}from"./dWu56FdP.js";import{g as Ae,a as Be}from"./DPIEiNwW.js";const je={class:"flex h-full flex-col gap-4 overflow-hidden p-4"},Me={class:"flex flex-wrap items-center gap-2"},De={class:"grid min-h-0 flex-1 gap-4 grid-cols-5"},Fe={class:"flex min-h-0 flex-col gap-4 col-span-2"},Je={class:"rounded-lg border bg-background p-4 space-y-4"},qe={class:"space-y-3"},He={class:"space-y-2"},We={class:"flex flex-wrap gap-2"},Qe={key:0,class:"space-y-2"},Ge={class:"space-y-2"},Xe={class:"min-w-0"},Ye={class:"truncate text-sm font-medium"},Ze={class:"text-xs text-muted-foreground"},et={class:"rounded-lg border bg-background p-4 space-y-4"},tt={class:"space-y-2"},st={class:"space-y-2"},at={class:"flex justify-end"},nt={class:"flex min-h-0 flex-col overflow-hidden rounded-lg border bg-background col-span-3"},lt={class:"border-b px-4 py-3"},ot={class:"flex flex-wrap items-center gap-2"},it={class:"min-h-0 flex-1 overflow-auto p-4"},dt={key:1,class:"space-y-3"},rt={class:"flex flex-wrap items-center gap-2 text-xs text-muted-foreground"},ut={class:"mt-2 overflow-auto rounded-md border bg-background p-3 text-xs"},ct=ie({__name:"RedisPubSubPanel",props:{connection:{},databaseIndex:{},databases:{}},emits:["update:databaseIndex"],setup(F,{emit:T}){const t=F,P=T,f=be(null),h=_([]),y=_(""),r=_(""),w=_(""),p=_(null),k=_(!1),U=_(!1),S=_(!1);let $=null;const J=g(()=>{var o;return((o=f.value)==null?void 0:o.subscription)??{sessionId:p.value,target:null,mode:null,targets:[]}}),K=g(()=>J.value.targets??[]),q=g(()=>{var o,n;return[{label:`${((o=f.value)==null?void 0:o.channels.length)??0} channels`},{label:`${((n=f.value)==null?void 0:n.patternCount)??0} patterns`},{label:K.value.length?`${K.value.length} active target${K.value.length===1?"":"s"}`:"Not subscribed"}]}),A=g(()=>h.value.slice().reverse()),X=o=>({method:o.method,stringConnection:o.connectionString,host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,ssl:o.ssl,ssh:o.ssh}),H=async()=>{if(!t.connection){f.value=null;return}k.value=!0;try{f.value=await $fetch("/api/redis/pubsub/overview",{method:"POST",body:{...X(t.connection),databaseIndex:t.databaseIndex,sessionId:p.value}})}finally{k.value=!1}},de=async()=>{if(!p.value){h.value=[];return}const o=await $fetch("/api/redis/pubsub/messages",{method:"POST",body:{sessionId:p.value}});h.value=o.messages,f.value&&(f.value={...f.value,subscription:o.subscription})},B=async()=>{await Promise.all([H(),de()])},z=()=>{$&&(clearInterval($),$=null)},ae=()=>{z(),$=ke(()=>{B()},2e3)},re=async()=>{if(!(!t.connection||!y.value.trim())){U.value=!0;try{const o=await $fetch("/api/redis/pubsub/subscribe",{method:"POST",body:{...X(t.connection),databaseIndex:t.databaseIndex,target:y.value.trim(),sessionId:p.value}});p.value=o.subscription.sessionId,h.value=o.messages,y.value="";const n=o.subscription.targets.find(C=>C.mode==="channel");!r.value&&n&&(r.value=n.target),await H(),ae()}finally{U.value=!1}}},Y=async o=>{var V;if(!p.value)return;const n=p.value,C=await $fetch("/api/redis/pubsub/unsubscribe",{method:"POST",body:{sessionId:n,target:o??null}});if(!o||C.closed){p.value=null,h.value=[],z(),await H();return}await B(),(((V=f.value)==null?void 0:V.subscription.targets.length)??0)===0&&(p.value=null,h.value=[],z())},ne=async()=>{if(!(!t.connection||!r.value.trim())){S.value=!0;try{await $fetch("/api/redis/pubsub/publish",{method:"POST",body:{...X(t.connection),databaseIndex:t.databaseIndex,channel:r.value.trim(),payload:w.value}}),w.value="",await B()}finally{S.value=!1}}};return M(()=>{var o;return(o=f.value)==null?void 0:o.subscription.sessionId},o=>{p.value=o??null}),M(K,o=>{if(o.length===0){p.value&&z();return}if(!r.value){const n=o.find(C=>C.mode==="channel");n&&(r.value=n.target)}},{immediate:!0}),M(p,o=>{if(o){ae();return}z()}),M(()=>{var o;return[(o=t.connection)==null?void 0:o.id,t.databaseIndex]},async()=>{if(z(),p.value){await Y();return}h.value=[],await H()},{immediate:!0}),fe(()=>{z(),p.value&&$fetch("/api/redis/pubsub/unsubscribe",{method:"POST",body:{sessionId:p.value,target:null}}).catch(()=>{})}),(o,n)=>{const C=we,V=he,le=ze,Z=ye,j=_e,ee=xe;return i(),c("div",je,[d(le,{icon:"hugeicons:radio",title:"Pub/Sub",description:"Subscribe to a channel or pattern, publish test events, and watch live messages without leaving the detail flow."},{context:m(()=>n[5]||(n[5]=[])),actions:m(()=>[d(Ee,{compact:"","trigger-id":"redis-pubsub-db-index","trigger-class":"bg-background",databases:o.databases,"database-index":o.databaseIndex,"onUpdate:databaseIndex":n[0]||(n[0]=v=>P("update:databaseIndex",v))},null,8,["databases","database-index"]),d(V,{variant:"outline",size:"xxs",disabled:a(k),onClick:B},{default:m(()=>[d(C,{name:"hugeicons:redo",class:"size-3.5! min-w-3.5"}),n[6]||(n[6]=b(" Refresh "))]),_:1},8,["disabled"])]),_:1}),s("div",Me,[(i(!0),c(N,null,O(a(q),v=>(i(),I(a(G),{key:v.label,variant:"outline",class:"h-6 px-2 text-[11px] font-normal"},{default:m(()=>[b(x(v.label),1)]),_:2},1024))),128))]),s("div",De,[s("div",Fe,[s("div",Je,[s("div",qe,[n[12]||(n[12]=s("div",null,[s("div",null,[s("div",{class:"text-sm font-medium"},"Subscription"),s("p",{class:"text-xs text-muted-foreground"}," Add channels or wildcard patterns to the same live session. Pattern detection is automatic. ")])],-1)),s("div",He,[d(Z,{for:"redis-pubsub-target"},{default:m(()=>n[7]||(n[7]=[b("Target")])),_:1}),d(j,{size:"sm",id:"redis-pubsub-target",modelValue:a(y),"onUpdate:modelValue":n[1]||(n[1]=v=>D(y)?y.value=v:null),placeholder:"orders.events or orders.*"},null,8,["modelValue"]),n[8]||(n[8]=s("p",{class:"text-xs text-muted-foreground"},[b(" Use a plain channel name or include wildcard characters like "),s("span",{class:"font-mono"},"*"),b(" and "),s("span",{class:"font-mono"},"?"),b(" for patterns. ")],-1))]),s("div",We,[d(V,{size:"xs",disabled:a(U),onClick:re},{default:m(()=>n[9]||(n[9]=[b(" Add target ")])),_:1},8,["disabled"]),d(V,{size:"xs",variant:"outline",disabled:!a(p),onClick:n[2]||(n[2]=v=>Y(void 0))},{default:m(()=>n[10]||(n[10]=[b(" Clear all ")])),_:1},8,["disabled"])]),a(K).length?(i(),c("div",Qe,[n[11]||(n[11]=s("div",{class:"text-xs font-medium uppercase tracking-[0.08em] text-muted-foreground"}," Active targets ",-1)),s("div",Ge,[(i(!0),c(N,null,O(a(K),v=>(i(),c("div",{key:v.target,class:"flex items-center justify-between gap-3 rounded-lg border bg-muted/10 px-3 py-2"},[s("div",Xe,[s("div",Ye,x(v.target),1),s("div",Ze,x(v.mode==="pattern"?"Pattern detected automatically":"Channel detected automatically"),1)]),d(V,{size:"iconSm",variant:"ghost","aria-label":`Remove ${v.target}`,onClick:e=>Y(v.target)},{default:m(()=>[d(C,{name:"hugeicons:cancel-01",class:"size-4! min-w-4"})]),_:2},1032,["aria-label","onClick"])]))),128))])])):L("",!0)])]),s("div",et,[n[16]||(n[16]=s("div",null,[s("div",{class:"text-sm font-medium"},"Publish"),s("p",{class:"text-xs text-muted-foreground"}," Send a quick payload to a channel and inspect the response stream on the right. ")],-1)),s("div",tt,[d(Z,{for:"redis-pubsub-channel"},{default:m(()=>n[13]||(n[13]=[b("Channel")])),_:1}),d(j,{size:"sm",id:"redis-pubsub-channel",modelValue:a(r),"onUpdate:modelValue":n[3]||(n[3]=v=>D(r)?r.value=v:null),placeholder:"orders.events"},null,8,["modelValue"])]),s("div",st,[d(Z,{for:"redis-pubsub-payload"},{default:m(()=>n[14]||(n[14]=[b("Payload")])),_:1}),ue(s("textarea",{id:"redis-pubsub-payload","onUpdate:modelValue":n[4]||(n[4]=v=>D(w)?w.value=v:null),class:"min-h-[140px] w-full rounded-lg border bg-background px-3 py-2 text-sm font-mono",placeholder:'{"event":"order.created"}'},null,512),[[ge,a(w)]])]),s("div",at,[d(V,{size:"sm",disabled:a(S),onClick:ne},{default:m(()=>n[15]||(n[15]=[b(" Publish ")])),_:1},8,["disabled"])])])]),s("div",nt,[s("div",lt,[s("div",ot,[n[18]||(n[18]=s("div",{class:"text-sm font-medium"},"Live Messages",-1)),d(a(G),{variant:"outline",class:"h-5 px-1.5 text-xxs font-normal"},{default:m(()=>[b(x(a(A).length)+" messages ",1)]),_:1}),d(a(G),{variant:"outline",class:"h-5 px-1.5 text-xxs font-normal"},{default:m(()=>n[17]||(n[17]=[b(" Polling 2s ")])),_:1})]),n[19]||(n[19]=s("div",{class:"mt-1 text-xs text-muted-foreground"}," Message polling stays active while the current subscription session is connected. ",-1))]),s("div",it,[a(A).length===0?(i(),I(ee,{key:0,title:"No Pub/Sub messages yet",desc:"Subscribe to a channel or pattern, then publish an event to watch it appear here."})):(i(),c("div",dt,[(i(!0),c(N,null,O(a(A),v=>(i(),c("div",{key:v.id,class:"rounded-lg border bg-muted/10 p-3"},[s("div",rt,[d(a(G),{variant:"outline",class:"h-5 px-1.5 text-xxs font-normal text-foreground"},{default:m(()=>[b(x(v.channel),1)]),_:2},1024),v.pattern?(i(),I(a(G),{key:0,variant:"outline",class:"h-5 px-1.5 text-xxs font-normal"},{default:m(()=>[b(" Pattern "+x(v.pattern),1)]),_:2},1024)):L("",!0),s("span",null,x(new Date(v.receivedAt).toLocaleTimeString()),1)]),s("pre",ut,[s("code",null,x(v.payload),1)])]))),128))]))])])])])}}}),pt={class:"h-full flex flex-col gap-3 p-4 overflow-auto"},vt={key:0,class:"relative min-h-[240px] overflow-hidden rounded-lg border bg-background"},mt={key:3,class:"space-y-4"},bt={class:"flex flex-col gap-1"},ft={class:"flex items-start gap-2"},gt={class:"text-sm font-semibold break-all"},xt={class:"text-xs text-muted-foreground"},ht={class:"flex flex-wrap items-center gap-2"},yt={class:"ml-auto flex items-center gap-2"},_t=["value"],wt={class:"grid gap-3 md:grid-cols-[220px_1fr] items-start"},kt={class:"space-y-1"},$t={class:"flex items-center gap-2"},It={class:"text-xs text-muted-foreground"},St={key:0,class:"text-xs text-destructive"},Rt={key:1,class:"space-y-3"},Tt=["readonly"],Ct={key:2,class:"min-h-[360px] overflow-hidden rounded-lg border"},Vt={key:3,class:"space-y-3"},Pt={class:"flex justify-end"},Kt={class:"overflow-hidden rounded-lg border"},zt={class:"w-full text-sm"},Et={class:"bg-muted/30 text-left"},Lt={key:1},Nt={class:"px-3 py-2 text-right"},Ot={key:0},Ut=["colspan"],At={key:4,class:"min-h-[320px] overflow-auto rounded-lg border bg-muted/20 p-3 text-xs"},Bt={class:"flex justify-end"},jt=ie({__name:"RedisValueEditor",props:{detail:{},loading:{type:Boolean},saving:{type:Boolean},canEdit:{type:Boolean},unavailableReason:{}},emits:["save","refresh"],setup(F,{emit:T}){const t=F,P=T,f=_(""),h=be(null),y=_("tree"),r=_([]),w=_(""),p=_(!1),k=_(5),U=[5,10,30],S=e=>e==null?e:JSON.parse(JSON.stringify(e)),$=(e,l)=>JSON.stringify(e)===JSON.stringify(l);M(()=>t.detail,e=>{f.value=(e==null?void 0:e.previewKind)==="text"?String(e.value??""):"",h.value=(e==null?void 0:e.previewKind)==="json"?S(e.value):null,r.value=e!=null&&e.tableRows?S(e.tableRows):[],w.value=(e==null?void 0:e.ttl)!==void 0&&e.ttl>=0?`${e.ttl}`:""},{immediate:!0});const J=g(()=>t.detail?typeof t.detail.value=="string"?t.detail.value:JSON.stringify(t.detail.value,null,2):""),K=g(()=>{var e;return t.unavailableReason?t.unavailableReason:((e=t.detail)==null?void 0:e.previewKind)==="readonly"?"Value editing is unavailable for this Redis type. TTL changes can still be saved.":""}),q=g(()=>{const e=w.value.trim();if(!e)return"";const l=Number.parseInt(e,10);return!Number.isFinite(l)||l<0?"TTL must be empty or a non-negative integer.":""}),A=g(()=>{if(!t.detail)return;const e=w.value.trim(),l=t.detail.ttl>=0?`${t.detail.ttl}`:"";if(e===l)return;if(!e)return null;const R=Number.parseInt(e,10);return Number.isFinite(R)&&R>=0?R:void 0}),X=g(()=>t.detail?[{label:`DB ${t.detail.databaseIndex}`},{label:t.detail.type},{label:`TTL ${t.detail.ttlLabel}`},{label:`Size ${t.detail.memoryUsageHuman??"n/a"}`},{label:t.detail.length!==null&&t.detail.length!==void 0?`Length ${t.detail.length}`:"Length n/a"},{label:`Encoding ${t.detail.encoding??"n/a"}`}]:[]),H=g(()=>!t.detail||t.detail.type==="none"?"hugeicons:database-02":Ae(t.detail.type)),de=g(()=>!t.detail||t.detail.type==="none"?"text-primary":Be(t.detail.type)),B=g(()=>!t.detail||!t.canEdit||q.value||t.saving?!1:A.value!==void 0),z=g(()=>"Update TTL"),ae=g(()=>{var e;return t.canEdit&&((e=t.detail)==null?void 0:e.previewKind)==="table"}),re=g(()=>{if(!t.detail)return!1;switch(t.detail.previewKind){case"text":return f.value!==String(t.detail.value??"");case"json":return!$(h.value,t.detail.value);case"table":return!$(r.value,t.detail.tableRows??[]);default:return!1}}),Y=g(()=>re.value||A.value!==void 0),ne=g(()=>!t.detail||!t.canEdit||q.value?!1:Y.value),o=(e,l,R)=>{var E,oe;const te=r.value.find(se=>se.id===e);if(!te)return;const W=(oe=(E=t.detail)==null?void 0:E.tableColumns)==null?void 0:oe.find(se=>se.key===l);te[l]=(W==null?void 0:W.type)==="number"?Number(R||0):R},n=()=>{var e;((e=t.detail)==null?void 0:e.tableKind)==="list"&&(r.value=r.value.map((l,R)=>({...l,index:R})))},C=()=>{var l;if(!((l=t.detail)!=null&&l.tableKind))return;const e=`row-${Date.now()}-${r.value.length}`;switch(t.detail.tableKind){case"hash":r.value.push({id:e,field:"",value:""});break;case"list":r.value.push({id:e,index:r.value.length,value:""});break;case"set":r.value.push({id:e,value:""});break;case"zset":r.value.push({id:e,value:"",score:0});break}},V=e=>{r.value=r.value.filter(l=>l.id!==e),n()},le=()=>{if(!t.detail||!ne.value)return;const e={previewKind:t.detail.previewKind,stringFormat:t.detail.stringFormat,tableKind:t.detail.tableKind,ttlSeconds:A.value,value:t.detail.value};t.detail.previewKind==="text"&&(e.value=f.value),t.detail.previewKind==="json"&&(e.value=h.value),t.detail.previewKind==="table"&&(e.value=S(r.value)),P("save",e)},Z=()=>{B.value&&le()};let j=null;const ee=()=>{j!==null&&(clearInterval(j),j=null)};return M([p,k,()=>{var e;return(e=t.detail)==null?void 0:e.key}],()=>{ee(),!(!p.value||!t.detail)&&(j=ke(()=>{!t.detail||t.loading||t.saving||P("refresh")},k.value*1e3))},{immediate:!0}),M(()=>t.detail,e=>{e||ee()}),fe(()=>{ee()}),(e,l)=>{var pe,ve;const R=xe,te=we,W=ye,E=he,oe=Oe,se=Ne,ce=_e;return i(),c("div",pt,[e.loading&&!e.detail?(i(),c("div",vt,[l[7]||(l[7]=s("div",{class:"flex h-full min-h-[240px] items-center justify-center px-4 text-sm text-muted-foreground"}," Loading Redis key detail... ",-1)),d(a(Ie),{visible:!0})])):!e.detail&&!e.loading?(i(),I(R,{key:1,title:"Select a Redis key",desc:"Choose a key from the Redis browser to inspect its value and metadata."})):((pe=e.detail)==null?void 0:pe.type)==="none"?(i(),I(R,{key:2,icon:"icons:404",title:"Key not found",desc:"This key no longer exists. It may have expired or been deleted."})):e.detail?(i(),c("div",mt,[s("div",bt,[s("div",ft,[d(te,{name:a(H),class:Se(["mt-0.5 size-4 min-w-4",a(de)])},null,8,["name","class"]),s("div",gt,x(e.detail.key),1)]),s("div",xt,x(e.detail.type)+" key preview ",1)]),s("div",ht,[(i(!0),c(N,null,O(a(X),u=>(i(),I(a(G),{key:u.label,variant:"outline",class:"h-6 px-2 text-[11px] font-normal"},{default:m(()=>[b(x(u.label),1)]),_:2},1024))),128)),s("div",yt,[d(a(Re),{id:"redis-auto-refresh",checked:a(p),"onUpdate:checked":l[0]||(l[0]=u=>D(p)?p.value=u:null)},null,8,["checked"]),d(W,{for:"redis-auto-refresh",class:"text-xs font-medium"},{default:m(()=>l[8]||(l[8]=[b(" Auto refresh ")])),_:1}),d(E,{variant:"ghost",size:"sm",class:"h-7 px-2 text-xs","aria-label":"Refresh key detail",disabled:e.loading||e.saving,onClick:l[1]||(l[1]=u=>P("refresh"))},{default:m(()=>[d(te,{name:"hugeicons:redo",class:"size-3.5! min-w-3.5"}),l[9]||(l[9]=b(" Refresh "))]),_:1},8,["disabled"]),a(p)?ue((i(),c("select",{key:0,"onUpdate:modelValue":l[2]||(l[2]=u=>D(k)?k.value=u:null),class:"h-7 rounded-md border bg-background px-2 text-xs","aria-label":"Auto refresh interval"},[(i(),c(N,null,O(U,u=>s("option",{key:u,value:u},x(u)+"s ",9,_t)),64))],512)),[[Te,a(k)]]):L("",!0)])]),a(K)?(i(),I(se,{key:0,class:"border-border bg-muted/20"},{default:m(()=>[d(oe,{class:"text-muted-foreground"},{default:m(()=>[b(x(a(K)),1)]),_:1})]),_:1})):L("",!0),s("div",wt,[s("div",kt,[d(W,{for:"redis-ttl-input"},{default:m(()=>l[10]||(l[10]=[b("TTL (seconds)")])),_:1}),s("div",$t,[d(ce,{id:"redis-ttl-input",size:"sm","model-value":a(w),disabled:!e.canEdit,placeholder:"Leave empty to persist","onUpdate:modelValue":l[3]||(l[3]=u=>w.value=String(u||""))},null,8,["model-value","disabled"]),d(E,{variant:"outline",size:"xs",disabled:!a(B),onClick:Z},{default:m(()=>[b(x(a(z)),1)]),_:1},8,["disabled"])]),s("p",It," Current: "+x(e.detail.ttlLabel),1),a(q)?(i(),c("p",St,x(a(q)),1)):L("",!0)])]),e.detail.previewKind==="text"?(i(),c("div",Rt,[ue(s("textarea",{"onUpdate:modelValue":l[4]||(l[4]=u=>D(f)?f.value=u:null),readonly:!e.canEdit,class:"min-h-[320px] w-full rounded-lg border bg-background px-3 py-2 text-sm font-mono"},null,8,Tt),[[ge,a(f)]])])):e.detail.previewKind==="json"?(i(),c("div",Ct,[d(a(Ue),{modelValue:a(h),"onUpdate:modelValue":l[5]||(l[5]=u=>D(h)?h.value=u:null),class:"h-[360px]",mode:a(y),navigationBar:!1,readOnly:!e.canEdit,onModeChange:l[6]||(l[6]=u=>y.value=u)},null,8,["modelValue","mode","readOnly"])])):e.detail.previewKind==="table"?(i(),c("div",Vt,[s("div",Pt,[a(ae)?(i(),I(E,{key:0,variant:"outline",size:"sm",onClick:C},{default:m(()=>l[11]||(l[11]=[b(" Add Row ")])),_:1})):L("",!0)]),s("div",Kt,[s("table",zt,[s("thead",Et,[s("tr",null,[(i(!0),c(N,null,O(e.detail.tableColumns,u=>(i(),c("th",{key:u.key,class:"px-3 py-2 font-medium"},x(u.label),1))),128)),l[12]||(l[12]=s("th",{class:"w-16 px-3 py-2 font-medium"},null,-1))])]),s("tbody",null,[(i(!0),c(N,null,O(a(r),u=>(i(),c("tr",{key:u.id,class:"border-t align-top"},[(i(!0),c(N,null,O(e.detail.tableColumns,Q=>(i(),c("td",{key:Q.key,class:"px-3 py-2"},[Q.editable?(i(),I(ce,{key:0,size:"sm","model-value":`${u[Q.key]??""}`,disabled:!e.canEdit,"onUpdate:modelValue":$e=>o(u.id,Q.key,String($e||""))},null,8,["model-value","disabled","onUpdate:modelValue"])):(i(),c("span",Lt,x(u[Q.key]),1))]))),128)),s("td",Nt,[d(E,{variant:"ghost",size:"sm",disabled:!e.canEdit,onClick:Q=>V(u.id)},{default:m(()=>l[13]||(l[13]=[b(" Remove ")])),_:2},1032,["disabled","onClick"])])]))),128)),a(r).length===0?(i(),c("tr",Ot,[s("td",{colspan:(((ve=e.detail.tableColumns)==null?void 0:ve.length)||0)+1,class:"px-3 py-6 text-center text-sm text-muted-foreground"}," No rows available. ",8,Ut)])):L("",!0)])])])])):(i(),c("pre",At,[s("code",null,x(a(J)),1)])),s("div",Bt,[d(E,{size:"sm",disabled:e.saving||!a(ne),onClick:le},{default:m(()=>l[14]||(l[14]=[b(" Save Changes ")])),_:1},8,["disabled"])])])):L("",!0)])}}}),Mt=ie({__name:"RedisWorkspace",props:{connection:{},tabInfo:{}},setup(F){const T=F,t=Le({connection:()=>T.connection,tabInfo:()=>T.tabInfo}),{canEditSelectedValue:P,databases:f,editUnavailableReason:h,loadingKeys:y,loadingSelectedKeyDetail:r,savingValue:w,selectedDatabaseIndex:p,selectedKeyDetail:k}=t,U=g(()=>{var S;return((S=T.tabInfo)==null?void 0:S.type)||me.RedisBrowser});return(S,$)=>a(U)===a(me).RedisPubSub?(i(),I(ct,{key:0,connection:T.connection,"database-index":a(p),databases:a(f),"onUpdate:databaseIndex":$[0]||($[0]=J=>a(t).selectedDatabaseIndex.value=J)},null,8,["connection","database-index","databases"])):(i(),I(jt,{key:1,detail:a(k),loading:a(y)||a(r),saving:a(w),"can-edit":a(P),"unavailable-reason":a(h),onSave:a(t).saveSelectedValue,onRefresh:$[1]||($[1]=J=>a(k)&&a(t).focusKey(a(k).key))},null,8,["detail","loading","saving","can-edit","unavailable-reason","onSave"]))}}),Qt=ie({__name:"[tabViewId]",setup(F){const T=Ce(),t=Ve(),P=Pe(),{tabViews:f}=Ke(t),h=g(()=>f.value.find(y=>y.id===T.params.tabViewId));return(y,r)=>(i(),I(Mt,{connection:a(P).selectedConnection,"tab-info":a(h)},null,8,["connection","tab-info"]))}});export{Qt as default};
|
|
1
|
+
import{d as ie,aP as be,r as _,c as g,au as M,aQ as fe,e as c,f as d,m as s,w as m,F as N,s as O,g as a,l as L,i as D,z as b,I as ue,J as ge,bl as G,k as I,aq as xe,a0 as he,bm as ye,bn as _e,o as i,A as we,t as x,bo as ke,P as Ie,n as Se,bp as Re,bq as Te,ap as me,a8 as Ce,a2 as Ve,a3 as Pe,am as Ke}from"./BfSmOVMj.js";import{_ as ze}from"./DDS9xPxH.js";import{_ as Ee,u as Le}from"./BiMJOLHR.js";import{_ as Ne,a as Oe}from"./BVl8VKr5.js";import{i as Ue}from"./DNgNuAci.js";import{g as Ae,a as Be}from"./DKhuBYhy.js";const je={class:"flex h-full flex-col gap-4 overflow-hidden p-4"},Me={class:"flex flex-wrap items-center gap-2"},De={class:"grid min-h-0 flex-1 gap-4 grid-cols-5"},Fe={class:"flex min-h-0 flex-col gap-4 col-span-2"},Je={class:"rounded-lg border bg-background p-4 space-y-4"},qe={class:"space-y-3"},He={class:"space-y-2"},We={class:"flex flex-wrap gap-2"},Qe={key:0,class:"space-y-2"},Ge={class:"space-y-2"},Xe={class:"min-w-0"},Ye={class:"truncate text-sm font-medium"},Ze={class:"text-xs text-muted-foreground"},et={class:"rounded-lg border bg-background p-4 space-y-4"},tt={class:"space-y-2"},st={class:"space-y-2"},at={class:"flex justify-end"},nt={class:"flex min-h-0 flex-col overflow-hidden rounded-lg border bg-background col-span-3"},lt={class:"border-b px-4 py-3"},ot={class:"flex flex-wrap items-center gap-2"},it={class:"min-h-0 flex-1 overflow-auto p-4"},dt={key:1,class:"space-y-3"},rt={class:"flex flex-wrap items-center gap-2 text-xs text-muted-foreground"},ut={class:"mt-2 overflow-auto rounded-md border bg-background p-3 text-xs"},ct=ie({__name:"RedisPubSubPanel",props:{connection:{},databaseIndex:{},databases:{}},emits:["update:databaseIndex"],setup(F,{emit:T}){const t=F,P=T,f=be(null),h=_([]),y=_(""),r=_(""),w=_(""),p=_(null),k=_(!1),U=_(!1),S=_(!1);let $=null;const J=g(()=>{var o;return((o=f.value)==null?void 0:o.subscription)??{sessionId:p.value,target:null,mode:null,targets:[]}}),K=g(()=>J.value.targets??[]),q=g(()=>{var o,n;return[{label:`${((o=f.value)==null?void 0:o.channels.length)??0} channels`},{label:`${((n=f.value)==null?void 0:n.patternCount)??0} patterns`},{label:K.value.length?`${K.value.length} active target${K.value.length===1?"":"s"}`:"Not subscribed"}]}),A=g(()=>h.value.slice().reverse()),X=o=>({method:o.method,stringConnection:o.connectionString,host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,ssl:o.ssl,ssh:o.ssh}),H=async()=>{if(!t.connection){f.value=null;return}k.value=!0;try{f.value=await $fetch("/api/redis/pubsub/overview",{method:"POST",body:{...X(t.connection),databaseIndex:t.databaseIndex,sessionId:p.value}})}finally{k.value=!1}},de=async()=>{if(!p.value){h.value=[];return}const o=await $fetch("/api/redis/pubsub/messages",{method:"POST",body:{sessionId:p.value}});h.value=o.messages,f.value&&(f.value={...f.value,subscription:o.subscription})},B=async()=>{await Promise.all([H(),de()])},z=()=>{$&&(clearInterval($),$=null)},ae=()=>{z(),$=ke(()=>{B()},2e3)},re=async()=>{if(!(!t.connection||!y.value.trim())){U.value=!0;try{const o=await $fetch("/api/redis/pubsub/subscribe",{method:"POST",body:{...X(t.connection),databaseIndex:t.databaseIndex,target:y.value.trim(),sessionId:p.value}});p.value=o.subscription.sessionId,h.value=o.messages,y.value="";const n=o.subscription.targets.find(C=>C.mode==="channel");!r.value&&n&&(r.value=n.target),await H(),ae()}finally{U.value=!1}}},Y=async o=>{var V;if(!p.value)return;const n=p.value,C=await $fetch("/api/redis/pubsub/unsubscribe",{method:"POST",body:{sessionId:n,target:o??null}});if(!o||C.closed){p.value=null,h.value=[],z(),await H();return}await B(),(((V=f.value)==null?void 0:V.subscription.targets.length)??0)===0&&(p.value=null,h.value=[],z())},ne=async()=>{if(!(!t.connection||!r.value.trim())){S.value=!0;try{await $fetch("/api/redis/pubsub/publish",{method:"POST",body:{...X(t.connection),databaseIndex:t.databaseIndex,channel:r.value.trim(),payload:w.value}}),w.value="",await B()}finally{S.value=!1}}};return M(()=>{var o;return(o=f.value)==null?void 0:o.subscription.sessionId},o=>{p.value=o??null}),M(K,o=>{if(o.length===0){p.value&&z();return}if(!r.value){const n=o.find(C=>C.mode==="channel");n&&(r.value=n.target)}},{immediate:!0}),M(p,o=>{if(o){ae();return}z()}),M(()=>{var o;return[(o=t.connection)==null?void 0:o.id,t.databaseIndex]},async()=>{if(z(),p.value){await Y();return}h.value=[],await H()},{immediate:!0}),fe(()=>{z(),p.value&&$fetch("/api/redis/pubsub/unsubscribe",{method:"POST",body:{sessionId:p.value,target:null}}).catch(()=>{})}),(o,n)=>{const C=we,V=he,le=ze,Z=ye,j=_e,ee=xe;return i(),c("div",je,[d(le,{icon:"hugeicons:radio",title:"Pub/Sub",description:"Subscribe to a channel or pattern, publish test events, and watch live messages without leaving the detail flow."},{context:m(()=>n[5]||(n[5]=[])),actions:m(()=>[d(Ee,{compact:"","trigger-id":"redis-pubsub-db-index","trigger-class":"bg-background",databases:o.databases,"database-index":o.databaseIndex,"onUpdate:databaseIndex":n[0]||(n[0]=v=>P("update:databaseIndex",v))},null,8,["databases","database-index"]),d(V,{variant:"outline",size:"xxs",disabled:a(k),onClick:B},{default:m(()=>[d(C,{name:"hugeicons:redo",class:"size-3.5! min-w-3.5"}),n[6]||(n[6]=b(" Refresh "))]),_:1},8,["disabled"])]),_:1}),s("div",Me,[(i(!0),c(N,null,O(a(q),v=>(i(),I(a(G),{key:v.label,variant:"outline",class:"h-6 px-2 text-[11px] font-normal"},{default:m(()=>[b(x(v.label),1)]),_:2},1024))),128))]),s("div",De,[s("div",Fe,[s("div",Je,[s("div",qe,[n[12]||(n[12]=s("div",null,[s("div",null,[s("div",{class:"text-sm font-medium"},"Subscription"),s("p",{class:"text-xs text-muted-foreground"}," Add channels or wildcard patterns to the same live session. Pattern detection is automatic. ")])],-1)),s("div",He,[d(Z,{for:"redis-pubsub-target"},{default:m(()=>n[7]||(n[7]=[b("Target")])),_:1}),d(j,{size:"sm",id:"redis-pubsub-target",modelValue:a(y),"onUpdate:modelValue":n[1]||(n[1]=v=>D(y)?y.value=v:null),placeholder:"orders.events or orders.*"},null,8,["modelValue"]),n[8]||(n[8]=s("p",{class:"text-xs text-muted-foreground"},[b(" Use a plain channel name or include wildcard characters like "),s("span",{class:"font-mono"},"*"),b(" and "),s("span",{class:"font-mono"},"?"),b(" for patterns. ")],-1))]),s("div",We,[d(V,{size:"xs",disabled:a(U),onClick:re},{default:m(()=>n[9]||(n[9]=[b(" Add target ")])),_:1},8,["disabled"]),d(V,{size:"xs",variant:"outline",disabled:!a(p),onClick:n[2]||(n[2]=v=>Y(void 0))},{default:m(()=>n[10]||(n[10]=[b(" Clear all ")])),_:1},8,["disabled"])]),a(K).length?(i(),c("div",Qe,[n[11]||(n[11]=s("div",{class:"text-xs font-medium uppercase tracking-[0.08em] text-muted-foreground"}," Active targets ",-1)),s("div",Ge,[(i(!0),c(N,null,O(a(K),v=>(i(),c("div",{key:v.target,class:"flex items-center justify-between gap-3 rounded-lg border bg-muted/10 px-3 py-2"},[s("div",Xe,[s("div",Ye,x(v.target),1),s("div",Ze,x(v.mode==="pattern"?"Pattern detected automatically":"Channel detected automatically"),1)]),d(V,{size:"iconSm",variant:"ghost","aria-label":`Remove ${v.target}`,onClick:e=>Y(v.target)},{default:m(()=>[d(C,{name:"hugeicons:cancel-01",class:"size-4! min-w-4"})]),_:2},1032,["aria-label","onClick"])]))),128))])])):L("",!0)])]),s("div",et,[n[16]||(n[16]=s("div",null,[s("div",{class:"text-sm font-medium"},"Publish"),s("p",{class:"text-xs text-muted-foreground"}," Send a quick payload to a channel and inspect the response stream on the right. ")],-1)),s("div",tt,[d(Z,{for:"redis-pubsub-channel"},{default:m(()=>n[13]||(n[13]=[b("Channel")])),_:1}),d(j,{size:"sm",id:"redis-pubsub-channel",modelValue:a(r),"onUpdate:modelValue":n[3]||(n[3]=v=>D(r)?r.value=v:null),placeholder:"orders.events"},null,8,["modelValue"])]),s("div",st,[d(Z,{for:"redis-pubsub-payload"},{default:m(()=>n[14]||(n[14]=[b("Payload")])),_:1}),ue(s("textarea",{id:"redis-pubsub-payload","onUpdate:modelValue":n[4]||(n[4]=v=>D(w)?w.value=v:null),class:"min-h-[140px] w-full rounded-lg border bg-background px-3 py-2 text-sm font-mono",placeholder:'{"event":"order.created"}'},null,512),[[ge,a(w)]])]),s("div",at,[d(V,{size:"sm",disabled:a(S),onClick:ne},{default:m(()=>n[15]||(n[15]=[b(" Publish ")])),_:1},8,["disabled"])])])]),s("div",nt,[s("div",lt,[s("div",ot,[n[18]||(n[18]=s("div",{class:"text-sm font-medium"},"Live Messages",-1)),d(a(G),{variant:"outline",class:"h-5 px-1.5 text-xxs font-normal"},{default:m(()=>[b(x(a(A).length)+" messages ",1)]),_:1}),d(a(G),{variant:"outline",class:"h-5 px-1.5 text-xxs font-normal"},{default:m(()=>n[17]||(n[17]=[b(" Polling 2s ")])),_:1})]),n[19]||(n[19]=s("div",{class:"mt-1 text-xs text-muted-foreground"}," Message polling stays active while the current subscription session is connected. ",-1))]),s("div",it,[a(A).length===0?(i(),I(ee,{key:0,title:"No Pub/Sub messages yet",desc:"Subscribe to a channel or pattern, then publish an event to watch it appear here."})):(i(),c("div",dt,[(i(!0),c(N,null,O(a(A),v=>(i(),c("div",{key:v.id,class:"rounded-lg border bg-muted/10 p-3"},[s("div",rt,[d(a(G),{variant:"outline",class:"h-5 px-1.5 text-xxs font-normal text-foreground"},{default:m(()=>[b(x(v.channel),1)]),_:2},1024),v.pattern?(i(),I(a(G),{key:0,variant:"outline",class:"h-5 px-1.5 text-xxs font-normal"},{default:m(()=>[b(" Pattern "+x(v.pattern),1)]),_:2},1024)):L("",!0),s("span",null,x(new Date(v.receivedAt).toLocaleTimeString()),1)]),s("pre",ut,[s("code",null,x(v.payload),1)])]))),128))]))])])])])}}}),pt={class:"h-full flex flex-col gap-3 p-4 overflow-auto"},vt={key:0,class:"relative min-h-[240px] overflow-hidden rounded-lg border bg-background"},mt={key:3,class:"space-y-4"},bt={class:"flex flex-col gap-1"},ft={class:"flex items-start gap-2"},gt={class:"text-sm font-semibold break-all"},xt={class:"text-xs text-muted-foreground"},ht={class:"flex flex-wrap items-center gap-2"},yt={class:"ml-auto flex items-center gap-2"},_t=["value"],wt={class:"grid gap-3 md:grid-cols-[220px_1fr] items-start"},kt={class:"space-y-1"},$t={class:"flex items-center gap-2"},It={class:"text-xs text-muted-foreground"},St={key:0,class:"text-xs text-destructive"},Rt={key:1,class:"space-y-3"},Tt=["readonly"],Ct={key:2,class:"min-h-[360px] overflow-hidden rounded-lg border"},Vt={key:3,class:"space-y-3"},Pt={class:"flex justify-end"},Kt={class:"overflow-hidden rounded-lg border"},zt={class:"w-full text-sm"},Et={class:"bg-muted/30 text-left"},Lt={key:1},Nt={class:"px-3 py-2 text-right"},Ot={key:0},Ut=["colspan"],At={key:4,class:"min-h-[320px] overflow-auto rounded-lg border bg-muted/20 p-3 text-xs"},Bt={class:"flex justify-end"},jt=ie({__name:"RedisValueEditor",props:{detail:{},loading:{type:Boolean},saving:{type:Boolean},canEdit:{type:Boolean},unavailableReason:{}},emits:["save","refresh"],setup(F,{emit:T}){const t=F,P=T,f=_(""),h=be(null),y=_("tree"),r=_([]),w=_(""),p=_(!1),k=_(5),U=[5,10,30],S=e=>e==null?e:JSON.parse(JSON.stringify(e)),$=(e,l)=>JSON.stringify(e)===JSON.stringify(l);M(()=>t.detail,e=>{f.value=(e==null?void 0:e.previewKind)==="text"?String(e.value??""):"",h.value=(e==null?void 0:e.previewKind)==="json"?S(e.value):null,r.value=e!=null&&e.tableRows?S(e.tableRows):[],w.value=(e==null?void 0:e.ttl)!==void 0&&e.ttl>=0?`${e.ttl}`:""},{immediate:!0});const J=g(()=>t.detail?typeof t.detail.value=="string"?t.detail.value:JSON.stringify(t.detail.value,null,2):""),K=g(()=>{var e;return t.unavailableReason?t.unavailableReason:((e=t.detail)==null?void 0:e.previewKind)==="readonly"?"Value editing is unavailable for this Redis type. TTL changes can still be saved.":""}),q=g(()=>{const e=w.value.trim();if(!e)return"";const l=Number.parseInt(e,10);return!Number.isFinite(l)||l<0?"TTL must be empty or a non-negative integer.":""}),A=g(()=>{if(!t.detail)return;const e=w.value.trim(),l=t.detail.ttl>=0?`${t.detail.ttl}`:"";if(e===l)return;if(!e)return null;const R=Number.parseInt(e,10);return Number.isFinite(R)&&R>=0?R:void 0}),X=g(()=>t.detail?[{label:`DB ${t.detail.databaseIndex}`},{label:t.detail.type},{label:`TTL ${t.detail.ttlLabel}`},{label:`Size ${t.detail.memoryUsageHuman??"n/a"}`},{label:t.detail.length!==null&&t.detail.length!==void 0?`Length ${t.detail.length}`:"Length n/a"},{label:`Encoding ${t.detail.encoding??"n/a"}`}]:[]),H=g(()=>!t.detail||t.detail.type==="none"?"hugeicons:database-02":Ae(t.detail.type)),de=g(()=>!t.detail||t.detail.type==="none"?"text-primary":Be(t.detail.type)),B=g(()=>!t.detail||!t.canEdit||q.value||t.saving?!1:A.value!==void 0),z=g(()=>"Update TTL"),ae=g(()=>{var e;return t.canEdit&&((e=t.detail)==null?void 0:e.previewKind)==="table"}),re=g(()=>{if(!t.detail)return!1;switch(t.detail.previewKind){case"text":return f.value!==String(t.detail.value??"");case"json":return!$(h.value,t.detail.value);case"table":return!$(r.value,t.detail.tableRows??[]);default:return!1}}),Y=g(()=>re.value||A.value!==void 0),ne=g(()=>!t.detail||!t.canEdit||q.value?!1:Y.value),o=(e,l,R)=>{var E,oe;const te=r.value.find(se=>se.id===e);if(!te)return;const W=(oe=(E=t.detail)==null?void 0:E.tableColumns)==null?void 0:oe.find(se=>se.key===l);te[l]=(W==null?void 0:W.type)==="number"?Number(R||0):R},n=()=>{var e;((e=t.detail)==null?void 0:e.tableKind)==="list"&&(r.value=r.value.map((l,R)=>({...l,index:R})))},C=()=>{var l;if(!((l=t.detail)!=null&&l.tableKind))return;const e=`row-${Date.now()}-${r.value.length}`;switch(t.detail.tableKind){case"hash":r.value.push({id:e,field:"",value:""});break;case"list":r.value.push({id:e,index:r.value.length,value:""});break;case"set":r.value.push({id:e,value:""});break;case"zset":r.value.push({id:e,value:"",score:0});break}},V=e=>{r.value=r.value.filter(l=>l.id!==e),n()},le=()=>{if(!t.detail||!ne.value)return;const e={previewKind:t.detail.previewKind,stringFormat:t.detail.stringFormat,tableKind:t.detail.tableKind,ttlSeconds:A.value,value:t.detail.value};t.detail.previewKind==="text"&&(e.value=f.value),t.detail.previewKind==="json"&&(e.value=h.value),t.detail.previewKind==="table"&&(e.value=S(r.value)),P("save",e)},Z=()=>{B.value&&le()};let j=null;const ee=()=>{j!==null&&(clearInterval(j),j=null)};return M([p,k,()=>{var e;return(e=t.detail)==null?void 0:e.key}],()=>{ee(),!(!p.value||!t.detail)&&(j=ke(()=>{!t.detail||t.loading||t.saving||P("refresh")},k.value*1e3))},{immediate:!0}),M(()=>t.detail,e=>{e||ee()}),fe(()=>{ee()}),(e,l)=>{var pe,ve;const R=xe,te=we,W=ye,E=he,oe=Oe,se=Ne,ce=_e;return i(),c("div",pt,[e.loading&&!e.detail?(i(),c("div",vt,[l[7]||(l[7]=s("div",{class:"flex h-full min-h-[240px] items-center justify-center px-4 text-sm text-muted-foreground"}," Loading Redis key detail... ",-1)),d(a(Ie),{visible:!0})])):!e.detail&&!e.loading?(i(),I(R,{key:1,title:"Select a Redis key",desc:"Choose a key from the Redis browser to inspect its value and metadata."})):((pe=e.detail)==null?void 0:pe.type)==="none"?(i(),I(R,{key:2,icon:"icons:404",title:"Key not found",desc:"This key no longer exists. It may have expired or been deleted."})):e.detail?(i(),c("div",mt,[s("div",bt,[s("div",ft,[d(te,{name:a(H),class:Se(["mt-0.5 size-4 min-w-4",a(de)])},null,8,["name","class"]),s("div",gt,x(e.detail.key),1)]),s("div",xt,x(e.detail.type)+" key preview ",1)]),s("div",ht,[(i(!0),c(N,null,O(a(X),u=>(i(),I(a(G),{key:u.label,variant:"outline",class:"h-6 px-2 text-[11px] font-normal"},{default:m(()=>[b(x(u.label),1)]),_:2},1024))),128)),s("div",yt,[d(a(Re),{id:"redis-auto-refresh",checked:a(p),"onUpdate:checked":l[0]||(l[0]=u=>D(p)?p.value=u:null)},null,8,["checked"]),d(W,{for:"redis-auto-refresh",class:"text-xs font-medium"},{default:m(()=>l[8]||(l[8]=[b(" Auto refresh ")])),_:1}),d(E,{variant:"ghost",size:"sm",class:"h-7 px-2 text-xs","aria-label":"Refresh key detail",disabled:e.loading||e.saving,onClick:l[1]||(l[1]=u=>P("refresh"))},{default:m(()=>[d(te,{name:"hugeicons:redo",class:"size-3.5! min-w-3.5"}),l[9]||(l[9]=b(" Refresh "))]),_:1},8,["disabled"]),a(p)?ue((i(),c("select",{key:0,"onUpdate:modelValue":l[2]||(l[2]=u=>D(k)?k.value=u:null),class:"h-7 rounded-md border bg-background px-2 text-xs","aria-label":"Auto refresh interval"},[(i(),c(N,null,O(U,u=>s("option",{key:u,value:u},x(u)+"s ",9,_t)),64))],512)),[[Te,a(k)]]):L("",!0)])]),a(K)?(i(),I(se,{key:0,class:"border-border bg-muted/20"},{default:m(()=>[d(oe,{class:"text-muted-foreground"},{default:m(()=>[b(x(a(K)),1)]),_:1})]),_:1})):L("",!0),s("div",wt,[s("div",kt,[d(W,{for:"redis-ttl-input"},{default:m(()=>l[10]||(l[10]=[b("TTL (seconds)")])),_:1}),s("div",$t,[d(ce,{id:"redis-ttl-input",size:"sm","model-value":a(w),disabled:!e.canEdit,placeholder:"Leave empty to persist","onUpdate:modelValue":l[3]||(l[3]=u=>w.value=String(u||""))},null,8,["model-value","disabled"]),d(E,{variant:"outline",size:"xs",disabled:!a(B),onClick:Z},{default:m(()=>[b(x(a(z)),1)]),_:1},8,["disabled"])]),s("p",It," Current: "+x(e.detail.ttlLabel),1),a(q)?(i(),c("p",St,x(a(q)),1)):L("",!0)])]),e.detail.previewKind==="text"?(i(),c("div",Rt,[ue(s("textarea",{"onUpdate:modelValue":l[4]||(l[4]=u=>D(f)?f.value=u:null),readonly:!e.canEdit,class:"min-h-[320px] w-full rounded-lg border bg-background px-3 py-2 text-sm font-mono"},null,8,Tt),[[ge,a(f)]])])):e.detail.previewKind==="json"?(i(),c("div",Ct,[d(a(Ue),{modelValue:a(h),"onUpdate:modelValue":l[5]||(l[5]=u=>D(h)?h.value=u:null),class:"h-[360px]",mode:a(y),navigationBar:!1,readOnly:!e.canEdit,onModeChange:l[6]||(l[6]=u=>y.value=u)},null,8,["modelValue","mode","readOnly"])])):e.detail.previewKind==="table"?(i(),c("div",Vt,[s("div",Pt,[a(ae)?(i(),I(E,{key:0,variant:"outline",size:"sm",onClick:C},{default:m(()=>l[11]||(l[11]=[b(" Add Row ")])),_:1})):L("",!0)]),s("div",Kt,[s("table",zt,[s("thead",Et,[s("tr",null,[(i(!0),c(N,null,O(e.detail.tableColumns,u=>(i(),c("th",{key:u.key,class:"px-3 py-2 font-medium"},x(u.label),1))),128)),l[12]||(l[12]=s("th",{class:"w-16 px-3 py-2 font-medium"},null,-1))])]),s("tbody",null,[(i(!0),c(N,null,O(a(r),u=>(i(),c("tr",{key:u.id,class:"border-t align-top"},[(i(!0),c(N,null,O(e.detail.tableColumns,Q=>(i(),c("td",{key:Q.key,class:"px-3 py-2"},[Q.editable?(i(),I(ce,{key:0,size:"sm","model-value":`${u[Q.key]??""}`,disabled:!e.canEdit,"onUpdate:modelValue":$e=>o(u.id,Q.key,String($e||""))},null,8,["model-value","disabled","onUpdate:modelValue"])):(i(),c("span",Lt,x(u[Q.key]),1))]))),128)),s("td",Nt,[d(E,{variant:"ghost",size:"sm",disabled:!e.canEdit,onClick:Q=>V(u.id)},{default:m(()=>l[13]||(l[13]=[b(" Remove ")])),_:2},1032,["disabled","onClick"])])]))),128)),a(r).length===0?(i(),c("tr",Ot,[s("td",{colspan:(((ve=e.detail.tableColumns)==null?void 0:ve.length)||0)+1,class:"px-3 py-6 text-center text-sm text-muted-foreground"}," No rows available. ",8,Ut)])):L("",!0)])])])])):(i(),c("pre",At,[s("code",null,x(a(J)),1)])),s("div",Bt,[d(E,{size:"sm",disabled:e.saving||!a(ne),onClick:le},{default:m(()=>l[14]||(l[14]=[b(" Save Changes ")])),_:1},8,["disabled"])])])):L("",!0)])}}}),Mt=ie({__name:"RedisWorkspace",props:{connection:{},tabInfo:{}},setup(F){const T=F,t=Le({connection:()=>T.connection,tabInfo:()=>T.tabInfo}),{canEditSelectedValue:P,databases:f,editUnavailableReason:h,loadingKeys:y,loadingSelectedKeyDetail:r,savingValue:w,selectedDatabaseIndex:p,selectedKeyDetail:k}=t,U=g(()=>{var S;return((S=T.tabInfo)==null?void 0:S.type)||me.RedisBrowser});return(S,$)=>a(U)===a(me).RedisPubSub?(i(),I(ct,{key:0,connection:T.connection,"database-index":a(p),databases:a(f),"onUpdate:databaseIndex":$[0]||($[0]=J=>a(t).selectedDatabaseIndex.value=J)},null,8,["connection","database-index","databases"])):(i(),I(jt,{key:1,detail:a(k),loading:a(y)||a(r),saving:a(w),"can-edit":a(P),"unavailable-reason":a(h),onSave:a(t).saveSelectedValue,onRefresh:$[1]||($[1]=J=>a(k)&&a(t).focusKey(a(k).key))},null,8,["detail","loading","saving","can-edit","unavailable-reason","onSave"]))}}),Qt=ie({__name:"[tabViewId]",setup(F){const T=Ce(),t=Ve(),P=Pe(),{tabViews:f}=Ke(t),h=g(()=>f.value.find(y=>y.id===T.params.tabViewId));return(y,r)=>(i(),I(Mt,{connection:a(P).selectedConnection,"tab-info":a(h)},null,8,["connection","tab-info"]))}});export{Qt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as H}from"./DDS9xPxH.js";import{d as R,bC as K,e as a,m as l,f as o,bm as U,w,g as r,A as j,a0 as G,o as t,z as k,k as V,t as u,l as z,bp as W,r as q,c as M,av as J,F as y,s as T,n as S,j as X,bl as Y,a3 as Z,i as ee,bD as te,bE as se,bF as ne}from"./BfSmOVMj.js";import{_ as oe,a as ae}from"./BVl8VKr5.js";import{_ as ie}from"./D0mrO5vS.js";import{_ as P}from"./HP3PGEjt.js";import{_ as re}from"./BCFLQ_rL.js";const le={class:"flex flex-col gap-2 rounded-lg border bg-card p-4 sm:flex-row sm:items-end sm:justify-between"},de={class:"flex min-w-0 flex-1 flex-col gap-1.5"},ce={class:"flex h-9 items-center justify-center sm:w-6"},ue={class:"flex min-w-0 flex-1 flex-col gap-1.5"},me=R({__name:"SchemaDiffConnectionSelector",props:{sourceConnection:{},targetConnection:{},connections:{},isLoading:{type:Boolean}},emits:["update:targetConnection","run"],setup(x,{emit:_}){const{workspaceId:p}=K(),d=_;return(n,f)=>{var e,c;const g=U,v=j,C=G;return t(),a("div",le,[l("div",de,[o(g,{class:"text-xs font-medium text-muted-foreground"},{default:w(()=>f[2]||(f[2]=[k("Source")])),_:1}),o(P,{class:"h-9 w-full","workspace-id":r(p)||"","connection-id":((e=n.sourceConnection)==null?void 0:e.id)||"",connection:n.sourceConnection||void 0,connections:n.sourceConnection?[n.sourceConnection]:[],disabled:""},null,8,["workspace-id","connection-id","connection","connections"])]),l("div",ce,[o(v,{name:"hugeicons:arrow-right-02",class:"size-4 text-muted-foreground"})]),l("div",ue,[o(g,{class:"text-xs font-medium text-muted-foreground"},{default:w(()=>f[3]||(f[3]=[k("Target")])),_:1}),o(P,{class:"h-9 w-full","workspace-id":r(p)||"","connection-id":((c=n.targetConnection)==null?void 0:c.id)||"",connection:n.targetConnection||void 0,connections:n.connections,"onUpdate:connectionId":f[0]||(f[0]=$=>d("update:targetConnection",n.connections.find(b=>b.id===$)||null)),"skip-strict-mode-connections":""},null,8,["workspace-id","connection-id","connection","connections"])]),o(C,{disabled:!n.sourceConnection||!n.targetConnection||n.isLoading,size:"sm",onClick:f[1]||(f[1]=$=>d("run"))},{default:w(()=>[n.isLoading?(t(),V(v,{key:0,name:"hugeicons:loading-03",class:"size-4 animate-spin"})):(t(),V(v,{key:1,name:"hugeicons:git-compare",class:"size-4"})),k(" "+u(n.isLoading?"Comparing...":"Run Diff"),1)]),_:1},8,["disabled"])])}}}),fe={class:"flex flex-col gap-3"},pe={class:"flex items-center gap-3"},ge={class:"flex items-center gap-2 text-sm"},xe={class:"text-xs text-muted-foreground"},_e={class:"ml-auto flex items-center gap-2 text-xs"},he={key:0,class:"flex items-center gap-1 rounded-md bg-red-100 px-2 py-1 text-xs text-red-700 dark:bg-red-900/30 dark:text-red-400"},ve={key:0,class:"flex items-start gap-2 rounded-md border border-amber-200 bg-amber-50 p-3 text-xs text-amber-800 dark:border-amber-800 dark:bg-amber-900/20 dark:text-amber-300"},ye={key:2,class:"min-h-32 flex items-center justify-center rounded-md border bg-muted/30 p-4 font-mono text-xs text-muted-foreground"},ke=R({__name:"SchemaDiffSqlPanel",props:{sql:{},safeMode:{type:Boolean},statementCount:{},destructiveCount:{}},emits:["update:safeMode"],setup(x,{emit:_}){const p=_;return(d,n)=>{const f=j,g=U,v=W,C=re;return t(),a("div",fe,[l("div",pe,[l("div",ge,[o(f,{name:"hugeicons:code",class:"size-4 text-muted-foreground"}),n[1]||(n[1]=l("span",{class:"font-medium"},"Generated SQL",-1)),l("span",xe,"("+u(d.statementCount)+" statements)",1)]),l("div",_e,[o(g,{for:"safe-mode-toggle",class:"cursor-pointer text-muted-foreground"},{default:w(()=>n[2]||(n[2]=[k(" Safe mode ")])),_:1}),o(v,{id:"safe-mode-toggle","model-value":d.safeMode,"onUpdate:modelValue":n[0]||(n[0]=e=>p("update:safeMode",e))},null,8,["model-value"])]),d.destructiveCount>0&&!d.safeMode?(t(),a("div",he,[o(f,{name:"hugeicons:alert-circle",class:"size-3.5"}),k(" "+u(d.destructiveCount)+" destructive ",1)])):z("",!0)]),d.safeMode?(t(),a("div",ve,[o(f,{name:"hugeicons:shield-01",class:"mt-0.5 size-3.5 shrink-0"}),n[3]||(n[3]=l("span",null,"Safe mode is on — destructive statements (DROP TABLE, DROP COLUMN) are commented out. Disable to include them.",-1))])):z("",!0),d.sql?(t(),V(C,{key:1,code:d.sql,language:"sql","max-height":"400px"},null,8,["code"])):(t(),a("div",ye," No SQL statements generated. "))])}}}),be={class:"space-y-1 font-mono text-sm"},Ce={class:"mb-3 flex flex-wrap gap-2"},we=["onClick"],$e={key:0,class:"divide-y"},Se=["onClick"],ze={class:"flex-1 truncate"},De={class:"flex-1 truncate text-xs"},qe={class:"shrink-0 text-xxs text-muted-foreground"},Le={class:"flex-1 truncate text-xs"},Te={class:"flex-1 truncate"},Me={class:"flex-1 truncate"},Ve={key:0,class:"flex flex-col items-center gap-2 py-12 text-muted-foreground"},Be=R({__name:"SchemaDiffTree",props:{result:{}},setup(x){const _=q(new Set),p=q(new Set),d={added:{label:"Added",class:"text-emerald-600 dark:text-emerald-400",icon:"hugeicons:plus-sign"},removed:{label:"Removed",class:"text-red-600 dark:text-red-400",icon:"hugeicons:minus-sign"},modified:{label:"Modified",class:"text-amber-600 dark:text-amber-400",icon:"hugeicons:edit-02"},unchanged:{label:"Unchanged",class:"text-muted-foreground",icon:"hugeicons:check-01"}},n={added:"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-400 rounded-sm",removed:"bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-400 rounded-sm",modified:"bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-400 rounded-sm"},f=e=>{_.value.has(e)?_.value.delete(e):_.value.add(e)},g=e=>{p.value.has(e)?p.value.delete(e):p.value.add(e)},v=(e,c)=>`${e}.${c}`,C=M(()=>x.result.schemas.filter(e=>e.tables.some(c=>c.status!=="unchanged")||e.views.some(c=>c.status!=="unchanged")||e.functions.some(c=>c.status!=="unchanged")));return J(()=>{for(const e of C.value)_.value.add(e.name)}),(e,c)=>{const $=Y,b=j;return t(),a("div",be,[l("div",Ce,[(t(!0),a(y,null,T(e.result.summary,(h,s)=>(t(),a(y,{key:s},[s!=="unchanged"?(t(),V($,{key:0,variant:"outline",class:S(r(X)(n[s],"capitalize border-0"))},{default:w(()=>[k(u(h)+" "+u(s),1)]),_:2},1032,["class"])):z("",!0)],64))),128))]),(t(!0),a(y,null,T(r(C),h=>(t(),a("div",{key:h.name,class:"rounded-md border overflow-hidden"},[l("button",{class:"flex w-full items-center gap-2 bg-muted/50 px-3 py-2 text-left text-xs font-semibold capitalize text-muted-foreground hover:bg-muted",onClick:s=>f(h.name)},[o(b,{name:r(_).has(h.name)?"hugeicons:arrow-down-01":"hugeicons:arrow-right-01",class:"size-3.5 shrink-0"},null,8,["name"]),o(b,{name:"hugeicons:database",class:"size-3.5 shrink-0"}),k(" "+u(h.name),1)],8,we),r(_).has(h.name)?(t(),a("div",$e,[(t(!0),a(y,null,T(h.tables.filter(s=>s.status!=="unchanged"),s=>(t(),a(y,{key:s.name},[l("div",{class:S(["flex cursor-pointer items-center gap-2 px-4 py-2 hover:bg-muted/30",d[s.status].class]),onClick:i=>g(v(h.name,s.name))},[o(b,{name:r(p).has(v(h.name,s.name))?"hugeicons:arrow-down-01":"hugeicons:arrow-right-01",class:"size-3 shrink-0 text-muted-foreground"},null,8,["name"]),o(b,{name:"hugeicons:table-01",class:"size-3.5 shrink-0"}),l("span",ze,u(s.name),1),l("span",{class:S(["ml-auto shrink-0 rounded px-1.5 py-0.5 text-xxs font-medium capitalize",n[s.status]])},u(s.status),3)],10,Se),r(p).has(v(h.name,s.name))?(t(),a(y,{key:0},[(t(!0),a(y,null,T(s.columns.filter(i=>i.status!=="unchanged"),i=>{var D,m,B;return t(),a("div",{key:i.name,class:S(["flex items-center gap-2 py-1.5 pl-10 pr-4",d[i.status].class])},[o(b,{name:"hugeicons:columns-02",class:"size-3 shrink-0 opacity-60"}),l("span",De,u(i.name),1),l("span",qe,[i.status==="added"?(t(),a(y,{key:0},[k(u((D=i.source)==null?void 0:D.type),1)],64)):i.status==="removed"?(t(),a(y,{key:1},[k(u((m=i.target)==null?void 0:m.type),1)],64)):(B=i.changes)!=null&&B.type?(t(),a(y,{key:2},[k(u(i.changes.type.from)+" → "+u(i.changes.type.to),1)],64)):z("",!0)]),l("span",{class:S(["shrink-0 rounded px-1 py-0.5 text-[9px] font-medium capitalize",n[i.status]])},u(i.status),3)],2)}),128)),(t(!0),a(y,null,T(s.foreignKeys.filter(i=>i.status!=="unchanged"),i=>(t(),a("div",{key:i.key,class:S(["flex items-center gap-2 py-1.5 pl-10 pr-4",d[i.status].class])},[o(b,{name:"hugeicons:link-01",class:"size-3 shrink-0 opacity-60"}),l("span",Le,u(i.key),1),l("span",{class:S(["shrink-0 rounded px-1 py-0.5 text-[9px] font-medium capitalize",n[i.status]])},u(i.status),3)],2))),128))],64)):z("",!0)],64))),128)),(t(!0),a(y,null,T(h.views.filter(s=>s.status!=="unchanged"),s=>(t(),a("div",{key:s.name,class:S(["flex items-center gap-2 px-4 py-2",d[s.status].class])},[o(b,{name:"hugeicons:eye",class:"size-3.5 shrink-0"}),l("span",Te,u(s.name),1),c[0]||(c[0]=l("span",{class:"ml-2 shrink-0 text-xxs text-muted-foreground"},"view",-1)),l("span",{class:S(["ml-auto shrink-0 rounded px-1.5 py-0.5 text-xxs font-medium capitalize",n[s.status]])},u(s.status),3)],2))),128)),(t(!0),a(y,null,T(h.functions.filter(s=>s.status!=="unchanged"),s=>(t(),a("div",{key:s.signature,class:S(["flex items-center gap-2 px-4 py-2",d[s.status].class])},[o(b,{name:"hugeicons:function-of-x",class:"size-3.5 shrink-0"}),l("span",Me,u(s.name),1),c[1]||(c[1]=l("span",{class:"ml-2 shrink-0 text-xxs text-muted-foreground"},"fn",-1)),l("span",{class:S(["ml-auto shrink-0 rounded px-1.5 py-0.5 text-xxs font-medium capitalize",n[s.status]])},u(s.status),3)],2))),128))])):z("",!0)]))),128)),r(C).length===0?(t(),a("div",Ve,[o(b,{name:"hugeicons:checkmark-circle-02",class:"size-10 text-emerald-500"}),c[2]||(c[2]=l("p",{class:"text-sm font-medium"},"Schemas are identical",-1)),c[3]||(c[3]=l("p",{class:"text-xs"},"No differences detected between source and target.",-1))])):z("",!0)])}}}),Ie={diff:x=>$fetch("/api/schema-diff",{method:"POST",body:x})};function Re(){const x=q(null),_=q(!1),p=q(null),d=q(!0),n=e=>({type:e.type,connectionString:e.connectionString,host:e.host,port:e.port,username:e.username,password:e.password,database:e.database,ssl:e.ssl,ssh:e.ssh}),f=async(e,c)=>{_.value=!0,p.value=null,x.value=null;try{x.value=await Ie.diff({source:n(e),target:n(c),safeMode:d.value})}catch($){p.value=$ instanceof Error?$.message:"Schema diff failed. Check connection details."}finally{_.value=!1}},g=()=>{x.value=null,p.value=null},v=M(()=>x.value?d.value?x.value.sql.safe:x.value.sql.full:""),C=M(()=>{if(!x.value)return!1;const{added:e,removed:c,modified:$}=x.value.summary;return e+c+$>0});return{result:x,isLoading:_,error:p,safeMode:d,currentSql:v,hasDifferences:C,runDiff:f,reset:g}}const je={class:"flex h-full flex-col gap-4 overflow-hidden p-4"},Ne={class:"flex items-center justify-between gap-2"},Pe={key:0,class:"ml-1 rounded-full bg-primary px-1.5 py-0.5 text-xxs text-primary-foreground"},Ue={key:0,class:"ml-1 rounded-full bg-muted px-1.5 py-0.5 text-xxs text-muted-foreground"},Ae={class:"text-xs text-muted-foreground"},Ee={key:0,class:"flex-1 overflow-y-auto"},Fe={key:1,class:"flex-1 overflow-y-auto"},Oe={key:2,class:"flex flex-1 flex-col items-center justify-center gap-3 text-muted-foreground"},Xe=R({__name:"SchemaDiffContainer",props:{sourceConnectionId:{}},setup(x){const _=x,p=Z(),d=M(()=>p.connections.find(D=>D.id===_.sourceConnectionId)??null),n=M(()=>p.connections.filter(D=>D.id!==_.sourceConnectionId)),f=q(null),{result:g,isLoading:v,error:C,safeMode:e,currentSql:c,hasDifferences:$,runDiff:b}=Re(),h=async()=>{!d.value||!f.value||await b(d.value,f.value)},s=M(()=>{var D;return((D=g.value)==null?void 0:D.sql.statements.filter(m=>m.destructive).length)??0}),i=q("diff");return(D,m)=>{const B=H,I=j,A=ie,E=ae,F=oe,N=ne,O=se,Q=te;return t(),a("div",je,[o(B,{icon:"hugeicons:git-compare",title:"Schema Diff",description:"Compare schemas between two database connections and generate sync SQL."}),o(me,{"source-connection":r(d),"target-connection":r(f),connections:r(n),"is-loading":r(v),"onUpdate:targetConnection":m[0]||(m[0]=L=>f.value=L),onRun:h},null,8,["source-connection","target-connection","connections","is-loading"]),r(C)?(t(),V(F,{key:0,class:"border-border bg-muted/30"},{default:w(()=>[o(I,{name:"hugeicons:alert-circle",class:"size-4 text-destructive"}),o(A,{class:"text-destructive"},{default:w(()=>m[5]||(m[5]=[k("Diff Failed")])),_:1}),o(E,{class:"text-muted-foreground"},{default:w(()=>[k(u(r(C)),1)]),_:1})]),_:1})):z("",!0),r(g)?(t(),a(y,{key:1},[l("div",Ne,[o(Q,{modelValue:r(i),"onUpdate:modelValue":m[3]||(m[3]=L=>ee(i)?i.value=L:null),class:"min-w-0 flex-1 gap-0"},{default:w(()=>[o(O,{class:"h-8 max-w-full justify-start! overflow-x-auto"},{default:w(()=>[o(N,{value:"diff",class:"min-w-fit shrink-0 cursor-pointer rounded-sm px-1.5 text-xs",onClick:m[1]||(m[1]=L=>i.value="diff")},{default:w(()=>[o(I,{name:"hugeicons:git-compare",class:"shrink-0 size-3.5"}),m[6]||(m[6]=k(" Diff View ")),r($)?(t(),a("span",Pe,u(r(g).summary.added+r(g).summary.removed+r(g).summary.modified),1)):z("",!0)]),_:1}),o(N,{value:"sql",class:"min-w-fit shrink-0 cursor-pointer rounded-sm px-1.5 text-xs",onClick:m[2]||(m[2]=L=>i.value="sql")},{default:w(()=>[o(I,{name:"hugeicons:code",class:"shrink-0 size-3.5"}),m[7]||(m[7]=k(" SQL ")),r(g).sql.statements.length>0?(t(),a("span",Ue,u(r(g).sql.statements.length),1)):z("",!0)]),_:1})]),_:1})]),_:1},8,["modelValue"]),l("div",Ae,u(r(i)==="diff"?"Visualize structural differences":"Review synchronization script"),1)]),r(i)==="diff"?(t(),a("div",Ee,[o(Be,{result:r(g)},null,8,["result"])])):(t(),a("div",Fe,[o(ke,{sql:r(c),"safe-mode":r(e),"statement-count":r(g).sql.statements.length,"destructive-count":r(s),"onUpdate:safeMode":m[4]||(m[4]=L=>e.value=L)},null,8,["sql","safe-mode","statement-count","destructive-count"])]))],64)):r(v)?z("",!0):(t(),a("div",Oe,[o(I,{name:"hugeicons:git-compare",class:"size-14 opacity-30"}),m[8]||(m[8]=l("p",{class:"text-sm"},"Select a target connection and run the diff",-1))]))])}}});export{Xe as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as e}from"./B_U4hCvn.js";import{d as r,a8 as c,c as n,k as m,g as o,o as p}from"./BfSmOVMj.js";import"./DoB1FFC2.js";import"./DDS9xPxH.js";import"./BVl8VKr5.js";import"./D0mrO5vS.js";import"./BCFLQ_rL.js";import"./CS5akSNT.js";import"./C2kyA9ZS.js";import"./DaiufW99.js";const C=r({__name:"[name]",setup(s){const t=c(),i=n(()=>t.params.connectionId),a=n(()=>t.params.name);return(_,u)=>(p(),m(o(e),{"connection-id":o(i),"initial-tab":o(a)},null,8,["connection-id","initial-tab"]))}});export{C as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as d}from"./
|
|
1
|
+
import{_ as d}from"./CJhlBUX_.js";import{_ as f}from"./D-pZQQ02.js";import{d as u,e as p,f as t,m as n,w as a,z as s,g as i,o as g,A as _}from"./BfSmOVMj.js";import{_ as r}from"./Ef-1UUMy.js";const x={class:"p-2 flex flex-col items-center justify-center h-full gap-2"},c={class:"text-muted-foreground mt-4"},v={class:"flex items-center pt-3 text-muted-foreground gap-0.5 text-sm"},b={class:"flex items-center pt-1 text-muted-foreground gap-0.5 text-sm"},B={class:"flex items-center pt-1 text-muted-foreground gap-0.5 text-sm"},C={class:"flex items-center pt-1 text-muted-foreground gap-0.5 text-sm"},V=u({__name:"index",setup(k){return(w,e)=>{const l=f,m=d,o=_;return g(),p("div",x,[t(m,{class:"rounded-2xl size-40"},{default:a(()=>[t(l,{src:"/logo.png",alt:"@unovue"})]),_:1}),n("div",c,[e[0]||(e[0]=s(" Click on a database table from the sidebar to begin ")),t(o,{name:"hugeicons:artificial-intelligence-08",class:"size-4 min-w-4"})]),n("div",v,[t(o,{name:"hugeicons:settings-01"}),e[2]||(e[2]=s(" Open setting ")),t(i(r),{class:"pl-2"},{default:a(()=>e[1]||(e[1]=[s("(⌘,)")])),_:1})]),n("div",b,[t(o,{name:"hugeicons:command"}),e[4]||(e[4]=s(" Command Palette ")),t(i(r),{class:"pl-2"},{default:a(()=>e[3]||(e[3]=[s("(⌘K or ⌘P)")])),_:1})]),n("div",B,[t(o,{name:"hugeicons:sidebar-left"}),e[6]||(e[6]=s(" Toggle left sidebar ")),t(i(r),{class:"pl-2"},{default:a(()=>e[5]||(e[5]=[s("(⌘B)")])),_:1})]),n("div",C,[t(o,{name:"hugeicons:sidebar-right"}),e[8]||(e[8]=s(" Toggle right sidebar ")),t(i(r),{class:"pl-2"},{default:a(()=>e[7]||(e[7]=[s("(⇧⌘B)")])),_:1})])])}}});export{V as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as p}from"./BfSmOVMj.js";function N(s){let e=s.toLowerCase();const m=["tbl_","table_"];for(const l of m)e!=null&&e.startsWith(l)&&(e=e.slice(l.length));e=e.replace(/(_v\d+|_\d+)$/,"");let n=e.split(/[_-]/);n.length===1&&(n=e.match(/[A-Z]?[a-z]+|[A-Z]+(?=[A-Z][a-z]|\b)/g)||[e]);let o=n.filter(l=>l.length>0).map(l=>l[0]).join("");return!o&&e&&(o=e[0]),o}function $(s,e,m){var d,t;const n=document.createElement("div");n.className="gap-1 flex flex-col text-sm min-w-[20rem]";const o=((d=e.primary_keys)==null?void 0:d.map(c=>c.column))||[],l=((t=e.foreign_keys)==null?void 0:t.map(c=>c.column))||[],a=document.createElement("div");a.className="font-medium text-sm mb-1",a.textContent=`${s} (${m||"public"})`,n.appendChild(a);const i=document.createElement("div");if(i.className="text-xs text-muted-foreground",i.textContent=`Columns: ${e.columns.length}`,n.appendChild(i),o.length>0){const c=document.createElement("div");c.className="text-xs text-muted-foreground",c.textContent=`Primary Keys: ${o.join(", ")}`,n.appendChild(c)}if(l.length>0){const c=document.createElement("div");c.className="text-xs text-muted-foreground",c.textContent=`Foreign Keys: ${l.join(", ")}`,n.appendChild(c)}const r=document.createElement("div");r.className="mt-1 text-xs max-h-[12rem] overflow-auto";for(const c of e.columns){const u=document.createElement("div");u.className=o.includes(c.name)?"py-0.5 font-semibold":"py-0.5",u.append(document.createTextNode(`${c.name}: `));const x=document.createElement("span");x.className="text-muted-foreground",x.textContent=c.short_type_name,u.appendChild(x),r.appendChild(u)}return n.appendChild(r),n}function g(s,e,m,n,o,l){const a=document.createElement("div");a.className="gap-1 flex flex-col text-sm min-w-[10rem]";const i=document.createElement("div");i.className="font-medium text-sm mb-1",i.textContent=s,a.appendChild(i);const r=document.createElement("div");r.className="text-xs text-muted-foreground",r.textContent=`Type: ${e}`,a.appendChild(r);const d=document.createElement("div");if(d.className="text-xs text-muted-foreground",d.textContent=`Table: ${l?`${l}.${m}`:m}`,a.appendChild(d),n){const t=document.createElement("div");t.className="text-xs text-yellow-500 mt-1 flex items-center gap-1",t.textContent="Primary Key",a.appendChild(t)}if(o){const t=document.createElement("div");t.className="text-xs text-blue-500 mt-1 flex items-center gap-1",t.textContent=`FK -> ${o.referenced_table}.${o.referenced_column}`,a.appendChild(t)}return a}function E(s,e,m){const n=document.createElement("div");n.className="gap-1 flex flex-col text-sm min-w-[20rem]";const o=document.createElement("div");o.className="font-medium text-sm mb-1",o.textContent=`${s} (View, ${m||"public"})`,n.appendChild(o);const l=document.createElement("div");l.className="text-xs text-muted-foreground",l.textContent=`Type: ${e.type}`,n.appendChild(l);const a=document.createElement("div");a.className="text-xs text-muted-foreground",a.textContent=`Columns: ${e.columns.length}`,n.appendChild(a);const i=document.createElement("div");i.className="mt-1 text-xs max-h-[12rem] overflow-auto";for(const r of e.columns){const d=document.createElement("div");d.className="py-0.5",d.append(document.createTextNode(`${r.name}: `));const t=document.createElement("span");t.className="text-muted-foreground",t.textContent=r.short_type_name,d.appendChild(t),i.appendChild(d)}return n.appendChild(i),n}function w(s,e,m,n){const o=document.createElement("div");o.className="gap-1 flex flex-col text-sm min-w-[18rem]";const l=document.createElement("div");if(l.className="font-medium text-sm mb-1",l.textContent=`${s} (${e}, ${n||"public"})`,o.appendChild(l),m){const a=document.createElement("div");a.className="text-xs font-semibold mt-1",a.textContent="Parameters:",o.appendChild(a);const i=document.createElement("div");i.className="text-xs text-muted-foreground leading-relaxed";const r=m.split(",").map(d=>d.trim());for(const d of r){const t=document.createElement("div");t.textContent=`• ${d}`,i.appendChild(t)}o.appendChild(i)}else{const a=document.createElement("div");a.className="text-xs text-muted-foreground",a.textContent="No parameters",o.appendChild(a)}return o}function j(s,e){const m=document.createElement("div");m.className="gap-1 flex flex-col text-sm min-w-[12rem]";const n=document.createElement("div");n.className="font-medium text-sm mb-1",n.textContent=`Variable: ${s}`,m.appendChild(n);const o=document.createElement("div");o.className="text-xs font-semibold mt-1",o.textContent="Current Value:",m.appendChild(o);const l=document.createElement("pre");return l.className="text-xs bg-muted p-1.5 rounded-sm mt-0.5 overflow-auto max-w-[20rem]",l.textContent=typeof e=="object"?JSON.stringify(e,null,2):String(e),m.appendChild(l),m}function _(s){return s?`(${s.split(",").map(n=>n.trim()).map(n=>{const o=n.match(/^([\w"]+)\s+([\w"\[\]]+)/i);return o?`${o[1]}:${o[2]}`:n}).join(", ")})`:"()"}function T(s){const e=s.toLowerCase();return e.includes("int")||e.includes("numeric")||e.includes("decimal")||e.includes("float")||e.includes("double")||e.includes("real")||e.includes("serial")||e.includes("money")?p.Numeric:e.includes("char")||e.includes("text")||e.includes("varchar")||e.includes("string")||e.includes("uuid")||e.includes("citext")?p.String:e.includes("date")||e.includes("time")||e.includes("timestamp")||e.includes("interval")?p.Calendar:e.includes("array")||e.includes("json")||e.includes("jsonb")||e.includes("[]")?p.Brackets:e.includes("vector")?p.Vector:p.Field}function S({typeName:s,isPrimaryKey:e,hasForeignKey:m}){return e?p.Keyword:m?p.ForeignKey:T(s)}function y({column:s,tableName:e,schemaName:m,isPrimaryKey:n,foreignKey:o,info:l}){const a={label:s.name,type:S({typeName:s.short_type_name,isPrimaryKey:n,hasForeignKey:!!o}),detail:s.short_type_name,boost:-s.ordinal_position};return l?a.info=l:a.info=()=>g(s.name,s.short_type_name,e,n,o,m),a}function F({schemas:s,defaultSchemaName:e,fileVariables:m}){var l,a;const n={};if(s&&s.length>0)for(const i of s){const r=i.name,d={};if(i.tableDetails)for(const t in i.tableDetails){const c=i.tableDetails[t],u={},x=new Set(((l=c.primary_keys)==null?void 0:l.map(f=>f.column))||[]),h=new Map(((a=c.foreign_keys)==null?void 0:a.map(f=>[f.column,f]))||[]);for(const f of c.columns){const b=x.has(f.name),v=h.get(f.name);u[f.name]={self:y({column:f,tableName:t,schemaName:r,isPrimaryKey:b,foreignKey:v}),children:{}}}u["*"]={self:{label:"*",type:p.Function,detail:"All columns",boost:50,info:()=>g("* All columns","Selects all columns",t,!1,void 0,r)},children:{}};const C=N(t);d[t]={self:{label:t,displayLabel:`${t} AS ${C}`,type:p.Table,detail:`${c.columns.length} columns`,apply:`${t} AS ${C}`,boost:100,info:()=>$(t,c,r)},children:u}}if(i.viewDetails)for(const t in i.viewDetails){const c=i.viewDetails[t],u={};for(const x of c.columns)u[x.name]={self:y({column:x,tableName:t,schemaName:r,isPrimaryKey:!1}),children:{}};d[t]={self:{label:t,type:p.Table,detail:`View (${c.columns.length} columns)`,boost:90,info:()=>E(t,c,r)},children:u}}if(i.functions)for(const t of i.functions){const c=_(t.parameters);d[t.name]={self:{label:t.name,type:p.Function,detail:`${t.type.toLowerCase()}`,boost:80,info:()=>w(t.name,t.type,t.parameters,r),apply(u,x,h,C){const f=`${t.name}${c}`;u.dispatch({changes:{from:h,to:C,insert:f},selection:{anchor:h+t.name.length+1},userEvent:"input.complete"})}},children:{}}}n[r]={self:{label:r,type:p.Database,detail:`${Object.keys(d).length} objects`},children:d}}const o=(e&&n[e]?e:void 0)||Object.keys(n)[0];return{schema:n,defaultSchema:o}}export{y as a,j as c,N as g,F as m};
|