orcaq 1.0.28 → 1.0.30
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/{S6q6IfIg.js → 6I72R6kW.js} +1 -1
- package/.output/public/_nuxt/{W0T58tNs.js → 8_EuFD3X.js} +1 -1
- package/.output/public/_nuxt/B6H7odCi.js +1 -0
- package/.output/public/_nuxt/B7nSJBpY.js +1 -0
- package/.output/public/_nuxt/{B-o1cyu1.js → BBNxNerU.js} +1 -1
- package/.output/public/_nuxt/BDKd-SA5.js +1 -0
- package/.output/public/_nuxt/{DAsY4LnG.js → BDRdbLz0.js} +1 -1
- package/.output/public/_nuxt/{T2yrk5P8.js → BKWWO5HE.js} +1 -1
- package/.output/public/_nuxt/{DhSSuHOz.js → BV6TSzbC.js} +4 -1
- package/.output/public/_nuxt/{BranJUWp.js → BVKG-F8j.js} +1 -1
- package/.output/public/_nuxt/{BHFnD9yO.js → BoGW82nK.js} +1 -1
- package/.output/public/_nuxt/Bs_ItSbk.js +1 -0
- package/.output/public/_nuxt/{BZEKLHO-.js → Btu7FO8S.js} +1 -1
- package/.output/public/_nuxt/C04Tz2vC.js +67 -0
- package/.output/public/_nuxt/{DNmOzKte.js → C4JPKbJK.js} +1 -1
- package/.output/public/_nuxt/{B7iORLht.js → C5KSeJUi.js} +5 -5
- package/.output/public/_nuxt/CDnZBTSk.js +1 -0
- package/.output/public/_nuxt/CKq06U7u.js +19 -0
- package/.output/public/_nuxt/{vU5dtBjy.js → CQpD-JHn.js} +1 -1
- package/.output/public/_nuxt/{DdMwxl0I.js → C_CjS9Yt.js} +1 -1
- package/.output/public/_nuxt/{BRpeq4XL.js → Chcc8yNZ.js} +1 -1
- package/.output/public/_nuxt/{Dwm3kp4S.js → ClnidwGv.js} +86 -86
- package/.output/public/_nuxt/{BV4_2PzU.js → CpzDNDcD.js} +1 -1
- package/.output/public/_nuxt/Cs1HkKH7.js +1 -0
- package/.output/public/_nuxt/{DgPgl0Vt.js → CsYOf3m-.js} +1 -1
- package/.output/public/_nuxt/{Ds4ET3BG.js → CtRc_P0d.js} +27 -27
- package/.output/public/_nuxt/Ctr2mpV9.js +2 -0
- package/.output/public/_nuxt/{SzZsnvJ-.js → CzF1NEwP.js} +1 -1
- package/.output/public/_nuxt/{D4jtSPyP.js → D2j2esR5.js} +2 -2
- package/.output/public/_nuxt/D4ZGn1tW.js +1 -0
- package/.output/public/_nuxt/{B3XOCDJg.js → D6YseYA6.js} +1 -1
- package/.output/public/_nuxt/{CbjqLbgu.js → D7EPcL9i.js} +1 -1
- package/.output/public/_nuxt/{DfL_wWxk.js → DCMJS6Fh.js} +1 -1
- package/.output/public/_nuxt/{rdXrKZa8.js → DFd73eNR.js} +1 -1
- package/.output/public/_nuxt/{BUuSKT2f.js → DQiMjOqm.js} +15 -15
- package/.output/public/_nuxt/{BQAF7cM_.js → DVe5MHjS.js} +1 -1
- package/.output/public/_nuxt/{BsnN2mQb.js → D_G1mAJ8.js} +2 -2
- package/.output/public/_nuxt/{DM73sEXg.js → De1hkrJC.js} +1 -1
- package/.output/public/_nuxt/DlfHMoPT.js +1 -0
- package/.output/public/_nuxt/{BIW9Rd2L.js → DnCs9xpG.js} +1 -1
- package/.output/public/_nuxt/DvJ2MjiW.js +2 -0
- package/.output/public/_nuxt/DynamicTable.B3c2woGb.css +1 -0
- package/.output/public/_nuxt/{CAcIcjka.js → DzJD_fir.js} +3 -3
- package/.output/public/_nuxt/{UrLgZoyE.js → Dzr_z_mY.js} +1 -1
- package/.output/public/_nuxt/{DftZZFKd.js → FyrDS92w.js} +104 -104
- package/.output/public/_nuxt/{BlWNlw-C.js → HQyqkOpZ.js} +1 -1
- package/.output/public/_nuxt/{BwddCgOY.js → KlH93fIm.js} +1 -1
- package/.output/public/_nuxt/{iDT-eQ46.js → MLO1tLKS.js} +1 -1
- package/.output/public/_nuxt/{D8s-WG7x.js → OEVyCyyD.js} +1 -1
- package/.output/public/_nuxt/{_fileId_.B3PtfMYN.css → _fileId_.DDOcnoDQ.css} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/0ab6db39-d52b-46b9-a687-0df3b4c65db5.json +1 -0
- package/.output/public/_nuxt/builds/meta/dev.json +1 -0
- package/.output/public/_nuxt/{CQNFvXDN.js → e_Ir8LP9.js} +1 -1
- package/.output/public/_nuxt/entry.XV7TCKso.css +1 -0
- package/.output/public/_nuxt/{DpyvTVPg.js → fRxmPZZB.js} +1 -1
- package/.output/public/_nuxt/{B0pvfm-W.js → h2fvG4Xe.js} +1 -1
- package/.output/public/_nuxt/llxtZpFD.js +160 -0
- package/.output/public/_nuxt/{CQr87mff.js → q4KcRwD-.js} +1 -1
- package/.output/public/_nuxt/{Cqe10li5.js → qIKg23Pc.js} +1 -1
- package/.output/public/_nuxt/{aKVabwds.js → txD20ixW.js} +1 -1
- package/.output/public/_nuxt/{CwtNS48a.js → ubO-cWd-.js} +1 -1
- package/.output/public/_nuxt/x2HBvptj.js +1 -0
- package/.output/public/_nuxt/{lN7hePE6.js → y68LmDX2.js} +1 -1
- package/.output/server/chunks/build/client.manifest.mjs +394 -382
- package/.output/server/chunks/build/client.manifest.mjs.map +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +389 -372
- package/.output/server/chunks/routes/api/ai/agent.mjs +1 -0
- package/.output/server/chunks/routes/api/ai/agent.mjs.map +1 -1
- package/.output/server/chunks/routes/api/ai/chat.mjs +1 -0
- package/.output/server/chunks/routes/api/ai/chat.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-export/export-database.mjs +1 -0
- package/.output/server/chunks/routes/api/database-export/export-database.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-import/import-database.mjs +1 -0
- package/.output/server/chunks/routes/api/database-import/import-database.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/create-role.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/create-role.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/delete-role.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/delete-role.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/get-databases-with-permissions.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/get-databases-with-permissions.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/get-databases.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/get-databases.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/get-permissions.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/get-permissions.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/get-role-inheritance.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/get-role-inheritance.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/get-role.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/get-role.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/get-roles.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/get-roles.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/get-schema-objects.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/get-schema-objects.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/get-schemas.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/get-schemas.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/grant-bulk-permissions.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/grant-bulk-permissions.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/grant-permission.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/grant-permission.mjs.map +1 -1
- package/.output/server/chunks/routes/api/database-roles/revoke-permission.mjs +1 -0
- package/.output/server/chunks/routes/api/database-roles/revoke-permission.mjs.map +1 -1
- package/.output/server/chunks/routes/api/functions/definition.post.mjs +1 -0
- package/.output/server/chunks/routes/api/functions/definition.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/functions/delete.post.mjs +1 -0
- package/.output/server/chunks/routes/api/functions/delete.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/functions/overview.post.mjs +1 -0
- package/.output/server/chunks/routes/api/functions/overview.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/functions/rename.post.mjs +1 -0
- package/.output/server/chunks/routes/api/functions/rename.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/functions/signature.post.mjs +1 -0
- package/.output/server/chunks/routes/api/functions/signature.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/functions/update.post.mjs +1 -0
- package/.output/server/chunks/routes/api/functions/update.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/instance-insights/cancel-query.post.mjs +1 -0
- package/.output/server/chunks/routes/api/instance-insights/cancel-query.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/instance-insights/configuration.post.mjs +1 -0
- package/.output/server/chunks/routes/api/instance-insights/configuration.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/instance-insights/dashboard.post.mjs +1 -0
- package/.output/server/chunks/routes/api/instance-insights/dashboard.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/instance-insights/drop-slot.post.mjs +1 -0
- package/.output/server/chunks/routes/api/instance-insights/drop-slot.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/instance-insights/replication.post.mjs +1 -0
- package/.output/server/chunks/routes/api/instance-insights/replication.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/instance-insights/state.post.mjs +1 -0
- package/.output/server/chunks/routes/api/instance-insights/state.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/instance-insights/terminate-connection.post.mjs +1 -0
- package/.output/server/chunks/routes/api/instance-insights/terminate-connection.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/instance-insights/toggle-slot-status.post.mjs +1 -0
- package/.output/server/chunks/routes/api/instance-insights/toggle-slot-status.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/managment-connection/health-check.mjs +1 -0
- package/.output/server/chunks/routes/api/managment-connection/health-check.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metadata/erd.post.mjs +1 -0
- package/.output/server/chunks/routes/api/metadata/erd.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metadata/meta-data.post.mjs +1 -0
- package/.output/server/chunks/routes/api/metadata/meta-data.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metadata/reverse-schemas.post.mjs +1 -0
- package/.output/server/chunks/routes/api/metadata/reverse-schemas.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metrics/monitor.post.mjs +1 -0
- package/.output/server/chunks/routes/api/metrics/monitor.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/query/execute.post.mjs +1 -0
- package/.output/server/chunks/routes/api/query/execute.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/query/raw-execute-stream.post.mjs +1 -0
- package/.output/server/chunks/routes/api/query/raw-execute-stream.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/query/raw-execute.post.mjs +1 -0
- package/.output/server/chunks/routes/api/query/raw-execute.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/bulk-delete.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/bulk-delete.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/bulk-update.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/bulk-update.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/ddl.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/ddl.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/export.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/export.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/indexes.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/indexes.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/meta.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/meta.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/overview.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/overview.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/rls.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/rls.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/rules.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/rules.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/size.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/size.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/structure.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/structure.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tables/triggers.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tables/triggers.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/views/definition.post.mjs +1 -0
- package/.output/server/chunks/routes/api/views/definition.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/views/dependencies.post.mjs +1 -0
- package/.output/server/chunks/routes/api/views/dependencies.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/views/explain.post.mjs +1 -0
- package/.output/server/chunks/routes/api/views/explain.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/views/indexes.post.mjs +1 -0
- package/.output/server/chunks/routes/api/views/indexes.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/views/meta.post.mjs +1 -0
- package/.output/server/chunks/routes/api/views/meta.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/views/overview.post.mjs +1 -0
- package/.output/server/chunks/routes/api/views/overview.post.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -0
- package/.output/server/index.mjs +1 -0
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/bin/cli.mjs +55 -9
- package/package.json +1 -1
- package/.output/public/_nuxt/ACi_yrrw.js +0 -1
- package/.output/public/_nuxt/B-E3EDXq.js +0 -21
- package/.output/public/_nuxt/B-rj9QI0.js +0 -1
- package/.output/public/_nuxt/BDPGejuO.js +0 -2
- package/.output/public/_nuxt/BHp-OX9z.js +0 -1
- package/.output/public/_nuxt/BJdgR-zN.js +0 -1
- package/.output/public/_nuxt/BSs5g8DH.js +0 -1
- package/.output/public/_nuxt/CO-m0olR.js +0 -2
- package/.output/public/_nuxt/CQQKPHb8.js +0 -225
- package/.output/public/_nuxt/CfblXyCF.js +0 -1
- package/.output/public/_nuxt/D9SCXF1G.js +0 -1
- package/.output/public/_nuxt/DynamicTable.BW0D7NXb.css +0 -1
- package/.output/public/_nuxt/GqcI3eLm.js +0 -67
- package/.output/public/_nuxt/builds/meta/1e32d709-950d-49a3-8d61-1b3385318747.json +0 -1
- package/.output/public/_nuxt/entry.Kia9TCip.css +0 -1
- package/.output/public/_nuxt/mW-nBTJP.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as Jy,aH as jy,a2 as rs,
|
|
1
|
+
import{d as Jy,aH as jy,a2 as rs,H as Pa,al as tm,E as vi,aF as em,aC as Ra,w as md,aD as rm,aE as im,aI as nm,W as am,b as om}from"./FyrDS92w.js";/*! *****************************************************************************
|
|
2
2
|
Copyright (c) Microsoft Corporation.
|
|
3
3
|
|
|
4
4
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{d as G,an as pe,c as C,e as l,
|
|
1
|
+
import{d as G,an as pe,c as C,e as l,G as re,b as t,f as ce,o as s,E as N,aO as te,n as L,l as e,p,j as fe,q as Y,x as b,r as $,g as u,h as n,a as V,F as O,s as A,y as ve,z as ge,m as ue,Y as _e,B as be,bl as he,aC as ie,C as ye,O as xe,Q as Ce,V as $e,K as X,X as ke,at as Ne,bd as Te,Z as we,a1 as Ee,R as Pe,T as Se,D as De,a6 as Re,k as je,aD as de,W as Be,bf as W,aR as ze,aG as Oe,_ as Ie}from"./FyrDS92w.js";import{C as Le,a as Ue,b as Ve}from"./txD20ixW.js";import{_ as Ae}from"./DnCs9xpG.js";import{u as Ge,_ as qe}from"./DzJD_fir.js";import{u as Fe}from"./BVKG-F8j.js";import"./Btu7FO8S.js";import"./Bdtn2mn5.js";import"./DQiMjOqm.js";const Me=G({__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(),C(t(Le),re({"data-slot":"collapsible"},t(a)),{default:l(({open:T})=>[ce(k.$slots,"default",{open:T})]),_:3},16))}}),He=G({__name:"CollapsibleContent",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(w){const h=w;return(f,d)=>(s(),C(t(Ue),re({"data-slot":"collapsible-content"},h),{default:l(()=>[ce(f.$slots,"default")]),_:3},16))}}),Ke=G({__name:"CollapsibleTrigger",props:{asChild:{type:Boolean},as:{}},setup(w){const h=w;return(f,d)=>(s(),C(t(Ve),re({"data-slot":"collapsible-trigger"},h),{default:l(()=>[ce(f.$slots,"default")]),_:3},16))}}),me=G({__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=Y,T=te;return t(f)?(s(),C(T,{key:0,variant:"outline",class:L(["text-xs items-center flex gap-1 ",!t(d)&&"opacity-50"])},{default:l(()=>[e(g,{name:t(d)?"lucide:check":"lucide:x",class:L(t(fe)("size-3",t(d)&&"text-green-500"))},null,8,["name","class"]),p(" "+b(a.label),1)]),_:1},8,["class"])):(s(),C(T,{key:1,variant:"secondary",class:"text-xs"},{default:l(()=>[p(b(a.label)+": "+b(a.value),1)]),_:1}))}}}),Qe={class:"rounded-md border"},Xe={key:1,class:"ml-auto flex gap-1"},We={key:0,class:"border-t bg-muted/20 p-3"},Ye={class:"px-3 py-2 border-b border-border/50"},Ze={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=G({__name:"DatabasePermissionCard",props:{database:{},isExpanded:{type:Boolean},isCurrentDatabase:{type:Boolean},permissions:{}},emits:["toggle","updatePermission"],setup(w,{emit:h}){const f=w,d=h,a=$("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,_,E;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:((E=f.permissions)==null?void 0:E.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 _=Y,E=te,j=ue,R=ge,B=be,Q=ve,q=he;return s(),u("div",Qe,[n("div",{class:L(["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:L(["size-4 transition-transform",!c.database.canConnect&&"invisible"])},null,8,["name","class"]),e(_,{name:c.database.canConnect?"hugeicons:database":"hugeicons:database-locked",class:L(["size-4",c.database.canConnect?"text-yellow-400":"text-muted-foreground"])},null,8,["name","class"]),n("span",{class:L(["text-sm font-medium",!c.database.canConnect&&"text-muted-foreground"])},b(c.database.databaseName),3),c.database.canConnect?(s(),u("div",Xe,[c.database.canConnect?(s(),C(E,{key:0,variant:"outline",class:"text-xs"},{default:l(()=>m[1]||(m[1]=[p("CONNECT")])),_:1})):V("",!0),c.database.canCreate?(s(),C(E,{key:1,variant:"outline",class:"text-xs"},{default:l(()=>m[2]||(m[2]=[p("CREATE")])),_:1})):V("",!0),c.database.canTemp?(s(),C(E,{key:2,variant:"outline",class:"text-xs"},{default:l(()=>m[3]||(m[3]=[p("TEMP")])),_:1})):V("",!0)])):(s(),C(_,{key:0,name:"hugeicons:circle-lock-01",class:"size-3 text-muted-foreground ml-auto"}))],2),c.isExpanded&&c.database.canConnect?(s(),u("div",We,[n("div",Ye,[m[4]||(m[4]=n("p",{class:"text-xs text-muted-foreground mb-2"}," Database-level privileges: ",-1)),n("div",Ze,[(s(!0),u(O,null,A(t(D),v=>(s(),C(me,{key:v.id,label:v.label,value:v.value,type:v.type},null,8,["label","value","type"]))),128))])]),c.isCurrentDatabase?(s(),u(O,{key:0},[n("div",Je,[(s(),u(O,null,A(k,v=>n("button",{key:v.id,class:L(["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:I=>a.value=v.id},[e(_,{name:v.icon,class:"size-3"},null,8,["name"]),p(" "+b(v.label)+" ",1),e(E,{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(O,null,A(t(g),(v,I)=>(s(),u("div",{key:`${v.schemaName}-${v.objectName}-${I}`,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(O,null,A(v.privileges,H=>(s(),C(E,{variant:"outline",class:"text-xs normal-case"},{default:l(()=>[p(b(H),1)]),_:2},1024))),256))]),e(q,null,{default:l(()=>[e(Q,null,{default:l(()=>[e(R,{"as-child":""},{default:l(()=>[e(j,{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=G({__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=$("table"),D=$("public"),c=$(""),m=$([]),_=$([]);Ge();const E=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 j=N(()=>m.value),R=N(()=>f.filter(x=>!m.value.includes(x))),B=N(()=>j.value.length>0||R.value.length>0),Q=N(()=>{const x=D.value||"<schema>",i=c.value||"<object>",F=g.roleName||"<role>",M=`${y.value.toUpperCase()} "${x}"."${i}"`,U=[];return j.value.length&&U.push(`GRANT ${j.value.join(", ")} ON ${M} TO "${F}";`),R.value.length&&U.push(`REVOKE ${R.value.join(", ")} ON ${M} FROM "${F}";`),U.length?U.join(`
|
|
2
2
|
|
|
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: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 F=Ce,M=$e,U=xe,ne=Te,o=Ne,r=Ee,I=we,Z=ke,J=Pe,ae=Ae,oe=qe,ee=ue,se=Y,P=Se,K=De,le=ye;return s(),C(le,{open:x.open,"onUpdate:open":i[3]||(i[3]=S=>T("update:open",S))},{default:l(()=>[e(K,{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(M,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(X),null,{default:l(()=>i[5]||(i[5]=[p("Object Type")])),_:1}),e(Z,{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(I,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(X),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(X),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(X),null,{default:l(()=>i[12]||(i[12]=[p("Privileges")])),_:1}),n("div",gs,[(s(!0),u(z,null,A(E.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(X),null,{default:l(()=>i[13]||(i[13]=[p("SQL Preview")])),_:1}),e(oe,{code:Q.value,"show-copy-button":"","max-height":"24rem"},null,8,["code"])])]),e(P,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(),C(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"},Cs={key:0,class:"flex flex-wrap gap-2"},$s={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=Y,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",Cs,[(s(!0),u(z,null,A(t(f),y=>(s(),C(me,{key:y.id,label:y.label,value:y.value,type:y.type},null,8,["label","value","type"]))),128)),a.roleInfo.validUntil?(s(),C(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",$s,[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"},Es={class:"flex items-center gap-3 px-4 py-1 bg-sidebar"},Ps={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"},Is={class:"flex items-center gap-2 mb-2"},zs={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"},qs={class:"flex items-center gap-2 mb-3 shrink-0"},Fs={key:0,class:"flex items-center gap-2 text-muted-foreground"},Ms={key:2,class:"space-y-1 flex-1 overflow-y-auto"},st=G({__name:"[roleName]",setup(w){const h=Re(),{connectionStore: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=$(null),y=$([]),D=async()=>{if(!(!a.value||!d.value))try{const r=await $fetch("/api/database-roles/get-role",{method:"POST",body:{...W(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=$(!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:{...W(a.value),roleName:d.value}});y.value=o}catch(o){console.error("Error fetching role inheritance:",o),y.value=[]}finally{c.value=!1}}},_=$(!1),E=$(!1),j=$(null),R=$(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:{...W(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:Q,databasePermissions:q,fetchDatabasePermissions:v}=Fe(a),L=$(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=$(!1),F=$("grant"),M=$(),U=o=>{F.value="update",M.value=o,i.value=!0},ne=async o=>{if(!(!a.value||!d.value)){E.value=!0;try{const r=[];o.grant.length>0&&r.push($fetch("/api/database-roles/grant-permission",{method:"POST",body:{...W(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:{...W(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{E.value=!1}}};return(o,r)=>{const I=Y,Z=ue,J=Ke,ae=He,oe=Me,ee=te,se=Le;return s(),u("div",Ts,[n("div",ws,[n("div",Es,[n("div",null,[n("p",Ps,b(t(d)),1)]),n("div",Ss,[e(Z,{variant:"outline",size:"iconSm",disabled:t(_),onClick:B},{default:l(()=>[e(I,{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(Ie),{visible:t(_)},null,8,["visible"])])):t(R)?(s(),u("div",Rs,[e(I,{name:"hugeicons:information-circle",class:"size-12 text-destructive"}),n("p",js,b(t(R)),1),e(Z,{variant:"outline",size:"sm",class:"mt-4 font-normal",onClick:B},{default:l(()=>r[1]||(r[1]=[p(" Retry ")])),_:1})])):t(j)?(s(),u(z,{key:2},[e(Ns,{"role-info":t(T)},null,8,["role-info"]),n("div",Bs,[e(oe,{"default-open":!0},{default:l(({open:P})=>[n("div",Is,[n("div",zs,[e(I,{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(P?"Collapse":"Expand"),1),e(I,{name:"lucide:chevron-down",class:O(["size-4 transition-transform",P&&"rotate-180"])},null,8,["class"])])]),_:2},1024)]),e(ae,null,{default:l(()=>[t(c)?(s(),u("div",Us,[e(I,{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(z,null,A(t(y),(K,le)=>(s(),u("div",{key:`${K.roleName}-${le}`,class:"flex items-center text-sm gap-1 hover:bg-accent rounded-sm",style:ze({paddingLeft:`${K.depth*16}px`})},[e(I,{name:"lucide:corner-down-right",class:"size-3 text-muted-foreground"}),n("span",null,b(K.roleName),1)],4))),128))]))]),_:1})]),_:1})]),n("div",Gs,[n("div",qs,[e(I,{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(P=>P.canConnect).length),1)]),_:1})]),t(Q)?(s(),u("div",Fs,[e(I,{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(),C(se,{key:1,title:"No permissions found",desc:"No database permissions were found for this role."})):(s(),u("div",Ms,[(s(!0),u(z,null,A(t(q),P=>(s(),C(us,{key:P.databaseName,database:P,"is-expanded":x(P.databaseName),"is-current-database":g(P.databaseName),permissions:t(j),onToggle:K=>H(P.databaseName),onUpdatePermission:U},null,8,["database","is-expanded","is-current-database","permissions","onToggle"]))),128))]))])],64)):(s(),C(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]=P=>Be(i)?i.value=P:null),mode:t(F),roleName:t(d),permission:t(M),loading:t(E),onConfirm:ne},null,8,["open","mode","roleName","permission","loading"])])}}});export{st 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:j.value,revoke:R.value})},I=()=>T("update:open",!1),H=N(()=>g.mode==="grant"?`Grant Permission to ${g.roleName}`:`Update Permission for ${g.roleName}`);return(x,i)=>{const F=Ce,M=$e,U=xe,ne=Te,o=Ne,r=Ee,z=we,Z=ke,J=Pe,ae=Ae,oe=qe,ee=ue,se=Y,P=Se,K=De,le=ye;return s(),C(le,{open:x.open,"onUpdate:open":i[3]||(i[3]=S=>T("update:open",S))},{default:l(()=>[e(K,{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(M,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(X),null,{default:l(()=>i[5]||(i[5]=[p("Object Type")])),_:1}),e(Z,{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(X),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(X),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(X),null,{default:l(()=>i[12]||(i[12]=[p("Privileges")])),_:1}),n("div",gs,[(s(!0),u(O,null,A(E.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(X),null,{default:l(()=>i[13]||(i[13]=[p("SQL Preview")])),_:1}),e(oe,{code:Q.value,"show-copy-button":"","max-height":"24rem"},null,8,["code"])])]),e(P,null,{default:l(()=>[e(ee,{variant:"outline",onClick:I},{default:l(()=>i[14]||(i[14]=[p(" Cancel ")])),_:1}),e(ee,{disabled:!B.value||x.loading,onClick:v},{default:l(()=>[x.loading?(s(),C(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"},Cs={key:0,class:"flex flex-wrap gap-2"},$s={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=Y,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",Cs,[(s(!0),u(O,null,A(t(f),y=>(s(),C(me,{key:y.id,label:y.label,value:y.value,type:y.type},null,8,["label","value","type"]))),128)),a.roleInfo.validUntil?(s(),C(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",$s,[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"},Es={class:"flex items-center gap-3 px-4 py-1 bg-sidebar"},Ps={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"},Os={class:"flex items-center gap-2"},Is={variant:"secondary",class:"text-xs cursor-pointer text-muted-foreground flex items-center gap-1"},Ls={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"},qs={class:"flex items-center gap-2 mb-3 shrink-0"},Fs={key:0,class:"flex items-center gap-2 text-muted-foreground"},Ms={key:2,class:"space-y-1 flex-1 overflow-y-auto"},st=G({__name:"[roleName]",setup(w){const h=Re(),{connectionStore: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=$(null),y=$([]),D=async()=>{if(!(!a.value||!d.value))try{const r=await $fetch("/api/database-roles/get-role",{method:"POST",body:{...W(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=$(!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:{...W(a.value),roleName:d.value}});y.value=o}catch(o){console.error("Error fetching role inheritance:",o),y.value=[]}finally{c.value=!1}}},_=$(!1),E=$(!1),j=$(null),R=$(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:{...W(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:Q,databasePermissions:q,fetchDatabasePermissions:v}=Fe(a),I=$(new Set),H=o=>{I.value.has(o)?I.value.delete(o):I.value.add(o)},x=o=>I.value.has(o);de(()=>v(d.value)),ie(d,o=>v(o));const i=$(!1),F=$("grant"),M=$(),U=o=>{F.value="update",M.value=o,i.value=!0},ne=async o=>{if(!(!a.value||!d.value)){E.value=!0;try{const r=[];o.grant.length>0&&r.push($fetch("/api/database-roles/grant-permission",{method:"POST",body:{...W(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:{...W(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{E.value=!1}}};return(o,r)=>{const z=Y,Z=ue,J=Ke,ae=He,oe=Me,ee=te,se=Ie;return s(),u("div",Ts,[n("div",ws,[n("div",Es,[n("div",null,[n("p",Ps,b(t(d)),1)]),n("div",Ss,[e(Z,{variant:"outline",size:"iconSm",disabled:t(_),onClick:B},{default:l(()=>[e(z,{name:t(_)?"hugeicons:loading-03":"lucide:refresh-cw",class:L(["size-4",t(_)&&"animate-spin"])},null,8,["name","class"])]),_:1},8,["disabled"])])]),t(_)?(s(),u("div",Ds,[e(t(ze),{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(Z,{variant:"outline",size:"sm",class:"mt-4 font-normal",onClick:B},{default:l(()=>r[1]||(r[1]=[p(" Retry ")])),_:1})])):t(j)?(s(),u(O,{key:2},[e(Ns,{"role-info":t(T)},null,8,["role-info"]),n("div",Bs,[e(oe,{"default-open":!0},{default:l(({open:P})=>[n("div",zs,[n("div",Os,[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",Is,[n("span",Ls,b(P?"Collapse":"Expand"),1),e(z,{name:"lucide:chevron-down",class:L(["size-4 transition-transform",P&&"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(O,null,A(t(y),(K,le)=>(s(),u("div",{key:`${K.roleName}-${le}`,class:"flex items-center text-sm gap-1 hover:bg-accent rounded-sm",style:Oe({paddingLeft:`${K.depth*16}px`})},[e(z,{name:"lucide:corner-down-right",class:"size-3 text-muted-foreground"}),n("span",null,b(K.roleName),1)],4))),128))]))]),_:1})]),_:1})]),n("div",Gs,[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(P=>P.canConnect).length),1)]),_:1})]),t(Q)?(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(),C(se,{key:1,title:"No permissions found",desc:"No database permissions were found for this role."})):(s(),u("div",Ms,[(s(!0),u(O,null,A(t(q),P=>(s(),C(us,{key:P.databaseName,database:P,"is-expanded":x(P.databaseName),"is-current-database":g(P.databaseName),permissions:t(j),onToggle:K=>H(P.databaseName),onUpdatePermission:U},null,8,["database","is-expanded","is-current-database","permissions","onToggle"]))),128))]))])],64)):(s(),C(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]=P=>Be(i)?i.value=P:null),mode:t(F),roleName:t(d),permission:t(M),loading:t(E),onConfirm:ne},null,8,["open","mode","roleName","permission","loading"])])}}});export{st as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as Y,g as h,n as M,b as s,j as se,f as le,o as c,r as m,D as A,h as l,a as F,l as t,e as a,W as R,X as oe,F as W,q as Q,v as _,R as ae,m as H,p as n,K as E,at as ne,bf as re,Z as ie,bg as de,c as T,I as ee,a1 as ue,aR as ce,bh as te,a6 as me,k as pe,aC as fe,Y as ve,bi as xe}from"./DftZZFKd.js";import{_ as ge,a as _e}from"./B0pvfm-W.js";import{_ as be,a as ye}from"./CQr87mff.js";import{_ as ke}from"./BIW9Rd2L.js";import"./BZEKLHO-.js";import"./S6q6IfIg.js";const $e=Y({__name:"AlertTitle",props:{class:{}},setup(B){const w=B;return(S,v)=>(c(),h("h5",{class:M(s(se)("mb-1 font-medium leading-none tracking-tight",w.class))},[le(S.$slots,"default")],2))}}),Oe={class:"space-y-4"},he={class:"space-y-2"},we={class:"space-y-2"},Ee={key:0,class:"space-y-2"},Ce={class:"flex flex-wrap gap-2 max-h-32 overflow-y-auto p-2 border rounded-md"},Se={class:"text-xs text-muted-foreground"},De={key:1,class:"space-y-2"},ze={class:"flex items-center gap-3"},Ie={class:"text-sm font-mono w-6"},Ve={key:2,class:"space-y-2"},Fe={class:"space-y-2"},Pe={class:"grid grid-cols-2 gap-2"},Ue={class:"flex items-center space-x-2"},Re={class:"flex items-center space-x-2"},Ae={class:"flex items-center space-x-2"},Te={class:"flex items-center space-x-2"},Be=Y({__name:"ExportOptionsForm",props:{schemas:{},loading:{type:Boolean}},emits:["submit"],setup(B,{emit:w}){const S=w,v=m("plain"),b=m("full"),p=m([]),V=m(!1),P=m(!1),f=m(!1),D=m(!1),z=m(6),k=m(4),j=[{value:"plain",label:"Plain SQL (.sql)",icon:"lucide:file-text"},{value:"custom",label:"Custom (.dump)",icon:"lucide:archive"},{value:"tar",label:"Tar Archive (.tar)",icon:"lucide:package"},{value:"directory",label:"Directory (parallel)",icon:"lucide:folder"}],N=[{value:"full",label:"Full (schema + data)"},{value:"schema-only",label:"Schema only (no data)"},{value:"data-only",label:"Data only (no schema)"}],x=A(()=>v.value==="custom"||v.value==="directory"),$=A(()=>v.value==="directory"),C=()=>{const d={format:v.value,scope:b.value,noOwner:V.value,noPrivileges:P.value,clean:f.value,createDb:D.value};p.value.length>0&&(d.schemas=p.value),x.value&&(d.compressLevel=z.value),$.value&&(d.jobs=k.value),S("submit",d)};return(d,o)=>{const X=ye,q=ee,G=be,J=re,K=ne,i=ue,e=ie,u=oe,y=ae,O=ke,U=H;return c(),h("div",Oe,[l("div",he,[t(s(E),null,{default:a(()=>o[7]||(o[7]=[n("Output Format")])),_:1}),t(G,{modelValue:s(v),"onUpdate:modelValue":o[0]||(o[0]=r=>R(v)?v.value=r:null),class:"grid grid-cols-2 gap-2"},{default:a(()=>[(c(),h(W,null,Q(j,r=>l("div",{key:r.value,class:"flex items-center space-x-2"},[t(X,{value:r.value,id:`format-${r.value}`},null,8,["value","id"]),t(s(E),{for:`format-${r.value}`,class:"flex items-center gap-2 cursor-pointer"},{default:a(()=>[t(q,{name:r.icon,class:"size-4 text-muted-foreground"},null,8,["name"]),n(" "+_(r.label),1)]),_:2},1032,["for"])])),64))]),_:1},8,["modelValue"])]),l("div",we,[t(s(E),null,{default:a(()=>o[8]||(o[8]=[n("Export Scope")])),_:1}),t(u,{modelValue:s(b),"onUpdate:modelValue":o[1]||(o[1]=r=>R(b)?b.value=r:null)},{default:a(()=>[t(K,null,{default:a(()=>[t(J,{placeholder:"Select scope"})]),_:1}),t(e,null,{default:a(()=>[(c(),h(W,null,Q(N,r=>t(i,{key:r.value,value:r.value},{default:a(()=>[n(_(r.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])]),d.schemas.length>0?(c(),h("div",Ee,[t(s(E),null,{default:a(()=>o[9]||(o[9]=[n("Schemas (optional)")])),_:1}),l("div",Ce,[(c(!0),h(W,null,Q(d.schemas,r=>(c(),T(s(ce),{key:r,variant:s(p).includes(r)?"default":"outline",class:"cursor-pointer",onClick:()=>s(p).includes(r)?p.value=s(p).filter(I=>I!==r):s(p).push(r)},{default:a(()=>[n(_(r),1)]),_:2},1032,["variant","onClick"]))),128))]),l("p",Se,_(s(p).length?`${s(p).length} selected`:"All schemas"),1)])):F("",!0),s(x)?(c(),h("div",De,[t(s(E),null,{default:a(()=>o[10]||(o[10]=[n("Compression Level (0-9)")])),_:1}),l("div",ze,[t(s(de),{"model-value":[s(z)],min:0,max:9,step:1,class:"flex-1"},null,8,["model-value"]),l("span",Ie,_(s(z)),1)])])):F("",!0),s($)?(c(),h("div",Ve,[t(s(E),null,{default:a(()=>o[11]||(o[11]=[n("Parallel Jobs")])),_:1}),t(y,{modelValue:s(k),"onUpdate:modelValue":o[2]||(o[2]=r=>R(k)?k.value=r:null),modelModifiers:{number:!0},type:"number",min:"1",max:"16"},null,8,["modelValue"])])):F("",!0),l("div",Fe,[t(s(E),null,{default:a(()=>o[12]||(o[12]=[n("Options")])),_:1}),l("div",Pe,[l("div",Ue,[t(O,{id:"noOwner","model-value":s(V),"onUpdate:modelValue":o[3]||(o[3]=r=>R(V)?V.value=r:null)},null,8,["model-value"]),t(s(E),{for:"noOwner",class:"text-sm cursor-pointer"},{default:a(()=>o[13]||(o[13]=[n("No owner")])),_:1})]),l("div",Re,[t(O,{id:"noPrivileges","model-value":s(P),"onUpdate:modelValue":o[4]||(o[4]=r=>R(P)?P.value=r:null)},null,8,["model-value"]),t(s(E),{for:"noPrivileges",class:"text-sm cursor-pointer"},{default:a(()=>o[14]||(o[14]=[n("No privileges")])),_:1})]),l("div",Ae,[t(O,{id:"clean","model-value":s(f),"onUpdate:modelValue":o[5]||(o[5]=r=>R(f)?f.value=r:null)},null,8,["model-value"]),t(s(E),{for:"clean",class:"text-sm cursor-pointer"},{default:a(()=>o[15]||(o[15]=[n("Add DROP statements")])),_:1})]),l("div",Te,[t(O,{id:"createDb","model-value":s(D),"onUpdate:modelValue":o[6]||(o[6]=r=>R(D)?D.value=r:null)},null,8,["model-value"]),t(s(E),{for:"createDb",class:"text-sm cursor-pointer"},{default:a(()=>o[16]||(o[16]=[n("Add CREATE DATABASE")])),_:1})])])]),t(U,{class:"w-full",disabled:d.loading,onClick:C},{default:a(()=>[d.loading?(c(),T(q,{key:0,name:"hugeicons:loading-03",class:"size-4 mr-2 animate-spin"})):(c(),T(q,{key:1,name:"lucide:download",class:"size-4 mr-2"})),n(" "+_(d.loading?"Exporting...":"Export Database"),1)]),_:1},8,["disabled"])])}}}),Ne=B=>{const w=m(!1),S=m(0),v=m(null),b=m(null),p=async(f,D)=>{var z;if(!B.value)return v.value="No database connection provided",!1;w.value=!0,S.value=0,v.value=null;try{const j=await $fetch("/api/database-export/export-database",{method:"POST",body:{...te(B.value),databaseName:f,options:D},responseType:"blob",onResponse({response:$}){const C=$.headers.get("X-Export-Duration"),d=$.headers.get("X-Export-FileName");d&&C&&(b.value={fileName:d,duration:parseInt(C,10)})}}),N=URL.createObjectURL(j),x=document.createElement("a");return x.href=N,x.download=((z=b.value)==null?void 0:z.fileName)||`${f}_export${V(D.format)}`,document.body.appendChild(x),x.click(),document.body.removeChild(x),URL.revokeObjectURL(N),S.value=100,!0}catch(k){return v.value=k instanceof Error?k.message:"Export failed. Check if pg_dump is installed.",console.error("Export error:",k),!1}finally{w.value=!1}},V=f=>{switch(f){case"plain":return".sql";case"custom":return".dump";case"tar":return".tar";default:return".sql"}};return{isExporting:w,progress:S,error:v,lastExport:b,exportDatabase:p,reset:()=>{w.value=!1,S.value=0,v.value=null}}},Le={class:"flex flex-col h-full p-4"},je={class:"flex flex-col h-full border rounded-lg overflow-hidden bg-background"},qe={class:"flex items-center gap-3 px-6 py-4 border-b bg-muted/30"},Me={class:"text-sm text-muted-foreground"},Xe={class:"flex border-b"},Ge={class:"flex-1 overflow-y-auto p-6"},Je={key:0,class:"max-w-2xl"},Ke={class:"mt-6 p-4 bg-muted/30 rounded-lg text-sm text-muted-foreground"},We={class:"flex items-start gap-2"},Qe={key:1,class:"max-w-2xl"},Ye={class:"space-y-4"},Ze={key:0,class:"text-muted-foreground"},He={key:1,class:"flex items-center justify-center gap-3"},et={class:"text-left"},tt={class:"text-sm font-medium"},st={class:"text-xs text-muted-foreground"},lt={class:"space-y-3"},ot={class:"grid grid-cols-2 gap-4"},at={class:"flex items-center space-x-2"},nt={class:"flex items-center space-x-2"},rt={class:"flex items-center space-x-2"},it={class:"flex items-center space-x-2"},dt={class:"flex items-center space-x-2"},ut={class:"flex items-center space-x-2"},ct={class:"mt-6 p-4 bg-muted/30 rounded-lg text-sm text-muted-foreground"},mt={class:"flex items-start gap-2"},bt=Y({__name:"[name]",setup(B){const w=me(),{connectionStore:S,schemaStore:v}=pe(),b=A(()=>w.params.connectionId),p=A(()=>b.value?S.connections.find(i=>i.id===b.value):null);A(()=>{var i;return((i=p.value)==null?void 0:i.connectionString)||""});const V=A(()=>{var i,e;return((i=p.value)==null?void 0:i.database)||((e=p.value)==null?void 0:e.name)||"database"}),P=A(()=>b.value?(v.schemas[b.value]||[]).filter(i=>i.connectionId===b.value).map(i=>i.name):[]),f=m(w.params.name);fe(()=>w.params.name,i=>{f.value=i});const{isExporting:D,error:z,lastExport:k,exportDatabase:j,reset:N}=Ne(p.value),x=m(!1),$=m(null),C=m(null),d=m(null),o=m({noOwner:!0,noPrivileges:!1,clean:!1,dataOnly:!1,schemaOnly:!1,exitOnError:!0}),X=async i=>{await j(V.value,i)},q=i=>{const e=i.target;e.files&&e.files.length>0&&(d.value=e.files[0],$.value=null,C.value=null)},G=async()=>{if(!(!d.value||!p.value)){x.value=!0,$.value=null,C.value=null;try{const i=new FormData;i.append("file",d.value);const e=te(p.value);Object.entries(e).forEach(([y,O])=>{O!==void 0&&i.append(y,O.toString())}),i.append("options",JSON.stringify(o.value));const u=await $fetch("/api/database-import/import-database",{method:"POST",body:i});if(u&&typeof u=="object"&&"success"in u){const y=u;y.success?(C.value=y.message||"Database imported successfully",d.value=null):$.value=y.message||"Import failed"}}catch(i){$.value=i instanceof Error?i.message:"Import failed. Check if pg_restore is installed.",console.error("Import error:",i)}finally{x.value=!1}}},J=()=>{$.value=null,C.value=null,d.value=null},K=i=>i<1024?`${i} B`:i<1024*1024?`${(i/1024).toFixed(1)} KB`:`${(i/(1024*1024)).toFixed(1)} MB`;return(i,e)=>{const u=ee,y=H,O=$e,U=_e,r=ge,I=E,L=xe;return c(),h("div",Le,[l("div",je,[l("div",qe,[t(u,{name:"lucide:database",class:"size-6 text-primary"}),l("div",null,[e[10]||(e[10]=l("h2",{class:"text-lg font-semibold"},"Database Tools",-1)),l("p",Me,_(s(V)),1)])]),l("div",Xe,[t(y,{size:"sm",variant:"ghost",class:M(["rounded-none border-b-2 px-6 transition-colors",s(f)==="export"?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"]),onClick:e[0]||(e[0]=g=>f.value="export")},{default:a(()=>[t(u,{name:"lucide:download",class:"size-4"}),e[11]||(e[11]=n(" Export Database "))]),_:1},8,["class"]),t(y,{size:"sm",variant:"ghost",class:M(["rounded-none border-b-2 px-6 transition-colors",s(f)==="import"?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"]),onClick:e[1]||(e[1]=g=>f.value="import")},{default:a(()=>[t(u,{name:"lucide:upload",class:"size-4"}),e[12]||(e[12]=n(" Import Database "))]),_:1},8,["class"])]),l("div",Ge,[s(f)==="export"?(c(),h("div",Je,[e[17]||(e[17]=l("div",{class:"mb-6"},[l("h3",{class:"text-base font-medium mb-1"},"Export Database"),l("p",{class:"text-sm text-muted-foreground"}," Export your database schema and/or data using pg_dump. ")],-1)),s(z)?(c(),T(r,{key:0,variant:"destructive",class:"mb-4"},{default:a(()=>[t(u,{name:"lucide:alert-circle",class:"size-4"}),t(O,null,{default:a(()=>e[13]||(e[13]=[n("Export Failed")])),_:1}),t(U,null,{default:a(()=>[n(_(s(z)),1)]),_:1}),t(y,{size:"sm",variant:"outline",class:"mt-2",onClick:s(N)},{default:a(()=>e[14]||(e[14]=[n(" Try Again ")])),_:1},8,["onClick"])]),_:1})):F("",!0),s(k)&&!s(D)&&!s(z)?(c(),T(r,{key:1,class:"mb-4"},{default:a(()=>[t(u,{name:"lucide:check-circle",class:"size-4 text-green-500"}),t(O,null,{default:a(()=>e[15]||(e[15]=[n("Export Complete")])),_:1}),t(U,null,{default:a(()=>[n(_(s(k).fileName)+" downloaded in "+_((s(k).duration/1e3).toFixed(1))+"s ",1)]),_:1})]),_:1})):F("",!0),t(Be,{schemas:s(P),loading:s(D),onSubmit:X},null,8,["schemas","loading"]),l("div",Ke,[l("div",We,[t(u,{name:"lucide:info",class:"size-4 mt-0.5 shrink-0"}),e[16]||(e[16]=l("div",null,[l("p",{class:"font-medium"},"Requirements"),l("p",{class:"mt-1"},[l("code",{class:"bg-muted px-1 rounded"},"pg_dump"),n(" must be installed on the server for export to work. ")])],-1))])])])):F("",!0),s(f)==="import"?(c(),h("div",Qe,[e[34]||(e[34]=l("div",{class:"mb-6"},[l("h3",{class:"text-base font-medium mb-1"},"Import Database"),l("p",{class:"text-sm text-muted-foreground"}," Restore your database from a backup file using pg_restore. ")],-1)),s($)?(c(),T(r,{key:0,variant:"destructive",class:"mb-4"},{default:a(()=>[t(u,{name:"lucide:alert-circle",class:"size-4"}),t(O,null,{default:a(()=>e[18]||(e[18]=[n("Import Failed")])),_:1}),t(U,null,{default:a(()=>[n(_(s($)),1)]),_:1}),t(y,{size:"sm",variant:"outline",class:"mt-2",onClick:J},{default:a(()=>e[19]||(e[19]=[n(" Try Again ")])),_:1})]),_:1})):F("",!0),s(C)?(c(),T(r,{key:1,class:"mb-4"},{default:a(()=>[t(u,{name:"lucide:check-circle",class:"size-4 text-green-500"}),t(O,null,{default:a(()=>e[20]||(e[20]=[n("Import Complete")])),_:1}),t(U,null,{default:a(()=>[n(_(s(C)),1)]),_:1})]),_:1})):F("",!0),l("div",Ye,[l("div",null,[t(I,{class:"text-sm font-medium"},{default:a(()=>e[21]||(e[21]=[n("Backup File")])),_:1}),l("div",{class:"mt-2 border-2 border-dashed rounded-lg p-6 text-center cursor-pointer hover:border-primary/50 transition-colors",onClick:e[3]||(e[3]=g=>{var Z;return(Z=i.$refs.fileInput)==null?void 0:Z.click()})},[l("input",{ref:"fileInput",type:"file",accept:".sql,.dump,.tar",class:"hidden",onChange:q},null,544),s(d)?(c(),h("div",He,[t(u,{name:"lucide:file",class:"size-8 text-primary"}),l("div",et,[l("p",tt,_(s(d).name),1),l("p",st,_(K(s(d).size)),1)]),t(y,{variant:"ghost",size:"icon",class:"ml-2",onClick:e[2]||(e[2]=ve(g=>d.value=null,["stop"]))},{default:a(()=>[t(u,{name:"lucide:x",class:"size-4"})]),_:1})])):(c(),h("div",Ze,[t(u,{name:"lucide:upload-cloud",class:"size-10 mx-auto mb-2 opacity-50"}),e[22]||(e[22]=l("p",{class:"text-sm font-medium"},"Click to select a file",-1)),e[23]||(e[23]=l("p",{class:"text-xs mt-1"},"Supports .sql, .dump, .tar files",-1))]))])]),l("div",lt,[t(I,{class:"text-sm font-medium"},{default:a(()=>e[24]||(e[24]=[n("Options")])),_:1}),l("div",ot,[l("div",at,[t(L,{id:"noOwner",checked:s(o).noOwner,"onUpdate:checked":e[4]||(e[4]=g=>s(o).noOwner=g)},null,8,["checked"]),t(I,{for:"noOwner",class:"text-sm"},{default:a(()=>e[25]||(e[25]=[n("Skip Owner")])),_:1})]),l("div",nt,[t(L,{id:"noPrivileges",checked:s(o).noPrivileges,"onUpdate:checked":e[5]||(e[5]=g=>s(o).noPrivileges=g)},null,8,["checked"]),t(I,{for:"noPrivileges",class:"text-sm"},{default:a(()=>e[26]||(e[26]=[n("Skip Privileges")])),_:1})]),l("div",rt,[t(L,{id:"clean",checked:s(o).clean,"onUpdate:checked":e[6]||(e[6]=g=>s(o).clean=g)},null,8,["checked"]),t(I,{for:"clean",class:"text-sm"},{default:a(()=>e[27]||(e[27]=[n("Drop Objects First")])),_:1})]),l("div",it,[t(L,{id:"dataOnly",checked:s(o).dataOnly,"onUpdate:checked":e[7]||(e[7]=g=>s(o).dataOnly=g)},null,8,["checked"]),t(I,{for:"dataOnly",class:"text-sm"},{default:a(()=>e[28]||(e[28]=[n("Data Only")])),_:1})]),l("div",dt,[t(L,{id:"schemaOnly",checked:s(o).schemaOnly,"onUpdate:checked":e[8]||(e[8]=g=>s(o).schemaOnly=g)},null,8,["checked"]),t(I,{for:"schemaOnly",class:"text-sm"},{default:a(()=>e[29]||(e[29]=[n("Schema Only")])),_:1})]),l("div",ut,[t(L,{id:"exitOnError",checked:s(o).exitOnError,"onUpdate:checked":e[9]||(e[9]=g=>s(o).exitOnError=g)},null,8,["checked"]),t(I,{for:"exitOnError",class:"text-sm"},{default:a(()=>e[30]||(e[30]=[n("Exit on Error")])),_:1})])])]),t(r,{variant:"destructive",class:"bg-destructive/10"},{default:a(()=>[t(u,{name:"lucide:alert-triangle",class:"size-4"}),t(O,null,{default:a(()=>e[31]||(e[31]=[n("Warning")])),_:1}),t(U,null,{default:a(()=>e[32]||(e[32]=[n(" Importing a database can overwrite existing data. Make sure you have a backup before proceeding. ")])),_:1})]),_:1}),t(y,{class:"w-full",size:"lg",disabled:!s(d)||s(x),onClick:G},{default:a(()=>[t(u,{name:s(x)?"hugeicons:loading-03":"lucide:upload",class:M(["size-4 mr-2",s(x)&&"animate-spin"])},null,8,["name","class"]),n(" "+_(s(x)?"Importing...":"Import Database"),1)]),_:1},8,["disabled"])]),l("div",ct,[l("div",mt,[t(u,{name:"lucide:info",class:"size-4 mt-0.5 shrink-0"}),e[33]||(e[33]=l("div",null,[l("p",{class:"font-medium"},"Requirements"),l("p",{class:"mt-1"},[l("code",{class:"bg-muted px-1 rounded"},"pg_restore"),n(" or "),l("code",{class:"bg-muted px-1 rounded"},"psql"),n(" must be installed on the server for import to work. ")])],-1))])])])):F("",!0)])])])}}});export{bt as default};
|
|
1
|
+
import{d as Y,g as E,n as M,b as s,j as se,f as le,o as c,r as m,E as R,h as l,a as F,l as t,e as a,W as A,X as oe,F as W,s as Q,x as g,R as ae,m as H,p as n,K as h,at as ne,bd as re,Z as ie,be as de,c as T,q as ee,a1 as ue,aO as ce,bf as te,a6 as me,k as pe,aC as fe,Y as ve,bg as xe}from"./FyrDS92w.js";import{_ as _e,a as ge}from"./h2fvG4Xe.js";import{_ as be,a as ye}from"./q4KcRwD-.js";import{_ as ke}from"./DnCs9xpG.js";import"./Btu7FO8S.js";import"./6I72R6kW.js";const $e=Y({__name:"AlertTitle",props:{class:{}},setup(B){const w=B;return(S,v)=>(c(),E("h5",{class:M(s(se)("mb-1 font-medium leading-none tracking-tight",w.class))},[le(S.$slots,"default")],2))}}),Oe={class:"space-y-4"},Ee={class:"space-y-2"},we={class:"space-y-2"},he={key:0,class:"space-y-2"},Ce={class:"flex flex-wrap gap-2 max-h-32 overflow-y-auto p-2 border rounded-md"},Se={class:"text-xs text-muted-foreground"},De={key:1,class:"space-y-2"},ze={class:"flex items-center gap-3"},Ie={class:"text-sm font-mono w-6"},Ve={key:2,class:"space-y-2"},Fe={class:"space-y-2"},Pe={class:"grid grid-cols-2 gap-2"},Ue={class:"flex items-center space-x-2"},Ae={class:"flex items-center space-x-2"},Re={class:"flex items-center space-x-2"},Te={class:"flex items-center space-x-2"},Be=Y({__name:"ExportOptionsForm",props:{schemas:{},loading:{type:Boolean}},emits:["submit"],setup(B,{emit:w}){const S=w,v=m("plain"),b=m("full"),p=m([]),V=m(!1),P=m(!1),f=m(!1),D=m(!1),z=m(6),k=m(4),j=[{value:"plain",label:"Plain SQL (.sql)",icon:"lucide:file-text"},{value:"custom",label:"Custom (.dump)",icon:"lucide:archive"},{value:"tar",label:"Tar Archive (.tar)",icon:"lucide:package"},{value:"directory",label:"Directory (parallel)",icon:"lucide:folder"}],N=[{value:"full",label:"Full (schema + data)"},{value:"schema-only",label:"Schema only (no data)"},{value:"data-only",label:"Data only (no schema)"}],x=R(()=>v.value==="custom"||v.value==="directory"),$=R(()=>v.value==="directory"),C=()=>{const d={format:v.value,scope:b.value,noOwner:V.value,noPrivileges:P.value,clean:f.value,createDb:D.value};p.value.length>0&&(d.schemas=p.value),x.value&&(d.compressLevel=z.value),$.value&&(d.jobs=k.value),S("submit",d)};return(d,o)=>{const X=ye,q=ee,G=be,J=re,K=ne,i=ue,e=ie,u=oe,y=ae,O=ke,U=H;return c(),E("div",Oe,[l("div",Ee,[t(s(h),null,{default:a(()=>o[7]||(o[7]=[n("Output Format")])),_:1}),t(G,{modelValue:s(v),"onUpdate:modelValue":o[0]||(o[0]=r=>A(v)?v.value=r:null),class:"grid grid-cols-2 gap-2"},{default:a(()=>[(c(),E(W,null,Q(j,r=>l("div",{key:r.value,class:"flex items-center space-x-2"},[t(X,{value:r.value,id:`format-${r.value}`},null,8,["value","id"]),t(s(h),{for:`format-${r.value}`,class:"flex items-center gap-2 cursor-pointer"},{default:a(()=>[t(q,{name:r.icon,class:"size-4 text-muted-foreground"},null,8,["name"]),n(" "+g(r.label),1)]),_:2},1032,["for"])])),64))]),_:1},8,["modelValue"])]),l("div",we,[t(s(h),null,{default:a(()=>o[8]||(o[8]=[n("Export Scope")])),_:1}),t(u,{modelValue:s(b),"onUpdate:modelValue":o[1]||(o[1]=r=>A(b)?b.value=r:null)},{default:a(()=>[t(K,null,{default:a(()=>[t(J,{placeholder:"Select scope"})]),_:1}),t(e,null,{default:a(()=>[(c(),E(W,null,Q(N,r=>t(i,{key:r.value,value:r.value},{default:a(()=>[n(g(r.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])]),d.schemas.length>0?(c(),E("div",he,[t(s(h),null,{default:a(()=>o[9]||(o[9]=[n("Schemas (optional)")])),_:1}),l("div",Ce,[(c(!0),E(W,null,Q(d.schemas,r=>(c(),T(s(ce),{key:r,variant:s(p).includes(r)?"default":"outline",class:"cursor-pointer",onClick:()=>s(p).includes(r)?p.value=s(p).filter(I=>I!==r):s(p).push(r)},{default:a(()=>[n(g(r),1)]),_:2},1032,["variant","onClick"]))),128))]),l("p",Se,g(s(p).length?`${s(p).length} selected`:"All schemas"),1)])):F("",!0),s(x)?(c(),E("div",De,[t(s(h),null,{default:a(()=>o[10]||(o[10]=[n("Compression Level (0-9)")])),_:1}),l("div",ze,[t(s(de),{"model-value":[s(z)],min:0,max:9,step:1,class:"flex-1"},null,8,["model-value"]),l("span",Ie,g(s(z)),1)])])):F("",!0),s($)?(c(),E("div",Ve,[t(s(h),null,{default:a(()=>o[11]||(o[11]=[n("Parallel Jobs")])),_:1}),t(y,{modelValue:s(k),"onUpdate:modelValue":o[2]||(o[2]=r=>A(k)?k.value=r:null),modelModifiers:{number:!0},type:"number",min:"1",max:"16"},null,8,["modelValue"])])):F("",!0),l("div",Fe,[t(s(h),null,{default:a(()=>o[12]||(o[12]=[n("Options")])),_:1}),l("div",Pe,[l("div",Ue,[t(O,{id:"noOwner","model-value":s(V),"onUpdate:modelValue":o[3]||(o[3]=r=>A(V)?V.value=r:null)},null,8,["model-value"]),t(s(h),{for:"noOwner",class:"text-sm cursor-pointer"},{default:a(()=>o[13]||(o[13]=[n("No owner")])),_:1})]),l("div",Ae,[t(O,{id:"noPrivileges","model-value":s(P),"onUpdate:modelValue":o[4]||(o[4]=r=>A(P)?P.value=r:null)},null,8,["model-value"]),t(s(h),{for:"noPrivileges",class:"text-sm cursor-pointer"},{default:a(()=>o[14]||(o[14]=[n("No privileges")])),_:1})]),l("div",Re,[t(O,{id:"clean","model-value":s(f),"onUpdate:modelValue":o[5]||(o[5]=r=>A(f)?f.value=r:null)},null,8,["model-value"]),t(s(h),{for:"clean",class:"text-sm cursor-pointer"},{default:a(()=>o[15]||(o[15]=[n("Add DROP statements")])),_:1})]),l("div",Te,[t(O,{id:"createDb","model-value":s(D),"onUpdate:modelValue":o[6]||(o[6]=r=>A(D)?D.value=r:null)},null,8,["model-value"]),t(s(h),{for:"createDb",class:"text-sm cursor-pointer"},{default:a(()=>o[16]||(o[16]=[n("Add CREATE DATABASE")])),_:1})])])]),t(U,{class:"w-full",disabled:d.loading,onClick:C},{default:a(()=>[d.loading?(c(),T(q,{key:0,name:"hugeicons:loading-03",class:"size-4 mr-2 animate-spin"})):(c(),T(q,{key:1,name:"lucide:download",class:"size-4 mr-2"})),n(" "+g(d.loading?"Exporting...":"Export Database"),1)]),_:1},8,["disabled"])])}}}),Ne=B=>{const w=m(!1),S=m(0),v=m(null),b=m(null),p=async(f,D)=>{var z;if(!B.value)return v.value="No database connection provided",!1;w.value=!0,S.value=0,v.value=null;try{const j=await $fetch("/api/database-export/export-database",{method:"POST",body:{...te(B.value),databaseName:f,options:D},responseType:"blob",onResponse({response:$}){const C=$.headers.get("X-Export-Duration"),d=$.headers.get("X-Export-FileName");d&&C&&(b.value={fileName:d,duration:parseInt(C,10)})}}),N=URL.createObjectURL(j),x=document.createElement("a");return x.href=N,x.download=((z=b.value)==null?void 0:z.fileName)||`${f}_export${V(D.format)}`,document.body.appendChild(x),x.click(),document.body.removeChild(x),URL.revokeObjectURL(N),S.value=100,!0}catch(k){return v.value=k instanceof Error?k.message:"Export failed. Check if pg_dump is installed.",console.error("Export error:",k),!1}finally{w.value=!1}},V=f=>{switch(f){case"plain":return".sql";case"custom":return".dump";case"tar":return".tar";default:return".sql"}};return{isExporting:w,progress:S,error:v,lastExport:b,exportDatabase:p,reset:()=>{w.value=!1,S.value=0,v.value=null}}},Le={class:"flex flex-col h-full p-4"},je={class:"flex flex-col h-full border rounded-lg overflow-hidden bg-background"},qe={class:"flex items-center gap-3 px-6 py-4 border-b bg-muted/30"},Me={class:"text-sm text-muted-foreground"},Xe={class:"flex border-b"},Ge={class:"flex-1 overflow-y-auto p-6"},Je={key:0,class:"max-w-2xl"},Ke={class:"mt-6 p-4 bg-muted/30 rounded-lg text-sm text-muted-foreground"},We={class:"flex items-start gap-2"},Qe={key:1,class:"max-w-2xl"},Ye={class:"space-y-4"},Ze={key:0,class:"text-muted-foreground"},He={key:1,class:"flex items-center justify-center gap-3"},et={class:"text-left"},tt={class:"text-sm font-medium"},st={class:"text-xs text-muted-foreground"},lt={class:"space-y-3"},ot={class:"grid grid-cols-2 gap-4"},at={class:"flex items-center space-x-2"},nt={class:"flex items-center space-x-2"},rt={class:"flex items-center space-x-2"},it={class:"flex items-center space-x-2"},dt={class:"flex items-center space-x-2"},ut={class:"flex items-center space-x-2"},ct={class:"mt-6 p-4 bg-muted/30 rounded-lg text-sm text-muted-foreground"},mt={class:"flex items-start gap-2"},bt=Y({__name:"[name]",setup(B){const w=me(),{connectionStore:S,schemaStore:v}=pe(),b=R(()=>w.params.connectionId),p=R(()=>b.value?S.connections.find(i=>i.id===b.value):null);R(()=>{var i;return((i=p.value)==null?void 0:i.connectionString)||""});const V=R(()=>{var i,e;return((i=p.value)==null?void 0:i.database)||((e=p.value)==null?void 0:e.name)||"database"}),P=R(()=>b.value?(v.schemas[b.value]||[]).filter(i=>i.connectionId===b.value).map(i=>i.name):[]),f=m(w.params.name);fe(()=>w.params.name,i=>{f.value=i});const{isExporting:D,error:z,lastExport:k,exportDatabase:j,reset:N}=Ne(p.value),x=m(!1),$=m(null),C=m(null),d=m(null),o=m({noOwner:!0,noPrivileges:!1,clean:!1,dataOnly:!1,schemaOnly:!1,exitOnError:!0}),X=async i=>{await j(V.value,i)},q=i=>{const e=i.target;e.files&&e.files.length>0&&(d.value=e.files[0],$.value=null,C.value=null)},G=async()=>{if(!(!d.value||!p.value)){x.value=!0,$.value=null,C.value=null;try{const i=new FormData;i.append("file",d.value);const e=te(p.value);Object.entries(e).forEach(([y,O])=>{O!==void 0&&i.append(y,O.toString())}),i.append("options",JSON.stringify(o.value));const u=await $fetch("/api/database-import/import-database",{method:"POST",body:i});if(u&&typeof u=="object"&&"success"in u){const y=u;y.success?(C.value=y.message||"Database imported successfully",d.value=null):$.value=y.message||"Import failed"}}catch(i){$.value=i instanceof Error?i.message:"Import failed. Check if pg_restore is installed.",console.error("Import error:",i)}finally{x.value=!1}}},J=()=>{$.value=null,C.value=null,d.value=null},K=i=>i<1024?`${i} B`:i<1024*1024?`${(i/1024).toFixed(1)} KB`:`${(i/(1024*1024)).toFixed(1)} MB`;return(i,e)=>{const u=ee,y=H,O=$e,U=ge,r=_e,I=h,L=xe;return c(),E("div",Le,[l("div",je,[l("div",qe,[t(u,{name:"lucide:database",class:"size-6 text-primary"}),l("div",null,[e[10]||(e[10]=l("h2",{class:"text-lg font-semibold"},"Database Tools",-1)),l("p",Me,g(s(V)),1)])]),l("div",Xe,[t(y,{size:"sm",variant:"ghost",class:M(["rounded-none border-b-2 px-6 transition-colors",s(f)==="export"?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"]),onClick:e[0]||(e[0]=_=>f.value="export")},{default:a(()=>[t(u,{name:"lucide:download",class:"size-4"}),e[11]||(e[11]=n(" Export Database "))]),_:1},8,["class"]),t(y,{size:"sm",variant:"ghost",class:M(["rounded-none border-b-2 px-6 transition-colors",s(f)==="import"?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"]),onClick:e[1]||(e[1]=_=>f.value="import")},{default:a(()=>[t(u,{name:"lucide:upload",class:"size-4"}),e[12]||(e[12]=n(" Import Database "))]),_:1},8,["class"])]),l("div",Ge,[s(f)==="export"?(c(),E("div",Je,[e[17]||(e[17]=l("div",{class:"mb-6"},[l("h3",{class:"text-base font-medium mb-1"},"Export Database"),l("p",{class:"text-sm text-muted-foreground"}," Export your database schema and/or data using pg_dump. ")],-1)),s(z)?(c(),T(r,{key:0,variant:"destructive",class:"mb-4"},{default:a(()=>[t(u,{name:"lucide:alert-circle",class:"size-4"}),t(O,null,{default:a(()=>e[13]||(e[13]=[n("Export Failed")])),_:1}),t(U,null,{default:a(()=>[n(g(s(z)),1)]),_:1}),t(y,{size:"sm",variant:"outline",class:"mt-2",onClick:s(N)},{default:a(()=>e[14]||(e[14]=[n(" Try Again ")])),_:1},8,["onClick"])]),_:1})):F("",!0),s(k)&&!s(D)&&!s(z)?(c(),T(r,{key:1,class:"mb-4"},{default:a(()=>[t(u,{name:"lucide:check-circle",class:"size-4 text-green-500"}),t(O,null,{default:a(()=>e[15]||(e[15]=[n("Export Complete")])),_:1}),t(U,null,{default:a(()=>[n(g(s(k).fileName)+" downloaded in "+g((s(k).duration/1e3).toFixed(1))+"s ",1)]),_:1})]),_:1})):F("",!0),t(Be,{schemas:s(P),loading:s(D),onSubmit:X},null,8,["schemas","loading"]),l("div",Ke,[l("div",We,[t(u,{name:"lucide:info",class:"size-4 mt-0.5 shrink-0"}),e[16]||(e[16]=l("div",null,[l("p",{class:"font-medium"},"Requirements"),l("p",{class:"mt-1"},[l("code",{class:"bg-muted px-1 rounded"},"pg_dump"),n(" must be installed on the server for export to work. ")])],-1))])])])):F("",!0),s(f)==="import"?(c(),E("div",Qe,[e[34]||(e[34]=l("div",{class:"mb-6"},[l("h3",{class:"text-base font-medium mb-1"},"Import Database"),l("p",{class:"text-sm text-muted-foreground"}," Restore your database from a backup file using pg_restore. ")],-1)),s($)?(c(),T(r,{key:0,variant:"destructive",class:"mb-4"},{default:a(()=>[t(u,{name:"lucide:alert-circle",class:"size-4"}),t(O,null,{default:a(()=>e[18]||(e[18]=[n("Import Failed")])),_:1}),t(U,null,{default:a(()=>[n(g(s($)),1)]),_:1}),t(y,{size:"sm",variant:"outline",class:"mt-2",onClick:J},{default:a(()=>e[19]||(e[19]=[n(" Try Again ")])),_:1})]),_:1})):F("",!0),s(C)?(c(),T(r,{key:1,class:"mb-4"},{default:a(()=>[t(u,{name:"lucide:check-circle",class:"size-4 text-green-500"}),t(O,null,{default:a(()=>e[20]||(e[20]=[n("Import Complete")])),_:1}),t(U,null,{default:a(()=>[n(g(s(C)),1)]),_:1})]),_:1})):F("",!0),l("div",Ye,[l("div",null,[t(I,{class:"text-sm font-medium"},{default:a(()=>e[21]||(e[21]=[n("Backup File")])),_:1}),l("div",{class:"mt-2 border-2 border-dashed rounded-lg p-6 text-center cursor-pointer hover:border-primary/50 transition-colors",onClick:e[3]||(e[3]=_=>{var Z;return(Z=i.$refs.fileInput)==null?void 0:Z.click()})},[l("input",{ref:"fileInput",type:"file",accept:".sql,.dump,.tar",class:"hidden",onChange:q},null,544),s(d)?(c(),E("div",He,[t(u,{name:"lucide:file",class:"size-8 text-primary"}),l("div",et,[l("p",tt,g(s(d).name),1),l("p",st,g(K(s(d).size)),1)]),t(y,{variant:"ghost",size:"icon",class:"ml-2",onClick:e[2]||(e[2]=ve(_=>d.value=null,["stop"]))},{default:a(()=>[t(u,{name:"lucide:x",class:"size-4"})]),_:1})])):(c(),E("div",Ze,[t(u,{name:"lucide:upload-cloud",class:"size-10 mx-auto mb-2 opacity-50"}),e[22]||(e[22]=l("p",{class:"text-sm font-medium"},"Click to select a file",-1)),e[23]||(e[23]=l("p",{class:"text-xs mt-1"},"Supports .sql, .dump, .tar files",-1))]))])]),l("div",lt,[t(I,{class:"text-sm font-medium"},{default:a(()=>e[24]||(e[24]=[n("Options")])),_:1}),l("div",ot,[l("div",at,[t(L,{id:"noOwner",checked:s(o).noOwner,"onUpdate:checked":e[4]||(e[4]=_=>s(o).noOwner=_)},null,8,["checked"]),t(I,{for:"noOwner",class:"text-sm"},{default:a(()=>e[25]||(e[25]=[n("Skip Owner")])),_:1})]),l("div",nt,[t(L,{id:"noPrivileges",checked:s(o).noPrivileges,"onUpdate:checked":e[5]||(e[5]=_=>s(o).noPrivileges=_)},null,8,["checked"]),t(I,{for:"noPrivileges",class:"text-sm"},{default:a(()=>e[26]||(e[26]=[n("Skip Privileges")])),_:1})]),l("div",rt,[t(L,{id:"clean",checked:s(o).clean,"onUpdate:checked":e[6]||(e[6]=_=>s(o).clean=_)},null,8,["checked"]),t(I,{for:"clean",class:"text-sm"},{default:a(()=>e[27]||(e[27]=[n("Drop Objects First")])),_:1})]),l("div",it,[t(L,{id:"dataOnly",checked:s(o).dataOnly,"onUpdate:checked":e[7]||(e[7]=_=>s(o).dataOnly=_)},null,8,["checked"]),t(I,{for:"dataOnly",class:"text-sm"},{default:a(()=>e[28]||(e[28]=[n("Data Only")])),_:1})]),l("div",dt,[t(L,{id:"schemaOnly",checked:s(o).schemaOnly,"onUpdate:checked":e[8]||(e[8]=_=>s(o).schemaOnly=_)},null,8,["checked"]),t(I,{for:"schemaOnly",class:"text-sm"},{default:a(()=>e[29]||(e[29]=[n("Schema Only")])),_:1})]),l("div",ut,[t(L,{id:"exitOnError",checked:s(o).exitOnError,"onUpdate:checked":e[9]||(e[9]=_=>s(o).exitOnError=_)},null,8,["checked"]),t(I,{for:"exitOnError",class:"text-sm"},{default:a(()=>e[30]||(e[30]=[n("Exit on Error")])),_:1})])])]),t(r,{variant:"destructive",class:"bg-destructive/10"},{default:a(()=>[t(u,{name:"lucide:alert-triangle",class:"size-4"}),t(O,null,{default:a(()=>e[31]||(e[31]=[n("Warning")])),_:1}),t(U,null,{default:a(()=>e[32]||(e[32]=[n(" Importing a database can overwrite existing data. Make sure you have a backup before proceeding. ")])),_:1})]),_:1}),t(y,{class:"w-full",size:"lg",disabled:!s(d)||s(x),onClick:G},{default:a(()=>[t(u,{name:s(x)?"hugeicons:loading-03":"lucide:upload",class:M(["size-4 mr-2",s(x)&&"animate-spin"])},null,8,["name","class"]),n(" "+g(s(x)?"Importing...":"Import Database"),1)]),_:1},8,["disabled"])]),l("div",ct,[l("div",mt,[t(u,{name:"lucide:info",class:"size-4 mt-0.5 shrink-0"}),e[33]||(e[33]=l("div",null,[l("p",{class:"font-medium"},"Requirements"),l("p",{class:"mt-1"},[l("code",{class:"bg-muted px-1 rounded"},"pg_restore"),n(" or "),l("code",{class:"bg-muted px-1 rounded"},"psql"),n(" must be installed on the server for import to work. ")])],-1))])])])):F("",!0)])])])}}});export{bt as default};
|