planche 0.7.16 → 0.7.18

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 (72) hide show
  1. package/app/assets/{AboutDialog-CnvspLjT.js → AboutDialog-BaQAZjtT.js} +1 -1
  2. package/app/assets/ConnectDialog-BmJvDi1P.js +1 -0
  3. package/app/assets/{CopyDatabaseDialog-DoyT3Cud.js → CopyDatabaseDialog-BEM-56Og.js} +1 -1
  4. package/app/assets/{CopyTableDialog-CE32sy8Y.js → CopyTableDialog-C2r7l2Ck.js} +1 -1
  5. package/app/assets/{CreateDatabaseDialog-g7Ex6Ira.js → CreateDatabaseDialog-CZhIpgiO.js} +1 -1
  6. package/app/assets/{CreateSchemaDialog-CS_3p1YF.js → CreateSchemaDialog-CNq4nZum.js} +1 -1
  7. package/app/assets/{DataDiffDialog-eK_rqQqW.js → DataDiffDialog-mUg2rIWn.js} +1 -1
  8. package/app/assets/{DownloadToCSVDialog-BZMBDq9a.js → DownloadToCSVDialog-BC6Sq8Ce.js} +1 -1
  9. package/app/assets/{EditSchemaDialog-TPU9HsbU.js → EditSchemaDialog-B0dCI4Lb.js} +1 -1
  10. package/app/assets/FindReplaceDialog-DXJp2TN6.js +1 -0
  11. package/app/assets/{FlushDialog-SyF5aOC9.js → FlushDialog-BX0F3dJQ.js} +1 -1
  12. package/app/assets/GroupByDialog-BQPTetJF.js +1 -0
  13. package/app/assets/{LinkColumnDialog-CroawG1F.js → LinkColumnDialog-BEuhj8o8.js} +1 -1
  14. package/app/assets/LocalHistoryDialog-BGF91HKS.js +1 -0
  15. package/app/assets/ProcessListDialog-VezdyrHo.js +1 -0
  16. package/app/assets/QuickCommandPalette-BseiwcpU.js +1 -0
  17. package/app/assets/{RowFormDialog-DICM-X2S.js → RowFormDialog-XRuG3rMt.js} +2 -2
  18. package/app/assets/{SafetySettingsDialog-dM0fuFsY.js → SafetySettingsDialog-Zh_a4nml.js} +1 -1
  19. package/app/assets/{SchemaDiffDialog-CKV8hg4W.js → SchemaDiffDialog-BrnruiVP.js} +1 -1
  20. package/app/assets/{SchemaToHTMLDialog-2rZVoLkj.js → SchemaToHTMLDialog-DjZQwEbM.js} +1 -1
  21. package/app/assets/{StatusDialog-DDSLt40C.js → StatusDialog-a7NhoFvt.js} +1 -1
  22. package/app/assets/TermsDialog-B53To0oi.js +1 -0
  23. package/app/assets/{UserAddDialog-1faiXqe2.js → UserAddDialog-BBYoKeBv.js} +1 -1
  24. package/app/assets/{UserManagerDialog-BFTsCX59.js → UserManagerDialog-BPC_IoO6.js} +1 -1
  25. package/app/assets/{VariablesDialog-DjvvwrfV.js → VariablesDialog-CzHDGRpy.js} +1 -1
  26. package/app/assets/connection-store-N-ZwIkVg.js +1 -0
  27. package/app/assets/database-CpQt6YGv.js +1 -0
  28. package/app/assets/{dbms-B9Zk7nEm.js → dbms-BwnatOMe.js} +68 -65
  29. package/app/assets/de-Ci_btQN-.js +2 -0
  30. package/app/assets/dist-BAFbxkKh.js +1 -0
  31. package/app/assets/{editor-registry-C_yarsyY.js → editor-registry-DhF4Rf_I.js} +1 -1
  32. package/app/assets/{engine-C2ZJalx5.js → engine-CpwlM_Ww.js} +1 -1
  33. package/app/assets/fr-rLx93rAO.js +2 -0
  34. package/app/assets/hmr-singleton-DWC1xbJ4.js +1 -0
  35. package/app/assets/i18n-57fo5jb0.js +2 -0
  36. package/app/assets/ja-DkiQpTGb.js +2 -0
  37. package/app/assets/ko-DHI7mstP.js +2 -0
  38. package/app/assets/{main-DLYTmffu.js → main-BLydvBDF.js} +154 -154
  39. package/app/assets/main-DX7Tr5cg.css +2 -0
  40. package/app/assets/pro-usage-VxPxjJqt.js +1 -0
  41. package/app/assets/{query-execution-DMUlIoF2.js → query-execution-4-JHu9gp.js} +3 -3
  42. package/app/assets/{schema-nodes-XgnUaB2x.js → schema-nodes-MgIiKfpG.js} +1 -1
  43. package/app/assets/select-ibmUj7AE.js +1 -0
  44. package/app/assets/settings-store-WUA0-UcP.js +1 -0
  45. package/app/assets/{table-copy-6G1mhU8O.js → table-copy-C1ivtmj8.js} +1 -1
  46. package/app/assets/use-engine-B9GBHTL_.js +1 -0
  47. package/app/assets/zh-mgKu2Zwj.js +2 -0
  48. package/app/index.html +17 -17
  49. package/dist/index.js +68 -9
  50. package/package.json +1 -1
  51. package/app/assets/ConnectDialog-dYIs3EdM.js +0 -1
  52. package/app/assets/FindReplaceDialog-DQwlbxSb.js +0 -1
  53. package/app/assets/LocalHistoryDialog-D0hZ8QS5.js +0 -1
  54. package/app/assets/ProcessListDialog-BRAf5TE2.js +0 -1
  55. package/app/assets/QuickCommandPalette-Dh1fsO1J.js +0 -1
  56. package/app/assets/TermsDialog-BzlyiBiw.js +0 -1
  57. package/app/assets/app-storage-C_1RLCyI.js +0 -1
  58. package/app/assets/connection-store-DjSajhjh.js +0 -1
  59. package/app/assets/database-_lr1w6xK.js +0 -1
  60. package/app/assets/de-DNOmZt4L.js +0 -2
  61. package/app/assets/fr-Bs9HybVR.js +0 -2
  62. package/app/assets/hmr-singleton-Bit0Kfog.js +0 -1
  63. package/app/assets/i18n-XcmivDWI.js +0 -2
  64. package/app/assets/ja-DLbyFRJv.js +0 -2
  65. package/app/assets/ko-BOX3JDDY.js +0 -2
  66. package/app/assets/main-CKq8IRiX.css +0 -2
  67. package/app/assets/pro-usage-Die_FxwH.js +0 -1
  68. package/app/assets/query-store-Bz1pmp4E.js +0 -1
  69. package/app/assets/select-BMtc6vRo.js +0 -1
  70. package/app/assets/settings-store-CSRx4hwh.js +0 -1
  71. package/app/assets/use-engine-C_C2qpfD.js +0 -1
  72. package/app/assets/zh-Bc_dasqF.js +0 -2
@@ -1,2 +1,2 @@
1
- import{h as e,n as t,t as n,v as r}from"./ui-store-DfspmPOn.js";import{f as i,h as a,lt as o,m as s,mt as c,p as l,pt as u,st as d,vt as f}from"./main-DLYTmffu.js";import{a as p,l as m,m as h,t as g}from"./button--s6nUzD8.js";import{t as _}from"./connection-store-DjSajhjh.js";import{n as v}from"./settings-store-CSRx4hwh.js";import{a as y}from"./database-_lr1w6xK.js";import{c as b,t as x}from"./query-execution-DMUlIoF2.js";import{n as S}from"./use-engine-C_C2qpfD.js";import{a as C,i as w,n as T,o as E,r as D,t as ee}from"./dialog-CJoWJzRo.js";var O=p(`wand-sparkles`,[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`,key:`ul74o6`}],[`path`,{d:`m14 7 3 3`,key:`1r5n42`}],[`path`,{d:`M5 6v4`,key:`ilb8ba`}],[`path`,{d:`M19 14v4`,key:`blhpug`}],[`path`,{d:`M10 2v2`,key:`7u0qdc`}],[`path`,{d:`M7 8H3`,key:`zfb6yr`}],[`path`,{d:`M21 16h-4`,key:`1cnmox`}],[`path`,{d:`M11 3H9`,key:`1obp7u`}]]),k=r(e(),1);function A(e){let t=e.slice(e.indexOf(`(`)+1,e.lastIndexOf(`)`)),n=[],r=/'((?:[^']|'')*)'/g,i;for(;i=r.exec(t);)n.push(i[1].replaceAll(`''`,`'`));return n}function j(e,t={}){let{oracleDate:n=!1}=t,r=e.type.trim(),i=r.toLowerCase(),a=/\bunsigned\b/.test(i);if(/^enum\(/.test(i))return{kind:`enum`,options:A(r)};if(/^set\(/.test(i))return{kind:`set`,options:A(r)};if(/^(tinyint\(1\)|bool|boolean|bit\(1\)|bit)(?![\w(])/.test(i))return{kind:`boolean`};let o=/^number(?:\((\d+|\*)(?:,\s*(-?\d+))?\))?$/.exec(i);if(o)return o[2]&&Number(o[2])>0?{kind:`decimal`}:o[1]?{kind:`integer`}:{kind:`decimal`};if(/^(tinyint|smallint|mediumint|int|integer|bigint|int2|int4|int8|serial|bigserial|smallserial)\b/.test(i))return{kind:`integer`,unsigned:a};if(/^(decimal|numeric|float|double|real|money|float4|float8|double precision)\b/.test(i))return{kind:`decimal`,unsigned:a};if(/^(datetime2|datetime|timestamp|smalldatetime|datetimeoffset)\b/.test(i))return{kind:`datetime`};if(/^date\b/.test(i))return{kind:n?`datetime`:`date`};if(/^(time|timetz)\b/.test(i))return{kind:`time`};if(/^(json|jsonb)\b/.test(i))return{kind:`json`};if(/^(uuid|uniqueidentifier)\b/.test(i))return{kind:`uuid`};if(/^(blob|tinyblob|mediumblob|longblob|binary|varbinary|bytea|raw|image|bfile)\b/.test(i))return{kind:`binary`};if(/^(text|ntext|tinytext|mediumtext|longtext|clob|nclob|long)\b/.test(i)||/^n?(?:var)?char2?\(max\)/.test(i))return{kind:`text`};let s=/^n?(?:var)?char2?(?:acter)?(?:\s+varying)?\((\d+)(?:\s+(?:char|byte))?\)/.exec(i);return s?{kind:`string`,maxLength:Number(s[1])}:{kind:`string`}}var M=/auto_increment|identity|generated/i;function N(e){return M.test(e.extra)||/^(serial|bigserial|smallserial)\b/i.test(e.type)?{mode:`auto`,text:``}:e.defaultValue===null?e.nullable?{mode:`null`,text:``}:{mode:`value`,text:``}:{mode:`default`,text:``}}function P(e){return e==null?{mode:`keep`,text:``}:{mode:`keep`,text:F(e)}}function F(e){if(e==null)return``;if(typeof e==`object`){if(ArrayBuffer.isView(e))return``;if(e instanceof Date)return e.toISOString();try{return JSON.stringify(e,null,2)}catch{return String(e)}}return String(e)}function I(e,t){let n=t.trim();switch(e.kind){case`integer`:{if(!/^[+-]?\d+$/.test(n))return{error:`integer`};if(e.unsigned&&n.startsWith(`-`))return{error:`unsigned`};let t=Number(n);return{value:Number.isSafeInteger(t)?t:BigInt(n)}}case`decimal`:return n===``||Number.isNaN(Number(n))?{error:`number`}:{value:Number(n)};case`boolean`:return{value:n===`true`||n===`1`};case`json`:try{return{value:JSON.parse(n===``?`null`:n)}}catch{return{error:`json`}}case`set`:return{value:n};case`date`:return n&&!/^\d{4}-\d{2}-\d{2}$/.test(n)?{error:`date`}:{value:n};case`datetime`:return n&&!/^\d{4}-\d{2}-\d{2}([ T]\d{2}:\d{2}(:\d{2}(\.\d+)?)?)?([+-]\d{2}:?\d{2}|Z)?$/.test(n)?{error:`datetime`}:{value:n};case`time`:return n&&!/^-?\d{1,3}:\d{2}(:\d{2}(\.\d+)?)?$/.test(n)?{error:`time`}:{value:n};default:return{value:t}}}var L=m(),R={integer:`result.rowForm.invalid.integer`,unsigned:`result.rowForm.invalid.unsigned`,number:`result.rowForm.invalid.number`,json:`result.rowForm.invalid.json`,date:`result.rowForm.invalid.date`,datetime:`result.rowForm.invalid.datetime`,time:`result.rowForm.invalid.time`};function z(e){return String(e).padStart(2,`0`)}function B(e){let t=new Date,n=`${t.getFullYear()}-${z(t.getMonth()+1)}-${z(t.getDate())}`,r=`${z(t.getHours())}:${z(t.getMinutes())}:${z(t.getSeconds())}`;return e===`date`?n:e===`time`?r:`${n} ${r}`}function V(e){let t=/^(\d{4})-(\d{2})-(\d{2})/.exec(e.trim());if(!t)return;let n=new Date(Number(t[1]),Number(t[2])-1,Number(t[3]));return Number.isNaN(n.getTime())?void 0:n}function H({spec:e,state:t,disabled:n,onText:r}){let{t:o}=h(),c=`w-full rounded border bg-background px-2 py-1 text-sm font-mono outline-none focus:ring-1 focus:ring-primary disabled:opacity-50`;switch(e.kind){case`boolean`:return(0,L.jsxs)(`select`,{className:c,value:t.text===`true`||t.text===`1`?`true`:`false`,onChange:e=>r(e.target.value),disabled:n,children:[(0,L.jsx)(`option`,{value:`true`,children:`TRUE`}),(0,L.jsx)(`option`,{value:`false`,children:`FALSE`})]});case`enum`:return(0,L.jsxs)(`select`,{className:c,value:t.text,onChange:e=>r(e.target.value),disabled:n,children:[!e.options?.includes(t.text)&&(0,L.jsx)(`option`,{value:t.text,children:t.text||`—`}),e.options?.map(e=>(0,L.jsx)(`option`,{value:e,children:e},e))]});case`set`:{let i=new Set(t.text.split(`,`).map(e=>e.trim()).filter(Boolean));return(0,L.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1 rounded border bg-background px-2 py-1.5`,children:e.options?.map(t=>(0,L.jsxs)(`label`,{className:`flex items-center gap-1 text-xs font-mono`,children:[(0,L.jsx)(`input`,{type:`checkbox`,className:`accent-primary`,checked:i.has(t),disabled:n,onChange:n=>{let a=new Set(i);n.target.checked?a.add(t):a.delete(t),r(e.options.filter(e=>a.has(e)).join(`,`))}}),t]},t))})}case`integer`:case`decimal`:return(0,L.jsx)(`input`,{className:`${c} tabular-nums`,inputMode:`decimal`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:e.kind===`integer`?`0`:`0.00`});case`date`:case`datetime`:{let[d,p]=t.text.trim().split(/[ T]/);return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${c} flex-1`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:e.kind===`date`?`YYYY-MM-DD`:`YYYY-MM-DD HH:MM:SS`}),(0,L.jsxs)(l,{children:[(0,L.jsx)(a,{asChild:!0,children:(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background p-1.5 text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,title:o(`result.rowForm.pickDate`),children:(0,L.jsx)(f,{className:`size-3.5`})})}),(0,L.jsx)(s,{className:`w-auto p-0`,align:`end`,children:(0,L.jsx)(i,{mode:`single`,selected:V(d??``),defaultMonth:V(d??``),onSelect:t=>{if(!t)return;let n=`${t.getFullYear()}-${z(t.getMonth()+1)}-${z(t.getDate())}`;r(e.kind===`date`?n:`${n} ${p||`00:00:00`}`)}})})]}),(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background px-1.5 py-1 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,onClick:()=>r(B(e.kind)),title:o(`result.rowForm.now`),children:(0,L.jsx)(u,{className:`size-3.5`})})]})}case`time`:return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${c} flex-1`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:`HH:MM:SS`}),(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background px-1.5 py-1 text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,onClick:()=>r(B(`time`)),title:o(`result.rowForm.now`),children:(0,L.jsx)(u,{className:`size-3.5`})})]});case`json`:{let e=!0;try{t.text.trim()&&JSON.parse(t.text)}catch{e=!1}return(0,L.jsxs)(`div`,{className:`space-y-1`,children:[(0,L.jsx)(`textarea`,{className:`${c} min-h-[96px] resize-y text-xs ${e?``:`border-destructive`}`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1,placeholder:`{}`}),(0,L.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,L.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 rounded border bg-background px-1.5 py-0.5 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n||!e||!t.text.trim(),onClick:()=>{try{r(JSON.stringify(JSON.parse(t.text),null,2))}catch{}},children:[(0,L.jsx)(O,{className:`size-3`}),o(`result.rowForm.formatJson`)]}),!e&&(0,L.jsx)(`span`,{className:`text-[10px] text-destructive`,children:o(`result.rowForm.invalid.json`)})]})]})}case`text`:return(0,L.jsx)(`textarea`,{className:`${c} min-h-[72px] resize-y`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1});case`binary`:return(0,L.jsx)(`div`,{className:`rounded border bg-muted/40 px-2 py-1 text-xs italic text-muted-foreground`,children:o(`result.rowForm.binaryUnsupported`)});case`uuid`:return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${c} flex-1`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:`00000000-0000-0000-0000-000000000000`}),(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background px-1.5 py-1 text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,onClick:()=>r(crypto.randomUUID()),title:o(`result.rowForm.generateUuid`),children:(0,L.jsx)(O,{className:`size-3.5`})})]});default:{let i=t.text.length>80||t.text.includes(`
2
- `);return(0,L.jsxs)(`div`,{className:`space-y-0.5`,children:[i?(0,L.jsx)(`textarea`,{className:`${c} min-h-[56px] resize-y`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1}):(0,L.jsx)(`input`,{className:c,value:t.text,onChange:e=>r(e.target.value),disabled:n,maxLength:e.maxLength}),e.maxLength&&(0,L.jsxs)(`div`,{className:`text-right text-[10px] tabular-nums ${t.text.length>e.maxLength?`text-destructive`:`text-muted-foreground`}`,children:[t.text.length,`/`,e.maxLength]})]})}}}function U(){let{t:e}=h(),r=n(`row-form`),i=t(e=>e.closeDialog),a=t(e=>e.setFooterMessage),s=S(r?.connectionId??``),l=_(e=>r?e.transactionOpen[r.connectionId]:!1),[u,f]=(0,k.useState)(null),[p,m]=(0,k.useState)(null),[O,A]=(0,k.useState)({}),[M,F]=(0,k.useState)({}),[z,B]=(0,k.useState)(null),[V,U]=(0,k.useState)(!1),W=r?.mode===`edit`;(0,k.useEffect)(()=>{if(!r)return;let e=!1,t=y(r.serverConnectionId);return s.introspect.listColumns(t,r.database,r.table).then(t=>{if(e)return;f(t);let n={};for(let e of t)if(r.mode===`edit`){let t=r.fields.find(t=>t.orgName===e.name);n[e.name]=P(t?r.row?.[t.name]:void 0)}else n[e.name]=N(e);A(n)}).catch(t=>{e||m(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[r?.serverConnectionId,r?.database,r?.table,r?.mode]);let G=(0,k.useMemo)(()=>new Map((u??[]).map(e=>[e.name,j(e,{oracleDate:s.id===`oracle`})])),[u,s.id]),K=(0,k.useCallback)((e,t)=>{A(n=>({...n,[e]:{...n[e],mode:t}})),F(t=>{let n={...t};return delete n[e],n})},[]),q=(0,k.useCallback)((e,t)=>{A(n=>({...n,[e]:{mode:`value`,text:t}})),F(t=>{let n={...t};return delete n[e],n})},[]),J=(0,k.useMemo)(()=>({__default:!0}),[]),Y=(0,k.useCallback)(()=>{if(!u)return null;let t=new Map,n={};for(let r of u){let i=O[r.name],a=G.get(r.name);if(!i||i.mode===`auto`||i.mode===`keep`)continue;if(i.mode===`null`){t.set(r.name,null);continue}if(i.mode==="default"){t.set(r.name,J);continue}let o=I(a,i.text);if(`error`in o){n[r.name]=e(R[o.error]??`result.rowForm.invalid.number`);continue}if(a.maxLength&&typeof o.value==`string`&&o.value.length>a.maxLength){n[r.name]=e(`result.rowForm.invalid.length`,{max:a.maxLength});continue}t.set(r.name,o.value)}return F(n),Object.keys(n).length>0?null:{values:t}},[u,O,G,e,J]),X=(0,k.useCallback)(e=>{if(!r)return null;let t=e=>e===J?`DEFAULT`:s.quoteLiteral(e);if(r.mode===`insert`){let n=[...e];return n.length===0?s.getQuery(`INSERT_DEFAULT_VALUES`,r.database,r.table):s.getQuery(`INSERT_TABLE`,r.database,r.table,n.map(([e])=>s.quoteIdentifier(e)).join(`, `),n.map(([,e])=>t(e)).join(`, `))}return!r.where||e.size===0?null:s.getQuery(`UPDATE_TABLE`,r.database,r.table,[...e].map(([e,n])=>`${s.quoteIdentifier(e)} = ${t(n)}`).join(`, `),r.where)},[r,s,J]),Z=(0,k.useMemo)(()=>{if(!u)return``;let e=new Map;for(let t of u){let n=O[t.name];if(!(!n||n.mode===`auto`||n.mode===`keep`)){if(n.mode===`null`)e.set(t.name,null);else if(n.mode==="default")e.set(t.name,J);else{let r=I(G.get(t.name),n.text);e.set(t.name,`error`in r?n.text:r.value)}}}return X(e)??``},[u,O,G,X,J]),Q=e=>{let t={};for(let[n,i]of e){if(i===J)continue;let e=r?.fields.find(e=>e.orgName===n);t[e?.name??n]=typeof i==`bigint`?i.toString():i}return t},te=()=>{let e=Y();!e||!r||(r.onStage?.(r.mode,Q(e.values)),i())},ne=async()=>{let n=Y();if(!n||!r)return;let o=X(n.values);if(!o){B(e(`result.rowForm.nothingToWrite`));return}U(!0),B(null);try{if(v.getState().previewGridCommit&&!await t.getState().requestDestructiveConfirm({title:e(W?`result.rowForm.confirmUpdateTitle`:`result.rowForm.confirmInsertTitle`,{table:`${r.database}.${r.table}`}),statements:[o],confirmLabel:e(W?`result.rowForm.update`:`result.rowForm.insert`)}))return;await b(r.connectionId,o,{database:r.database,skipDestructiveConfirm:!0}),a(e(W?`result.rowForm.updated`:`result.rowForm.inserted`,{table:`${r.database}.${r.table}`})),r.onCommitted?.(r.mode,Q(n.values)),i()}catch(e){if(e instanceof x)return;B(e instanceof Error?e.message:String(e))}finally{U(!1)}};if(!r)return null;let $=(e,t,n,r)=>(0,L.jsx)(`button`,{type:`button`,className:`rounded px-1.5 py-0.5 text-[10px] font-medium ${r===t?`bg-primary text-primary-foreground`:`text-muted-foreground hover:bg-muted hover:text-foreground`}`,onClick:()=>K(e,t),children:n});return(0,L.jsx)(ee,{open:!0,onOpenChange:e=>{e||i()},children:(0,L.jsxs)(T,{className:`flex max-h-[90vh] flex-col sm:max-w-[860px]`,children:[(0,L.jsxs)(C,{children:[(0,L.jsx)(E,{children:e(W?`result.rowForm.editTitle`:`result.rowForm.insertTitle`)}),(0,L.jsxs)(D,{className:`font-mono text-xs`,children:[r.database,`.`,r.table]})]}),(0,L.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto rounded-md border`,children:[p&&(0,L.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:p}),!u&&!p&&(0,L.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground`,children:[(0,L.jsx)(d,{className:`size-4 animate-spin`}),e(`result.rowForm.loading`)]}),u&&(0,L.jsxs)(`table`,{className:`w-full border-separate border-spacing-0 text-sm`,children:[(0,L.jsx)(`thead`,{className:`sticky top-0 z-10 bg-background`,children:(0,L.jsxs)(`tr`,{className:`text-left text-[10px] uppercase tracking-wide text-muted-foreground`,children:[(0,L.jsx)(`th`,{className:`w-[38%] border-b px-2 py-1.5 font-medium`,children:e(`result.rowForm.colColumn`)}),(0,L.jsx)(`th`,{className:`border-b px-2 py-1.5 font-medium`,children:e(`result.rowForm.colValue`)})]})}),(0,L.jsx)(`tbody`,{children:u.map(t=>{let n=O[t.name]??{mode:`value`,text:``},i=G.get(t.name),a=n.mode===`auto`,s=M[t.name],l=t.key===`PRI`,u=r.fields.find(e=>e.orgName===t.name),d=!!u&&!!r.row&&r.row[u.name]===null;return(0,L.jsxs)(`tr`,{className:`align-top ${s?`bg-destructive/5`:`hover:bg-muted/30`}`,children:[(0,L.jsxs)(`td`,{className:`border-b border-border/60 px-2 py-2`,children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,L.jsx)(`span`,{className:`truncate font-mono text-sm font-medium`,title:t.name,children:t.name}),l&&(0,L.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5 rounded border border-catppuccin-yellow/50 px-1 text-[9px] font-semibold text-catppuccin-yellow`,children:[(0,L.jsx)(o,{className:`size-2.5`}),`PK`]})]}),(0,L.jsxs)(`div`,{className:`mt-0.5 flex flex-wrap items-center gap-x-1.5 gap-y-0.5 text-[10px] text-muted-foreground`,children:[(0,L.jsx)(`span`,{className:`rounded bg-muted px-1 py-px font-mono`,children:t.type}),!t.nullable&&(0,L.jsx)(`span`,{children:`NOT NULL`}),t.defaultValue!==null&&(0,L.jsxs)(`span`,{className:`font-mono`,title:e(`result.rowForm.defaultValue`),children:[`= `,t.defaultValue]}),t.extra&&(0,L.jsx)(`span`,{children:t.extra})]}),t.comment&&(0,L.jsx)(`div`,{className:`mt-0.5 text-[10px] text-muted-foreground/80`,children:t.comment})]}),(0,L.jsx)(`td`,{className:`border-b border-border/60 px-2 py-2`,children:(0,L.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,L.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[n.mode===`keep`?(0,L.jsx)(`div`,{className:`cursor-text truncate rounded border border-dashed bg-muted/30 px-2 py-1 font-mono text-xs text-muted-foreground`,onClick:()=>K(t.name,`value`),title:e(`result.rowForm.clickToChange`),children:d?(0,L.jsx)(`span`,{className:`italic`,children:`NULL`}):n.text||(0,L.jsx)(`span`,{className:`italic`,children:e(`result.rowForm.empty`)})}):n.mode===`value`?(0,L.jsx)(H,{spec:i,state:n,disabled:!1,onText:e=>q(t.name,e)}):(0,L.jsx)(`div`,{className:`rounded border border-dashed bg-muted/30 px-2 py-1 font-mono text-xs italic text-muted-foreground`,children:n.mode===`null`?`NULL`:n.mode==="default"?`DEFAULT (${t.defaultValue??``})`:e(`result.rowForm.autoHint`)}),s&&(0,L.jsxs)(`div`,{className:`mt-1 flex items-center gap-1 text-[11px] text-destructive`,children:[(0,L.jsx)(c,{className:`size-3`}),s]})]}),(0,L.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 rounded border bg-background p-0.5`,children:[W&&$(t.name,`keep`,e(`result.rowForm.mode.keep`),n.mode),(a||!W&&/auto_increment|identity/i.test(t.extra))&&$(t.name,`auto`,e(`result.rowForm.mode.auto`),n.mode),$(t.name,`value`,e(`result.rowForm.mode.value`),n.mode),t.nullable&&$(t.name,`null`,`NULL`,n.mode),t.defaultValue!==null&&$(t.name,`default`,`DEFAULT`,n.mode)]})]})})]},t.name)})})]})]}),u&&(0,L.jsxs)(`div`,{className:`shrink-0 rounded-md border bg-muted/30`,children:[(0,L.jsx)(`div`,{className:`border-b px-3 py-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground`,children:e(`result.rowForm.preview`)}),(0,L.jsx)(`pre`,{className:`max-h-24 overflow-auto whitespace-pre-wrap break-words px-3 py-2 font-mono text-xs`,children:Z||(0,L.jsx)(`span`,{className:`italic text-muted-foreground`,children:e(`result.rowForm.nothingToWrite`)})})]}),z&&(0,L.jsx)(`div`,{className:`shrink-0 rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:z}),(0,L.jsxs)(w,{className:`items-center`,children:[l&&(0,L.jsx)(`span`,{className:`mr-auto text-[11px] text-catppuccin-yellow`,children:e(`result.rowForm.inTransaction`)}),(0,L.jsx)(g,{variant:`outline`,onClick:()=>i(),disabled:V,children:e(`command.close`)}),r.onStage&&(0,L.jsx)(g,{variant:`outline`,onClick:te,disabled:V||!u,title:e(`result.rowForm.stageHint`),children:e(W?`result.rowForm.stageEdit`:`result.rowForm.stageInsert`)}),(0,L.jsxs)(g,{onClick:()=>void ne(),disabled:V||!u,children:[V&&(0,L.jsx)(d,{className:`mr-1 size-3.5 animate-spin`}),e(W?`result.rowForm.update`:`result.rowForm.insert`)]})]})]})})}export{U as RowFormDialog};
1
+ import{h as e,n as t,t as n,v as r}from"./ui-store-DfspmPOn.js";import{bt as i,dt as a,f as o,gt as s,h as c,ht as l,lt as u,m as d,p as f}from"./main-BLydvBDF.js";import{a as p,l as m,m as h,t as g}from"./button--s6nUzD8.js";import{n as _}from"./settings-store-WUA0-UcP.js";import{t as v}from"./connection-store-N-ZwIkVg.js";import{a as y}from"./database-CpQt6YGv.js";import{c as b,t as x}from"./query-execution-4-JHu9gp.js";import{n as S}from"./use-engine-B9GBHTL_.js";import{a as C,i as w,n as T,o as E,r as D,t as ee}from"./dialog-CJoWJzRo.js";var O=p(`wand-sparkles`,[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`,key:`ul74o6`}],[`path`,{d:`m14 7 3 3`,key:`1r5n42`}],[`path`,{d:`M5 6v4`,key:`ilb8ba`}],[`path`,{d:`M19 14v4`,key:`blhpug`}],[`path`,{d:`M10 2v2`,key:`7u0qdc`}],[`path`,{d:`M7 8H3`,key:`zfb6yr`}],[`path`,{d:`M21 16h-4`,key:`1cnmox`}],[`path`,{d:`M11 3H9`,key:`1obp7u`}]]),k=r(e(),1);function A(e){let t=e.slice(e.indexOf(`(`)+1,e.lastIndexOf(`)`)),n=[],r=/'((?:[^']|'')*)'/g,i;for(;i=r.exec(t);)n.push(i[1].replaceAll(`''`,`'`));return n}function j(e,t={}){let{oracleDate:n=!1}=t,r=e.type.trim(),i=r.toLowerCase(),a=/\bunsigned\b/.test(i);if(/^enum\(/.test(i))return{kind:`enum`,options:A(r)};if(/^set\(/.test(i))return{kind:`set`,options:A(r)};if(/^(tinyint\(1\)|bool|boolean|bit\(1\)|bit)(?![\w(])/.test(i))return{kind:`boolean`};let o=/^number(?:\((\d+|\*)(?:,\s*(-?\d+))?\))?$/.exec(i);if(o)return o[2]&&Number(o[2])>0?{kind:`decimal`}:o[1]?{kind:`integer`}:{kind:`decimal`};if(/^(tinyint|smallint|mediumint|int|integer|bigint|int2|int4|int8|serial|bigserial|smallserial)\b/.test(i))return{kind:`integer`,unsigned:a};if(/^(decimal|numeric|float|double|real|money|float4|float8|double precision)\b/.test(i))return{kind:`decimal`,unsigned:a};if(/^(datetime2|datetime|timestamp|smalldatetime|datetimeoffset)\b/.test(i))return{kind:`datetime`};if(/^date\b/.test(i))return{kind:n?`datetime`:`date`};if(/^(time|timetz)\b/.test(i))return{kind:`time`};if(/^(json|jsonb)\b/.test(i))return{kind:`json`};if(/^(uuid|uniqueidentifier)\b/.test(i))return{kind:`uuid`};if(/^(blob|tinyblob|mediumblob|longblob|binary|varbinary|bytea|raw|image|bfile)\b/.test(i))return{kind:`binary`};if(/^(text|ntext|tinytext|mediumtext|longtext|clob|nclob|long)\b/.test(i)||/^n?(?:var)?char2?\(max\)/.test(i))return{kind:`text`};let s=/^n?(?:var)?char2?(?:acter)?(?:\s+varying)?\((\d+)(?:\s+(?:char|byte))?\)/.exec(i);return s?{kind:`string`,maxLength:Number(s[1])}:{kind:`string`}}var M=/auto_increment|identity|generated/i;function N(e){return M.test(e.extra)||/^(serial|bigserial|smallserial)\b/i.test(e.type)?{mode:`auto`,text:``}:e.defaultValue===null?e.nullable?{mode:`null`,text:``}:{mode:`value`,text:``}:{mode:`default`,text:``}}function P(e){return e==null?{mode:`keep`,text:``}:{mode:`keep`,text:F(e)}}function F(e){if(e==null)return``;if(typeof e==`object`){if(ArrayBuffer.isView(e))return``;if(e instanceof Date)return e.toISOString();try{return JSON.stringify(e,null,2)}catch{return String(e)}}return String(e)}function I(e,t){let n=t.trim();switch(e.kind){case`integer`:{if(!/^[+-]?\d+$/.test(n))return{error:`integer`};if(e.unsigned&&n.startsWith(`-`))return{error:`unsigned`};let t=Number(n);return{value:Number.isSafeInteger(t)?t:BigInt(n)}}case`decimal`:return n===``||Number.isNaN(Number(n))?{error:`number`}:{value:Number(n)};case`boolean`:return{value:n===`true`||n===`1`};case`json`:try{return{value:JSON.parse(n===``?`null`:n)}}catch{return{error:`json`}}case`set`:return{value:n};case`date`:return n&&!/^\d{4}-\d{2}-\d{2}$/.test(n)?{error:`date`}:{value:n};case`datetime`:return n&&!/^\d{4}-\d{2}-\d{2}([ T]\d{2}:\d{2}(:\d{2}(\.\d+)?)?)?([+-]\d{2}:?\d{2}|Z)?$/.test(n)?{error:`datetime`}:{value:n};case`time`:return n&&!/^-?\d{1,3}:\d{2}(:\d{2}(\.\d+)?)?$/.test(n)?{error:`time`}:{value:n};default:return{value:t}}}var L=m(),R={integer:`result.rowForm.invalid.integer`,unsigned:`result.rowForm.invalid.unsigned`,number:`result.rowForm.invalid.number`,json:`result.rowForm.invalid.json`,date:`result.rowForm.invalid.date`,datetime:`result.rowForm.invalid.datetime`,time:`result.rowForm.invalid.time`};function z(e){return String(e).padStart(2,`0`)}function B(e){let t=new Date,n=`${t.getFullYear()}-${z(t.getMonth()+1)}-${z(t.getDate())}`,r=`${z(t.getHours())}:${z(t.getMinutes())}:${z(t.getSeconds())}`;return e===`date`?n:e===`time`?r:`${n} ${r}`}function V(e){let t=/^(\d{4})-(\d{2})-(\d{2})/.exec(e.trim());if(!t)return;let n=new Date(Number(t[1]),Number(t[2])-1,Number(t[3]));return Number.isNaN(n.getTime())?void 0:n}function H({spec:e,state:t,disabled:n,onText:r}){let{t:a}=h(),s=`w-full rounded border bg-background px-2 py-1 text-sm font-mono outline-none focus:ring-1 focus:ring-primary disabled:opacity-50`;switch(e.kind){case`boolean`:return(0,L.jsxs)(`select`,{className:s,value:t.text===`true`||t.text===`1`?`true`:`false`,onChange:e=>r(e.target.value),disabled:n,children:[(0,L.jsx)(`option`,{value:`true`,children:`TRUE`}),(0,L.jsx)(`option`,{value:`false`,children:`FALSE`})]});case`enum`:return(0,L.jsxs)(`select`,{className:s,value:t.text,onChange:e=>r(e.target.value),disabled:n,children:[!e.options?.includes(t.text)&&(0,L.jsx)(`option`,{value:t.text,children:t.text||`—`}),e.options?.map(e=>(0,L.jsx)(`option`,{value:e,children:e},e))]});case`set`:{let i=new Set(t.text.split(`,`).map(e=>e.trim()).filter(Boolean));return(0,L.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1 rounded border bg-background px-2 py-1.5`,children:e.options?.map(t=>(0,L.jsxs)(`label`,{className:`flex items-center gap-1 text-xs font-mono`,children:[(0,L.jsx)(`input`,{type:`checkbox`,className:`accent-primary`,checked:i.has(t),disabled:n,onChange:n=>{let a=new Set(i);n.target.checked?a.add(t):a.delete(t),r(e.options.filter(e=>a.has(e)).join(`,`))}}),t]},t))})}case`integer`:case`decimal`:return(0,L.jsx)(`input`,{className:`${s} tabular-nums`,inputMode:`decimal`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:e.kind===`integer`?`0`:`0.00`});case`date`:case`datetime`:{let[u,p]=t.text.trim().split(/[ T]/);return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${s} flex-1`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:e.kind===`date`?`YYYY-MM-DD`:`YYYY-MM-DD HH:MM:SS`}),(0,L.jsxs)(f,{children:[(0,L.jsx)(c,{asChild:!0,children:(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background p-1.5 text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,title:a(`result.rowForm.pickDate`),children:(0,L.jsx)(i,{className:`size-3.5`})})}),(0,L.jsx)(d,{className:`w-auto p-0`,align:`end`,children:(0,L.jsx)(o,{mode:`single`,selected:V(u??``),defaultMonth:V(u??``),onSelect:t=>{if(!t)return;let n=`${t.getFullYear()}-${z(t.getMonth()+1)}-${z(t.getDate())}`;r(e.kind===`date`?n:`${n} ${p||`00:00:00`}`)}})})]}),(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background px-1.5 py-1 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,onClick:()=>r(B(e.kind)),title:a(`result.rowForm.now`),children:(0,L.jsx)(l,{className:`size-3.5`})})]})}case`time`:return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${s} flex-1`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:`HH:MM:SS`}),(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background px-1.5 py-1 text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,onClick:()=>r(B(`time`)),title:a(`result.rowForm.now`),children:(0,L.jsx)(l,{className:`size-3.5`})})]});case`json`:{let e=!0;try{t.text.trim()&&JSON.parse(t.text)}catch{e=!1}return(0,L.jsxs)(`div`,{className:`space-y-1`,children:[(0,L.jsx)(`textarea`,{className:`${s} min-h-[96px] resize-y text-xs ${e?``:`border-destructive`}`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1,placeholder:`{}`}),(0,L.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,L.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 rounded border bg-background px-1.5 py-0.5 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n||!e||!t.text.trim(),onClick:()=>{try{r(JSON.stringify(JSON.parse(t.text),null,2))}catch{}},children:[(0,L.jsx)(O,{className:`size-3`}),a(`result.rowForm.formatJson`)]}),!e&&(0,L.jsx)(`span`,{className:`text-[10px] text-destructive`,children:a(`result.rowForm.invalid.json`)})]})]})}case`text`:return(0,L.jsx)(`textarea`,{className:`${s} min-h-[72px] resize-y`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1});case`binary`:return(0,L.jsx)(`div`,{className:`rounded border bg-muted/40 px-2 py-1 text-xs italic text-muted-foreground`,children:a(`result.rowForm.binaryUnsupported`)});case`uuid`:return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${s} flex-1`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:`00000000-0000-0000-0000-000000000000`}),(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background px-1.5 py-1 text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,onClick:()=>r(crypto.randomUUID()),title:a(`result.rowForm.generateUuid`),children:(0,L.jsx)(O,{className:`size-3.5`})})]});default:{let i=t.text.length>80||t.text.includes(`
2
+ `);return(0,L.jsxs)(`div`,{className:`space-y-0.5`,children:[i?(0,L.jsx)(`textarea`,{className:`${s} min-h-[56px] resize-y`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1}):(0,L.jsx)(`input`,{className:s,value:t.text,onChange:e=>r(e.target.value),disabled:n,maxLength:e.maxLength}),e.maxLength&&(0,L.jsxs)(`div`,{className:`text-right text-[10px] tabular-nums ${t.text.length>e.maxLength?`text-destructive`:`text-muted-foreground`}`,children:[t.text.length,`/`,e.maxLength]})]})}}}function U(){let{t:e}=h(),r=n(`row-form`),i=t(e=>e.closeDialog),o=t(e=>e.setFooterMessage),c=S(r?.connectionId??``),l=v(e=>r?e.transactionOpen[r.connectionId]:!1),[d,f]=(0,k.useState)(null),[p,m]=(0,k.useState)(null),[O,A]=(0,k.useState)({}),[M,F]=(0,k.useState)({}),[z,B]=(0,k.useState)(null),[V,U]=(0,k.useState)(!1),W=r?.mode===`edit`;(0,k.useEffect)(()=>{if(!r)return;let e=!1,t=y(r.serverConnectionId);return c.introspect.listColumns(t,r.database,r.table).then(t=>{if(e)return;f(t);let n={};for(let e of t)if(r.mode===`edit`){let t=r.fields.find(t=>t.orgName===e.name);n[e.name]=P(t?r.row?.[t.name]:void 0)}else n[e.name]=N(e);A(n)}).catch(t=>{e||m(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[r?.serverConnectionId,r?.database,r?.table,r?.mode]);let G=(0,k.useMemo)(()=>new Map((d??[]).map(e=>[e.name,j(e,{oracleDate:c.id===`oracle`})])),[d,c.id]),K=(0,k.useCallback)((e,t)=>{A(n=>({...n,[e]:{...n[e],mode:t}})),F(t=>{let n={...t};return delete n[e],n})},[]),q=(0,k.useCallback)((e,t)=>{A(n=>({...n,[e]:{mode:`value`,text:t}})),F(t=>{let n={...t};return delete n[e],n})},[]),J=(0,k.useMemo)(()=>({__default:!0}),[]),Y=(0,k.useCallback)(()=>{if(!d)return null;let t=new Map,n={};for(let r of d){let i=O[r.name],a=G.get(r.name);if(!i||i.mode===`auto`||i.mode===`keep`)continue;if(i.mode===`null`){t.set(r.name,null);continue}if(i.mode==="default"){t.set(r.name,J);continue}let o=I(a,i.text);if(`error`in o){n[r.name]=e(R[o.error]??`result.rowForm.invalid.number`);continue}if(a.maxLength&&typeof o.value==`string`&&o.value.length>a.maxLength){n[r.name]=e(`result.rowForm.invalid.length`,{max:a.maxLength});continue}t.set(r.name,o.value)}return F(n),Object.keys(n).length>0?null:{values:t}},[d,O,G,e,J]),X=(0,k.useCallback)(e=>{if(!r)return null;let t=e=>e===J?`DEFAULT`:c.quoteLiteral(e);if(r.mode===`insert`){let n=[...e];return n.length===0?c.getQuery(`INSERT_DEFAULT_VALUES`,r.database,r.table):c.getQuery(`INSERT_TABLE`,r.database,r.table,n.map(([e])=>c.quoteIdentifier(e)).join(`, `),n.map(([,e])=>t(e)).join(`, `))}return!r.where||e.size===0?null:c.getQuery(`UPDATE_TABLE`,r.database,r.table,[...e].map(([e,n])=>`${c.quoteIdentifier(e)} = ${t(n)}`).join(`, `),r.where)},[r,c,J]),Z=(0,k.useMemo)(()=>{if(!d)return``;let e=new Map;for(let t of d){let n=O[t.name];if(!(!n||n.mode===`auto`||n.mode===`keep`)){if(n.mode===`null`)e.set(t.name,null);else if(n.mode==="default")e.set(t.name,J);else{let r=I(G.get(t.name),n.text);e.set(t.name,`error`in r?n.text:r.value)}}}return X(e)??``},[d,O,G,X,J]),Q=e=>{let t={};for(let[n,i]of e){if(i===J)continue;let e=r?.fields.find(e=>e.orgName===n);t[e?.name??n]=typeof i==`bigint`?i.toString():i}return t},te=()=>{let e=Y();!e||!r||(r.onStage?.(r.mode,Q(e.values)),i())},ne=async()=>{let n=Y();if(!n||!r)return;let a=X(n.values);if(!a){B(e(`result.rowForm.nothingToWrite`));return}U(!0),B(null);try{if(_.getState().previewGridCommit&&!await t.getState().requestDestructiveConfirm({title:e(W?`result.rowForm.confirmUpdateTitle`:`result.rowForm.confirmInsertTitle`,{table:`${r.database}.${r.table}`}),statements:[a],confirmLabel:e(W?`result.rowForm.update`:`result.rowForm.insert`)}))return;await b(r.connectionId,a,{database:r.database,skipDestructiveConfirm:!0}),o(e(W?`result.rowForm.updated`:`result.rowForm.inserted`,{table:`${r.database}.${r.table}`})),r.onCommitted?.(r.mode,Q(n.values)),i()}catch(e){if(e instanceof x)return;B(e instanceof Error?e.message:String(e))}finally{U(!1)}};if(!r)return null;let $=(e,t,n,r)=>(0,L.jsx)(`button`,{type:`button`,className:`rounded px-1.5 py-0.5 text-[10px] font-medium ${r===t?`bg-primary text-primary-foreground`:`text-muted-foreground hover:bg-muted hover:text-foreground`}`,onClick:()=>K(e,t),children:n});return(0,L.jsx)(ee,{open:!0,onOpenChange:e=>{e||i()},children:(0,L.jsxs)(T,{className:`flex max-h-[90vh] flex-col sm:max-w-[860px]`,children:[(0,L.jsxs)(C,{children:[(0,L.jsx)(E,{children:e(W?`result.rowForm.editTitle`:`result.rowForm.insertTitle`)}),(0,L.jsxs)(D,{className:`font-mono text-xs`,children:[r.database,`.`,r.table]})]}),(0,L.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto rounded-md border`,children:[p&&(0,L.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:p}),!d&&!p&&(0,L.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground`,children:[(0,L.jsx)(u,{className:`size-4 animate-spin`}),e(`result.rowForm.loading`)]}),d&&(0,L.jsxs)(`table`,{className:`w-full border-separate border-spacing-0 text-sm`,children:[(0,L.jsx)(`thead`,{className:`sticky top-0 z-10 bg-background`,children:(0,L.jsxs)(`tr`,{className:`text-left text-[10px] uppercase tracking-wide text-muted-foreground`,children:[(0,L.jsx)(`th`,{className:`w-[38%] border-b px-2 py-1.5 font-medium`,children:e(`result.rowForm.colColumn`)}),(0,L.jsx)(`th`,{className:`border-b px-2 py-1.5 font-medium`,children:e(`result.rowForm.colValue`)})]})}),(0,L.jsx)(`tbody`,{children:d.map(t=>{let n=O[t.name]??{mode:`value`,text:``},i=G.get(t.name),o=n.mode===`auto`,c=M[t.name],l=t.key===`PRI`,u=r.fields.find(e=>e.orgName===t.name),d=!!u&&!!r.row&&r.row[u.name]===null;return(0,L.jsxs)(`tr`,{className:`align-top ${c?`bg-destructive/5`:`hover:bg-muted/30`}`,children:[(0,L.jsxs)(`td`,{className:`border-b border-border/60 px-2 py-2`,children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,L.jsx)(`span`,{className:`truncate font-mono text-sm font-medium`,title:t.name,children:t.name}),l&&(0,L.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5 rounded border border-catppuccin-yellow/50 px-1 text-[9px] font-semibold text-catppuccin-yellow`,children:[(0,L.jsx)(a,{className:`size-2.5`}),`PK`]})]}),(0,L.jsxs)(`div`,{className:`mt-0.5 flex flex-wrap items-center gap-x-1.5 gap-y-0.5 text-[10px] text-muted-foreground`,children:[(0,L.jsx)(`span`,{className:`rounded bg-muted px-1 py-px font-mono`,children:t.type}),!t.nullable&&(0,L.jsx)(`span`,{children:`NOT NULL`}),t.defaultValue!==null&&(0,L.jsxs)(`span`,{className:`font-mono`,title:e(`result.rowForm.defaultValue`),children:[`= `,t.defaultValue]}),t.extra&&(0,L.jsx)(`span`,{children:t.extra})]}),t.comment&&(0,L.jsx)(`div`,{className:`mt-0.5 text-[10px] text-muted-foreground/80`,children:t.comment})]}),(0,L.jsx)(`td`,{className:`border-b border-border/60 px-2 py-2`,children:(0,L.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,L.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[n.mode===`keep`?(0,L.jsx)(`div`,{className:`cursor-text truncate rounded border border-dashed bg-muted/30 px-2 py-1 font-mono text-xs text-muted-foreground`,onClick:()=>K(t.name,`value`),title:e(`result.rowForm.clickToChange`),children:d?(0,L.jsx)(`span`,{className:`italic`,children:`NULL`}):n.text||(0,L.jsx)(`span`,{className:`italic`,children:e(`result.rowForm.empty`)})}):n.mode===`value`?(0,L.jsx)(H,{spec:i,state:n,disabled:!1,onText:e=>q(t.name,e)}):(0,L.jsx)(`div`,{className:`rounded border border-dashed bg-muted/30 px-2 py-1 font-mono text-xs italic text-muted-foreground`,children:n.mode===`null`?`NULL`:n.mode==="default"?`DEFAULT (${t.defaultValue??``})`:e(`result.rowForm.autoHint`)}),c&&(0,L.jsxs)(`div`,{className:`mt-1 flex items-center gap-1 text-[11px] text-destructive`,children:[(0,L.jsx)(s,{className:`size-3`}),c]})]}),(0,L.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 rounded border bg-background p-0.5`,children:[W&&$(t.name,`keep`,e(`result.rowForm.mode.keep`),n.mode),(o||!W&&/auto_increment|identity/i.test(t.extra))&&$(t.name,`auto`,e(`result.rowForm.mode.auto`),n.mode),$(t.name,`value`,e(`result.rowForm.mode.value`),n.mode),t.nullable&&$(t.name,`null`,`NULL`,n.mode),t.defaultValue!==null&&$(t.name,`default`,`DEFAULT`,n.mode)]})]})})]},t.name)})})]})]}),d&&(0,L.jsxs)(`div`,{className:`shrink-0 rounded-md border bg-muted/30`,children:[(0,L.jsx)(`div`,{className:`border-b px-3 py-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground`,children:e(`result.rowForm.preview`)}),(0,L.jsx)(`pre`,{className:`max-h-24 overflow-auto whitespace-pre-wrap break-words px-3 py-2 font-mono text-xs`,children:Z||(0,L.jsx)(`span`,{className:`italic text-muted-foreground`,children:e(`result.rowForm.nothingToWrite`)})})]}),z&&(0,L.jsx)(`div`,{className:`shrink-0 rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:z}),(0,L.jsxs)(w,{className:`items-center`,children:[l&&(0,L.jsx)(`span`,{className:`mr-auto text-[11px] text-catppuccin-yellow`,children:e(`result.rowForm.inTransaction`)}),(0,L.jsx)(g,{variant:`outline`,onClick:()=>i(),disabled:V,children:e(`command.close`)}),r.onStage&&(0,L.jsx)(g,{variant:`outline`,onClick:te,disabled:V||!d,title:e(`result.rowForm.stageHint`),children:e(W?`result.rowForm.stageEdit`:`result.rowForm.stageInsert`)}),(0,L.jsxs)(g,{onClick:()=>void ne(),disabled:V||!d,children:[V&&(0,L.jsx)(u,{className:`mr-1 size-3.5 animate-spin`}),e(W?`result.rowForm.update`:`result.rowForm.insert`)]})]})]})})}export{U as RowFormDialog};
@@ -1 +1 @@
1
- import{a as e,n as t}from"./ui-store-DfspmPOn.js";import{l as n,u as r}from"./main-DLYTmffu.js";import{l as i,m as a,t as o}from"./button--s6nUzD8.js";import{r as s,t as c}from"./i18n-XcmivDWI.js";import{a as l,i as u,n as d,r as f,t as p}from"./select-BMtc6vRo.js";import{n as m,t as h}from"./settings-store-CSRx4hwh.js";import{a as g,i as _,n as v,o as y,r as b,t as x}from"./dialog-CJoWJzRo.js";var S=i();function C({id:e,checked:t,onChange:n,label:r,hint:i}){return(0,S.jsxs)(`label`,{htmlFor:e,className:`flex cursor-pointer items-start gap-3 rounded-md border p-3 hover:bg-accent/40`,children:[(0,S.jsx)(`input`,{id:e,type:`checkbox`,checked:t,onChange:e=>n(e.target.checked),className:`mt-0.5 size-4 accent-primary`}),(0,S.jsxs)(`span`,{className:`grid gap-0.5`,children:[(0,S.jsx)(`span`,{className:`text-sm font-medium`,children:r}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:i})]})]})}function w(){let i=t(e=>e.activeDialog),w=t(e=>e.closeDialog),T=m(),E=T.update,{t:D}=a();return(0,S.jsx)(x,{open:i===`safety-settings`,onOpenChange:e=>{e||w()},children:(0,S.jsxs)(v,{className:`sm:max-w-[560px]`,children:[(0,S.jsxs)(g,{children:[(0,S.jsx)(y,{children:D(`settings.title`)}),(0,S.jsx)(b,{children:D(`settings.description`)})]}),(0,S.jsxs)(`div`,{className:`grid gap-2`,children:[(0,S.jsx)(C,{id:`s-history`,checked:T.persistQueryHistory,onChange:e=>T.setPersistQueryHistory(e),label:D(`settings.persistHistory`),hint:D(`settings.persistHistoryHint`)}),(0,S.jsx)(C,{id:`s-confirm`,checked:T.confirmDestructive,onChange:e=>E({confirmDestructive:e}),label:`Confirm destructive statements`,hint:`Ask before DROP TABLE/DATABASE, TRUNCATE, DELETE or UPDATE without WHERE, and ALTER … DROP COLUMN.`}),(0,S.jsx)(C,{id:`s-dryrun`,checked:T.previewAffectedRows,onChange:e=>E({previewAffectedRows:e}),label:`Preview affected rows before UPDATE / DELETE`,hint:`Runs the statement's WHERE (joins included) as a SELECT first and shows the count and a sample of the rows; you confirm before anything is written.`}),(0,S.jsx)(C,{id:`s-warn`,checked:T.warnInEditor,onChange:e=>E({warnInEditor:e}),label:`Warn in the editor`,hint:`Underline destructive statements and statements a read-only connection would refuse.`}),(0,S.jsx)(C,{id:`s-override`,checked:T.allowReadOnlyOverride,onChange:e=>E({allowReadOnlyOverride:e}),label:`Allow "Run anyway" on read-only connections`,hint:`When off, writes on a read-only connection are refused with no override.`}),(0,S.jsx)(C,{id:`s-preview`,checked:T.previewGridCommit,onChange:e=>E({previewGridCommit:e}),label:`Preview SQL before committing grid edits`,hint:`Show the generated UPDATE statements and ask for confirmation.`}),(0,S.jsxs)(`div`,{className:`grid grid-cols-[1fr_140px] items-center gap-3 rounded-md border p-3`,children:[(0,S.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,S.jsx)(n,{htmlFor:`s-limit`,className:`text-sm font-medium`,children:`Result row limit`}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`LIMIT appended to SELECTs that have none. 0 disables.`})]}),(0,S.jsx)(r,{id:`s-limit`,type:`number`,min:0,step:100,value:T.resultRowLimit,onChange:e=>E({resultRowLimit:Math.max(0,Number(e.target.value)||0)})})]}),(0,S.jsxs)(`div`,{className:`grid grid-cols-[1fr_200px] items-center gap-3 rounded-md border p-3`,children:[(0,S.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,S.jsx)(`span`,{className:`text-sm font-medium`,children:`F9 / Run button executes`}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Ctrl+Enter always runs the statement at the cursor; Ctrl+Shift+Enter the whole script.`})]}),(0,S.jsxs)(p,{value:T.executeScope,onValueChange:e=>E({executeScope:e}),children:[(0,S.jsx)(u,{children:(0,S.jsx)(l,{})}),(0,S.jsxs)(d,{children:[(0,S.jsx)(f,{value:`script`,children:`Whole script`}),(0,S.jsx)(f,{value:`statement`,children:`Statement at cursor`})]})]})]}),(0,S.jsxs)(`div`,{className:`grid grid-cols-[1fr_200px] items-center gap-3 rounded-md border p-3`,children:[(0,S.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,S.jsx)(`span`,{className:`text-sm font-medium`,children:D(`settings.language`)}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:D(`settings.languageHint`)})]}),(0,S.jsxs)(p,{value:T.locale,onValueChange:e=>T.setLocale(e),children:[(0,S.jsx)(u,{children:(0,S.jsx)(l,{})}),(0,S.jsxs)(d,{children:[(0,S.jsx)(f,{value:`auto`,children:D(`language.auto`,{name:D(`language.${s()}`)})}),c.map(e=>(0,S.jsx)(f,{value:e,children:D(`language.${e}`)},e))]})]})]}),(0,S.jsx)(C,{id:`s-analytics`,checked:T.analyticsEnabled,onChange:T.setAnalyticsEnabled,label:D(`settings.analytics`),hint:e()?D(`settings.analyticsHint`):D(`settings.analyticsUnavailableHint`)})]}),(0,S.jsxs)(_,{children:[(0,S.jsx)(o,{variant:`ghost`,onClick:()=>E(h),children:D(`settings.resetDefaults`)}),(0,S.jsx)(o,{onClick:w,children:D(`settings.done`)})]})]})})}export{w as SafetySettingsDialog};
1
+ import{a as e,n as t}from"./ui-store-DfspmPOn.js";import{l as n,u as r}from"./main-BLydvBDF.js";import{l as i,m as a,t as o}from"./button--s6nUzD8.js";import{r as s,t as c}from"./i18n-57fo5jb0.js";import{a as l,i as u,n as d,r as f,t as p}from"./select-ibmUj7AE.js";import{n as m,t as h}from"./settings-store-WUA0-UcP.js";import{a as g,i as _,n as v,o as y,r as b,t as x}from"./dialog-CJoWJzRo.js";var S=i();function C({id:e,checked:t,onChange:n,label:r,hint:i}){return(0,S.jsxs)(`label`,{htmlFor:e,className:`flex cursor-pointer items-start gap-3 rounded-md border p-3 hover:bg-accent/40`,children:[(0,S.jsx)(`input`,{id:e,type:`checkbox`,checked:t,onChange:e=>n(e.target.checked),className:`mt-0.5 size-4 accent-primary`}),(0,S.jsxs)(`span`,{className:`grid gap-0.5`,children:[(0,S.jsx)(`span`,{className:`text-sm font-medium`,children:r}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:i})]})]})}function w(){let i=t(e=>e.activeDialog),w=t(e=>e.closeDialog),T=m(),E=T.update,{t:D}=a();return(0,S.jsx)(x,{open:i===`safety-settings`,onOpenChange:e=>{e||w()},children:(0,S.jsxs)(v,{className:`sm:max-w-[560px]`,children:[(0,S.jsxs)(g,{children:[(0,S.jsx)(y,{children:D(`settings.title`)}),(0,S.jsx)(b,{children:D(`settings.description`)})]}),(0,S.jsxs)(`div`,{className:`grid gap-2`,children:[(0,S.jsx)(C,{id:`s-history`,checked:T.persistQueryHistory,onChange:e=>T.setPersistQueryHistory(e),label:D(`settings.persistHistory`),hint:D(`settings.persistHistoryHint`)}),(0,S.jsx)(C,{id:`s-confirm`,checked:T.confirmDestructive,onChange:e=>E({confirmDestructive:e}),label:`Confirm destructive statements`,hint:`Ask before DROP TABLE/DATABASE, TRUNCATE, DELETE or UPDATE without WHERE, and ALTER … DROP COLUMN.`}),(0,S.jsx)(C,{id:`s-dryrun`,checked:T.previewAffectedRows,onChange:e=>E({previewAffectedRows:e}),label:`Preview affected rows before UPDATE / DELETE`,hint:`Runs the statement's WHERE (joins included) as a SELECT first and shows the count and a sample of the rows; you confirm before anything is written.`}),(0,S.jsx)(C,{id:`s-warn`,checked:T.warnInEditor,onChange:e=>E({warnInEditor:e}),label:`Warn in the editor`,hint:`Underline destructive statements and statements a read-only connection would refuse.`}),(0,S.jsx)(C,{id:`s-override`,checked:T.allowReadOnlyOverride,onChange:e=>E({allowReadOnlyOverride:e}),label:`Allow "Run anyway" on read-only connections`,hint:`When off, writes on a read-only connection are refused with no override.`}),(0,S.jsx)(C,{id:`s-preview`,checked:T.previewGridCommit,onChange:e=>E({previewGridCommit:e}),label:`Preview SQL before committing grid edits`,hint:`Show the generated UPDATE statements and ask for confirmation.`}),(0,S.jsxs)(`div`,{className:`grid grid-cols-[1fr_140px] items-center gap-3 rounded-md border p-3`,children:[(0,S.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,S.jsx)(n,{htmlFor:`s-limit`,className:`text-sm font-medium`,children:`Result row limit`}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`LIMIT appended to SELECTs that have none. 0 disables.`})]}),(0,S.jsx)(r,{id:`s-limit`,type:`number`,min:0,step:100,value:T.resultRowLimit,onChange:e=>E({resultRowLimit:Math.max(0,Number(e.target.value)||0)})})]}),(0,S.jsxs)(`div`,{className:`grid grid-cols-[1fr_200px] items-center gap-3 rounded-md border p-3`,children:[(0,S.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,S.jsx)(`span`,{className:`text-sm font-medium`,children:`F9 / Run button executes`}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Ctrl+Enter always runs the statement at the cursor; Ctrl+Shift+Enter the whole script.`})]}),(0,S.jsxs)(p,{value:T.executeScope,onValueChange:e=>E({executeScope:e}),children:[(0,S.jsx)(u,{children:(0,S.jsx)(l,{})}),(0,S.jsxs)(d,{children:[(0,S.jsx)(f,{value:`script`,children:`Whole script`}),(0,S.jsx)(f,{value:`statement`,children:`Statement at cursor`})]})]})]}),(0,S.jsxs)(`div`,{className:`grid grid-cols-[1fr_200px] items-center gap-3 rounded-md border p-3`,children:[(0,S.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,S.jsx)(`span`,{className:`text-sm font-medium`,children:D(`settings.language`)}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:D(`settings.languageHint`)})]}),(0,S.jsxs)(p,{value:T.locale,onValueChange:e=>T.setLocale(e),children:[(0,S.jsx)(u,{children:(0,S.jsx)(l,{})}),(0,S.jsxs)(d,{children:[(0,S.jsx)(f,{value:`auto`,children:D(`language.auto`,{name:D(`language.${s()}`)})}),c.map(e=>(0,S.jsx)(f,{value:e,children:D(`language.${e}`)},e))]})]})]}),(0,S.jsx)(C,{id:`s-analytics`,checked:T.analyticsEnabled,onChange:T.setAnalyticsEnabled,label:D(`settings.analytics`),hint:e()?D(`settings.analyticsHint`):D(`settings.analyticsUnavailableHint`)})]}),(0,S.jsxs)(_,{children:[(0,S.jsx)(o,{variant:`ghost`,onClick:()=>E(h),children:D(`settings.resetDefaults`)}),(0,S.jsx)(o,{onClick:w,children:D(`settings.done`)})]})]})})}export{w as SafetySettingsDialog};
@@ -1,4 +1,4 @@
1
- import{c as e,h as t,n,t as r,v as i}from"./ui-store-DfspmPOn.js";import{A as a,k as o,l as s}from"./main-DLYTmffu.js";import{l as c,m as l,t as u}from"./button--s6nUzD8.js";import{a as d,i as f,n as p,r as m,t as h}from"./select-BMtc6vRo.js";import{t as g}from"./connection-store-DjSajhjh.js";import{a as _}from"./database-_lr1w6xK.js";import{n as v}from"./engine-C2ZJalx5.js";import{t as ee}from"./pro-usage-Die_FxwH.js";import{t as y}from"./table-definition-Bs5VSn0X.js";import{a as b,i as te,n as ne,o as re,t as ie}from"./dialog-CJoWJzRo.js";var x=i(t(),1),S=[`VIEW`,`PROCEDURE`,`FUNCTION`,`TRIGGER`,`EVENT`];function C(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 w(e,t){let n=[];for(let r of S){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&&C(o.sql,e.database)===C(c.sql,t.database)?`identical`:`changed`:`missingInTarget`:`missingInSource`,n.push({type:r,name:s,status:l,source:o,target:c})}}return n}var T=e=>e.toLowerCase().replace(/\s+/g,` `).trim(),E=e=>e===null?null:e.trim().replace(/^'(.*)'(?:::\w+)?$/s,`$1`),D=e=>e.addedColumns.length+e.removedColumns.length+e.changedColumns.length+e.addedIndexes.length+e.removedIndexes.length+e.changedIndexes.length>0;function O(e,t){let n=[];return T(e.type)!==T(t.type)&&n.push(`type`),e.nullable!==t.nullable&&n.push(`nullable`),E(e.defaultValue)!==E(t.defaultValue)&&n.push(`default`),e.extra.toLowerCase()!==t.extra.toLowerCase()&&n.push(`extra`),n}var k=(e,t)=>e.type===t.type&&e.columns.length===t.columns.length&&e.columns.every((e,n)=>e===t.columns[n]);function A(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=O(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&&!k(e,t)&&s.changedIndexes.push({name:e.name,source:e,target:t})}return s}function j(e,t){let n=new Set(t.tables),r=new Set(e.tables),i={missingInTarget:[],missingInSource:[],changed:[],identical:[],objects:w(e,t)};for(let r of e.tables){if(!n.has(r)){i.missingInTarget.push(r);continue}let a=A(r,e,t);D(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(`
1
+ import{c as e,h as t,n,t as r,v as i}from"./ui-store-DfspmPOn.js";import{A as a,k as o,l as s}from"./main-BLydvBDF.js";import{l as c,m as l,t as u}from"./button--s6nUzD8.js";import{a as d,i as f,n as p,r as m,t as h}from"./select-ibmUj7AE.js";import{t as g}from"./connection-store-N-ZwIkVg.js";import{a as _}from"./database-CpQt6YGv.js";import{n as v}from"./engine-CpwlM_Ww.js";import{t as ee}from"./pro-usage-VxPxjJqt.js";import{t as y}from"./table-definition-Bs5VSn0X.js";import{a as b,i as te,n as ne,o as re,t as ie}from"./dialog-CJoWJzRo.js";var x=i(t(),1),S=[`VIEW`,`PROCEDURE`,`FUNCTION`,`TRIGGER`,`EVENT`];function C(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 w(e,t){let n=[];for(let r of S){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&&C(o.sql,e.database)===C(c.sql,t.database)?`identical`:`changed`:`missingInTarget`:`missingInSource`,n.push({type:r,name:s,status:l,source:o,target:c})}}return n}var T=e=>e.toLowerCase().replace(/\s+/g,` `).trim(),E=e=>e===null?null:e.trim().replace(/^'(.*)'(?:::\w+)?$/s,`$1`),D=e=>e.addedColumns.length+e.removedColumns.length+e.changedColumns.length+e.addedIndexes.length+e.removedIndexes.length+e.changedIndexes.length>0;function O(e,t){let n=[];return T(e.type)!==T(t.type)&&n.push(`type`),e.nullable!==t.nullable&&n.push(`nullable`),E(e.defaultValue)!==E(t.defaultValue)&&n.push(`default`),e.extra.toLowerCase()!==t.extra.toLowerCase()&&n.push(`extra`),n}var k=(e,t)=>e.type===t.type&&e.columns.length===t.columns.length&&e.columns.every((e,n)=>e===t.columns[n]);function A(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=O(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&&!k(e,t)&&s.changedIndexes.push({name:e.name,source:e,target:t})}return s}function j(e,t){let n=new Set(t.tables),r=new Set(e.tables),i={missingInTarget:[],missingInSource:[],changed:[],identical:[],objects:w(e,t)};for(let r of e.tables){if(!n.has(r)){i.missingInTarget.push(r);continue}let a=A(r,e,t);D(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
2
  `).map(e=>`-- ${e}`).join(`
3
3
  `);function ae(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(N(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=F(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?I(t.source.sql):M(`the source engine did not return a CREATE statement for ${e}`))),c.push(``)}return c.join(`
4
4
  `).replace(/\n{3,}/g,`
@@ -1,4 +1,4 @@
1
- import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{j as r,l as i}from"./main-DLYTmffu.js";import{l as a,m as o,t as s}from"./button--s6nUzD8.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-BMtc6vRo.js";import{t as p}from"./connection-store-DjSajhjh.js";import{n as m}from"./query-store-Bz1pmp4E.js";import{S as h,a as g}from"./database-_lr1w6xK.js";import{n as _}from"./engine-C2ZJalx5.js";import{o as v,r as y}from"./schema-nodes-XgnUaB2x.js";import{a as b,i as x,n as S,o as C,t as w}from"./dialog-CJoWJzRo.js";import{t as T}from"./file-name-CnYBZPf9.js";var E=n(e(),1),D=a();function O(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function k(){let{t:e}=o(),{activeDialog:n,closeDialog:a}=t(),{activeConnectionId:k,activeConnections:A}=p(),{trees:j}=h(),M=m(),N=n===`export-html`,P=(0,E.useMemo)(()=>k?y(j[k]??[]):[],[k,j]),F=(0,E.useMemo)(()=>{if(!k)return``;let e=M.activeTabId[k];return(M.tabs[k]??[]).find(t=>t.id===e)?.database||``},[k,M.activeTabId,M.tabs]),[I,L]=(0,E.useState)(``),R=(0,E.useMemo)(()=>!k||!I?[]:v(j[k]??[],I),[k,I,j]),[z,B]=(0,E.useState)([]),[V,H]=(0,E.useState)(!0),[U,W]=(0,E.useState)(!0),[G,K]=(0,E.useState)(!0),[q,J]=(0,E.useState)(!1);(0,E.useEffect)(()=>{N&&F&&L(F)},[N,F]);function Y(e){e||(a(),L(``),B([]),H(!0),W(!0),K(!0))}function X(e){B(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}function Z(){B(R.length===z.length?[]:[...R])}async function Q(){if(z.length===0||!k)return;let t=A.find(e=>e.id===k);if(!t?.serverConnectionId)return;J(!0);let{introspect:n}=_(k),r=g(t.serverConnectionId),i=(e,t,n)=>{let r=`<h3>${O(e)}</h3>\n<table border="1" cellpadding="4" cellspacing="0">\n`;r+=`<tr>${t.map(e=>`<th>${O(e)}</th>`).join(``)}</tr>\n`;for(let e of n)r+=`<tr>${e.map(e=>`<td>${O(e==null?`NULL`:String(e))}</td>`).join(``)}</tr>\n`;return r+`</table>
1
+ import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{j as r,l as i}from"./main-BLydvBDF.js";import{l as a,m as o,t as s}from"./button--s6nUzD8.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-ibmUj7AE.js";import{t as p}from"./connection-store-N-ZwIkVg.js";import{r as m}from"./hmr-singleton-DWC1xbJ4.js";import{S as h,a as g}from"./database-CpQt6YGv.js";import{n as _}from"./engine-CpwlM_Ww.js";import{o as v,r as y}from"./schema-nodes-MgIiKfpG.js";import{a as b,i as x,n as S,o as C,t as w}from"./dialog-CJoWJzRo.js";import{t as T}from"./file-name-CnYBZPf9.js";var E=n(e(),1),D=a();function O(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function k(){let{t:e}=o(),{activeDialog:n,closeDialog:a}=t(),{activeConnectionId:k,activeConnections:A}=p(),{trees:j}=h(),M=m(),N=n===`export-html`,P=(0,E.useMemo)(()=>k?y(j[k]??[]):[],[k,j]),F=(0,E.useMemo)(()=>{if(!k)return``;let e=M.activeTabId[k];return(M.tabs[k]??[]).find(t=>t.id===e)?.database||``},[k,M.activeTabId,M.tabs]),[I,L]=(0,E.useState)(``),R=(0,E.useMemo)(()=>!k||!I?[]:v(j[k]??[],I),[k,I,j]),[z,B]=(0,E.useState)([]),[V,H]=(0,E.useState)(!0),[U,W]=(0,E.useState)(!0),[G,K]=(0,E.useState)(!0),[q,J]=(0,E.useState)(!1);(0,E.useEffect)(()=>{N&&F&&L(F)},[N,F]);function Y(e){e||(a(),L(``),B([]),H(!0),W(!0),K(!0))}function X(e){B(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}function Z(){B(R.length===z.length?[]:[...R])}async function Q(){if(z.length===0||!k)return;let t=A.find(e=>e.id===k);if(!t?.serverConnectionId)return;J(!0);let{introspect:n}=_(k),r=g(t.serverConnectionId),i=(e,t,n)=>{let r=`<h3>${O(e)}</h3>\n<table border="1" cellpadding="4" cellspacing="0">\n`;r+=`<tr>${t.map(e=>`<th>${O(e)}</th>`).join(``)}</tr>\n`;for(let e of n)r+=`<tr>${e.map(e=>`<td>${O(e==null?`NULL`:String(e))}</td>`).join(``)}</tr>\n`;return r+`</table>
2
2
  `};try{let t=[];for(let a of z){let o=`<h2>${O(a)}</h2>\n`;if(V){let t=await n.listColumns(r,I,a);t.length>0&&(o+=i(e(`database.html.sectionColumns`),[`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`,`Comment`],t.map(e=>[e.name,e.type,e.nullable?`YES`:`NO`,e.key,e.defaultValue,e.extra,e.comment])))}if(U){let t=await n.listIndexes(r,I,a);t.length>0&&(o+=i(e(`database.html.sectionIndexes`),[`Key_name`,`Type`,`Columns`],t.map(e=>[e.name,e.type,e.columns.join(`, `)])))}if(G){let t=await n.getTableInfo(r,I,a);t&&(o+=i(e(`database.html.sectionProperties`),[`Name`,`Engine`,`Collation`,`Rows`,`Data_length`,`Create_time`,`Update_time`,`Comment`],[[t.name,t.engine,t.collation,t.rows,t.dataLength,t.createTime,t.updateTime,t.comment]]))}t.push(o)}let a=`<!DOCTYPE html>
3
3
  <html lang="en">
4
4
  <head>
@@ -1 +1 @@
1
- import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{C as r,S as i,b as a,j as o,u as s,w as c,x as l,y as u}from"./main-DLYTmffu.js";import{l as d,m as f,t as p}from"./button--s6nUzD8.js";import{a as m}from"./i18n-XcmivDWI.js";import{t as h}from"./connection-store-DjSajhjh.js";import{c as g}from"./database-_lr1w6xK.js";import{t as _}from"./engine-C2ZJalx5.js";import{a as v,i as y,n as b,o as x,t as S}from"./dialog-CJoWJzRo.js";var C=n(e(),1),w=d();function T(){let e=h.getState();return e.activeConnections.find(t=>t.id===e.activeConnectionId)?.serverConnectionId??null}async function E(e){let t=T();if(!t)throw Error(m.t(`command.noActiveConnection`));let n=_().getQuery(e===`global`?`SHOW_GLOBAL_STATUS`:`SHOW_SESSION_STATUS`);return(await g(t,n)).records.map(e=>({Variable_name:e[0],Value:e[1]}))}function D(){let{t:e}=f(),{activeDialog:n,closeDialog:d,setFooterMessage:m}=t(),[h,g]=(0,C.useState)([]),[_,T]=(0,C.useState)(``),[D,O]=(0,C.useState)(`session`),k=n===`status`,A=(0,C.useCallback)(t=>E(t).then(g).catch(t=>m(e(`command.status.loadError`,{message:t instanceof Error?t.message:String(t)}))),[m,e]);(0,C.useEffect)(()=>{k&&A(D)},[k,D,A]);let j=(0,C.useMemo)(()=>{if(!_.trim())return h;let e=_.toLowerCase();return h.filter(t=>t.Variable_name.toLowerCase().includes(e)||t.Value.toLowerCase().includes(e))},[h,_]);function M(e){e||(T(``),d())}function N(e){O(e)}return(0,w.jsx)(S,{open:k,onOpenChange:M,children:(0,w.jsxs)(b,{className:`sm:max-w-[900px] max-h-[80vh] flex flex-col`,children:[(0,w.jsx)(v,{children:(0,w.jsx)(x,{children:e(`command.status.title`)})}),(0,w.jsxs)(`div`,{className:`flex items-center gap-3 pb-2`,children:[(0,w.jsxs)(`div`,{className:`flex gap-1`,children:[(0,w.jsx)(p,{variant:D===`session`?`default`:`outline`,size:`sm`,onClick:()=>N(`session`),children:e(`command.scope.session`)}),(0,w.jsx)(p,{variant:D===`global`?`default`:`outline`,size:`sm`,onClick:()=>N(`global`),children:e(`command.scope.global`)})]}),(0,w.jsx)(s,{placeholder:e(`command.status.filterPlaceholder`),value:_,onChange:e=>T(e.target.value),className:`max-w-xs`})]}),(0,w.jsx)(`div`,{className:`flex-1 border rounded-md overflow-hidden min-h-0`,children:(0,w.jsx)(o,{className:`h-[400px]`,children:(0,w.jsxs)(u,{children:[(0,w.jsx)(r,{children:(0,w.jsxs)(c,{children:[(0,w.jsx)(i,{className:`w-[300px]`,children:e(`command.variableName`)}),(0,w.jsx)(i,{children:e(`command.value`)})]})}),(0,w.jsx)(a,{children:j.length===0?(0,w.jsx)(c,{children:(0,w.jsx)(l,{colSpan:2,className:`text-center text-muted-foreground`,children:e(`command.status.empty`)})}):j.map(e=>(0,w.jsxs)(c,{children:[(0,w.jsx)(l,{className:`font-mono text-xs`,children:e.Variable_name}),(0,w.jsx)(l,{className:`font-mono text-xs`,children:e.Value})]},e.Variable_name))})]})})}),(0,w.jsx)(y,{children:(0,w.jsx)(p,{variant:`outline`,onClick:()=>M(!1),children:e(`command.close`)})})]})})}export{D as StatusDialog};
1
+ import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{C as r,S as i,b as a,j as o,u as s,w as c,x as l,y as u}from"./main-BLydvBDF.js";import{l as d,m as f,t as p}from"./button--s6nUzD8.js";import{a as m}from"./i18n-57fo5jb0.js";import{t as h}from"./connection-store-N-ZwIkVg.js";import{c as g}from"./database-CpQt6YGv.js";import{t as _}from"./engine-CpwlM_Ww.js";import{a as v,i as y,n as b,o as x,t as S}from"./dialog-CJoWJzRo.js";var C=n(e(),1),w=d();function T(){let e=h.getState();return e.activeConnections.find(t=>t.id===e.activeConnectionId)?.serverConnectionId??null}async function E(e){let t=T();if(!t)throw Error(m.t(`command.noActiveConnection`));let n=_().getQuery(e===`global`?`SHOW_GLOBAL_STATUS`:`SHOW_SESSION_STATUS`);return(await g(t,n)).records.map(e=>({Variable_name:e[0],Value:e[1]}))}function D(){let{t:e}=f(),{activeDialog:n,closeDialog:d,setFooterMessage:m}=t(),[h,g]=(0,C.useState)([]),[_,T]=(0,C.useState)(``),[D,O]=(0,C.useState)(`session`),k=n===`status`,A=(0,C.useCallback)(t=>E(t).then(g).catch(t=>m(e(`command.status.loadError`,{message:t instanceof Error?t.message:String(t)}))),[m,e]);(0,C.useEffect)(()=>{k&&A(D)},[k,D,A]);let j=(0,C.useMemo)(()=>{if(!_.trim())return h;let e=_.toLowerCase();return h.filter(t=>t.Variable_name.toLowerCase().includes(e)||t.Value.toLowerCase().includes(e))},[h,_]);function M(e){e||(T(``),d())}function N(e){O(e)}return(0,w.jsx)(S,{open:k,onOpenChange:M,children:(0,w.jsxs)(b,{className:`sm:max-w-[900px] max-h-[80vh] flex flex-col`,children:[(0,w.jsx)(v,{children:(0,w.jsx)(x,{children:e(`command.status.title`)})}),(0,w.jsxs)(`div`,{className:`flex items-center gap-3 pb-2`,children:[(0,w.jsxs)(`div`,{className:`flex gap-1`,children:[(0,w.jsx)(p,{variant:D===`session`?`default`:`outline`,size:`sm`,onClick:()=>N(`session`),children:e(`command.scope.session`)}),(0,w.jsx)(p,{variant:D===`global`?`default`:`outline`,size:`sm`,onClick:()=>N(`global`),children:e(`command.scope.global`)})]}),(0,w.jsx)(s,{placeholder:e(`command.status.filterPlaceholder`),value:_,onChange:e=>T(e.target.value),className:`max-w-xs`})]}),(0,w.jsx)(`div`,{className:`flex-1 border rounded-md overflow-hidden min-h-0`,children:(0,w.jsx)(o,{className:`h-[400px]`,children:(0,w.jsxs)(u,{children:[(0,w.jsx)(r,{children:(0,w.jsxs)(c,{children:[(0,w.jsx)(i,{className:`w-[300px]`,children:e(`command.variableName`)}),(0,w.jsx)(i,{children:e(`command.value`)})]})}),(0,w.jsx)(a,{children:j.length===0?(0,w.jsx)(c,{children:(0,w.jsx)(l,{colSpan:2,className:`text-center text-muted-foreground`,children:e(`command.status.empty`)})}):j.map(e=>(0,w.jsxs)(c,{children:[(0,w.jsx)(l,{className:`font-mono text-xs`,children:e.Variable_name}),(0,w.jsx)(l,{className:`font-mono text-xs`,children:e.Value})]},e.Variable_name))})]})})}),(0,w.jsx)(y,{children:(0,w.jsx)(p,{variant:`outline`,onClick:()=>M(!1),children:e(`command.close`)})})]})})}export{D as StatusDialog};
@@ -0,0 +1 @@
1
+ import{n as e}from"./ui-store-DfspmPOn.js";import{l as t,m as n,t as r}from"./button--s6nUzD8.js";import"./settings-store-WUA0-UcP.js";import{a as i,i as a,n as o,o as s,r as c,t as l}from"./dialog-CJoWJzRo.js";var u=t(),d=[{title:`1. Acceptance`,body:`By using Planche (the "Software"), whether at planche.dev or through the local agent published as the "planche" npm package, you agree to these Terms of Use. If you do not agree, do not use the Software.`},{title:`2. What the Software does`,body:`Planche is a database client. It sends the SQL statements you write, and the statements generated from your actions (editing rows in the grid, dropping or truncating objects from the schema tree, and similar), to the databases you connect to. Statements are executed as-is with the privileges of the credentials you provide. You are solely responsible for every statement executed through the Software and for its effects on your data.`},{title:`3. Safeguards`,body:`The Software includes safeguards such as confirmation prompts for destructive statements, read-only connections, environment colors, manual transaction mode, and previews of generated UPDATE statements. These are conveniences, not guarantees. They can be disabled, bypassed, or fail to recognize a statement as destructive. Keep independent backups of any data you care about before running statements against it.`},{title:`4. Local processing and privacy`,body:`Database credentials, queries, and results are handled by the local agent on your machine and by your browser. They are not transmitted to the authors of the Software. Profiles, history, and settings are stored in your browser's local storage; you may remove them at any time by clearing site data. The hosted app at planche.dev sends anonymous usage statistics (which database engine and features are used, what kind of statement was run — never SQL text, host names, or database, table, user or file names) to Google Analytics; you can turn this off under Settings > Safety.`},{title:`5. No warranty`,body:`THE SOFTWARE IS PROVIDED "AS IS" AND "AS AVAILABLE", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, AND NON-INFRINGEMENT. The authors do not warrant that the Software will be error-free, that it will correctly parse or classify every statement, or that it will be available without interruption.`},{title:`6. Limitation of liability`,body:`TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE AUTHORS SHALL NOT BE LIABLE FOR ANY LOSS OF DATA, LOSS OF PROFITS, BUSINESS INTERRUPTION, OR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES ARISING OUT OF OR RELATED TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Where liability cannot be excluded, it is limited to the amount you paid for the Software in the twelve months preceding the claim. Nothing in these terms limits liability that cannot be limited under applicable law, including for wilful misconduct or gross negligence.`},{title:`7. Your responsibilities`,body:`You are responsible for having the right to access each database you connect to, for the safekeeping of your credentials, and for complying with the laws and policies that apply to the data you work with.`},{title:`8. Changes`,body:`These terms may be updated. When they change materially, you will be asked to accept the new version before continuing to use the Software. Continued use after acceptance constitutes agreement to the updated terms.`}];function f(){let t=e(e=>e.activeDialog),f=e(e=>e.closeDialog),{t:p}=n();return(0,u.jsx)(l,{open:t===`terms`,onOpenChange:e=>{e||f()},children:(0,u.jsxs)(o,{className:`flex max-h-[85vh] flex-col sm:max-w-[640px]`,children:[(0,u.jsxs)(i,{children:[(0,u.jsx)(s,{children:p(`terms.title`)}),(0,u.jsx)(c,{children:p(`terms.version`,{version:1})})]}),(0,u.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-auto rounded-md border bg-muted/40 p-4 text-sm`,children:[(0,u.jsx)(`p`,{className:`mb-3 text-xs text-muted-foreground`,children:p(`terms.englishOnly`)}),d.map(e=>(0,u.jsxs)(`section`,{className:`mb-4 last:mb-0`,children:[(0,u.jsx)(`h3`,{className:`mb-1 font-semibold`,children:e.title}),(0,u.jsx)(`p`,{className:`leading-relaxed text-muted-foreground`,children:e.body})]},e.title))]}),(0,u.jsx)(a,{children:(0,u.jsx)(r,{onClick:f,children:p(`settings.done`)})})]})})}export{f as TermsDialog};
@@ -1 +1 @@
1
- import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{l as r,u as i}from"./main-DLYTmffu.js";import{l as a,m as o,t as s}from"./button--s6nUzD8.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-BMtc6vRo.js";import{t as p}from"./connection-store-DjSajhjh.js";import{a as m,i as h,n as g,o as _,t as v}from"./dialog-CJoWJzRo.js";import{n as y}from"./user-store-l9ZslFwK.js";var b=n(e(),1),x=a();function S(){let{t:e}=o(),{activeDialog:n,closeDialog:a,setFooterMessage:S}=t(),C=p(e=>e.activeConnectionId)??``,w=y(e=>e.addUser),[T,E]=(0,b.useState)(``),[D,O]=(0,b.useState)(`%`),[k,A]=(0,b.useState)(``),[j,M]=(0,b.useState)(``),[N,P]=(0,b.useState)(`caching_sha2_password`),F=n===`user-add`;function I(e){e||(L(),a())}function L(){E(``),O(`%`),A(``),M(``),P(`caching_sha2_password`)}function R(){if(!T.trim()){S(e(`user.add.usernameRequired`));return}if(k!==j){S(e(`user.add.passwordMismatch`));return}w(C,{user:T.trim(),host:D.trim()||`%`,privileges:[],maxQuestions:0,maxUpdates:0,maxConnections:0,maxUserConnections:0,plugin:N,authenticationString:``,passwordExpired:!1,accountLocked:!1}),S(e(`user.add.added`,{user:T,host:D})),L(),a()}return(0,x.jsx)(v,{open:F,onOpenChange:I,children:(0,x.jsxs)(g,{className:`sm:max-w-[450px]`,children:[(0,x.jsx)(m,{children:(0,x.jsx)(_,{children:e(`user.add.title`)})}),(0,x.jsxs)(`div`,{className:`space-y-4 py-2`,children:[(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{htmlFor:`user-add-username`,children:e(`user.add.username`)}),(0,x.jsx)(i,{id:`user-add-username`,value:T,onChange:e=>E(e.target.value),placeholder:e(`user.add.usernamePlaceholder`)})]}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{htmlFor:`user-add-host`,children:e(`user.add.host`)}),(0,x.jsx)(i,{id:`user-add-host`,value:D,onChange:e=>O(e.target.value),placeholder:`%`})]}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{htmlFor:`user-add-password`,children:e(`user.add.password`)}),(0,x.jsx)(i,{id:`user-add-password`,type:`password`,value:k,onChange:e=>A(e.target.value),placeholder:e(`user.add.passwordPlaceholder`)})]}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{htmlFor:`user-add-confirm-password`,children:e(`user.add.confirmPassword`)}),(0,x.jsx)(i,{id:`user-add-confirm-password`,type:`password`,value:j,onChange:e=>M(e.target.value),placeholder:e(`user.add.confirmPasswordPlaceholder`)})]}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{children:e(`user.add.plugin`)}),(0,x.jsxs)(f,{value:N,onValueChange:P,children:[(0,x.jsx)(l,{className:`w-full`,children:(0,x.jsx)(c,{})}),(0,x.jsxs)(u,{children:[(0,x.jsx)(d,{value:`mysql_native_password`,children:`mysql_native_password`}),(0,x.jsx)(d,{value:`caching_sha2_password`,children:`caching_sha2_password`})]})]})]})]}),(0,x.jsxs)(h,{children:[(0,x.jsx)(s,{variant:`outline`,onClick:()=>I(!1),children:e(`user.add.cancel`)}),(0,x.jsx)(s,{onClick:R,children:e(`user.add.add`)})]})]})})}export{S as UserAddDialog};
1
+ import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{l as r,u as i}from"./main-BLydvBDF.js";import{l as a,m as o,t as s}from"./button--s6nUzD8.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-ibmUj7AE.js";import{t as p}from"./connection-store-N-ZwIkVg.js";import{a as m,i as h,n as g,o as _,t as v}from"./dialog-CJoWJzRo.js";import{n as y}from"./user-store-l9ZslFwK.js";var b=n(e(),1),x=a();function S(){let{t:e}=o(),{activeDialog:n,closeDialog:a,setFooterMessage:S}=t(),C=p(e=>e.activeConnectionId)??``,w=y(e=>e.addUser),[T,E]=(0,b.useState)(``),[D,O]=(0,b.useState)(`%`),[k,A]=(0,b.useState)(``),[j,M]=(0,b.useState)(``),[N,P]=(0,b.useState)(`caching_sha2_password`),F=n===`user-add`;function I(e){e||(L(),a())}function L(){E(``),O(`%`),A(``),M(``),P(`caching_sha2_password`)}function R(){if(!T.trim()){S(e(`user.add.usernameRequired`));return}if(k!==j){S(e(`user.add.passwordMismatch`));return}w(C,{user:T.trim(),host:D.trim()||`%`,privileges:[],maxQuestions:0,maxUpdates:0,maxConnections:0,maxUserConnections:0,plugin:N,authenticationString:``,passwordExpired:!1,accountLocked:!1}),S(e(`user.add.added`,{user:T,host:D})),L(),a()}return(0,x.jsx)(v,{open:F,onOpenChange:I,children:(0,x.jsxs)(g,{className:`sm:max-w-[450px]`,children:[(0,x.jsx)(m,{children:(0,x.jsx)(_,{children:e(`user.add.title`)})}),(0,x.jsxs)(`div`,{className:`space-y-4 py-2`,children:[(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{htmlFor:`user-add-username`,children:e(`user.add.username`)}),(0,x.jsx)(i,{id:`user-add-username`,value:T,onChange:e=>E(e.target.value),placeholder:e(`user.add.usernamePlaceholder`)})]}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{htmlFor:`user-add-host`,children:e(`user.add.host`)}),(0,x.jsx)(i,{id:`user-add-host`,value:D,onChange:e=>O(e.target.value),placeholder:`%`})]}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{htmlFor:`user-add-password`,children:e(`user.add.password`)}),(0,x.jsx)(i,{id:`user-add-password`,type:`password`,value:k,onChange:e=>A(e.target.value),placeholder:e(`user.add.passwordPlaceholder`)})]}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{htmlFor:`user-add-confirm-password`,children:e(`user.add.confirmPassword`)}),(0,x.jsx)(i,{id:`user-add-confirm-password`,type:`password`,value:j,onChange:e=>M(e.target.value),placeholder:e(`user.add.confirmPasswordPlaceholder`)})]}),(0,x.jsxs)(`div`,{className:`space-y-2`,children:[(0,x.jsx)(r,{children:e(`user.add.plugin`)}),(0,x.jsxs)(f,{value:N,onValueChange:P,children:[(0,x.jsx)(l,{className:`w-full`,children:(0,x.jsx)(c,{})}),(0,x.jsxs)(u,{children:[(0,x.jsx)(d,{value:`mysql_native_password`,children:`mysql_native_password`}),(0,x.jsx)(d,{value:`caching_sha2_password`,children:`caching_sha2_password`})]})]})]})]}),(0,x.jsxs)(h,{children:[(0,x.jsx)(s,{variant:`outline`,onClick:()=>I(!1),children:e(`user.add.cancel`)}),(0,x.jsx)(s,{onClick:R,children:e(`user.add.add`)})]})]})})}export{S as UserAddDialog};
@@ -1 +1 @@
1
- import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{Q as r,X as i,dt as a,ht as o,j as s,l as c}from"./main-DLYTmffu.js";import{a as l,l as u,m as d,o as f,t as p}from"./button--s6nUzD8.js";import{t as m}from"./connection-store-DjSajhjh.js";import{a as h}from"./database-_lr1w6xK.js";import{i as g}from"./dbms-B9Zk7nEm.js";import{n as _}from"./engine-C2ZJalx5.js";import{c as v}from"./query-execution-DMUlIoF2.js";import{a as y,i as b,n as x,o as S,t as C}from"./dialog-CJoWJzRo.js";import{n as w,t as T}from"./user-store-l9ZslFwK.js";var E=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`}]]),D=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`}]]),O=n(e(),1),k=u();function A({databases:e,tables:t,onSelectScope:n}){let{t:i}=d(),[c,l]=(0,O.useState)(new Set),[u,p]=(0,O.useState)(`global`),m=(0,O.useCallback)(e=>{l(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),h=[{id:`global`,text:i(`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,i=c.has(e.id),s=u===e.id,l=E;return e.type===`database`&&(l=a),e.type===`table`&&(l=r),(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:f(`flex items-center gap-1 px-2 py-0.5 cursor-pointer text-sm hover:bg-accent rounded-sm`,s&&`bg-accent text-accent-foreground`),style:{paddingLeft:`${t*16+4}px`},onClick:()=>{g(e),n&&m(e.id)},children:[n?(0,k.jsx)(o,{className:f(`h-3 w-3 transition-transform shrink-0`,i&&`rotate-90`)}):(0,k.jsx)(`span`,{className:`w-3 shrink-0`}),(0,k.jsx)(l,{className:`h-4 w-4 text-muted-foreground shrink-0`}),(0,k.jsx)(`span`,{className:`truncate`,children:e.text})]}),i&&e.children?.map(e=>_(e,t+1))]},e.id)}return(0,k.jsx)(s,{className:`h-full`,children:(0,k.jsx)(`div`,{className:`py-1`,children:h.map(e=>_(e,0))})})}var j={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`]},M={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`]},N={Data:[`SELECT`,`INSERT`,`UPDATE`,`DELETE`],Structure:[`CREATE`,`ALTER`,`DROP`,`INDEX`,`REFERENCES`],Administration:[`GRANT OPTION`,`TRIGGER`]},P={global:`user.privileges.globalTitle`,database:`user.privileges.databaseTitle`,table:`user.privileges.tableTitle`},F={Data:`user.privileges.categoryData`,Structure:`user.privileges.categoryStructure`,Administration:`user.privileges.categoryAdministration`};function I({scope:e,privileges:t,onChange:n}){let{t:r}=d(),i=(0,O.useMemo)(()=>e===`global`?j:e===`database`?M:N,[e]),a=(0,O.useMemo)(()=>Object.values(i).flat(),[i]);function o(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,k.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 p-2 border-b`,children:[(0,k.jsx)(`span`,{className:`text-sm font-medium`,children:r(P[e])}),(0,k.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,k.jsx)(p,{variant:`outline`,size:`sm`,onClick:l,children:r(`user.privileges.checkAll`)}),(0,k.jsx)(p,{variant:`outline`,size:`sm`,onClick:u,children:r(`user.privileges.uncheckAll`)})]})]}),(0,k.jsx)(s,{className:`flex-1`,children:(0,k.jsx)(`div`,{className:`p-3 space-y-4`,children:Object.entries(i).map(([e,n])=>(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h4`,{className:`text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-2`,children:F[e]?r(F[e]):e}),(0,k.jsx)(`div`,{className:`grid grid-cols-2 gap-1`,children:n.map(e=>(0,k.jsxs)(c,{className:`flex items-center gap-2 text-sm font-normal cursor-pointer py-1`,children:[(0,k.jsx)(`input`,{type:`checkbox`,checked:t[e]??!1,onChange:()=>o(e),className:`rounded border-input`}),e]},e))})]},e))})})]})}var L={SELECT:`Select_priv`,INSERT:`Insert_priv`,UPDATE:`Update_priv`,DELETE:`Delete_priv`,CREATE:`Create_priv`,ALTER:`Alter_priv`,DROP:`Drop_priv`,INDEX:`Index_priv`,REFERENCES:`References_priv`,"GRANT OPTION":`Grant_priv`,SUPER:`Super_priv`,PROCESS:`Process_priv`,RELOAD:`Reload_priv`,SHUTDOWN:`Shutdown_priv`,"SHOW DATABASES":`Show_db_priv`,"LOCK TABLES":`Lock_tables_priv`,EXECUTE:`Execute_priv`,"REPLICATION SLAVE":`Repl_slave_priv`,"REPLICATION CLIENT":`Repl_client_priv`,"CREATE VIEW":`Create_view_priv`,"SHOW VIEW":`Show_view_priv`,"CREATE ROUTINE":`Create_routine_priv`,"ALTER ROUTINE":`Alter_routine_priv`,"CREATE USER":`Create_user_priv`,EVENT:`Event_priv`,TRIGGER:`Trigger_priv`,"CREATE TABLESPACE":`Create_tablespace_priv`,"CREATE TEMPORARY TABLES":`Create_tmp_table_priv`,FILE:`File_priv`};function R(e){let t={};for(let n of e.split(`,`)){let e=n.trim().toUpperCase();e&&(t[e]=!0)}return t}function z(e){let t={};for(let[n,r]of Object.entries(L)){let i=e[r];i!==void 0&&(t[n]=String(i).toUpperCase()===`Y`)}return t}function B(e,t){let n=t=>e.quoteIdentifier(t);return t.level===`global`?`*.*`:t.level===`database`?`${n(t.database??``)}.*`:`${n(t.database??``)}.${n(t.table??``)}`}async function V(e,t,n,r,i){if(i.level===`global`){let i=await e(t.getQuery(`USER_PRIV`,n,r)),a=g(i)[0];return a?z(a):{}}if(i.level===`database`){let a=await e(t.getQuery(`USER_DATABASE_PRIV`,n,r)),o=g(a).find(e=>String(e.Db)===i.database);return o?z(o):{}}let a=await e(t.getQuery(`USER_TABLE_PRIV`,n,r)),o=g(a).find(e=>String(e.Db)===i.database&&String(e.Table_name)===i.table);return o?R(String(o.Table_priv??``)):{}}function H(e,t,n,r,i,a){let o=B(e,r),s=[],c=[],l=null;for(let e of new Set([...Object.keys(i),...Object.keys(a)])){let t=i[e]===!0,n=a[e]===!0;if(t!==n){if(e===`GRANT OPTION`){l=n;continue}(n?s:c).push(e)}}let u=[];if(s.length>0||l===!0){let r=s.length>0?s.join(`, `):`USAGE`;u.push(e.getQuery(`GRANT`,r,t,n,o,l===!0?`WITH GRANT OPTION`:``))}return c.length>0&&u.push(e.getQuery(`REVOKE`,c.join(`, `),t,n,o)),l===!1&&u.push(e.getQuery(`REVOKE`,`GRANT OPTION`,t,n,o)),u}function U(e){return m.getState().activeConnections.find(t=>t.id===e)?.serverConnectionId??null}function W(){let{t:e}=d(),{activeDialog:n,closeDialog:r,openDialog:a,setFooterMessage:o}=t(),c=m(e=>e.activeConnectionId)??``,l=w(e=>e.users[c]??T),u=w(e=>e.selectedUser[c]??null),g=w(e=>e.setSelectedUser),E=w(e=>e.removeUser),j=e=>g(c,e),M=(e,t)=>E(c,e,t),[N,P]=(0,O.useState)({level:`global`}),[F,L]=(0,O.useState)({}),[R,z]=(0,O.useState)([]),[B,W]=(0,O.useState)({}),[G,K]=(0,O.useState)({}),[q,J]=(0,O.useState)(!1),Y=n===`user-manager`;(0,O.useEffect)(()=>{if(!Y||!c)return;let e=U(c);if(!e)return;let t=!1;return _(c).introspect.listDatabases(h(e)).then(e=>{t||z(e)}).catch(()=>{t||z([])}),()=>{t=!0}},[Y,c]),(0,O.useEffect)(()=>{let e=N.database;if(!Y||!c||!e||B[e])return;let t=U(c);if(!t)return;let n=!1;return _(c).introspect.listTables(h(t),e).then(t=>{n||W(n=>({...n,[e]:t.map(e=>e.name)}))}).catch(()=>void 0),()=>{n=!0}},[Y,c,N.database,B]),(0,O.useEffect)(()=>{if(!Y||!c||!u){K({}),L({});return}let e=U(c);if(!e)return;let t=!1;return V(h(e),_(c),u.user,u.host,N).then(e=>{t||(K(e),L(e))}).catch(()=>{t||(K({}),L({}))}),()=>{t=!0}},[Y,c,u,N]);function X(e){e||(r(),j(null),P({level:`global`}),L({}))}let Z=(0,O.useCallback)(e=>{P(e),L({})},[]);function Q(){a(`user-add`)}async function $(){if(!u||!c)return;let{user:t,host:n}=u;J(!0);try{await v(c,_(c).getQuery(`DELETE_USER`,t,n)),M(n,t),j(null),o(e(`user.manager.removed`,{user:t,host:n}))}catch(e){o(e instanceof Error?e.message:String(e))}finally{J(!1)}}async function ee(){if(!u||!c){o(e(`user.manager.selectUserFirst`));return}let t=H(_(c),u.user,u.host,N,G,F);if(t.length===0){o(e(`user.manager.noChanges`));return}J(!0);try{for(let e of t)await v(c,e);K(F),o(e(`user.manager.applied`))}catch(e){o(e instanceof Error?e.message:String(e))}finally{J(!1)}}return(0,k.jsx)(C,{open:Y,onOpenChange:X,children:(0,k.jsxs)(x,{className:`sm:max-w-[80vw] max-h-[70vh] flex flex-col`,children:[(0,k.jsx)(y,{children:(0,k.jsx)(S,{children:e(`user.manager.title`)})}),(0,k.jsxs)(`div`,{className:`flex flex-1 gap-0 overflow-hidden min-h-0 border rounded-md`,children:[(0,k.jsxs)(`div`,{className:`w-[200px] shrink-0 border-r flex flex-col`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-1 p-2 border-b`,children:[(0,k.jsx)(p,{variant:`ghost`,size:`sm`,onClick:Q,title:e(`user.manager.addUser`),children:(0,k.jsx)(D,{className:`h-4 w-4`})}),(0,k.jsx)(p,{variant:`ghost`,size:`sm`,onClick:()=>void $(),disabled:!u||q,title:e(`user.manager.removeUser`),children:(0,k.jsx)(i,{className:`h-4 w-4`})})]}),(0,k.jsx)(s,{className:`flex-1`,children:(0,k.jsx)(`div`,{className:`py-1`,children:l.length===0?(0,k.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,k.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:()=>j(e),children:(0,k.jsxs)(`span`,{className:`truncate`,children:[e.user,`@`,e.host]})},`${e.user}@${e.host}`)})})})]}),(0,k.jsxs)(`div`,{className:`w-[250px] shrink-0 border-r`,children:[(0,k.jsx)(`div`,{className:`p-2 border-b text-sm font-medium`,children:e(`user.manager.grantScope`)}),(0,k.jsx)(A,{connectionId:``,databases:R,tables:B,onSelectScope:Z})]}),(0,k.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,k.jsx)(I,{scope:N.level,privileges:F,onChange:L})})]}),(0,k.jsxs)(b,{children:[(0,k.jsx)(p,{onClick:()=>void ee(),disabled:q,children:e(`user.manager.apply`)}),(0,k.jsx)(p,{variant:`outline`,onClick:()=>X(!1),children:e(`user.manager.close`)})]})]})})}export{W as UserManagerDialog};
1
+ import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{$ as r,Z as i,_t as a,j as o,l as s,pt as c}from"./main-BLydvBDF.js";import{a as l,l as u,m as d,o as f,t as p}from"./button--s6nUzD8.js";import{t as m}from"./connection-store-N-ZwIkVg.js";import{a as h}from"./database-CpQt6YGv.js";import{i as g}from"./dbms-BwnatOMe.js";import{n as _}from"./engine-CpwlM_Ww.js";import{c as v}from"./query-execution-4-JHu9gp.js";import{a as y,i as b,n as x,o as S,t as C}from"./dialog-CJoWJzRo.js";import{n as w,t as T}from"./user-store-l9ZslFwK.js";var E=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`}]]),D=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`}]]),O=n(e(),1),k=u();function A({databases:e,tables:t,onSelectScope:n}){let{t:i}=d(),[s,l]=(0,O.useState)(new Set),[u,p]=(0,O.useState)(`global`),m=(0,O.useCallback)(e=>{l(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),h=[{id:`global`,text:i(`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,i=s.has(e.id),o=u===e.id,l=E;return e.type===`database`&&(l=c),e.type===`table`&&(l=r),(0,k.jsxs)(`div`,{children:[(0,k.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,k.jsx)(a,{className:f(`h-3 w-3 transition-transform shrink-0`,i&&`rotate-90`)}):(0,k.jsx)(`span`,{className:`w-3 shrink-0`}),(0,k.jsx)(l,{className:`h-4 w-4 text-muted-foreground shrink-0`}),(0,k.jsx)(`span`,{className:`truncate`,children:e.text})]}),i&&e.children?.map(e=>_(e,t+1))]},e.id)}return(0,k.jsx)(o,{className:`h-full`,children:(0,k.jsx)(`div`,{className:`py-1`,children:h.map(e=>_(e,0))})})}var j={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`]},M={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`]},N={Data:[`SELECT`,`INSERT`,`UPDATE`,`DELETE`],Structure:[`CREATE`,`ALTER`,`DROP`,`INDEX`,`REFERENCES`],Administration:[`GRANT OPTION`,`TRIGGER`]},P={global:`user.privileges.globalTitle`,database:`user.privileges.databaseTitle`,table:`user.privileges.tableTitle`},F={Data:`user.privileges.categoryData`,Structure:`user.privileges.categoryStructure`,Administration:`user.privileges.categoryAdministration`};function I({scope:e,privileges:t,onChange:n}){let{t:r}=d(),i=(0,O.useMemo)(()=>e===`global`?j:e===`database`?M:N,[e]),a=(0,O.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,k.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 p-2 border-b`,children:[(0,k.jsx)(`span`,{className:`text-sm font-medium`,children:r(P[e])}),(0,k.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,k.jsx)(p,{variant:`outline`,size:`sm`,onClick:l,children:r(`user.privileges.checkAll`)}),(0,k.jsx)(p,{variant:`outline`,size:`sm`,onClick:u,children:r(`user.privileges.uncheckAll`)})]})]}),(0,k.jsx)(o,{className:`flex-1`,children:(0,k.jsx)(`div`,{className:`p-3 space-y-4`,children:Object.entries(i).map(([e,n])=>(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h4`,{className:`text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-2`,children:F[e]?r(F[e]):e}),(0,k.jsx)(`div`,{className:`grid grid-cols-2 gap-1`,children:n.map(e=>(0,k.jsxs)(s,{className:`flex items-center gap-2 text-sm font-normal cursor-pointer py-1`,children:[(0,k.jsx)(`input`,{type:`checkbox`,checked:t[e]??!1,onChange:()=>c(e),className:`rounded border-input`}),e]},e))})]},e))})})]})}var L={SELECT:`Select_priv`,INSERT:`Insert_priv`,UPDATE:`Update_priv`,DELETE:`Delete_priv`,CREATE:`Create_priv`,ALTER:`Alter_priv`,DROP:`Drop_priv`,INDEX:`Index_priv`,REFERENCES:`References_priv`,"GRANT OPTION":`Grant_priv`,SUPER:`Super_priv`,PROCESS:`Process_priv`,RELOAD:`Reload_priv`,SHUTDOWN:`Shutdown_priv`,"SHOW DATABASES":`Show_db_priv`,"LOCK TABLES":`Lock_tables_priv`,EXECUTE:`Execute_priv`,"REPLICATION SLAVE":`Repl_slave_priv`,"REPLICATION CLIENT":`Repl_client_priv`,"CREATE VIEW":`Create_view_priv`,"SHOW VIEW":`Show_view_priv`,"CREATE ROUTINE":`Create_routine_priv`,"ALTER ROUTINE":`Alter_routine_priv`,"CREATE USER":`Create_user_priv`,EVENT:`Event_priv`,TRIGGER:`Trigger_priv`,"CREATE TABLESPACE":`Create_tablespace_priv`,"CREATE TEMPORARY TABLES":`Create_tmp_table_priv`,FILE:`File_priv`};function R(e){let t={};for(let n of e.split(`,`)){let e=n.trim().toUpperCase();e&&(t[e]=!0)}return t}function z(e){let t={};for(let[n,r]of Object.entries(L)){let i=e[r];i!==void 0&&(t[n]=String(i).toUpperCase()===`Y`)}return t}function B(e,t){let n=t=>e.quoteIdentifier(t);return t.level===`global`?`*.*`:t.level===`database`?`${n(t.database??``)}.*`:`${n(t.database??``)}.${n(t.table??``)}`}async function V(e,t,n,r,i){if(i.level===`global`){let i=await e(t.getQuery(`USER_PRIV`,n,r)),a=g(i)[0];return a?z(a):{}}if(i.level===`database`){let a=await e(t.getQuery(`USER_DATABASE_PRIV`,n,r)),o=g(a).find(e=>String(e.Db)===i.database);return o?z(o):{}}let a=await e(t.getQuery(`USER_TABLE_PRIV`,n,r)),o=g(a).find(e=>String(e.Db)===i.database&&String(e.Table_name)===i.table);return o?R(String(o.Table_priv??``)):{}}function H(e,t,n,r,i,a){let o=B(e,r),s=[],c=[],l=null;for(let e of new Set([...Object.keys(i),...Object.keys(a)])){let t=i[e]===!0,n=a[e]===!0;if(t!==n){if(e===`GRANT OPTION`){l=n;continue}(n?s:c).push(e)}}let u=[];if(s.length>0||l===!0){let r=s.length>0?s.join(`, `):`USAGE`;u.push(e.getQuery(`GRANT`,r,t,n,o,l===!0?`WITH GRANT OPTION`:``))}return c.length>0&&u.push(e.getQuery(`REVOKE`,c.join(`, `),t,n,o)),l===!1&&u.push(e.getQuery(`REVOKE`,`GRANT OPTION`,t,n,o)),u}function U(e){return m.getState().activeConnections.find(t=>t.id===e)?.serverConnectionId??null}function W(){let{t:e}=d(),{activeDialog:n,closeDialog:r,openDialog:a,setFooterMessage:s}=t(),c=m(e=>e.activeConnectionId)??``,l=w(e=>e.users[c]??T),u=w(e=>e.selectedUser[c]??null),g=w(e=>e.setSelectedUser),E=w(e=>e.removeUser),j=e=>g(c,e),M=(e,t)=>E(c,e,t),[N,P]=(0,O.useState)({level:`global`}),[F,L]=(0,O.useState)({}),[R,z]=(0,O.useState)([]),[B,W]=(0,O.useState)({}),[G,K]=(0,O.useState)({}),[q,J]=(0,O.useState)(!1),Y=n===`user-manager`;(0,O.useEffect)(()=>{if(!Y||!c)return;let e=U(c);if(!e)return;let t=!1;return _(c).introspect.listDatabases(h(e)).then(e=>{t||z(e)}).catch(()=>{t||z([])}),()=>{t=!0}},[Y,c]),(0,O.useEffect)(()=>{let e=N.database;if(!Y||!c||!e||B[e])return;let t=U(c);if(!t)return;let n=!1;return _(c).introspect.listTables(h(t),e).then(t=>{n||W(n=>({...n,[e]:t.map(e=>e.name)}))}).catch(()=>void 0),()=>{n=!0}},[Y,c,N.database,B]),(0,O.useEffect)(()=>{if(!Y||!c||!u){K({}),L({});return}let e=U(c);if(!e)return;let t=!1;return V(h(e),_(c),u.user,u.host,N).then(e=>{t||(K(e),L(e))}).catch(()=>{t||(K({}),L({}))}),()=>{t=!0}},[Y,c,u,N]);function X(e){e||(r(),j(null),P({level:`global`}),L({}))}let Z=(0,O.useCallback)(e=>{P(e),L({})},[]);function Q(){a(`user-add`)}async function $(){if(!u||!c)return;let{user:t,host:n}=u;J(!0);try{await v(c,_(c).getQuery(`DELETE_USER`,t,n)),M(n,t),j(null),s(e(`user.manager.removed`,{user:t,host:n}))}catch(e){s(e instanceof Error?e.message:String(e))}finally{J(!1)}}async function ee(){if(!u||!c){s(e(`user.manager.selectUserFirst`));return}let t=H(_(c),u.user,u.host,N,G,F);if(t.length===0){s(e(`user.manager.noChanges`));return}J(!0);try{for(let e of t)await v(c,e);K(F),s(e(`user.manager.applied`))}catch(e){s(e instanceof Error?e.message:String(e))}finally{J(!1)}}return(0,k.jsx)(C,{open:Y,onOpenChange:X,children:(0,k.jsxs)(x,{className:`sm:max-w-[80vw] max-h-[70vh] flex flex-col`,children:[(0,k.jsx)(y,{children:(0,k.jsx)(S,{children:e(`user.manager.title`)})}),(0,k.jsxs)(`div`,{className:`flex flex-1 gap-0 overflow-hidden min-h-0 border rounded-md`,children:[(0,k.jsxs)(`div`,{className:`w-[200px] shrink-0 border-r flex flex-col`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-1 p-2 border-b`,children:[(0,k.jsx)(p,{variant:`ghost`,size:`sm`,onClick:Q,title:e(`user.manager.addUser`),children:(0,k.jsx)(D,{className:`h-4 w-4`})}),(0,k.jsx)(p,{variant:`ghost`,size:`sm`,onClick:()=>void $(),disabled:!u||q,title:e(`user.manager.removeUser`),children:(0,k.jsx)(i,{className:`h-4 w-4`})})]}),(0,k.jsx)(o,{className:`flex-1`,children:(0,k.jsx)(`div`,{className:`py-1`,children:l.length===0?(0,k.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,k.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:()=>j(e),children:(0,k.jsxs)(`span`,{className:`truncate`,children:[e.user,`@`,e.host]})},`${e.user}@${e.host}`)})})})]}),(0,k.jsxs)(`div`,{className:`w-[250px] shrink-0 border-r`,children:[(0,k.jsx)(`div`,{className:`p-2 border-b text-sm font-medium`,children:e(`user.manager.grantScope`)}),(0,k.jsx)(A,{connectionId:``,databases:R,tables:B,onSelectScope:Z})]}),(0,k.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,k.jsx)(I,{scope:N.level,privileges:F,onChange:L})})]}),(0,k.jsxs)(b,{children:[(0,k.jsx)(p,{onClick:()=>void ee(),disabled:q,children:e(`user.manager.apply`)}),(0,k.jsx)(p,{variant:`outline`,onClick:()=>X(!1),children:e(`user.manager.close`)})]})]})})}export{W as UserManagerDialog};
@@ -1 +1 @@
1
- import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{C as r,S as i,b as a,j as o,u as s,w as c,x as l,y as u}from"./main-DLYTmffu.js";import{l as d,m as f,t as p}from"./button--s6nUzD8.js";import{a as m}from"./i18n-XcmivDWI.js";import{t as h}from"./connection-store-DjSajhjh.js";import{c as g}from"./database-_lr1w6xK.js";import{t as _}from"./engine-C2ZJalx5.js";import{a as v,i as y,n as b,o as x,t as S}from"./dialog-CJoWJzRo.js";var C=n(e(),1),w=d();function T(){let e=h.getState();return e.activeConnections.find(t=>t.id===e.activeConnectionId)?.serverConnectionId??null}async function E(e){let t=T();if(!t)throw Error(m.t(`command.noActiveConnection`));let n=_().getQuery(e===`global`?`SHOW_GLOBAL_VARIABLES`:`SHOW_SESSION_VARIABLES`);return(await g(t,n)).records.map(e=>({Variable_name:e[0],Value:e[1]}))}function D(){let{t:e}=f(),{activeDialog:n,closeDialog:d,setFooterMessage:m}=t(),[h,g]=(0,C.useState)([]),[_,T]=(0,C.useState)(``),[D,O]=(0,C.useState)(`session`),k=n===`variables`,A=(0,C.useCallback)(t=>E(t).then(g).catch(t=>m(e(`command.variables.loadError`,{message:t instanceof Error?t.message:String(t)}))),[m,e]);(0,C.useEffect)(()=>{k&&A(D)},[k,D,A]);let j=(0,C.useMemo)(()=>{if(!_.trim())return h;let e=_.toLowerCase();return h.filter(t=>t.Variable_name.toLowerCase().includes(e)||t.Value.toLowerCase().includes(e))},[h,_]);function M(e){e||(T(``),d())}function N(e){O(e)}return(0,w.jsx)(S,{open:k,onOpenChange:M,children:(0,w.jsxs)(b,{className:`sm:max-w-[900px] max-h-[80vh] flex flex-col`,children:[(0,w.jsx)(v,{children:(0,w.jsx)(x,{children:e(`command.variables.title`)})}),(0,w.jsxs)(`div`,{className:`flex items-center gap-3 pb-2`,children:[(0,w.jsxs)(`div`,{className:`flex gap-1`,children:[(0,w.jsx)(p,{variant:D===`session`?`default`:`outline`,size:`sm`,onClick:()=>N(`session`),children:e(`command.scope.session`)}),(0,w.jsx)(p,{variant:D===`global`?`default`:`outline`,size:`sm`,onClick:()=>N(`global`),children:e(`command.scope.global`)})]}),(0,w.jsx)(s,{placeholder:e(`command.variables.filterPlaceholder`),value:_,onChange:e=>T(e.target.value),className:`max-w-xs`})]}),(0,w.jsx)(`div`,{className:`flex-1 border rounded-md overflow-hidden min-h-0`,children:(0,w.jsx)(o,{className:`h-[400px]`,children:(0,w.jsxs)(u,{children:[(0,w.jsx)(r,{children:(0,w.jsxs)(c,{children:[(0,w.jsx)(i,{className:`w-[300px]`,children:e(`command.variableName`)}),(0,w.jsx)(i,{children:e(`command.value`)})]})}),(0,w.jsx)(a,{children:j.length===0?(0,w.jsx)(c,{children:(0,w.jsx)(l,{colSpan:2,className:`text-center text-muted-foreground`,children:e(`command.variables.empty`)})}):j.map(e=>(0,w.jsxs)(c,{children:[(0,w.jsx)(l,{className:`font-mono text-xs`,children:e.Variable_name}),(0,w.jsx)(l,{className:`font-mono text-xs`,children:e.Value})]},e.Variable_name))})]})})}),(0,w.jsx)(y,{children:(0,w.jsx)(p,{variant:`outline`,onClick:()=>M(!1),children:e(`command.close`)})})]})})}export{D as VariablesDialog};
1
+ import{h as e,n as t,v as n}from"./ui-store-DfspmPOn.js";import{C as r,S as i,b as a,j as o,u as s,w as c,x as l,y as u}from"./main-BLydvBDF.js";import{l as d,m as f,t as p}from"./button--s6nUzD8.js";import{a as m}from"./i18n-57fo5jb0.js";import{t as h}from"./connection-store-N-ZwIkVg.js";import{c as g}from"./database-CpQt6YGv.js";import{t as _}from"./engine-CpwlM_Ww.js";import{a as v,i as y,n as b,o as x,t as S}from"./dialog-CJoWJzRo.js";var C=n(e(),1),w=d();function T(){let e=h.getState();return e.activeConnections.find(t=>t.id===e.activeConnectionId)?.serverConnectionId??null}async function E(e){let t=T();if(!t)throw Error(m.t(`command.noActiveConnection`));let n=_().getQuery(e===`global`?`SHOW_GLOBAL_VARIABLES`:`SHOW_SESSION_VARIABLES`);return(await g(t,n)).records.map(e=>({Variable_name:e[0],Value:e[1]}))}function D(){let{t:e}=f(),{activeDialog:n,closeDialog:d,setFooterMessage:m}=t(),[h,g]=(0,C.useState)([]),[_,T]=(0,C.useState)(``),[D,O]=(0,C.useState)(`session`),k=n===`variables`,A=(0,C.useCallback)(t=>E(t).then(g).catch(t=>m(e(`command.variables.loadError`,{message:t instanceof Error?t.message:String(t)}))),[m,e]);(0,C.useEffect)(()=>{k&&A(D)},[k,D,A]);let j=(0,C.useMemo)(()=>{if(!_.trim())return h;let e=_.toLowerCase();return h.filter(t=>t.Variable_name.toLowerCase().includes(e)||t.Value.toLowerCase().includes(e))},[h,_]);function M(e){e||(T(``),d())}function N(e){O(e)}return(0,w.jsx)(S,{open:k,onOpenChange:M,children:(0,w.jsxs)(b,{className:`sm:max-w-[900px] max-h-[80vh] flex flex-col`,children:[(0,w.jsx)(v,{children:(0,w.jsx)(x,{children:e(`command.variables.title`)})}),(0,w.jsxs)(`div`,{className:`flex items-center gap-3 pb-2`,children:[(0,w.jsxs)(`div`,{className:`flex gap-1`,children:[(0,w.jsx)(p,{variant:D===`session`?`default`:`outline`,size:`sm`,onClick:()=>N(`session`),children:e(`command.scope.session`)}),(0,w.jsx)(p,{variant:D===`global`?`default`:`outline`,size:`sm`,onClick:()=>N(`global`),children:e(`command.scope.global`)})]}),(0,w.jsx)(s,{placeholder:e(`command.variables.filterPlaceholder`),value:_,onChange:e=>T(e.target.value),className:`max-w-xs`})]}),(0,w.jsx)(`div`,{className:`flex-1 border rounded-md overflow-hidden min-h-0`,children:(0,w.jsx)(o,{className:`h-[400px]`,children:(0,w.jsxs)(u,{children:[(0,w.jsx)(r,{children:(0,w.jsxs)(c,{children:[(0,w.jsx)(i,{className:`w-[300px]`,children:e(`command.variableName`)}),(0,w.jsx)(i,{children:e(`command.value`)})]})}),(0,w.jsx)(a,{children:j.length===0?(0,w.jsx)(c,{children:(0,w.jsx)(l,{colSpan:2,className:`text-center text-muted-foreground`,children:e(`command.variables.empty`)})}):j.map(e=>(0,w.jsxs)(c,{children:[(0,w.jsx)(l,{className:`font-mono text-xs`,children:e.Variable_name}),(0,w.jsx)(l,{className:`font-mono text-xs`,children:e.Value})]},e.Variable_name))})]})})}),(0,w.jsx)(y,{children:(0,w.jsx)(p,{variant:`outline`,onClick:()=>M(!1),children:e(`command.close`)})})]})})}export{D as VariablesDialog};
@@ -0,0 +1 @@
1
+ import{c as e,h as t,i as n,l as r,r as i,s as a,v as o}from"./ui-store-DfspmPOn.js";import{i as s,n as c,o as l,s as u}from"./settings-store-WUA0-UcP.js";var d=()=>new Date().toISOString().slice(0,7);function f(e,t){let n=e?.month===t;return{total:(e?.total??0)+1,month:t,monthTotal:n?e.monthTotal+1:1}}var p=i()(u((e,t)=>({features:{},countFeatureUse:n=>{let r=f(t().features[n],d());return e(e=>({features:{...e.features,[n]:r}})),r}}),{name:`planche-usage`,storage:s()}));function m(t){let i=p.getState().countFeatureUse(t);e(`pro_feature_use`,{feature:t,uses:r(i.total),uses_this_month:r(i.monthTotal),first_use:i.total===1}),i.total===1&&a({pro_features:n(Object.keys(p.getState().features).length)})}var h=`planche-session-credentials`;function g(){try{let e=sessionStorage.getItem(h);return e?JSON.parse(e):{}}catch{return{}}}function _(e){try{sessionStorage.setItem(h,JSON.stringify(e))}catch{}}function v(e){return{pass:e.pass||void 0,sshPassword:e.ssh?.password||void 0,sshPassphrase:e.ssh?.passphrase||void 0,sshPrivateKey:e.ssh?.privateKey||void 0,authToken:e.authToken||void 0}}function y(e){let t={...e,pass:``,authToken:``};return e.ssh&&(t.ssh={...e.ssh,password:void 0,passphrase:void 0,privateKey:void 0}),t}function b(e,t){let n={...e,pass:e.pass||t.pass||``,authToken:e.authToken||t.authToken||``};return e.ssh&&(n.ssh={...e.ssh,password:e.ssh.password||t.sshPassword,passphrase:e.ssh.passphrase||t.sshPassphrase,privateKey:e.ssh.privateKey||t.sshPrivateKey}),n}function x(e,t){let n=g(),r=Object.fromEntries(Object.entries(t).filter(([,e])=>e));Object.keys(r).length?n[e]=r:delete n[e],_(n)}function S(e){let t=g()[e];if(t!==void 0)return typeof t==`string`?{pass:t}:t}function C(e){let t=g();delete t[e],_(t)}var w=o(t(),1);function T(e,t){let n=(0,w.useRef)(null),[r,i]=(0,w.useState)(null),a=(0,w.useCallback)(()=>{n.current=null,i(null)},[]),o=e=>{let t=e.currentTarget.getBoundingClientRect();return{before:e.clientX<t.left+t.width/2}};return{dragProps:(0,w.useCallback)(r=>({draggable:!0,onDragStart:e=>{n.current=r,e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,r)},onDragOver:t=>{if(!n.current||n.current===r)return;t.preventDefault(),t.dataTransfer.dropEffect=`move`;let{before:a}=o(t),s=e.indexOf(r),c=a?r:e[s+1]??`end`;i(e=>e===c?e:c)},onDrop:i=>{let s=n.current;if(!s||s===r)return a();i.preventDefault();let{before:c}=o(i),l=e.filter(e=>e!==s).indexOf(r);c||(l+=1),t(s,l),a()},onDragEnd:a}),[e,t,a]),dropIndicator:r,isDragging:()=>n.current!==null}}function E(e,t,n){let r=e.find(e=>e.id===t);if(!r)return e;let i=e.filter(e=>e.id!==t),a=Math.max(0,Math.min(n,i.length));return[...i.slice(0,a),r,...i.slice(a)]}var D=/--[^\n]*|\/\*[\s\S]*?\*\/|\$([A-Za-z_]\w*)?\$[\s\S]*?\$\1\$|'(?:[^']|'')*'|"(?:[^"]|"")*"|\[[^\]]*\]|[A-Za-z_][\w$#]*|\S/g,O=`'***'`,k=/((?:password|pwd)\s*=\s*)[^;'"]+/gi;function A(e){let t=[];for(let n of e.matchAll(D)){let e=n[0];if(e.startsWith(`--`)||e.startsWith(`/*`))continue;let r=e[0],i=r===`'`||r===`"`||r===`$`?`literal`:/[A-Za-z_]/.test(r)?`word`:`other`;t.push({text:e,start:n.index,end:n.index+e.length,kind:i})}return t}var j=e=>e?.kind===`word`?e.text.toUpperCase():``;function M(e){let t=A(e),n=[],r=e=>{!e||e.kind===`other`||n.push({start:e.start,end:e.end,text:e.kind===`literal`?O:`***`})},i=e=>{let n=t[e];return n?n.kind===`literal`?{token:n,span:1}:n.kind===`word`&&/^[NE]$/i.test(n.text)&&t[e+1]?.kind===`literal`?{token:t[e+1],span:2}:null:null};for(let e=0;e<t.length;e++){let a=t[e];if(a.kind===`literal`){k.test(a.text)&&(k.lastIndex=0,n.push({start:a.start,end:a.end,text:a.text.replace(k,`$1***`)})),k.lastIndex=0;continue}if(a.kind!==`word`)continue;let o=a.text.toUpperCase();if(o===`IDENTIFIED`){let n=e+1;if(j(t[n])===`WITH`&&(n+=2),j(t[n])!==`BY`&&j(t[n])!==`AS`||(n+=1,(j(t[n])===`PASSWORD`||j(t[n])===`VALUES`)&&(n+=1),j(t[n])===`RANDOM`))continue;let a=i(n);a?(r(a.token),n+=a.span):t[n]?.kind===`word`&&(r(t[n]),n+=1),j(t[n])===`REPLACE`&&r(i(n+1)?.token??t[n+1]);continue}if(o===`PASSWORD`){let n=e+1;if(t[n]?.text===`(`){r(i(n+1)?.token);continue}if(j(t[n])===`FOR`)for(;n<t.length&&t[n].text!==`=`;)n++;t[n]?.text===`=`&&(n+=1),r(i(n)?.token)}}if(n.length===0)return e;n.sort((e,t)=>e.start-t.start);let a=``,o=0;for(let t of n)t.start<o||(a+=e.slice(o,t.start)+t.text,o=t.end);return a+e.slice(o)}var N=2e4;function P(e){let t=e.slice(0,400),n=0;for(let e=0;e<t.length;e++)if(n+=t[e].text.length,n>15e5)return t.slice(0,Math.max(1,e));return t}function F(e,t){return e.find(e=>e.docId===t)}var I=i()(u(e=>({revisions:{},importedLegacy:!1,capture:(t,{docId:n,title:r,text:i,database:a,reason:o})=>e(e=>{let s=M(i);if(!s.trim())return{};let c=e.revisions[t]??[];if(F(c,n)?.text===s)return{};let l={id:crypto.randomUUID(),docId:n,title:r,text:s,database:a,timestamp:Date.now(),reason:o};return{revisions:{...e.revisions,[t]:P([l,...c])}}}),removeRevision:(t,n)=>e(e=>({revisions:{...e.revisions,[t]:(e.revisions[t]??[]).filter(e=>e.id!==n)}})),clearRevisions:t=>e(e=>{let n={...e.revisions};return delete n[t],{revisions:n}}),mergeRevisions:t=>e(e=>{let n={...e.revisions};for(let[e,r]of Object.entries(t))n[e]=P([...n[e]??[],...r].sort((e,t)=>t.timestamp-e.timestamp));return{revisions:n,importedLegacy:!0}})}),{name:`planche-revisions`,storage:s(),version:1,partialize:e=>({revisions:c.getState().persistQueryHistory?e.revisions:{},importedLegacy:e.importedLegacy}),onRehydrateStorage:()=>e=>{!e||e.importedLegacy||R()}}));function L(e,t){let n={};for(let[r,i]of Object.entries(e.snapshots??{})){let a=new Map((e.tabs?.[r]??[]).map(e=>[e.id,e.title])),o=[];for(let[e,n]of Object.entries(i??{}))for(let r of n??[])r?.text?.trim()&&o.push({id:crypto.randomUUID(),docId:e,title:a.get(e)??t,text:r.text,database:``,timestamp:r.timestamp,reason:r.reason});o.length>0&&(n[r]=o.sort((e,t)=>t.timestamp-e.timestamp))}return n}async function R(){try{let e=await l.getItem(`planche-query`);if(!e){I.setState({importedLegacy:!0});return}let t=L(JSON.parse(e).state??{},`Query`);I.getState().mergeRevisions(t)}catch{I.setState({importedLegacy:!0})}}var z=new Map;function B(e,t){let n=`${e}:${t.docId}`,r=z.get(n);r&&clearTimeout(r),z.set(n,setTimeout(()=>{z.delete(n),I.getState().capture(e,t)},N))}function V(e,t){let n=`${e}:${t}`,r=z.get(n);r&&(clearTimeout(r),z.delete(n))}function H(e){return e.savePassword===!1?y(e):e}function U(e){return y(e)}var W=i()(u((t,n)=>({savedConnections:[],activeConnections:[],activeConnectionId:null,transactionOpen:{},pendingReopen:{},fileDetached:{},addSavedConnection:e=>{e.savePassword===!1&&x(e.id,v(e)),t(t=>({savedConnections:[...t.savedConnections,e]}))},updateSavedConnection:(e,r)=>{let i={...n().savedConnections.find(t=>t.id===e),...r};i.savePassword===!1&&x(e,v(i)),t(t=>({savedConnections:t.savedConnections.map(t=>t.id===e?{...t,...r}:t)}))},deleteSavedConnection:e=>{C(e),I.getState().clearRevisions(e),t(t=>({savedConnections:t.savedConnections.filter(t=>t.id!==e)}))},openConnection:n=>t(t=>{let r=t.activeConnections.some(e=>e.id===n.id),i={...t.pendingReopen};return delete i[n.id],r?{activeConnections:t.activeConnections.map(e=>e.id===n.id?{...e,...n}:e),activeConnectionId:n.id,pendingReopen:i}:(e(`connection_open`,{dbms:n.dbms,transport:n.transport??`tunnel`,sample:!!n.sample,ssh:!!n.ssh?.enabled}),n.ssh?.enabled&&m(`ssh_tunnel`),{activeConnections:[...t.activeConnections,n],activeConnectionId:n.id,pendingReopen:i})}),closeConnection:e=>t(t=>{let n=t.activeConnections.filter(t=>t.id!==e),r=t.activeConnectionId===e?n.length>0?n[n.length-1].id:null:t.activeConnectionId,i={...t.transactionOpen},a={...t.pendingReopen},o={...t.fileDetached};return delete i[e],delete a[e],delete o[e],{activeConnections:n,activeConnectionId:r,transactionOpen:i,pendingReopen:a,fileDetached:o}}),reorderActiveConnection:(e,n)=>t(t=>({activeConnections:E(t.activeConnections,e,n)})),setActiveConnection:e=>t({activeConnectionId:e}),updateServerConnectionId:(e,n)=>t(t=>({activeConnections:t.activeConnections.map(t=>t.id===e?{...t,serverConnectionId:n}:t)})),updateProfile:(e,n)=>t(t=>({savedConnections:t.savedConnections.map(t=>t.id===e?{...t,...n}:t),activeConnections:t.activeConnections.map(t=>t.id===e?{...t,...n}:t)})),setTransactionOpen:(e,n)=>t(t=>({transactionOpen:{...t.transactionOpen,[e]:n}})),setPendingReopen:(e,n)=>t(t=>({pendingReopen:{...t.pendingReopen,[e]:n}})),setFileDetached:(e,n)=>t(t=>({fileDetached:{...t.fileDetached,[e]:n}})),resolveCredentials:e=>{let t=n().savedConnections.find(t=>t.id===e.id);return b(t?b(e,v(t)):e,S(e.id)??{})}}),{name:`planche-connections`,storage:s(),version:1,migrate:e=>{let t=e;return Array.isArray(t.savedConnections)&&(t.savedConnections=t.savedConnections.map(e=>({...e,savePassword:e.savePassword??!0}))),t},partialize:e=>({savedConnections:e.savedConnections.map(H),activeConnections:e.activeConnections.map(U),activeConnectionId:e.activeConnectionId})}));export{M as a,m as c,I as i,p as l,V as n,E as o,B as r,T as s,W as t};
@@ -0,0 +1 @@
1
+ import{c as e,n as t,r as n}from"./ui-store-DfspmPOn.js";import{a as r,i}from"./i18n-57fo5jb0.js";import{a,i as o,o as s,s as c}from"./settings-store-WUA0-UcP.js";import{t as l}from"./connection-store-N-ZwIkVg.js";import{r as u,t as d}from"./hmr-singleton-DWC1xbJ4.js";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 ce(){let e=h();return e===`/api`?r.t(`services.agent.devProxyUrl`,{url:`http://localhost:8888`}):e}async function le(){let e=ce(),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,install:t.install===`standalone`?`standalone`:`npx`}}async function ue(){let e=await fetch(`${h()}/profiles`,{cache:`no-store`,headers:y()}),t=await e.json().catch(()=>null);if(!e.ok||!t||t.success!==!0)throw new b(t?.message??r.t(`services.agent.httpError`,{status:e.status,statusText:e.statusText}),e.status);return t}function g(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 _(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===`do`?{driver:`do`,devUrl:e.devUrl??``}: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:g(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:g(e)}:e.dbms===`oracle`?{driver:`oracle`,host:e.host,port:e.port,user:e.user,password:e.pass,serviceName:e.database||`FREEPDB1`,ssh:g(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:g(e)}}var v=d(`tunnelAuthTokens`,()=>new Map);function de(e,t){let n=t?.trim();n?v.set(e,n):v.delete(e)}function fe(e){return e?.trim()||m.token||void 0}function y(e){let t={"Content-Type":`application/json`},n=fe(e);return n&&(t.Authorization=`Bearer ${n}`),t}var b=class extends Error{status;body;constructor(e,t,n=null){super(e),this.status=t,this.body=n}};function pe(e){if(!(e instanceof b)||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 me(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 x(e,t,n){let i;try{i=await fetch(`${h()}${e}`,{method:`POST`,headers:y(n),body:JSON.stringify(t)})}catch(e){throw Error(r.t(`services.agent.unreachable`,{url:ce(),message:e instanceof Error?e.message:String(e)}))}let a=null;try{a=await i.json()}catch{a=null}if(!i.ok)throw new b(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 he(e,t){let n=await x(`/connect`,e,t);return n.success&&n.connectionId&&(de(n.connectionId,fe(t)),ve()),n}async function ge(e){try{let t=await x(`/cancel`,{connectionId:e},v.get(e));return t.cancelled?t.abandoned?`abandoned`:`cancelled`:`unsupported`}catch(e){return e instanceof b&&e.status===404?`agent-outdated`:`failed`}}async function _e(e,t,n){let r=performance.now(),i=await x(`/query`,{connectionId:e,sql:t,database:n},v.get(e));return i.execTime||=Math.round(performance.now()-r),i}function ve(){if(typeof window>`u`)return;let e=d(`tunnelPageHide`,()=>({done:!1}));e.done||(e.done=!0,window.addEventListener(`pagehide`,()=>{for(let[e,t]of v)fetch(`${h()}/disconnect`,{method:`POST`,headers:y(t),body:JSON.stringify({connectionId:e}),keepalive:!0}).catch(()=>void 0)}))}async function ye(e){try{await x(`/disconnect`,{connectionId:e},v.get(e))}finally{v.delete(e)}}async function be(e,t){return x(`/test-connection`,e,t)}var S=0;function xe(e){S>=3||(async()=>{try{(await fetch(`${h()}/usage`,{method:`POST`,headers:y(),body:JSON.stringify({feature:e})})).ok?S=0:S+=1}catch{S+=1}})()}function C(e,t,n){return e.map(e=>e.id===t?n(e):e.children.length>0?{...e,children:C(e.children,t,n)}:e)}function Se(e,t){for(let n of e){if(n.id===t)return n;let e=Se(n.children,t);if(e)return e}return null}function w(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 Ce=n()(c(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]:w(e.expandedIds[t],n,!0)},trees:{...e.trees,[t]:C(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]:C(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=!Se(r,n)?.isExpanded;return{expandedIds:{...e.expandedIds,[t]:w(e.expandedIds[t],n,i)},trees:{...e.trees,[t]:C(r,n,e=>({...e,isExpanded:i}))}}}),setExpanded:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{expandedIds:{...e.expandedIds,[t]:w(e.expandedIds[t],n,r)},trees:{...e.trees,[t]:C(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]:C(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:o(),partialize:e=>({selectedNodeId:e.selectedNodeId,expandedIds:e.expandedIds})})),T=32,E=24,we=931071618,D=931071619,O=(e,t)=>(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0,Te=(e,t)=>(e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t])>>>0;function k(e,t,n,r,i=0,a=0){let o=r?O:Te;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 Ee(e){if(e.byteLength<T)return null;let t=O(e,0);if(t!==we&&t!==D)return null;let n=t===D,r=O(e,8);if(r<512||r>65536||r&r-1)return null;let i=O(e,16),a=O(e,20),[o,s]=k(e,0,24,n);if(o!==O(e,24)||s!==O(e,28))return null;let c=E+r,l=new Map,u=new Map,d=0,f=0,p=0;for(let t=T;t+c<=e.byteLength&&!(O(e,t+8)!==i||O(e,t+12)!==a||([o,s]=k(e,t,8,n,o,s),[o,s]=k(e,t+E,r,n,o,s),o!==O(e,t+16)||s!==O(e,t+20)));t+=c){let n=O(e,t),r=O(e,t+4);if(n===0)break;if(u.set(n,e.subarray(t+E,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 A(e,t){let n=Ee(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 De=`planche-file-handles`,j=`handles`;function Oe(){return new Promise((e,t)=>{if(typeof indexedDB>`u`){t(Error(`IndexedDB unavailable`));return}let n=indexedDB.open(De,1);n.onupgradeneeded=()=>n.result.createObjectStore(j),n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}function M(e,t){return Oe().then(n=>new Promise((r,i)=>{let a=t(n.transaction(j,e).objectStore(j));a.onsuccess=()=>r(a.result),a.onerror=()=>i(a.error)}))}var N=e=>`${e}:wal`;async function P(e,t){try{await M(`readwrite`,n=>n.put(t,e))}catch{}}async function F(e){try{return await M(`readonly`,t=>t.get(e))??null}catch{return null}}async function I(e){try{await M(`readwrite`,t=>t.delete(e))}catch{}}async function L(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 R=e=>`dbcache-meta:${e}`,z=e=>`${e}.sqlite3`;async function ke(e){try{let t=await s.getItem(R(e));if(!t)return null;let n=JSON.parse(t),r=await a.get(z(e));return r?{bytes:new Uint8Array(r),meta:n}:null}catch{return null}}async function Ae(e,t,n){try{let r=t.slice().buffer;return await a.set(z(e),r)?(await s.setItem(R(e),JSON.stringify(n)),!0):!1}catch(e){return console.warn(`[db-cache] write failed:`,e),!1}}async function je(e,t){try{let n=await s.getItem(R(e));if(!n)return;await s.setItem(R(e),JSON.stringify({...JSON.parse(n),...t}))}catch{}}async function Me(e){try{await a.remove(z(e)),await s.removeItem(R(e))}catch{}}var Ne=`browser:`;function B(e){return typeof e==`string`&&e.startsWith(`browser:`)}var Pe=750;function Fe(e){let t=W.get(e);t?.profileId&&(t.flushTimer&&clearTimeout(t.flushTimer),t.flushTimer=setTimeout(()=>{t.flushTimer=null,V(e)},Pe))}async function V(e){let t=W.get(e);if(t?.profileId)try{let n=await et(e);await Ae(t.profileId,n,H(t))}catch(e){console.warn(`[browser-sqlite] cache flush failed:`,e)}}function H(e){return{name:e.source.name,lastModified:e.fileMeta.lastModified,size:e.fileMeta.size,dirty:e.dirty,cachedAt:Date.now()}}var Ie=d(`browserSqliteVisibilityListener`,()=>({installed:!1}));typeof document<`u`&&!Ie.installed&&(Ie.installed=!0,document.addEventListener(`visibilitychange`,()=>{if(document.visibilityState===`hidden`)for(let[e,t]of W)t.flushTimer&&(clearTimeout(t.flushTimer),t.flushTimer=null,V(e))}));function U(e){return e.toLowerCase().endsWith(`-wal`)}var W=d(`browserSqliteDatabases`,()=>new Map),Le=d(`browserSqliteModule`,()=>({promise:null}));async function G(){return Le.promise||=i(()=>import(`./dist-Roudme38.js`).then(e=>e.default()),[]),Le.promise}function K(e){let t=W.get(e);if(!t)throw Error(`Browser connection not found: ${e}`);return t}function Re(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 ze=`SQLite format 3\0`;function Be(e){if(e.byteLength===0)return null;if(e.byteLength<100)return r.t(`services.sqliteFile.tooSmall`);if(String.fromCharCode(...e.subarray(0,16))!==ze)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 Ve(e){let t=Be(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 He(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 Ue(){let e=await He({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 We(){let[e]=await He({multiple:!1,sqliteOnly:!1});return e??null}async function q(e,t,n={}){let{bytes:r,wal:i}=Re(e),a=await Ve(r),o=`${Ne}${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=A(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&&V(s.connectionId),s}async function Ge(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 Ke(e,t){let n=K(e);n.source={...n.source,handle:t}}function qe(e){return W.get(e)?.dirty??!1}async function Je(e,t){let n=K(e),r=A(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&&V(i.connectionId),{...i,appliedFrames:r.appliedFrames}}function Y(e){return W.get(e)?.source??null}function Ye(e){return e&&e.trim().toLowerCase().replace(/\(.*$/,``).trim()||null}function Xe(e){return e==null?`null`:typeof e==`number`?Number.isInteger(e)?`integer`:`real`:typeof e==`bigint`?`bigint`:e instanceof Uint8Array?`blob`:`text`}function Ze(e){return typeof e==`bigint`?Number(e):e instanceof Uint8Array?{type:`Buffer`,data:Array.from(e)}:e}async function Qe(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,Fe(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(Ze));let l=s.getColumnNames(),u=r.capi,d=s.pointer;return{success:!0,fields:l.map((e,t)=>{let n=Ye(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??Xe($e(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 $e(e,t){for(let n of e){let e=n[t];if(e!=null)return e}return null}async function et(e){let{db:t}=K(e);return(await G()).capi.sqlite3_js_db_export(t.pointer)}function tt(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 nt(e){let t=K(e);t.source={...t.source,walAcknowledged:!0}}async function rt(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 it(e){let t=K(e),{source:n}=t,i=tt(e);if(i)throw Error(i);n.handle&&await rt(t);let a=await et(e);if(n.handle){if(!await L(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&&je(i.profileId,{...H(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 at(e){await I(e),await I(N(e)),await Me(e)}async function ot(e,t){let n=await F(e);if(!n)return null;if(!await L(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 I(e),null;throw t}}async function st(e,t){let n=await F(N(e));if(!(!n||!await L(n,t)))try{return{file:await n.getFile(),handle:n}}catch{await I(N(e));return}}async function ct(e,t){let n={remembered:!0,fromCache:!1,restoredUnsaved:!1,fileDetached:!1,diskChanged:!1},r=await ke(e),i=await ot(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 Ge(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 st(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 Ge(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 Ue();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 P(e,s.main.handle):await I(e),s.wal?.handle?await P(N(e),s.wal.handle):await I(N(e)),{...n,connectionId:c,fileName:l.name,wal:l.wal,walApplied:l.walApplied,remembered:!1}}var lt=`SQLite format 3\0`;async function ut(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)===lt}async function dt(e,t){try{let n=await F(e);return n?await n.isSameEntry(t):!1}catch{return!1}}async function ft(n){let i=n.find(e=>!U(e.file.name));if(!i)return;if(!await ut(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 dt(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&&B(f)&&X(f),i.handle?await P(c.id,i.handle):await I(c.id),a?.handle?await P(N(c.id),a.handle):await I(N(c.id)),s||o.addSavedConnection(c),o.openConnection({...c,serverConnectionId:p}),o.setPendingReopen(c.id,!1),o.setFileDetached(c.id,!1),d?Ce.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 pt(e,t){let n=await ot(e,!0);return!n||n===`denied`?!1:(Ke(t,n.handle),!0)}async function mt(e){let t=Z(e),n=Y(e);return n&&!n.handle&&t&&await pt(t,e),it(e)}function ht(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 gt(e,t){let n=await We();if(!n)return null;let r=await Je(t,n);return n.handle&&await P(N(e),n.handle),{connectionId:r.connectionId,appliedFrames:r.appliedFrames}}function _t(e){if(!B(e))return null;let t=Y(e);return t?{wal:t.wal,walApplied:t.walApplied,walAcknowledged:t.walAcknowledged??!1}:null}function vt(e){return e.dbms===`sqlite`&&e.transport===`browser`?`browser`:`tunnel`}async function yt(e,t){return he(e,t)}async function bt(e,t){return be(e,t)}async function xt(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(B(e))try{return await Qe(e,t)}catch(e){return r(e)}let i=Q.get(e)??e;try{return await _e(i,t,n)}catch(e){if(!(e instanceof b)||e.status!==404)return r(e);let a=await St(i);if(!a)return r(e);try{return await _e(a,t,n)}catch(e){return r(e)}}}var Q=new Map,$=new Map;function St(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||vt(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 he(_(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 Ct(e){if(B(e)){let t=Z(e);X(e),t&&await Me(t);return}return ye(e)}function wt(e){return e===`cancelled`?null:e===`abandoned`?r.t(`result.running.abandoned`):e===`agent-outdated`?r.t(`result.running.agentOutdated`):e===`unsupported`?r.t(`result.running.cannotCancel`):r.t(`result.running.cancelFailed`)}async function Tt(e){if(B(e))return`unsupported`;let t=l.getState().activeConnections.find(t=>t.id===e)?.serverConnectionId;return t?ge(t):`failed`}function Et(e){return async(t,n)=>{let i=await xt(e,t,n);if(!i.success)throw Error(i.message??r.t(`services.query.failed`));return i}}export{xe as A,se as C,pe as D,ue as E,f as M,ee as N,oe as O,p as P,Ce as S,ne as T,nt as _,Et as a,qe as b,xt as c,vt as d,gt as f,bt as g,mt as h,yt as i,_ as j,me as k,at as l,pt as m,wt as n,ht as o,ft as p,ct as r,Ct as s,Tt as t,_t as u,tt as v,le as w,J as x,B as y};