planche 0.7.7 → 0.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/app/assets/{AboutDialog-CwxQS9-3.js → AboutDialog-BPNsHm3y.js} +1 -1
  2. package/app/assets/ConnectDialog-Crrymc0W.js +1 -0
  3. package/app/assets/{CopyDatabaseDialog-Gsai81KV.js → CopyDatabaseDialog-DjSg4U1o.js} +1 -1
  4. package/app/assets/{CopyTableDialog-Bk8AC6tJ.js → CopyTableDialog-BTEo-QH8.js} +1 -1
  5. package/app/assets/{CreateDatabaseDialog-Bzm0FfTH.js → CreateDatabaseDialog-Bm_6YvoO.js} +1 -1
  6. package/app/assets/DataDiffDialog-C70b85TC.js +1 -0
  7. package/app/assets/{DownloadToCSVDialog-Bqw6Rhd1.js → DownloadToCSVDialog-DUwB188z.js} +1 -1
  8. package/app/assets/{EditSchemaDialog-u5dIJ2gT.js → EditSchemaDialog-Bth2OKEy.js} +1 -1
  9. package/app/assets/{FindReplaceDialog-BlS9158P.js → FindReplaceDialog-DpGsdMkt.js} +1 -1
  10. package/app/assets/{FlushDialog-BJ7t14hx.js → FlushDialog-1cjuJ1Ft.js} +1 -1
  11. package/app/assets/LinkColumnDialog-BL3oERQj.js +1 -0
  12. package/app/assets/{LocalHistoryDialog-B0ytB5Y-.js → LocalHistoryDialog-CIf-F4_K.js} +1 -1
  13. package/app/assets/{ProcessListDialog-BKF1MRZ-.js → ProcessListDialog-BiN41WSu.js} +1 -1
  14. package/app/assets/QuickCommandPalette-BEC2Yj8l.js +1 -0
  15. package/app/assets/{RowFormDialog-DpqKxTg4.js → RowFormDialog-JuI6sB3V.js} +2 -2
  16. package/app/assets/{SafetySettingsDialog-BSB29OYt.js → SafetySettingsDialog-U3Iblh6j.js} +1 -1
  17. package/app/assets/SchemaDiffDialog-CNNDRLbw.js +7 -0
  18. package/app/assets/{SchemaToHTMLDialog-BZWaSeWl.js → SchemaToHTMLDialog-_DVyXheD.js} +1 -1
  19. package/app/assets/{StatusDialog-DYctXfMc.js → StatusDialog-CvzzTqId.js} +1 -1
  20. package/app/assets/{UserAddDialog-CbHCH74s.js → UserAddDialog-C9VvsXb8.js} +1 -1
  21. package/app/assets/UserManagerDialog-CIYWAeaA.js +1 -0
  22. package/app/assets/{VariablesDialog-BG6lVLna.js → VariablesDialog-CdIkSdn9.js} +1 -1
  23. package/app/assets/database-Cl9EPqA9.js +1 -0
  24. package/app/assets/{de-CC5Txb37.js → de-2Oaocuns.js} +1 -1
  25. package/app/assets/{fr-DuwjnnAw.js → fr-BtMPo4Nu.js} +1 -1
  26. package/app/assets/{i18n-BBZ4HyyF.js → i18n-DFsTrccf.js} +1 -1
  27. package/app/assets/{ja-B8MYtGo3.js → ja-D0iEKYDl.js} +1 -1
  28. package/app/assets/{ko-lJaJ15rE.js → ko-BSY6NOqF.js} +1 -1
  29. package/app/assets/main-CVAqRUdH.css +2 -0
  30. package/app/assets/main-DS4S3IhV.js +940 -0
  31. package/app/assets/{query-execution-COPkS7hB.js → query-execution-v3CrkSv7.js} +3 -3
  32. package/app/assets/{select-CY6U-FwY.js → select-wpCNssiC.js} +1 -1
  33. package/app/assets/table-copy-B-45A0tf.js +1 -0
  34. package/app/assets/{zh-DXC_ymYM.js → zh-Du4m2kV8.js} +1 -1
  35. package/app/index.html +6 -6
  36. package/dist/index.js +130 -12
  37. package/package.json +1 -1
  38. package/app/assets/ConnectDialog-BNJnQcBX.js +0 -1
  39. package/app/assets/DataDiffDialog-PJeuNu0W.js +0 -1
  40. package/app/assets/LinkColumnDialog-BhyQve5r.js +0 -1
  41. package/app/assets/QuickCommandPalette-DzyPCRTc.js +0 -1
  42. package/app/assets/SchemaDiffDialog-CW7Db6W_.js +0 -7
  43. package/app/assets/UserManagerDialog-DD-EVqkB.js +0 -1
  44. package/app/assets/database-DT05D7dO.js +0 -1
  45. package/app/assets/main-DCJnT21X.css +0 -2
  46. package/app/assets/main-kdBvc1j0.js +0 -940
  47. package/app/assets/table-copy-DxuAqxW1.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "planche",
3
- "version": "0.7.7",
3
+ "version": "0.7.9",
4
4
  "description": "Local agent for Planche \u2014 lets the browser-based Planche SQL client reach MySQL/MariaDB/PostgreSQL/SQLite/SQL Server/Oracle/Neon/Supabase/Cloudflare D1 databases from your machine.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://planche.dev",
@@ -1 +0,0 @@
1
- import{_ as e,m as t,n,t as r}from"./ui-store-VGM_km-l.js";import{C as i,K as a,M as o,N as s,S as c,a as l,b as u,c as d,d as f,i as p,j as m,l as h,n as g,o as _,r as v,s as y,u as b,w as x,x as S,y as C}from"./main-kdBvc1j0.js";import{l as w,m as T,t as E}from"./button-BRD_vJ8s.js";import{a as D,i as O,n as k,r as A,t as j}from"./select-CY6U-FwY.js";import{t as M}from"./connection-store-Cn79Ey1H.js";import{n as ee}from"./query-store-Cu277RoH.js";import{O as N,S as te,T as ne,b as re,j as P,k as F,l as I,m as ie,n as ae,s as L,t as oe,w as se}from"./database-DT05D7dO.js";import{n as R,t as z}from"./dbms-Bsjvyvsp.js";import{a as ce,i as le,n as ue,o as de,t as fe}from"./dialog-1MXGAorC.js";var B=e(t(),1),V=new Set([`postgres:`,`postgresql:`]);function H(e){let t=e.trim().replace(/^psql\s+(['"])?/,``).replace(/['"]$/,``);if(!/^postgres(ql)?:\/\//i.test(t))return null;let n;try{n=new URL(t)}catch{return null}if(!V.has(n.protocol.toLowerCase())||!n.hostname)return null;let r=e=>{try{return decodeURIComponent(e)}catch{return e}},i={host:n.hostname};n.port&&(i.port=Number(n.port)),n.username&&(i.user=r(n.username)),n.password&&(i.pass=r(n.password));let a=r(n.pathname.replace(/^\//,``));return a&&(i.database=a),i}var U=w(),W=[`utf8`,`utf8mb4`,`latin1`,`ascii`,`euckr`,`sjis`,`big5`],G={enabled:!1,host:``,port:22,user:``,auth:`key`};function K({label:e,htmlFor:t,children:n}){return(0,U.jsxs)(`div`,{className:`grid grid-cols-[120px_minmax(0,1fr)] items-center gap-2`,children:[(0,U.jsx)(h,{htmlFor:t,children:e}),n]})}function pe({value:e,onChange:t}){let{t:n}=T();function r(n,r){t({...e,[n]:r})}let i=e.dbms===`sqlite`,a=e.transport??`browser`,c=i&&a===`browser`,l=F.has(e.dbms),u=e.dbms===`d1`,d=z.find(t=>t.id===e.dbms)?.capabilities,p=e.ssh??G,[m,h]=(0,B.useState)(``),g=m.trim()===``?`empty`:H(m)?`applied`:`invalid`,v=e.dbms===`supabase`&&e.port===6543;function x(n){h(n);let r=H(n);r&&t({...e,host:r.host??e.host,port:r.port??z.find(t=>t.id===e.dbms)?.defaultPort??e.port,user:r.user??e.user,pass:r.pass??e.pass,database:r.database??e.database})}function S(n){t({...e,ssh:{...p,...n}})}async function C(e){e&&S({privateKey:await e.text(),privateKeyName:e.name})}return(0,U.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,U.jsx)(K,{label:n(`connection.form.hostName`),htmlFor:`conn-hostName`,children:(0,U.jsx)(b,{id:`conn-hostName`,placeholder:n(`connection.form.hostNamePlaceholder`),value:e.hostName,onChange:e=>r(`hostName`,e.target.value)})}),(0,U.jsx)(K,{label:n(`connection.form.dataSource`),children:(0,U.jsxs)(j,{value:e.dbms,onValueChange:n=>{let r=z.find(e=>e.id===n);if(!r)return;let i=r.id,a=F.has(i)||i===`d1`;h(``),t({...e,dbms:i,transactionMode:r.capabilities.transactions?e.transactionMode:`auto`,port:r.defaultPort??e.port,host:a&&e.host===`localhost`?``:!a&&e.host===``?`localhost`:e.host,user:a||l||u?y(i):e.user,database:e.database&&!a&&!l&&!u?e.database:_(i)??e.database})},children:[(0,U.jsx)(O,{id:`conn-dbms`,className:`w-full`,children:(0,U.jsx)(D,{})}),(0,U.jsx)(k,{children:z.map(e=>(0,U.jsx)(A,{value:e.id,children:(0,U.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(f,{dbms:e.id}),e.label]})},e.id))})]})}),l&&(0,U.jsx)(K,{label:n(`connection.form.connectionString`),htmlFor:`conn-uri`,children:(0,U.jsxs)(`div`,{className:`min-w-0`,children:[(0,U.jsx)(b,{id:`conn-uri`,type:`password`,autoComplete:`off`,spellCheck:!1,className:`font-mono text-xs`,placeholder:e.dbms===`neon`?`postgresql://neondb_owner:npg_…@ep-….neon.tech/neondb?sslmode=require`:`postgresql://postgres.[ref]:[password]@aws-0-….pooler.supabase.com:5432/postgres`,value:m,onChange:e=>x(e.target.value)}),(0,U.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed ${g===`invalid`?`text-destructive`:`text-muted-foreground`}`,children:n(g===`invalid`?`connection.form.connectionStringInvalid`:g===`applied`?`connection.form.connectionStringApplied`:e.dbms===`neon`?`connection.form.neonHint`:`connection.form.supabaseHint`)})]})}),i&&(0,U.jsxs)(K,{label:n(`connection.form.openVia`),children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,U.jsxs)(`label`,{className:`flex items-center gap-1.5 text-sm cursor-pointer`,children:[(0,U.jsx)(`input`,{type:`radio`,name:`transport`,value:`browser`,checked:a===`browser`,onChange:()=>r(`transport`,`browser`),className:`accent-primary`}),n(`connection.form.viaBrowser`)]}),(0,U.jsxs)(`label`,{className:`flex items-center gap-1.5 text-sm cursor-pointer`,children:[(0,U.jsx)(`input`,{type:`radio`,name:`transport`,value:`tunnel`,checked:a===`tunnel`,onChange:()=>r(`transport`,`tunnel`),className:`accent-primary`}),n(`connection.form.viaAgent`)]})]}),(0,U.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(a===`browser`?`connection.form.viaBrowserHint`:`connection.form.viaAgentHint`)})]}),c?(0,U.jsx)(K,{label:n(`connection.form.databaseFile`),children:(0,U.jsxs)(`div`,{className:`min-w-0 text-xs text-muted-foreground leading-relaxed`,children:[e.file?(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1`,children:[(0,U.jsx)(`span`,{className:`min-w-0 break-all text-foreground`,title:e.file,children:e.file}),(0,U.jsx)(E,{type:`button`,variant:`outline`,size:`sm`,className:`h-6 shrink-0 px-2 text-xs`,onClick:()=>{L(e.id),r(`file`,``)},children:n(`connection.form.changeFile`)})]}):(0,U.jsx)(`p`,{children:n(`connection.form.filePickerHint`)}),(0,U.jsx)(`p`,{className:`mt-1`,children:n(`connection.form.fileRememberedHint`)})]})}):null,!c&&(0,U.jsx)(K,{label:n(`connection.form.authToken`),htmlFor:`conn-authToken`,children:(0,U.jsx)(b,{id:`conn-authToken`,type:`password`,placeholder:n(`connection.form.authTokenPlaceholder`),value:e.authToken,onChange:e=>r(`authToken`,e.target.value.trim())})}),c?null:u?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(K,{label:n(`connection.form.d1AccountId`),htmlFor:`conn-d1-account`,children:(0,U.jsx)(b,{id:`conn-d1-account`,className:`font-mono text-xs`,spellCheck:!1,placeholder:`023e105f4ecef8ad9ca31a8372d0c353`,value:e.accountId??``,onChange:e=>r(`accountId`,e.target.value.trim())})}),(0,U.jsx)(K,{label:n(`connection.form.d1DatabaseId`),htmlFor:`conn-d1-database`,children:(0,U.jsx)(b,{id:`conn-d1-database`,className:`font-mono text-xs`,spellCheck:!1,placeholder:`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`,value:e.databaseId??``,onChange:e=>r(`databaseId`,e.target.value.trim())})}),(0,U.jsx)(K,{label:n(`connection.form.d1ApiToken`),htmlFor:`conn-pass`,children:(0,U.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,U.jsx)(b,{id:`conn-pass`,type:`password`,value:e.pass,onChange:e=>r(`pass`,e.target.value.trim())}),(0,U.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs whitespace-nowrap cursor-pointer`,title:n(`connection.form.savePasswordHint`),children:[(0,U.jsx)(`input`,{type:`checkbox`,checked:e.savePassword??!0,onChange:e=>r(`savePassword`,e.target.checked)}),n(`connection.form.savePassword`)]})]})}),(0,U.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.d1Hint`)}),(0,U.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.d1LimitsHint`)})]}):i?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(K,{label:n(`connection.form.databaseFile`),htmlFor:`conn-file`,children:(0,U.jsx)(b,{id:`conn-file`,placeholder:n(`connection.form.filePathPlaceholder`),value:e.file??``,onChange:e=>r(`file`,e.target.value)})}),(0,U.jsx)(K,{label:n(`connection.form.createIfMissing`),htmlFor:`conn-create`,children:(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`input`,{id:`conn-create`,type:`checkbox`,checked:e.createIfMissing??!1,onChange:e=>r(`createIfMissing`,e.target.checked),className:`size-4 accent-primary cursor-pointer`}),(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:n(`connection.form.createIfMissingHint`)})]})})]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(K,{label:n(`connection.form.host`),htmlFor:`conn-host`,children:(0,U.jsx)(b,{id:`conn-host`,placeholder:e.dbms===`neon`?`ep-….aws.neon.tech`:e.dbms===`supabase`?`aws-0-….pooler.supabase.com`:`localhost`,value:e.host,onChange:e=>r(`host`,e.target.value)})}),(0,U.jsx)(K,{label:n(`connection.form.port`),htmlFor:`conn-port`,children:(0,U.jsx)(b,{id:`conn-port`,type:`number`,value:e.port,onChange:t=>r(`port`,Number(t.target.value)||z.find(t=>t.id===e.dbms)?.defaultPort||3306)})}),v&&(0,U.jsx)(`p`,{className:`col-start-2 rounded-md border border-yellow-500/40 bg-yellow-500/10 px-2 py-1.5 text-xs leading-relaxed text-foreground`,children:n(`connection.form.supabasePoolerWarning`)}),(P(e.dbms)||e.dbms===`mssql`||e.dbms===`oracle`)&&(0,U.jsx)(K,{label:e.dbms===`oracle`?n(`connection.form.serviceName`):n(`connection.form.database`),htmlFor:`conn-database`,children:(0,U.jsx)(b,{id:`conn-database`,placeholder:_(e.dbms),value:e.database??``,onChange:e=>r(`database`,e.target.value.trim())})}),(0,U.jsx)(K,{label:n(`connection.form.user`),htmlFor:`conn-user`,children:(0,U.jsx)(b,{id:`conn-user`,placeholder:y(e.dbms),value:e.user,onChange:e=>r(`user`,e.target.value)})}),(0,U.jsx)(K,{label:n(`connection.form.password`),htmlFor:`conn-pass`,children:(0,U.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,U.jsx)(b,{id:`conn-pass`,type:`password`,value:e.pass,onChange:e=>r(`pass`,e.target.value)}),(0,U.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs whitespace-nowrap cursor-pointer`,title:n(`connection.form.savePasswordHint`),children:[(0,U.jsx)(`input`,{type:`checkbox`,checked:e.savePassword??!0,onChange:e=>r(`savePassword`,e.target.checked)}),n(`connection.form.savePassword`)]})]})}),l&&(0,U.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.managedTlsHint`)}),!l&&e.dbms!==`oracle`&&(0,U.jsx)(K,{label:n(`connection.form.tls`),children:(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4`,children:[(0,U.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs cursor-pointer`,children:[(0,U.jsx)(`input`,{type:`checkbox`,checked:e.ssl??!1,onChange:e=>r(`ssl`,e.target.checked),className:`size-4 accent-primary`}),n(`connection.form.tlsEnable`)]}),(0,U.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs cursor-pointer ${e.ssl?``:`opacity-50`}`,title:n(`connection.form.tlsVerifyHint`),children:[(0,U.jsx)(`input`,{type:`checkbox`,disabled:!e.ssl,checked:e.sslVerify??!1,onChange:e=>r(`sslVerify`,e.target.checked),className:`size-4 accent-primary`}),n(`connection.form.tlsVerify`)]})]})}),!l&&(0,U.jsx)(K,{label:n(`connection.form.charset`),children:(0,U.jsxs)(j,{value:e.charset,onValueChange:e=>r(`charset`,e),children:[(0,U.jsx)(O,{className:`w-full`,children:(0,U.jsx)(D,{})}),(0,U.jsx)(k,{children:W.map(e=>(0,U.jsx)(A,{value:e,children:e},e))})]})})]}),!i&&!l&&!u&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`div`,{className:`mt-1 border-t pt-3 text-xs font-medium text-muted-foreground`,children:n(`connection.form.ssh`)}),(0,U.jsx)(K,{label:n(`connection.form.sshTunnel`),htmlFor:`conn-ssh`,children:(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`input`,{id:`conn-ssh`,type:`checkbox`,checked:p.enabled,onChange:e=>S({enabled:e.target.checked}),className:`size-4 accent-primary cursor-pointer`}),(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:n(`connection.form.sshTunnelHint`)})]})}),p.enabled&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(K,{label:n(`connection.form.sshHost`),htmlFor:`conn-ssh-host`,children:(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(b,{id:`conn-ssh-host`,placeholder:n(`connection.form.sshHostPlaceholder`),value:p.host,onChange:e=>S({host:e.target.value.trim()})}),(0,U.jsx)(b,{"aria-label":n(`connection.form.sshPort`),type:`number`,className:`w-24 shrink-0`,value:p.port,onChange:e=>S({port:Number(e.target.value)||22})})]})}),(0,U.jsx)(K,{label:n(`connection.form.sshUser`),htmlFor:`conn-ssh-user`,children:(0,U.jsx)(b,{id:`conn-ssh-user`,placeholder:n(`connection.form.sshUserPlaceholder`),value:p.user,onChange:e=>S({user:e.target.value.trim()})})}),(0,U.jsx)(K,{label:n(`connection.form.sshAuth`),children:(0,U.jsxs)(j,{value:p.auth,onValueChange:e=>S({auth:e}),children:[(0,U.jsx)(O,{className:`w-full`,children:(0,U.jsx)(D,{})}),(0,U.jsxs)(k,{children:[(0,U.jsx)(A,{value:`key`,children:n(`connection.form.sshAuthKey`)}),(0,U.jsx)(A,{value:`password`,children:n(`connection.form.sshAuthPassword`)}),(0,U.jsx)(A,{value:`agent`,children:n(`connection.form.sshAuthAgent`)})]})]})}),p.auth===`password`&&(0,U.jsx)(K,{label:n(`connection.form.sshPassword`),htmlFor:`conn-ssh-pass`,children:(0,U.jsx)(b,{id:`conn-ssh-pass`,type:`password`,value:p.password??``,onChange:e=>S({password:e.target.value})})}),p.auth===`key`&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(K,{label:n(`connection.form.sshKey`),htmlFor:`conn-ssh-key`,children:(0,U.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,U.jsx)(`input`,{id:`conn-ssh-key`,type:`file`,className:`hidden`,onChange:e=>{C(e.target.files?.[0]),e.target.value=``}}),(0,U.jsx)(E,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 shrink-0 px-2 text-xs`,onClick:()=>document.getElementById(`conn-ssh-key`)?.click(),children:p.privateKey?n(`connection.form.changeFile`):n(`connection.form.sshKeyPick`)}),(0,U.jsx)(`span`,{className:`min-w-0 truncate text-xs text-muted-foreground`,title:p.privateKeyName,children:p.privateKey?p.privateKeyName||n(`connection.form.sshKeyLoaded`):n(`connection.form.sshKeyHint`)})]})}),(0,U.jsx)(K,{label:n(`connection.form.sshPassphrase`),htmlFor:`conn-ssh-passphrase`,children:(0,U.jsx)(b,{id:`conn-ssh-passphrase`,type:`password`,placeholder:n(`connection.form.sshPassphrasePlaceholder`),value:p.passphrase??``,onChange:e=>S({passphrase:e.target.value})})})]}),p.auth===`agent`&&(0,U.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.sshAuthAgentHint`)}),(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.sshTargetHint`)}),(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.sshSecretsHint`)})]})]}),(0,U.jsx)(K,{label:n(`connection.form.autoConnection`),htmlFor:`conn-auto`,children:(0,U.jsx)(`div`,{className:`flex items-center`,children:(0,U.jsx)(`input`,{id:`conn-auto`,type:`checkbox`,checked:e.autoConnection,onChange:e=>r(`autoConnection`,e.target.checked),className:`size-4 accent-primary cursor-pointer`})})}),(0,U.jsx)(`div`,{className:`mt-1 border-t pt-3 text-xs font-medium text-muted-foreground`,children:n(`connection.form.safety`)}),(0,U.jsx)(K,{label:n(`connection.form.environment`),children:(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[o.map(t=>{let n=(e.environmentColor??`none`)===t.id;return(0,U.jsx)(`button`,{type:`button`,title:s(t.id),"aria-label":s(t.id),"aria-pressed":n,onClick:()=>r(`environmentColor`,t.id),className:`size-6 rounded-full border-2 transition-transform ${n?`scale-110 border-foreground`:`border-transparent hover:scale-105`}`,style:{background:t.id===`none`?`repeating-linear-gradient(45deg, transparent, transparent 3px, var(--muted-foreground) 3px, var(--muted-foreground) 4px)`:t.hex}},t.id)}),(0,U.jsx)(`span`,{className:`ml-1 text-xs text-muted-foreground`,children:n(`connection.form.environmentHint`)})]})}),(0,U.jsx)(K,{label:n(`connection.form.readOnly`),htmlFor:`conn-readonly`,children:(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`input`,{id:`conn-readonly`,type:`checkbox`,checked:e.readOnly??!1,onChange:e=>r(`readOnly`,e.target.checked),className:`size-4 accent-primary cursor-pointer`}),(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:n(`connection.form.readOnlyHint`)})]})}),d?.transactions!==!1&&(0,U.jsx)(K,{label:n(`connection.form.transactions`),children:(0,U.jsxs)(j,{value:e.transactionMode??`auto`,onValueChange:e=>r(`transactionMode`,e),children:[(0,U.jsx)(O,{className:`w-full`,children:(0,U.jsx)(D,{})}),(0,U.jsxs)(k,{children:[(0,U.jsx)(A,{value:`auto`,children:n(`connection.form.txAuto`)}),(0,U.jsx)(A,{value:`manual`,children:n(`connection.form.txManual`)})]})]})})]})}function q(){let{t:e}=T(),{activeDialog:t,closeDialog:o,showMessage:s}=n(),[h,_]=(0,B.useState)(!1),{savedConnections:y,addSavedConnection:b,updateSavedConnection:w,deleteSavedConnection:D,openConnection:O}=M(),k=r(`connect`)?.profileId,[A,j]=(0,B.useState)(()=>k??null),[P,F]=(0,B.useState)(()=>{let e=k?y.find(e=>e.id===k):void 0;return e?{...e}:null}),L=t===`connect`,[z,V]=(0,B.useState)(null),[H,W]=(0,B.useState)(null),G=d(e=>e.url),K=d(e=>e.token);(0,B.useEffect)(()=>{if(!L)return;let e=!1;return(async()=>{try{let t=await te();if(e||t.state!==`online`||!t.gateway){e||V(null);return}let n=await se();e||(V({name:n.gateway,profiles:n.profiles}),W(null))}catch(t){e||W(t instanceof Error?t.message:String(t))}})(),()=>{e=!0}},[L,G,K]);function q(t){let r=y.find(e=>e.gatewayProfile===t.name);if(r){Y(r);return}let i=v(t);b(i),Y(i),n.getState().setFooterMessage(e(`connection.dialog.gatewayAdded`,{name:t.name}))}function J(e){e||(o(),j(null),F(null))}function Y(e){j(e.id),F({...e})}function me(e){F(e),w(e.id,e)}function he(){let e=l();b(e),j(e.id),F(e)}function ge(){A&&(D(A),j(null),F(null))}let[_e,X]=(0,B.useState)(!1),ve=ee(e=>e.addQueryTab);function Z(t){let n=M.getState().activeConnections.some(e=>e.id===t.id);if(O(t),n){re.getState().removeTree(t.id),o(),j(null),F(null);return}ve(t.id,{id:`tab-${Date.now()}`,title:e(`connection.dialog.firstQueryTab`),query:``,database:``,isExecuting:!1,results:[],error:null,executionTime:null}),o(),j(null),F(null)}async function ye(t){let r=await oe(t.id,{interactive:!0});if(!r)return;let i={...t,file:r.fileName,serverConnectionId:r.connectionId};w(t.id,{file:r.fileName}),Z(i),M.getState().setFileDetached(t.id,r.fileDetached),r.restoredUnsaved?n.getState().setFooterMessage(e(r.diskChanged?`connection.dialog.restoredUnsavedDiskChanged`:`connection.dialog.restoredUnsaved`,{file:r.fileName})):r.wal&&!r.walApplied?n.getState().setFooterMessage(e(`connection.dialog.walPending`,{file:r.fileName})):r.walApplied&&n.getState().setFooterMessage(e(`connection.dialog.walApplied`,{file:r.fileName}))}async function Q(t,r){try{return await r(t)}catch(i){let a=ne(i);if(!a||!(`ssh`in t)||!t.ssh||!await n.getState().requestDestructiveConfirm({title:e(`connection.dialog.hostKeyTitle`),description:e(`connection.dialog.hostKeyDescription`,a),confirmLabel:e(`connection.dialog.hostKeyAccept`)}))throw i;return r({...t,ssh:{...t.ssh,acceptHostKey:a.fingerprint}})}}async function $(){if(P){X(!0);try{if(I(P)===`browser`){await ye(P);return}let t=await Q(N(P),e=>ae(e,P.authToken||void 0));t.success?Z({...P,serverConnectionId:t.connectionId}):s({tone:`error`,title:e(`connection.dialog.connectFailedTitle`),description:t.message??e(`connection.dialog.unknownError`)})}catch(t){s({tone:`error`,title:e(`connection.dialog.connectFailedTitle`),description:t instanceof Error?t.message:String(t)})}finally{X(!1)}}}async function be(){if(P){if(I(P)===`browser`){s({tone:`info`,title:e(`connection.dialog.testConnection`),description:e(`connection.dialog.browserTestHint`)});return}_(!0);try{let t=await Q(N(P),e=>ie(e,P.authToken||void 0));t.success?s({tone:`success`,title:e(`connection.dialog.testSuccess`),description:e(`connection.dialog.testSuccessDescription`)}):s({tone:`error`,title:e(`connection.dialog.testFailedTitle`),description:t.message??e(`connection.dialog.unknownError`)})}catch(t){s({tone:`error`,title:e(`connection.dialog.testFailedTitle`),description:t instanceof Error?t.message:String(t)})}finally{_(!1)}}}return(0,U.jsx)(fe,{open:L,onOpenChange:J,children:(0,U.jsxs)(ue,{className:`sm:max-w-[1100px] h-[85vh] max-h-[85vh] flex flex-col`,children:[(0,U.jsx)(ce,{children:(0,U.jsx)(de,{children:e(`connection.dialog.title`)})}),(0,U.jsxs)(`p`,{className:`flex items-start gap-2 rounded-md border border-catppuccin-green/40 bg-catppuccin-green/10 px-3 py-2 text-xs leading-relaxed text-foreground`,children:[(0,U.jsx)(a,{className:`mt-0.5 size-4 shrink-0 text-catppuccin-green`,"aria-hidden":!0}),(0,U.jsx)(`span`,{children:e(`connection.dialog.privacy`)})]}),(0,U.jsxs)(`div`,{className:`flex flex-1 gap-4 overflow-hidden min-h-0`,children:[(0,U.jsxs)(`div`,{className:`w-[460px] shrink-0 border rounded-md overflow-hidden flex flex-col`,children:[(z||H)&&(0,U.jsxs)(`div`,{className:`border-b p-2 text-xs space-y-1 max-h-40 overflow-auto`,children:[(0,U.jsxs)(`p`,{className:`font-medium`,children:[e(`connection.dialog.gatewayTitle`),z?` — ${z.name}`:``]}),H&&(0,U.jsx)(`p`,{className:`text-destructive`,children:e(`connection.dialog.gatewayLoadFailed`,{error:H})}),z?.profiles.map(t=>(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,U.jsxs)(`span`,{className:`flex items-center gap-1.5 truncate`,children:[(0,U.jsx)(f,{dbms:g[t.driver],className:`size-3.5`}),(0,U.jsx)(`span`,{className:`truncate`,children:t.name}),(0,U.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(`,t.readOnly?e(`connection.dialog.gatewayReadOnly`):e(`connection.dialog.gatewayWritable`),`)`]})]}),(0,U.jsx)(E,{size:`sm`,variant:`outline`,className:`h-6 px-2 text-xs`,onClick:()=>q(t),children:e(`connection.dialog.gatewayAdd`)})]},t.name))]}),(0,U.jsx)(m,{className:`h-full`,children:(0,U.jsxs)(C,{className:`table-fixed`,children:[(0,U.jsx)(i,{children:(0,U.jsxs)(x,{children:[(0,U.jsx)(c,{className:`w-[32%]`,children:e(`connection.dialog.colHostName`)}),(0,U.jsx)(c,{className:`w-[40%]`,children:e(`connection.dialog.colTarget`)}),(0,U.jsx)(c,{className:`w-[28%]`,children:e(`connection.dialog.colDbms`)})]})}),(0,U.jsx)(u,{children:y.length===0?(0,U.jsx)(x,{children:(0,U.jsx)(S,{colSpan:3,className:`text-center text-muted-foreground`,children:e(`connection.dialog.noSaved`)})}):y.map(t=>(0,U.jsxs)(x,{"data-state":A===t.id?`selected`:void 0,className:`cursor-pointer`,onClick:()=>Y(t),onDoubleClick:()=>{Y(t),$()},children:[(0,U.jsx)(S,{className:`truncate font-medium`,title:t.hostName,children:t.hostName||e(`connection.dialog.unnamed`)}),(0,U.jsx)(S,{className:`truncate`,title:t.dbms===`sqlite`?t.file:t.dbms===`d1`?t.databaseId:`${t.user}@${t.host}:${t.port}`,children:t.dbms===`sqlite`?t.file||(I(t)===`browser`?e(`connection.dialog.pickOnConnect`):e(`connection.dialog.noFile`)):t.dbms===`d1`?t.databaseId||`—`:`${t.user}@${t.host}:${t.port}`}),(0,U.jsx)(S,{className:`truncate`,title:R(t.dbms).label,children:(0,U.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,U.jsx)(f,{dbms:t.dbms,className:`size-3.5`}),(0,U.jsx)(`span`,{className:`truncate`,children:R(t.dbms).label})]})})]},t.id))})]})})]}),(0,U.jsx)(`div`,{className:`flex-1 border rounded-md overflow-auto`,children:P?(0,U.jsxs)(U.Fragment,{children:[I(P)!==`browser`&&(0,U.jsx)(`div`,{className:`p-4 pb-0`,children:(0,U.jsx)(p,{})}),P.gatewayProfile?(0,U.jsxs)(`div`,{className:`p-4 space-y-2 text-sm`,children:[(0,U.jsxs)(`p`,{className:`font-medium flex items-center gap-2`,children:[(0,U.jsx)(f,{dbms:P.dbms,className:`size-4`}),P.hostName]}),(0,U.jsx)(`p`,{className:`text-muted-foreground`,children:e(`connection.dialog.gatewayProfileHint`,{name:P.gatewayProfile})}),(0,U.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[P.readOnly?e(`connection.dialog.gatewayReadOnly`):e(`connection.dialog.gatewayWritable`),P.database?` · ${P.database}`:``]})]}):(0,U.jsx)(pe,{value:P,onChange:me})]}):(0,U.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:e(`connection.dialog.selectPrompt`)})})]}),(0,U.jsxs)(le,{className:`sm:justify-between`,children:[(0,U.jsxs)(`div`,{className:`flex gap-2`,children:[(0,U.jsx)(E,{variant:`outline`,onClick:he,children:e(`connection.dialog.addNew`)}),(0,U.jsx)(E,{variant:`destructive`,onClick:ge,disabled:!A,children:e(`connection.dialog.delete`)})]}),(0,U.jsxs)(`div`,{className:`flex gap-2`,children:[(0,U.jsx)(E,{variant:`outline`,onClick:be,disabled:!P||h,children:e(`connection.dialog.testConnection`)}),(0,U.jsx)(E,{onClick:$,disabled:!P||_e,children:e(`connection.dialog.connect`)}),(0,U.jsx)(E,{variant:`outline`,onClick:()=>J(!1),children:e(`connection.dialog.close`)})]})]})]})})}export{q as ConnectDialog};
@@ -1 +0,0 @@
1
- import{_ as e,c as t,m as n,n as r,t as i}from"./ui-store-VGM_km-l.js";import{A as a,I as o,_ as s,g as c,l,v as u}from"./main-kdBvc1j0.js";import{l as d,m as f,t as p}from"./button-BRD_vJ8s.js";import{a as m,i as h,n as g,r as _,t as v}from"./select-CY6U-FwY.js";import{t as y}from"./connection-store-Cn79Ey1H.js";import{r as b}from"./database-DT05D7dO.js";import{n as x}from"./engine-tGsnPQEm.js";import{a as ee,i as S,n as C,o as te,t as ne}from"./dialog-1MXGAorC.js";var w=e(n(),1),T=d(),E=e=>e instanceof Error?e.message:String(e),D=e=>e.hostName||e.host||e.file||e.id,O=5e4;function k({id:e,label:t,side:n,onChange:r,connections:i,disabled:a}){let{t:o}=f(),[s,c]=(0,w.useState)([]),[u,d]=(0,w.useState)([]),p=i.find(e=>e.id===n.connectionId);return(0,w.useEffect)(()=>{if(!p?.serverConnectionId)return;let e=!1;return(async()=>{try{let t=await x(p.id).introspect.listDatabases(b(p.serverConnectionId));if(e)return;c(t),t.includes(n.database)||r({connectionId:p.id,database:t[0]??``,table:``})}catch{e||c([])}})(),()=>{e=!0}},[p?.id,p?.serverConnectionId]),(0,w.useEffect)(()=>{if(!p?.serverConnectionId||!n.database)return;let e=!1;return(async()=>{try{let t=await x(p.id).introspect.listTables(b(p.serverConnectionId),n.database);if(e)return;let i=t.map(e=>e.name);d(i),n.table&&!i.includes(n.table)&&r({...n,table:``})}catch{e||d([])}})(),()=>{e=!0}},[p?.id,p?.serverConnectionId,n.database]),(0,T.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3`,children:[(0,T.jsx)(l,{className:`font-medium`,children:t}),(0,T.jsxs)(v,{value:n.connectionId,onValueChange:e=>r({connectionId:e,database:``,table:``}),disabled:a,children:[(0,T.jsx)(h,{id:`${e}-conn`,className:`w-full`,children:(0,T.jsx)(m,{placeholder:o(`database.diff.pickConnection`)})}),(0,T.jsx)(g,{children:i.map(e=>(0,T.jsx)(_,{value:e.id,children:D(e)},e.id))})]}),(0,T.jsxs)(v,{value:n.database,onValueChange:e=>r({...n,database:e,table:``}),disabled:a||s.length===0,children:[(0,T.jsx)(h,{id:`${e}-db`,className:`w-full`,children:(0,T.jsx)(m,{placeholder:o(`database.diff.pickDatabase`)})}),(0,T.jsx)(g,{children:s.map(e=>(0,T.jsx)(_,{value:e,children:e},e))})]}),(0,T.jsxs)(v,{value:n.table,onValueChange:e=>r({...n,table:e}),disabled:a||u.length===0,children:[(0,T.jsx)(h,{id:`${e}-table`,className:`w-full`,children:(0,T.jsx)(m,{placeholder:o(`database.dataDiff.pickTable`)})}),(0,T.jsx)(g,{children:u.map(e=>(0,T.jsx)(_,{value:e,children:e},e))})]})]})}async function A(e,t){let n=await o({connectionId:e.connectionId,database:e.database,table:e.table,limit:O,onProgress:t}),r=[];for await(let e of n.pages)r.push(...e);return{rows:r,columns:n.fields.map(e=>e.name),capped:r.length>=O}}function j({diff:e,row:t,other:n,changed:r}){let{t:i}=f(),a=[...e.keyColumns,...e.compareColumns];return(0,T.jsxs)(`table`,{className:`w-full text-xs font-mono`,children:[(0,T.jsx)(`thead`,{className:`text-muted-foreground`,children:(0,T.jsxs)(`tr`,{children:[(0,T.jsx)(`th`,{className:`text-left font-normal pr-2`,children:i(`database.diff.column`)}),(0,T.jsx)(`th`,{className:`text-left font-normal pr-2`,children:i(`database.diff.source`)}),(0,T.jsx)(`th`,{className:`text-left font-normal`,children:i(`database.diff.target`)})]})}),(0,T.jsx)(`tbody`,{children:a.map(e=>(0,T.jsxs)(`tr`,{className:r?.includes(e)?`text-amber-600 dark:text-amber-400`:``,children:[(0,T.jsx)(`td`,{className:`pr-2 align-top whitespace-nowrap`,children:e}),(0,T.jsx)(`td`,{className:`pr-2 align-top break-all`,children:s(t[e])}),(0,T.jsx)(`td`,{className:`align-top break-all`,children:n?s(n[e]):`—`})]},e))})]})}function M(){let{t:e}=f(),n=r(e=>e.activeDialog),o=r(e=>e.closeDialog),l=i(`data-diff`),d=y(e=>e.activeConnections),m=(0,w.useMemo)(()=>d.filter(e=>e.serverConnectionId),[d]),h=y(e=>e.activeConnectionId),g=n===`data-diff`,[_,v]=(0,w.useState)(()=>l&&m.some(e=>e.id===l.connectionId)?{connectionId:l.connectionId,database:l.database,table:l.table}:{connectionId:h&&m.some(e=>e.id===h)?h:m[0]?.id??``,database:``,table:``}),[D,M]=(0,w.useState)(()=>({connectionId:m.find(e=>e.id!==_.connectionId)?.id??_.connectionId,database:``,table:``})),[N,re]=(0,w.useState)([]),[P,F]=(0,w.useState)(null),[I,L]=(0,w.useState)(!1),[R,z]=(0,w.useState)(`changed`),[B,V]=(0,w.useState)(0),[H,ie]=(0,w.useState)(!1),[U,W]=(0,w.useState)(!1),[G,K]=(0,w.useState)({source:null,target:null}),[q,J]=(0,w.useState)(null),ae=e=>M(e.database&&!e.table&&_.table?{...e,table:_.table}:e),Y=_.connectionId===D.connectionId&&_.database===D.database&&_.table===D.table,oe=!!_.table&&!!D.table&&!Y,X=D.connectionId?x(D.connectionId):null;async function se(){W(!0),J(null),F(null);try{let n=y.getState().activeConnections.find(e=>e.id===_.connectionId);if(!n?.serverConnectionId)throw Error(e(`services.query.notConnected`));let r=await x(_.connectionId).introspect.getPrimaryKeys(b(n.serverConnectionId),_.database,_.table);if(r.length===0)throw Error(e(`database.dataDiff.noPrimaryKey`,{table:_.table}));K({source:{loaded:0,total:null},target:{loaded:0,total:null}});let[i,a]=await Promise.all([A(_,e=>K(t=>({...t,source:e}))),A(D,e=>K(t=>({...t,target:e})))]);if(r.some(e=>!a.columns.includes(e)))throw Error(e(`database.dataDiff.keyMissingInTarget`,{columns:r.join(`, `)}));let o=u(i.rows,a.rows,r,i.columns,a.columns);re(r),L(i.capped||a.capped),F(o),z(o.changed.length>0?`changed`:o.added.length>0?`added`:`removed`),V(0),t(`data_diff`,{source_dbms:x(_.connectionId).id,target_dbms:X?.id??`unknown`,added:o.added.length,changed:o.changed.length,removed:o.removed.length})}catch(e){J(E(e))}finally{W(!1),K({source:null,target:null})}}let Z=e=>e?e.total===null?e.loaded.toLocaleString():`${e.loaded.toLocaleString()} / ${e.total.toLocaleString()}`:``,Q=(0,w.useMemo)(()=>P&&X?c(P,X,{database:D.database,table:D.table},{includeDeletes:H}):``,[P,X,D.database,D.table,H]);function ce(){Q&&(a(D.connectionId,Q,D.database,e(`database.dataDiff.tabTitle`,{table:D.table})),o())}let $=P?R===`added`?P.added:R===`removed`?P.removed:P.changed.map(e=>e.source):[],le=!!P&&P.added.length+P.changed.length+P.removed.length>0,ue=e=>N.map(t=>s(e[t])).join(`, `);return(0,T.jsx)(ne,{open:g,onOpenChange:e=>{e||o()},children:(0,T.jsxs)(C,{className:`sm:max-w-[900px]`,children:[(0,T.jsx)(ee,{children:(0,T.jsx)(te,{children:e(`database.dataDiff.title`)})}),(0,T.jsxs)(`div`,{className:`space-y-3`,children:[(0,T.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,T.jsx)(k,{id:`ddiff-source`,label:e(`database.diff.source`),side:_,onChange:v,connections:m,disabled:U}),(0,T.jsx)(k,{id:`ddiff-target`,label:e(`database.diff.target`),side:D,onChange:ae,connections:m,disabled:U})]}),(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.dataDiff.hint`,{cap:O.toLocaleString()})}),Y&&_.table&&(0,T.jsx)(`p`,{className:`text-xs text-destructive`,children:e(`database.dataDiff.sameSide`)}),q&&(0,T.jsx)(`p`,{className:`text-sm text-destructive whitespace-pre-wrap`,children:q}),U&&(G.source||G.target)&&(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.dataDiff.loading`,{source:Z(G.source),target:Z(G.target)})}),P&&(0,T.jsxs)(`div`,{className:`space-y-2`,children:[(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 text-xs`,children:[(0,T.jsx)(`span`,{className:`text-muted-foreground`,children:e(`database.dataDiff.summary`,{key:N.join(`, `),added:P.added.length,changed:P.changed.length,removed:P.removed.length,identical:P.identical})}),I&&(0,T.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400`,children:e(`database.dataDiff.capped`,{cap:O.toLocaleString()})}),(P.sourceOnlyColumns.length>0||P.targetOnlyColumns.length>0)&&(0,T.jsx)(`span`,{className:`text-muted-foreground`,children:e(`database.dataDiff.ignoredColumns`,{columns:[...P.sourceOnlyColumns,...P.targetOnlyColumns].join(`, `)})})]}),(0,T.jsx)(`div`,{className:`flex gap-1 text-xs`,children:[`added`,`changed`,`removed`].map(t=>(0,T.jsx)(`button`,{type:`button`,onClick:()=>{z(t),V(0)},className:`rounded border px-2 py-0.5 ${R===t?`bg-accent`:``}`,children:e(`database.dataDiff.${t}`,{count:t===`added`?P.added.length:t===`removed`?P.removed.length:P.changed.length})},t))}),(0,T.jsxs)(`div`,{className:`grid grid-cols-[240px_1fr] gap-3 h-[280px]`,children:[(0,T.jsxs)(`ul`,{className:`overflow-auto rounded-md border text-sm font-mono`,children:[$.slice(0,2e3).map((e,t)=>(0,T.jsx)(`li`,{className:`px-2 py-1 cursor-pointer ${B===t?`bg-accent`:``}`,onClick:()=>V(t),children:ue(e)},t)),$.length===0&&(0,T.jsx)(`li`,{className:`px-2 py-1 text-muted-foreground`,children:e(`database.dataDiff.none`)}),$.length>2e3&&(0,T.jsx)(`li`,{className:`px-2 py-1 text-muted-foreground`,children:e(`database.dataDiff.more`,{count:$.length-2e3})})]}),(0,T.jsx)(`div`,{className:`overflow-auto rounded-md border p-2`,children:$[B]?R===`changed`?(0,T.jsx)(j,{diff:P,row:P.changed[B].source,other:P.changed[B].target,changed:P.changed[B].columns}):R===`removed`?(0,T.jsx)(j,{diff:P,row:{},other:$[B]}):(0,T.jsx)(j,{diff:P,row:$[B]}):(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.diff.selectTable`)})})]}),(0,T.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs cursor-pointer`,children:[(0,T.jsx)(`input`,{type:`checkbox`,checked:H,onChange:e=>ie(e.target.checked)}),(0,T.jsx)(`span`,{className:H?`text-destructive`:``,children:e(`database.dataDiff.includeDeletes`)})]})]})]}),(0,T.jsxs)(S,{children:[(0,T.jsx)(p,{variant:`outline`,onClick:o,children:e(`database.diff.close`)}),(0,T.jsx)(p,{variant:`secondary`,onClick:()=>{se()},disabled:!oe||U,children:e(U?`database.diff.comparing`:`database.diff.compare`)}),(0,T.jsx)(p,{onClick:ce,disabled:!le,children:e(`database.diff.openScript`)})]})]})})}export{M as DataDiffDialog};
@@ -1 +0,0 @@
1
- import{_ as e,c as t,m as n,n as r,t as i}from"./ui-store-VGM_km-l.js";import{L as a,R as o,l as s,u as c}from"./main-kdBvc1j0.js";import{l,m as u,t as d}from"./button-BRD_vJ8s.js";import{a as f,i as p,n as m,r as h,t as g}from"./select-CY6U-FwY.js";import{t as _}from"./connection-store-Cn79Ey1H.js";import{r as v}from"./database-DT05D7dO.js";import{n as y}from"./engine-tGsnPQEm.js";import{a as b,i as x,n as S,o as C,t as w}from"./dialog-1MXGAorC.js";var T=e(n(),1),E=l(),D=e=>e instanceof Error?e.message:String(e);function O(){let{t:e}=u(),n=r(e=>e.activeDialog),l=r(e=>e.closeDialog),O=i(`link-column`),k=n===`link-column`&&!!O,A=O?.connectionId??``,j=_(e=>e.activeConnections),M=j.filter(e=>e.serverConnectionId),N=o(e=>e.links),P=o(e=>e.setLink),F=o(e=>e.removeLink),I=O?a(N,A,O.database,O.table).find(e=>e.column===O.column)??null:null,[L,R]=(0,T.useState)(I?.targetConnectionId??A),z=j.find(e=>e.id===L)?.serverConnectionId,[B,V]=(0,T.useState)([]),[H,U]=(0,T.useState)([]),[W,G]=(0,T.useState)([]),[K,q]=(0,T.useState)(I?.targetDatabase??O?.database??``),[J,Y]=(0,T.useState)(I?.targetTable??``),[X,Z]=(0,T.useState)(I?.targetColumn??``),[Q,$]=(0,T.useState)(null);if((0,T.useEffect)(()=>{if(!k||!z)return;let e=!1;return(async()=>{try{let t=await y(L).introspect.listDatabases(v(z));if(e)return;V(t),q(e=>t.includes(e)?e:t[0]??``)}catch(t){e||$(D(t))}})(),()=>{e=!0}},[k,z,L]),(0,T.useEffect)(()=>{if(!k||!z||!K)return;let e=!1;return(async()=>{try{let t=await y(L).introspect.listTables(v(z),K);if(e)return;U(t.map(e=>e.name))}catch(t){e||$(D(t))}})(),()=>{e=!0}},[k,z,L,K]),(0,T.useEffect)(()=>{if(!k||!z||!K||!J)return;let e=!1;return(async()=>{try{let t=await y(L).introspect.listColumns(v(z),K,J);if(e)return;G(t.map(e=>e.name)),Z(e=>t.some(t=>t.name===e)?e:t.find(e=>e.key===`PRI`)?.name??t[0]?.name??``)}catch(t){e||$(D(t))}})(),()=>{e=!0}},[k,z,L,K,J]),!O)return null;function ee(){if(!O||!K||!J||!X)return;let e=L!==A;P(A,{database:O.database,table:O.table,column:O.column,...e?{targetConnectionId:L}:{},targetDatabase:K,targetTable:J,targetColumn:X}),t(`column_link_set`,{dbms:y(A).id,target_dbms:y(L).id,cross_database:K!==O.database,cross_connection:e}),l()}function te(){O&&(F(A,O),l())}return(0,E.jsx)(w,{open:k,onOpenChange:e=>{e||l()},children:(0,E.jsxs)(S,{className:`sm:max-w-[460px]`,children:[(0,E.jsx)(b,{children:(0,E.jsx)(C,{children:e(`result.link.title`)})}),(0,E.jsxs)(`div`,{className:`space-y-4`,children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(s,{children:e(`result.link.source`)}),(0,E.jsx)(c,{value:`${O.database}.${O.table}.${O.column}`,disabled:!0})]}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`result.link.hint`)}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(s,{htmlFor:`link-conn`,children:e(`result.link.targetConnection`)}),(0,E.jsxs)(g,{value:L,onValueChange:e=>{R(e),Y(``),U([]),G([])},children:[(0,E.jsx)(p,{id:`link-conn`,className:`w-full`,children:(0,E.jsx)(f,{})}),(0,E.jsx)(m,{children:M.map(e=>(0,E.jsx)(h,{value:e.id,children:e.hostName||e.host||e.file||e.id},e.id))})]})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(s,{htmlFor:`link-db`,children:e(`result.link.targetDatabase`)}),(0,E.jsxs)(g,{value:K,onValueChange:e=>{q(e),Y(``),G([])},children:[(0,E.jsx)(p,{id:`link-db`,className:`w-full`,children:(0,E.jsx)(f,{})}),(0,E.jsx)(m,{children:B.map(e=>(0,E.jsx)(h,{value:e,children:e},e))})]})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(s,{htmlFor:`link-table`,children:e(`result.link.targetTable`)}),(0,E.jsxs)(g,{value:J,onValueChange:Y,disabled:H.length===0,children:[(0,E.jsx)(p,{id:`link-table`,className:`w-full`,children:(0,E.jsx)(f,{placeholder:e(`result.link.pickTable`)})}),(0,E.jsx)(m,{children:H.map(e=>(0,E.jsx)(h,{value:e,children:e},e))})]})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(s,{htmlFor:`link-column`,children:e(`result.link.targetColumn`)}),(0,E.jsxs)(g,{value:X,onValueChange:Z,disabled:W.length===0,children:[(0,E.jsx)(p,{id:`link-column`,className:`w-full`,children:(0,E.jsx)(f,{placeholder:e(`result.link.pickColumn`)})}),(0,E.jsx)(m,{children:W.map(e=>(0,E.jsx)(h,{value:e,children:e},e))})]})]}),Q&&(0,E.jsx)(`p`,{className:`text-xs text-destructive`,children:Q})]}),(0,E.jsxs)(x,{children:[I&&(0,E.jsx)(d,{variant:`destructive`,onClick:te,className:`mr-auto`,children:e(`result.link.remove`)}),(0,E.jsx)(d,{variant:`outline`,onClick:l,children:e(`result.link.cancel`)}),(0,E.jsx)(d,{onClick:ee,disabled:!K||!J||!X,children:e(`result.link.save`)})]})]})})}export{O as LinkColumnDialog};
@@ -1 +0,0 @@
1
- import{_ as e,m as t,n}from"./ui-store-VGM_km-l.js";import{$ as r,B as i,G as a,H as o,J as s,V as c,W as l,X as u,Y as d,lt as f,q as p}from"./main-kdBvc1j0.js";import{a as m,f as h,l as g,m as _,o as v,s as y}from"./button-BRD_vJ8s.js";import{_ as b,a as x,o as S,r as C,t as w}from"./dist-BnghYOTd.js";import{r as T}from"./settings-store-hXzC7s8K.js";import{t as E}from"./use-engine-CkfCgSB4.js";import{a as D,n as O,o as k,r as A,t as j}from"./dialog-1MXGAorC.js";var M=m(`plug`,[[`path`,{d:`M12 22v-5`,key:`1ega77`}],[`path`,{d:`M15 8V2`,key:`18g5xt`}],[`path`,{d:`M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z`,key:`1xoxul`}],[`path`,{d:`M9 8V2`,key:`14iosj`}]]),N=m(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),P=m(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]),F=e(t(),1),I=1,L=.9,R=.8,z=.17,B=.1,ee=.999,te=.9999,ne=.99,re=/[\\\/_+.#"@\[\(\{&]/,ie=/[\\\/_+.#"@\[\(\{&]/g,ae=/[\s-]/,oe=/[\s-]/g;function V(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?I:ne;var s=`${i},${a}`;if(o[s]!==void 0)return o[s];for(var c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,p,m;l>=0;)d=V(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=I:re.test(e.charAt(l-1))?(d*=R,p=e.slice(i,l-1).match(ie),p&&i>0&&(d*=ee**+p.length)):ae.test(e.charAt(l-1))?(d*=L,m=e.slice(i,l-1).match(oe),m&&i>0&&(d*=ee**+m.length)):(d*=z,i>0&&(d*=ee**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=te)),(d<B&&n.charAt(l-1)===r.charAt(a+1)||r.charAt(a+1)===r.charAt(a)&&n.charAt(l-1)!==r.charAt(a))&&(f=V(e,t,n,r,l+1,a+2,o),f*B>d&&(d=f*B)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function se(e){return e.toLowerCase().replace(oe,` `)}function ce(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,V(e,t,se(e),se(t),0,0,{})}var H=`[cmdk-group=""]`,U=`[cmdk-group-items=""]`,le=`[cmdk-group-heading=""]`,ue=`[cmdk-item=""]`,de=`${ue}:not([aria-disabled="true"])`,W=`cmdk-item-select`,G=`data-value`,fe=(e,t,n)=>ce(e,t,n),pe=F.createContext(void 0),K=()=>F.useContext(pe),me=F.createContext(void 0),q=()=>F.useContext(me),he=F.createContext(void 0),ge=F.forwardRef((e,t)=>{let n=X(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),r=X(()=>new Set),i=X(()=>new Map),a=X(()=>new Map),o=X(()=>new Set),s=De(e),{label:c,children:l,value:u,onValueChange:d,filter:f,shouldFilter:p,loop:m,disablePointerSelection:h=!1,vimBindings:g=!0,..._}=e,v=b(),x=b(),S=b(),C=F.useRef(null),w=ke();Y(()=>{if(u!==void 0){let e=u.trim();n.current.value=e,T.emit()}},[u]),Y(()=>{w(6,j)},[]);let T=F.useMemo(()=>({subscribe:e=>(o.current.add(e),()=>o.current.delete(e)),snapshot:()=>n.current,setState:(e,t,r)=>{var i,a,o;if(!Object.is(n.current[e],t)){if(n.current[e]=t,e===`search`)A(),O(),w(1,k);else if(e===`value`){if(document.activeElement.hasAttribute(`cmdk-input`)||document.activeElement.hasAttribute(`cmdk-root`)){let e=document.getElementById(S);e?e.focus():(i=document.getElementById(v))==null||i.focus()}if(w(7,()=>{n.current.selectedItemId=M()?.id,T.emit()}),r||w(5,j),s.current?.value!==void 0){let e=t??``;(o=(a=s.current).onValueChange)==null||o.call(a,e);return}}T.emit()}},emit:()=>{o.current.forEach(e=>e())}}),[]),E=F.useMemo(()=>({value:(e,t,r)=>{t!==a.current.get(e)?.value&&(a.current.set(e,{value:t,keywords:r}),n.current.filtered.items.set(e,D(t,r)),w(2,()=>{O(),T.emit()}))},item:(e,t)=>(r.current.add(e),t&&(i.current.has(t)?i.current.get(t).add(e):i.current.set(t,new Set([e]))),w(3,()=>{A(),O(),n.current.value||k(),T.emit()}),()=>{a.current.delete(e),r.current.delete(e),n.current.filtered.items.delete(e);let t=M();w(4,()=>{A(),t?.getAttribute(`id`)===e&&k(),T.emit()})}),group:e=>(i.current.has(e)||i.current.set(e,new Set),()=>{a.current.delete(e),i.current.delete(e)}),filter:()=>s.current.shouldFilter,label:c||e[`aria-label`],getDisablePointerSelection:()=>s.current.disablePointerSelection,listId:v,inputId:S,labelId:x,listInnerRef:C}),[]);function D(e,t){let r=s.current?.filter??fe;return e?r(e,n.current.search,t):0}function O(){if(!n.current.search||s.current.shouldFilter===!1)return;let e=n.current.filtered.items,t=[];n.current.filtered.groups.forEach(n=>{let r=i.current.get(n),a=0;r.forEach(t=>{let n=e.get(t);a=Math.max(n,a)}),t.push([n,a])});let r=C.current;N().sort((t,n)=>{let r=t.getAttribute(`id`),i=n.getAttribute(`id`);return(e.get(i)??0)-(e.get(r)??0)}).forEach(e=>{let t=e.closest(U);t?t.appendChild(e.parentElement===t?e:e.closest(`${U} > *`)):r.appendChild(e.parentElement===r?e:e.closest(`${U} > *`))}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=C.current?.querySelector(`${H}[${G}="${encodeURIComponent(e[0])}"]`);t?.parentElement.appendChild(t)})}function k(){let e=N().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(G);T.setState(`value`,e||void 0)}function A(){if(!n.current.search||s.current.shouldFilter===!1){n.current.filtered.count=r.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let t of r.current){let r=D(a.current.get(t)?.value??``,a.current.get(t)?.keywords??[]);n.current.filtered.items.set(t,r),r>0&&e++}for(let[e,t]of i.current)for(let r of t)if(n.current.filtered.items.get(r)>0){n.current.filtered.groups.add(e);break}n.current.filtered.count=e}function j(){var e;let t=M();t&&(t.parentElement?.firstChild===t&&((e=t.closest(H)?.querySelector(le))==null||e.scrollIntoView({block:`nearest`})),t.scrollIntoView({block:`nearest`}))}function M(){return C.current?.querySelector(`${ue}[aria-selected="true"]`)}function N(){return Array.from(C.current?.querySelectorAll(de)||[])}function P(e){let t=N()[e];t&&T.setState(`value`,t.getAttribute(G))}function I(e){var t;let n=M(),r=N(),i=r.findIndex(e=>e===n),a=r[i+e];(t=s.current)!=null&&t.loop&&(a=i+e<0?r[r.length-1]:i+e===r.length?r[0]:r[i+e]),a&&T.setState(`value`,a.getAttribute(G))}function L(e){let t=M()?.closest(H),n;for(;t&&!n;)t=e>0?Te(t,H):Ee(t,H),n=t?.querySelector(de);n?T.setState(`value`,n.getAttribute(G)):I(e)}let R=()=>P(N().length-1),z=e=>{e.preventDefault(),e.metaKey?R():e.altKey?L(1):I(1)},B=e=>{e.preventDefault(),e.metaKey?P(0):e.altKey?L(-1):I(-1)};return F.createElement(y.div,{ref:t,tabIndex:-1,..._,"cmdk-root":``,onKeyDown:e=>{var t;(t=_.onKeyDown)==null||t.call(_,e);let n=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||n))switch(e.key){case`n`:case`j`:g&&e.ctrlKey&&z(e);break;case`ArrowDown`:z(e);break;case`p`:case`k`:g&&e.ctrlKey&&B(e);break;case`ArrowUp`:B(e);break;case`Home`:e.preventDefault(),P(0);break;case`End`:e.preventDefault(),R();break;case`Enter`:{e.preventDefault();let t=M();if(t){let e=new Event(W);t.dispatchEvent(e)}}}}},F.createElement(`label`,{"cmdk-label":``,htmlFor:E.inputId,id:E.labelId,style:je},c),Q(e,e=>F.createElement(me.Provider,{value:T},F.createElement(pe.Provider,{value:E},e))))}),_e=F.forwardRef((e,t)=>{let n=b(),r=F.useRef(null),i=F.useContext(he),a=K(),o=De(e),s=o.current?.forceMount??i?.forceMount;Y(()=>{if(!s)return a.item(n,i?.id)},[s]);let c=Oe(n,r,[e.value,e.children,r],e.keywords),l=q(),u=Z(e=>e.value&&e.value===c.current),d=Z(e=>s||a.filter()===!1?!0:!e.search||e.filtered.items.get(n)>0);F.useEffect(()=>{let t=r.current;if(!(!t||e.disabled))return t.addEventListener(W,f),()=>t.removeEventListener(W,f)},[d,e.onSelect,e.disabled]);function f(){var e,t;p(),(t=(e=o.current).onSelect)==null||t.call(e,c.current)}function p(){l.setState(`value`,c.current,!0)}if(!d)return null;let{disabled:m,value:g,onSelect:_,forceMount:v,keywords:x,...S}=e;return F.createElement(y.div,{ref:h(r,t),...S,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!m,"aria-selected":!!u,"data-disabled":!!m,"data-selected":!!u,onPointerMove:m||a.getDisablePointerSelection()?void 0:p,onClick:m?void 0:f},e.children)}),ve=F.forwardRef((e,t)=>{let{heading:n,children:r,forceMount:i,...a}=e,o=b(),s=F.useRef(null),c=F.useRef(null),l=b(),u=K(),d=Z(e=>i||u.filter()===!1?!0:!e.search||e.filtered.groups.has(o));Y(()=>u.group(o),[]),Oe(o,s,[e.value,e.heading,c]);let f=F.useMemo(()=>({id:o,forceMount:i}),[i]);return F.createElement(y.div,{ref:h(s,t),...a,"cmdk-group":``,role:`presentation`,hidden:!d||void 0},n&&F.createElement(`div`,{ref:c,"cmdk-group-heading":``,"aria-hidden":!0,id:l},n),Q(e,e=>F.createElement(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?l:void 0},F.createElement(he.Provider,{value:f},e))))}),ye=F.forwardRef((e,t)=>{let{alwaysRender:n,...r}=e,i=F.useRef(null),a=Z(e=>!e.search);return!n&&!a?null:F.createElement(y.div,{ref:h(i,t),...r,"cmdk-separator":``,role:`separator`})}),be=F.forwardRef((e,t)=>{let{onValueChange:n,...r}=e,i=e.value!=null,a=q(),o=Z(e=>e.search),s=Z(e=>e.selectedItemId),c=K();return F.useEffect(()=>{e.value!=null&&a.setState(`search`,e.value)},[e.value]),F.createElement(y.input,{ref:t,...r,"cmdk-input":``,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,"aria-autocomplete":`list`,role:`combobox`,"aria-expanded":!0,"aria-controls":c.listId,"aria-labelledby":c.labelId,"aria-activedescendant":s,id:c.inputId,type:`text`,value:i?e.value:o,onChange:e=>{i||a.setState(`search`,e.target.value),n?.(e.target.value)}})}),xe=F.forwardRef((e,t)=>{let{children:n,label:r=`Suggestions`,...i}=e,a=F.useRef(null),o=F.useRef(null),s=Z(e=>e.selectedItemId),c=K();return F.useEffect(()=>{if(o.current&&a.current){let e=o.current,t=a.current,n,r=new ResizeObserver(()=>{n=requestAnimationFrame(()=>{let n=e.offsetHeight;t.style.setProperty(`--cmdk-list-height`,n.toFixed(1)+`px`)})});return r.observe(e),()=>{cancelAnimationFrame(n),r.unobserve(e)}}},[]),F.createElement(y.div,{ref:h(a,t),...i,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":s,"aria-label":r,id:c.listId},Q(e,e=>F.createElement(`div`,{ref:h(o,c.listInnerRef),"cmdk-list-sizer":``},e)))}),Se=F.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return F.createElement(w,{open:n,onOpenChange:r},F.createElement(S,{container:o},F.createElement(x,{"cmdk-overlay":``,className:i}),F.createElement(C,{"aria-label":e.label,"cmdk-dialog":``,className:a},F.createElement(ge,{ref:t,...s}))))}),Ce=F.forwardRef((e,t)=>Z(e=>e.filtered.count===0)?F.createElement(y.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),we=F.forwardRef((e,t)=>{let{progress:n,children:r,label:i=`Loading...`,...a}=e;return F.createElement(y.div,{ref:t,...a,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i},Q(e,e=>F.createElement(`div`,{"aria-hidden":!0},e)))}),J=Object.assign(ge,{List:xe,Item:_e,Input:be,Group:ve,Separator:ye,Dialog:Se,Empty:Ce,Loading:we});function Te(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function Ee(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function De(e){let t=F.useRef(e);return Y(()=>{t.current=e}),t}var Y=typeof window>`u`?F.useEffect:F.useLayoutEffect;function X(e){let t=F.useRef();return t.current===void 0&&(t.current=e()),t}function Z(e){let t=q(),n=()=>e(t.snapshot());return F.useSyncExternalStore(t.subscribe,n,n)}function Oe(e,t,n,r=[]){let i=F.useRef(),a=K();return Y(()=>{var o;let s=(()=>{for(let e of n){if(typeof e==`string`)return e.trim();if(typeof e==`object`&&`current`in e)return e.current?e.current.textContent?.trim():i.current}})(),c=r.map(e=>e.trim());a.value(e,s,c),(o=t.current)==null||o.setAttribute(G,s),i.current=s}),i}var ke=()=>{let[e,t]=F.useState(),n=X(()=>new Map);return Y(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function Ae(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function Q({asChild:e,children:t},n){return e&&F.isValidElement(t)?F.cloneElement(Ae(t),{ref:t.ref},n(t.props.children)):n(t)}var je={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`},$=g();function Me({className:e,...t}){return(0,$.jsx)(J,{"data-slot":`command`,className:v(`flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground`,e),...t})}function Ne({title:e=`Command Palette`,description:t=`Search for a command to run...`,children:n,className:r,showCloseButton:i=!0,...a}){return(0,$.jsxs)(j,{...a,children:[(0,$.jsxs)(D,{className:`sr-only`,children:[(0,$.jsx)(k,{children:e}),(0,$.jsx)(A,{children:t})]}),(0,$.jsx)(O,{className:v(`overflow-hidden p-0`,r),showCloseButton:i,children:(0,$.jsx)(Me,{className:`**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5`,children:n})})]})}function Pe({className:e,...t}){return(0,$.jsxs)(`div`,{"data-slot":`command-input-wrapper`,className:`flex h-9 items-center gap-2 border-b px-3`,children:[(0,$.jsx)(p,{className:`size-4 shrink-0 opacity-50`}),(0,$.jsx)(J.Input,{"data-slot":`command-input`,className:v(`flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50`,e),...t})]})}function Fe({className:e,...t}){return(0,$.jsx)(J.List,{"data-slot":`command-list`,className:v(`max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto`,e),...t})}function Ie({...e}){return(0,$.jsx)(J.Empty,{"data-slot":`command-empty`,className:`py-6 text-center text-sm`,...e})}function Le({className:e,...t}){return(0,$.jsx)(J.Group,{"data-slot":`command-group`,className:v(`overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground`,e),...t})}function Re({className:e,...t}){return(0,$.jsx)(J.Item,{"data-slot":`command-item`,className:v(`relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...t})}function ze({className:e,...t}){return(0,$.jsx)(`span`,{"data-slot":`command-shortcut`,className:v(`ml-auto text-xs tracking-widest text-muted-foreground`,e),...t})}function Be(){let{t:e}=_(),{activeDialog:t,closeDialog:p,openDialog:m}=n(),{executeCurrentQuery:h,addNewQueryTab:g,disconnectActive:v}=i(),{capabilities:y}=E(),b=T(),x=t===`quick-command`,S=(0,F.useCallback)(e=>{p(),e()},[p]),C=[{heading:e(`palette.groups.connection`),commands:[...b?[{id:`connect`,label:e(`palette.commands.connect`),icon:M,action:()=>S(()=>m(`connect`))}]:[],{id:`disconnect`,label:e(`palette.commands.disconnect`),icon:o,action:()=>S(()=>{v()})}]},{heading:e(`palette.groups.query`),commands:[{id:`execute`,label:e(`palette.commands.executeQuery`),icon:u,shortcut:`F9`,action:()=>S(()=>{h()})},{id:`new-tab`,label:e(`palette.commands.newQueryTab`),icon:d,action:()=>S(()=>g())}]},{heading:e(`palette.groups.database`),commands:[{id:`create-db`,capability:`multipleDatabases`,label:e(`palette.commands.createDatabase`),icon:r,action:()=>S(()=>m(`create-database`))}]},{heading:e(`palette.groups.table`),commands:[{id:`create-table`,label:e(`palette.commands.createTable`),icon:a,action:()=>S(()=>m(`create-table`))},{id:`alter-table`,label:e(`palette.commands.alterTable`),icon:P,action:()=>S(()=>m(`alter-table`))}]},{heading:e(`palette.groups.tools`),commands:[{id:`process-list`,capability:`processList`,label:e(`palette.commands.processList`),icon:f,action:()=>S(()=>m(`process-list`))},{id:`variables`,capability:`variables`,label:e(`palette.commands.serverVariables`),icon:N,action:()=>S(()=>m(`variables`))},{id:`status`,capability:`status`,label:e(`palette.commands.serverStatus`),icon:l,action:()=>S(()=>m(`status`))},{id:`flush`,capability:`flush`,label:e(`palette.commands.flush`),icon:s,action:()=>S(()=>m(`flush`))},{id:`user-manager`,capability:`users`,label:e(`palette.commands.userManager`),icon:c,action:()=>S(()=>m(`user-manager`))}]}];(0,F.useEffect)(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.key===`k`&&(e.preventDefault(),x?p():m(`quick-command`))}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[x,m,p]);function w(e){e||p()}return(0,$.jsxs)(Ne,{open:x,onOpenChange:w,title:e(`palette.title`),description:e(`palette.description`),children:[(0,$.jsx)(Pe,{placeholder:e(`palette.inputPlaceholder`)}),(0,$.jsxs)(Fe,{children:[(0,$.jsx)(Ie,{children:e(`palette.empty`)}),C.map(e=>({...e,commands:e.commands.filter(e=>!e.capability||y[e.capability])})).filter(e=>e.commands.length>0).map(e=>(0,$.jsx)(Le,{heading:e.heading,children:e.commands.map(e=>(0,$.jsxs)(Re,{onSelect:e.action,children:[(0,$.jsx)(e.icon,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{children:e.label}),e.shortcut&&(0,$.jsx)(ze,{children:e.shortcut})]},e.id))},e.heading))]})]})}export{Be as QuickCommandPalette};
@@ -1,7 +0,0 @@
1
- import{_ as e,c as t,m as n,n as r,t as i}from"./ui-store-VGM_km-l.js";import{A as a,k as o,l as s}from"./main-kdBvc1j0.js";import{l as c,m as l,t as u}from"./button-BRD_vJ8s.js";import{a as d,i as f,n as p,r as m,t as h}from"./select-CY6U-FwY.js";import{t as g}from"./connection-store-Cn79Ey1H.js";import{r as _}from"./database-DT05D7dO.js";import{n as v}from"./engine-tGsnPQEm.js";import{t as y}from"./table-definition-Bs5VSn0X.js";import{a as ee,i as te,n as b,o as ne,t as x}from"./dialog-1MXGAorC.js";var S=e(n(),1),C=[`VIEW`,`PROCEDURE`,`FUNCTION`,`TRIGGER`,`EVENT`];function w(e,t){return e.replace(/\bDEFINER\s*=\s*(?:`[^`]*`|'[^']*'|"[^"]*"|\w+)@(?:`[^`]*`|'[^']*'|"[^"]*"|[\w.%-]+)/gi,``).replace(/\bSQL SECURITY (?:DEFINER|INVOKER)\b/gi,``).replace(/\bALGORITHM\s*=\s*\w+/gi,``).replace(RegExp(`[\`"\\[]?${t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}[\`"\\]]?\\.`,`gi`),``).replace(/\s+/g,` `).replace(/;\s*$/,``).trim()}function T(e,t){let n=[];for(let r of C){let i=e.objects?.get(r),a=t.objects?.get(r);if(!i&&!a)continue;let o=[...new Set([...i?.keys()??[],...a?.keys()??[]])].sort();for(let s of o){let o=i?.get(s)??null,c=a?.get(s)??null,l;l=o?c?o.sql!==null&&c.sql!==null&&w(o.sql,e.database)===w(c.sql,t.database)?`identical`:`changed`:`missingInTarget`:`missingInSource`,n.push({type:r,name:s,status:l,source:o,target:c})}}return n}var E=e=>e.toLowerCase().replace(/\s+/g,` `).trim(),D=e=>e===null?null:e.trim().replace(/^'(.*)'(?:::\w+)?$/s,`$1`),O=e=>e.addedColumns.length+e.removedColumns.length+e.changedColumns.length+e.addedIndexes.length+e.removedIndexes.length+e.changedIndexes.length>0;function k(e,t){let n=[];return E(e.type)!==E(t.type)&&n.push(`type`),e.nullable!==t.nullable&&n.push(`nullable`),D(e.defaultValue)!==D(t.defaultValue)&&n.push(`default`),e.extra.toLowerCase()!==t.extra.toLowerCase()&&n.push(`extra`),n}var A=(e,t)=>e.type===t.type&&e.columns.length===t.columns.length&&e.columns.every((e,n)=>e===t.columns[n]);function j(e,t,n){let r=t.columns.get(e)??[],i=n.columns.get(e)??[],a=new Map(i.map(e=>[e.name,e])),o=new Map(r.map(e=>[e.name,e])),s={table:e,addedColumns:r.filter(e=>!a.has(e.name)),removedColumns:i.filter(e=>!o.has(e.name)),changedColumns:[],addedIndexes:[],removedIndexes:[],changedIndexes:[]};for(let e of r){let t=a.get(e.name);if(!t)continue;let n=k(e,t);n.length>0&&s.changedColumns.push({name:e.name,source:e,target:t,attributes:n})}let c=t.indexes.get(e)??[],l=n.indexes.get(e)??[],u=new Map(l.map(e=>[e.name,e])),d=new Map(c.map(e=>[e.name,e]));s.addedIndexes=c.filter(e=>!u.has(e.name)),s.removedIndexes=l.filter(e=>!d.has(e.name));for(let e of c){let t=u.get(e.name);t&&!A(e,t)&&s.changedIndexes.push({name:e.name,source:e,target:t})}return s}function re(e,t){let n=new Set(t.tables),r=new Set(e.tables),i={missingInTarget:[],missingInSource:[],changed:[],identical:[],objects:T(e,t)};for(let r of e.tables){if(!n.has(r)){i.missingInTarget.push(r);continue}let a=j(r,e,t);O(a)?i.changed.push(a):i.identical.push(r)}return i.missingInSource=t.tables.filter(e=>!r.has(e)),i}var M=e=>e.split(`
2
- `).map(e=>`-- ${e}`).join(`
3
- `);function N(e,t,n,r,i={}){let a=n.ddl,o=r.database,s=e=>i.includeDrops?e:M(e),c=[`-- Schema sync: ${t.database} -> ${o} (${n.label})`,`-- Review before running. Statements that drop data are commented out unless "Include DROP statements" was checked.`,``];for(let r of e.missingInTarget)c.push(`-- Table ${r} is missing in the target`),c.push(P(r,t,n,o)),c.push(``);for(let t of e.changed){c.push(`-- Table ${t.table}`);for(let e of t.removedIndexes)c.push(s(a.dropIndex(o,t.table,e.name)));for(let e of t.changedIndexes)c.push(s(a.dropIndex(o,t.table,e.name)));for(let e of t.addedColumns)c.push(a.addColumn(o,t.table,e));for(let e of t.changedColumns){let r=a.alterColumn(o,t.table,e.source);c.push(r??M(`${n.label} cannot alter column ${e.name} in place (${e.attributes.join(`, `)}): recreate the table`))}for(let e of t.removedColumns)c.push(s(a.dropColumn(o,t.table,e.name)));for(let e of t.addedIndexes)c.push(a.createIndex(o,t.table,e));for(let e of t.changedIndexes)c.push(a.createIndex(o,t.table,e.source));c.push(``)}for(let t of e.missingInSource)c.push(`-- Table ${t} exists only in the target`),c.push(s(`DROP TABLE ${n.qualify(o,t)};`)),c.push(``);for(let t of e.objects){if(t.status===`identical`)continue;let e=`${t.type.charAt(0)}${t.type.slice(1).toLowerCase()} ${t.name}`,r=I(n,o,t);t.status===`missingInSource`?(c.push(`-- ${e} exists only in the target`),c.push(s(r))):(c.push(t.status===`changed`?`-- ${e} differs; recreated from the source`:`-- ${e} is missing in the target`),t.status===`changed`&&c.push(s(r)),c.push(t.source?.sql?L(t.source.sql):M(`the source engine did not return a CREATE statement for ${e}`))),c.push(``)}return c.join(`
4
- `).replace(/\n{3,}/g,`
5
-
6
- `).trim()+`
7
- `}function P(e,t,n,r){let i=y(r,e,t.columns.get(e)??[],t.indexes.get(e)??[],null);return n.ddl.createTable(i)}var F={VIEW:`DROP_VIEW`,PROCEDURE:`DROP_PROCEDURE`,FUNCTION:`DROP_FUNCTION`,TRIGGER:`DROP_TRIGGER`,EVENT:`DROP_EVENT`};function I(e,t,n){let r=F[n.type];if(!e.hasQuery(r))return`-- ${e.label} has no ${n.type} objects`;let i=n.target?.table??n.source?.table??``;return`${e.getQuery(r,t,n.name,``,i).replace(/\s{2,}/g,` `).trim()};`}function L(e){let t=e.trim();return/;\s*$/.test(t)?t:`${t};`}var R=c(),z=e=>e instanceof Error?e.message:String(e),B=e=>`${e.type}:${e.name}`,V=e=>e.hostName||e.host||e.file||e.id;function H({id:e,label:t,side:n,onChange:r,connections:i,disabled:a}){let{t:o}=l(),[c,u]=(0,S.useState)([]),g=i.find(e=>e.id===n.connectionId);return(0,S.useEffect)(()=>{if(!g?.serverConnectionId)return;let e=!1,t=v(g.id),i=_(g.serverConnectionId);return(async()=>{try{let a=await t.introspect.listDatabases(i);if(e)return;u(a),a.includes(n.database)||r({connectionId:g.id,database:a[0]??``})}catch{e||u([])}})(),()=>{e=!0}},[g?.id,g?.serverConnectionId]),(0,R.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3`,children:[(0,R.jsx)(s,{className:`font-medium`,children:t}),(0,R.jsxs)(h,{value:n.connectionId,onValueChange:e=>r({connectionId:e,database:``}),disabled:a,children:[(0,R.jsx)(f,{id:`${e}-conn`,className:`w-full`,children:(0,R.jsx)(d,{placeholder:o(`database.diff.pickConnection`)})}),(0,R.jsx)(p,{children:i.map(e=>(0,R.jsx)(m,{value:e.id,children:V(e)},e.id))})]}),(0,R.jsxs)(h,{value:n.database,onValueChange:e=>r({...n,database:e}),disabled:a||c.length===0,children:[(0,R.jsx)(f,{id:`${e}-db`,className:`w-full`,children:(0,R.jsx)(d,{placeholder:o(`database.diff.pickDatabase`)})}),(0,R.jsx)(p,{children:c.map(e=>(0,R.jsx)(m,{value:e,children:e},e))})]})]})}async function U(e){let t=g.getState().activeConnections.find(t=>t.id===e.connectionId);if(!t?.serverConnectionId)throw Error(`Not connected`);let n=v(t.id),r=_(t.serverConnectionId),[i,a,o,s]=await Promise.all([n.introspect.listTables(r,e.database),n.introspect.listAllColumns(r,e.database),n.introspect.listAllIndexes(r,e.database),W(n,r,e.database)]);return{database:e.database,tables:i.map(e=>e.name).sort(),columns:a,indexes:o,objects:s}}async function W(e,t,n){let{introspect:r,capabilities:i}=e,a={VIEW:async()=>(await r.listViews(t,n)).map(e=>({name:e}))};i.procedures&&(a.PROCEDURE=async()=>(await r.listProcedures(t,n)).map(e=>({name:e}))),i.functions&&(a.FUNCTION=async()=>(await r.listFunctions(t,n)).map(e=>({name:e}))),i.triggers&&(a.TRIGGER=async()=>r.listTriggerDetails?r.listTriggerDetails(t,n):(await r.listTriggers(t,n)).map(e=>({name:e}))),i.events&&(a.EVENT=async()=>(await r.listEvents(t,n)).map(e=>({name:e})));let o=new Map;for(let e of C){let i=a[e];if(!i)continue;let s=await i(),c=new Map;for(let i of s){let a=null;try{a=await r.getCreateStatement(t,n,e,i.name)}catch{}c.set(i.name,i.table?{sql:a,table:i.table}:{sql:a})}o.set(e,c)}return o}function ie({diff:e}){let{t}=l(),n=e=>(0,R.jsx)(`pre`,{className:`whitespace-pre-wrap break-all text-xs font-mono`,children:e?e.sql??t(`database.diff.noDefinition`):`—`});return(0,R.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`text-xs text-muted-foreground mb-1`,children:t(`database.diff.source`)}),n(e.source)]}),(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`text-xs text-muted-foreground mb-1`,children:t(`database.diff.target`)}),n(e.target)]})]})}var G=e=>`${e.type}${e.nullable?``:` NOT NULL`}${e.defaultValue===null?``:` DEFAULT ${e.defaultValue}`}${e.extra?` ${e.extra}`:``}`;function K({diff:e}){let{t}=l(),n=[];for(let r of e.addedColumns)n.push({kind:t(`database.diff.column`),name:r.name,source:G(r),target:`—`,tone:`text-green-600 dark:text-green-400`});for(let r of e.removedColumns)n.push({kind:t(`database.diff.column`),name:r.name,source:`—`,target:G(r),tone:`text-destructive`});for(let r of e.changedColumns)n.push({kind:t(`database.diff.column`),name:`${r.name} (${r.attributes.join(`, `)})`,source:G(r.source),target:G(r.target),tone:`text-amber-600 dark:text-amber-400`});for(let r of e.addedIndexes)n.push({kind:t(`database.diff.index`),name:r.name,source:`${r.type} (${r.columns.join(`, `)})`,target:`—`,tone:`text-green-600 dark:text-green-400`});for(let r of e.removedIndexes)n.push({kind:t(`database.diff.index`),name:r.name,source:`—`,target:`${r.type} (${r.columns.join(`, `)})`,tone:`text-destructive`});for(let r of e.changedIndexes)n.push({kind:t(`database.diff.index`),name:r.name,source:`${r.source.type} (${r.source.columns.join(`, `)})`,target:`${r.target.type} (${r.target.columns.join(`, `)})`,tone:`text-amber-600 dark:text-amber-400`});return(0,R.jsxs)(`table`,{className:`w-full text-xs font-mono`,children:[(0,R.jsx)(`thead`,{className:`text-muted-foreground`,children:(0,R.jsxs)(`tr`,{children:[(0,R.jsx)(`th`,{className:`text-left font-normal pr-2`,children:t(`database.diff.object`)}),(0,R.jsx)(`th`,{className:`text-left font-normal pr-2`,children:t(`database.diff.source`)}),(0,R.jsx)(`th`,{className:`text-left font-normal`,children:t(`database.diff.target`)})]})}),(0,R.jsx)(`tbody`,{children:n.map((e,t)=>(0,R.jsxs)(`tr`,{className:e.tone,children:[(0,R.jsxs)(`td`,{className:`pr-2 align-top whitespace-nowrap`,children:[e.kind,` `,e.name]}),(0,R.jsx)(`td`,{className:`pr-2 align-top break-all`,children:e.source}),(0,R.jsx)(`td`,{className:`align-top break-all`,children:e.target})]},t))})]})}function q(){let{t:e}=l(),n=r(e=>e.activeDialog),s=r(e=>e.closeDialog),c=g(e=>e.activeConnections),d=(0,S.useMemo)(()=>c.filter(e=>e.serverConnectionId),[c]),f=g(e=>e.activeConnectionId),p=n===`schema-diff`,m=i(`schema-diff`),[h,_]=(0,S.useState)(()=>m&&d.some(e=>e.id===m.connectionId)?{connectionId:m.connectionId,database:m.database}:{connectionId:f&&d.some(e=>e.id===f)?f:d[0]?.id??``,database:``}),[y,C]=(0,S.useState)(()=>({connectionId:d.find(e=>e.id!==h.connectionId)?.id??h.connectionId,database:``})),[w,T]=(0,S.useState)(null),[E,D]=(0,S.useState)(null),[O,k]=(0,S.useState)(null),[A,j]=(0,S.useState)(!1),[M,P]=(0,S.useState)(!1),[F,I]=(0,S.useState)(!1),[L,V]=(0,S.useState)(null),W=h.connectionId===y.connectionId&&h.database===y.database,G=!!h.connectionId&&!!h.database&&!!y.connectionId&&!!y.database&&!W,q=y.connectionId?v(y.connectionId):null,J=h.connectionId?v(h.connectionId):null,ae=!!J&&!!q&&J.id!==q.id;async function oe(){I(!0),V(null),D(null),k(null);try{let[e,n]=await Promise.all([U(h),U(y)]),r=re(e,n);T({source:e,target:n}),D(r);let i=m?.focus,a=null;if(i?.type===`TABLE`)a=r.changed.some(e=>e.table===i.name)?i.name:r.missingInTarget.includes(i.name)?`+${i.name}`:r.missingInSource.includes(i.name)?`-${i.name}`:null,r.identical.includes(i.name)&&P(!0);else if(i){let e=r.objects.find(e=>e.type===i.type&&e.name===i.name);e&&(a=B(e),e.status===`identical`&&P(!0))}k(a??r.changed[0]?.table??null),t(`schema_diff`,{source_dbms:J?.id??`unknown`,target_dbms:q?.id??`unknown`,changed:r.changed.length,missing:r.missingInTarget.length+r.missingInSource.length})}catch(e){V(z(e))}finally{I(!1)}}let Y=(0,S.useMemo)(()=>!E||!w||!q?``:N(E,w.source,q,{database:y.database},{includeDrops:A}),[E,w,q,y.database,A]);function se(){Y&&(a(y.connectionId,Y,y.database,e(`database.diff.tabTitle`,{database:y.database})),s())}let X=E?.changed.find(e=>e.table===O)??null,Z=E?.objects.find(e=>B(e)===O)??null,Q=E?.objects.filter(e=>e.status!==`identical`)??[],ce=E?e(`database.diff.summary`,{changed:E.changed.length+Q.filter(e=>e.status===`changed`).length,missingTarget:E.missingInTarget.length+Q.filter(e=>e.status===`missingInTarget`).length,missingSource:E.missingInSource.length+Q.filter(e=>e.status===`missingInSource`).length,identical:E.identical.length+E.objects.filter(e=>e.status===`identical`).length}):``,$=!!E&&E.changed.length+E.missingInTarget.length+E.missingInSource.length+Q.length>0,le=e=>e===`missingInTarget`?`text-green-600 dark:text-green-400`:e===`missingInSource`?`text-destructive`:e===`changed`?`text-amber-600 dark:text-amber-400`:`text-muted-foreground`,ue=e=>e===`missingInTarget`?`+`:e===`missingInSource`?`-`:e===`changed`?`~`:`=`;return(0,R.jsx)(x,{open:p,onOpenChange:e=>{e||s()},children:(0,R.jsxs)(b,{className:`sm:max-w-[860px]`,children:[(0,R.jsx)(ee,{children:(0,R.jsx)(ne,{children:e(`database.diff.title`)})}),(0,R.jsxs)(`div`,{className:`space-y-3`,children:[(0,R.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,R.jsx)(H,{id:`diff-source`,label:e(`database.diff.source`),side:h,onChange:_,connections:d,disabled:F}),(0,R.jsx)(H,{id:`diff-target`,label:e(`database.diff.target`),side:y,onChange:C,connections:d,disabled:F})]}),ae&&(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.diff.crossEngineHint`)}),W&&h.database&&(0,R.jsx)(`p`,{className:`text-xs text-destructive`,children:e(`database.diff.sameSide`)}),L&&(0,R.jsx)(`p`,{className:`text-sm text-destructive whitespace-pre-wrap`,children:L}),E&&(0,R.jsxs)(`div`,{className:`space-y-2`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-3 text-xs text-muted-foreground`,children:[(0,R.jsx)(`span`,{children:ce}),(0,R.jsxs)(`label`,{className:`flex items-center gap-1.5 cursor-pointer`,children:[(0,R.jsx)(`input`,{type:`checkbox`,checked:M,onChange:e=>P(e.target.checked)}),e(`database.diff.showIdentical`)]})]}),(0,R.jsxs)(`div`,{className:`grid grid-cols-[220px_1fr] gap-3 h-[300px]`,children:[(0,R.jsxs)(`ul`,{className:`overflow-auto rounded-md border text-sm`,children:[E.missingInTarget.map(e=>(0,R.jsxs)(`li`,{className:`px-2 py-1 cursor-pointer text-green-600 dark:text-green-400 ${O===`+${e}`?`bg-accent`:``}`,onClick:()=>k(`+${e}`),children:[`+ `,e]},`mt-${e}`)),E.changed.map(e=>(0,R.jsxs)(`li`,{className:`px-2 py-1 cursor-pointer text-amber-600 dark:text-amber-400 ${O===e.table?`bg-accent`:``}`,onClick:()=>k(e.table),children:[`~ `,e.table]},e.table)),E.missingInSource.map(e=>(0,R.jsxs)(`li`,{className:`px-2 py-1 cursor-pointer text-destructive ${O===`-${e}`?`bg-accent`:``}`,onClick:()=>k(`-${e}`),children:[`- `,e]},`ms-${e}`)),M&&E.identical.map(e=>(0,R.jsxs)(`li`,{className:`px-2 py-1 text-muted-foreground`,children:[`= `,e]},`id-${e}`)),E.objects.filter(e=>M||e.status!==`identical`).map(e=>(0,R.jsxs)(`li`,{className:`px-2 py-1 cursor-pointer ${le(e.status)} ${O===B(e)?`bg-accent`:``}`,onClick:()=>k(B(e)),children:[ue(e.status),` `,(0,R.jsxs)(`span`,{className:`text-muted-foreground`,children:[`[`,o(e.type),`]`]}),` `,e.name]},B(e))),!$&&(0,R.jsx)(`li`,{className:`px-2 py-1 text-muted-foreground`,children:e(`database.diff.identicalAll`)})]}),(0,R.jsx)(`div`,{className:`overflow-auto rounded-md border p-2`,children:X?(0,R.jsx)(K,{diff:X}):Z?(0,R.jsx)(ie,{diff:Z}):O?.startsWith(`+`)?(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.diff.missingInTarget`,{table:O.slice(1)})}):O?.startsWith(`-`)?(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.diff.missingInSource`,{table:O.slice(1)})}):(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.diff.selectTable`)})})]}),(0,R.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs cursor-pointer`,children:[(0,R.jsx)(`input`,{type:`checkbox`,checked:A,onChange:e=>j(e.target.checked)}),(0,R.jsx)(`span`,{className:A?`text-destructive`:``,children:e(`database.diff.includeDrops`)})]})]})]}),(0,R.jsxs)(te,{children:[(0,R.jsx)(u,{variant:`outline`,onClick:s,children:e(`database.diff.close`)}),(0,R.jsx)(u,{variant:`secondary`,onClick:()=>{oe()},disabled:!G||F,children:e(F?`database.diff.comparing`:`database.diff.compare`)}),(0,R.jsx)(u,{onClick:se,disabled:!$,children:e(`database.diff.openScript`)})]})]})})}export{q as SchemaDiffDialog};
@@ -1 +0,0 @@
1
- import{_ as e,m as t,n}from"./ui-store-VGM_km-l.js";import{$ as r,G as i,U as a,j as o,l as s,rt as c}from"./main-kdBvc1j0.js";import{a as l,l as u,m as d,o as f,t as p}from"./button-BRD_vJ8s.js";import{t as m}from"./connection-store-Cn79Ey1H.js";import{a as h,i as g,n as _,o as v,t as y}from"./dialog-1MXGAorC.js";import{n as b,t as x}from"./user-store-dpr5Uk1B.js";var S=l(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),C=l(`user-plus`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]),w=e(t(),1),T=u();function E({databases:e,tables:t,onSelectScope:n}){let{t:a}=d(),[s,l]=(0,w.useState)(new Set),[u,p]=(0,w.useState)(`global`),m=(0,w.useCallback)(e=>{l(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),h=[{id:`global`,text:a(`user.grantTree.globalPrivileges`),type:`global`,children:e.map(e=>({id:`db:${e}`,text:e,type:`database`,database:e,children:(t[e]??[]).map(t=>({id:`tbl:${e}.${t}`,text:t,type:`table`,database:e,table:t}))}))}];function g(e){p(e.id),n({level:e.type,database:e.database,table:e.table})}function _(e,t){let n=e.children&&e.children.length>0,a=s.has(e.id),o=u===e.id,l=S;return e.type===`database`&&(l=r),e.type===`table`&&(l=i),(0,T.jsxs)(`div`,{children:[(0,T.jsxs)(`div`,{className:f(`flex items-center gap-1 px-2 py-0.5 cursor-pointer text-sm hover:bg-accent rounded-sm`,o&&`bg-accent text-accent-foreground`),style:{paddingLeft:`${t*16+4}px`},onClick:()=>{g(e),n&&m(e.id)},children:[n?(0,T.jsx)(c,{className:f(`h-3 w-3 transition-transform shrink-0`,a&&`rotate-90`)}):(0,T.jsx)(`span`,{className:`w-3 shrink-0`}),(0,T.jsx)(l,{className:`h-4 w-4 text-muted-foreground shrink-0`}),(0,T.jsx)(`span`,{className:`truncate`,children:e.text})]}),a&&e.children?.map(e=>_(e,t+1))]},e.id)}return(0,T.jsx)(o,{className:`h-full`,children:(0,T.jsx)(`div`,{className:`py-1`,children:h.map(e=>_(e,0))})})}var D={Data:[`SELECT`,`INSERT`,`UPDATE`,`DELETE`],Structure:[`CREATE`,`ALTER`,`DROP`,`INDEX`,`REFERENCES`],Administration:[`GRANT OPTION`,`SUPER`,`PROCESS`,`RELOAD`,`SHUTDOWN`,`SHOW DATABASES`,`LOCK TABLES`,`EXECUTE`,`REPLICATION SLAVE`,`REPLICATION CLIENT`,`CREATE VIEW`,`SHOW VIEW`,`CREATE ROUTINE`,`ALTER ROUTINE`,`CREATE USER`,`EVENT`,`TRIGGER`,`CREATE TABLESPACE`]},O={Data:[`SELECT`,`INSERT`,`UPDATE`,`DELETE`],Structure:[`CREATE`,`ALTER`,`DROP`,`INDEX`,`REFERENCES`],Administration:[`GRANT OPTION`,`LOCK TABLES`,`EXECUTE`,`CREATE VIEW`,`SHOW VIEW`,`CREATE ROUTINE`,`ALTER ROUTINE`,`EVENT`,`TRIGGER`]},k={Data:[`SELECT`,`INSERT`,`UPDATE`,`DELETE`],Structure:[`CREATE`,`ALTER`,`DROP`,`INDEX`,`REFERENCES`],Administration:[`GRANT OPTION`,`TRIGGER`]},A={global:`user.privileges.globalTitle`,database:`user.privileges.databaseTitle`,table:`user.privileges.tableTitle`},j={Data:`user.privileges.categoryData`,Structure:`user.privileges.categoryStructure`,Administration:`user.privileges.categoryAdministration`};function M({scope:e,privileges:t,onChange:n}){let{t:r}=d(),i=(0,w.useMemo)(()=>e===`global`?D:e===`database`?O:k,[e]),a=(0,w.useMemo)(()=>Object.values(i).flat(),[i]);function c(e){n({...t,[e]:!t[e]})}function l(){let e={...t};for(let t of a)e[t]=!0;n(e)}function u(){let e={...t};for(let t of a)e[t]=!1;n(e)}return(0,T.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-2 p-2 border-b`,children:[(0,T.jsx)(`span`,{className:`text-sm font-medium`,children:r(A[e])}),(0,T.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,T.jsx)(p,{variant:`outline`,size:`sm`,onClick:l,children:r(`user.privileges.checkAll`)}),(0,T.jsx)(p,{variant:`outline`,size:`sm`,onClick:u,children:r(`user.privileges.uncheckAll`)})]})]}),(0,T.jsx)(o,{className:`flex-1`,children:(0,T.jsx)(`div`,{className:`p-3 space-y-4`,children:Object.entries(i).map(([e,n])=>(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`h4`,{className:`text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-2`,children:j[e]?r(j[e]):e}),(0,T.jsx)(`div`,{className:`grid grid-cols-2 gap-1`,children:n.map(e=>(0,T.jsxs)(s,{className:`flex items-center gap-2 text-sm font-normal cursor-pointer py-1`,children:[(0,T.jsx)(`input`,{type:`checkbox`,checked:t[e]??!1,onChange:()=>c(e),className:`rounded border-input`}),e]},e))})]},e))})})]})}function N(){let{t:e}=d(),{activeDialog:t,closeDialog:r,openDialog:i,setFooterMessage:s}=n(),c=m(e=>e.activeConnectionId)??``,l=b(e=>e.users[c]??x),u=b(e=>e.selectedUser[c]??null),S=b(e=>e.setSelectedUser),D=b(e=>e.removeUser),O=e=>S(c,e),k=(e,t)=>D(c,e,t),[A,j]=(0,w.useState)({level:`global`}),[N,P]=(0,w.useState)({}),[F]=(0,w.useState)([]),[I]=(0,w.useState)({}),L=t===`user-manager`;function R(e){e||(r(),O(null),j({level:`global`}),P({}))}let z=(0,w.useCallback)(e=>{j(e),P({})},[]);function B(){i(`user-add`)}function V(){u&&(k(u.host,u.user),s(e(`user.manager.removed`,{user:u.user,host:u.host})))}function H(){if(!u){s(e(`user.manager.selectUserFirst`));return}s(e(`user.manager.applied`))}return(0,T.jsx)(y,{open:L,onOpenChange:R,children:(0,T.jsxs)(_,{className:`sm:max-w-[80vw] max-h-[70vh] flex flex-col`,children:[(0,T.jsx)(h,{children:(0,T.jsx)(v,{children:e(`user.manager.title`)})}),(0,T.jsxs)(`div`,{className:`flex flex-1 gap-0 overflow-hidden min-h-0 border rounded-md`,children:[(0,T.jsxs)(`div`,{className:`w-[200px] shrink-0 border-r flex flex-col`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-1 p-2 border-b`,children:[(0,T.jsx)(p,{variant:`ghost`,size:`sm`,onClick:B,title:e(`user.manager.addUser`),children:(0,T.jsx)(C,{className:`h-4 w-4`})}),(0,T.jsx)(p,{variant:`ghost`,size:`sm`,onClick:V,disabled:!u,title:e(`user.manager.removeUser`),children:(0,T.jsx)(a,{className:`h-4 w-4`})})]}),(0,T.jsx)(o,{className:`flex-1`,children:(0,T.jsx)(`div`,{className:`py-1`,children:l.length===0?(0,T.jsx)(`div`,{className:`px-3 py-4 text-sm text-muted-foreground text-center`,children:e(`user.manager.noUsers`)}):l.map(e=>{let t=u?.user===e.user&&u?.host===e.host;return(0,T.jsx)(`div`,{className:f(`flex items-center gap-2 px-3 py-1.5 cursor-pointer text-sm hover:bg-accent`,t&&`bg-accent text-accent-foreground`),onClick:()=>O(e),children:(0,T.jsxs)(`span`,{className:`truncate`,children:[e.user,`@`,e.host]})},`${e.user}@${e.host}`)})})})]}),(0,T.jsxs)(`div`,{className:`w-[250px] shrink-0 border-r`,children:[(0,T.jsx)(`div`,{className:`p-2 border-b text-sm font-medium`,children:e(`user.manager.grantScope`)}),(0,T.jsx)(E,{connectionId:``,databases:F,tables:I,onSelectScope:z})]}),(0,T.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,T.jsx)(M,{scope:A.level,privileges:N,onChange:P})})]}),(0,T.jsxs)(g,{children:[(0,T.jsx)(p,{onClick:H,children:e(`user.manager.apply`)}),(0,T.jsx)(p,{variant:`outline`,onClick:()=>R(!1),children:e(`user.manager.close`)})]})]})})}export{N as UserManagerDialog};
@@ -1 +0,0 @@
1
- import{c as e,n as t,r as n}from"./ui-store-VGM_km-l.js";import{a as r,i}from"./i18n-BBZ4HyyF.js";import{i as a,n as o,r as s,t as c}from"./app-storage-B6v72zLH.js";import{t as l}from"./connection-store-Cn79Ey1H.js";import{n as u}from"./query-store-Cu277RoH.js";function d(e,t){let n=globalThis,r=`__planche_${e}`;return r in n||(n[r]=t()),n[r]}var f=new Set([`neon`,`supabase`]);function p(e){return e===`postgres`||f.has(e)}var ee=`_rowid_`,te=`http://127.0.0.1:8888`,m=d(`tunnelAgent`,()=>({url:null,token:null}));function ne(e){m.url=e.url?.replace(/\/+$/,``)||null,m.token=e.token?.trim()||null}var re=new Set([`127.0.0.1`,`localhost`,`[::1]`,`::1`]);function ie(e){try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&re.has(t.hostname)}catch{return!1}}function ae(e){try{return typeof window<`u`&&new URL(e).origin===window.location.origin}catch{return!1}}function oe(e){return ie(e)||ae(e)}function se(){return m.url!==null&&m.url!==`/api`&&!oe(m.url)}function h(){return m.url??te}function g(){let e=h();return e===`/api`?r.t(`services.agent.devProxyUrl`,{url:`http://localhost:8888`}):e}async function ce(){let e=g(),t;try{let e={};m.token&&(e.Authorization=`Bearer ${m.token}`),t=await(await fetch(`${h()}/health`,{cache:`no-store`,headers:e})).json()}catch(t){return{state:`offline`,url:e,message:t instanceof Error?t.message:String(t)}}return t.name!==`planche`||typeof t.version!=`string`||!/^[\w.+-]{1,32}$/.test(t.version)?{state:`offline`,url:e,message:r.t(`services.agent.notPlanche`)}:t.protocolVersion===2?t.authorized===!1||m.token===null&&t.authorized===void 0?{state:`unauthorized`,url:e,version:t.version}:{state:`online`,url:e,version:t.version,activeConnections:t.activeConnections??0,...t.gateway?{gateway:t.gateway}:{}}:{state:`outdated`,url:e,version:t.version,protocolVersion:t.protocolVersion??0}}async function le(){let e=await fetch(`${h()}/profiles`,{cache:`no-store`,headers:b()}),t=await e.json().catch(()=>null);if(!e.ok||!t||t.success!==!0)throw new x(t?.message??r.t(`services.agent.httpError`,{status:e.status,statusText:e.statusText}),e.status);return t}function _(e){let t=e.ssh;if(t?.enabled)return{host:t.host,port:t.port,user:t.user,auth:t.auth,password:t.auth===`password`?t.password??``:void 0,privateKey:t.auth===`key`?t.privateKey:void 0,passphrase:t.auth===`key`&&t.passphrase||void 0}}function v(e){return e.gatewayProfile?{profile:e.gatewayProfile}:e.dbms===`sqlite`?{driver:`sqlite`,file:e.file??``,createIfMissing:e.createIfMissing??!1,readonly:e.readOnly??!1}:e.dbms===`d1`?{driver:`d1`,accountId:e.accountId??``,databaseId:e.databaseId??``,apiToken:e.pass}:e.dbms===`postgres`?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:_(e)}:f.has(e.dbms)?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:!0,sslVerify:e.dbms===`neon`}:e.dbms===`mssql`?{driver:`mssql`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`master`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:_(e)}:e.dbms===`oracle`?{driver:`oracle`,host:e.host,port:e.port,user:e.user,password:e.pass,serviceName:e.database||`FREEPDB1`,ssh:_(e)}:{driver:`mysql`,host:e.host,port:e.port,user:e.user,password:e.pass,charset:e.charset===`utf8`?`utf8mb4`:e.charset,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:_(e)}}var y=d(`tunnelAuthTokens`,()=>new Map);function ue(e,t){let n=t?.trim();n?y.set(e,n):y.delete(e)}function de(e){return e?.trim()||m.token||void 0}function b(e){let t={"Content-Type":`application/json`},n=de(e);return n&&(t.Authorization=`Bearer ${n}`),t}var x=class extends Error{status;body;constructor(e,t,n=null){super(e),this.status=t,this.body=n}};function fe(e){if(!(e instanceof x)||e.status!==409)return null;let t=e.body,n=t?.hostKey;if(t?.code!==`host-key-unknown`||!n)return null;let r=typeof n.host==`string`&&/^[A-Za-z0-9._:[\]-]{1,253}$/.test(n.host)?n.host:null,i=typeof n.type==`string`&&/^[\w.@-]{1,64}$/.test(n.type)?n.type:null,a=typeof n.fingerprint==`string`&&/^SHA256:[A-Za-z0-9+/]{43}$/.test(n.fingerprint)?n.fingerprint:null,o=Number.isInteger(n.port)&&n.port>0&&n.port<65536?n.port:null;return r&&i&&a&&o?{host:r,port:o,type:i,fingerprint:a}:null}async function pe(e,t){let n=await fetch(`${e.replace(/\/+$/,``)}/pair`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:t})}),i=await n.json().catch(()=>null);if(!n.ok||!i?.success||typeof i.token!=`string`)throw Error(i?.message??r.t(`services.agent.httpError`,{status:n.status,statusText:n.statusText}));return i.token}async function S(e,t,n){let i;try{i=await fetch(`${h()}${e}`,{method:`POST`,headers:b(n),body:JSON.stringify(t)})}catch(e){throw Error(r.t(`services.agent.unreachable`,{url:g(),message:e instanceof Error?e.message:String(e)}))}let a=null;try{a=await i.json()}catch{a=null}if(!i.ok)throw new x(a?.message??r.t(`services.agent.httpError`,{status:i.status,statusText:i.statusText}),i.status,a);if(!a)throw Error(r.t(`services.agent.emptyResponse`));return a}async function C(e,t){let n=await S(`/connect`,e,t);return n.success&&n.connectionId&&(ue(n.connectionId,de(t)),me()),n}async function w(e,t,n){let r=performance.now(),i=await S(`/query`,{connectionId:e,sql:t,database:n},y.get(e));return i.execTime||=Math.round(performance.now()-r),i}function me(){if(typeof window>`u`)return;let e=d(`tunnelPageHide`,()=>({done:!1}));e.done||(e.done=!0,window.addEventListener(`pagehide`,()=>{for(let[e,t]of y)fetch(`${h()}/disconnect`,{method:`POST`,headers:b(t),body:JSON.stringify({connectionId:e}),keepalive:!0}).catch(()=>void 0)}))}async function he(e){try{await S(`/disconnect`,{connectionId:e},y.get(e))}finally{y.delete(e)}}async function ge(e,t){return S(`/test-connection`,e,t)}function T(e,t,n){return e.map(e=>e.id===t?n(e):e.children.length>0?{...e,children:T(e.children,t,n)}:e)}function _e(e,t){for(let n of e){if(n.id===t)return n;let e=_e(n.children,t);if(e)return e}return null}function E(e,t,n){let r=new Set(e??[]);if(n)r.add(t);else for(let e of r)(e===t||e.startsWith(`${t}/`))&&r.delete(e);return[...r]}var ve=n()(a(e=>({trees:{},selectedNodeId:{},expandedIds:{},setTree:(t,n)=>e(e=>({trees:{...e.trees,[t]:n}})),setChildren:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{expandedIds:{...e.expandedIds,[t]:E(e.expandedIds[t],n,!0)},trees:{...e.trees,[t]:T(i,n,e=>({...e,children:r,isLoading:!1,isExpanded:!0,metadata:{...e.metadata,count:r.length}}))}}:e}),setNodeMetadata:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{trees:{...e.trees,[t]:T(i,n,e=>({...e,metadata:{...e.metadata,...r}}))}}:e}),toggleExpanded:(t,n)=>e(e=>{let r=e.trees[t];if(!r)return e;let i=!_e(r,n)?.isExpanded;return{expandedIds:{...e.expandedIds,[t]:E(e.expandedIds[t],n,i)},trees:{...e.trees,[t]:T(r,n,e=>({...e,isExpanded:i}))}}}),setExpanded:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{expandedIds:{...e.expandedIds,[t]:E(e.expandedIds[t],n,r)},trees:{...e.trees,[t]:T(i,n,e=>({...e,isExpanded:r}))}}:e}),setSelected:(t,n)=>e(e=>({selectedNodeId:{...e.selectedNodeId,[t]:n}})),setLoading:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{trees:{...e.trees,[t]:T(i,n,e=>({...e,isLoading:r}))}}:e}),removeTree:t=>e(e=>{let n={...e.trees},r={...e.selectedNodeId};return delete n[t],delete r[t],{trees:n,selectedNodeId:r}})}),{name:`planche-schema`,storage:c(),partialize:e=>({selectedNodeId:e.selectedNodeId,expandedIds:e.expandedIds})})),ye=32,D=24,be=931071618,O=931071619,k=(e,t)=>(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0,xe=(e,t)=>(e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t])>>>0;function A(e,t,n,r,i=0,a=0){let o=r?k:xe;for(let r=t;r<t+n;r+=8)i=i+o(e,r)+a>>>0,a=a+o(e,r+4)+i>>>0;return[i,a]}function Se(e){if(e.byteLength<ye)return null;let t=k(e,0);if(t!==be&&t!==O)return null;let n=t===O,r=k(e,8);if(r<512||r>65536||r&r-1)return null;let i=k(e,16),a=k(e,20),[o,s]=A(e,0,24,n);if(o!==k(e,24)||s!==k(e,28))return null;let c=D+r,l=new Map,u=new Map,d=0,f=0,p=0;for(let t=ye;t+c<=e.byteLength&&!(k(e,t+8)!==i||k(e,t+12)!==a||([o,s]=A(e,t,8,n,o,s),[o,s]=A(e,t+D,r,n,o,s),o!==k(e,t+16)||s!==k(e,t+20)));t+=c){let n=k(e,t),r=k(e,t+4);if(n===0)break;if(u.set(n,e.subarray(t+D,t+c)),p++,r>0){for(let[e,t]of u)l.set(e,t);u.clear(),d=r,f+=p,p=0}}return{pageSize:r,dbSizePages:d,pages:l,committedFrames:f}}function j(e,t){let n=Se(t);if(!n||n.committedFrames===0)return{bytes:e,appliedFrames:0};let{pageSize:r,dbSizePages:i,pages:a}=n,o=Math.max(i*r,e.byteLength-e.byteLength%r),s=new Uint8Array(o);s.set(e.subarray(0,Math.min(e.byteLength,o)));for(let[e,t]of a){let n=(e-1)*r;n+r<=o&&s.set(t,n)}return{bytes:i>0?s.subarray(0,i*r):s,appliedFrames:n.committedFrames}}var Ce=`planche-file-handles`,M=`handles`;function we(){return new Promise((e,t)=>{if(typeof indexedDB>`u`){t(Error(`IndexedDB unavailable`));return}let n=indexedDB.open(Ce,1);n.onupgradeneeded=()=>n.result.createObjectStore(M),n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}function N(e,t){return we().then(n=>new Promise((r,i)=>{let a=t(n.transaction(M,e).objectStore(M));a.onsuccess=()=>r(a.result),a.onerror=()=>i(a.error)}))}var P=e=>`${e}:wal`;async function F(e,t){try{await N(`readwrite`,n=>n.put(t,e))}catch{}}async function I(e){try{return await N(`readonly`,t=>t.get(e))??null}catch{return null}}async function L(e){try{await N(`readwrite`,t=>t.delete(e))}catch{}}async function R(e,t){let n=e,r={mode:`readwrite`};try{if(n.queryPermission&&await n.queryPermission(r)===`granted`)return!0;if(t&&n.requestPermission)return await n.requestPermission(r)===`granted`}catch{}return!1}var z=e=>`dbcache-meta:${e}`,B=e=>`${e}.sqlite3`;async function Te(e){try{let t=await s.getItem(z(e));if(!t)return null;let n=JSON.parse(t),r=await o.get(B(e));return r?{bytes:new Uint8Array(r),meta:n}:null}catch{return null}}async function Ee(e,t,n){try{let r=t.slice().buffer;return await o.set(B(e),r)?(await s.setItem(z(e),JSON.stringify(n)),!0):!1}catch(e){return console.warn(`[db-cache] write failed:`,e),!1}}async function De(e,t){try{let n=await s.getItem(z(e));if(!n)return;await s.setItem(z(e),JSON.stringify({...JSON.parse(n),...t}))}catch{}}async function Oe(e){try{await o.remove(B(e)),await s.removeItem(z(e))}catch{}}var ke=`browser:`;function V(e){return typeof e==`string`&&e.startsWith(`browser:`)}var Ae=750;function je(e){let t=W.get(e);t?.profileId&&(t.flushTimer&&clearTimeout(t.flushTimer),t.flushTimer=setTimeout(()=>{t.flushTimer=null,H(e)},Ae))}async function H(e){let t=W.get(e);if(t?.profileId)try{let n=await Ze(e);await Ee(t.profileId,n,Me(t))}catch(e){console.warn(`[browser-sqlite] cache flush failed:`,e)}}function Me(e){return{name:e.source.name,lastModified:e.fileMeta.lastModified,size:e.fileMeta.size,dirty:e.dirty,cachedAt:Date.now()}}var Ne=d(`browserSqliteVisibilityListener`,()=>({installed:!1}));typeof document<`u`&&!Ne.installed&&(Ne.installed=!0,document.addEventListener(`visibilitychange`,()=>{if(document.visibilityState===`hidden`)for(let[e,t]of W)t.flushTimer&&(clearTimeout(t.flushTimer),t.flushTimer=null,H(e))}));function U(e){return e.toLowerCase().endsWith(`-wal`)}var W=d(`browserSqliteDatabases`,()=>new Map),Pe=d(`browserSqliteModule`,()=>({promise:null}));async function G(){return Pe.promise||=i(()=>import(`./dist-Roudme38.js`).then(e=>e.default()),[]),Pe.promise}function K(e){let t=W.get(e);if(!t)throw Error(`Browser connection not found: ${e}`);return t}function Fe(e){if(!(e.byteLength>=100&&e[0]===83&&e[15]===0)||e[18]!==2&&e[19]!==2)return{bytes:e,wal:!1};let t=new Uint8Array(e);return t[18]=1,t[19]=1,{bytes:t,wal:!0}}var Ie=`SQLite format 3\0`;function Le(e){if(e.byteLength===0)return null;if(e.byteLength<100)return r.t(`services.sqliteFile.tooSmall`);if(String.fromCharCode(...e.subarray(0,16))!==Ie)return r.t(`services.sqliteFile.notSqlite`);let t=e[16]<<8|e[17],n=t===1?65536:t;return n<512||n&n-1?r.t(`services.sqliteFile.badPageSize`,{size:n}):null}async function Re(e){let t=Le(e);if(t)throw Error(t);let n=await G(),i=new n.oo1.DB;if(e.byteLength===0)return i;let a=n.wasm.allocFromTypedArray(e),o=n.capi,s=o.SQLITE_DESERIALIZE_FREEONCLOSE??1,c=o.SQLITE_DESERIALIZE_RESIZEABLE??2,l=n.capi.sqlite3_deserialize(i.pointer,`main`,a,e.byteLength,e.byteLength,s|c);i.checkRc(l);try{i.exec(`SELECT count(*) FROM sqlite_master`)}catch(e){throw i.close(),Error(r.t(`services.sqliteFile.unreadable`,{message:e instanceof Error?e.message:String(e)}))}return i}async function ze(e){let t=window.showOpenFilePicker;if(t)try{let n=await t({multiple:e.multiple,types:e.sqliteOnly?[{description:r.t(`services.sqliteFile.pickerDescription`),accept:{"application/vnd.sqlite3":[`.sqlite`,`.sqlite3`,`.db`,`.db3`]}}]:void 0,excludeAcceptAllOption:!1});return Promise.all(n.map(async e=>({file:await e.getFile(),handle:e})))}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return[];throw e}return new Promise(t=>{let n=document.createElement(`input`);n.type=`file`,n.multiple=e.multiple,e.sqliteOnly&&(n.accept=`.sqlite,.sqlite3,.db,.db3,application/vnd.sqlite3`),n.onchange=()=>t(Array.from(n.files??[]).map(e=>({file:e}))),n.oncancel=()=>t([]),n.click()})}async function Be(){let e=await ze({multiple:!0,sqliteOnly:!1}),t=e.find(e=>!U(e.file.name));return t?{main:t,wal:e.find(e=>U(e.file.name)&&e.file.name.toLowerCase()===`${t.file.name.toLowerCase()}-wal`)??e.find(e=>U(e.file.name))}:null}async function Ve(){let[e]=await ze({multiple:!1,sqliteOnly:!1});return e??null}async function q(e,t,n={}){let{bytes:r,wal:i}=Fe(e),a=await Re(r),o=`${ke}${crypto.randomUUID()}`,s={...t,wal:i};return W.set(o,{db:a,source:s,rawBytes:e,profileId:n.profileId,fileMeta:n.fileMeta??{lastModified:0,size:e.byteLength},dirty:n.dirty??!1,flushTimer:null}),{connectionId:o,source:s}}async function J(e,t,n,r={}){let i=e?new Uint8Array(await e.arrayBuffer()):new Uint8Array,a=i,o=!1;n&&(a=j(i,new Uint8Array(await n.file.arrayBuffer())).bytes,o=!0);let s=await q(a,{name:e?.name??`:memory:`,handle:t,walApplied:o,walHandle:n?.handle},{profileId:r.profileId,fileMeta:{lastModified:Math.max(e?.lastModified??0,n?.file.lastModified??0),size:i.byteLength}});return W.get(s.connectionId).rawBytes=i,r.profileId&&H(s.connectionId),s}async function He(e,t,n,r){return await q(t,{name:n.name,handle:r,walApplied:!0},{profileId:e,fileMeta:{lastModified:n.lastModified,size:n.size},dirty:n.dirty})}function Ue(e,t){let n=K(e);n.source={...n.source,handle:t}}function We(e){return W.get(e)?.dirty??!1}async function Ge(e,t){let n=K(e),r=j(n.rawBytes,new Uint8Array(await t.file.arrayBuffer())),i=await q(r.bytes,{...n.source,walApplied:!0,walHandle:t.handle},{profileId:n.profileId,fileMeta:n.fileMeta});return W.get(i.connectionId).rawBytes=n.rawBytes,X(e),n.profileId&&H(i.connectionId),{...i,appliedFrames:r.appliedFrames}}function Y(e){return W.get(e)?.source??null}function Ke(e){return e&&e.trim().toLowerCase().replace(/\(.*$/,``).trim()||null}function qe(e){return e==null?`null`:typeof e==`number`?Number.isInteger(e)?`integer`:`real`:typeof e==`bigint`?`bigint`:e instanceof Uint8Array?`blob`:`text`}function Je(e){return typeof e==`bigint`?Number(e):e instanceof Uint8Array?{type:`Buffer`,data:Array.from(e)}:e}async function Ye(e,t){let{db:n}=K(e),r=await G(),i=performance.now(),a=K(e),o=Number(r.capi.sqlite3_total_changes(n.pointer)),s=n.prepare(t);try{if(s.columnCount===0){s.step();let c=Number(n.changes()),l=Number(r.capi.sqlite3_last_insert_rowid(n.pointer)),u=/^\s*(BEGIN|COMMIT|END|ROLLBACK|SAVEPOINT|RELEASE)\b/i.test(t);return(c>0||Number(r.capi.sqlite3_total_changes(n.pointer))!==o||!u)&&(a.dirty=!0,je(e)),{success:!0,fields:[],records:[],affectedRows:c,insertId:l,isResultQuery:!1,execTime:Math.round(performance.now()-i)}}let c=[];for(;s.step();)c.push(s.get([]).map(Je));let l=s.getColumnNames(),u=r.capi,d=s.pointer;return{success:!0,fields:l.map((e,t)=>{let n=Ke(u.sqlite3_column_decltype(d,t)),r=u.sqlite3_column_table_name(d,t)??``;return{name:e,orgName:u.sqlite3_column_origin_name(d,t)??e,type:n??qe(Xe(c,t)),table:r,orgTable:r,db:u.sqlite3_column_database_name(d,t)??``,maxLength:0}}),records:c,affectedRows:0,insertId:0,isResultQuery:!0,execTime:Math.round(performance.now()-i)}}finally{s.finalize()}}function Xe(e,t){for(let n of e){let e=n[t];if(e!=null)return e}return null}async function Ze(e){let{db:t}=K(e);return(await G()).capi.sqlite3_js_db_export(t.pointer)}function Qe(e){let t=W.get(e);if(!t?.source.handle)return null;let{source:n}=t;return n.wal&&!n.walApplied&&!n.walAcknowledged?r.t(`services.sqliteFile.walNotLoaded`):null}function $e(e){let t=K(e);t.source={...t.source,walAcknowledged:!0}}async function et(e){let{source:t,fileMeta:n}=e;if(!t.handle)return;let i=await t.handle.getFile();if(n.lastModified&&(i.lastModified!==n.lastModified||i.size!==n.size))throw Error(r.t(`services.sqliteFile.changedOnDisk`,{name:t.name}));if(t.walHandle)try{let e=await t.walHandle.getFile();if(e.size>0&&!t.walApplied)throw Error(r.t(`services.sqliteFile.walHasChanges`,{name:t.name}));if(e.size>0&&t.walApplied&&e.lastModified>n.lastModified)throw Error(r.t(`services.sqliteFile.walChangedOnDisk`,{name:t.name}))}catch(e){if(e instanceof Error&&!(e instanceof DOMException))throw e}}async function tt(e){let t=K(e),{source:n}=t,i=Qe(e);if(i)throw Error(i);n.handle&&await et(t);let a=await Ze(e);if(n.handle){if(!await R(n.handle,!0))throw Error(r.t(`services.sqliteFile.writeDenied`,{name:n.name}));let t=await n.handle.createWritable();await t.write(a),await t.close(),n.walHandle&&await(await n.walHandle.createWritable()).close();let i=K(e);i.dirty=!1;try{let e=await n.handle.getFile();i.fileMeta={lastModified:e.lastModified,size:e.size}}catch{i.fileMeta={lastModified:Date.now(),size:a.byteLength}}return i.profileId&&De(i.profileId,{...Me(i)}),`in-place`}let o=new Blob([a],{type:`application/vnd.sqlite3`}),s=URL.createObjectURL(o),c=document.createElement(`a`);return c.href=s,c.download=n.name===`:memory:`?`database.sqlite`:n.name,c.click(),URL.revokeObjectURL(s),`download`}function X(e){let t=W.get(e);t&&(t.flushTimer&&clearTimeout(t.flushTimer),t.db.close(),W.delete(e))}function Z(e){return W.get(e)?.profileId}async function nt(e){await L(e),await L(P(e)),await Oe(e)}async function rt(e,t){let n=await I(e);if(!n)return null;if(!await R(n,t))return`denied`;try{return{handle:n,file:await n.getFile()}}catch(t){if(t instanceof DOMException&&(t.name===`NotFoundError`||t.name===`NotAllowedError`))return await L(e),null;throw t}}async function it(e,t){let n=await I(P(e));if(!(!n||!await R(n,t)))try{return{file:await n.getFile(),handle:n}}catch{await L(P(e));return}}async function at(e,t){let n={remembered:!0,fromCache:!1,restoredUnsaved:!1,fileDetached:!1,diskChanged:!1},r=await Te(e),i=await rt(e,t.interactive),a=i&&i!==`denied`?i.handle:void 0,o=i&&i!==`denied`?i.file:null;if(r?.meta.dirty){let{connectionId:t,source:i}=await He(e,r.bytes,r.meta,a),s=o?o.lastModified!==r.meta.lastModified||o.size!==r.meta.size:!1;return{...n,connectionId:t,fileName:i.name,wal:i.wal,walApplied:i.walApplied,fromCache:!0,restoredUnsaved:!0,fileDetached:!a,diskChanged:s}}if(o&&a){let{connectionId:r,source:i}=await J(o,a,await it(e,t.interactive),{profileId:e});return{...n,connectionId:r,fileName:i.name,wal:i.wal,walApplied:i.walApplied}}if(r){let{connectionId:t,source:i}=await He(e,r.bytes,r.meta);return{...n,connectionId:t,fileName:i.name,wal:i.wal,walApplied:i.walApplied,fromCache:!0,fileDetached:!0}}if(!t.interactive)return null;let s=await Be();if(!s)return null;let{connectionId:c,source:l}=await J(s.main.file,s.main.handle,s.wal,{profileId:e});return s.main.handle?await F(e,s.main.handle):await L(e),s.wal?.handle?await F(P(e),s.wal.handle):await L(P(e)),{...n,connectionId:c,fileName:l.name,wal:l.wal,walApplied:l.walApplied,remembered:!1}}var ot=`SQLite format 3\0`;async function st(e){if(e.size===0)return!0;if(e.size<100)return!1;let t=new Uint8Array(await e.slice(0,16).arrayBuffer());return String.fromCharCode(...t)===ot}async function ct(e,t){try{let n=await I(e);return n?await n.isSameEntry(t):!1}catch{return!1}}async function lt(n){let i=n.find(e=>!U(e.file.name));if(!i)return;if(!await st(i.file))throw Error(r.t(`app.dropNotSqlite`,{name:i.file.name}));let a=n.find(e=>U(e.file.name)&&e.file.name.toLowerCase()===`${i.file.name.toLowerCase()}-wal`),o=l.getState(),s;for(let e of o.savedConnections)if(!(e.dbms!==`sqlite`||(e.transport??`browser`)!==`browser`||e.sample||e.file!==i.file.name)&&i.handle&&await ct(e.id,i.handle)){s=e;break}let c=s??{id:crypto.randomUUID(),hostName:i.file.name.replace(/\.(db|sqlite|sqlite3|db3)$/i,``),host:``,user:``,pass:``,charset:`utf8`,port:0,dbms:`sqlite`,transport:`browser`,file:i.file.name,autoConnection:!1,savePassword:!0,authToken:``};e(`sqlite_file_drop`,{reused:!!s,wal:!!a,handle:!!i.handle});let d=o.activeConnections.some(e=>e.id===c.id),f=o.activeConnections.find(e=>e.id===c.id)?.serverConnectionId,{connectionId:p}=await J(i.file,i.handle,a,{profileId:c.id});f&&f!==p&&V(f)&&X(f),i.handle?await F(c.id,i.handle):await L(c.id),a?.handle?await F(P(c.id),a.handle):await L(P(c.id)),s||o.addSavedConnection(c),o.openConnection({...c,serverConnectionId:p}),o.setPendingReopen(c.id,!1),o.setFileDetached(c.id,!1),d?ve.getState().removeTree(c.id):u.getState().addQueryTab(c.id,{id:`tab-${Date.now()}`,title:r.t(`connection.dialog.firstQueryTab`),query:``,database:``,isExecuting:!1,results:[],error:null,executionTime:null}),t.getState().setWelcomeVisible(!1)}async function ut(e,t){let n=await rt(e,!0);return!n||n===`denied`?!1:(Ue(t,n.handle),!0)}async function dt(e){let t=Z(e),n=Y(e);return n&&!n.handle&&t&&await ut(t,e),tt(e)}function ft(e){let t=Y(e);return t?t.name===`:memory:`?r.t(`services.save.inMemory`):typeof window<`u`&&!(`showOpenFilePicker`in window)?r.t(`services.save.noFileSystemAccess`):!t.handle&&!Z(e)?r.t(`services.save.noWritableHandle`):null:r.t(`services.save.notBrowserSqlite`)}async function pt(e,t){let n=await Ve();if(!n)return null;let r=await Ge(t,n);return n.handle&&await F(P(e),n.handle),{connectionId:r.connectionId,appliedFrames:r.appliedFrames}}function mt(e){if(!V(e))return null;let t=Y(e);return t?{wal:t.wal,walApplied:t.walApplied,walAcknowledged:t.walAcknowledged??!1}:null}function ht(e){return e.dbms===`sqlite`&&e.transport===`browser`?`browser`:`tunnel`}async function gt(e,t){return C(e,t)}async function _t(e,t){return ge(e,t)}async function vt(e,t,n){let r=e=>({success:!1,fields:[],records:[],affectedRows:0,insertId:0,isResultQuery:!1,execTime:0,message:e instanceof Error?e.message:String(e)});if(V(e))try{return await Ye(e,t)}catch(e){return r(e)}let i=Q.get(e)??e;try{return await w(i,t,n)}catch(e){if(!(e instanceof x)||e.status!==404)return r(e);let a=await yt(i);if(!a)return r(e);try{return await w(a,t,n)}catch(e){return r(e)}}}var Q=new Map,$=new Map;function yt(e){let n=$.get(e);if(n)return n;let i=(async()=>{let n=l.getState(),i=n.activeConnections.find(t=>t.serverConnectionId===e||Q.get(t.serverConnectionId??``)===e);if(!i||ht(i)===`browser`||se())return null;if(i.serverConnectionId&&i.serverConnectionId!==e&&!Q.has(i.serverConnectionId))return Q.set(e,i.serverConnectionId),i.serverConnectionId;let a=n.resolveCredentials(i),o=a.ssh?.enabled&&a.ssh.auth===`password`&&!a.ssh.password;if(!a.pass&&i.pass===``&&i.dbms!==`sqlite`||o)return null;try{let n=await C(v(a),a.authToken||void 0);if(!n.success||!n.connectionId)return null;for(let[t,r]of Q)r===e&&Q.set(t,n.connectionId);return Q.set(e,n.connectionId),l.getState().updateServerConnectionId(i.id,n.connectionId),l.getState().setTransactionOpen(i.id,!1),t.getState().setFooterMessage(r.t(`services.agent.reconnected`,{name:i.hostName||i.host||i.databaseId||i.file||i.id})),n.connectionId}catch{return null}})();return $.set(e,i),i.finally(()=>$.delete(e)),i}async function bt(e){if(V(e)){let t=Z(e);X(e),t&&await Oe(t);return}return he(e)}function xt(e){return async(t,n)=>{let i=await vt(e,t,n);if(!i.success)throw Error(i.message??r.t(`services.query.failed`));return i}}export{ee as A,ne as C,pe as D,oe as E,d as M,v as O,ce as S,fe as T,V as _,bt as a,ve as b,mt as c,lt as d,ut as f,Qe as g,$e as h,ft as i,p as j,f as k,ht as l,_t as m,gt as n,vt as o,dt as p,xt as r,nt as s,at as t,pt as u,We as v,le as w,se as x,J as y};