planche 0.7.2 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/app/assets/{AboutDialog-BKZYkJTp.js → AboutDialog-DvM46UY_.js} +1 -1
- package/app/assets/{ConnectDialog-BR8x82WA.js → ConnectDialog-_ZK0AztW.js} +1 -1
- package/app/assets/{CopyDatabaseDialog-BNy2T6Gr.js → CopyDatabaseDialog-CnZfCfwD.js} +1 -1
- package/app/assets/{CopyTableDialog-BPlrWZkd.js → CopyTableDialog-B41IvpSU.js} +1 -1
- package/app/assets/{CreateDatabaseDialog-CSGP8uim.js → CreateDatabaseDialog-kD1h8d45.js} +1 -1
- package/app/assets/{DataDiffDialog-DnPrMjJH.js → DataDiffDialog-dlZBMW5l.js} +1 -1
- package/app/assets/{DownloadToCSVDialog-BAB8dFZb.js → DownloadToCSVDialog-DRK-Zil8.js} +1 -1
- package/app/assets/{EditSchemaDialog-DbtEwLFq.js → EditSchemaDialog-CkcXszIG.js} +1 -1
- package/app/assets/{FindReplaceDialog-uWQWnCuI.js → FindReplaceDialog-CkPnkL1j.js} +1 -1
- package/app/assets/{FlushDialog-Cs0aKhnC.js → FlushDialog-CqSjI_mY.js} +1 -1
- package/app/assets/{LinkColumnDialog-Wug5N1I5.js → LinkColumnDialog-D5Zfrl3R.js} +1 -1
- package/app/assets/{LocalHistoryDialog-DNRc52tY.js → LocalHistoryDialog-Bb9N2LkQ.js} +1 -1
- package/app/assets/{ProcessListDialog-EFZx2I21.js → ProcessListDialog-BgJF9yWZ.js} +1 -1
- package/app/assets/{QuickCommandPalette-CpXQe_fD.js → QuickCommandPalette-DYcfkPrI.js} +1 -1
- package/app/assets/{RowFormDialog-DGJRhveF.js → RowFormDialog-DFjrIO4W.js} +1 -1
- package/app/assets/{SafetySettingsDialog-EPYmYqI7.js → SafetySettingsDialog-BeO8cEBI.js} +1 -1
- package/app/assets/{SchemaDiffDialog-CepiDNT4.js → SchemaDiffDialog-BbjyLKS_.js} +1 -1
- package/app/assets/{SchemaToHTMLDialog-Cl7FtDQ4.js → SchemaToHTMLDialog-B1NrI3Pe.js} +1 -1
- package/app/assets/{StatusDialog-BorcEOOv.js → StatusDialog-DhvpkLeJ.js} +1 -1
- package/app/assets/{UserAddDialog-DvKVbCtu.js → UserAddDialog-CATexcB9.js} +1 -1
- package/app/assets/{UserManagerDialog-lyWevcWM.js → UserManagerDialog-Cce9OVAy.js} +1 -1
- package/app/assets/{VariablesDialog-BVUkQuDm.js → VariablesDialog-D9GMrHcH.js} +1 -1
- package/app/assets/{database-D3ZazTXj.js → database-7RkacLLF.js} +1 -1
- package/app/assets/{dbms-Cq4imB7l.js → dbms-Bsjvyvsp.js} +1 -1
- package/app/assets/{de-B9X_f_18.js → de-a3uUFgyR.js} +1 -1
- package/app/assets/{engine-BmvPzjsq.js → engine-DRzYxvTs.js} +1 -1
- package/app/assets/{fr-ByU5YzKG.js → fr-mAuj3xjE.js} +1 -1
- package/app/assets/{i18n-9War-oHy.js → i18n-DFnLZX4V.js} +2 -2
- package/app/assets/{ja-nAp-4B2u.js → ja-Ct4KapSS.js} +1 -1
- package/app/assets/{ko-BeLRvuuF.js → ko-Kd4KO98m.js} +1 -1
- package/app/assets/main-DLpOu6RJ.js +940 -0
- package/app/assets/query-execution-CSQuXIHD.js +7 -0
- package/app/assets/{schema-nodes-n_QZJb21.js → schema-nodes-D3-cz2Xk.js} +1 -1
- package/app/assets/{select-XqkC478q.js → select-BvfAEfBV.js} +1 -1
- package/app/assets/{table-copy-WMW8qLUH.js → table-copy-kJZk3p1d.js} +1 -1
- package/app/assets/{use-engine-z0WEd5U4.js → use-engine-5vf18JRu.js} +1 -1
- package/app/assets/{zh-QBkIdY--.js → zh-B5o8i7gH.js} +1 -1
- package/app/index.html +9 -9
- package/package.json +1 -1
- package/app/assets/main-CCLlOK4N.js +0 -940
- package/app/assets/query-execution-C80kZc4y.js +0 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as e,m as t,n,t as r}from"./ui-store-DWSBgCoR.js";import{Q as i,Z as a,f as o,h as s,m as c,nt as l,ot as u,p as d,tt as f}from"./main-
|
|
1
|
+
import{_ as e,m as t,n,t as r}from"./ui-store-DWSBgCoR.js";import{Q as i,Z as a,f as o,h as s,m as c,nt as l,ot as u,p as d,tt as f}from"./main-DLpOu6RJ.js";import{a as p,l as m,m as h,t as g}from"./button-BGQhw-yz.js";import{t as _}from"./connection-store-B9-4NAfR.js";import{n as ee}from"./settings-store-MJead_iM.js";import{r as v}from"./database-7RkacLLF.js";import{c as y,t as b}from"./query-execution-CSQuXIHD.js";import{n as x}from"./use-engine-5vf18JRu.js";import{a as S,i as C,n as w,o as T,r as E,t as D}from"./dialog-z_ZHxAMN.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=e(t(),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:i}=h(),a=`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:a,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:a,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:`${a} 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[l,p]=t.text.trim().split(/[ T]/);return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${a} 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)(d,{children:[(0,L.jsx)(s,{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:i(`result.rowForm.pickDate`),children:(0,L.jsx)(u,{className:`size-3.5`})})}),(0,L.jsx)(c,{className:`w-auto p-0`,align:`end`,children:(0,L.jsx)(o,{mode:`single`,selected:V(l??``),defaultMonth:V(l??``),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:i(`result.rowForm.now`),children:(0,L.jsx)(f,{className:`size-3.5`})})]})}case`time`:return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${a} 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:i(`result.rowForm.now`),children:(0,L.jsx)(f,{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:`${a} 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`}),i(`result.rowForm.formatJson`)]}),!e&&(0,L.jsx)(`span`,{className:`text-[10px] text-destructive`,children:i(`result.rowForm.invalid.json`)})]})]})}case`text`:return(0,L.jsx)(`textarea`,{className:`${a} 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:i(`result.rowForm.binaryUnsupported`)});case`uuid`:return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${a} 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:i(`result.rowForm.generateUuid`),children:(0,L.jsx)(O,{className:`size-3.5`})})]});default:{let i=t.text.length>80||t.text.includes(`
|
|
2
2
|
`);return(0,L.jsxs)(`div`,{className:`space-y-0.5`,children:[i?(0,L.jsx)(`textarea`,{className:`${a} min-h-[56px] resize-y`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1}):(0,L.jsx)(`input`,{className:a,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(),t=r(`row-form`),o=n(e=>e.closeDialog),s=n(e=>e.setFooterMessage),c=x(t?.connectionId??``),u=_(e=>t?e.transactionOpen[t.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=t?.mode===`edit`;(0,k.useEffect)(()=>{if(!t)return;let e=!1,n=v(t.serverConnectionId);return c.introspect.listColumns(n,t.database,t.table).then(n=>{if(e)return;f(n);let r={};for(let e of n)if(t.mode===`edit`){let n=t.fields.find(t=>t.orgName===e.name);r[e.name]=P(n?t.row?.[n.name]:void 0)}else r[e.name]=N(e);A(r)}).catch(t=>{e||m(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t?.serverConnectionId,t?.database,t?.table,t?.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(!t)return null;let n=e=>e===J?`DEFAULT`:c.quoteLiteral(e);if(t.mode===`insert`){let r=[...e];return r.length===0?c.getQuery(`INSERT_DEFAULT_VALUES`,t.database,t.table):c.getQuery(`INSERT_TABLE`,t.database,t.table,r.map(([e])=>c.quoteIdentifier(e)).join(`, `),r.map(([,e])=>n(e)).join(`, `))}return!t.where||e.size===0?null:c.getQuery(`UPDATE_TABLE`,t.database,t.table,[...e].map(([e,t])=>`${c.quoteIdentifier(e)} = ${n(t)}`).join(`, `),t.where)},[t,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 n={};for(let[r,i]of e){if(i===J)continue;let e=t?.fields.find(e=>e.orgName===r);n[e?.name??r]=typeof i==`bigint`?i.toString():i}return n},te=()=>{let e=Y();!e||!t||(t.onStage?.(t.mode,Q(e.values)),o())},ne=async()=>{let r=Y();if(!r||!t)return;let i=X(r.values);if(!i){B(e(`result.rowForm.nothingToWrite`));return}U(!0),B(null);try{if(ee.getState().previewGridCommit&&!await n.getState().requestDestructiveConfirm({title:e(W?`result.rowForm.confirmUpdateTitle`:`result.rowForm.confirmInsertTitle`,{table:`${t.database}.${t.table}`}),statements:[i],confirmLabel:e(W?`result.rowForm.update`:`result.rowForm.insert`)}))return;await y(t.connectionId,i,{database:t.database,skipDestructiveConfirm:!0}),s(e(W?`result.rowForm.updated`:`result.rowForm.inserted`,{table:`${t.database}.${t.table}`})),t.onCommitted?.(t.mode,Q(r.values)),o()}catch(e){if(e instanceof b)return;B(e instanceof Error?e.message:String(e))}finally{U(!1)}};if(!t)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)(D,{open:!0,onOpenChange:e=>{e||o()},children:(0,L.jsxs)(w,{className:`flex max-h-[90vh] flex-col sm:max-w-[860px]`,children:[(0,L.jsxs)(S,{children:[(0,L.jsx)(T,{children:e(W?`result.rowForm.editTitle`:`result.rowForm.insertTitle`)}),(0,L.jsxs)(E,{className:`font-mono text-xs`,children:[t.database,`.`,t.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)(a,{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(n=>{let r=O[n.name]??{mode:`value`,text:``},a=G.get(n.name),o=r.mode===`auto`,s=M[n.name],c=n.key===`PRI`,u=t.fields.find(e=>e.orgName===n.name),d=!!u&&!!t.row&&t.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:n.name,children:n.name}),c&&(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)(i,{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:n.type}),!n.nullable&&(0,L.jsx)(`span`,{children:`NOT NULL`}),n.defaultValue!==null&&(0,L.jsxs)(`span`,{className:`font-mono`,title:e(`result.rowForm.defaultValue`),children:[`= `,n.defaultValue]}),n.extra&&(0,L.jsx)(`span`,{children:n.extra})]}),n.comment&&(0,L.jsx)(`div`,{className:`mt-0.5 text-[10px] text-muted-foreground/80`,children:n.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:[r.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(n.name,`value`),title:e(`result.rowForm.clickToChange`),children:d?(0,L.jsx)(`span`,{className:`italic`,children:`NULL`}):r.text||(0,L.jsx)(`span`,{className:`italic`,children:e(`result.rowForm.empty`)})}):r.mode===`value`?(0,L.jsx)(H,{spec:a,state:r,disabled:!1,onText:e=>q(n.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:r.mode===`null`?`NULL`:r.mode==="default"?`DEFAULT (${n.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)(l,{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&&$(n.name,`keep`,e(`result.rowForm.mode.keep`),r.mode),(o||!W&&/auto_increment|identity/i.test(n.extra))&&$(n.name,`auto`,e(`result.rowForm.mode.auto`),r.mode),$(n.name,`value`,e(`result.rowForm.mode.value`),r.mode),n.nullable&&$(n.name,`null`,`NULL`,r.mode),n.defaultValue!==null&&$(n.name,`default`,`DEFAULT`,r.mode)]})]})})]},n.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)(C,{className:`items-center`,children:[u&&(0,L.jsx)(`span`,{className:`mr-auto text-[11px] text-catppuccin-yellow`,children:e(`result.rowForm.inTransaction`)}),(0,L.jsx)(g,{variant:`outline`,onClick:()=>o(),disabled:V,children:e(`command.close`)}),t.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)(a,{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-DWSBgCoR.js";import{l as n,u as r}from"./main-
|
|
1
|
+
import{a as e,n as t}from"./ui-store-DWSBgCoR.js";import{l as n,u as r}from"./main-DLpOu6RJ.js";import{l as i,m as a,t as o}from"./button-BGQhw-yz.js";import{r as s,t as c}from"./i18n-DFnLZX4V.js";import{a as l,i as u,n as d,r as f,t as p}from"./select-BvfAEfBV.js";import{n as m,t as h}from"./settings-store-MJead_iM.js";import{a as g,i as _,n as v,o as y,r as b,t as x}from"./dialog-z_ZHxAMN.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{_ as e,c as t,m as n,n as r,t as i}from"./ui-store-DWSBgCoR.js";import{A as a,k as o,l as s}from"./main-
|
|
1
|
+
import{_ as e,c as t,m as n,n as r,t as i}from"./ui-store-DWSBgCoR.js";import{A as a,k as o,l as s}from"./main-DLpOu6RJ.js";import{l as c,m as l,t as u}from"./button-BGQhw-yz.js";import{a as d,i as f,n as p,r as m,t as h}from"./select-BvfAEfBV.js";import{t as g}from"./connection-store-B9-4NAfR.js";import{r as _}from"./database-7RkacLLF.js";import{n as v}from"./engine-DRzYxvTs.js";import{t as y}from"./table-definition-Bs5VSn0X.js";import{a as ee,i as te,n as b,o as ne,t as x}from"./dialog-z_ZHxAMN.js";var S=e(n(),1),C=[`VIEW`,`PROCEDURE`,`FUNCTION`,`TRIGGER`,`EVENT`];function w(e,t){return e.replace(/\bDEFINER\s*=\s*(?:`[^`]*`|'[^']*'|"[^"]*"|\w+)@(?:`[^`]*`|'[^']*'|"[^"]*"|[\w.%-]+)/gi,``).replace(/\bSQL SECURITY (?:DEFINER|INVOKER)\b/gi,``).replace(/\bALGORITHM\s*=\s*\w+/gi,``).replace(RegExp(`[\`"\\[]?${t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}[\`"\\]]?\\.`,`gi`),``).replace(/\s+/g,` `).replace(/;\s*$/,``).trim()}function T(e,t){let n=[];for(let r of C){let i=e.objects?.get(r),a=t.objects?.get(r);if(!i&&!a)continue;let o=[...new Set([...i?.keys()??[],...a?.keys()??[]])].sort();for(let s of o){let o=i?.get(s)??null,c=a?.get(s)??null,l;l=o?c?o.sql!==null&&c.sql!==null&&w(o.sql,e.database)===w(c.sql,t.database)?`identical`:`changed`:`missingInTarget`:`missingInSource`,n.push({type:r,name:s,status:l,source:o,target:c})}}return n}var E=e=>e.toLowerCase().replace(/\s+/g,` `).trim(),D=e=>e===null?null:e.trim().replace(/^'(.*)'(?:::\w+)?$/s,`$1`),O=e=>e.addedColumns.length+e.removedColumns.length+e.changedColumns.length+e.addedIndexes.length+e.removedIndexes.length+e.changedIndexes.length>0;function k(e,t){let n=[];return E(e.type)!==E(t.type)&&n.push(`type`),e.nullable!==t.nullable&&n.push(`nullable`),D(e.defaultValue)!==D(t.defaultValue)&&n.push(`default`),e.extra.toLowerCase()!==t.extra.toLowerCase()&&n.push(`extra`),n}var A=(e,t)=>e.type===t.type&&e.columns.length===t.columns.length&&e.columns.every((e,n)=>e===t.columns[n]);function j(e,t,n){let r=t.columns.get(e)??[],i=n.columns.get(e)??[],a=new Map(i.map(e=>[e.name,e])),o=new Map(r.map(e=>[e.name,e])),s={table:e,addedColumns:r.filter(e=>!a.has(e.name)),removedColumns:i.filter(e=>!o.has(e.name)),changedColumns:[],addedIndexes:[],removedIndexes:[],changedIndexes:[]};for(let e of r){let t=a.get(e.name);if(!t)continue;let n=k(e,t);n.length>0&&s.changedColumns.push({name:e.name,source:e,target:t,attributes:n})}let c=t.indexes.get(e)??[],l=n.indexes.get(e)??[],u=new Map(l.map(e=>[e.name,e])),d=new Map(c.map(e=>[e.name,e]));s.addedIndexes=c.filter(e=>!u.has(e.name)),s.removedIndexes=l.filter(e=>!d.has(e.name));for(let e of c){let t=u.get(e.name);t&&!A(e,t)&&s.changedIndexes.push({name:e.name,source:e,target:t})}return s}function re(e,t){let n=new Set(t.tables),r=new Set(e.tables),i={missingInTarget:[],missingInSource:[],changed:[],identical:[],objects:T(e,t)};for(let r of e.tables){if(!n.has(r)){i.missingInTarget.push(r);continue}let a=j(r,e,t);O(a)?i.changed.push(a):i.identical.push(r)}return i.missingInSource=t.tables.filter(e=>!r.has(e)),i}var M=e=>e.split(`
|
|
2
2
|
`).map(e=>`-- ${e}`).join(`
|
|
3
3
|
`);function N(e,t,n,r,i={}){let a=n.ddl,o=r.database,s=e=>i.includeDrops?e:M(e),c=[`-- Schema sync: ${t.database} -> ${o} (${n.label})`,`-- Review before running. Statements that drop data are commented out unless "Include DROP statements" was checked.`,``];for(let r of e.missingInTarget)c.push(`-- Table ${r} is missing in the target`),c.push(P(r,t,n,o)),c.push(``);for(let t of e.changed){c.push(`-- Table ${t.table}`);for(let e of t.removedIndexes)c.push(s(a.dropIndex(o,t.table,e.name)));for(let e of t.changedIndexes)c.push(s(a.dropIndex(o,t.table,e.name)));for(let e of t.addedColumns)c.push(a.addColumn(o,t.table,e));for(let e of t.changedColumns){let r=a.alterColumn(o,t.table,e.source);c.push(r??M(`${n.label} cannot alter column ${e.name} in place (${e.attributes.join(`, `)}): recreate the table`))}for(let e of t.removedColumns)c.push(s(a.dropColumn(o,t.table,e.name)));for(let e of t.addedIndexes)c.push(a.createIndex(o,t.table,e));for(let e of t.changedIndexes)c.push(a.createIndex(o,t.table,e.source));c.push(``)}for(let t of e.missingInSource)c.push(`-- Table ${t} exists only in the target`),c.push(s(`DROP TABLE ${n.qualify(o,t)};`)),c.push(``);for(let t of e.objects){if(t.status===`identical`)continue;let e=`${t.type.charAt(0)}${t.type.slice(1).toLowerCase()} ${t.name}`,r=I(n,o,t);t.status===`missingInSource`?(c.push(`-- ${e} exists only in the target`),c.push(s(r))):(c.push(t.status===`changed`?`-- ${e} differs; recreated from the source`:`-- ${e} is missing in the target`),t.status===`changed`&&c.push(s(r)),c.push(t.source?.sql?L(t.source.sql):M(`the source engine did not return a CREATE statement for ${e}`))),c.push(``)}return c.join(`
|
|
4
4
|
`).replace(/\n{3,}/g,`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as e,m as t,n}from"./ui-store-DWSBgCoR.js";import{j as r,l as i}from"./main-
|
|
1
|
+
import{_ as e,m as t,n}from"./ui-store-DWSBgCoR.js";import{j as r,l as i}from"./main-DLpOu6RJ.js";import{l as a,m as o,t as s}from"./button-BGQhw-yz.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-BvfAEfBV.js";import{t as p}from"./connection-store-B9-4NAfR.js";import{n as m}from"./query-store-fCiE0iiG.js";import{b as h,r as g}from"./database-7RkacLLF.js";import{n as _}from"./engine-DRzYxvTs.js";import{o as v,r as y}from"./schema-nodes-D3-cz2Xk.js";import{a as b,i as x,n as S,o as C,t as w}from"./dialog-z_ZHxAMN.js";import{t as T}from"./file-name-CnYBZPf9.js";var E=e(t(),1),D=a();function O(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function k(){let{t:e}=o(),{activeDialog:t,closeDialog:a}=n(),{activeConnectionId:k,activeConnections:A}=p(),{trees:j}=h(),M=m(),N=t===`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{_ as e,m as t,n}from"./ui-store-DWSBgCoR.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-
|
|
1
|
+
import{_ as e,m as t,n}from"./ui-store-DWSBgCoR.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-DLpOu6RJ.js";import{l as d,m as f,t as p}from"./button-BGQhw-yz.js";import{a as m}from"./i18n-DFnLZX4V.js";import{t as h}from"./connection-store-B9-4NAfR.js";import{o as g}from"./database-7RkacLLF.js";import{t as _}from"./engine-DRzYxvTs.js";import{a as v,i as y,n as b,o as x,t as S}from"./dialog-z_ZHxAMN.js";var C=e(t(),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:t,closeDialog:d,setFooterMessage:m}=n(),[h,g]=(0,C.useState)([]),[_,T]=(0,C.useState)(``),[D,O]=(0,C.useState)(`session`),k=t===`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 +1 @@
|
|
|
1
|
-
import{_ as e,m as t,n}from"./ui-store-DWSBgCoR.js";import{l as r,u as i}from"./main-
|
|
1
|
+
import{_ as e,m as t,n}from"./ui-store-DWSBgCoR.js";import{l as r,u as i}from"./main-DLpOu6RJ.js";import{l as a,m as o,t as s}from"./button-BGQhw-yz.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-BvfAEfBV.js";import{t as p}from"./connection-store-B9-4NAfR.js";import{a as m,i as h,n as g,o as _,t as v}from"./dialog-z_ZHxAMN.js";import{n as y}from"./user-store-D_BMKTT2.js";var b=e(t(),1),x=a();function S(){let{t:e}=o(),{activeDialog:t,closeDialog:a,setFooterMessage:S}=n(),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=t===`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{_ as e,m as t,n}from"./ui-store-DWSBgCoR.js";import{$ as r,G as i,U as a,j as o,l as s,rt as c}from"./main-
|
|
1
|
+
import{_ as e,m as t,n}from"./ui-store-DWSBgCoR.js";import{$ as r,G as i,U as a,j as o,l as s,rt as c}from"./main-DLpOu6RJ.js";import{a as l,l as u,m as d,o as f,t as p}from"./button-BGQhw-yz.js";import{t as m}from"./connection-store-B9-4NAfR.js";import{a as h,i as g,n as _,o as v,t as y}from"./dialog-z_ZHxAMN.js";import{n as b,t as x}from"./user-store-D_BMKTT2.js";var S=l(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),C=l(`user-plus`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]),w=e(t(),1),T=u();function E({databases:e,tables:t,onSelectScope:n}){let{t:a}=d(),[s,l]=(0,w.useState)(new Set),[u,p]=(0,w.useState)(`global`),m=(0,w.useCallback)(e=>{l(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),h=[{id:`global`,text:a(`user.grantTree.globalPrivileges`),type:`global`,children:e.map(e=>({id:`db:${e}`,text:e,type:`database`,database:e,children:(t[e]??[]).map(t=>({id:`tbl:${e}.${t}`,text:t,type:`table`,database:e,table:t}))}))}];function g(e){p(e.id),n({level:e.type,database:e.database,table:e.table})}function _(e,t){let n=e.children&&e.children.length>0,a=s.has(e.id),o=u===e.id,l=S;return e.type===`database`&&(l=r),e.type===`table`&&(l=i),(0,T.jsxs)(`div`,{children:[(0,T.jsxs)(`div`,{className:f(`flex items-center gap-1 px-2 py-0.5 cursor-pointer text-sm hover:bg-accent rounded-sm`,o&&`bg-accent text-accent-foreground`),style:{paddingLeft:`${t*16+4}px`},onClick:()=>{g(e),n&&m(e.id)},children:[n?(0,T.jsx)(c,{className:f(`h-3 w-3 transition-transform shrink-0`,a&&`rotate-90`)}):(0,T.jsx)(`span`,{className:`w-3 shrink-0`}),(0,T.jsx)(l,{className:`h-4 w-4 text-muted-foreground shrink-0`}),(0,T.jsx)(`span`,{className:`truncate`,children:e.text})]}),a&&e.children?.map(e=>_(e,t+1))]},e.id)}return(0,T.jsx)(o,{className:`h-full`,children:(0,T.jsx)(`div`,{className:`py-1`,children:h.map(e=>_(e,0))})})}var D={Data:[`SELECT`,`INSERT`,`UPDATE`,`DELETE`],Structure:[`CREATE`,`ALTER`,`DROP`,`INDEX`,`REFERENCES`],Administration:[`GRANT OPTION`,`SUPER`,`PROCESS`,`RELOAD`,`SHUTDOWN`,`SHOW DATABASES`,`LOCK TABLES`,`EXECUTE`,`REPLICATION SLAVE`,`REPLICATION CLIENT`,`CREATE VIEW`,`SHOW VIEW`,`CREATE ROUTINE`,`ALTER ROUTINE`,`CREATE USER`,`EVENT`,`TRIGGER`,`CREATE TABLESPACE`]},O={Data:[`SELECT`,`INSERT`,`UPDATE`,`DELETE`],Structure:[`CREATE`,`ALTER`,`DROP`,`INDEX`,`REFERENCES`],Administration:[`GRANT OPTION`,`LOCK TABLES`,`EXECUTE`,`CREATE VIEW`,`SHOW VIEW`,`CREATE ROUTINE`,`ALTER ROUTINE`,`EVENT`,`TRIGGER`]},k={Data:[`SELECT`,`INSERT`,`UPDATE`,`DELETE`],Structure:[`CREATE`,`ALTER`,`DROP`,`INDEX`,`REFERENCES`],Administration:[`GRANT OPTION`,`TRIGGER`]},A={global:`user.privileges.globalTitle`,database:`user.privileges.databaseTitle`,table:`user.privileges.tableTitle`},j={Data:`user.privileges.categoryData`,Structure:`user.privileges.categoryStructure`,Administration:`user.privileges.categoryAdministration`};function M({scope:e,privileges:t,onChange:n}){let{t:r}=d(),i=(0,w.useMemo)(()=>e===`global`?D:e===`database`?O:k,[e]),a=(0,w.useMemo)(()=>Object.values(i).flat(),[i]);function c(e){n({...t,[e]:!t[e]})}function l(){let e={...t};for(let t of a)e[t]=!0;n(e)}function u(){let e={...t};for(let t of a)e[t]=!1;n(e)}return(0,T.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-2 p-2 border-b`,children:[(0,T.jsx)(`span`,{className:`text-sm font-medium`,children:r(A[e])}),(0,T.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,T.jsx)(p,{variant:`outline`,size:`sm`,onClick:l,children:r(`user.privileges.checkAll`)}),(0,T.jsx)(p,{variant:`outline`,size:`sm`,onClick:u,children:r(`user.privileges.uncheckAll`)})]})]}),(0,T.jsx)(o,{className:`flex-1`,children:(0,T.jsx)(`div`,{className:`p-3 space-y-4`,children:Object.entries(i).map(([e,n])=>(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`h4`,{className:`text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-2`,children:j[e]?r(j[e]):e}),(0,T.jsx)(`div`,{className:`grid grid-cols-2 gap-1`,children:n.map(e=>(0,T.jsxs)(s,{className:`flex items-center gap-2 text-sm font-normal cursor-pointer py-1`,children:[(0,T.jsx)(`input`,{type:`checkbox`,checked:t[e]??!1,onChange:()=>c(e),className:`rounded border-input`}),e]},e))})]},e))})})]})}function N(){let{t:e}=d(),{activeDialog:t,closeDialog:r,openDialog:i,setFooterMessage:s}=n(),c=m(e=>e.activeConnectionId)??``,l=b(e=>e.users[c]??x),u=b(e=>e.selectedUser[c]??null),S=b(e=>e.setSelectedUser),D=b(e=>e.removeUser),O=e=>S(c,e),k=(e,t)=>D(c,e,t),[A,j]=(0,w.useState)({level:`global`}),[N,P]=(0,w.useState)({}),[F]=(0,w.useState)([]),[I]=(0,w.useState)({}),L=t===`user-manager`;function R(e){e||(r(),O(null),j({level:`global`}),P({}))}let z=(0,w.useCallback)(e=>{j(e),P({})},[]);function B(){i(`user-add`)}function V(){u&&(k(u.host,u.user),s(e(`user.manager.removed`,{user:u.user,host:u.host})))}function H(){if(!u){s(e(`user.manager.selectUserFirst`));return}s(e(`user.manager.applied`))}return(0,T.jsx)(y,{open:L,onOpenChange:R,children:(0,T.jsxs)(_,{className:`sm:max-w-[80vw] max-h-[70vh] flex flex-col`,children:[(0,T.jsx)(h,{children:(0,T.jsx)(v,{children:e(`user.manager.title`)})}),(0,T.jsxs)(`div`,{className:`flex flex-1 gap-0 overflow-hidden min-h-0 border rounded-md`,children:[(0,T.jsxs)(`div`,{className:`w-[200px] shrink-0 border-r flex flex-col`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-1 p-2 border-b`,children:[(0,T.jsx)(p,{variant:`ghost`,size:`sm`,onClick:B,title:e(`user.manager.addUser`),children:(0,T.jsx)(C,{className:`h-4 w-4`})}),(0,T.jsx)(p,{variant:`ghost`,size:`sm`,onClick:V,disabled:!u,title:e(`user.manager.removeUser`),children:(0,T.jsx)(a,{className:`h-4 w-4`})})]}),(0,T.jsx)(o,{className:`flex-1`,children:(0,T.jsx)(`div`,{className:`py-1`,children:l.length===0?(0,T.jsx)(`div`,{className:`px-3 py-4 text-sm text-muted-foreground text-center`,children:e(`user.manager.noUsers`)}):l.map(e=>{let t=u?.user===e.user&&u?.host===e.host;return(0,T.jsx)(`div`,{className:f(`flex items-center gap-2 px-3 py-1.5 cursor-pointer text-sm hover:bg-accent`,t&&`bg-accent text-accent-foreground`),onClick:()=>O(e),children:(0,T.jsxs)(`span`,{className:`truncate`,children:[e.user,`@`,e.host]})},`${e.user}@${e.host}`)})})})]}),(0,T.jsxs)(`div`,{className:`w-[250px] shrink-0 border-r`,children:[(0,T.jsx)(`div`,{className:`p-2 border-b text-sm font-medium`,children:e(`user.manager.grantScope`)}),(0,T.jsx)(E,{connectionId:``,databases:F,tables:I,onSelectScope:z})]}),(0,T.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,T.jsx)(M,{scope:A.level,privileges:N,onChange:P})})]}),(0,T.jsxs)(g,{children:[(0,T.jsx)(p,{onClick:H,children:e(`user.manager.apply`)}),(0,T.jsx)(p,{variant:`outline`,onClick:()=>R(!1),children:e(`user.manager.close`)})]})]})})}export{N as UserManagerDialog};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,m as t,n}from"./ui-store-DWSBgCoR.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-
|
|
1
|
+
import{_ as e,m as t,n}from"./ui-store-DWSBgCoR.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-DLpOu6RJ.js";import{l as d,m as f,t as p}from"./button-BGQhw-yz.js";import{a as m}from"./i18n-DFnLZX4V.js";import{t as h}from"./connection-store-B9-4NAfR.js";import{o as g}from"./database-7RkacLLF.js";import{t as _}from"./engine-DRzYxvTs.js";import{a as v,i as y,n as b,o as x,t as S}from"./dialog-z_ZHxAMN.js";var C=e(t(),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:t,closeDialog:d,setFooterMessage:m}=n(),[h,g]=(0,C.useState)([]),[_,T]=(0,C.useState)(``),[D,O]=(0,C.useState)(`session`),k=t===`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 +1 @@
|
|
|
1
|
-
import{c as e,n as t,r as n}from"./ui-store-DWSBgCoR.js";import{a as r,i}from"./i18n-9War-oHy.js";import{i as a,n as o,r as s,t as c}from"./app-storage-B6v72zLH.js";import{t as l}from"./connection-store-B9-4NAfR.js";import{n as u}from"./query-store-fCiE0iiG.js";function d(e,t){let n=globalThis,r=`__planche_${e}`;return r in n||(n[r]=t()),n[r]}var f=new Set([`neon`,`supabase`]);function p(e){return e===`postgres`||f.has(e)}var ee=`_rowid_`,te=`http://127.0.0.1:8888`,m=d(`tunnelAgent`,()=>({url:null,token:null}));function ne(e){m.url=e.url?.replace(/\/+$/,``)||null,m.token=e.token?.trim()||null}var re=new Set([`127.0.0.1`,`localhost`,`[::1]`,`::1`]);function ie(e){try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&re.has(t.hostname)}catch{return!1}}function ae(e){try{return typeof window<`u`&&new URL(e).origin===window.location.origin}catch{return!1}}function oe(e){return ie(e)||ae(e)}function se(){return m.url!==null&&m.url!==`/api`&&!oe(m.url)}function h(){return m.url??te}function g(){let e=h();return e===`/api`?r.t(`services.agent.devProxyUrl`,{url:`http://localhost:8888`}):e}async function ce(){let e=g(),t;try{let e={};m.token&&(e.Authorization=`Bearer ${m.token}`),t=await(await fetch(`${h()}/health`,{cache:`no-store`,headers:e})).json()}catch(t){return{state:`offline`,url:e,message:t instanceof Error?t.message:String(t)}}return t.name!==`planche`||typeof t.version!=`string`||!/^[\w.+-]{1,32}$/.test(t.version)?{state:`offline`,url:e,message:r.t(`services.agent.notPlanche`)}:t.protocolVersion===2?t.authorized===!1||m.token===null&&t.authorized===void 0?{state:`unauthorized`,url:e,version:t.version}:{state:`online`,url:e,version:t.version,activeConnections:t.activeConnections??0,...t.gateway?{gateway:t.gateway}:{}}:{state:`outdated`,url:e,version:t.version,protocolVersion:t.protocolVersion??0}}async function le(){let e=await fetch(`${h()}/profiles`,{cache:`no-store`,headers:b()}),t=await e.json().catch(()=>null);if(!e.ok||!t||t.success!==!0)throw new x(t?.message??r.t(`services.agent.httpError`,{status:e.status,statusText:e.statusText}),e.status);return t}function _(e){let t=e.ssh;if(t?.enabled)return{host:t.host,port:t.port,user:t.user,auth:t.auth,password:t.auth===`password`?t.password??``:void 0,privateKey:t.auth===`key`?t.privateKey:void 0,passphrase:t.auth===`key`&&t.passphrase||void 0}}function v(e){return e.gatewayProfile?{profile:e.gatewayProfile}:e.dbms===`sqlite`?{driver:`sqlite`,file:e.file??``,createIfMissing:e.createIfMissing??!1,readonly:e.readOnly??!1}:e.dbms===`d1`?{driver:`d1`,accountId:e.accountId??``,databaseId:e.databaseId??``,apiToken:e.pass}:e.dbms===`postgres`?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:_(e)}:f.has(e.dbms)?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:!0,sslVerify:e.dbms===`neon`}:e.dbms===`mssql`?{driver:`mssql`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`master`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:_(e)}:e.dbms===`oracle`?{driver:`oracle`,host:e.host,port:e.port,user:e.user,password:e.pass,serviceName:e.database||`FREEPDB1`,ssh:_(e)}:{driver:`mysql`,host:e.host,port:e.port,user:e.user,password:e.pass,charset:e.charset===`utf8`?`utf8mb4`:e.charset,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:_(e)}}var y=d(`tunnelAuthTokens`,()=>new Map);function ue(e,t){let n=t?.trim();n?y.set(e,n):y.delete(e)}function de(e){return e?.trim()||m.token||void 0}function b(e){let t={"Content-Type":`application/json`},n=de(e);return n&&(t.Authorization=`Bearer ${n}`),t}var x=class extends Error{status;body;constructor(e,t,n=null){super(e),this.status=t,this.body=n}};function fe(e){if(!(e instanceof x)||e.status!==409)return null;let t=e.body,n=t?.hostKey;if(t?.code!==`host-key-unknown`||!n)return null;let r=typeof n.host==`string`&&/^[A-Za-z0-9._:[\]-]{1,253}$/.test(n.host)?n.host:null,i=typeof n.type==`string`&&/^[\w.@-]{1,64}$/.test(n.type)?n.type:null,a=typeof n.fingerprint==`string`&&/^SHA256:[A-Za-z0-9+/]{43}$/.test(n.fingerprint)?n.fingerprint:null,o=Number.isInteger(n.port)&&n.port>0&&n.port<65536?n.port:null;return r&&i&&a&&o?{host:r,port:o,type:i,fingerprint:a}:null}async function pe(e,t){let n=await fetch(`${e.replace(/\/+$/,``)}/pair`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:t})}),i=await n.json().catch(()=>null);if(!n.ok||!i?.success||typeof i.token!=`string`)throw Error(i?.message??r.t(`services.agent.httpError`,{status:n.status,statusText:n.statusText}));return i.token}async function S(e,t,n){let i;try{i=await fetch(`${h()}${e}`,{method:`POST`,headers:b(n),body:JSON.stringify(t)})}catch(e){throw Error(r.t(`services.agent.unreachable`,{url:g(),message:e instanceof Error?e.message:String(e)}))}let a=null;try{a=await i.json()}catch{a=null}if(!i.ok)throw new x(a?.message??r.t(`services.agent.httpError`,{status:i.status,statusText:i.statusText}),i.status,a);if(!a)throw Error(r.t(`services.agent.emptyResponse`));return a}async function C(e,t){let n=await S(`/connect`,e,t);return n.success&&n.connectionId&&(ue(n.connectionId,de(t)),me()),n}async function w(e,t,n){let r=performance.now(),i=await S(`/query`,{connectionId:e,sql:t,database:n},y.get(e));return i.execTime||=Math.round(performance.now()-r),i}function me(){if(typeof window>`u`)return;let e=d(`tunnelPageHide`,()=>({done:!1}));e.done||(e.done=!0,window.addEventListener(`pagehide`,()=>{for(let[e,t]of y)fetch(`${h()}/disconnect`,{method:`POST`,headers:b(t),body:JSON.stringify({connectionId:e}),keepalive:!0}).catch(()=>void 0)}))}async function he(e){try{await S(`/disconnect`,{connectionId:e},y.get(e))}finally{y.delete(e)}}async function ge(e,t){return S(`/test-connection`,e,t)}function T(e,t,n){return e.map(e=>e.id===t?n(e):e.children.length>0?{...e,children:T(e.children,t,n)}:e)}function _e(e,t){for(let n of e){if(n.id===t)return n;let e=_e(n.children,t);if(e)return e}return null}function E(e,t,n){let r=new Set(e??[]);if(n)r.add(t);else for(let e of r)(e===t||e.startsWith(`${t}/`))&&r.delete(e);return[...r]}var ve=n()(a(e=>({trees:{},selectedNodeId:{},expandedIds:{},setTree:(t,n)=>e(e=>({trees:{...e.trees,[t]:n}})),setChildren:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{expandedIds:{...e.expandedIds,[t]:E(e.expandedIds[t],n,!0)},trees:{...e.trees,[t]:T(i,n,e=>({...e,children:r,isLoading:!1,isExpanded:!0,metadata:{...e.metadata,count:r.length}}))}}:e}),setNodeMetadata:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{trees:{...e.trees,[t]:T(i,n,e=>({...e,metadata:{...e.metadata,...r}}))}}:e}),toggleExpanded:(t,n)=>e(e=>{let r=e.trees[t];if(!r)return e;let i=!_e(r,n)?.isExpanded;return{expandedIds:{...e.expandedIds,[t]:E(e.expandedIds[t],n,i)},trees:{...e.trees,[t]:T(r,n,e=>({...e,isExpanded:i}))}}}),setExpanded:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{expandedIds:{...e.expandedIds,[t]:E(e.expandedIds[t],n,r)},trees:{...e.trees,[t]:T(i,n,e=>({...e,isExpanded:r}))}}:e}),setSelected:(t,n)=>e(e=>({selectedNodeId:{...e.selectedNodeId,[t]:n}})),setLoading:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{trees:{...e.trees,[t]:T(i,n,e=>({...e,isLoading:r}))}}:e}),removeTree:t=>e(e=>{let n={...e.trees},r={...e.selectedNodeId};return delete n[t],delete r[t],{trees:n,selectedNodeId:r}})}),{name:`planche-schema`,storage:c(),partialize:e=>({selectedNodeId:e.selectedNodeId,expandedIds:e.expandedIds})})),ye=32,D=24,be=931071618,O=931071619,k=(e,t)=>(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0,xe=(e,t)=>(e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t])>>>0;function A(e,t,n,r,i=0,a=0){let o=r?k:xe;for(let r=t;r<t+n;r+=8)i=i+o(e,r)+a>>>0,a=a+o(e,r+4)+i>>>0;return[i,a]}function Se(e){if(e.byteLength<ye)return null;let t=k(e,0);if(t!==be&&t!==O)return null;let n=t===O,r=k(e,8);if(r<512||r>65536||r&r-1)return null;let i=k(e,16),a=k(e,20),[o,s]=A(e,0,24,n);if(o!==k(e,24)||s!==k(e,28))return null;let c=D+r,l=new Map,u=new Map,d=0,f=0,p=0;for(let t=ye;t+c<=e.byteLength&&!(k(e,t+8)!==i||k(e,t+12)!==a||([o,s]=A(e,t,8,n,o,s),[o,s]=A(e,t+D,r,n,o,s),o!==k(e,t+16)||s!==k(e,t+20)));t+=c){let n=k(e,t),r=k(e,t+4);if(n===0)break;if(u.set(n,e.subarray(t+D,t+c)),p++,r>0){for(let[e,t]of u)l.set(e,t);u.clear(),d=r,f+=p,p=0}}return{pageSize:r,dbSizePages:d,pages:l,committedFrames:f}}function j(e,t){let n=Se(t);if(!n||n.committedFrames===0)return{bytes:e,appliedFrames:0};let{pageSize:r,dbSizePages:i,pages:a}=n,o=Math.max(i*r,e.byteLength-e.byteLength%r),s=new Uint8Array(o);s.set(e.subarray(0,Math.min(e.byteLength,o)));for(let[e,t]of a){let n=(e-1)*r;n+r<=o&&s.set(t,n)}return{bytes:i>0?s.subarray(0,i*r):s,appliedFrames:n.committedFrames}}var Ce=`planche-file-handles`,M=`handles`;function we(){return new Promise((e,t)=>{if(typeof indexedDB>`u`){t(Error(`IndexedDB unavailable`));return}let n=indexedDB.open(Ce,1);n.onupgradeneeded=()=>n.result.createObjectStore(M),n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}function N(e,t){return we().then(n=>new Promise((r,i)=>{let a=t(n.transaction(M,e).objectStore(M));a.onsuccess=()=>r(a.result),a.onerror=()=>i(a.error)}))}var P=e=>`${e}:wal`;async function F(e,t){try{await N(`readwrite`,n=>n.put(t,e))}catch{}}async function I(e){try{return await N(`readonly`,t=>t.get(e))??null}catch{return null}}async function L(e){try{await N(`readwrite`,t=>t.delete(e))}catch{}}async function R(e,t){let n=e,r={mode:`readwrite`};try{if(n.queryPermission&&await n.queryPermission(r)===`granted`)return!0;if(t&&n.requestPermission)return await n.requestPermission(r)===`granted`}catch{}return!1}var z=e=>`dbcache-meta:${e}`,B=e=>`${e}.sqlite3`;async function Te(e){try{let t=await s.getItem(z(e));if(!t)return null;let n=JSON.parse(t),r=await o.get(B(e));return r?{bytes:new Uint8Array(r),meta:n}:null}catch{return null}}async function Ee(e,t,n){try{let r=t.slice().buffer;return await o.set(B(e),r)?(await s.setItem(z(e),JSON.stringify(n)),!0):!1}catch(e){return console.warn(`[db-cache] write failed:`,e),!1}}async function De(e,t){try{let n=await s.getItem(z(e));if(!n)return;await s.setItem(z(e),JSON.stringify({...JSON.parse(n),...t}))}catch{}}async function Oe(e){try{await o.remove(B(e)),await s.removeItem(z(e))}catch{}}var ke=`browser:`;function V(e){return typeof e==`string`&&e.startsWith(`browser:`)}var Ae=750;function je(e){let t=W.get(e);t?.profileId&&(t.flushTimer&&clearTimeout(t.flushTimer),t.flushTimer=setTimeout(()=>{t.flushTimer=null,H(e)},Ae))}async function H(e){let t=W.get(e);if(t?.profileId)try{let n=await Ze(e);await Ee(t.profileId,n,Me(t))}catch(e){console.warn(`[browser-sqlite] cache flush failed:`,e)}}function Me(e){return{name:e.source.name,lastModified:e.fileMeta.lastModified,size:e.fileMeta.size,dirty:e.dirty,cachedAt:Date.now()}}var Ne=d(`browserSqliteVisibilityListener`,()=>({installed:!1}));typeof document<`u`&&!Ne.installed&&(Ne.installed=!0,document.addEventListener(`visibilitychange`,()=>{if(document.visibilityState===`hidden`)for(let[e,t]of W)t.flushTimer&&(clearTimeout(t.flushTimer),t.flushTimer=null,H(e))}));function U(e){return e.toLowerCase().endsWith(`-wal`)}var W=d(`browserSqliteDatabases`,()=>new Map),Pe=d(`browserSqliteModule`,()=>({promise:null}));async function G(){return Pe.promise||=i(()=>import(`./dist-Roudme38.js`).then(e=>e.default()),[]),Pe.promise}function K(e){let t=W.get(e);if(!t)throw Error(`Browser connection not found: ${e}`);return t}function Fe(e){if(!(e.byteLength>=100&&e[0]===83&&e[15]===0)||e[18]!==2&&e[19]!==2)return{bytes:e,wal:!1};let t=new Uint8Array(e);return t[18]=1,t[19]=1,{bytes:t,wal:!0}}var Ie=`SQLite format 3\0`;function Le(e){if(e.byteLength===0)return null;if(e.byteLength<100)return r.t(`services.sqliteFile.tooSmall`);if(String.fromCharCode(...e.subarray(0,16))!==Ie)return r.t(`services.sqliteFile.notSqlite`);let t=e[16]<<8|e[17],n=t===1?65536:t;return n<512||n&n-1?r.t(`services.sqliteFile.badPageSize`,{size:n}):null}async function Re(e){let t=Le(e);if(t)throw Error(t);let n=await G(),i=new n.oo1.DB;if(e.byteLength===0)return i;let a=n.wasm.allocFromTypedArray(e),o=n.capi,s=o.SQLITE_DESERIALIZE_FREEONCLOSE??1,c=o.SQLITE_DESERIALIZE_RESIZEABLE??2,l=n.capi.sqlite3_deserialize(i.pointer,`main`,a,e.byteLength,e.byteLength,s|c);i.checkRc(l);try{i.exec(`SELECT count(*) FROM sqlite_master`)}catch(e){throw i.close(),Error(r.t(`services.sqliteFile.unreadable`,{message:e instanceof Error?e.message:String(e)}))}return i}async function ze(e){let t=window.showOpenFilePicker;if(t)try{let n=await t({multiple:e.multiple,types:e.sqliteOnly?[{description:r.t(`services.sqliteFile.pickerDescription`),accept:{"application/vnd.sqlite3":[`.sqlite`,`.sqlite3`,`.db`,`.db3`]}}]:void 0,excludeAcceptAllOption:!1});return Promise.all(n.map(async e=>({file:await e.getFile(),handle:e})))}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return[];throw e}return new Promise(t=>{let n=document.createElement(`input`);n.type=`file`,n.multiple=e.multiple,e.sqliteOnly&&(n.accept=`.sqlite,.sqlite3,.db,.db3,application/vnd.sqlite3`),n.onchange=()=>t(Array.from(n.files??[]).map(e=>({file:e}))),n.oncancel=()=>t([]),n.click()})}async function Be(){let e=await ze({multiple:!0,sqliteOnly:!1}),t=e.find(e=>!U(e.file.name));return t?{main:t,wal:e.find(e=>U(e.file.name)&&e.file.name.toLowerCase()===`${t.file.name.toLowerCase()}-wal`)??e.find(e=>U(e.file.name))}:null}async function Ve(){let[e]=await ze({multiple:!1,sqliteOnly:!1});return e??null}async function q(e,t,n={}){let{bytes:r,wal:i}=Fe(e),a=await Re(r),o=`${ke}${crypto.randomUUID()}`,s={...t,wal:i};return W.set(o,{db:a,source:s,rawBytes:e,profileId:n.profileId,fileMeta:n.fileMeta??{lastModified:0,size:e.byteLength},dirty:n.dirty??!1,flushTimer:null}),{connectionId:o,source:s}}async function J(e,t,n,r={}){let i=e?new Uint8Array(await e.arrayBuffer()):new Uint8Array,a=i,o=!1;n&&(a=j(i,new Uint8Array(await n.file.arrayBuffer())).bytes,o=!0);let s=await q(a,{name:e?.name??`:memory:`,handle:t,walApplied:o,walHandle:n?.handle},{profileId:r.profileId,fileMeta:{lastModified:Math.max(e?.lastModified??0,n?.file.lastModified??0),size:i.byteLength}});return W.get(s.connectionId).rawBytes=i,r.profileId&&H(s.connectionId),s}async function He(e,t,n,r){return await q(t,{name:n.name,handle:r,walApplied:!0},{profileId:e,fileMeta:{lastModified:n.lastModified,size:n.size},dirty:n.dirty})}function Ue(e,t){let n=K(e);n.source={...n.source,handle:t}}function We(e){return W.get(e)?.dirty??!1}async function Ge(e,t){let n=K(e),r=j(n.rawBytes,new Uint8Array(await t.file.arrayBuffer())),i=await q(r.bytes,{...n.source,walApplied:!0,walHandle:t.handle},{profileId:n.profileId,fileMeta:n.fileMeta});return W.get(i.connectionId).rawBytes=n.rawBytes,X(e),n.profileId&&H(i.connectionId),{...i,appliedFrames:r.appliedFrames}}function Y(e){return W.get(e)?.source??null}function Ke(e){return e&&e.trim().toLowerCase().replace(/\(.*$/,``).trim()||null}function qe(e){return e==null?`null`:typeof e==`number`?Number.isInteger(e)?`integer`:`real`:typeof e==`bigint`?`bigint`:e instanceof Uint8Array?`blob`:`text`}function Je(e){return typeof e==`bigint`?Number(e):e instanceof Uint8Array?{type:`Buffer`,data:Array.from(e)}:e}async function Ye(e,t){let{db:n}=K(e),r=await G(),i=performance.now(),a=K(e),o=Number(r.capi.sqlite3_total_changes(n.pointer)),s=n.prepare(t);try{if(s.columnCount===0){s.step();let c=Number(n.changes()),l=Number(r.capi.sqlite3_last_insert_rowid(n.pointer)),u=/^\s*(BEGIN|COMMIT|END|ROLLBACK|SAVEPOINT|RELEASE)\b/i.test(t);return(c>0||Number(r.capi.sqlite3_total_changes(n.pointer))!==o||!u)&&(a.dirty=!0,je(e)),{success:!0,fields:[],records:[],affectedRows:c,insertId:l,isResultQuery:!1,execTime:Math.round(performance.now()-i)}}let c=[];for(;s.step();)c.push(s.get([]).map(Je));let l=s.getColumnNames(),u=r.capi,d=s.pointer;return{success:!0,fields:l.map((e,t)=>{let n=Ke(u.sqlite3_column_decltype(d,t)),r=u.sqlite3_column_table_name(d,t)??``;return{name:e,orgName:u.sqlite3_column_origin_name(d,t)??e,type:n??qe(Xe(c,t)),table:r,orgTable:r,db:u.sqlite3_column_database_name(d,t)??``,maxLength:0}}),records:c,affectedRows:0,insertId:0,isResultQuery:!0,execTime:Math.round(performance.now()-i)}}finally{s.finalize()}}function Xe(e,t){for(let n of e){let e=n[t];if(e!=null)return e}return null}async function Ze(e){let{db:t}=K(e);return(await G()).capi.sqlite3_js_db_export(t.pointer)}function Qe(e){let t=W.get(e);if(!t?.source.handle)return null;let{source:n}=t;return n.wal&&!n.walApplied&&!n.walAcknowledged?r.t(`services.sqliteFile.walNotLoaded`):null}function $e(e){let t=K(e);t.source={...t.source,walAcknowledged:!0}}async function et(e){let{source:t,fileMeta:n}=e;if(!t.handle)return;let i=await t.handle.getFile();if(n.lastModified&&(i.lastModified!==n.lastModified||i.size!==n.size))throw Error(r.t(`services.sqliteFile.changedOnDisk`,{name:t.name}));if(t.walHandle)try{let e=await t.walHandle.getFile();if(e.size>0&&!t.walApplied)throw Error(r.t(`services.sqliteFile.walHasChanges`,{name:t.name}));if(e.size>0&&t.walApplied&&e.lastModified>n.lastModified)throw Error(r.t(`services.sqliteFile.walChangedOnDisk`,{name:t.name}))}catch(e){if(e instanceof Error&&!(e instanceof DOMException))throw e}}async function tt(e){let t=K(e),{source:n}=t,i=Qe(e);if(i)throw Error(i);n.handle&&await et(t);let a=await Ze(e);if(n.handle){if(!await R(n.handle,!0))throw Error(r.t(`services.sqliteFile.writeDenied`,{name:n.name}));let t=await n.handle.createWritable();await t.write(a),await t.close(),n.walHandle&&await(await n.walHandle.createWritable()).close();let i=K(e);i.dirty=!1;try{let e=await n.handle.getFile();i.fileMeta={lastModified:e.lastModified,size:e.size}}catch{i.fileMeta={lastModified:Date.now(),size:a.byteLength}}return i.profileId&&De(i.profileId,{...Me(i)}),`in-place`}let o=new Blob([a],{type:`application/vnd.sqlite3`}),s=URL.createObjectURL(o),c=document.createElement(`a`);return c.href=s,c.download=n.name===`:memory:`?`database.sqlite`:n.name,c.click(),URL.revokeObjectURL(s),`download`}function X(e){let t=W.get(e);t&&(t.flushTimer&&clearTimeout(t.flushTimer),t.db.close(),W.delete(e))}function Z(e){return W.get(e)?.profileId}async function nt(e){await L(e),await L(P(e)),await Oe(e)}async function rt(e,t){let n=await I(e);if(!n)return null;if(!await R(n,t))return`denied`;try{return{handle:n,file:await n.getFile()}}catch(t){if(t instanceof DOMException&&(t.name===`NotFoundError`||t.name===`NotAllowedError`))return await L(e),null;throw t}}async function it(e,t){let n=await I(P(e));if(!(!n||!await R(n,t)))try{return{file:await n.getFile(),handle:n}}catch{await L(P(e));return}}async function at(e,t){let n={remembered:!0,fromCache:!1,restoredUnsaved:!1,fileDetached:!1,diskChanged:!1},r=await Te(e),i=await rt(e,t.interactive),a=i&&i!==`denied`?i.handle:void 0,o=i&&i!==`denied`?i.file:null;if(r?.meta.dirty){let{connectionId:t,source:i}=await He(e,r.bytes,r.meta,a),s=o?o.lastModified!==r.meta.lastModified||o.size!==r.meta.size:!1;return{...n,connectionId:t,fileName:i.name,wal:i.wal,walApplied:i.walApplied,fromCache:!0,restoredUnsaved:!0,fileDetached:!a,diskChanged:s}}if(o&&a){let{connectionId:r,source:i}=await J(o,a,await it(e,t.interactive),{profileId:e});return{...n,connectionId:r,fileName:i.name,wal:i.wal,walApplied:i.walApplied}}if(r){let{connectionId:t,source:i}=await He(e,r.bytes,r.meta);return{...n,connectionId:t,fileName:i.name,wal:i.wal,walApplied:i.walApplied,fromCache:!0,fileDetached:!0}}if(!t.interactive)return null;let s=await Be();if(!s)return null;let{connectionId:c,source:l}=await J(s.main.file,s.main.handle,s.wal,{profileId:e});return s.main.handle?await F(e,s.main.handle):await L(e),s.wal?.handle?await F(P(e),s.wal.handle):await L(P(e)),{...n,connectionId:c,fileName:l.name,wal:l.wal,walApplied:l.walApplied,remembered:!1}}var ot=`SQLite format 3\0`;async function st(e){if(e.size===0)return!0;if(e.size<100)return!1;let t=new Uint8Array(await e.slice(0,16).arrayBuffer());return String.fromCharCode(...t)===ot}async function ct(e,t){try{let n=await I(e);return n?await n.isSameEntry(t):!1}catch{return!1}}async function lt(n){let i=n.find(e=>!U(e.file.name));if(!i)return;if(!await st(i.file))throw Error(r.t(`app.dropNotSqlite`,{name:i.file.name}));let a=n.find(e=>U(e.file.name)&&e.file.name.toLowerCase()===`${i.file.name.toLowerCase()}-wal`),o=l.getState(),s;for(let e of o.savedConnections)if(!(e.dbms!==`sqlite`||(e.transport??`browser`)!==`browser`||e.sample||e.file!==i.file.name)&&i.handle&&await ct(e.id,i.handle)){s=e;break}let c=s??{id:crypto.randomUUID(),hostName:i.file.name.replace(/\.(db|sqlite|sqlite3|db3)$/i,``),host:``,user:``,pass:``,charset:`utf8`,port:0,dbms:`sqlite`,transport:`browser`,file:i.file.name,autoConnection:!1,savePassword:!0,authToken:``};e(`sqlite_file_drop`,{reused:!!s,wal:!!a,handle:!!i.handle});let d=o.activeConnections.some(e=>e.id===c.id),f=o.activeConnections.find(e=>e.id===c.id)?.serverConnectionId,{connectionId:p}=await J(i.file,i.handle,a,{profileId:c.id});f&&f!==p&&V(f)&&X(f),i.handle?await F(c.id,i.handle):await L(c.id),a?.handle?await F(P(c.id),a.handle):await L(P(c.id)),s||o.addSavedConnection(c),o.openConnection({...c,serverConnectionId:p}),o.setPendingReopen(c.id,!1),o.setFileDetached(c.id,!1),d?ve.getState().removeTree(c.id):u.getState().addQueryTab(c.id,{id:`tab-${Date.now()}`,title:r.t(`connection.dialog.firstQueryTab`),query:``,database:``,isExecuting:!1,results:[],error:null,executionTime:null}),t.getState().setWelcomeVisible(!1)}async function ut(e,t){let n=await rt(e,!0);return!n||n===`denied`?!1:(Ue(t,n.handle),!0)}async function dt(e){let t=Z(e),n=Y(e);return n&&!n.handle&&t&&await ut(t,e),tt(e)}function ft(e){let t=Y(e);return t?t.name===`:memory:`?r.t(`services.save.inMemory`):typeof window<`u`&&!(`showOpenFilePicker`in window)?r.t(`services.save.noFileSystemAccess`):!t.handle&&!Z(e)?r.t(`services.save.noWritableHandle`):null:r.t(`services.save.notBrowserSqlite`)}async function pt(e,t){let n=await Ve();if(!n)return null;let r=await Ge(t,n);return n.handle&&await F(P(e),n.handle),{connectionId:r.connectionId,appliedFrames:r.appliedFrames}}function mt(e){if(!V(e))return null;let t=Y(e);return t?{wal:t.wal,walApplied:t.walApplied,walAcknowledged:t.walAcknowledged??!1}:null}function ht(e){return e.dbms===`sqlite`&&e.transport===`browser`?`browser`:`tunnel`}async function gt(e,t){return C(e,t)}async function _t(e,t){return ge(e,t)}async function vt(e,t,n){let r=e=>({success:!1,fields:[],records:[],affectedRows:0,insertId:0,isResultQuery:!1,execTime:0,message:e instanceof Error?e.message:String(e)});if(V(e))try{return await Ye(e,t)}catch(e){return r(e)}let i=Q.get(e)??e;try{return await w(i,t,n)}catch(e){if(!(e instanceof x)||e.status!==404)return r(e);let a=await yt(i);if(!a)return r(e);try{return await w(a,t,n)}catch(e){return r(e)}}}var Q=new Map,$=new Map;function yt(e){let n=$.get(e);if(n)return n;let i=(async()=>{let n=l.getState(),i=n.activeConnections.find(t=>t.serverConnectionId===e||Q.get(t.serverConnectionId??``)===e);if(!i||ht(i)===`browser`||se())return null;if(i.serverConnectionId&&i.serverConnectionId!==e&&!Q.has(i.serverConnectionId))return Q.set(e,i.serverConnectionId),i.serverConnectionId;let a=n.resolveCredentials(i),o=a.ssh?.enabled&&a.ssh.auth===`password`&&!a.ssh.password;if(!a.pass&&i.pass===``&&i.dbms!==`sqlite`||o)return null;try{let n=await C(v(a),a.authToken||void 0);if(!n.success||!n.connectionId)return null;for(let[t,r]of Q)r===e&&Q.set(t,n.connectionId);return Q.set(e,n.connectionId),l.getState().updateServerConnectionId(i.id,n.connectionId),l.getState().setTransactionOpen(i.id,!1),t.getState().setFooterMessage(r.t(`services.agent.reconnected`,{name:i.hostName||i.host||i.databaseId||i.file||i.id})),n.connectionId}catch{return null}})();return $.set(e,i),i.finally(()=>$.delete(e)),i}async function bt(e){if(V(e)){let t=Z(e);X(e),t&&await Oe(t);return}return he(e)}function xt(e){return async(t,n)=>{let i=await vt(e,t,n);if(!i.success)throw Error(i.message??r.t(`services.query.failed`));return i}}export{ee as A,ne as C,pe as D,oe as E,d as M,v as O,ce as S,fe as T,V as _,bt as a,ve as b,mt as c,lt as d,ut as f,Qe as g,$e as h,ft as i,p as j,f as k,ht as l,_t as m,gt as n,vt as o,dt as p,xt as r,nt as s,at as t,pt as u,We as v,le as w,se as x,J as y};
|
|
1
|
+
import{c as e,n as t,r as n}from"./ui-store-DWSBgCoR.js";import{a as r,i}from"./i18n-DFnLZX4V.js";import{i as a,n as o,r as s,t as c}from"./app-storage-B6v72zLH.js";import{t as l}from"./connection-store-B9-4NAfR.js";import{n as u}from"./query-store-fCiE0iiG.js";function d(e,t){let n=globalThis,r=`__planche_${e}`;return r in n||(n[r]=t()),n[r]}var f=new Set([`neon`,`supabase`]);function p(e){return e===`postgres`||f.has(e)}var ee=`_rowid_`,te=`http://127.0.0.1:8888`,m=d(`tunnelAgent`,()=>({url:null,token:null}));function ne(e){m.url=e.url?.replace(/\/+$/,``)||null,m.token=e.token?.trim()||null}var re=new Set([`127.0.0.1`,`localhost`,`[::1]`,`::1`]);function ie(e){try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&re.has(t.hostname)}catch{return!1}}function ae(e){try{return typeof window<`u`&&new URL(e).origin===window.location.origin}catch{return!1}}function oe(e){return ie(e)||ae(e)}function se(){return m.url!==null&&m.url!==`/api`&&!oe(m.url)}function h(){return m.url??te}function g(){let e=h();return e===`/api`?r.t(`services.agent.devProxyUrl`,{url:`http://localhost:8888`}):e}async function ce(){let e=g(),t;try{let e={};m.token&&(e.Authorization=`Bearer ${m.token}`),t=await(await fetch(`${h()}/health`,{cache:`no-store`,headers:e})).json()}catch(t){return{state:`offline`,url:e,message:t instanceof Error?t.message:String(t)}}return t.name!==`planche`||typeof t.version!=`string`||!/^[\w.+-]{1,32}$/.test(t.version)?{state:`offline`,url:e,message:r.t(`services.agent.notPlanche`)}:t.protocolVersion===2?t.authorized===!1||m.token===null&&t.authorized===void 0?{state:`unauthorized`,url:e,version:t.version}:{state:`online`,url:e,version:t.version,activeConnections:t.activeConnections??0,...t.gateway?{gateway:t.gateway}:{}}:{state:`outdated`,url:e,version:t.version,protocolVersion:t.protocolVersion??0}}async function le(){let e=await fetch(`${h()}/profiles`,{cache:`no-store`,headers:b()}),t=await e.json().catch(()=>null);if(!e.ok||!t||t.success!==!0)throw new x(t?.message??r.t(`services.agent.httpError`,{status:e.status,statusText:e.statusText}),e.status);return t}function _(e){let t=e.ssh;if(t?.enabled)return{host:t.host,port:t.port,user:t.user,auth:t.auth,password:t.auth===`password`?t.password??``:void 0,privateKey:t.auth===`key`?t.privateKey:void 0,passphrase:t.auth===`key`&&t.passphrase||void 0}}function v(e){return e.gatewayProfile?{profile:e.gatewayProfile}:e.dbms===`sqlite`?{driver:`sqlite`,file:e.file??``,createIfMissing:e.createIfMissing??!1,readonly:e.readOnly??!1}:e.dbms===`d1`?{driver:`d1`,accountId:e.accountId??``,databaseId:e.databaseId??``,apiToken:e.pass}:e.dbms===`postgres`?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:_(e)}:f.has(e.dbms)?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:!0,sslVerify:e.dbms===`neon`}:e.dbms===`mssql`?{driver:`mssql`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`master`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:_(e)}:e.dbms===`oracle`?{driver:`oracle`,host:e.host,port:e.port,user:e.user,password:e.pass,serviceName:e.database||`FREEPDB1`,ssh:_(e)}:{driver:`mysql`,host:e.host,port:e.port,user:e.user,password:e.pass,charset:e.charset===`utf8`?`utf8mb4`:e.charset,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:_(e)}}var y=d(`tunnelAuthTokens`,()=>new Map);function ue(e,t){let n=t?.trim();n?y.set(e,n):y.delete(e)}function de(e){return e?.trim()||m.token||void 0}function b(e){let t={"Content-Type":`application/json`},n=de(e);return n&&(t.Authorization=`Bearer ${n}`),t}var x=class extends Error{status;body;constructor(e,t,n=null){super(e),this.status=t,this.body=n}};function fe(e){if(!(e instanceof x)||e.status!==409)return null;let t=e.body,n=t?.hostKey;if(t?.code!==`host-key-unknown`||!n)return null;let r=typeof n.host==`string`&&/^[A-Za-z0-9._:[\]-]{1,253}$/.test(n.host)?n.host:null,i=typeof n.type==`string`&&/^[\w.@-]{1,64}$/.test(n.type)?n.type:null,a=typeof n.fingerprint==`string`&&/^SHA256:[A-Za-z0-9+/]{43}$/.test(n.fingerprint)?n.fingerprint:null,o=Number.isInteger(n.port)&&n.port>0&&n.port<65536?n.port:null;return r&&i&&a&&o?{host:r,port:o,type:i,fingerprint:a}:null}async function pe(e,t){let n=await fetch(`${e.replace(/\/+$/,``)}/pair`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:t})}),i=await n.json().catch(()=>null);if(!n.ok||!i?.success||typeof i.token!=`string`)throw Error(i?.message??r.t(`services.agent.httpError`,{status:n.status,statusText:n.statusText}));return i.token}async function S(e,t,n){let i;try{i=await fetch(`${h()}${e}`,{method:`POST`,headers:b(n),body:JSON.stringify(t)})}catch(e){throw Error(r.t(`services.agent.unreachable`,{url:g(),message:e instanceof Error?e.message:String(e)}))}let a=null;try{a=await i.json()}catch{a=null}if(!i.ok)throw new x(a?.message??r.t(`services.agent.httpError`,{status:i.status,statusText:i.statusText}),i.status,a);if(!a)throw Error(r.t(`services.agent.emptyResponse`));return a}async function C(e,t){let n=await S(`/connect`,e,t);return n.success&&n.connectionId&&(ue(n.connectionId,de(t)),me()),n}async function w(e,t,n){let r=performance.now(),i=await S(`/query`,{connectionId:e,sql:t,database:n},y.get(e));return i.execTime||=Math.round(performance.now()-r),i}function me(){if(typeof window>`u`)return;let e=d(`tunnelPageHide`,()=>({done:!1}));e.done||(e.done=!0,window.addEventListener(`pagehide`,()=>{for(let[e,t]of y)fetch(`${h()}/disconnect`,{method:`POST`,headers:b(t),body:JSON.stringify({connectionId:e}),keepalive:!0}).catch(()=>void 0)}))}async function he(e){try{await S(`/disconnect`,{connectionId:e},y.get(e))}finally{y.delete(e)}}async function ge(e,t){return S(`/test-connection`,e,t)}function T(e,t,n){return e.map(e=>e.id===t?n(e):e.children.length>0?{...e,children:T(e.children,t,n)}:e)}function _e(e,t){for(let n of e){if(n.id===t)return n;let e=_e(n.children,t);if(e)return e}return null}function E(e,t,n){let r=new Set(e??[]);if(n)r.add(t);else for(let e of r)(e===t||e.startsWith(`${t}/`))&&r.delete(e);return[...r]}var ve=n()(a(e=>({trees:{},selectedNodeId:{},expandedIds:{},setTree:(t,n)=>e(e=>({trees:{...e.trees,[t]:n}})),setChildren:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{expandedIds:{...e.expandedIds,[t]:E(e.expandedIds[t],n,!0)},trees:{...e.trees,[t]:T(i,n,e=>({...e,children:r,isLoading:!1,isExpanded:!0,metadata:{...e.metadata,count:r.length}}))}}:e}),setNodeMetadata:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{trees:{...e.trees,[t]:T(i,n,e=>({...e,metadata:{...e.metadata,...r}}))}}:e}),toggleExpanded:(t,n)=>e(e=>{let r=e.trees[t];if(!r)return e;let i=!_e(r,n)?.isExpanded;return{expandedIds:{...e.expandedIds,[t]:E(e.expandedIds[t],n,i)},trees:{...e.trees,[t]:T(r,n,e=>({...e,isExpanded:i}))}}}),setExpanded:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{expandedIds:{...e.expandedIds,[t]:E(e.expandedIds[t],n,r)},trees:{...e.trees,[t]:T(i,n,e=>({...e,isExpanded:r}))}}:e}),setSelected:(t,n)=>e(e=>({selectedNodeId:{...e.selectedNodeId,[t]:n}})),setLoading:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{trees:{...e.trees,[t]:T(i,n,e=>({...e,isLoading:r}))}}:e}),removeTree:t=>e(e=>{let n={...e.trees},r={...e.selectedNodeId};return delete n[t],delete r[t],{trees:n,selectedNodeId:r}})}),{name:`planche-schema`,storage:c(),partialize:e=>({selectedNodeId:e.selectedNodeId,expandedIds:e.expandedIds})})),ye=32,D=24,be=931071618,O=931071619,k=(e,t)=>(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0,xe=(e,t)=>(e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t])>>>0;function A(e,t,n,r,i=0,a=0){let o=r?k:xe;for(let r=t;r<t+n;r+=8)i=i+o(e,r)+a>>>0,a=a+o(e,r+4)+i>>>0;return[i,a]}function Se(e){if(e.byteLength<ye)return null;let t=k(e,0);if(t!==be&&t!==O)return null;let n=t===O,r=k(e,8);if(r<512||r>65536||r&r-1)return null;let i=k(e,16),a=k(e,20),[o,s]=A(e,0,24,n);if(o!==k(e,24)||s!==k(e,28))return null;let c=D+r,l=new Map,u=new Map,d=0,f=0,p=0;for(let t=ye;t+c<=e.byteLength&&!(k(e,t+8)!==i||k(e,t+12)!==a||([o,s]=A(e,t,8,n,o,s),[o,s]=A(e,t+D,r,n,o,s),o!==k(e,t+16)||s!==k(e,t+20)));t+=c){let n=k(e,t),r=k(e,t+4);if(n===0)break;if(u.set(n,e.subarray(t+D,t+c)),p++,r>0){for(let[e,t]of u)l.set(e,t);u.clear(),d=r,f+=p,p=0}}return{pageSize:r,dbSizePages:d,pages:l,committedFrames:f}}function j(e,t){let n=Se(t);if(!n||n.committedFrames===0)return{bytes:e,appliedFrames:0};let{pageSize:r,dbSizePages:i,pages:a}=n,o=Math.max(i*r,e.byteLength-e.byteLength%r),s=new Uint8Array(o);s.set(e.subarray(0,Math.min(e.byteLength,o)));for(let[e,t]of a){let n=(e-1)*r;n+r<=o&&s.set(t,n)}return{bytes:i>0?s.subarray(0,i*r):s,appliedFrames:n.committedFrames}}var Ce=`planche-file-handles`,M=`handles`;function we(){return new Promise((e,t)=>{if(typeof indexedDB>`u`){t(Error(`IndexedDB unavailable`));return}let n=indexedDB.open(Ce,1);n.onupgradeneeded=()=>n.result.createObjectStore(M),n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}function N(e,t){return we().then(n=>new Promise((r,i)=>{let a=t(n.transaction(M,e).objectStore(M));a.onsuccess=()=>r(a.result),a.onerror=()=>i(a.error)}))}var P=e=>`${e}:wal`;async function F(e,t){try{await N(`readwrite`,n=>n.put(t,e))}catch{}}async function I(e){try{return await N(`readonly`,t=>t.get(e))??null}catch{return null}}async function L(e){try{await N(`readwrite`,t=>t.delete(e))}catch{}}async function R(e,t){let n=e,r={mode:`readwrite`};try{if(n.queryPermission&&await n.queryPermission(r)===`granted`)return!0;if(t&&n.requestPermission)return await n.requestPermission(r)===`granted`}catch{}return!1}var z=e=>`dbcache-meta:${e}`,B=e=>`${e}.sqlite3`;async function Te(e){try{let t=await s.getItem(z(e));if(!t)return null;let n=JSON.parse(t),r=await o.get(B(e));return r?{bytes:new Uint8Array(r),meta:n}:null}catch{return null}}async function Ee(e,t,n){try{let r=t.slice().buffer;return await o.set(B(e),r)?(await s.setItem(z(e),JSON.stringify(n)),!0):!1}catch(e){return console.warn(`[db-cache] write failed:`,e),!1}}async function De(e,t){try{let n=await s.getItem(z(e));if(!n)return;await s.setItem(z(e),JSON.stringify({...JSON.parse(n),...t}))}catch{}}async function Oe(e){try{await o.remove(B(e)),await s.removeItem(z(e))}catch{}}var ke=`browser:`;function V(e){return typeof e==`string`&&e.startsWith(`browser:`)}var Ae=750;function je(e){let t=W.get(e);t?.profileId&&(t.flushTimer&&clearTimeout(t.flushTimer),t.flushTimer=setTimeout(()=>{t.flushTimer=null,H(e)},Ae))}async function H(e){let t=W.get(e);if(t?.profileId)try{let n=await Ze(e);await Ee(t.profileId,n,Me(t))}catch(e){console.warn(`[browser-sqlite] cache flush failed:`,e)}}function Me(e){return{name:e.source.name,lastModified:e.fileMeta.lastModified,size:e.fileMeta.size,dirty:e.dirty,cachedAt:Date.now()}}var Ne=d(`browserSqliteVisibilityListener`,()=>({installed:!1}));typeof document<`u`&&!Ne.installed&&(Ne.installed=!0,document.addEventListener(`visibilitychange`,()=>{if(document.visibilityState===`hidden`)for(let[e,t]of W)t.flushTimer&&(clearTimeout(t.flushTimer),t.flushTimer=null,H(e))}));function U(e){return e.toLowerCase().endsWith(`-wal`)}var W=d(`browserSqliteDatabases`,()=>new Map),Pe=d(`browserSqliteModule`,()=>({promise:null}));async function G(){return Pe.promise||=i(()=>import(`./dist-Roudme38.js`).then(e=>e.default()),[]),Pe.promise}function K(e){let t=W.get(e);if(!t)throw Error(`Browser connection not found: ${e}`);return t}function Fe(e){if(!(e.byteLength>=100&&e[0]===83&&e[15]===0)||e[18]!==2&&e[19]!==2)return{bytes:e,wal:!1};let t=new Uint8Array(e);return t[18]=1,t[19]=1,{bytes:t,wal:!0}}var Ie=`SQLite format 3\0`;function Le(e){if(e.byteLength===0)return null;if(e.byteLength<100)return r.t(`services.sqliteFile.tooSmall`);if(String.fromCharCode(...e.subarray(0,16))!==Ie)return r.t(`services.sqliteFile.notSqlite`);let t=e[16]<<8|e[17],n=t===1?65536:t;return n<512||n&n-1?r.t(`services.sqliteFile.badPageSize`,{size:n}):null}async function Re(e){let t=Le(e);if(t)throw Error(t);let n=await G(),i=new n.oo1.DB;if(e.byteLength===0)return i;let a=n.wasm.allocFromTypedArray(e),o=n.capi,s=o.SQLITE_DESERIALIZE_FREEONCLOSE??1,c=o.SQLITE_DESERIALIZE_RESIZEABLE??2,l=n.capi.sqlite3_deserialize(i.pointer,`main`,a,e.byteLength,e.byteLength,s|c);i.checkRc(l);try{i.exec(`SELECT count(*) FROM sqlite_master`)}catch(e){throw i.close(),Error(r.t(`services.sqliteFile.unreadable`,{message:e instanceof Error?e.message:String(e)}))}return i}async function ze(e){let t=window.showOpenFilePicker;if(t)try{let n=await t({multiple:e.multiple,types:e.sqliteOnly?[{description:r.t(`services.sqliteFile.pickerDescription`),accept:{"application/vnd.sqlite3":[`.sqlite`,`.sqlite3`,`.db`,`.db3`]}}]:void 0,excludeAcceptAllOption:!1});return Promise.all(n.map(async e=>({file:await e.getFile(),handle:e})))}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return[];throw e}return new Promise(t=>{let n=document.createElement(`input`);n.type=`file`,n.multiple=e.multiple,e.sqliteOnly&&(n.accept=`.sqlite,.sqlite3,.db,.db3,application/vnd.sqlite3`),n.onchange=()=>t(Array.from(n.files??[]).map(e=>({file:e}))),n.oncancel=()=>t([]),n.click()})}async function Be(){let e=await ze({multiple:!0,sqliteOnly:!1}),t=e.find(e=>!U(e.file.name));return t?{main:t,wal:e.find(e=>U(e.file.name)&&e.file.name.toLowerCase()===`${t.file.name.toLowerCase()}-wal`)??e.find(e=>U(e.file.name))}:null}async function Ve(){let[e]=await ze({multiple:!1,sqliteOnly:!1});return e??null}async function q(e,t,n={}){let{bytes:r,wal:i}=Fe(e),a=await Re(r),o=`${ke}${crypto.randomUUID()}`,s={...t,wal:i};return W.set(o,{db:a,source:s,rawBytes:e,profileId:n.profileId,fileMeta:n.fileMeta??{lastModified:0,size:e.byteLength},dirty:n.dirty??!1,flushTimer:null}),{connectionId:o,source:s}}async function J(e,t,n,r={}){let i=e?new Uint8Array(await e.arrayBuffer()):new Uint8Array,a=i,o=!1;n&&(a=j(i,new Uint8Array(await n.file.arrayBuffer())).bytes,o=!0);let s=await q(a,{name:e?.name??`:memory:`,handle:t,walApplied:o,walHandle:n?.handle},{profileId:r.profileId,fileMeta:{lastModified:Math.max(e?.lastModified??0,n?.file.lastModified??0),size:i.byteLength}});return W.get(s.connectionId).rawBytes=i,r.profileId&&H(s.connectionId),s}async function He(e,t,n,r){return await q(t,{name:n.name,handle:r,walApplied:!0},{profileId:e,fileMeta:{lastModified:n.lastModified,size:n.size},dirty:n.dirty})}function Ue(e,t){let n=K(e);n.source={...n.source,handle:t}}function We(e){return W.get(e)?.dirty??!1}async function Ge(e,t){let n=K(e),r=j(n.rawBytes,new Uint8Array(await t.file.arrayBuffer())),i=await q(r.bytes,{...n.source,walApplied:!0,walHandle:t.handle},{profileId:n.profileId,fileMeta:n.fileMeta});return W.get(i.connectionId).rawBytes=n.rawBytes,X(e),n.profileId&&H(i.connectionId),{...i,appliedFrames:r.appliedFrames}}function Y(e){return W.get(e)?.source??null}function Ke(e){return e&&e.trim().toLowerCase().replace(/\(.*$/,``).trim()||null}function qe(e){return e==null?`null`:typeof e==`number`?Number.isInteger(e)?`integer`:`real`:typeof e==`bigint`?`bigint`:e instanceof Uint8Array?`blob`:`text`}function Je(e){return typeof e==`bigint`?Number(e):e instanceof Uint8Array?{type:`Buffer`,data:Array.from(e)}:e}async function Ye(e,t){let{db:n}=K(e),r=await G(),i=performance.now(),a=K(e),o=Number(r.capi.sqlite3_total_changes(n.pointer)),s=n.prepare(t);try{if(s.columnCount===0){s.step();let c=Number(n.changes()),l=Number(r.capi.sqlite3_last_insert_rowid(n.pointer)),u=/^\s*(BEGIN|COMMIT|END|ROLLBACK|SAVEPOINT|RELEASE)\b/i.test(t);return(c>0||Number(r.capi.sqlite3_total_changes(n.pointer))!==o||!u)&&(a.dirty=!0,je(e)),{success:!0,fields:[],records:[],affectedRows:c,insertId:l,isResultQuery:!1,execTime:Math.round(performance.now()-i)}}let c=[];for(;s.step();)c.push(s.get([]).map(Je));let l=s.getColumnNames(),u=r.capi,d=s.pointer;return{success:!0,fields:l.map((e,t)=>{let n=Ke(u.sqlite3_column_decltype(d,t)),r=u.sqlite3_column_table_name(d,t)??``;return{name:e,orgName:u.sqlite3_column_origin_name(d,t)??e,type:n??qe(Xe(c,t)),table:r,orgTable:r,db:u.sqlite3_column_database_name(d,t)??``,maxLength:0}}),records:c,affectedRows:0,insertId:0,isResultQuery:!0,execTime:Math.round(performance.now()-i)}}finally{s.finalize()}}function Xe(e,t){for(let n of e){let e=n[t];if(e!=null)return e}return null}async function Ze(e){let{db:t}=K(e);return(await G()).capi.sqlite3_js_db_export(t.pointer)}function Qe(e){let t=W.get(e);if(!t?.source.handle)return null;let{source:n}=t;return n.wal&&!n.walApplied&&!n.walAcknowledged?r.t(`services.sqliteFile.walNotLoaded`):null}function $e(e){let t=K(e);t.source={...t.source,walAcknowledged:!0}}async function et(e){let{source:t,fileMeta:n}=e;if(!t.handle)return;let i=await t.handle.getFile();if(n.lastModified&&(i.lastModified!==n.lastModified||i.size!==n.size))throw Error(r.t(`services.sqliteFile.changedOnDisk`,{name:t.name}));if(t.walHandle)try{let e=await t.walHandle.getFile();if(e.size>0&&!t.walApplied)throw Error(r.t(`services.sqliteFile.walHasChanges`,{name:t.name}));if(e.size>0&&t.walApplied&&e.lastModified>n.lastModified)throw Error(r.t(`services.sqliteFile.walChangedOnDisk`,{name:t.name}))}catch(e){if(e instanceof Error&&!(e instanceof DOMException))throw e}}async function tt(e){let t=K(e),{source:n}=t,i=Qe(e);if(i)throw Error(i);n.handle&&await et(t);let a=await Ze(e);if(n.handle){if(!await R(n.handle,!0))throw Error(r.t(`services.sqliteFile.writeDenied`,{name:n.name}));let t=await n.handle.createWritable();await t.write(a),await t.close(),n.walHandle&&await(await n.walHandle.createWritable()).close();let i=K(e);i.dirty=!1;try{let e=await n.handle.getFile();i.fileMeta={lastModified:e.lastModified,size:e.size}}catch{i.fileMeta={lastModified:Date.now(),size:a.byteLength}}return i.profileId&&De(i.profileId,{...Me(i)}),`in-place`}let o=new Blob([a],{type:`application/vnd.sqlite3`}),s=URL.createObjectURL(o),c=document.createElement(`a`);return c.href=s,c.download=n.name===`:memory:`?`database.sqlite`:n.name,c.click(),URL.revokeObjectURL(s),`download`}function X(e){let t=W.get(e);t&&(t.flushTimer&&clearTimeout(t.flushTimer),t.db.close(),W.delete(e))}function Z(e){return W.get(e)?.profileId}async function nt(e){await L(e),await L(P(e)),await Oe(e)}async function rt(e,t){let n=await I(e);if(!n)return null;if(!await R(n,t))return`denied`;try{return{handle:n,file:await n.getFile()}}catch(t){if(t instanceof DOMException&&(t.name===`NotFoundError`||t.name===`NotAllowedError`))return await L(e),null;throw t}}async function it(e,t){let n=await I(P(e));if(!(!n||!await R(n,t)))try{return{file:await n.getFile(),handle:n}}catch{await L(P(e));return}}async function at(e,t){let n={remembered:!0,fromCache:!1,restoredUnsaved:!1,fileDetached:!1,diskChanged:!1},r=await Te(e),i=await rt(e,t.interactive),a=i&&i!==`denied`?i.handle:void 0,o=i&&i!==`denied`?i.file:null;if(r?.meta.dirty){let{connectionId:t,source:i}=await He(e,r.bytes,r.meta,a),s=o?o.lastModified!==r.meta.lastModified||o.size!==r.meta.size:!1;return{...n,connectionId:t,fileName:i.name,wal:i.wal,walApplied:i.walApplied,fromCache:!0,restoredUnsaved:!0,fileDetached:!a,diskChanged:s}}if(o&&a){let{connectionId:r,source:i}=await J(o,a,await it(e,t.interactive),{profileId:e});return{...n,connectionId:r,fileName:i.name,wal:i.wal,walApplied:i.walApplied}}if(r){let{connectionId:t,source:i}=await He(e,r.bytes,r.meta);return{...n,connectionId:t,fileName:i.name,wal:i.wal,walApplied:i.walApplied,fromCache:!0,fileDetached:!0}}if(!t.interactive)return null;let s=await Be();if(!s)return null;let{connectionId:c,source:l}=await J(s.main.file,s.main.handle,s.wal,{profileId:e});return s.main.handle?await F(e,s.main.handle):await L(e),s.wal?.handle?await F(P(e),s.wal.handle):await L(P(e)),{...n,connectionId:c,fileName:l.name,wal:l.wal,walApplied:l.walApplied,remembered:!1}}var ot=`SQLite format 3\0`;async function st(e){if(e.size===0)return!0;if(e.size<100)return!1;let t=new Uint8Array(await e.slice(0,16).arrayBuffer());return String.fromCharCode(...t)===ot}async function ct(e,t){try{let n=await I(e);return n?await n.isSameEntry(t):!1}catch{return!1}}async function lt(n){let i=n.find(e=>!U(e.file.name));if(!i)return;if(!await st(i.file))throw Error(r.t(`app.dropNotSqlite`,{name:i.file.name}));let a=n.find(e=>U(e.file.name)&&e.file.name.toLowerCase()===`${i.file.name.toLowerCase()}-wal`),o=l.getState(),s;for(let e of o.savedConnections)if(!(e.dbms!==`sqlite`||(e.transport??`browser`)!==`browser`||e.sample||e.file!==i.file.name)&&i.handle&&await ct(e.id,i.handle)){s=e;break}let c=s??{id:crypto.randomUUID(),hostName:i.file.name.replace(/\.(db|sqlite|sqlite3|db3)$/i,``),host:``,user:``,pass:``,charset:`utf8`,port:0,dbms:`sqlite`,transport:`browser`,file:i.file.name,autoConnection:!1,savePassword:!0,authToken:``};e(`sqlite_file_drop`,{reused:!!s,wal:!!a,handle:!!i.handle});let d=o.activeConnections.some(e=>e.id===c.id),f=o.activeConnections.find(e=>e.id===c.id)?.serverConnectionId,{connectionId:p}=await J(i.file,i.handle,a,{profileId:c.id});f&&f!==p&&V(f)&&X(f),i.handle?await F(c.id,i.handle):await L(c.id),a?.handle?await F(P(c.id),a.handle):await L(P(c.id)),s||o.addSavedConnection(c),o.openConnection({...c,serverConnectionId:p}),o.setPendingReopen(c.id,!1),o.setFileDetached(c.id,!1),d?ve.getState().removeTree(c.id):u.getState().addQueryTab(c.id,{id:`tab-${Date.now()}`,title:r.t(`connection.dialog.firstQueryTab`),query:``,database:``,isExecuting:!1,results:[],error:null,executionTime:null}),t.getState().setWelcomeVisible(!1)}async function ut(e,t){let n=await rt(e,!0);return!n||n===`denied`?!1:(Ue(t,n.handle),!0)}async function dt(e){let t=Z(e),n=Y(e);return n&&!n.handle&&t&&await ut(t,e),tt(e)}function ft(e){let t=Y(e);return t?t.name===`:memory:`?r.t(`services.save.inMemory`):typeof window<`u`&&!(`showOpenFilePicker`in window)?r.t(`services.save.noFileSystemAccess`):!t.handle&&!Z(e)?r.t(`services.save.noWritableHandle`):null:r.t(`services.save.notBrowserSqlite`)}async function pt(e,t){let n=await Ve();if(!n)return null;let r=await Ge(t,n);return n.handle&&await F(P(e),n.handle),{connectionId:r.connectionId,appliedFrames:r.appliedFrames}}function mt(e){if(!V(e))return null;let t=Y(e);return t?{wal:t.wal,walApplied:t.walApplied,walAcknowledged:t.walAcknowledged??!1}:null}function ht(e){return e.dbms===`sqlite`&&e.transport===`browser`?`browser`:`tunnel`}async function gt(e,t){return C(e,t)}async function _t(e,t){return ge(e,t)}async function vt(e,t,n){let r=e=>({success:!1,fields:[],records:[],affectedRows:0,insertId:0,isResultQuery:!1,execTime:0,message:e instanceof Error?e.message:String(e)});if(V(e))try{return await Ye(e,t)}catch(e){return r(e)}let i=Q.get(e)??e;try{return await w(i,t,n)}catch(e){if(!(e instanceof x)||e.status!==404)return r(e);let a=await yt(i);if(!a)return r(e);try{return await w(a,t,n)}catch(e){return r(e)}}}var Q=new Map,$=new Map;function yt(e){let n=$.get(e);if(n)return n;let i=(async()=>{let n=l.getState(),i=n.activeConnections.find(t=>t.serverConnectionId===e||Q.get(t.serverConnectionId??``)===e);if(!i||ht(i)===`browser`||se())return null;if(i.serverConnectionId&&i.serverConnectionId!==e&&!Q.has(i.serverConnectionId))return Q.set(e,i.serverConnectionId),i.serverConnectionId;let a=n.resolveCredentials(i),o=a.ssh?.enabled&&a.ssh.auth===`password`&&!a.ssh.password;if(!a.pass&&i.pass===``&&i.dbms!==`sqlite`||o)return null;try{let n=await C(v(a),a.authToken||void 0);if(!n.success||!n.connectionId)return null;for(let[t,r]of Q)r===e&&Q.set(t,n.connectionId);return Q.set(e,n.connectionId),l.getState().updateServerConnectionId(i.id,n.connectionId),l.getState().setTransactionOpen(i.id,!1),t.getState().setFooterMessage(r.t(`services.agent.reconnected`,{name:i.hostName||i.host||i.databaseId||i.file||i.id})),n.connectionId}catch{return null}})();return $.set(e,i),i.finally(()=>$.delete(e)),i}async function bt(e){if(V(e)){let t=Z(e);X(e),t&&await Oe(t);return}return he(e)}function xt(e){return async(t,n)=>{let i=await vt(e,t,n);if(!i.success)throw Error(i.message??r.t(`services.query.failed`));return i}}export{ee as A,ne as C,pe as D,oe as E,d as M,v as O,ce as S,fe as T,V as _,bt as a,ve as b,mt as c,lt as d,ut as f,Qe as g,$e as h,ft as i,p as j,f as k,ht as l,_t as m,gt as n,vt as o,dt as p,xt as r,nt as s,at as t,pt as u,We as v,le as w,se as x,J as y};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var e=/^(?:-?\d+(?:\.\d+)?|null|true|false|current_(?:timestamp|date|time)(?:\(\d*\))?|now\(\)|b'[01]+'|x'[0-9a-f]*')$/i;function t(t,n){let r=t.trim();return r===``?n(``):e.test(r)||/^'.*'$/s.test(r)||/^".*"$/s.test(r)||r.includes(`(`)||r.includes(`::`)?r:n(r)}function n(e,n,r){let i=n.upperCaseTypes?e.type.toUpperCase():e.type;return e.nullable?n.modify===`mssql`&&(i+=` NULL`):i+=` NOT NULL`,e.defaultValue!==null&&!/auto_increment|identity/i.test(e.extra)&&(i+=` DEFAULT ${t(e.defaultValue,r)}`),n.mysqlAttributes&&(/auto_increment/i.test(e.extra)&&(i+=` AUTO_INCREMENT`),e.comment&&(i+=` COMMENT ${r(e.comment)}`)),i}function r({quoteIdentifier:e,quoteLiteral:r,qualify:i},a){let o=e=>n(e,a,r),s=(t,n)=>a.qualifiedIndexNames?i(t,n):e(n);return{addColumn(t,n,r){let s=`${e(r.name)} ${o(r)}`;return a.addColumn===`ADD (`?`ALTER TABLE ${i(t,n)} ADD (${s});`:`ALTER TABLE ${i(t,n)} ${a.addColumn} ${s};`},alterColumn(n,s,c){let l=i(n,s),u=e(c.name);switch(a.modify){case`mysql`:return`ALTER TABLE ${l} MODIFY COLUMN ${u} ${o(c)};`;case`oracle`:return`ALTER TABLE ${l} MODIFY (${u} ${o(c)});`;case`mssql`:return`ALTER TABLE ${l} ALTER COLUMN ${u} ${c.type}${c.nullable?` NULL`:` NOT NULL`};`;case`postgres`:return`ALTER TABLE ${l}\n ${[`ALTER COLUMN ${u} TYPE ${c.type}`,c.nullable?`ALTER COLUMN ${u} DROP NOT NULL`:`ALTER COLUMN ${u} SET NOT NULL`,c.defaultValue===null||/auto_increment|identity/i.test(c.extra)?`ALTER COLUMN ${u} DROP DEFAULT`:`ALTER COLUMN ${u} SET DEFAULT ${t(c.defaultValue,r)}`].join(`,
|
|
2
2
|
`)};`;case`none`:return null}},dropColumn(t,n,r){return`ALTER TABLE ${i(t,n)} DROP COLUMN ${e(r)};`},createIndex(t,n,r){let o=r.columns.map(e).join(`, `);if(r.type===`PRIMARY`)return`ALTER TABLE ${i(t,n)} ADD PRIMARY KEY (${o});`;let c=r.type===`UNIQUE`?`UNIQUE `:r.type===`FULLTEXT`&&a.fulltext?`FULLTEXT `:``,l=a.unqualifiedIndexTarget?e(n):i(t,n);return`CREATE ${c}INDEX ${s(t,r.name)} ON ${l} (${o});`},dropIndex(t,n,r){return a.dropIndexOnTable?`DROP INDEX ${e(r)} ON ${i(t,n)};`:`DROP INDEX ${s(t,r)};`},insertRows(t,n,o,s){let c=i(t,n),l=o.map(e).join(`, `),u=s.map(e=>`(${e.map(r).join(`, `)})`);return a.multiRowInsert?`INSERT INTO ${c} (${l}) VALUES\n${u.join(`,
|
|
3
3
|
`)};`:`INSERT ALL\n${u.map(e=>` INTO ${c} (${l}) VALUES ${e}`).join(`
|
|
4
|
-
`)}\nSELECT 1 FROM DUAL;`}}}var i={DATABASE:`database`,SCHEMA:`schema`,TABLE:`table`,VIEW:`view`,COLUMN:`column`,INDEX:`index`,PROCEDURE:`procedure`,FUNCTION:`function`,TRIGGER:`trigger`,EVENT:`event`,FOLDER:`folder`,USER:`user`};function a(e,t,n){let r=`${t}:${n.replaceAll(`/`,`⁄`)}`;return e?`${e}/${r}`:r}function o(e,t,n,r,i){return{id:a(e,t,n),type:t,text:n,isLeaf:r,isExpanded:!1,isLoading:!1,children:[],metadata:i}}var s=[{text:`Tables`,type:`TABLE`},{text:`Views`,type:`VIEW`},{text:`Procedures`,type:`PROCEDURE`,capability:`procedures`},{text:`Functions`,type:`FUNCTION`,capability:`functions`},{text:`Triggers`,type:`TRIGGER`,capability:`triggers`},{text:`Events`,type:`EVENT`,capability:`events`}],c=[`Columns`,`Indexes`],l={TABLE:i.TABLE,VIEW:i.VIEW,PROCEDURE:i.PROCEDURE,FUNCTION:i.FUNCTION,TRIGGER:i.TRIGGER,EVENT:i.EVENT};function u(e){return s.find(t=>t.type===e).text}function ee(e){return s.filter(t=>!t.capability||e.capabilities[t.capability]).map(e=>e.text)}function te(e,t,n){return ee(e).map(e=>o(t,i.FOLDER,e,!1,{...n,countable:!0}))}async function ne({engine:e,run:t},n){let{introspect:r}=e,a=n.metadata?.database??``,s={database:a,catalog:n.metadata?.catalog},c=(e,t,r)=>o(n.id,l[e],t,!0,{...s,...r});switch(n.text){case`Tables`:return(await r.listTables(t,a)).map(e=>o(n.id,i.TABLE,e.name,!1,{...s,table:e.name}));case`Views`:return(await r.listViews(t,a)).map(e=>c(`VIEW`,e));case`Procedures`:return(await r.listProcedures(t,a)).map(e=>c(`PROCEDURE`,e));case`Functions`:return(await r.listFunctions(t,a)).map(e=>c(`FUNCTION`,e));case`Triggers`:return r.listTriggerDetails?(await r.listTriggerDetails(t,a)).map(e=>c(`TRIGGER`,e.name,{table:e.table})):(await r.listTriggers(t,a)).map(e=>c(`TRIGGER`,e));case`Events`:return(await r.listEvents(t,a)).map(e=>c(`EVENT`,e));default:return[]}}function re(e){let t={database:e.metadata?.database,catalog:e.metadata?.catalog,table:e.text};return c.map(n=>o(e.id,i.FOLDER,n,!1,t))}async function ie({engine:e,run:t},n){let r=n.metadata?.database??``,a=n.metadata?.table;if(!a)return null;let s={database:r,catalog:n.metadata?.catalog,table:a};switch(n.text){case`Columns`:return(await e.introspect.listColumns(t,r,a)).map(e=>{let t=e.extra?` [${e.extra}]`:``;return o(n.id,i.COLUMN,`${e.name} ${e.type}${t}`,!0,{...s,column:e.name,key:e.key})});case`Indexes`:return(await e.introspect.listIndexes(t,r,a)).map(e=>o(n.id,i.INDEX,`${e.name} (${e.columns.join(`, `)})`,!0,{...s,index:e.name}));default:return null}}async function ae(e,t){switch(t.type){case i.FOLDER:return await ie(e,t)??ne(e,t);case i.TABLE:return re(t);default:return null}}function oe(e,t,n){let r=a(e,i.FOLDER,u(t));return[e,r,a(r,l[t],n)]}var se={async loadRoot({engine:e,run:t}){return(await e.introspect.listDatabases(t)).map(e=>o(null,i.DATABASE,e,!1,{database:e}))},async loadChildren(e,t){return t.type===i.DATABASE?te(e.engine,t.id,{database:t.text}):await ae(e,t)??[]},objectPath(e,t,n){return oe(a(null,i.DATABASE,e),t,n)},namespacePath(e){return[a(null,i.DATABASE,e)]}},ce=class extends Error{constructor(e,t){super(`${e} does not support ${t}`),this.name=`UnsupportedQueryError`}};function le(e,t,...n){let r=t.identifierQuote,i=t.identifierQuoteClose??r;return e.replace(/(.?)\{(\d+)\}(.?)/gs,(e,a,o,s)=>{let c=parseInt(o,10);if(c>=n.length)return e;let l=n[c];return a===r&&s===i?`${a}${l.replaceAll(i,i+i)}${s}`:a&&a===s&&t.stringQuotes.includes(a)?`${a}${d(l,a,t.backslashEscapes)}${s}`:`${a}${l}${s}`})}function d(e,t,n){let r=n?e.replaceAll(`\\`,`\\\\`):e;return r=r.replaceAll(t,t+t),r}function f(e){return String(e).padStart(2,`0`)}function ue(e){return`${e.getFullYear()}-${f(e.getMonth()+1)}-${f(e.getDate())} ${f(e.getHours())}:${f(e.getMinutes())}:${f(e.getSeconds())}`}var de=/^(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})/,fe=e=>Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``),pe=e=>`X'${e}'`;function me(e,t,n=!1,r=pe){if(e==null)return`NULL`;if(e instanceof Uint8Array)return r(fe(e));if(typeof e==`number`)return Number.isFinite(e)?String(e):`NULL`;if(typeof e==`bigint`)return e.toString();if(typeof e==`boolean`)return n?e?`TRUE`:`FALSE`:e?`1`:`0`;if(e instanceof Date)return`'${ue(e)}'`;let i;if(typeof e==`object`)try{i=JSON.stringify(e)}catch{i=String(e)}else{i=String(e);let t=i.match(de);t&&(i=`${t[1]} ${t[2]}`)}return`'${d(i,`'`,t)}'`}function p(e){let t=e.fields.map(e=>e.name);return e.records.map(e=>{let n={};return t.forEach((t,r)=>{n[t]=e[r]}),n})}function m(e,t=``){return e==null?t:String(e)}function h(e){return e==null?null:String(e)}function g(e){if(e==null||e===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function _(e,t){return e.trim()||t}function v(e){let t=e.identifierQuote,n=e.identifierQuoteClose??t,r=e=>`${t}${e.replaceAll(n,n+n)}${n}`,i=t=>me(t,e.syntax.backslashEscapes,e.booleanKeywords??!1,e.binaryLiteral),a=(e,t)=>e?`${r(e)}.${r(t)}`:r(t),o={identifierQuote:t,identifierQuoteClose:n,stringQuotes:e.syntax.doubleQuoteIsIdentifier?[`'`]:[`'`,`"`],backslashEscapes:e.syntax.backslashEscapes};return{id:e.id,label:e.label,capabilities:e.capabilities,introspect:e.introspect,tree:e.tree??se,defaultPort:e.defaultPort,syntax:e.syntax,limitClause:t=>e.syntax.limitStyle===`top`?`OFFSET
|
|
4
|
+
`)}\nSELECT 1 FROM DUAL;`}}}var i={DATABASE:`database`,SCHEMA:`schema`,TABLE:`table`,VIEW:`view`,COLUMN:`column`,INDEX:`index`,PROCEDURE:`procedure`,FUNCTION:`function`,TRIGGER:`trigger`,EVENT:`event`,FOLDER:`folder`,USER:`user`};function a(e,t,n){let r=`${t}:${n.replaceAll(`/`,`⁄`)}`;return e?`${e}/${r}`:r}function o(e,t,n,r,i){return{id:a(e,t,n),type:t,text:n,isLeaf:r,isExpanded:!1,isLoading:!1,children:[],metadata:i}}var s=[{text:`Tables`,type:`TABLE`},{text:`Views`,type:`VIEW`},{text:`Procedures`,type:`PROCEDURE`,capability:`procedures`},{text:`Functions`,type:`FUNCTION`,capability:`functions`},{text:`Triggers`,type:`TRIGGER`,capability:`triggers`},{text:`Events`,type:`EVENT`,capability:`events`}],c=[`Columns`,`Indexes`],l={TABLE:i.TABLE,VIEW:i.VIEW,PROCEDURE:i.PROCEDURE,FUNCTION:i.FUNCTION,TRIGGER:i.TRIGGER,EVENT:i.EVENT};function u(e){return s.find(t=>t.type===e).text}function ee(e){return s.filter(t=>!t.capability||e.capabilities[t.capability]).map(e=>e.text)}function te(e,t,n){return ee(e).map(e=>o(t,i.FOLDER,e,!1,{...n,countable:!0}))}async function ne({engine:e,run:t},n){let{introspect:r}=e,a=n.metadata?.database??``,s={database:a,catalog:n.metadata?.catalog},c=(e,t,r)=>o(n.id,l[e],t,!0,{...s,...r});switch(n.text){case`Tables`:return(await r.listTables(t,a)).map(e=>o(n.id,i.TABLE,e.name,!1,{...s,table:e.name}));case`Views`:return(await r.listViews(t,a)).map(e=>c(`VIEW`,e));case`Procedures`:return(await r.listProcedures(t,a)).map(e=>c(`PROCEDURE`,e));case`Functions`:return(await r.listFunctions(t,a)).map(e=>c(`FUNCTION`,e));case`Triggers`:return r.listTriggerDetails?(await r.listTriggerDetails(t,a)).map(e=>c(`TRIGGER`,e.name,{table:e.table})):(await r.listTriggers(t,a)).map(e=>c(`TRIGGER`,e));case`Events`:return(await r.listEvents(t,a)).map(e=>c(`EVENT`,e));default:return[]}}function re(e){let t={database:e.metadata?.database,catalog:e.metadata?.catalog,table:e.text};return c.map(n=>o(e.id,i.FOLDER,n,!1,t))}async function ie({engine:e,run:t},n){let r=n.metadata?.database??``,a=n.metadata?.table;if(!a)return null;let s={database:r,catalog:n.metadata?.catalog,table:a};switch(n.text){case`Columns`:return(await e.introspect.listColumns(t,r,a)).map(e=>{let t=e.extra?` [${e.extra}]`:``;return o(n.id,i.COLUMN,`${e.name} ${e.type}${t}`,!0,{...s,column:e.name,key:e.key})});case`Indexes`:return(await e.introspect.listIndexes(t,r,a)).map(e=>o(n.id,i.INDEX,`${e.name} (${e.columns.join(`, `)})`,!0,{...s,index:e.name}));default:return null}}async function ae(e,t){switch(t.type){case i.FOLDER:return await ie(e,t)??ne(e,t);case i.TABLE:return re(t);default:return null}}function oe(e,t,n){let r=a(e,i.FOLDER,u(t));return[e,r,a(r,l[t],n)]}var se={async loadRoot({engine:e,run:t}){return(await e.introspect.listDatabases(t)).map(e=>o(null,i.DATABASE,e,!1,{database:e}))},async loadChildren(e,t){return t.type===i.DATABASE?te(e.engine,t.id,{database:t.text}):await ae(e,t)??[]},objectPath(e,t,n){return oe(a(null,i.DATABASE,e),t,n)},namespacePath(e){return[a(null,i.DATABASE,e)]}},ce=class extends Error{constructor(e,t){super(`${e} does not support ${t}`),this.name=`UnsupportedQueryError`}};function le(e,t,...n){let r=t.identifierQuote,i=t.identifierQuoteClose??r;return e.replace(/(.?)\{(\d+)\}(.?)/gs,(e,a,o,s)=>{let c=parseInt(o,10);if(c>=n.length)return e;let l=n[c];return a===r&&s===i?`${a}${l.replaceAll(i,i+i)}${s}`:a&&a===s&&t.stringQuotes.includes(a)?`${a}${d(l,a,t.backslashEscapes)}${s}`:`${a}${l}${s}`})}function d(e,t,n){let r=n?e.replaceAll(`\\`,`\\\\`):e;return r=r.replaceAll(t,t+t),r}function f(e){return String(e).padStart(2,`0`)}function ue(e){return`${e.getFullYear()}-${f(e.getMonth()+1)}-${f(e.getDate())} ${f(e.getHours())}:${f(e.getMinutes())}:${f(e.getSeconds())}`}var de=/^(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})/,fe=e=>Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``),pe=e=>`X'${e}'`;function me(e,t,n=!1,r=pe){if(e==null)return`NULL`;if(e instanceof Uint8Array)return r(fe(e));if(typeof e==`number`)return Number.isFinite(e)?String(e):`NULL`;if(typeof e==`bigint`)return e.toString();if(typeof e==`boolean`)return n?e?`TRUE`:`FALSE`:e?`1`:`0`;if(e instanceof Date)return`'${ue(e)}'`;let i;if(typeof e==`object`)try{i=JSON.stringify(e)}catch{i=String(e)}else{i=String(e);let t=i.match(de);t&&(i=`${t[1]} ${t[2]}`)}return`'${d(i,`'`,t)}'`}function p(e){let t=e.fields.map(e=>e.name);return e.records.map(e=>{let n={};return t.forEach((t,r)=>{n[t]=e[r]}),n})}function m(e,t=``){return e==null?t:String(e)}function h(e){return e==null?null:String(e)}function g(e){if(e==null||e===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function _(e,t){return e.trim()||t}function v(e){let t=e.identifierQuote,n=e.identifierQuoteClose??t,r=e=>`${t}${e.replaceAll(n,n+n)}${n}`,i=t=>me(t,e.syntax.backslashEscapes,e.booleanKeywords??!1,e.binaryLiteral),a=(e,t)=>e?`${r(e)}.${r(t)}`:r(t),o={identifierQuote:t,identifierQuoteClose:n,stringQuotes:e.syntax.doubleQuoteIsIdentifier?[`'`]:[`'`,`"`],backslashEscapes:e.syntax.backslashEscapes};return{id:e.id,label:e.label,capabilities:e.capabilities,introspect:e.introspect,tree:e.tree??se,defaultPort:e.defaultPort,syntax:e.syntax,limitClause:(t,n=0)=>e.syntax.limitStyle===`top`?`OFFSET ${n} ROWS FETCH NEXT ${t} ROWS ONLY`:e.syntax.limitStyle===`fetch`?n>0?`OFFSET ${n} ROWS FETCH NEXT ${t} ROWS ONLY`:`FETCH FIRST ${t} ROWS ONLY`:n>0?`LIMIT ${t} OFFSET ${n}`:`LIMIT ${t}`,quoteIdentifier:r,quoteLiteral:i,qualify:a,ddl:e.ddl({quoteIdentifier:r,quoteLiteral:i,qualify:a}),rowIdExpression:e.rowIdExpression,hasQuery(t){return e.queries[t]!==void 0},getQuery(t,...n){let r=e.queries[t];if(r===void 0)throw new ce(e.label,t);return le(r,o,...n)},getDataTypes:()=>e.dataTypes,getDataTypesToJSON:()=>e.dataTypes.map(e=>[e,e]),getFunctions:()=>e.functions,getReservedWords:()=>e.reservedWords}}var y=e=>`\`${e.replaceAll("`","``")}\``,b=(e,t)=>`${y(e)}.${y(t)}`,x=e=>`'${e.replace(/\\/g,`\\\\`).replace(/'/g,`''`)}'`;function he(e){let t=m(e).toUpperCase();return t===`PRI`||t===`UNI`||t===`MUL`?t:``}function ge(e,t,n){if(e===`PRIMARY`)return`PRIMARY`;let r=m(n).toUpperCase();return r===`FULLTEXT`?`FULLTEXT`:r===`SPATIAL`?`SPATIAL`:Number(t)===0?`UNIQUE`:`INDEX`}function _e(e){return{name:m(e.Name??e.TABLE_NAME),engine:h(e.Engine??e.ENGINE),rows:g(e.Rows??e.TABLE_ROWS),collation:h(e.Collation??e.TABLE_COLLATION),autoIncrement:h(e.Auto_increment??e.AUTO_INCREMENT),comment:m(e.Comment??e.TABLE_COMMENT),createTime:h(e.Create_time??e.CREATE_TIME),updateTime:h(e.Update_time??e.UPDATE_TIME),dataLength:g(e.Data_length??e.DATA_LENGTH)}}function ve(e){return{name:m(e.Field??e.COLUMN_NAME),type:m(e.Type??e.COLUMN_TYPE),nullable:m(e.Null??e.IS_NULLABLE).toUpperCase()===`YES`,key:he(e.Key??e.COLUMN_KEY),defaultValue:h(e.Default??e.COLUMN_DEFAULT),extra:m(e.Extra??e.EXTRA),comment:m(e.Comment??e.COLUMN_COMMENT),collation:h(e.Collation??e.COLLATION_NAME)}}function ye(e){let t=new Map;for(let n of e){let e=m(n.Table??n.TABLE_NAME),r=m(n.Key_name??n.INDEX_NAME),i=m(n.Column_name??n.COLUMN_NAME),a=t.get(e);a||(a=new Map,t.set(e,a));let o=a.get(r);o?o.columns.push(i):a.set(r,{name:r,type:ge(r,n.Non_unique??n.NON_UNIQUE,n.Index_type??n.INDEX_TYPE),columns:[i]})}return new Map(Array.from(t,([e,t])=>[e,Array.from(t.values())]))}var be={TABLE:`TABLE`,VIEW:`VIEW`,PROCEDURE:`PROCEDURE`,FUNCTION:`FUNCTION`,TRIGGER:`TRIGGER`,EVENT:`EVENT`},xe={async listDatabases(e){return(await e(`SHOW DATABASES`)).records.map(e=>m(e[0]))},async listTables(e,t){return p(await e(`SHOW TABLE STATUS FROM ${y(t)} WHERE ENGINE IS NOT NULL`,t)).map(_e)},async listViews(e,t){return(await e(`SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = ${x(t)} ORDER BY TABLE_NAME`,t)).records.map(e=>m(e[0]))},async listProcedures(e,t){return p(await e(`SHOW PROCEDURE STATUS WHERE DB = ${x(t)}`,t)).map(e=>m(e.Name))},async listFunctions(e,t){return p(await e(`SHOW FUNCTION STATUS WHERE DB = ${x(t)}`,t)).map(e=>m(e.Name))},async listTriggers(e,t){return p(await e(`SHOW TRIGGERS FROM ${y(t)}`,t)).map(e=>m(e.Trigger))},async listEvents(e,t){return(await e(`SELECT EVENT_NAME FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA = ${x(t)} ORDER BY EVENT_NAME`,t)).records.map(e=>m(e[0]))},async listColumns(e,t,n){return p(await e(`SHOW FULL COLUMNS FROM ${b(t,n)}`,t)).map(ve)},async listIndexes(e,t,n){return ye(p(await e(`SHOW INDEX FROM ${b(t,n)}`,t))).get(n)??[]},async listAllColumns(e,t){let n=await e(`SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT,
|
|
5
5
|
EXTRA, COLUMN_COMMENT, COLLATION_NAME
|
|
6
6
|
FROM information_schema.COLUMNS
|
|
7
7
|
WHERE TABLE_SCHEMA = ${x(t)}
|