db-studio 1.6.2 → 1.7.0

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "db-studio",
3
3
  "type": "module",
4
- "version": "1.6.2",
4
+ "version": "1.7.0",
5
5
  "description": "Modern database client for PostgreSQL with spreadsheet-like grid, AI-powered SQL assistance, ER diagrams, fast data browsing and editing. CLI tool, upcoming desktop & web versions.",
6
6
  "keywords": [
7
7
  "database client",
@@ -57,6 +57,7 @@
57
57
  "commander": "^14.0.3",
58
58
  "dotenv": "^17.3.1",
59
59
  "hono": "^4.10.4",
60
+ "mongodb": "^7.1.1",
60
61
  "mssql": "^12.2.0",
61
62
  "mysql2": "^3.18.2",
62
63
  "pg": "^8.13.1",
@@ -76,4 +77,4 @@
76
77
  "typescript": "^5.8.3",
77
78
  "vitest": "^4.0.17"
78
79
  }
79
- }
80
+ }
@@ -1 +0,0 @@
1
- import{j as r}from"./radix-ui-c-7GrHMM.js";import{R as t}from"./runner-tab-C3hNjCPD.js";import{aa as m}from"./index-CJ0NUCyi.js";import"./icons-B2mES2Qq.js";import"./react-dom-BcUZDRtY.js";import"./monaco-editor-BMj4E99D.js";import"./tanstack-BaWakKkc.js";import"./index-CVuaUgmF.js";import"./format-cell-value-Cn3RA9a1.js";import"./tooltip-BoaJ5LJp.js";import"./queries.store-Cfzf5198.js";function j(){const{queryId:o}=m.useParams();return r.jsx(t,{queryId:o})}export{j as component};
@@ -1,9 +0,0 @@
1
- import{j as O}from"./radix-ui-c-7GrHMM.js";import{l as e,e as L,K as l,a as N}from"./monaco-editor-BMj4E99D.js";import{r as A}from"./icons-B2mES2Qq.js";import{t as S}from"./index-CJ0NUCyi.js";import"./react-dom-BcUZDRtY.js";import"./tanstack-BaWakKkc.js";const g=["SELECT","FROM","WHERE","INSERT","UPDATE","DELETE","CREATE","DROP","ALTER","TABLE","INDEX","VIEW","DATABASE","SCHEMA","FUNCTION","PROCEDURE","TRIGGER","AND","OR","NOT","IN","BETWEEN","LIKE","IS","NULL","JOIN","LEFT","RIGHT","INNER","OUTER","CROSS","ON","USING","GROUP","BY","HAVING","ORDER","ASC","DESC","LIMIT","OFFSET","UNION","INTERSECT","EXCEPT","AS","DISTINCT","ALL","EXISTS","CASE","WHEN","THEN","ELSE","END","WITH","RECURSIVE","PRIMARY","KEY","FOREIGN","REFERENCES","UNIQUE","CHECK","DEFAULT","CASCADE","RESTRICT","NO","ACTION","SET","CONSTRAINT","BEGIN","COMMIT","ROLLBACK","SAVEPOINT","TRANSACTION","GRANT","REVOKE","PRIVILEGES","TO","RETURNING"],G=["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%",">>","<<","+=","-=","*=","/=","&=","|=","^=","%="],U=["COUNT","SUM","AVG","MIN","MAX","COALESCE","NULLIF","CAST","CONCAT","SUBSTRING","LOWER","UPPER","TRIM","LENGTH","NOW","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","EXTRACT","DATE_TRUNC","AGE","ARRAY_AGG","JSON_BUILD_OBJECT","JSON_AGG","ROW_NUMBER","RANK","DENSE_RANK","LAG","LEAD","FIRST_VALUE","LAST_VALUE","STRING_AGG","GENERATE_SERIES"],b=["INTEGER","INT","SMALLINT","BIGINT","DECIMAL","NUMERIC","REAL","DOUBLE","PRECISION","SERIAL","BIGSERIAL","VARCHAR","CHAR","TEXT","BOOLEAN","BOOL","DATE","TIME","TIMESTAMP","TIMESTAMPTZ","INTERVAL","UUID","JSON","JSONB","ARRAY","BYTEA","INET","CIDR"],f=["SELECT","FROM","WHERE","INSERT INTO","UPDATE","DELETE FROM","CREATE TABLE","DROP TABLE","ALTER TABLE","JOIN","LEFT JOIN","RIGHT JOIN","INNER JOIN","GROUP BY","ORDER BY","HAVING","LIMIT"],D=["COUNT(*)","SUM()","AVG()","MIN()","MAX()","COALESCE()","CONCAT()","NOW()","CURRENT_DATE","CURRENT_TIMESTAMP","STRING_AGG()","ARRAY_AGG()","JSON_AGG()"],M=["INTEGER","VARCHAR","TEXT","BOOLEAN","TIMESTAMP","DATE","JSON","JSONB","UUID","SERIAL","BIGSERIAL"],V=({initialQuery:d,queryId:R,savedQuery:I,onQueryChange:m,onUnsavedChanges:E,onExecuteQuery:u,onSaveQuery:c})=>{const a=A.useRef(null),p=A.useRef(null);return A.useEffect(()=>{if(!a.current)return;e.register({id:"pgsql"}),e.registerDocumentFormattingEditProvider("pgsql",{provideDocumentFormattingEdits:t=>{const T=t.getValue().replace(/\s+/g," ").replace(/\s*,\s*/g,`,
2
- `).replace(/\b(SELECT|FROM|WHERE|JOIN|LEFT JOIN|RIGHT JOIN|INNER JOIN|GROUP BY|ORDER BY|HAVING|LIMIT|OFFSET)\b/gi,`
3
- $1`).replace(/\b(AND|OR)\b/gi,`
4
- $1`).trim().split(`
5
- `).map(o=>{const i=o.trim();return i.startsWith("AND")||i.startsWith("OR")||/^[^A-Z]/.test(i)?` ${i}`:i}).join(`
6
- `);return[{range:t.getFullModelRange(),text:T}]}}),e.setMonarchTokensProvider("pgsql",{defaultToken:"",tokenPostfix:".sql",ignoreCase:!0,keywords:g,operators:G,builtinFunctions:U,builtinTypes:b,tokenizer:{root:[{include:"@comments"},{include:"@whitespace"},{include:"@numbers"},{include:"@strings"},{include:"@complexIdentifiers"},[/[;,.]/,"delimiter"],[/[()]/,"@brackets"],[/[\w@#$]+/,{cases:{"@keywords":"keyword","@operators":"operator","@builtinFunctions":"predefined","@builtinTypes":"type","@default":"identifier"}}],[/[<>=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],comments:[[/--+.*/,"comment"],[/\/\*/,{token:"comment.quote",next:"@comment"}]],comment:[[/[^*/]+/,"comment"],[/\*\//,{token:"comment.quote",next:"@pop"}],[/./,"comment"]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][-+]?\d+)?/,"number"]],strings:[[/'/,{token:"string",next:"@string"}],[/"/,{token:"string.double",next:"@stringDouble"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],stringDouble:[[/[^"]+/,"string.double"],[/""/,"string.double"],[/"/,{token:"string.double",next:"@pop"}]],complexIdentifiers:[[/"/,{token:"identifier.quote",next:"@quotedIdentifier"}]],quotedIdentifier:[[/[^"]+/,"identifier"],[/""/,"identifier"],[/"/,{token:"identifier.quote",next:"@pop"}]]}}),e.registerCompletionItemProvider("pgsql",{provideCompletionItems:(t,s)=>{const T=t.getWordUntilPosition(s),o={startLineNumber:s.lineNumber,endLineNumber:s.lineNumber,startColumn:T.startColumn,endColumn:T.endColumn};return{suggestions:[...f.map(r=>({label:r,kind:e.CompletionItemKind.Keyword,insertText:r,range:o})),...D.map(r=>({label:r,kind:e.CompletionItemKind.Function,insertText:r.includes("(*)")?r:r.replace("()","($0)"),insertTextRules:e.CompletionItemInsertTextRule.InsertAsSnippet,range:o})),...M.map(r=>({label:r,kind:e.CompletionItemKind.TypeParameter,insertText:r,range:o})),{label:"select-template",kind:e.CompletionItemKind.Snippet,insertText:["SELECT ${1:columns}","FROM ${2:table}","WHERE ${3:condition};"].join(`
7
- `),insertTextRules:e.CompletionItemInsertTextRule.InsertAsSnippet,documentation:"SELECT statement template",range:o},{label:"create-table-template",kind:e.CompletionItemKind.Snippet,insertText:["CREATE TABLE ${1:table_name} ("," ${2:id} SERIAL PRIMARY KEY,"," ${3:column_name} ${4:VARCHAR(255)} ${5:NOT NULL},"," created_at TIMESTAMP DEFAULT NOW()",");"].join(`
8
- `),insertTextRules:e.CompletionItemInsertTextRule.InsertAsSnippet,documentation:"CREATE TABLE template",range:o},{label:"insert-template",kind:e.CompletionItemKind.Snippet,insertText:["INSERT INTO ${1:table} (${2:columns})","VALUES (${3:values})","RETURNING *;"].join(`
9
- `),insertTextRules:e.CompletionItemInsertTextRule.InsertAsSnippet,documentation:"INSERT statement template",range:o}]}}});const n=L.create(a.current,{value:d,language:"pgsql",theme:"vs-dark",fontSize:14,minimap:{enabled:!1},lineNumbers:"on",roundedSelection:!0,scrollBeyondLastLine:!0,scrollbar:{horizontal:"hidden",vertical:"hidden",useShadows:!1,verticalHasArrows:!1,horizontalHasArrows:!1,arrowSize:0},automaticLayout:!0,tabSize:4,insertSpaces:!0,wordWrap:"on",folding:!0,bracketPairColorization:{enabled:!0},suggest:{showKeywords:!0,showSnippets:!0},quickSuggestions:{other:!0,comments:!1,strings:!1}});if(p.current=n,n.addCommand(l.CtrlCmd|N.Enter,()=>{const t=n.getValue();if(!t.trim()){S.error("Query is empty!");return}u(t)}),n.addCommand(l.CtrlCmd|l.Shift|N.KeyF,()=>{n.trigger("keyboard","editor.action.formatDocument",{}),S.success("Query formatted")}),n.addCommand(l.CtrlCmd|N.KeyS,()=>{c()}),m(n.getValue()),R){const t=n.getValue();E(t!==I)}else E(!1);const C=n.onDidChangeModelContent(()=>{const t=n.getValue();if(m(t),!R){E(!1);return}E(t!==I)});return()=>{C.dispose(),n.dispose()}},[d,R,I,m,E,u]),O.jsx("div",{ref:a,className:"flex-1 min-h-0 overflow-y-scroll"})};export{V as CodeEditor};
@@ -1 +0,0 @@
1
- import{j as o}from"./radix-ui-c-7GrHMM.js";import{R as t}from"./runner-tab-C3hNjCPD.js";import"./icons-B2mES2Qq.js";import"./react-dom-BcUZDRtY.js";import"./monaco-editor-BMj4E99D.js";import"./tanstack-BaWakKkc.js";import"./index-CJ0NUCyi.js";import"./index-CVuaUgmF.js";import"./format-cell-value-Cn3RA9a1.js";import"./tooltip-BoaJ5LJp.js";import"./queries.store-Cfzf5198.js";function f(){return o.jsx(t,{})}export{f as component};